comparison src/myframe.cpp @ 23:a2dd16b70c08 v2.2dev

apply vivid-coloured image for selected item.
author pyon@macmini
date Tue, 01 Nov 2011 22:26:41 +0900
parents c540dc3eabe5
children 5c99c6fa50df
comparison
equal deleted inserted replaced
22:4432aba77d6b 23:a2dd16b70c08
1 // Filename : myframe.cpp 1 // Filename : myframe.cpp
2 // Last Change: 26-Oct-2011. 2 // Last Change: 01-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"
198 EVT_SIZE( MyFrame::OnWinSize ) 198 EVT_SIZE( MyFrame::OnWinSize )
199 EVT_MOVE( MyFrame::OnWinMove ) 199 EVT_MOVE( MyFrame::OnWinMove )
200 EVT_MENU( ID_MENUITEMPARAM, MyFrame::OnParam ) 200 EVT_MENU( ID_MENUITEMPARAM, MyFrame::OnParam )
201 EVT_MENU( ID_MENUITEMAPPDIR, MyFrame::OnOpenAppDir ) 201 EVT_MENU( ID_MENUITEMAPPDIR, MyFrame::OnOpenAppDir )
202 EVT_MENU( wxID_EXIT, MyFrame::OnQuit ) 202 EVT_MENU( wxID_EXIT, MyFrame::OnQuit )
203 EVT_LIST_ITEM_SELECTED( ID_LISTCTRLVIEW, MyFrame::GetImageInfo ) 203 EVT_LIST_ITEM_SELECTED( ID_LISTCTRLVIEW, MyFrame::OnItemSelected )
204 EVT_LIST_ITEM_ACTIVATED( ID_LISTCTRLVIEW, MyFrame::ViewLarge ) 204 EVT_LIST_ITEM_DESELECTED( ID_LISTCTRLVIEW, MyFrame::OnItemDeselected )
205 EVT_LIST_ITEM_ACTIVATED( ID_LISTCTRLVIEW, MyFrame::ViewLarge )
205 EVT_BUTTON( ID_BUTTONNEXTTHU, MyFrame::OnNextThursday ) 206 EVT_BUTTON( ID_BUTTONNEXTTHU, MyFrame::OnNextThursday )
206 EVT_BUTTON( ID_BUTTONMKDIR, MyFrame::OnMakeDir ) 207 EVT_BUTTON( ID_BUTTONMKDIR, MyFrame::OnMakeDir )
207 EVT_BUTTON( ID_BUTTONDETECT, MyFrame::OnDetect ) 208 EVT_BUTTON( ID_BUTTONDETECT, MyFrame::OnDetect )
208 EVT_BUTTON( ID_BUTTONMOVE, MyFrame::OnMove ) 209 EVT_BUTTON( ID_BUTTONMOVE, MyFrame::OnMove )
209 EVT_BUTTON( ID_BUTTONDEL, MyFrame::OnDelete ) 210 EVT_BUTTON( ID_BUTTONDEL, MyFrame::OnDelete )
337 338
338 // 本処理 339 // 本処理
339 m_listCtrlView->DeleteAllItems(); 340 m_listCtrlView->DeleteAllItems();
340 m_imageList->RemoveAll(); 341 m_imageList->RemoveAll();
341 wxListItem item; 342 wxListItem item;
343
342 wxProgressDialog pd( wxT("進行状況"), wxT("処理開始..."), 7, this, wxPD_APP_MODAL|wxPD_REMAINING_TIME|wxPD_AUTO_HIDE ); 344 wxProgressDialog pd( wxT("進行状況"), wxT("処理開始..."), 7, this, wxPD_APP_MODAL|wxPD_REMAINING_TIME|wxPD_AUTO_HIDE );
343 pd.SetSize( wxSize(320,140) ); 345 pd.SetSize( wxSize(320,140) );
344 346
345 wxArrayString keys; 347 wxArrayString keys;
346 for ( CacheHash::iterator it=CH.begin(); it != CH.end(); ++it ) { 348 for ( CacheHash::iterator it=CH.begin(); it != CH.end(); ++it ) {
347 keys.Add(it->first); 349 keys.Add(it->first);
348 } 350 }
349 bool select = true;
350 keys.Sort(); 351 keys.Sort();
352 // イメージリストを作成
353 for ( int i=0; i<keys.GetCount(); i++ ) { // item image
354 CacheItem* ci = new CacheItem;
355 ci = CH[keys[i]];
356 m_imageList->Add( ci->thumbnail );
357 }
358 for ( int i=0; i<keys.GetCount(); i++ ) { // item selected image
359 CacheItem* ci = new CacheItem;
360 ci = CH[keys[i]];
361 m_imageList->Add( ci->selthumbnail );
362 }
363 // アイテム作成
364 bool select = true; // flag
351 for ( int i=0; i<keys.GetCount(); i++ ) { 365 for ( int i=0; i<keys.GetCount(); i++ ) {
352 CacheItem* ci = new CacheItem; 366 CacheItem* ci = new CacheItem;
353 ci = CH[keys[i]]; 367 ci = CH[keys[i]];
354 m_listCtrlView->InsertItem( i, ci->filename ); 368 m_listCtrlView->InsertItem( i, ci->filename, i );
355 m_listCtrlView->SetItem( i, 0, ci->filename, i ); 369 m_listCtrlView->SetItem( i, 0, ci->filename, i );
356 m_imageList->Add( ci->thumbnail );
357 370
358 if ( i == 0 ) { // 1枚目はマークシートのはず 371 if ( i == 0 ) { // 1枚目はマークシートのはず
359 wxImage marksheet( ci->fullpath, wxBITMAP_TYPE_JPEG ); 372 wxImage marksheet( ci->fullpath, wxBITMAP_TYPE_JPEG );
360 373
361 wxImage name_image; 374 wxImage name_image;
379 } 392 }
380 393
381 pd.Update( i+1, wxT("画像認識中") ); 394 pd.Update( i+1, wxT("画像認識中") );
382 } 395 }
383 396
397 // 選択したものは青い画像を使う
398 long i = -1;
399 for ( ;; ) {
400 i = m_listCtrlView->GetNextItem(i, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
401 if ( i == -1 ) break;
402 m_listCtrlView->SetItemImage( i, i+m_listCtrlView->GetItemCount() );
403 }
404
384 SetStatusText( wxEmptyString, 2 ); 405 SetStatusText( wxEmptyString, 2 );
385 } 406 }
386 407
387 /* 画像を選択 */ 408 /* 画像を選択したとき画像の情報をステータスバーに表示 */
388 void MyFrame::GetImageInfo(wxListEvent& event) 409 void MyFrame::OnItemSelected(wxListEvent& event)
389 { 410 {
411 int i = event.GetIndex();
412 m_listCtrlView->SetItemImage( i, i+m_listCtrlView->GetItemCount() ); // 青い画像
413
390 if ( m_listCtrlView->GetSelectedItemCount() != 1 ) return; 414 if ( m_listCtrlView->GetSelectedItemCount() != 1 ) return;
391
392 SetStatusText( wxEmptyString, 2 ); 415 SetStatusText( wxEmptyString, 2 );
393 int i = event.GetIndex();
394 416
395 wxString filename = event.GetText(); 417 wxString filename = event.GetText();
396 CacheItem* ci = new CacheItem; 418 CacheItem* ci = new CacheItem;
397 ci = CH[filename]; 419 ci = CH[filename];
398 wxString msg; 420 wxString msg;
399 if ( ci->marksheet ) msg = wxT("perhaps marksheet !"); 421 if ( ci->marksheet ) msg = wxT("perhaps marksheet !");
400 SetStatusText( wxString::Format(wxT("selected image : z = %f, l = %d ...")+msg, ci->z, ci->l ), 2 ); 422 SetStatusText( wxString::Format(wxT("selected image : z = %f, l = %d ...")+msg, ci->z, ci->l ), 2 );
423 }
424 void MyFrame::OnItemDeselected(wxListEvent& event)
425 {
426 int i = event.GetIndex();
427 m_listCtrlView->SetItemImage( i, i );
401 } 428 }
402 429
403 /* 画像のスクリーン表示*/ 430 /* 画像のスクリーン表示*/
404 void MyFrame::ViewLarge(wxListEvent& event) 431 void MyFrame::ViewLarge(wxListEvent& event)
405 { 432 {
466 continue; 493 continue;
467 } 494 }
468 /* 新しいファイルはキャッシュ */ 495 /* 新しいファイルはキャッシュ */
469 float z; long l; bool m = IsMarksheet( fullpath, &z, &l ); 496 float z; long l; bool m = IsMarksheet( fullpath, &z, &l );
470 wxImage image( fullpath, wxBITMAP_TYPE_JPEG ); 497 wxImage image( fullpath, wxBITMAP_TYPE_JPEG );
471 wxBitmap bmp( image.Scale( 160, 226, wxIMAGE_QUALITY_HIGH ) ); 498 wxImage thumbnail = image.Scale( 160, 226, wxIMAGE_QUALITY_HIGH );
472 499 wxBitmap bmp( thumbnail );
473 ci->filename = file; 500 unsigned char *data = thumbnail.GetData();
474 ci->fullpath = fullpath; 501 for ( int y=0; y<226; y++ ) for ( int x=0; x<160; x++ ) data[(y*226+x)*3+2] = 255; // 文字色:黒(0,0,0)->青(0,0.255)
475 ci->marksheet = m; 502 wxBitmap bmp_mask( thumbnail );
476 ci->z = z; 503
477 ci->l = l; 504 ci->filename = file;
478 ci->exists = true; 505 ci->fullpath = fullpath;
479 ci->thumbnail = bmp; 506 ci->marksheet = m;
480 ci->modtime = wxEmptyString; // TODO. 507 ci->z = z;
508 ci->l = l;
509 ci->exists = true;
510 ci->thumbnail = bmp;
511 ci->selthumbnail = bmp_mask;
512 ci->modtime = wxEmptyString; // TODO.
481 513
482 CH[ci->filename] = ci; // add hash 514 CH[ci->filename] = ci; // add hash
483 wxGetApp().WriteLog( file + wxT(" appended.") + wxString::Format(wxT(" ( m=%d z=%f l=%d )"), m ? 1 : 0, z, l ) ); 515 wxGetApp().WriteLog( file + wxT(" appended.") + wxString::Format(wxT(" ( m=%d z=%f l=%d )"), m ? 1 : 0, z, l ) );
484 } 516 }
485 517