Browse CVS Repository
Contents of /tombo/Tombo/Src/BookMarkDlg.cpp
Parent Directory
| Revision Log
| 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 |
} |
| |