comparison src/myframe.cpp @ 4:fdba695b99f1

More fast ( read from DB ). Improve the precision of marksheet judgement.
author pyon@macmini
date Wed, 11 Sep 2013 19:09:14 +0900
parents 1a64119ab257
children bc2e2b304095
comparison
equal deleted inserted replaced
3:1a64119ab257 4:fdba695b99f1
1 // Filename : myframe.cpp 1 // Filename : myframe.cpp
2 // Last Change: 27-Aug-2013. 2 // Last Change: 11-Sep-2013.
3 // 3 //
4 #include "main.h" 4 #include "main.h"
5 #include "db.h" 5 #include "db.h"
6 #include "about.h" 6 #include "about.h"
7 #include "kana.h" 7 #include "kana.h"
8 #include "hist.h" 8 #include "hist.h"
9 #include "index.h" 9 #include "index.h"
10 #include "mask.h" 10 #include "param.h"
11 #include "marksheet.h" 11 #include "marksheet.h"
12 #include "myframe.h" 12 #include "myframe.h"
13 #include "bprint.h" 13 #include "bprint.h"
14 14
15 /////////////////////////////////////////////////////////////// 15 ///////////////////////////////////////////////////////////////
95 m_menuFile->AppendSeparator(); // ---- 95 m_menuFile->AppendSeparator(); // ----
96 96
97 wxMenuItem* m_menuItemBkup = new wxMenuItem( m_menuFile, ID_MNDBBKUP, wxString( wxT("DBバックアップ(&B)") ) , wxT("Backup databases"), wxITEM_NORMAL ); 97 wxMenuItem* m_menuItemBkup = new wxMenuItem( m_menuFile, ID_MNDBBKUP, wxString( wxT("DBバックアップ(&B)") ) , wxT("Backup databases"), wxITEM_NORMAL );
98 m_menuFile->Append( m_menuItemBkup ); 98 m_menuFile->Append( m_menuItemBkup );
99 99
100 wxMenuItem* m_menuItemMask = new wxMenuItem( m_menuFile, ID_MNMASKPARAM, wxString( wxT("マスクパラメータ(&M)") ) , wxT("Setup mask parameters"), wxITEM_NORMAL ); 100 // params
101 m_menuFile->Append( m_menuItemMask ); 101 m_menuParam = new wxMenu();
102 102 wxMenuItem* m_menuItemMask = new wxMenuItem( m_menuParam, ID_MNMASKPARAM, wxString( wxT("マスク(&M)") ) , wxT("Setup mask parameters"), wxITEM_NORMAL );
103 m_menuParam->Append( m_menuItemMask );
104
105 wxMenuItem* m_menuItemMark = new wxMenuItem( m_menuParam, ID_MNMARKPARAM, wxString( wxT("マークシート(&S)") ) , wxT("Setup marksheet parameters"), wxITEM_NORMAL );
106 m_menuParam->Append( m_menuItemMark );
107
108 m_menuFile->Append( -1, wxT("パラメータ(&P)"), m_menuParam );
109
110 //
103 wxMenuItem* m_menuItemAppDir = new wxMenuItem( m_menuFile, ID_MNAPPDIR, wxString( wxT("アプリケーションフォルダを開く(&O)") ) , wxT("Open application directory"), wxITEM_NORMAL ); 111 wxMenuItem* m_menuItemAppDir = new wxMenuItem( m_menuFile, ID_MNAPPDIR, wxString( wxT("アプリケーションフォルダを開く(&O)") ) , wxT("Open application directory"), wxITEM_NORMAL );
104 m_menuFile->Append( m_menuItemAppDir ); 112 m_menuFile->Append( m_menuItemAppDir );
105 113
106 m_menuFile->AppendSeparator(); // ---- 114 m_menuFile->AppendSeparator(); // ----
107 115
198 m_statusBar->SetFieldsCount( 4, widths ); 206 m_statusBar->SetFieldsCount( 4, widths );
199 this->SetStatusBar( m_statusBar ); 207 this->SetStatusBar( m_statusBar );
200 SetStatusText( wxT("被保番を入力してスタート!") ); 208 SetStatusText( wxT("被保番を入力してスタート!") );
201 209
202 this->Centre( wxBOTH ); 210 this->Centre( wxBOTH );
203 LoadMaskParam(); 211 LoadParam();
204 } 212 }
205 213
206 MyFrame::~MyFrame() 214 MyFrame::~MyFrame()
207 { 215 {
208 } 216 }
214 EVT_MENU( ID_MNBPNT, MyFrame::OnBPrintMode ) 222 EVT_MENU( ID_MNBPNT, MyFrame::OnBPrintMode )
215 EVT_MENU( ID_MNVIEW, MyFrame::OnViewStyle ) 223 EVT_MENU( ID_MNVIEW, MyFrame::OnViewStyle )
216 EVT_MENU( ID_MNINDEX, MyFrame::OnIndex ) 224 EVT_MENU( ID_MNINDEX, MyFrame::OnIndex )
217 EVT_MENU( ID_MNDBBKUP, MyFrame::OnDBBackup ) 225 EVT_MENU( ID_MNDBBKUP, MyFrame::OnDBBackup )
218 EVT_MENU( ID_MNMASKPARAM, MyFrame::OnMaskParam ) 226 EVT_MENU( ID_MNMASKPARAM, MyFrame::OnMaskParam )
227 EVT_MENU( ID_MNMASKPARAM, MyFrame::OnMarkParam )
219 EVT_MENU( ID_MNAPPDIR, MyFrame::OnOpenAppDir ) 228 EVT_MENU( ID_MNAPPDIR, MyFrame::OnOpenAppDir )
220 EVT_LIST_ITEM_ACTIVATED( ID_LIST, MyFrame::OnSelectHhsDir ) 229 EVT_LIST_ITEM_ACTIVATED( ID_LIST, MyFrame::OnSelectHhsDir )
221 EVT_BUTTON( ID_KANA, MyFrame::OnKana ) 230 EVT_BUTTON( ID_KANA, MyFrame::OnKana )
222 EVT_BUTTON( ID_HIST, MyFrame::OnHistory ) 231 EVT_BUTTON( ID_HIST, MyFrame::OnHistory )
223 EVT_SIZE( MyFrame::OnWinSize ) 232 EVT_SIZE( MyFrame::OnWinSize )
261 SetStatusMessage( wxT("不適切な入力です."), 0 ); 270 SetStatusMessage( wxT("不適切な入力です."), 0 );
262 return; 271 return;
263 272
264 event.Skip(); 273 event.Skip();
265 } 274 }
266 /* マスクパラメータを設定ファイルから読み込む */ 275 /* パラメータを設定ファイルから読み込む */
267 void MyFrame::LoadMaskParam( void ) 276 void MyFrame::LoadParam( void )
268 { 277 {
269 conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("app.conf"); 278 conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("app.conf");
270 config = new wxFileConfig( wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE ); 279 config = new wxFileConfig( wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE );
271 280
272 int x, y, w, h; 281 int x, y, w, h;
328 wxString html; 337 wxString html;
329 html = html + wxT("<html><body>\n"); 338 html = html + wxT("<html><body>\n");
330 339
331 wxString file; 340 wxString file;
332 bool cout = dir.GetFirst( &file, wxT("*.jpg"), wxDIR_FILES ); 341 bool cout = dir.GetFirst( &file, wxT("*.jpg"), wxDIR_FILES );
342 bool notyet_mask = true;
333 int n = 0; 343 int n = 0;
334 wxString tmpdir = wxGetCwd() + wxFILE_SEP_PATH + wxT("tmp") + wxFILE_SEP_PATH; 344 wxString tmpdir = wxGetCwd() + wxFILE_SEP_PATH + wxT("tmp") + wxFILE_SEP_PATH;
335 while ( cout ) { 345 while ( cout ) {
336 file = path[0] + wxFILE_SEP_PATH + file; 346 file = path[0] + wxFILE_SEP_PATH + file;
337 file.Replace( wxFILE_SEP_PATH, wxT("/") ); 347 file.Replace( wxFILE_SEP_PATH, wxT("/") );
338 wxString tmpjpg = wxString::Format( wxT("%stmp%d.jpg"), tmpdir, n ); 348 wxString tmpjpg = wxString::Format( wxT("%stmp%d.jpg"), tmpdir, n );
349
350 double zmin = 0.095713;
351 double zmax = 0.147142;
352 long lmin = 2072393;
353 long lmax = 2472318;
339 354
340 if ( n == 0 ) { // 1枚目はマスクする 355 if ( notyet_mask && IsMarksheet( file, zmin, zmax, lmin, lmax ) ) { // マークシート表面をマスクする
341 wxImage img_org( file, wxBITMAP_TYPE_JPEG ); 356 wxImage img_org( file, wxBITMAP_TYPE_JPEG );
342 int ver = GetMarksheetVersion( file ); 357 int ver = GetMarksheetVersion( file );
343 if ( ver == 2 ) { 358 if ( ver == 2 ) {
344 img_org.SetRGB( m_mask1, 255, 255, 255 ); // cm name 359 img_org.SetRGB( m_mask1, 255, 255, 255 ); // cm name
345 img_org.SetRGB( m_mask2, 255, 255, 255 ); // cm no. 360 img_org.SetRGB( m_mask2, 255, 255, 255 ); // cm no.
349 img_org.SetRGB( m_mask1old, 255, 255, 255 ); // cm name 364 img_org.SetRGB( m_mask1old, 255, 255, 255 ); // cm name
350 img_org.SetRGB( m_mask2old, 255, 255, 255 ); // cm no. 365 img_org.SetRGB( m_mask2old, 255, 255, 255 ); // cm no.
351 img_org.SetRGB( m_mask3old, 255, 255, 255 ); // barcode 366 img_org.SetRGB( m_mask3old, 255, 255, 255 ); // barcode
352 } 367 }
353 img_org.SaveFile( tmpjpg ); 368 img_org.SaveFile( tmpjpg );
369 notyet_mask = false;
354 } 370 }
355 else { 371 else {
356 wxCopyFile( file, tmpjpg, true ); 372 wxCopyFile( file, tmpjpg, true );
357 } 373 }
358 html = html + wxT("<img src=\"") + tmpjpg + wxT("\" width=\"750\" height=\"1060\"/>"); 374 html = html + wxT("<img src=\"") + tmpjpg + wxT("\" width=\"750\" height=\"1060\"/>");
395 IndexDialog* index = new IndexDialog( this, wxID_ANY, wxT("インデックス作成"), wxDefaultPosition, wxSize( 700, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); 411 IndexDialog* index = new IndexDialog( this, wxID_ANY, wxT("インデックス作成"), wxDefaultPosition, wxSize( 700, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL );
396 index->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); 412 index->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM );
397 index->SetRootdir( rootdir ); 413 index->SetRootdir( rootdir );
398 index->ShowModal(); 414 index->ShowModal();
399 } 415 }
416 /* マークシートパラメータ設定ダイアログ */
417 void MyFrame::OnMarkParam( wxCommandEvent& WXUNUSED(event) )
418 {
419 ParamDialog* param = new ParamDialog( this, wxID_ANY, wxT("マークシート判定パラメータの指定"), wxDefaultPosition, wxSize( 350, 250 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL );
420 }
400 /* マスクパラメータ設定ダイアログ */ 421 /* マスクパラメータ設定ダイアログ */
401 void MyFrame::OnMaskParam( wxCommandEvent& WXUNUSED(event) ) 422 void MyFrame::OnMaskParam( wxCommandEvent& WXUNUSED(event) )
402 { 423 {
403 MaskDialog* mask = new MaskDialog( this, wxID_ANY, wxT("マスク位置とサイズの指定"), wxDefaultPosition, wxSize( 350, 250 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); 424 ParamDialog* param = new ParamDialog( this, wxID_ANY, wxT("マスク位置とサイズの指定"), wxDefaultPosition, wxSize( 350, 250 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL );
404 mask->SetMask1( m_mask1 ); 425 param->SetMask1( m_mask1 );
405 mask->SetMask2( m_mask2 ); 426 param->SetMask2( m_mask2 );
406 mask->SetMask3( m_mask3 ); 427 param->SetMask3( m_mask3 );
407 mask->SetMask1Old( m_mask1old ); 428 param->SetMask1Old( m_mask1old );
408 mask->SetMask2Old( m_mask2old ); 429 param->SetMask2Old( m_mask2old );
409 mask->SetMask3Old( m_mask3old ); 430 param->SetMask3Old( m_mask3old );
410 mask->LoadParams(); 431 param->LoadParams();
411 mask->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); 432 param->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM );
412 433
413 if ( mask->ShowModal() == wxID_OK ) { 434 if ( param->ShowModal() == wxID_OK ) {
414 m_mask1 = mask->GetMask1(); 435 m_mask1 = param->GetMask1();
415 m_mask2 = mask->GetMask2(); 436 m_mask2 = param->GetMask2();
416 m_mask3 = mask->GetMask3(); 437 m_mask3 = param->GetMask3();
417 m_mask1old = mask->GetMask1Old(); 438 m_mask1old = param->GetMask1Old();
418 m_mask2old = mask->GetMask2Old(); 439 m_mask2old = param->GetMask2Old();
419 m_mask3old = mask->GetMask3Old(); 440 m_mask3old = param->GetMask3Old();
420 441
421 config->SetPath( wxT("/Mask") ); 442 config->SetPath( wxT("/Mask") );
422 443
423 config->Write( wxT("x1"), m_mask1.GetX() ); 444 config->Write( wxT("x1"), m_mask1.GetX() );
424 config->Write( wxT("y1"), m_mask1.GetY() ); 445 config->Write( wxT("y1"), m_mask1.GetY() );