Mercurial > mercurial > hgweb_searcher03.cgi
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() ); |
