blob: 162d7c1ccf8469d820b63e067ff37cac8061bd8a [file] [log] [blame]
Dennis Syrovatskyf3c57662005-11-02 03:53:04 +00001/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.
2*
3* This is free software; you can redistribute it and/or modify
4* it under the terms of the GNU General Public License as published by
5* the Free Software Foundation; either version 2 of the License, or
6* (at your option) any later version.
7*
8* This software is distributed in the hope that it will be useful,
9* but WITHOUT ANY WARRANTY; without even the implied warranty of
10* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11* GNU General Public License for more details.
12*
13* You should have received a copy of the GNU General Public License
14* along with this software; if not, write to the Free Software
15* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
16* USA.
17*
18* TightVNC distribution homepage on the Web: http://www.tightvnc.com/
19*
20*/
21
22// -=- FTListView.cxx
23
24#include <vncviewer/FTListView.h>
25
26using namespace rfb;
27using namespace rfb::win32;
28
29FTListView::FTListView(HWND hLV)
30{
31 m_hListView = hLV;
32 m_fileInfo.free();
33}
34
35FTListView::~FTListView()
36{
37 m_fileInfo.free();
38}
39
40
41bool
42FTListView::initialize()
43{
44 return false;
45}
46
47void
48FTListView::onGetDispInfo(NMLVDISPINFO *pDI)
49{
50 if (m_fileInfo.getFlagsAt(pDI->item.iItem) & FT_ATTR_DIR) {
51 pDI->item.iImage = 0;
52 } else {
53 pDI->item.iImage = 1;
54 }
55
56 switch (pDI->item.iSubItem)
57 {
58 case 0:
59 pDI->item.pszText = m_fileInfo.getNameAt(pDI->item.iItem);
60 break;
61 case 1:
62 {
63 unsigned int flags = m_fileInfo.getFlagsAt(pDI->item.iItem);
64 switch(flags & 0x000000FF)
65 {
66 case FT_ATTR_FILE:
67 {
68 char buf[32];
69 unsigned int size = m_fileInfo.getSizeAt(pDI->item.iItem);
70 sprintf(buf, "%u", size);
71 pDI->item.pszText = buf;
72 }
73 break;
74 case FT_ATTR_DIR:
75 pDI->item.pszText = "";
76 break;
77 default:
78 pDI->item.pszText = "Unspecified";
79 }
80 }
81 break;
82 case 2:
83 {
84 unsigned int data = m_fileInfo.getDataAt(pDI->item.iItem);
85 if (data == 0) {
86 pDI->item.pszText = "Unspecified";
87 } else {
88 FILETIME ft;
89 FolderManager fm;
90 fm.getFiletime(data, &ft);
91
92 SYSTEMTIME st;
93 FileTimeToSystemTime(&ft, &st);
94
95 char pDateTimeStr[1024];
96 char timeFmt[128];
97 GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT, timeFmt, 128);
98 char dateFmt[128];
99 GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, dateFmt, 128);
100
101 char timeStr[128];
102 GetTimeFormat(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &st, timeFmt, timeStr, 128);
103 char dateStr[128];
104 GetDateFormat(LOCALE_USER_DEFAULT, 0, &st, dateFmt, dateStr, 128);
105
106 sprintf(pDateTimeStr, "%s %s", dateStr, timeStr);
107 pDI->item.pszText = pDateTimeStr;
108 }
109 }
110 break;
111 default:
112 break;
113 }
114}
115
116void
117FTListView::addItems(FileInfo *pFI)
118{
119 m_fileInfo.add(pFI);
120 LVITEM LVItem;
121 LVItem.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE;
122 LVItem.state = 0;
123 LVItem.stateMask = 0;
124 for (unsigned int i = 0; i < m_fileInfo.getNumEntries(); i++) {
125 LVItem.iItem = i;
126 LVItem.iSubItem = 0;
127 LVItem.iImage = I_IMAGECALLBACK;
128 LVItem.pszText = LPSTR_TEXTCALLBACK;
129 ListView_InsertItem(m_hListView, &LVItem);
130 }
131}
132
133void
134FTListView::deleteAllItems()
135{
136 ListView_DeleteAllItems(m_hListView);
137 m_fileInfo.free();
138}
139
140char *
141FTListView::getActivateItemName(LPNMITEMACTIVATE lpnmia)
142{
143 return m_fileInfo.getNameAt(lpnmia->iItem);
144}
145
146int
147FTListView::getSelectedItems(FileInfo *pFI)
148{
149 int selCount = ListView_GetSelectedCount(m_hListView);
150 int selItem = ListView_GetSelectionMark(m_hListView);
151 if ((selCount < 1) || (selItem < 0)) return -1;
152
153 selItem = -1;
154 selItem = ListView_GetNextItem(m_hListView, selItem, LVNI_SELECTED);
155 do {
156 pFI->add(m_fileInfo.getFullDataAt(selItem));
157 selItem = ListView_GetNextItem(m_hListView, selItem, LVNI_SELECTED);
158 } while (selItem >= 0);
159
160 return selCount;
161}
162
163void
164FTListView::initImageList(HINSTANCE hInst)
165{
166 m_hImageList = ImageList_Create(16, 16, ILC_MASK, 2, 2);
167
168 HICON hiconItem = LoadIcon(hInst, MAKEINTRESOURCE(IDI_FTDIR));
169 ImageList_AddIcon(m_hImageList, hiconItem);
170 DestroyIcon(hiconItem);
171
172 hiconItem = LoadIcon(hInst, MAKEINTRESOURCE(IDI_FTFILE));
173 ImageList_AddIcon(m_hImageList, hiconItem);
174 DestroyIcon(hiconItem);
175
176 ListView_SetImageList(m_hListView, m_hImageList, LVSIL_SMALL);
177}