ColumnSelectDialog.cpp
00001
00002
00003
00004 #include "stdafx.h"
00005 #include "nexpcsv.h"
00006 #include "ColumnSelectDialog.h"
00007 #include "FormulaDialog.h"
00008
00009 #ifdef _DEBUG
00010 #define new DEBUG_NEW
00011 #undef THIS_FILE
00012 static char THIS_FILE[] = __FILE__;
00013 #endif
00014
00016
00017
00018
00019 CColumnSelectDialog::CColumnSelectDialog(CWnd* pParent )
00020 : CDialog(CColumnSelectDialog::IDD, pParent)
00021 {
00022
00023
00024
00025 SetItemChanged(TRUE);
00026 }
00027
00028
00029 void CColumnSelectDialog::DoDataExchange(CDataExchange* pDX)
00030 {
00031 CDialog::DoDataExchange(pDX);
00032
00033 DDX_Control(pDX, IDC_UP, m_btnUp);
00034 DDX_Control(pDX, IDC_REMOVE, m_btnRemove);
00035 DDX_Control(pDX, IDC_EDIT, m_btnEdit);
00036 DDX_Control(pDX, IDC_DOWN, m_btnDown);
00037 DDX_Control(pDX, IDC_ADD, m_btnAdd);
00038 DDX_Control(pDX, IDC_COLUMN_LIST, m_lcColumnList);
00039
00040 }
00041
00042
00043 BEGIN_MESSAGE_MAP(CColumnSelectDialog, CDialog)
00044
00045 ON_NOTIFY(LVN_ENDLABELEDIT, IDC_COLUMN_LIST, OnEndlabeleditColumnList)
00046 ON_NOTIFY(LVN_KEYDOWN, IDC_COLUMN_LIST, OnKeydownColumnList)
00047 ON_BN_CLICKED(IDC_ADD, OnAdd)
00048 ON_NOTIFY(LVN_GETDISPINFO, IDC_COLUMN_LIST, OnGetdispinfoColumnList)
00049 ON_BN_CLICKED(IDC_UP, OnUp)
00050 ON_BN_CLICKED(IDC_DOWN, OnDown)
00051 ON_BN_CLICKED(IDC_EDIT, OnEdit)
00052 ON_BN_CLICKED(IDC_REMOVE, OnRemove)
00053 ON_NOTIFY(LVN_ITEMCHANGED, IDC_COLUMN_LIST, OnItemchangedColumnList)
00054 ON_BN_CLICKED(IDC_SAVE, OnSave)
00055 ON_BN_CLICKED(IDC_OPEN, OnOpen)
00056
00057 END_MESSAGE_MAP()
00058
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 BOOL CColumnSelectDialog::OnInitDialog()
00075 {
00076 CDialog::OnInitDialog();
00077
00078
00079
00080
00081
00082
00083 CnExpCsvApp* app = (CnExpCsvApp*)AfxGetApp();
00084 m_arrData.Copy( app->m_arrData );
00085
00086
00087
00088
00089 m_lcColumnList.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_INFOTIP | LVS_EX_GRIDLINES);
00090
00091
00092 static const struct
00093 {
00094 UINT nColHdrId;
00095 int nFormat;
00096 int nWidth;
00097 } colData[] = {
00098 {IDS_COLSEL_COLNAME1, LVCFMT_LEFT, 100},
00099
00100 };
00101 const int nColCount = sizeof colData / sizeof colData[0];
00102
00103
00104 CRect rc;
00105 m_lcColumnList.GetClientRect(&rc);
00106 int nCx = GetSystemMetrics(SM_CXVSCROLL);
00107 int nMaxWidth = rc.Width() - nCx;
00108
00109
00110 m_imlList.Create(IDB_COLUMN_TYPE, 16, 1, RGB(255,255,255) );
00111 m_lcColumnList.SetImageList( &m_imlList, LVSIL_SMALL );
00112
00113
00114
00115
00116 for (int nColumn = 0; nColumn < nColCount; nColumn++)
00117 {
00118 CString str;
00119 VERIFY(str.LoadString(colData[nColumn].nColHdrId));
00120 int nWidth = nMaxWidth * colData[nColumn].nWidth / 100;
00121 m_lcColumnList.InsertColumn(nColumn, str, colData[nColumn].nFormat, nWidth);
00122 }
00123
00124 RefreshColumnList();
00125 RefreshControl();
00126
00127 return TRUE;
00128
00129 }
00130
00131 void CColumnSelectDialog::OnOK()
00132 {
00133
00134
00135
00136
00137
00138 RefreshColumnDataArray();
00139 CnExpCsvApp* app = (CnExpCsvApp*)AfxGetApp();
00140 app->m_arrData.Copy(m_arrData);
00141
00142 CDialog::OnOK();
00143 }
00144
00145 void CColumnSelectDialog::OnEndlabeleditColumnList(NMHDR* pNMHDR, LRESULT* pResult)
00146 {
00147 LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
00148
00149
00150 const LPARAM lParam = pDispInfo->item.lParam;
00151
00152
00153 CString strTitle;
00154 m_lcColumnList.GetEditControl()->GetWindowText(strTitle);
00155 m_arrData[lParam].SetTitle(strTitle);
00156
00157 *pResult = TRUE;
00158 }
00159
00160 void CColumnSelectDialog::OnKeydownColumnList(NMHDR* pNMHDR, LRESULT* pResult)
00161 {
00162 LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
00163
00164
00165
00166
00167
00168
00169 int nFcs = m_lcColumnList.GetNextItem(-1, LVNI_ALL | LVIS_FOCUSED);
00170
00171 if ( (nFcs >= 0)&&(pLVKeyDow->wVKey == VK_F2) )
00172 m_lcColumnList.EditLabel(nFcs);
00173
00174 if ( pLVKeyDow->wVKey == VK_DELETE ) OnRemove();
00175 *pResult = 0;
00176 }
00177
00178 void CColumnSelectDialog::OnAdd()
00179 {
00180
00181 CFormulaDialog dlg;
00182 if ( IDOK == dlg.DoModal() ) {
00183 CColumnData column = dlg.GetColumnData();
00184 CString strTitle;
00185 strTitle.Format(_T("式:%d"), m_arrData.GetSize()+1);
00186 column.SetTitle(strTitle);
00187 column.SetOutput();
00188 int n = m_arrData.Add(column);
00189
00190 int nItem = m_lcColumnList.GetNextItem(-1, LVNI_ALL |LVIS_FOCUSED);
00191 if (nItem < 0) nItem = m_lcColumnList.GetItemCount();
00192
00193
00194
00195 LVITEM item;
00196 item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
00197 item.pszText = LPSTR_TEXTCALLBACK;
00198 item.iImage = I_IMAGECALLBACK;
00199 item.lParam = (LPARAM) n;
00200 item.iItem = nItem;
00201 item.iSubItem = 0;
00202
00203 VERIFY( (nItem = m_lcColumnList.InsertItem(&item) ) >= 0);
00204 m_lcColumnList.SetCheck(nItem, column.IsOutput() );
00205 }
00206 }
00207
00208 void CColumnSelectDialog::OnGetdispinfoColumnList(NMHDR* pNMHDR, LRESULT* pResult)
00209 {
00210 LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
00211
00212
00213
00214 CColumnData &column = GetColumnDataFromItem(pDispInfo->item.iItem);
00215 const unsigned int nSubItem = pDispInfo->item.iSubItem;
00216
00217
00218
00219 if (pDispInfo->item.mask & LVIF_IMAGE)
00220 {
00221
00222 if (column.IsFormula()) pDispInfo->item.iImage = 3;
00223 else if (column.IsIcon()) pDispInfo->item.iImage = 2;
00224 else if (column.IsHide()) pDispInfo->item.iImage = 1;
00225 else pDispInfo->item.iImage = 0;
00226 }
00227
00228
00229
00230 if (pDispInfo->item.mask & LVIF_TEXT)
00231 {
00232 switch (nSubItem)
00233 {
00234 case 0:
00235 pDispInfo->item.pszText = (LPTSTR)column.GetTitle();
00236 break;
00237 default:
00238 pDispInfo->item.pszText = "-";
00239 break;
00240 }
00241 }
00242
00243 *pResult = 0;
00244 }
00245
00246 void CColumnSelectDialog::OnUp()
00247 {
00248
00249
00250 CUIntArray arrItem;
00251 int nItem = -1;
00252 while((nItem = m_lcColumnList.GetNextItem(nItem, LVNI_ALL |LVNI_SELECTED)) != -1) {
00253 arrItem.Add(nItem);
00254 }
00255
00256 for (int n=0; n<arrItem.GetSize(); n++) {
00257 nItem = arrItem[n];
00258 if (nItem > n) SwapColumnListItem(nItem-1, nItem);
00259 }
00260 RefreshControl();
00261 }
00262
00263 void CColumnSelectDialog::OnDown()
00264 {
00265
00266 CUIntArray arrItem;
00267 int nItem = -1;
00268 while((nItem = m_lcColumnList.GetNextItem(nItem, LVNI_ALL |LVNI_SELECTED)) != -1) {
00269 arrItem.InsertAt(0, nItem);
00270 }
00271
00272 int nSize = m_lcColumnList.GetItemCount();
00273 for (int n=0; n<arrItem.GetSize(); n++) {
00274 nItem = arrItem[n];
00275 if (nItem < nSize-n-1) SwapColumnListItem(nItem, nItem+1);
00276 }
00277 RefreshControl();
00278 }
00279
00280 void CColumnSelectDialog::SwapColumnListItem(int nItem1, int nItem2)
00281 {
00282
00283 SetItemChanged(FALSE);
00284
00285
00286
00287
00288
00289 LPARAM lParam1 = m_lcColumnList.GetItemData(nItem1);
00290 LPARAM lParam2 = m_lcColumnList.GetItemData(nItem2);
00291 UINT uMask = LVIS_ACTIVATING | LVIS_CUT | LVIS_DROPHILITED | LVIS_FOCUSED | LVIS_OVERLAYMASK | LVIS_SELECTED | LVIS_STATEIMAGEMASK;
00292 UINT iState1 = m_lcColumnList.GetItemState(nItem1, uMask);
00293 UINT iState2 = m_lcColumnList.GetItemState(nItem2, uMask);
00294
00295 m_lcColumnList.SetItemData(nItem1, lParam2);
00296 m_lcColumnList.SetItemData(nItem2, lParam1);
00297
00298 m_lcColumnList.SetItemState(nItem1, iState2, uMask);
00299 m_lcColumnList.SetItemState(nItem2, iState1, uMask);
00300
00301 m_lcColumnList.SetItemText(nItem1, 0, LPSTR_TEXTCALLBACK );
00302 m_lcColumnList.SetItemText(nItem2, 0, LPSTR_TEXTCALLBACK );
00303
00304 SetItemChanged();
00305 }
00306
00307 void CColumnSelectDialog::OnEdit()
00308 {
00309
00310 int nItem = m_lcColumnList.GetNextItem(-1, LVNI_ALL |LVIS_FOCUSED);
00311 if (nItem < 0) return;
00312
00313 CFormulaDialog dlg;
00314 dlg.SetColumnData( GetColumnDataFromItem(nItem) );
00315 if ( IDOK == dlg.DoModal() ) {
00316 SetColumnDataFromItem(nItem, dlg.GetColumnData());
00317 }
00318 }
00319
00320 void CColumnSelectDialog::OnRemove()
00321 {
00322
00323 CUIntArray arrItem;
00324 int nItem = -1;
00325 while((nItem = m_lcColumnList.GetNextItem(nItem, LVNI_ALL |LVNI_SELECTED)) != -1) {
00326 arrItem.InsertAt(0, nItem);
00327 }
00328
00329 for (int n=0; n<arrItem.GetSize(); n++) {
00330 nItem = arrItem[n];
00331 if (GetColumnDataFromItem(nItem).IsFormula()) {
00332 SetColumnDataFromItem(nItem, CColumnData());
00333 m_lcColumnList.DeleteItem(nItem);
00334 }
00335 }
00336 }
00337
00338 void CColumnSelectDialog::OnItemchangedColumnList(NMHDR* pNMHDR, LRESULT* pResult)
00339 {
00340 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
00341
00342 if (!IsItemChanged()) return;
00343
00344 int nItem = pNMListView->iItem;
00345 if (nItem >= 0) {
00346
00347 if (pNMListView->uNewState != pNMListView->uOldState) {
00348 GetColumnDataFromItem(nItem).SetOutput( m_lcColumnList.GetCheck(nItem) );
00349 }
00350 }
00351
00352 RefreshControl();
00353
00354 *pResult = 0;
00355 }
00356
00357 void CColumnSelectDialog::RefreshControl()
00358 {
00359
00360 int nItem = m_lcColumnList.GetNextItem(-1, LVNI_ALL |LVIS_FOCUSED);
00361
00362 BOOL bAdd = TRUE;
00363 BOOL bEdit = FALSE;
00364 BOOL bRemove = FALSE;
00365 if (nItem != -1) {
00366
00367 bEdit = bRemove = GetColumnDataFromItem(nItem).IsFormula();
00368 }
00369 if (m_btnAdd.IsWindowEnabled() != bAdd) m_btnAdd.EnableWindow(bAdd);
00370 if (m_btnEdit.IsWindowEnabled() != bEdit) m_btnEdit.EnableWindow(bEdit);
00371 if (m_btnRemove.IsWindowEnabled() != bRemove) m_btnRemove.EnableWindow(bRemove);
00372
00373 BOOL bUp = FALSE;
00374 BOOL bDown = FALSE;
00375
00376 CUIntArray arrItem;
00377 nItem = -1;
00378 while((nItem = m_lcColumnList.GetNextItem(nItem, LVNI_ALL |LVNI_SELECTED)) != -1) {
00379 arrItem.Add(nItem);
00380 }
00381
00382 if (arrItem.GetSize() > 0) {
00383
00384
00385 int nLastItem = arrItem[arrItem.GetSize()-1];
00386 bUp = ( nLastItem > arrItem.GetSize()-1 );
00387
00388
00389
00390 int nFirstItem = arrItem[0];
00391 bDown = ( nFirstItem < m_lcColumnList.GetItemCount()-arrItem.GetSize() );
00392 }
00393
00394 if (m_btnUp.IsWindowEnabled() && !bUp) GotoDlgCtrl( GetDlgItem(IDOK) );
00395 m_btnUp.EnableWindow(bUp);
00396
00397 if (m_btnDown.IsWindowEnabled() && !bDown) GotoDlgCtrl( GetDlgItem(IDOK) );
00398 m_btnDown.EnableWindow(bDown);
00399 }
00400 void CColumnSelectDialog::RefreshColumnDataArray()
00401 {
00402 CColumnDataArray arrData;
00403 for (int nItem=0; nItem<m_lcColumnList.GetItemCount(); nItem++) {
00404 CColumnData &column = GetColumnDataFromItem(nItem);
00405 if (column.IsNull()) continue;
00406
00407 arrData.Add(column);
00408 }
00409
00410 m_arrData.Copy(arrData);
00411 }
00412
00413 void CColumnSelectDialog::RefreshColumnList()
00414 {
00415 SetItemChanged(FALSE);
00416
00417
00418
00419 m_lcColumnList.DeleteAllItems();
00420 int count = m_arrData.GetSize();
00421 for (int n=0; n<count; n++) {
00422 CColumnData &column = m_arrData.ElementAt(n);
00423
00424 LVITEM item;
00425 item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
00426 item.pszText = LPSTR_TEXTCALLBACK;
00427 item.iImage = I_IMAGECALLBACK;
00428 item.lParam = (LPARAM) n;
00429 item.iItem = m_lcColumnList.GetItemCount();
00430 item.iSubItem = 0;
00431
00432 int nItem;
00433 VERIFY( (nItem = m_lcColumnList.InsertItem(&item) ) >= 0);
00434 m_lcColumnList.SetCheck(nItem, column.IsOutput() );
00435 }
00436
00437 SetItemChanged();
00438 }
00439
00440 void CColumnSelectDialog::OnSave()
00441 {
00442
00443
00444
00445
00446
00447 static char szFileFilter[] = _T("CSVエクスポート定義ファイル(*.cef)|*.cef|すべてのファイル(*.*)|*.*||");
00448 CFileDialog dlgFile(FALSE, _T("cef"), NULL, OFN_EXPLORER | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFileFilter);
00449 dlgFile.m_ofn.lpstrTitle = _T("CSVエクスポート定義ファイルの指定");
00450
00451 switch ( dlgFile.DoModal() )
00452 {
00453 case IDOK:
00454 RefreshColumnDataArray();
00455 if ( m_arrData.Save(dlgFile.GetPathName()) ) {
00456 AfxMessageBox(_T("CSVエクスポート定義ファイルを保存しました。"), MB_ICONINFORMATION);
00457 }
00458 break;
00459 case -1:
00460 AfxMessageBox(_T("CFileDialogの構築に失敗しました。"), MB_ICONSTOP);
00461 case IDABORT:
00462 case IDCANCEL:
00463 default:
00464 break;
00465 };
00466 }
00467
00468 void CColumnSelectDialog::OnOpen()
00469 {
00470
00471
00472
00473
00474
00475 static char szFileFilter[] = _T("CSVエクスポート定義ファイル(*.cef)|*.cef|すべてのファイル(*.*)|*.*||");
00476 CFileDialog dlgFile(TRUE, _T("cef"), NULL, OFN_EXPLORER | OFN_HIDEREADONLY |OFN_FILEMUSTEXIST, szFileFilter);
00477 dlgFile.m_ofn.lpstrTitle = _T("CSVエクスポート定義ファイルの選択");
00478
00479 switch ( dlgFile.DoModal() )
00480 {
00481 case IDOK:
00482 if ( m_arrData.Load(dlgFile.GetPathName()) ) {
00483 RefreshColumnList();
00484 AfxMessageBox(_T("CSVエクスポート定義ファイルを開きました。"), MB_ICONINFORMATION);
00485 }
00486 break;
00487 case -1:
00488 AfxMessageBox(_T("CFileDialogの構築に失敗しました。"), MB_ICONSTOP);
00489 case IDABORT:
00490 case IDCANCEL:
00491 default:
00492 break;
00493 };
00494 }
LotusNotes CSV Export Plug-inに対してWed Jun 30 15:53:52 2004に生成されました。
1.3.7