comparison src/myframe.cpp @ 2:c066fde99517

Added Batch Print Mode.
author pyon@macmini
date Fri, 23 Aug 2013 18:32:09 +0900
parents 7b6dab24f4b8
children 1a64119ab257
comparison
equal deleted inserted replaced
1:7b6dab24f4b8 2:c066fde99517
1 // Filename : myframe.cpp 1 // Filename : myframe.cpp
2 // Last Change: 04-Aug-2013. 2 // Last Change: 23-Aug-2013.
3 // 3 //
4 #include "main.h" 4 #include "main.h"
5 #include "db.h" 5 #include "db.h"
6 #include "myframe.h"
7 #include "about.h" 6 #include "about.h"
8 #include "kana.h" 7 #include "kana.h"
9 #include "hist.h" 8 #include "hist.h"
10 #include "index.h" 9 #include "index.h"
11 #include "mask.h" 10 #include "mask.h"
11 #include "marksheet.h"
12 #include "myframe.h"
13 #include "bprint.h"
12 14
13 /////////////////////////////////////////////////////////////// 15 ///////////////////////////////////////////////////////////////
14 // カスタム検索ボックス 16 // カスタム検索ボックス
15 MySearchBox::MySearchBox( wxWindow* parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, long style ) 17 MySearchBox::MySearchBox( wxWindow* parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, long style )
16 : wxSearchCtrl( parent, id, value, pos, size, style ) 18 : wxSearchCtrl( parent, id, value, pos, size, style )
42 Cut(); 44 Cut();
43 } 45 }
44 return; 46 return;
45 } 47 }
46 48
47 if ( event.GetKeyCode() == WXK_RETURN ) { 49 if ( event.GetKeyCode() == WXK_ESCAPE ) { // clear by ESC
48 50 this->Clear();
49 if ( s.IsSameAs( wxT("+") ) ) {
50 wxMessageBox(wxT("pripri"));
51 return;
52 }
53
54 wxRegEx reHhs( wxT("^0[1238][0-9]{8}$") );
55 if ( reHhs.Matches( s ) ) {
56 wxString t = GetHhsInfoByHhsNo( s );
57 wxArrayString array = GetPathByHhsNo( s );
58 wxMessageBox( t );
59 return;
60 }
61
62 wxRegEx reNo( wxT("^[0-9]{1,2}$") );
63 if ( reNo.Matches( s ) ) {
64 return;
65 }
66
67 //m_parent->SetStatusMessage(wxT("bad input"), 0 );
68 return; 51 return;
69 } 52 }
70 53
71 event.Skip(); 54 event.Skip();
72 } 55 }
56
73 57
74 /////////////////////////////////////////////////////////////// 58 ///////////////////////////////////////////////////////////////
75 // メインフレーム 59 // メインフレーム
76 #define WINL_W 400 60 #define WINL_W 480
77 #define LOGO_W 200 61 #define LOGO_W 200
78 #define LOGO_H 92 62 #define LOGO_H 92
79 63
80 // resources 64 // resources
81 #if !defined(__WXMSW__) && !defined(__WXPM__) 65 #if !defined(__WXMSW__) && !defined(__WXPM__)
84 68
85 MyFrame::MyFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) 69 MyFrame::MyFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style )
86 : wxFrame( parent, id, title, pos, size, style ) 70 : wxFrame( parent, id, title, pos, size, style )
87 { 71 {
88 this->SetSizeHints( wxSize( WINL_W, 500 ), wxDefaultSize ); 72 this->SetSizeHints( wxSize( WINL_W, 500 ), wxDefaultSize );
73 this->SetMinSize( wxSize( WINL_W, 500 ) );
89 this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_ACTIVEBORDER ) ); 74 this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_ACTIVEBORDER ) );
90 //this->SetBackgroundColour( wxColour(wxT("WHEAT")) ); 75 //this->SetBackgroundColour( wxColour(wxT("WHEAT")) );
91 76
92 // set the frame icon 77 // set the frame icon
93 SetIcon(wxICON(sample)); 78 SetIcon(wxICON(sample));
94 79
95 // メニューバー Menu 80 // メニューバー Menu
96 m_menubar = new wxMenuBar( 0 ); 81 m_menubar = new wxMenuBar( 0 );
97 m_menuFile = new wxMenu(); 82 m_menuFile = new wxMenu();
98 83
99 wxMenuItem* m_menuItemViewMode = new wxMenuItem( m_menuFile, ID_MNVIEW, wxString( wxT("ビューモード") ) , wxT("Toggle ViewMode"), wxITEM_CHECK ); 84 wxMenuItem* m_menuItemBPrintMode = new wxMenuItem( m_menuFile, ID_MNBPNT, wxString( wxT("バッチ印刷モード\tF12") ) , wxT("Batch Print Mode"), wxITEM_NORMAL );
100 m_menuFile->Append( m_menuItemViewMode ); 85 m_menuFile->Append( m_menuItemBPrintMode );
86
87 wxMenuItem* m_menuItemIndex = new wxMenuItem( m_menuFile, ID_MNINDEX, wxString( wxT("インデックス\tF11") ) , wxT("Update index"), wxITEM_NORMAL );
88 m_menuFile->Append( m_menuItemIndex );
101 89
102 m_menuFile->AppendSeparator(); // ---- 90 m_menuFile->AppendSeparator(); // ----
103 91
104 wxMenuItem* m_menuItemIndex = new wxMenuItem( m_menuFile, ID_MNINDEX, wxString( wxT("インデックス") ) , wxT("Update index"), wxITEM_NORMAL ); 92 wxMenuItem* m_menuItemViewStyle = new wxMenuItem( m_menuFile, ID_MNVIEW, wxString( wxT("ビュースタイル\tF10") ) , wxT("Toggle ViewStyle"), wxITEM_CHECK );
105 m_menuFile->Append( m_menuItemIndex ); 93 m_menuFile->Append( m_menuItemViewStyle );
106 94
107 wxMenuItem* m_menuItemMask = new wxMenuItem( m_menuFile, ID_MNMASKPARAM, wxString( wxT("マスクパラメータ") ) , wxT("Setup mask parameters"), wxITEM_NORMAL ); 95 m_menuFile->AppendSeparator(); // ----
96
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 );
99
100 wxMenuItem* m_menuItemMask = new wxMenuItem( m_menuFile, ID_MNMASKPARAM, wxString( wxT("マスクパラメータ(&M)") ) , wxT("Setup mask parameters"), wxITEM_NORMAL );
108 m_menuFile->Append( m_menuItemMask ); 101 m_menuFile->Append( m_menuItemMask );
109 102
110 wxMenuItem* m_menuItemAppDir = new wxMenuItem( m_menuFile, ID_MNAPPDIR, wxString( wxT("アプリケーションフォルダを開く") ) , wxT("Open application directory"), wxITEM_NORMAL ); 103 wxMenuItem* m_menuItemAppDir = new wxMenuItem( m_menuFile, ID_MNAPPDIR, wxString( wxT("アプリケーションフォルダを開く(&O)") ) , wxT("Open application directory"), wxITEM_NORMAL );
111 m_menuFile->Append( m_menuItemAppDir ); 104 m_menuFile->Append( m_menuItemAppDir );
112 105
113 m_menuFile->AppendSeparator(); // ---- 106 m_menuFile->AppendSeparator(); // ----
114 107
115 wxMenuItem* m_menuItemAbout = new wxMenuItem( m_menuFile, ID_MNABOUT, wxString( wxT("&About...\tF1") ) , wxT("Show about dialog"), wxITEM_NORMAL ); 108 wxMenuItem* m_menuItemAbout = new wxMenuItem( m_menuFile, ID_MNABOUT, wxString( wxT("&About...\tF1") ) , wxT("Show about dialog"), wxITEM_NORMAL );
121 114
122 // 115 //
123 wxBoxSizer* bSizerTop = new wxBoxSizer( wxVERTICAL ); 116 wxBoxSizer* bSizerTop = new wxBoxSizer( wxVERTICAL );
124 117
125 m_splitter = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D ); 118 m_splitter = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D );
126 wxBoxSizer* bSizerL = new wxBoxSizer( wxVERTICAL ); 119 wxBoxSizer* bSizerMain = new wxBoxSizer( wxVERTICAL );
127 120
128 // left-pane 121 // left-pane
129 m_panelL = new wxPanel( m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); 122 m_panelMain = new wxPanel( m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
130 123
131 wxString logo = wxGetCwd() + wxFILE_SEP_PATH + wxT("image") + wxFILE_SEP_PATH + wxT("logo.png"); 124 wxString logo = wxGetCwd() + wxFILE_SEP_PATH + wxT("image") + wxFILE_SEP_PATH + wxT("logo.png");
132 wxBitmap bmp = wxBitmap( logo, wxBITMAP_TYPE_PNG ); 125 wxBitmap bmp = wxBitmap( logo, wxBITMAP_TYPE_PNG );
133 m_bitmap = new wxStaticBitmap( m_panelL, wxID_ANY, bmp, wxDefaultPosition, wxSize( LOGO_W, LOGO_H ), 0 ); 126 m_bitmap = new wxStaticBitmap( m_panelMain, wxID_ANY, bmp, wxDefaultPosition, wxSize( LOGO_W, LOGO_H ), 0 );
134 bSizerL->Add( m_bitmap, 0, wxALL, 5 ); 127 bSizerMain->Add( m_bitmap, 0, wxALL, 5 );
135 128
136 m_textCtrlName = new wxTextCtrl( m_panelL, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 200, -1 ), 0 ); 129 m_textCtrlName = new wxTextCtrl( m_panelMain, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 200, -1 ), 0 );
137 bSizerL->Add( m_textCtrlName, 0, wxALL, 5 ); 130 bSizerMain->Add( m_textCtrlName, 0, wxALL, 5 );
138 131
139 m_textCtrlAddr = new wxTextCtrl( m_panelL, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 380, -1 ), 0 ); 132 m_textCtrlAddr = new wxTextCtrl( m_panelMain, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 380, -1 ), 0 );
140 bSizerL->Add( m_textCtrlAddr, 0, wxALL, 5 ); 133 bSizerMain->Add( m_textCtrlAddr, 0, wxALL, 5 );
141 134
142 m_listCtrl = new wxListCtrl( m_panelL, ID_LIST, wxDefaultPosition, wxDefaultSize, wxLC_REPORT ); 135 m_listCtrl = new wxListCtrl( m_panelMain, ID_LIST, wxDefaultPosition, wxDefaultSize, wxLC_REPORT );
143 wxListItem itemCol; 136 wxListItem itemCol;
144 itemCol.SetText( wxT("通番") ); 137 itemCol.SetText( wxT("通番") );
145 m_listCtrl->InsertColumn( 0, itemCol ); 138 m_listCtrl->InsertColumn( 0, itemCol );
146 m_listCtrl->SetColumnWidth( 0, 50 ); 139 m_listCtrl->SetColumnWidth( 0, 50 );
147 itemCol.SetText( wxT("年月日") ); 140 itemCol.SetText( wxT("年月日") );
148 m_listCtrl->InsertColumn( 1, itemCol ); 141 m_listCtrl->InsertColumn( 1, itemCol );
149 m_listCtrl->SetColumnWidth( 1, 80 ); 142 m_listCtrl->SetColumnWidth( 1, 80 );
150 itemCol.SetText( wxT("場所") ); 143 itemCol.SetText( wxT("場所") );
151 m_listCtrl->InsertColumn( 2, itemCol ); 144 m_listCtrl->InsertColumn( 2, itemCol );
152 m_listCtrl->SetColumnWidth( 2, 300 ); 145 m_listCtrl->SetColumnWidth( 2, 300 );
153 bSizerL->Add( m_listCtrl, 1, wxALL|wxEXPAND, 5 ); 146 bSizerMain->Add( m_listCtrl, 1, wxALL|wxEXPAND, 5 );
154 147
155 wxBoxSizer* bSizerCmd = new wxBoxSizer( wxHORIZONTAL ); 148 wxBoxSizer* bSizerCmd = new wxBoxSizer( wxHORIZONTAL );
156 149
157 m_staticText = new wxStaticText( m_panelL, wxID_ANY, wxT("コマンド?"), wxDefaultPosition, wxDefaultSize, 0 ); 150 m_staticText = new wxStaticText( m_panelMain, wxID_ANY, wxT("コマンド?"), wxDefaultPosition, wxDefaultSize, 0 );
158 bSizerCmd->Add( m_staticText, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); 151 bSizerCmd->Add( m_staticText, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
159 152
160 m_searchBox = new MySearchBox( m_panelL, ID_SEARCH, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER ); 153 m_searchBox = new MySearchBox( m_panelMain, ID_SEARCH, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
161 #ifndef __WXMAC__ 154 #ifndef __WXMAC__
162 m_searchBox->ShowSearchButton( true ); 155 m_searchBox->ShowSearchButton( true );
163 #endif 156 #endif
164 m_searchBox->ShowCancelButton( false ); 157 m_searchBox->ShowCancelButton( false );
165 m_searchBox->SetFocus(); 158 m_searchBox->SetFocus();
166 bSizerCmd->Add( m_searchBox, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); 159 bSizerCmd->Add( m_searchBox, 1, wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
167 160
168 m_buttonKana = new wxButton( m_panelL, ID_KANA, wxT("カナ検索"), wxDefaultPosition, wxSize( 65, -1 ), 0 ); 161 m_buttonKana = new wxButton( m_panelMain, ID_KANA, wxT("カナ検索"), wxDefaultPosition, wxSize( 65, -1 ), 0 );
169 bSizerCmd->Add( m_buttonKana, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 20 ); 162 bSizerCmd->Add( m_buttonKana, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 20 );
170 163
171 m_buttonHist = new wxButton( m_panelL, ID_HIST, wxT("検索履歴"), wxDefaultPosition, wxSize( 65, -1 ), 0 ); 164 m_buttonHist = new wxButton( m_panelMain, ID_HIST, wxT("検索履歴"), wxDefaultPosition, wxSize( 65, -1 ), 0 );
172 bSizerCmd->Add( m_buttonHist, 0, wxALL, 5 ); 165 bSizerCmd->Add( m_buttonHist, 0, wxALL, 5 );
173 166
174 bSizerL->Add( bSizerCmd, 0, wxEXPAND, 5 ); 167 bSizerMain->Add( bSizerCmd, 0, wxEXPAND, 5 );
175 168
176 m_panelL->SetSizer( bSizerL ); 169 m_panelMain->SetSizer( bSizerMain );
177 m_panelL->Layout(); 170 m_panelMain->Layout();
178 bSizerL->Fit( m_panelL ); 171 bSizerMain->Fit( m_panelMain );
179 172
180 // right-pane 173 // right-pane
181 m_panelR = new wxPanel( m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); 174 m_panelView = new wxPanel( m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
182 wxBoxSizer* bSizerR = new wxBoxSizer( wxHORIZONTAL ); 175 wxBoxSizer* bSizerView = new wxBoxSizer( wxHORIZONTAL );
183 176
184 m_bitmapView = new wxStaticBitmap( m_panelR, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); 177 m_bitmapView = new wxStaticBitmap( m_panelView, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
185 bSizerR->Add( m_bitmapView, 1, wxALL|wxEXPAND, 5 ); 178 bSizerView->Add( m_bitmapView, 1, wxALL|wxEXPAND, 5 );
186 179
187 m_listCtrlThumb = new wxListCtrl( m_panelR, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_ICON ); 180 m_listCtrlThumb = new wxListCtrl( m_panelView, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_ICON );
188 bSizerR->Add( m_listCtrlThumb, 0, wxALL|wxEXPAND, 5 ); 181 bSizerView->Add( m_listCtrlThumb, 0, wxALL|wxEXPAND, 5 );
189 182
190 m_panelR->SetSizer( bSizerR ); 183 m_panelView->SetSizer( bSizerView );
191 m_panelR->Layout(); 184 m_panelView->Layout();
192 bSizerR->Fit( m_panelR ); 185 bSizerView->Fit( m_panelView );
193 186
194 m_panelR->Show( false ); 187 m_panelView->Show( false );
195 m_splitter->Initialize( m_panelL ); 188 //
189 m_splitter->Initialize( m_panelMain );
196 bSizerTop->Add( m_splitter, 1, wxEXPAND, 5 ); 190 bSizerTop->Add( m_splitter, 1, wxEXPAND, 5 );
197 191
198 this->SetSizer( bSizerTop ); 192 this->SetSizer( bSizerTop );
199 this->Layout(); 193 this->Layout();
200 194
201 // ステータスバー Statusbar 195 // ステータスバー Statusbar
202 m_statusBar = new wxStatusBar( this, wxID_ANY, wxST_SIZEGRIP ); 196 m_statusBar = new wxStatusBar( this, wxID_ANY, wxST_SIZEGRIP );
203 int widths[] = { 200, 100, -1, 90 }; 197 int widths[] = { 200, -1, 10, 90 };
204 m_statusBar->SetFieldsCount( 4, widths ); 198 m_statusBar->SetFieldsCount( 4, widths );
205 this->SetStatusBar( m_statusBar ); 199 this->SetStatusBar( m_statusBar );
206 SetStatusText( wxT("被保番を入力してスタート!") ); 200 SetStatusText( wxT("被保番を入力してスタート!") );
207 201
208 this->Centre( wxBOTH ); 202 this->Centre( wxBOTH );
215 209
216 // Event Table 210 // Event Table
217 BEGIN_EVENT_TABLE( MyFrame, wxFrame ) 211 BEGIN_EVENT_TABLE( MyFrame, wxFrame )
218 EVT_MENU( ID_MNABOUT, MyFrame::OnAbout ) 212 EVT_MENU( ID_MNABOUT, MyFrame::OnAbout )
219 EVT_MENU( wxID_EXIT, MyFrame::OnQuit ) 213 EVT_MENU( wxID_EXIT, MyFrame::OnQuit )
220 EVT_MENU( ID_MNVIEW, MyFrame::OnViewMode ) 214 EVT_MENU( ID_MNBPNT, MyFrame::OnBPrintMode )
215 EVT_MENU( ID_MNVIEW, MyFrame::OnViewStyle )
221 EVT_MENU( ID_MNINDEX, MyFrame::OnIndex ) 216 EVT_MENU( ID_MNINDEX, MyFrame::OnIndex )
217 EVT_MENU( ID_MNDBBKUP, MyFrame::OnDBBackup )
222 EVT_MENU( ID_MNMASKPARAM, MyFrame::OnMaskParam ) 218 EVT_MENU( ID_MNMASKPARAM, MyFrame::OnMaskParam )
223 EVT_MENU( ID_MNAPPDIR, MyFrame::OnOpenAppDir ) 219 EVT_MENU( ID_MNAPPDIR, MyFrame::OnOpenAppDir )
224 EVT_LIST_ITEM_ACTIVATED( ID_LIST, MyFrame::OnOpenHhsDir ) 220 EVT_LIST_ITEM_ACTIVATED( ID_LIST, MyFrame::OnSelectHhsDir )
225 EVT_BUTTON( ID_KANA, MyFrame::OnKana ) 221 EVT_BUTTON( ID_KANA, MyFrame::OnKana )
226 EVT_BUTTON( ID_HIST, MyFrame::OnHistory ) 222 EVT_BUTTON( ID_HIST, MyFrame::OnHistory )
227 EVT_SIZE( MyFrame::OnWinSize ) 223 EVT_SIZE( MyFrame::OnWinSize )
228 EVT_MOVE( MyFrame::OnWinMove ) 224 EVT_MOVE( MyFrame::OnWinMove )
229 EVT_CLOSE( MyFrame::SaveConfig ) 225 EVT_CLOSE( MyFrame::SaveConfig )
226 EVT_TEXT_ENTER( ID_SEARCH, MyFrame::OnCommand )
230 END_EVENT_TABLE() 227 END_EVENT_TABLE()
231 228
232 // Event Handlers & Functions 229 // Event Handlers & Functions
233 /* インデックス作成ダイアログ */ 230 /* エンターキーフック */
234 void MyFrame::OnIndex( wxCommandEvent& WXUNUSED(event) ) 231 void MyFrame::OnCommand( wxCommandEvent& event )
235 { 232 {
236 IndexDialog* index = new IndexDialog( this, wxID_ANY, wxT("インデックス作成"), wxDefaultPosition, wxSize( 500, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); 233 wxString s = m_searchBox->GetValue();
237 index->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); 234
238 index->ShowModal(); 235 if ( s.IsSameAs( wxT("99") ) ) {
236 Close();
237 return;
238 }
239
240 if ( s.IsSameAs( wxT("+") ) ) {
241 PrintImages( m_hhsno );
242 return;
243 }
244
245 wxRegEx reHhs( wxT("^0[1238][0-9]{8}$") );
246 if ( reHhs.Matches( s ) ) {
247 m_hhsno = s;
248 UpdateList( m_hhsno );
249 return;
250 }
251
252 wxRegEx reNo( wxT("^[0-9]{1,2}$") );
253 if ( reNo.Matches( s ) ) {
254 long n;
255 s.ToLong( &n, 10 );
256 n--;
257 OpenHhsDir( (int)n );
258 return;
259 }
260
261 SetStatusMessage( wxT("不適切な入力です."), 0 );
262 return;
263
264 event.Skip();
239 } 265 }
240 /* マスクパラメータを設定ファイルから読み込む */ 266 /* マスクパラメータを設定ファイルから読み込む */
241 void MyFrame::LoadMaskParam( void ) 267 void MyFrame::LoadMaskParam( void )
242 { 268 {
243 conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("app.conf"); 269 conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("app.conf");
266 config->Read( wxT("w3"), &w ); 292 config->Read( wxT("w3"), &w );
267 config->Read( wxT("h3"), &h ); 293 config->Read( wxT("h3"), &h );
268 m_mask3.SetPosition( wxPoint( x, y ) ); 294 m_mask3.SetPosition( wxPoint( x, y ) );
269 m_mask3.SetSize( wxSize( w, h ) ); 295 m_mask3.SetSize( wxSize( w, h ) );
270 296
297 config->Read( wxT("x1o"), &x );
298 config->Read( wxT("y1o"), &y );
299 config->Read( wxT("w1o"), &w );
300 config->Read( wxT("h1o"), &h );
301 m_mask1old.SetPosition( wxPoint( x, y ) );
302 m_mask1old.SetSize( wxSize( w, h ) );
303
304 config->Read( wxT("x2o"), &x );
305 config->Read( wxT("y2o"), &y );
306 config->Read( wxT("w2o"), &w );
307 config->Read( wxT("h2o"), &h );
308 m_mask2old.SetPosition( wxPoint( x, y ) );
309 m_mask2old.SetSize( wxSize( w, h ) );
310
311 config->Read( wxT("x3o"), &x );
312 config->Read( wxT("y3o"), &y );
313 config->Read( wxT("w3o"), &w );
314 config->Read( wxT("h3o"), &h );
315 m_mask3old.SetPosition( wxPoint( x, y ) );
316 m_mask3old.SetSize( wxSize( w, h ) );
317 }
318 /* 印刷 */
319 void MyFrame::PrintImages( wxString hhsno )
320 {
321 // 印刷用の html を作成
322 wxArrayString path = GetPathByHhsNo( hhsno );
323 if ( path.IsEmpty() ) return;
324
325 wxDir dir( path[0] );
326 if ( !dir.IsOpened() ) return;
327
328 wxString html;
329 html = html + wxT("<html><body>\n");
330
331 wxString file;
332 bool cout = dir.GetFirst( &file, wxT("*.jpg"), wxDIR_FILES );
333 int n = 0;
334 wxString tmpdir = wxGetCwd() + wxFILE_SEP_PATH + wxT("tmp") + wxFILE_SEP_PATH;
335 while ( cout ) {
336 file = path[0] + wxFILE_SEP_PATH + file;
337 file.Replace( wxFILE_SEP_PATH, wxT("/") );
338 wxString tmpjpg = wxString::Format( wxT("%stmp%d.jpg"), tmpdir, n );
339
340 if ( n == 0 ) { // 1枚目はマスクする
341 wxImage img_org( file, wxBITMAP_TYPE_JPEG );
342 int ver = GetMarksheetVersion( file );
343 if ( ver == 2 ) {
344 img_org.SetRGB( m_mask1, 255, 255, 255 ); // cm name
345 img_org.SetRGB( m_mask2, 255, 255, 255 ); // cm no.
346 img_org.SetRGB( m_mask3, 255, 255, 255 ); // barcode
347 }
348 else { // 古いマークシート ver == 1
349 img_org.SetRGB( m_mask1old, 255, 255, 255 ); // cm name
350 img_org.SetRGB( m_mask2old, 255, 255, 255 ); // cm no.
351 img_org.SetRGB( m_mask3old, 255, 255, 255 ); // barcode
352 }
353 img_org.SaveFile( tmpjpg );
354 }
355 else {
356 wxCopyFile( file, tmpjpg, true );
357 }
358 html = html + wxT("<img src=\"") + tmpjpg + wxT("\" width=\"750\" height=\"1060\"/>");
359 cout = dir.GetNext( &file );
360 n++;
361 }
362 html = html + wxT("</body></html>");
363
364 // start printing
365 wxHtmlPrintout hpout( wxT("Searcher03") );
366 hpout.SetMargins( 0, 0, 0, 0, 0 );
367 wxPrintDialogData pd;
368 wxPrinter p( &pd );
369
370 hpout.SetHtmlText( html, wxEmptyString, false );
371 p.Print( NULL, &hpout, true );
372
373 // end
374 SetStatusMessage( wxT("被保番かフォルダ番号を."), 0 );
375 }
376 /* 一括印刷モード */
377 void MyFrame::OnBPrintMode( wxCommandEvent& WXUNUSED(event) )
378 {
379 FrameBatchPrint* bp = new FrameBatchPrint( this, wxID_ANY, wxT("一括印刷"), wxDefaultPosition, wxSize( 640, 500 ), wxCAPTION|wxFRAME_NO_TASKBAR );
380 bp->SetMask1( m_mask1 );
381 bp->SetMask2( m_mask2 );
382 bp->SetMask3( m_mask3 );
383 bp->SetMask1Old( m_mask1old );
384 bp->SetMask2Old( m_mask2old );
385 bp->SetMask3Old( m_mask3old );
386 bp->Show( true );
387 }
388 /* インデックス作成ダイアログ */
389 void MyFrame::OnIndex( wxCommandEvent& WXUNUSED(event) )
390 {
391 wxString rootdir;
392 config->SetPath( wxT("/Index") );
393 config->Read( wxT("rootdir"), &rootdir );
394
395 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 );
397 index->SetRootdir( rootdir );
398 index->ShowModal();
271 } 399 }
272 /* マスクパラメータ設定ダイアログ */ 400 /* マスクパラメータ設定ダイアログ */
273 void MyFrame::OnMaskParam( wxCommandEvent& WXUNUSED(event) ) 401 void MyFrame::OnMaskParam( wxCommandEvent& WXUNUSED(event) )
274 { 402 {
275 MaskDialog* mask = new MaskDialog( this, wxID_ANY, wxT("マスク位置とサイズの指定"), wxDefaultPosition, wxSize( 400, 210 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); 403 MaskDialog* mask = new MaskDialog( this, wxID_ANY, wxT("マスク位置とサイズの指定"), wxDefaultPosition, wxSize( 350, 250 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL );
276 mask->SetMask1( m_mask1 ); 404 mask->SetMask1( m_mask1 );
277 mask->SetMask2( m_mask2 ); 405 mask->SetMask2( m_mask2 );
278 mask->SetMask3( m_mask3 ); 406 mask->SetMask3( m_mask3 );
407 mask->SetMask1Old( m_mask1old );
408 mask->SetMask2Old( m_mask2old );
409 mask->SetMask3Old( m_mask3old );
279 mask->LoadParams(); 410 mask->LoadParams();
280 mask->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); 411 mask->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM );
281 412
282 if ( mask->ShowModal() == wxID_OK ) { 413 if ( mask->ShowModal() == wxID_OK ) {
283 m_mask1 = mask->GetMask1(); 414 m_mask1 = mask->GetMask1();
284 m_mask2 = mask->GetMask2(); 415 m_mask2 = mask->GetMask2();
285 m_mask3 = mask->GetMask3(); 416 m_mask3 = mask->GetMask3();
417 m_mask1old = mask->GetMask1Old();
418 m_mask2old = mask->GetMask2Old();
419 m_mask3old = mask->GetMask3Old();
286 420
287 config->SetPath( wxT("/Mask") ); 421 config->SetPath( wxT("/Mask") );
288 422
289 config->Write( wxT("x1"), m_mask1.GetX() ); 423 config->Write( wxT("x1"), m_mask1.GetX() );
290 config->Write( wxT("y1"), m_mask1.GetY() ); 424 config->Write( wxT("y1"), m_mask1.GetY() );
299 config->Write( wxT("x3"), m_mask3.GetX() ); 433 config->Write( wxT("x3"), m_mask3.GetX() );
300 config->Write( wxT("y3"), m_mask3.GetY() ); 434 config->Write( wxT("y3"), m_mask3.GetY() );
301 config->Write( wxT("w3"), m_mask3.GetWidth() ); 435 config->Write( wxT("w3"), m_mask3.GetWidth() );
302 config->Write( wxT("h3"), m_mask3.GetHeight() ); 436 config->Write( wxT("h3"), m_mask3.GetHeight() );
303 437
304 delete config; 438 config->Write( wxT("x1o"), m_mask1old.GetX() );
305 } 439 config->Write( wxT("y1o"), m_mask1old.GetY() );
440 config->Write( wxT("w1o"), m_mask1old.GetWidth() );
441 config->Write( wxT("h1o"), m_mask1old.GetHeight() );
442
443 config->Write( wxT("x2o"), m_mask2old.GetX() );
444 config->Write( wxT("y2o"), m_mask2old.GetY() );
445 config->Write( wxT("w2o"), m_mask2old.GetWidth() );
446 config->Write( wxT("h2o"), m_mask2old.GetHeight() );
447
448 config->Write( wxT("x3o"), m_mask3old.GetX() );
449 config->Write( wxT("y3o"), m_mask3old.GetY() );
450 config->Write( wxT("w3o"), m_mask3old.GetWidth() );
451 config->Write( wxT("h3o"), m_mask3old.GetHeight() );
452
453 config->Flush( false );
454 }
455 }
456 /* データベースファイルのバックアップ */
457 void MyFrame::OnDBBackup( wxCommandEvent& WXUNUSED(event) )
458 {
459 wxDateTime now = wxDateTime::Now();
460 wxString str = now.Format( wxT("%Y%m%d%H%M%S") );
461
462 wxString org, bk;
463 wxString dbdir = wxGetCwd() + wxFILE_SEP_PATH + wxT("db");
464
465 org = dbdir + wxFILE_SEP_PATH + wxT("hhs.db");
466 bk = dbdir + wxFILE_SEP_PATH + str + wxT("_hhs.db");
467 wxCopyFile( org, bk, false );
468
469 org = dbdir + wxFILE_SEP_PATH + wxT("ccn.db");
470 bk = dbdir + wxFILE_SEP_PATH + str + wxT("_ccn.db");
471 wxCopyFile( org, bk, false );
472
473 wxMessageBox( wxT("バックアップ終了.") );
474 return;
306 } 475 }
307 /* アプリフォルダを開く */ 476 /* アプリフォルダを開く */
308 void MyFrame::OnOpenAppDir( wxCommandEvent& WXUNUSED(event) ) 477 void MyFrame::OnOpenAppDir( wxCommandEvent& WXUNUSED(event) )
309 { 478 {
310 wxString appdir = wxGetCwd(); 479 wxString appdir = wxGetCwd();
311 wxString execmd = wxT("explorer ") + appdir; 480 wxString execmd = wxT("explorer ") + appdir;
312 wxExecute( execmd ); 481 wxExecute( execmd );
313 } 482 }
314 /* ビューモードの切替え */ 483 /* ビューの切替え */
315 void MyFrame::OnViewMode( wxCommandEvent& event ) 484 void MyFrame::OnViewStyle( wxCommandEvent& event )
316 { 485 {
317 if ( event.IsChecked() ) { 486 if ( event.IsChecked() ) {
318 int x, y; 487 int x, y;
319 GetSize( &x, &y ); 488 GetSize( &x, &y );
320 SetSize( WINL_W + 500, y ); 489 SetSize( WINL_W + 500, y );
321 m_splitter->SplitVertically( m_panelL, m_panelR, 0 ); 490 m_splitter->SplitVertically( m_panelMain, m_panelView, 0 );
322 } 491 }
323 else { 492 else {
324 m_splitter->Unsplit(); 493 m_splitter->Unsplit();
325 SetSize( WINL_W, -1 ); 494 SetSize( WINL_W, -1 );
326 } 495 }
327 } 496 }
328 /* 被保険者フォルダを開く */ 497 /* 被保険者フォルダを開く */
329 void MyFrame::OnOpenHhsDir( wxListEvent& event ) 498 void MyFrame::OnSelectHhsDir( wxListEvent& event )
330 { 499 {
331 wxString hhsdir;
332 /*
333 hhsdir = m_textCtrlDist->GetValue() + wxFILE_SEP_PATH;
334
335 int i = event.GetIndex(); 500 int i = event.GetIndex();
501 OpenHhsDir( i );
502 }
503 /* 番号で指定したフォルダを開く */
504 void MyFrame::OpenHhsDir( int n )
505 {
336 wxListItem item; 506 wxListItem item;
337 item.SetId(i); 507 item.SetId( n );
338 508 item.SetColumn( 2 );
339 item.SetColumn(1); 509 item.SetMask( wxLIST_MASK_TEXT );
340 item.SetMask(wxLIST_MASK_TEXT); 510 m_listCtrl->GetItem( item );
341 m_listCtrlHhsDir->GetItem( item ); 511 wxString dir = item.GetText();
342 hhsdir.Append( item.GetText() ); 512 wxString execmd = wxT("explorer ") + dir;
343 513 wxExecute( execmd );
344 DirViewFrame* dvf = new DirViewFrame( (wxWindow*)this, wxID_ANY, wxEmptyString );
345 dvf->m_dir = hhsdir;
346 dvf->LoadListImage();
347 dvf->Show(true);
348 */
349 } 514 }
350 515
351 /* カナ検索ダイアログ */ 516 /* カナ検索ダイアログ */
352 void MyFrame::OnKana( wxCommandEvent& WXUNUSED(event) ) 517 void MyFrame::OnKana( wxCommandEvent& WXUNUSED(event) )
353 { 518 {
354 KanaDialog* kana = new KanaDialog( this, wxID_ANY, wxT("カナ氏名で被保番を検索"), wxDefaultPosition, wxSize( 600, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxRESIZE_BORDER|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); 519 KanaDialog* kana = new KanaDialog( this, wxID_ANY, wxT("カナ氏名で被保番を検索"), wxDefaultPosition, wxSize( 640, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxRESIZE_BORDER|wxSTAY_ON_TOP|wxTAB_TRAVERSAL );
355 kana->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); 520 kana->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM );
356 521
357 if ( kana->ShowModal() == wxID_OK ) { 522 if ( kana->ShowModal() == wxID_OK ) {
358 wxMessageBox( kana->GetHhsNo() ); 523 m_hhsno = kana->GetHhsNo();
359 } 524 UpdateList( m_hhsno );
360 525 }
361 UpdateList();
362 } 526 }
363 /* 検索履歴検索ダイアログ */ 527 /* 検索履歴検索ダイアログ */
364 void MyFrame::OnHistory( wxCommandEvent& WXUNUSED(event) ) 528 void MyFrame::OnHistory( wxCommandEvent& WXUNUSED(event) )
365 { 529 {
366 HistDialog* hist = new HistDialog( this, wxID_ANY, wxT("検索履歴"), wxDefaultPosition, wxSize( 550, 500 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); 530 HistDialog* hist = new HistDialog( this, wxID_ANY, wxT("検索履歴"), wxDefaultPosition, wxSize( 600, 500 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL );
367 hist->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); 531 hist->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM );
368 532
369 if ( hist->ShowModal() == wxID_OK ) { 533 if ( hist->ShowModal() == wxID_OK ) {
370 534 m_hhsno = hist->GetHhsNo();
371 } 535 UpdateList( m_hhsno );
372 536 }
373 UpdateList();
374 } 537 }
375 538
376 /* 検索結果をリストアップ */ 539 /* 検索結果をリストアップ */
377 void MyFrame::UpdateList( void ) 540 void MyFrame::UpdateList( wxString hhsno )
378 { 541 {
379 m_listCtrl->DeleteAllItems(); 542 m_listCtrl->DeleteAllItems();
380 } 543 for ( int i = 0; i < m_statusBar->GetFieldsCount(); i++ ) {
381 544 SetStatusMessage( wxEmptyString, i );
545 }
546
547 //
548 wxArrayString s = wxSplit( GetHhsInfoByHhsNo( hhsno ), '_', '\\' );
549 wxString history;
550 if ( s.IsEmpty() ) {
551 SetStatusMessage( wxT("データベースに存在しない被保険者です."), 0 );
552 history = hhsno + wxT("###");
553 }
554 else {
555 m_textCtrlName->SetValue( s[0] );
556 m_textCtrlAddr->SetValue( s[1] );
557 history = hhsno + wxT("#") + s[0] + wxT("#") + s[1] + wxT("#");
558 }
559 m_searchBox->SetValue( hhsno );
560 m_searchBox->SelectAll();
561 m_searchBox->SetFocus();
562
563 wxArrayString path = GetPathByHhsNo( hhsno );
564 if ( path.IsEmpty() ) {
565 SetStatusMessage( wxT("審査会履歴がありません."), 1 );
566 return;
567 }
568
569 wxRegEx reDate(wxT("(^.*20[0-9]{2}.)(20[0-9]{2})([0-2][0-9])([0-9]{2})(.*$)"));
570 for ( int i = 0; i < path.GetCount(); i++ ) {
571 wxString date = path[i];
572 reDate.ReplaceAll( &date, wxT("\\2-\\3-\\4") );
573
574 m_listCtrl->InsertItem( i, -1 );
575 m_listCtrl->SetItem( i, 0,wxString::Format( wxT("%d"), i + 1 ) , -1 ); // No
576 m_listCtrl->SetItem( i, 1, date, -1 );
577 m_listCtrl->SetItem( i, 2, path[i], -1 );
578
579 if ( i % 2 ) m_listCtrl->SetItemBackgroundColour( i, wxColour( wxT("WHEAT") ) );
580 }
581
582 SetStatusMessage( wxT("「+」キーで通番1を印刷."), 0 );
583
584 //
585 wxString filename = wxGetCwd() + wxFILE_SEP_PATH + wxT("tmp") + wxFILE_SEP_PATH + wxT("history");
586 wxDateTime now = wxDateTime::Now();
587 history = history + now.Format( wxT("%Y-%m-%d %H:%M:%S") );
588
589 wxTextFile hist( filename );
590 hist.Open();
591 hist.RemoveLine( 20 );
592 hist.InsertLine( history, 0 );
593 hist.Write();
594 hist.Close();
595 }
382 /* ステータスバーにメッセージを出力 */ 596 /* ステータスバーにメッセージを出力 */
383 void MyFrame::SetStatusMessage( wxString msg, long n ) 597 void MyFrame::SetStatusMessage( wxString msg, long n )
384 { 598 {
385 if ( GetStatusBar() ) 599 if ( GetStatusBar() )
386 SetStatusText( msg, n ); 600 SetStatusText( msg, n );