Develop and Download Open Source Software

Browse CVS Repository

Contents of /tombo/Tombo/Src/BookMarkDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.5 - (show annotations) (download) (as text)
Mon Mar 28 18:32:49 2005 UTC (19 years ago) by hirami
Branch: MAIN
CVS Tags: Tombo_2_0a3, Tombo_2_0a2, Tombo_2_0a1, Tombo_1_17_1, B191, B192, B193, B194, B196, B197, B198, B199, B200, B201, B202, B203, B205, B206, B207, B208, B183, B181, B180, B187, B186, B184, B189, B188, B213, B212, B211, B217, B216, B215, B214, B219, B218, Tombo_2_0b2, Tombo_2_0b3, Tombo_2_0b1, Tombo_2_0b4, B228, B229, B226, B227, B224, B225, B222, B223, B220, B221, SNAPSHOT20051220, B231, B230, Tombo_1_15, Tombo_1_14, Tombo_1_17, Tombo_1_16, B179, HEAD
Branch point for: Tombo_1_17_1_branch
Changes since 1.4: +0 -1 lines
File MIME type: text/x-c++src
* Impliment caret positioning for YAE.

1 #include <windows.h>
2 #include <commctrl.h>
3 #include <tchar.h>
4 #include "DialogTemplate.h"
5 #include "TString.h"
6 #include "resource.h"
7 #include "Message.h"
8 #include "VarBuffer.h"
9 #include "BookMarkDlg.h"
10 #include "BookMark.h"
11
12 static BOOL GetLVItem(HWND hList, int iItem, int iSubItem, TString *pBuf);
13 static void LVSetSel(HWND hList, int iItem, BOOL bSet);
14
15 ////////////////////////////////////////////////////////////////
16 // ctor & dtor
17 ////////////////////////////////////////////////////////////////
18
19 BOOL BookMarkDlg::Init(BookMark *p)
20 {
21 pBookMark = p;
22 return TRUE;
23 }
24
25 static DlgMsgRes aMsgRes[] = {
26 { IDC_BMEDIT_UP, MSG_ID_DLG_BMEDIT_UP },
27 { IDC_BMEDIT_DOWN, MSG_ID_DLG_BMEDIT_DOWN },
28 { IDC_BMEDIT_DELETE, MSG_ID_DLG_BMEDIT_DELETE },
29 { IDOK, MSG_ID_DLG_CMN_OK },
30 { IDCANCEL, MSG_ID_DLG_CMN_CANCEL },
31 };
32
33 ////////////////////////////////////////////////////////////////
34 // Initialize dialog
35 ////////////////////////////////////////////////////////////////
36
37 void BookMarkDlg::InitDialog(HWND hDlg)
38 {
39 OverrideDlgMsg(hDlg, MSG_ID_DLG_BMEDIT_TITLE, aMsgRes, sizeof(aMsgRes) / sizeof(DlgMsgRes));
40
41 HWND hList = GetDlgItem(hDlg, IDC_BMEDIT_LIST);
42
43 // init listview
44 LV_COLUMN lvc;
45 lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
46 lvc.fmt = LVCFMT_LEFT;
47
48 lvc.cx = 100;
49 lvc.pszText = (LPTSTR)MSG_BMDLG_TITLE_NAME;
50 ListView_InsertColumn(hList, 0, &lvc);
51
52 lvc.cx = 150;
53 lvc.pszText = (LPTSTR)MSG_BMDLG_TITLE_PATH;
54 ListView_InsertColumn(hList, 1, &lvc);
55
56 // Insert item
57 DWORD n = pBookMark->NumItems();
58 for (DWORD i = 0; i < n; i++) {
59 const BookMarkItem *pItem = pBookMark->GetUnit(i);
60 InsertItem(hList, i, pItem);
61 }
62 }
63
64 BOOL BookMarkDlg::InsertItem(HWND hList, DWORD iPos, const BookMarkItem *pItem)
65 {
66 LV_ITEM li;
67 li.iItem = iPos;
68 li.mask = LVIF_TEXT;
69 li.pszText = pItem->pName;
70 li.cchTextMax = _tcslen(pItem->pName);
71 li.iSubItem = 0;
72 ListView_InsertItem(hList, &li);
73
74 li.mask = LVIF_TEXT;
75 li.pszText = pItem->pPath;
76 li.cchTextMax = _tcslen(pItem->pPath);
77 li.iSubItem = 1;
78 ListView_SetItem(hList, &li);
79 return TRUE;
80 }
81
82 ////////////////////////////////////////////////////////////////
83 // OK button
84 ////////////////////////////////////////////////////////////////
85
86 BOOL BookMarkDlg::OnOK()
87 {
88 pBookMark->Clear();
89
90 HWND hList = GetDlgItem(hDialog, IDC_BMEDIT_LIST);
91 int n = ListView_GetItemCount(hList);
92
93 TString sPath;
94 for (int i = 0; i < n; i++) {
95 if (!GetLVItem(hList, i, 1, &sPath)) return TRUE;
96 pBookMark->Assign(sPath.Get());
97 }
98
99 return TRUE;
100 }
101
102 ////////////////////////////////////////////////////////////////
103 // Command handler
104 ////////////////////////////////////////////////////////////////
105
106 BOOL BookMarkDlg::OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
107 {
108 switch(LOWORD(wParam)) {
109 case IDC_BMEDIT_UP:
110 return Command_UpDown(hDlg, -1);
111 case IDC_BMEDIT_DOWN:
112 return Command_UpDown(hDlg, 1);
113 case IDC_BMEDIT_DELETE:
114 return Command_Delete(hDlg);
115 }
116 return TRUE;
117 }
118
119
120 ////////////////////////////////////////////////////////////////
121 // swap position
122 ////////////////////////////////////////////////////////////////
123
124 BOOL BookMarkDlg::Command_UpDown(HWND hDlg, int iDelta)
125 {
126 HWND hList = GetDlgItem(hDlg, IDC_BMEDIT_LIST);
127 int iSel = ListView_GetNextItem(hList, -1, LVNI_SELECTED);
128
129 if (iSel + iDelta < 0 || iSel + iDelta >= (int)pBookMark->NumItems()) return TRUE;
130
131 TString sName1, sPath1;
132 TString sName2, sPath2;
133
134 // get data
135 if (!GetLVItem(hList, iSel, 0, &sName1) ||
136 !GetLVItem(hList, iSel, 1, &sPath1) ||
137 !GetLVItem(hList, iSel + iDelta, 0, &sName2) ||
138 !GetLVItem(hList, iSel + iDelta, 1, &sPath2)) return TRUE;
139
140 // swap and set data
141 ListView_SetItemText(hList, iSel, 0, sName2.Get());
142 ListView_SetItemText(hList, iSel, 1, sPath2.Get());
143 ListView_SetItemText(hList, iSel + iDelta, 0, sName1.Get());
144 ListView_SetItemText(hList, iSel + iDelta, 1, sPath1.Get());
145
146 // set selection info
147 LVSetSel(hList, iSel, FALSE);
148 LVSetSel(hList, iSel + iDelta, TRUE);
149
150 SetFocus(hList);
151 return TRUE;
152 }
153
154 ////////////////////////////////////////////////////////////////
155 // delete item
156 ////////////////////////////////////////////////////////////////
157
158 BOOL BookMarkDlg::Command_Delete(HWND hDlg)
159 {
160 // confirm delete
161 if (MessageBox(hDlg, MSG_CONFIRM, MSG_DEL_BOOKMARK, MB_YESNO | MB_ICONQUESTION) != IDYES) return TRUE;
162
163 HWND hList = GetDlgItem(hDlg, IDC_BMEDIT_LIST);
164 int iSel;
165
166 while(1) {
167 iSel = ListView_GetNextItem(hList, -1, LVNI_SELECTED);
168 if (iSel == -1) break;
169 ListView_DeleteItem(hList, iSel);
170 }
171 return TRUE;
172 }
173
174 ////////////////////////////////////////////////////////////////
175 // helper functions
176 ////////////////////////////////////////////////////////////////
177
178 static BOOL GetLVItem(HWND hList, int iItem, int iSubItem, TString *pBuf)
179 {
180 TCHAR buf[MAX_PATH * 2];
181
182 LVITEM li;
183 li.mask = LVIF_TEXT;
184 li.iItem = iItem;
185 li.iSubItem = iSubItem;
186 li.pszText = buf;
187 li.cchTextMax = MAX_PATH*2;
188 ListView_GetItem(hList, &li);
189
190 return pBuf->Set(buf);
191 }
192
193 static void LVSetSel(HWND hList, int iItem, BOOL bSet)
194 {
195 LVITEM li;
196 li.mask = LVIF_STATE;
197 li.iItem = iItem;
198 li.iSubItem = 0;
199 li.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
200 if (bSet) {
201 li.state = LVIS_SELECTED | LVIS_FOCUSED;
202 } else {
203 li.state = 0;
204 }
205 ListView_SetItem(hList, &li);
206 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26