Mercurial > mercurial > hgweb_mover2.cgi
comparison src/myframe.cpp @ 26:5a934c8e1b95 v2.2dev
implement shorcutkeys & file count
author | pyon@macmini |
---|---|
date | Thu, 03 Nov 2011 15:48:26 +0900 |
parents | 5c99c6fa50df |
children | d21de4693652 |
comparison
equal
deleted
inserted
replaced
25:b3b3b8e97b54 | 26:5a934c8e1b95 |
---|---|
1 // Filename : myframe.cpp | 1 // Filename : myframe.cpp |
2 // Last Change: 02-Nov-2011. | 2 // Last Change: 03-Nov-2011. |
3 // | 3 // |
4 | 4 |
5 #include "main.h" | 5 #include "main.h" |
6 #include "myframe.h" | 6 #include "myframe.h" |
7 #include "param.h" | 7 #include "param.h" |
153 gSizer->Add( m_buttonUndo, 0, wxALL, 5 ); | 153 gSizer->Add( m_buttonUndo, 0, wxALL, 5 ); |
154 m_buttonUndo->Enable(false); | 154 m_buttonUndo->Enable(false); |
155 | 155 |
156 bSizerButton->Add( gSizer, 0, wxALL, 5 ); | 156 bSizerButton->Add( gSizer, 0, wxALL, 5 ); |
157 | 157 |
158 m_listCtrlDir = new wxListCtrl( this, ID_LISTCTRLDIR, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_SINGLE_SEL ); | 158 m_listCtrlHhsDir = new wxListCtrl( this, ID_LISTCTRLDIR, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_SINGLE_SEL ); |
159 wxListItem itemCol; | 159 wxListItem itemCol; |
160 itemCol.SetText( wxT("通番") ); | 160 itemCol.SetText( wxT("通番") ); |
161 m_listCtrlDir->InsertColumn( 0, itemCol ); | 161 m_listCtrlHhsDir->InsertColumn( 0, itemCol ); |
162 m_listCtrlDir->SetColumnWidth( 0, 50 ); | 162 m_listCtrlHhsDir->SetColumnWidth( 0, 50 ); |
163 itemCol.SetText( wxT("被保険者番号") ); | 163 itemCol.SetText( wxT("被保険者番号") ); |
164 m_listCtrlDir->InsertColumn( 1, itemCol ); | 164 m_listCtrlHhsDir->InsertColumn( 1, itemCol ); |
165 m_listCtrlDir->SetColumnWidth( 1, 100 ); | 165 m_listCtrlHhsDir->SetColumnWidth( 1, 100 ); |
166 itemCol.SetText( wxT("ファイル数") ); | 166 itemCol.SetText( wxT("ファイル数") ); |
167 m_listCtrlDir->InsertColumn( 2, itemCol ); | 167 m_listCtrlHhsDir->InsertColumn( 2, itemCol ); |
168 m_listCtrlDir->SetColumnWidth( 2, 60 ); | 168 m_listCtrlHhsDir->SetColumnWidth( 2, 60 ); |
169 | 169 |
170 bSizerButton->Add( m_listCtrlDir, 1, wxEXPAND|wxALL, 5 ); | 170 bSizerButton->Add( m_listCtrlHhsDir, 1, wxEXPAND|wxALL, 5 ); |
171 | 171 |
172 bSizerManip->Add( bSizerButton, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); | 172 bSizerManip->Add( bSizerButton, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); |
173 | 173 |
174 bSizerTop->Add( bSizerManip, 1, wxEXPAND, 5 ); | 174 bSizerTop->Add( bSizerManip, 1, wxEXPAND, 5 ); |
175 | 175 |
191 { | 191 { |
192 } | 192 } |
193 | 193 |
194 // Event Table | 194 // Event Table |
195 BEGIN_EVENT_TABLE( MyFrame, wxFrame ) | 195 BEGIN_EVENT_TABLE( MyFrame, wxFrame ) |
196 EVT_CHAR( MyFrame::OnChar ) | |
196 EVT_IDLE( MyFrame::OnIdle ) | 197 EVT_IDLE( MyFrame::OnIdle ) |
197 EVT_TIMER( ID_TIMER, MyFrame::OnTimer ) | 198 EVT_TIMER( ID_TIMER, MyFrame::OnTimer ) |
198 EVT_SIZE( MyFrame::OnWinSize ) | 199 EVT_SIZE( MyFrame::OnWinSize ) |
199 EVT_MOVE( MyFrame::OnWinMove ) | 200 EVT_MOVE( MyFrame::OnWinMove ) |
200 EVT_MENU( ID_MENUITEMPARAM, MyFrame::OnParam ) | 201 EVT_MENU( ID_MENUITEMPARAM, MyFrame::OnParam ) |
259 wxExecute( cmd ); | 260 wxExecute( cmd ); |
260 } | 261 } |
261 /* 検知 */ | 262 /* 検知 */ |
262 void MyFrame::OnDetect(wxCommandEvent& WXUNUSED(event)) | 263 void MyFrame::OnDetect(wxCommandEvent& WXUNUSED(event)) |
263 { | 264 { |
264 UpdateCache(); | 265 F5_Shortcut(); // UpdateCache -> UpdateListImage |
265 UpdateListImage(); | 266 } |
267 | |
268 /* 移動 */ | |
269 void MyFrame::OnMove(wxCommandEvent& WXUNUSED(event)) | |
270 { | |
271 F7_Shortcut(); // MoveImages -> UpdateCache -> UpdateListImage -> ListHhsDir | |
266 } | 272 } |
267 | 273 |
268 /* 選択したファイルを移動 */ | 274 /* 選択したファイルを移動 */ |
269 void MyFrame::OnMove(wxCommandEvent& WXUNUSED(event)) | 275 void MyFrame::MoveImages() |
270 { | 276 { |
271 m_undo.Clear(); | 277 m_undo.Clear(); |
272 wxString workdir = m_dirPickerWork->GetPath(); | 278 wxString workdir = m_dirPickerWork->GetPath(); |
273 wxString distdir = m_textCtrlDist->GetValue(); | 279 wxString distdir = m_textCtrlDist->GetValue(); |
280 wxString hhsno = m_textCtrlGuess->GetValue(); | |
281 | |
282 m_hhsList.Remove(hhsno); | |
283 m_hhsList.Add(hhsno); | |
274 long item = -1; | 284 long item = -1; |
275 for ( ;; ) { | 285 for ( ;; ) { |
276 item = m_listCtrlView->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); | 286 item = m_listCtrlView->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); |
277 if ( item == -1 ) break; | 287 if ( item == -1 ) break; |
278 wxString hhsno = m_textCtrlGuess->GetValue(); | |
279 if ( !wxDirExists( distdir + wxFILE_SEP_PATH + hhsno ) ) wxMkdir( distdir + wxFILE_SEP_PATH + hhsno ); | 288 if ( !wxDirExists( distdir + wxFILE_SEP_PATH + hhsno ) ) wxMkdir( distdir + wxFILE_SEP_PATH + hhsno ); |
280 | 289 |
281 wxString file = m_listCtrlView->GetItemText( item ); | 290 wxString file = m_listCtrlView->GetItemText( item ); |
282 wxString from = workdir + wxFILE_SEP_PATH + file; | 291 wxString from = workdir + wxFILE_SEP_PATH + file; |
283 wxString to = distdir + wxFILE_SEP_PATH + hhsno + wxFILE_SEP_PATH + file; | 292 wxString to = distdir + wxFILE_SEP_PATH + hhsno + wxFILE_SEP_PATH + file; |
284 wxRenameFile( from, to, true ); | 293 wxRenameFile( from, to, true ); |
285 | 294 |
286 wxString movecmd = MOVECMD; | 295 wxString movecmd = MOVECMD; |
287 m_undo.Insert( movecmd + wxT(" ") + to + wxT(" ") + from, 0 ); | 296 m_undo.Insert( movecmd + wxT(" ") + to + wxT(" ") + from, 0 ); |
288 } | 297 } |
289 UpdateCache(); | |
290 UpdateListImage(); | |
291 m_buttonUndo->Enable(true); | |
292 } | 298 } |
293 /* 選択したファイルを削除 */ | 299 /* 選択したファイルを削除 */ |
294 void MyFrame::OnDelete(wxCommandEvent& WXUNUSED(event)) | 300 void MyFrame::OnDelete(wxCommandEvent& WXUNUSED(event)) |
295 { | 301 { |
296 m_undo.Clear(); | 302 m_undo.Clear(); |
321 wxMessageBox(wxT("戻し完了.")); | 327 wxMessageBox(wxT("戻し完了.")); |
322 m_buttonUndo->Enable(false); | 328 m_buttonUndo->Enable(false); |
323 m_undo.Clear(); | 329 m_undo.Clear(); |
324 UpdateCache(); | 330 UpdateCache(); |
325 UpdateListImage(); | 331 UpdateListImage(); |
332 ListHhsDir(); | |
326 } | 333 } |
327 | 334 |
328 /* 画像をリストコントロールに表示 */ | 335 /* 画像をリストコントロールに表示 */ |
329 void MyFrame::UpdateListImage() | 336 void MyFrame::UpdateListImage() |
330 { | 337 { |
471 wxGetApp().lmin.ToLong( &lmin ); | 478 wxGetApp().lmin.ToLong( &lmin ); |
472 wxGetApp().lmax.ToLong( &lmax ); | 479 wxGetApp().lmax.ToLong( &lmax ); |
473 | 480 |
474 m_buttonDetect->Enable(false); | 481 m_buttonDetect->Enable(false); |
475 wxGetApp().WriteLog( wxT("start updating cache") ); | 482 wxGetApp().WriteLog( wxT("start updating cache") ); |
476 SetStatusText( wxT("rebuiling cache..."), 0 ); | |
477 wxStopWatch sw; | 483 wxStopWatch sw; |
478 sw.Start(0); | 484 sw.Start(0); |
479 | 485 |
480 /* キャッシュ存在フラグOFF */ | 486 /* キャッシュ存在フラグOFF */ |
481 for ( CacheHash::iterator it=CH.begin(); it != CH.end(); ++it ) { | 487 for ( CacheHash::iterator it=CH.begin(); it != CH.end(); ++it ) { |
483 ci = it->second; | 489 ci = it->second; |
484 ci->exists = false; | 490 ci->exists = false; |
485 } | 491 } |
486 | 492 |
487 wxString workdir = m_dirPickerWork->GetPath(); | 493 wxString workdir = m_dirPickerWork->GetPath(); |
488 wxDir dir( workdir ); | |
489 if ( !dir.IsOpened() ) return; | |
490 | |
491 wxArrayString filenames; | 494 wxArrayString filenames; |
492 wxListItem item; | 495 wxListItem item; |
493 | 496 |
494 /* キャッシュ作成 */ | 497 /* キャッシュ作成 */ |
495 unsigned int n = dir.GetAllFiles( workdir, &filenames, wxT("*.jpg"), wxDIR_FILES ); | 498 unsigned int n = wxDir::GetAllFiles( workdir, &filenames, wxT("*.jpg"), wxDIR_FILES ); |
496 for ( int i=0; i<n; i++ ) { | 499 for ( int i=0; i<n; i++ ) { |
497 wxString fullpath = filenames[i]; | 500 wxString fullpath = filenames[i]; |
498 wxFileName f( fullpath ); | 501 wxFileName f( fullpath ); |
499 wxString file = f.GetFullName(); | 502 wxString file = f.GetFullName(); |
500 | 503 |
524 ci->thumbnail = bmp; | 527 ci->thumbnail = bmp; |
525 ci->selthumbnail = bmp_mask; | 528 ci->selthumbnail = bmp_mask; |
526 ci->modtime = wxEmptyString; // TODO. | 529 ci->modtime = wxEmptyString; // TODO. |
527 | 530 |
528 CH[ci->filename] = ci; // add hash | 531 CH[ci->filename] = ci; // add hash |
529 SetStatusText( wxString::Format( wxT("rebuiling cache...(%.1fsec passed)"), (float)sw.Time()/1000 ), 0 ); | 532 SetStatusText( wxString::Format( wxT("rebuiling cache...( %d/%d :%.1fsec passed )"), i+1, n, (float)sw.Time()/1000 ), 0 ); |
530 wxGetApp().WriteLog( file + wxT(" appended.") + wxString::Format(wxT(" ( m=%d z=%f l=%d )"), m ? 1 : 0, z, l ) ); | 533 wxGetApp().WriteLog( file + wxT(" appended.") + wxString::Format(wxT(" ( m=%d z=%f l=%d )"), m ? 1 : 0, z, l ) ); |
531 } | 534 } |
532 | 535 |
533 /* 存在しないファイルはキャッシュから削除 */ | 536 /* 存在しないファイルはキャッシュから削除 */ |
534 wxArrayString removelist; | 537 wxArrayString removelist; |
545 m_buttonDetect->Enable(true); | 548 m_buttonDetect->Enable(true); |
546 SetStatusText( wxEmptyString, 0 ); | 549 SetStatusText( wxEmptyString, 0 ); |
547 m_timer.Start( 20*1000, wxTIMER_ONE_SHOT ); // restart | 550 m_timer.Start( 20*1000, wxTIMER_ONE_SHOT ); // restart |
548 } | 551 } |
549 | 552 |
550 /* 被保険者を開く */ | 553 /* 被保険者フォルダを列挙 */ |
554 void MyFrame::ListHhsDir() | |
555 { | |
556 wxString distdir = m_textCtrlDist->GetValue(); | |
557 wxString hhsdir; | |
558 wxString buf; | |
559 | |
560 m_listCtrlHhsDir->DeleteAllItems(); | |
561 for ( int i=0; i<m_hhsList.GetCount(); i++ ) { | |
562 hhsdir = distdir + wxFILE_SEP_PATH + m_hhsList[i]; | |
563 wxArrayString filenames; | |
564 unsigned int n = wxDir::GetAllFiles( hhsdir, &filenames, wxT("*.jpg"), wxDIR_FILES ); | |
565 | |
566 m_listCtrlHhsDir->InsertItem( i, -1 ); | |
567 buf.Printf(wxT("%d"),i+1); | |
568 m_listCtrlHhsDir->SetItem( i, 0, buf, -1 ); | |
569 m_listCtrlHhsDir->SetItem( i, 1, m_hhsList[i], -1 ); | |
570 buf.Printf(wxT("%d"),n); | |
571 m_listCtrlHhsDir->SetItem( i, 2, buf, -1 ); | |
572 if ( i % 2 ) m_listCtrlHhsDir->SetItemBackgroundColour( i, wxColour(wxT("WHEAT")) ); | |
573 } | |
574 } | |
575 | |
576 /* 被保険者フォルダを開く */ | |
551 void MyFrame::OnOpenHhsDir(wxListEvent& event) | 577 void MyFrame::OnOpenHhsDir(wxListEvent& event) |
552 { | 578 { |
553 wxString hhsdir = m_textCtrlDist->GetValue(); | 579 wxString hhsdir; |
580 hhsdir.Append( m_textCtrlDist->GetValue() ); | |
554 hhsdir.Append( wxFILE_SEP_PATH ); | 581 hhsdir.Append( wxFILE_SEP_PATH ); |
555 | 582 |
556 wxListItem item = event.GetItem(); | 583 wxListItem item = event.GetItem(); |
557 item.SetColumn(1); | 584 item.SetColumn(1); |
558 item.SetMask(wxLIST_MASK_TEXT); | 585 item.SetMask(wxLIST_MASK_TEXT); |
559 m_listCtrlDir->GetItem( item ); | 586 m_listCtrlHhsDir->GetItem( item ); |
560 hhsdir.Append( item.GetText() ); | 587 hhsdir.Append( item.GetText() ); |
561 wxString execmd = wxT("explorer ") + hhsdir; | 588 wxString execmd = wxT("explorer ") + hhsdir; |
562 wxExecute( execmd ); | 589 wxExecute( execmd ); |
590 //wxMessageBox(hhsdir); | |
563 } | 591 } |
564 | 592 |
565 // 以下,定型もの | 593 // 以下,定型もの |
566 void MyFrame::OnTimer(wxTimerEvent& event) | 594 void MyFrame::OnTimer(wxTimerEvent& event) |
567 { | 595 { |
568 UpdateCache(); | 596 UpdateCache(); |
569 } | 597 } |
598 | |
599 /* キーハンドリング */ | |
600 void MyFrame::OnChar(wxKeyEvent& event) | |
601 { | |
602 if ( event.GetKeyCode() == WXK_F5 ) F5_Shortcut(); | |
603 if ( event.GetKeyCode() == WXK_F7 ) F7_Shortcut(); | |
604 } | |
605 void MyFrame::F5_Shortcut() | |
606 { | |
607 UpdateCache(); | |
608 UpdateListImage(); | |
609 } | |
610 void MyFrame::F7_Shortcut() | |
611 { | |
612 MoveImages(); | |
613 UpdateCache(); | |
614 UpdateListImage(); | |
615 ListHhsDir(); | |
616 m_buttonUndo->Enable(true); | |
617 } | |
618 | |
570 /* アイドリング */ | 619 /* アイドリング */ |
571 void MyFrame::OnIdle(wxIdleEvent& event) | 620 void MyFrame::OnIdle(wxIdleEvent& event) |
572 { | 621 { |
573 if ( !m_timer.IsRunning() ) { | 622 if ( !m_timer.IsRunning() ) { |
574 m_timer.Start( 20*1000, wxTIMER_ONE_SHOT ); | 623 m_timer.Start( 20*1000, wxTIMER_ONE_SHOT ); |