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