1 /*******************************************************************************
\r
2 TPI - flexible but useless plug-in framework.
\r
3 Copyright (C) 2002-2009 Silky
\r
5 This library is free software; you can redistribute it and/or modify it under
\r
6 the terms of the GNU Lesser General Public License as published by the Free
\r
7 Software Foundation; either version 2.1 of the License, or (at your option)
\r
10 This library is distributed in the hope that it will be useful, but WITHOUT
\r
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
\r
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
\r
15 You should have received a copy of the GNU Lesser General Public License along
\r
16 with this library; if not, write to the Free Software Foundation, Inc.,
\r
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
\r
20 *******************************************************************************/
\r
24 #include "cls_listctrl.h"
\r
25 #include "dlg_make.h"
\r
26 #include "frm_main.h"
\r
27 #include "functions.h"
\r
29 //******************************************************************************
\r
31 //******************************************************************************
\r
33 IMPLEMENT_DYNAMIC_CLASS(myListCtrl, wxListView)
\r
35 //******************************************************************************
\r
37 //******************************************************************************
\r
39 BEGIN_EVENT_TABLE(myListCtrl, wxListView)
\r
41 EVT_LIST_COL_CLICK(XRCID("ListView"), myListCtrl::OnColClick)
\r
44 //******************************************************************************
\r
46 //******************************************************************************
\r
48 wxString myListCtrl::OnGetItemText(long i, long column) const
\r
51 TPI_FILEINFO * fi = (TPI_FILEINFO *) this->apShowFile[i];
\r
55 return fi->fnFileName.GetFullName();
\r
57 return wxString::Format(wxString("%" wxLongLongFmtSpec "u"), fi->nUnpackedSize);
\r
59 return wxString::Format(wxString("%" wxLongLongFmtSpec "u"), fi->nPackedSize);
\r
61 return wxString::Format(wxT("%3.1f%%"), fi->wCompressRatio / 10.0);
\r
63 return fi->szMethod;
\r
67 wxString szTemp = wxT("---w-");
\r
68 szTemp[0] = fi->dwAttribute & TPI_ATTRIBUTE_DIRECTORY ? wxT('d') :
\r
69 fi->dwAttribute & TPI_ATTRIBUTE_ARCHIVE ? wxT('a') : wxT('-');
\r
70 szTemp[1] = fi->dwAttribute & TPI_ATTRIBUTE_SYSTEM ? wxT('s') : wxT('-');
\r
71 szTemp[2] = fi->dwAttribute & TPI_ATTRIBUTE_HIDDEN ? wxT('h') : wxT('-');
\r
72 szTemp[3] = fi->dwAttribute & TPI_ATTRIBUTE_READONLY ? wxT('r') : wxT('w');
\r
73 szTemp[4] = fi->dwAttribute & TPI_ATTRIBUTE_ENCRYPTED ? wxT('g') : wxT('-');
\r
76 return wxString::Format(wxT("%o"), fi->wPermission);
\r
80 return fi->tmModify.Format(_("%Y/%m/%d %H:%M:%S"));
\r
82 return fi->fnFileName.GetPath();
\r
84 return GetFileTypeName(fi->fnFileName);
\r
86 return wxString::Format(wxString("%" wxLongLongFmtSpec "u"), fi->nFileId);
\r
88 return fi->szComment;
\r
90 return wxEmptyString;
\r
94 int myListCtrl::OnGetItemImage(long i) const
\r
96 wxIcon icon = GetFileTypeIcon(((TPI_FILEINFO *) this->apShowFile[i])->fnFileName);
\r
97 g_hIconLL.Add(icon);
\r
98 return g_hIconLS.Add(myRescaleIcon(icon));
\r
101 wxListItemAttr * myListCtrl::OnGetItemAttr(long i) const
\r
103 TPI_FILEINFO * fi = (TPI_FILEINFO *) this->apShowFile[i];
\r
105 fi->eDanger ? (wxListItemAttr *) & this->atDangerItem :
\r
106 fi->dwAttribute & TPI_ATTRIBUTE_ENCRYPTED ? (wxListItemAttr *) & this->atEncryptedItem : nullptr;
\r
109 void myListCtrl::OnColClick(wxListEvent& e)
\r
111 g_nSortColumn = e.GetColumn();
\r
112 g_fSortAscend = ! (g_nSortColumn == e.GetColumn() && g_fSortAscend);
\r
115 size_t nCount = this->apShowFile.GetCount();
\r
116 this->apShowFile.Sort(& ListCtrlCompareProc);
\r
117 this->SetItemCount(nCount);
\r
118 this->RefreshItems(0, nCount - 1);
\r
121 //******************************************************************************
\r
123 //******************************************************************************
\r
125 #define NumCmp(member) (item1->member < item2->member) ? -1 : ((item1->member > item2->member) ? 1 : 0)
\r
127 int ListCtrlCompareProc(void ** pItem1, void ** pItem2)
\r
129 TPI_FILEINFO * item1 = (TPI_FILEINFO *) * pItem1, * item2 = (TPI_FILEINFO *) * pItem2;
\r
130 return (g_fSortAscend ? 1 : -1) * (
\r
131 g_nSortColumn == 0 ? ::wxStricmp(item1->fnFileName.GetFullName(), item2->fnFileName.GetFullName()) : // Filename
\r
132 g_nSortColumn == 1 ? NumCmp(nUnpackedSize) : // Unpacked
\r
133 g_nSortColumn == 2 ? NumCmp(nPackedSize) : // Packed
\r
134 g_nSortColumn == 3 ? NumCmp(wCompressRatio) : // Ratio
\r
135 g_nSortColumn == 6 ? NumCmp(tmModify) : // Last modified
\r
136 g_nSortColumn == 7 ? ::wxStricmp(item1->fnFileName.GetPath(), item2->fnFileName.GetPath()) : // Path
\r
137 g_nSortColumn == 8 ? ::wxStricmp(GetFileTypeName(item1->fnFileName), GetFileTypeName(item2->fnFileName)) : // Type
\r
138 g_nSortColumn == 9 ? NumCmp(nFileId) : // No
\r
139 g_nSortColumn == 10? ::wxStricmp(item1->szComment, item2->szComment) : // Comment
\r