0
|
1 // Filename : myframe.cpp
|
9
|
2 // Last Change: 24-Apr-2014.
|
0
|
3 //
|
|
4 #include "main.h"
|
1
|
5 #include "db.h"
|
0
|
6 #include "about.h"
|
|
7 #include "kana.h"
|
|
8 #include "hist.h"
|
9
|
9 #include "preview.h"
|
0
|
10 #include "index.h"
|
4
|
11 #include "param.h"
|
2
|
12 #include "marksheet.h"
|
|
13 #include "myframe.h"
|
|
14 #include "bprint.h"
|
0
|
15
|
9
|
16
|
1
|
17 ///////////////////////////////////////////////////////////////
|
|
18 // カスタム検索ボックス
|
|
19 MySearchBox::MySearchBox( wxWindow* parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, long style )
|
|
20 : wxSearchCtrl( parent, id, value, pos, size, style )
|
|
21 {
|
|
22 }
|
|
23
|
|
24 MySearchBox::~MySearchBox()
|
|
25 {
|
|
26 }
|
|
27
|
9
|
28 void MySearchBox::SetMessage( wxString msg )
|
|
29 {
|
|
30 wxFrame* p = (wxFrame*)FindWindowById( ID_MAIN );
|
|
31 p->SetStatusText( msg, 0 );
|
|
32 }
|
|
33
|
1
|
34 // Event Table
|
|
35 BEGIN_EVENT_TABLE( MySearchBox, wxSearchCtrl )
|
|
36 EVT_CHAR( MySearchBox::OnKey )
|
|
37 END_EVENT_TABLE()
|
|
38
|
|
39 // Event Handlers & Functions
|
|
40 void MySearchBox::OnKey( wxKeyEvent& event )
|
|
41 {
|
9
|
42 int kc = event.GetKeyCode();
|
1
|
43 wxString s = GetValue();
|
|
44
|
9
|
45 if ( kc == 13 ) {
|
|
46 event.Skip();
|
|
47 return;
|
|
48 }
|
|
49
|
|
50 if ( kc == 45 ) { // テンキーの '-' キーで1文字削除
|
1
|
51 wxString t = GetStringSelection();
|
|
52 if ( t.IsEmpty() ) {
|
|
53 long p = GetInsertionPoint();
|
|
54 if ( p > 0 ) Remove( p - 1, p );
|
|
55 }
|
|
56 else {
|
|
57 Cut();
|
|
58 }
|
|
59 return;
|
|
60 }
|
|
61
|
9
|
62 if ( kc == WXK_ESCAPE ) { // clear by ESC
|
2
|
63 this->Clear();
|
1
|
64 return;
|
|
65 }
|
|
66
|
9
|
67 // auto-complete
|
|
68 Cut();
|
|
69 if ( kc >=48 && kc<=57 ) { // [0-9]
|
|
70 kc -= 48;
|
|
71 wxString input = GetValue() + wxString::Format( wxT("%d"), kc );
|
|
72 if ( input.Len() < 5 ) {
|
|
73 event.Skip();
|
|
74 return;
|
|
75 }
|
|
76 for ( unsigned int i = 0; i < m_jhhsno.GetCount(); i++ ) {
|
|
77 if ( m_jhhsno[i].StartsWith( input ) ) {
|
|
78 ChangeValue( m_jhhsno[i] );
|
|
79 SetSelection( input.Len(), 10 );
|
|
80
|
|
81 wxArrayString s = wxSplit( GetHhsInfoByHhsNo( m_jhhsno[i] ), '_', '\\' );
|
|
82 wxString msg = wxT("もしかして... ") + s[0] + wxT(" ?!");
|
|
83 SetMessage( msg );
|
|
84 return;
|
|
85 }
|
|
86 SetMessage( wxEmptyString );
|
|
87 }
|
|
88 event.Skip();
|
|
89 return;
|
|
90 }
|
1
|
91 event.Skip();
|
|
92 }
|
|
93
|
9
|
94 ///////////////////////////////////////////////////////////////
|
|
95 // サムネイルパネル
|
|
96 #define THUMB_W 60
|
|
97 #define THUMB_H 75
|
|
98 ThumbnailPanel::ThumbnailPanel( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
|
|
99 : wxPanel( parent, id, pos, size, style )
|
|
100 {
|
|
101 wxBoxSizer* bSizer = new wxBoxSizer( wxHORIZONTAL );
|
|
102 this->SetBackgroundColour( wxColour( 192, 192, 192 ) );
|
|
103
|
|
104 wxString thumb = wxGetCwd() + wxFILE_SEP_PATH + wxT("image") + wxFILE_SEP_PATH + wxT("thumbnail.png");
|
|
105 wxBitmap bmp = wxBitmap( thumb, wxBITMAP_TYPE_PNG );
|
|
106
|
|
107 m_bitmap0 = new wxStaticBitmap( this, ID_THBMP0, bmp, wxDefaultPosition, wxSize( THUMB_W, THUMB_H ), 0 );
|
|
108 bSizer->Add( m_bitmap0, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
|
109 m_bitmap0->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ThumbnailPanel::OnDClick0 ), NULL, this );
|
|
110
|
|
111 m_bitmap1 = new wxStaticBitmap( this, ID_THBMP1, bmp, wxDefaultPosition, wxSize( THUMB_W, THUMB_H ), 0 );
|
|
112 bSizer->Add( m_bitmap1, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
|
113 m_bitmap1->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ThumbnailPanel::OnDClick1 ), NULL, this );
|
|
114
|
|
115 m_bitmap2 = new wxStaticBitmap( this, ID_THBMP2, bmp, wxDefaultPosition, wxSize( THUMB_W, THUMB_H ), 0 );
|
|
116 bSizer->Add( m_bitmap2, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
|
117 m_bitmap2->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ThumbnailPanel::OnDClick2 ), NULL, this );
|
|
118
|
|
119 m_bitmap3 = new wxStaticBitmap( this, ID_THBMP3, bmp, wxDefaultPosition, wxSize( THUMB_W, THUMB_H ), 0 );
|
|
120 bSizer->Add( m_bitmap3, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
|
121 m_bitmap3->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ThumbnailPanel::OnDClick3 ), NULL, this );
|
|
122
|
|
123 m_bitmap4 = new wxStaticBitmap( this, ID_THBMP4, bmp, wxDefaultPosition, wxSize( THUMB_W, THUMB_H ), 0 );
|
|
124 bSizer->Add( m_bitmap4, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
|
125 m_bitmap4->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ThumbnailPanel::OnDClick4 ), NULL, this );
|
|
126
|
|
127 m_bitmap5 = new wxStaticBitmap( this, ID_THBMP5, bmp, wxDefaultPosition, wxSize( THUMB_W, THUMB_H ), 0 );
|
|
128 bSizer->Add( m_bitmap5, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
|
129 m_bitmap5->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ThumbnailPanel::OnDClick5 ), NULL, this );
|
|
130
|
|
131 this->SetSizer( bSizer );
|
|
132 this->Layout();
|
|
133 }
|
|
134
|
|
135 ThumbnailPanel::~ThumbnailPanel()
|
|
136 {
|
|
137 m_bitmap0->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ThumbnailPanel::OnDClick0 ), NULL, this );
|
|
138 m_bitmap1->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ThumbnailPanel::OnDClick1 ), NULL, this );
|
|
139 m_bitmap2->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ThumbnailPanel::OnDClick2 ), NULL, this );
|
|
140 m_bitmap3->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ThumbnailPanel::OnDClick3 ), NULL, this );
|
|
141 m_bitmap4->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ThumbnailPanel::OnDClick4 ), NULL, this );
|
|
142 m_bitmap5->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ThumbnailPanel::OnDClick5 ), NULL, this );
|
|
143 }
|
|
144
|
|
145 // Functions
|
|
146 /* サムネイル表示 */
|
|
147 void ThumbnailPanel::SetImages( wxString dirpath )
|
|
148 {
|
|
149 wxDir dir( dirpath );
|
|
150 if ( !dir.IsOpened() ) return;
|
|
151 m_imagefiles.Clear();
|
|
152 wxDir::GetAllFiles( dirpath, &m_imagefiles, wxT("*.jpg"), wxDIR_FILES );
|
|
153
|
|
154 wxString cachedir = wxT("cache") + dirpath.AfterLast( ':' );
|
|
155 wxDir cdir( cachedir );
|
|
156 if ( !cdir.IsOpened() ) return;
|
|
157
|
|
158 wxArrayString cachefiles;
|
|
159 wxDir::GetAllFiles( cachedir, &cachefiles, wxT("*.png"), wxDIR_FILES );
|
|
160
|
|
161 wxString thumb = wxGetCwd() + wxFILE_SEP_PATH + wxT("image") + wxFILE_SEP_PATH + wxT("thumbnail.png");
|
|
162 int n = cachefiles.GetCount();
|
|
163 if ( n < 6 ) {
|
|
164 while ( n < 6 ) {
|
|
165 cachefiles.Add( thumb );
|
|
166 n++;
|
|
167 }
|
|
168 }
|
|
169
|
|
170 wxBitmap bmp;
|
|
171 bmp.LoadFile( cachefiles[0], wxBITMAP_TYPE_PNG ); m_bitmap0->SetBitmap( bmp );
|
|
172 bmp.LoadFile( cachefiles[1], wxBITMAP_TYPE_PNG ); m_bitmap1->SetBitmap( bmp );
|
|
173 bmp.LoadFile( cachefiles[2], wxBITMAP_TYPE_PNG ); m_bitmap2->SetBitmap( bmp );
|
|
174 bmp.LoadFile( cachefiles[3], wxBITMAP_TYPE_PNG ); m_bitmap3->SetBitmap( bmp );
|
|
175 bmp.LoadFile( cachefiles[4], wxBITMAP_TYPE_PNG ); m_bitmap4->SetBitmap( bmp );
|
|
176 bmp.LoadFile( cachefiles[5], wxBITMAP_TYPE_PNG ); m_bitmap5->SetBitmap( bmp );
|
|
177 }
|
|
178 /* 画像クリックで拡大表示 */
|
|
179 void ThumbnailPanel::OnDClick0( wxMouseEvent& WXUNUSED(event) ) { Preview( 0 ); }
|
|
180 void ThumbnailPanel::OnDClick1( wxMouseEvent& WXUNUSED(event) ) { Preview( 1 ); }
|
|
181 void ThumbnailPanel::OnDClick2( wxMouseEvent& WXUNUSED(event) ) { Preview( 2 ); }
|
|
182 void ThumbnailPanel::OnDClick3( wxMouseEvent& WXUNUSED(event) ) { Preview( 3 ); }
|
|
183 void ThumbnailPanel::OnDClick4( wxMouseEvent& WXUNUSED(event) ) { Preview( 4 ); }
|
|
184 void ThumbnailPanel::OnDClick5( wxMouseEvent& WXUNUSED(event) ) { Preview( 5 ); }
|
|
185 void ThumbnailPanel::Preview( int n )
|
|
186 {
|
|
187 if ( m_imagefiles.GetCount() < n ) return;
|
|
188
|
|
189 PreviewDialog* pd = new PreviewDialog( this, wxID_ANY, wxT("プレビュー"), wxDefaultPosition, wxDefaultSize, wxCAPTION|wxFRAME_NO_TASKBAR );
|
|
190 pd->Show();
|
|
191 pd->Maximize( true );
|
|
192 pd->SetImage( m_imagefiles[n] );
|
|
193 }
|
2
|
194
|
1
|
195 ///////////////////////////////////////////////////////////////
|
|
196 // メインフレーム
|
2
|
197 #define WINL_W 480
|
0
|
198 #define LOGO_W 200
|
|
199 #define LOGO_H 92
|
|
200
|
|
201 // resources
|
|
202 #if !defined(__WXMSW__) && !defined(__WXPM__)
|
|
203 #include "sample.xpm"
|
|
204 #endif
|
|
205
|
|
206 MyFrame::MyFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style )
|
|
207 : wxFrame( parent, id, title, pos, size, style )
|
|
208 {
|
|
209 this->SetSizeHints( wxSize( WINL_W, 500 ), wxDefaultSize );
|
9
|
210 //this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_ACTIVEBORDER ) );
|
|
211 this->SetBackgroundColour( wxColour(wxT("WHEAT")) );
|
0
|
212
|
|
213 // set the frame icon
|
|
214 SetIcon(wxICON(sample));
|
|
215
|
|
216 // メニューバー Menu
|
|
217 m_menubar = new wxMenuBar( 0 );
|
|
218 m_menuFile = new wxMenu();
|
|
219
|
2
|
220 wxMenuItem* m_menuItemBPrintMode = new wxMenuItem( m_menuFile, ID_MNBPNT, wxString( wxT("バッチ印刷モード\tF12") ) , wxT("Batch Print Mode"), wxITEM_NORMAL );
|
|
221 m_menuFile->Append( m_menuItemBPrintMode );
|
|
222
|
|
223 wxMenuItem* m_menuItemIndex = new wxMenuItem( m_menuFile, ID_MNINDEX, wxString( wxT("インデックス\tF11") ) , wxT("Update index"), wxITEM_NORMAL );
|
|
224 m_menuFile->Append( m_menuItemIndex );
|
0
|
225
|
|
226 m_menuFile->AppendSeparator(); // ----
|
|
227
|
2
|
228 wxMenuItem* m_menuItemBkup = new wxMenuItem( m_menuFile, ID_MNDBBKUP, wxString( wxT("DBバックアップ(&B)") ) , wxT("Backup databases"), wxITEM_NORMAL );
|
|
229 m_menuFile->Append( m_menuItemBkup );
|
|
230
|
4
|
231 // params
|
|
232 m_menuParam = new wxMenu();
|
|
233 wxMenuItem* m_menuItemMask = new wxMenuItem( m_menuParam, ID_MNMASKPARAM, wxString( wxT("マスク(&M)") ) , wxT("Setup mask parameters"), wxITEM_NORMAL );
|
|
234 m_menuParam->Append( m_menuItemMask );
|
0
|
235
|
4
|
236 wxMenuItem* m_menuItemMark = new wxMenuItem( m_menuParam, ID_MNMARKPARAM, wxString( wxT("マークシート(&S)") ) , wxT("Setup marksheet parameters"), wxITEM_NORMAL );
|
|
237 m_menuParam->Append( m_menuItemMark );
|
|
238
|
|
239 m_menuFile->Append( -1, wxT("パラメータ(&P)"), m_menuParam );
|
|
240
|
|
241 //
|
2
|
242 wxMenuItem* m_menuItemAppDir = new wxMenuItem( m_menuFile, ID_MNAPPDIR, wxString( wxT("アプリケーションフォルダを開く(&O)") ) , wxT("Open application directory"), wxITEM_NORMAL );
|
0
|
243 m_menuFile->Append( m_menuItemAppDir );
|
|
244
|
|
245 m_menuFile->AppendSeparator(); // ----
|
|
246
|
|
247 wxMenuItem* m_menuItemAbout = new wxMenuItem( m_menuFile, ID_MNABOUT, wxString( wxT("&About...\tF1") ) , wxT("Show about dialog"), wxITEM_NORMAL );
|
|
248 m_menuFile->Append( m_menuItemAbout );
|
|
249
|
|
250 m_menubar->Append( m_menuFile, wxT("ファイル(&F)") );
|
|
251
|
|
252 this->SetMenuBar( m_menubar );
|
|
253
|
|
254 //
|
|
255 wxBoxSizer* bSizerTop = new wxBoxSizer( wxVERTICAL );
|
|
256
|
9
|
257 m_panelMain = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
|
258
|
2
|
259 wxBoxSizer* bSizerMain = new wxBoxSizer( wxVERTICAL );
|
0
|
260
|
|
261 wxString logo = wxGetCwd() + wxFILE_SEP_PATH + wxT("image") + wxFILE_SEP_PATH + wxT("logo.png");
|
|
262 wxBitmap bmp = wxBitmap( logo, wxBITMAP_TYPE_PNG );
|
2
|
263 m_bitmap = new wxStaticBitmap( m_panelMain, wxID_ANY, bmp, wxDefaultPosition, wxSize( LOGO_W, LOGO_H ), 0 );
|
|
264 bSizerMain->Add( m_bitmap, 0, wxALL, 5 );
|
0
|
265
|
2
|
266 m_textCtrlName = new wxTextCtrl( m_panelMain, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 200, -1 ), 0 );
|
|
267 bSizerMain->Add( m_textCtrlName, 0, wxALL, 5 );
|
0
|
268
|
2
|
269 m_textCtrlAddr = new wxTextCtrl( m_panelMain, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 380, -1 ), 0 );
|
|
270 bSizerMain->Add( m_textCtrlAddr, 0, wxALL, 5 );
|
0
|
271
|
2
|
272 m_listCtrl = new wxListCtrl( m_panelMain, ID_LIST, wxDefaultPosition, wxDefaultSize, wxLC_REPORT );
|
0
|
273 wxListItem itemCol;
|
|
274 itemCol.SetText( wxT("通番") );
|
|
275 m_listCtrl->InsertColumn( 0, itemCol );
|
|
276 m_listCtrl->SetColumnWidth( 0, 50 );
|
|
277 itemCol.SetText( wxT("年月日") );
|
|
278 m_listCtrl->InsertColumn( 1, itemCol );
|
|
279 m_listCtrl->SetColumnWidth( 1, 80 );
|
|
280 itemCol.SetText( wxT("場所") );
|
|
281 m_listCtrl->InsertColumn( 2, itemCol );
|
|
282 m_listCtrl->SetColumnWidth( 2, 300 );
|
9
|
283 bSizerMain->Add( m_listCtrl, 1, wxRIGHT|wxLEFT|wxBOTTOM|wxEXPAND, 5 );
|
|
284
|
|
285 m_thumbPanel = new ThumbnailPanel( m_panelMain, wxID_ANY, wxDefaultPosition, wxSize( -1, 100 ), wxSUNKEN_BORDER );
|
|
286 bSizerMain->Add( m_thumbPanel, 0, wxRIGHT|wxLEFT|wxBOTTOM|wxEXPAND, 5 );
|
0
|
287
|
9
|
288 //
|
0
|
289 wxBoxSizer* bSizerCmd = new wxBoxSizer( wxHORIZONTAL );
|
|
290
|
2
|
291 m_staticText = new wxStaticText( m_panelMain, wxID_ANY, wxT("コマンド?"), wxDefaultPosition, wxDefaultSize, 0 );
|
1
|
292 bSizerCmd->Add( m_staticText, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
0
|
293
|
2
|
294 m_searchBox = new MySearchBox( m_panelMain, ID_SEARCH, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
9
|
295 m_searchBox->SetJudgedHhs( GetJudgedHhsNo() );
|
0
|
296 #ifndef __WXMAC__
|
1
|
297 m_searchBox->ShowSearchButton( true );
|
0
|
298 #endif
|
1
|
299 m_searchBox->ShowCancelButton( false );
|
|
300 m_searchBox->SetFocus();
|
2
|
301 bSizerCmd->Add( m_searchBox, 1, wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
|
0
|
302
|
2
|
303 m_buttonKana = new wxButton( m_panelMain, ID_KANA, wxT("カナ検索"), wxDefaultPosition, wxSize( 65, -1 ), 0 );
|
1
|
304 bSizerCmd->Add( m_buttonKana, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 20 );
|
0
|
305
|
2
|
306 m_buttonHist = new wxButton( m_panelMain, ID_HIST, wxT("検索履歴"), wxDefaultPosition, wxSize( 65, -1 ), 0 );
|
0
|
307 bSizerCmd->Add( m_buttonHist, 0, wxALL, 5 );
|
|
308
|
9
|
309 //
|
2
|
310 bSizerMain->Add( bSizerCmd, 0, wxEXPAND, 5 );
|
0
|
311
|
2
|
312 m_panelMain->SetSizer( bSizerMain );
|
|
313 m_panelMain->Layout();
|
|
314 bSizerMain->Fit( m_panelMain );
|
9
|
315 bSizerTop->Add( m_panelMain, 1, wxEXPAND|wxALL, 5 );
|
2
|
316
|
|
317 //
|
0
|
318 this->SetSizer( bSizerTop );
|
|
319 this->Layout();
|
|
320
|
|
321 // ステータスバー Statusbar
|
1
|
322 m_statusBar = new wxStatusBar( this, wxID_ANY, wxST_SIZEGRIP );
|
2
|
323 int widths[] = { 200, -1, 10, 90 };
|
1
|
324 m_statusBar->SetFieldsCount( 4, widths );
|
|
325 this->SetStatusBar( m_statusBar );
|
|
326 SetStatusText( wxT("被保番を入力してスタート!") );
|
0
|
327
|
|
328 this->Centre( wxBOTH );
|
4
|
329 LoadParam();
|
0
|
330 }
|
|
331
|
|
332 MyFrame::~MyFrame()
|
|
333 {
|
|
334 }
|
|
335
|
|
336 // Event Table
|
|
337 BEGIN_EVENT_TABLE( MyFrame, wxFrame )
|
9
|
338 EVT_MENU( ID_MNABOUT, MyFrame::OnAbout )
|
|
339 EVT_MENU( wxID_EXIT, MyFrame::OnQuit )
|
|
340 EVT_MENU( ID_MNBPNT, MyFrame::OnBPrintMode )
|
|
341 EVT_MENU( ID_MNINDEX, MyFrame::OnIndex )
|
|
342 EVT_MENU( ID_MNDBBKUP, MyFrame::OnDBBackup )
|
0
|
343 EVT_MENU( ID_MNMASKPARAM, MyFrame::OnMaskParam )
|
5
|
344 EVT_MENU( ID_MNMARKPARAM, MyFrame::OnMarkParam )
|
9
|
345 EVT_MENU( ID_MNAPPDIR, MyFrame::OnOpenAppDir )
|
|
346 EVT_LIST_ITEM_SELECTED( ID_LIST, MyFrame::OnSelectItem )
|
|
347 EVT_LIST_ITEM_ACTIVATED( ID_LIST, MyFrame::OnDClickItem )
|
0
|
348 EVT_BUTTON( ID_KANA, MyFrame::OnKana )
|
|
349 EVT_BUTTON( ID_HIST, MyFrame::OnHistory )
|
9
|
350 EVT_TEXT_ENTER( ID_SEARCH, MyFrame::OnCommand )
|
0
|
351 EVT_SIZE( MyFrame::OnWinSize )
|
|
352 EVT_MOVE( MyFrame::OnWinMove )
|
|
353 EVT_CLOSE( MyFrame::SaveConfig )
|
|
354 END_EVENT_TABLE()
|
|
355
|
|
356 // Event Handlers & Functions
|
2
|
357 /* エンターキーフック */
|
|
358 void MyFrame::OnCommand( wxCommandEvent& event )
|
0
|
359 {
|
9
|
360 wxString s = m_searchBox->GetLineText(0);
|
|
361
|
|
362 if ( s.IsSameAs( wxT(".") ) ) {
|
|
363 OpenAppDir();
|
|
364 return;
|
|
365 }
|
2
|
366
|
|
367 if ( s.IsSameAs( wxT("99") ) ) {
|
|
368 Close();
|
|
369 return;
|
|
370 }
|
|
371
|
|
372 if ( s.IsSameAs( wxT("+") ) ) {
|
|
373 PrintImages( m_hhsno );
|
|
374 return;
|
|
375 }
|
|
376
|
|
377 wxRegEx reHhs( wxT("^0[1238][0-9]{8}$") );
|
|
378 if ( reHhs.Matches( s ) ) {
|
|
379 m_hhsno = s;
|
|
380 UpdateList( m_hhsno );
|
9
|
381 UpdateThumbmail( 0 );
|
2
|
382 return;
|
|
383 }
|
|
384
|
|
385 wxRegEx reNo( wxT("^[0-9]{1,2}$") );
|
|
386 if ( reNo.Matches( s ) ) {
|
|
387 long n;
|
|
388 s.ToLong( &n, 10 );
|
|
389 n--;
|
|
390 OpenHhsDir( (int)n );
|
|
391 return;
|
|
392 }
|
|
393
|
|
394 SetStatusMessage( wxT("不適切な入力です."), 0 );
|
|
395 return;
|
|
396
|
|
397 event.Skip();
|
0
|
398 }
|
4
|
399 /* パラメータを設定ファイルから読み込む */
|
|
400 void MyFrame::LoadParam( void )
|
1
|
401 {
|
|
402 conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("app.conf");
|
|
403 config = new wxFileConfig( wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE );
|
|
404
|
|
405 int x, y, w, h;
|
|
406
|
|
407 config->SetPath( wxT("/Mask") );
|
|
408
|
|
409 config->Read( wxT("x1"), &x );
|
|
410 config->Read( wxT("y1"), &y );
|
|
411 config->Read( wxT("w1"), &w );
|
|
412 config->Read( wxT("h1"), &h );
|
|
413 m_mask1.SetPosition( wxPoint( x, y ) );
|
|
414 m_mask1.SetSize( wxSize( w, h ) );
|
|
415
|
|
416 config->Read( wxT("x2"), &x );
|
|
417 config->Read( wxT("y2"), &y );
|
|
418 config->Read( wxT("w2"), &w );
|
|
419 config->Read( wxT("h2"), &h );
|
|
420 m_mask2.SetPosition( wxPoint( x, y ) );
|
|
421 m_mask2.SetSize( wxSize( w, h ) );
|
|
422
|
|
423 config->Read( wxT("x3"), &x );
|
|
424 config->Read( wxT("y3"), &y );
|
|
425 config->Read( wxT("w3"), &w );
|
|
426 config->Read( wxT("h3"), &h );
|
|
427 m_mask3.SetPosition( wxPoint( x, y ) );
|
|
428 m_mask3.SetSize( wxSize( w, h ) );
|
|
429
|
2
|
430 config->Read( wxT("x1o"), &x );
|
|
431 config->Read( wxT("y1o"), &y );
|
|
432 config->Read( wxT("w1o"), &w );
|
|
433 config->Read( wxT("h1o"), &h );
|
|
434 m_mask1old.SetPosition( wxPoint( x, y ) );
|
|
435 m_mask1old.SetSize( wxSize( w, h ) );
|
|
436
|
|
437 config->Read( wxT("x2o"), &x );
|
|
438 config->Read( wxT("y2o"), &y );
|
|
439 config->Read( wxT("w2o"), &w );
|
|
440 config->Read( wxT("h2o"), &h );
|
|
441 m_mask2old.SetPosition( wxPoint( x, y ) );
|
|
442 m_mask2old.SetSize( wxSize( w, h ) );
|
|
443
|
|
444 config->Read( wxT("x3o"), &x );
|
|
445 config->Read( wxT("y3o"), &y );
|
|
446 config->Read( wxT("w3o"), &w );
|
|
447 config->Read( wxT("h3o"), &h );
|
|
448 m_mask3old.SetPosition( wxPoint( x, y ) );
|
|
449 m_mask3old.SetSize( wxSize( w, h ) );
|
5
|
450
|
|
451 //
|
|
452 config->SetPath( wxT("/Marksheet") );
|
|
453
|
|
454 config->Read( wxT("lmin"), &lmin );
|
|
455 config->Read( wxT("lmax"), &lmax );
|
|
456 config->Read( wxT("zmin"), &zmin );
|
|
457 config->Read( wxT("zmax"), &zmax );
|
9
|
458
|
2
|
459 }
|
|
460 /* 印刷 */
|
|
461 void MyFrame::PrintImages( wxString hhsno )
|
|
462 {
|
7
|
463 bool mask_flag = false;
|
9
|
464 wxMessageDialog md( this, wxT("マスクしますか?"), wxT("印刷オプション"), wxYES_NO, wxDefaultPosition );
|
7
|
465 if ( md.ShowModal() == wxID_YES ) {
|
|
466 mask_flag = true;
|
|
467 }
|
|
468
|
2
|
469 // 印刷用の html を作成
|
|
470 wxArrayString path = GetPathByHhsNo( hhsno );
|
|
471 if ( path.IsEmpty() ) return;
|
|
472
|
|
473 wxDir dir( path[0] );
|
|
474 if ( !dir.IsOpened() ) return;
|
|
475
|
|
476 wxString html;
|
|
477 html = html + wxT("<html><body>\n");
|
|
478
|
|
479 wxString file;
|
|
480 bool cout = dir.GetFirst( &file, wxT("*.jpg"), wxDIR_FILES );
|
4
|
481 bool notyet_mask = true;
|
2
|
482 int n = 0;
|
|
483 wxString tmpdir = wxGetCwd() + wxFILE_SEP_PATH + wxT("tmp") + wxFILE_SEP_PATH;
|
|
484 while ( cout ) {
|
|
485 file = path[0] + wxFILE_SEP_PATH + file;
|
|
486 file.Replace( wxFILE_SEP_PATH, wxT("/") );
|
|
487 wxString tmpjpg = wxString::Format( wxT("%stmp%d.jpg"), tmpdir, n );
|
4
|
488
|
|
489 if ( notyet_mask && IsMarksheet( file, zmin, zmax, lmin, lmax ) ) { // マークシート表面をマスクする
|
2
|
490 wxImage img_org( file, wxBITMAP_TYPE_JPEG );
|
7
|
491 if ( mask_flag ) {
|
|
492 int ver = GetMarksheetVersion( file );
|
|
493 if ( ver == 2 ) {
|
|
494 img_org.SetRGB( m_mask1, 255, 255, 255 ); // cm name
|
|
495 img_org.SetRGB( m_mask2, 255, 255, 255 ); // cm no.
|
|
496 img_org.SetRGB( m_mask3, 255, 255, 255 ); // barcode
|
|
497 }
|
|
498 else { // 古いマークシート ver == 1
|
|
499 img_org.SetRGB( m_mask1old, 255, 255, 255 ); // cm name
|
|
500 img_org.SetRGB( m_mask2old, 255, 255, 255 ); // cm no.
|
|
501 img_org.SetRGB( m_mask3old, 255, 255, 255 ); // barcode
|
|
502 }
|
2
|
503 }
|
|
504 img_org.SaveFile( tmpjpg );
|
4
|
505 notyet_mask = false;
|
2
|
506 }
|
|
507 else {
|
|
508 wxCopyFile( file, tmpjpg, true );
|
|
509 }
|
|
510 html = html + wxT("<img src=\"") + tmpjpg + wxT("\" width=\"750\" height=\"1060\"/>");
|
|
511 cout = dir.GetNext( &file );
|
|
512 n++;
|
|
513 }
|
|
514 html = html + wxT("</body></html>");
|
|
515
|
|
516 // start printing
|
|
517 wxHtmlPrintout hpout( wxT("Searcher03") );
|
|
518 hpout.SetMargins( 0, 0, 0, 0, 0 );
|
|
519 wxPrintDialogData pd;
|
|
520 wxPrinter p( &pd );
|
|
521
|
|
522 hpout.SetHtmlText( html, wxEmptyString, false );
|
|
523 p.Print( NULL, &hpout, true );
|
|
524
|
|
525 // end
|
|
526 SetStatusMessage( wxT("被保番かフォルダ番号を."), 0 );
|
|
527 }
|
|
528 /* 一括印刷モード */
|
|
529 void MyFrame::OnBPrintMode( wxCommandEvent& WXUNUSED(event) )
|
|
530 {
|
8
|
531 FrameBatchPrint* bp = new FrameBatchPrint( this, wxID_ANY, wxT("一括印刷"), wxDefaultPosition, wxSize( 700, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR );
|
2
|
532 bp->SetMask1( m_mask1 );
|
|
533 bp->SetMask2( m_mask2 );
|
|
534 bp->SetMask3( m_mask3 );
|
|
535 bp->SetMask1Old( m_mask1old );
|
|
536 bp->SetMask2Old( m_mask2old );
|
|
537 bp->SetMask3Old( m_mask3old );
|
5
|
538 bp->SetMark( lmin, lmax, zmin, zmax );
|
2
|
539 bp->Show( true );
|
|
540 }
|
|
541 /* インデックス作成ダイアログ */
|
|
542 void MyFrame::OnIndex( wxCommandEvent& WXUNUSED(event) )
|
|
543 {
|
|
544 wxString rootdir;
|
|
545 config->SetPath( wxT("/Index") );
|
|
546 config->Read( wxT("rootdir"), &rootdir );
|
|
547
|
7
|
548 IndexDialog* index = new IndexDialog( this, wxID_ANY, wxT("インデックス作成"), wxDefaultPosition, wxSize( 700, 600 ), wxDEFAULT_DIALOG_STYLE|wxSTAY_ON_TOP );
|
8
|
549 index->SetRootdir( rootdir );
|
7
|
550 index->ShowModal();
|
1
|
551 }
|
4
|
552 /* マークシートパラメータ設定ダイアログ */
|
|
553 void MyFrame::OnMarkParam( wxCommandEvent& WXUNUSED(event) )
|
|
554 {
|
5
|
555 SetParams( 2 );
|
4
|
556 }
|
0
|
557 /* マスクパラメータ設定ダイアログ */
|
|
558 void MyFrame::OnMaskParam( wxCommandEvent& WXUNUSED(event) )
|
|
559 {
|
5
|
560 SetParams( 0 );
|
|
561 }
|
|
562 /* 設定を保存 */
|
|
563 void MyFrame::SetParams( int tab )
|
|
564 {
|
|
565 ParamDialog* param = new ParamDialog( this, wxID_ANY, wxT("各種パラメータの指定"), wxDefaultPosition, wxSize( 350, 250 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL );
|
4
|
566 param->SetMask1( m_mask1 );
|
|
567 param->SetMask2( m_mask2 );
|
|
568 param->SetMask3( m_mask3 );
|
|
569 param->SetMask1Old( m_mask1old );
|
|
570 param->SetMask2Old( m_mask2old );
|
|
571 param->SetMask3Old( m_mask3old );
|
5
|
572 param->SetMark( lmin, lmax, zmin, zmax );
|
4
|
573 param->LoadParams();
|
|
574 param->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM );
|
5
|
575 param->SelectTAb( tab );
|
1
|
576
|
4
|
577 if ( param->ShowModal() == wxID_OK ) {
|
|
578 m_mask1 = param->GetMask1();
|
|
579 m_mask2 = param->GetMask2();
|
|
580 m_mask3 = param->GetMask3();
|
|
581 m_mask1old = param->GetMask1Old();
|
|
582 m_mask2old = param->GetMask2Old();
|
|
583 m_mask3old = param->GetMask3Old();
|
5
|
584 lmin = param->GetLmin();
|
|
585 lmax = param->GetLmax();
|
|
586 zmin = param->GetZmin();
|
|
587 zmax = param->GetZmax();
|
1
|
588
|
|
589 config->SetPath( wxT("/Mask") );
|
|
590
|
|
591 config->Write( wxT("x1"), m_mask1.GetX() );
|
|
592 config->Write( wxT("y1"), m_mask1.GetY() );
|
|
593 config->Write( wxT("w1"), m_mask1.GetWidth() );
|
|
594 config->Write( wxT("h1"), m_mask1.GetHeight() );
|
|
595
|
|
596 config->Write( wxT("x2"), m_mask2.GetX() );
|
|
597 config->Write( wxT("y2"), m_mask2.GetY() );
|
|
598 config->Write( wxT("w2"), m_mask2.GetWidth() );
|
|
599 config->Write( wxT("h2"), m_mask2.GetHeight() );
|
|
600
|
|
601 config->Write( wxT("x3"), m_mask3.GetX() );
|
|
602 config->Write( wxT("y3"), m_mask3.GetY() );
|
|
603 config->Write( wxT("w3"), m_mask3.GetWidth() );
|
|
604 config->Write( wxT("h3"), m_mask3.GetHeight() );
|
|
605
|
2
|
606 config->Write( wxT("x1o"), m_mask1old.GetX() );
|
|
607 config->Write( wxT("y1o"), m_mask1old.GetY() );
|
|
608 config->Write( wxT("w1o"), m_mask1old.GetWidth() );
|
|
609 config->Write( wxT("h1o"), m_mask1old.GetHeight() );
|
|
610
|
|
611 config->Write( wxT("x2o"), m_mask2old.GetX() );
|
|
612 config->Write( wxT("y2o"), m_mask2old.GetY() );
|
|
613 config->Write( wxT("w2o"), m_mask2old.GetWidth() );
|
|
614 config->Write( wxT("h2o"), m_mask2old.GetHeight() );
|
|
615
|
|
616 config->Write( wxT("x3o"), m_mask3old.GetX() );
|
|
617 config->Write( wxT("y3o"), m_mask3old.GetY() );
|
|
618 config->Write( wxT("w3o"), m_mask3old.GetWidth() );
|
|
619 config->Write( wxT("h3o"), m_mask3old.GetHeight() );
|
|
620
|
5
|
621 config->SetPath( wxT("/Marksheet") );
|
|
622
|
|
623 config->Write( wxT("lmin"), lmin );
|
|
624 config->Write( wxT("lmax"), lmax );
|
|
625 config->Write( wxT("zmin"), zmin );
|
|
626 config->Write( wxT("zmax"), zmax );
|
|
627
|
2
|
628 config->Flush( false );
|
1
|
629 }
|
0
|
630 }
|
2
|
631 /* データベースファイルのバックアップ */
|
|
632 void MyFrame::OnDBBackup( wxCommandEvent& WXUNUSED(event) )
|
|
633 {
|
|
634 wxDateTime now = wxDateTime::Now();
|
|
635 wxString str = now.Format( wxT("%Y%m%d%H%M%S") );
|
|
636
|
|
637 wxString org, bk;
|
|
638 wxString dbdir = wxGetCwd() + wxFILE_SEP_PATH + wxT("db");
|
|
639
|
|
640 org = dbdir + wxFILE_SEP_PATH + wxT("hhs.db");
|
|
641 bk = dbdir + wxFILE_SEP_PATH + str + wxT("_hhs.db");
|
|
642 wxCopyFile( org, bk, false );
|
|
643
|
|
644 org = dbdir + wxFILE_SEP_PATH + wxT("ccn.db");
|
|
645 bk = dbdir + wxFILE_SEP_PATH + str + wxT("_ccn.db");
|
|
646 wxCopyFile( org, bk, false );
|
|
647
|
|
648 wxMessageBox( wxT("バックアップ終了.") );
|
|
649 return;
|
|
650 }
|
0
|
651 /* アプリフォルダを開く */
|
|
652 void MyFrame::OnOpenAppDir( wxCommandEvent& WXUNUSED(event) )
|
|
653 {
|
9
|
654 OpenAppDir();
|
|
655 }
|
|
656 void MyFrame::OpenAppDir( )
|
|
657 {
|
0
|
658 wxString appdir = wxGetCwd();
|
|
659 wxString execmd = wxT("explorer ") + appdir;
|
|
660 wxExecute( execmd );
|
|
661 }
|
|
662 /* 被保険者フォルダを開く */
|
9
|
663 void MyFrame::OnDClickItem( wxListEvent& event )
|
0
|
664 {
|
|
665 int i = event.GetIndex();
|
2
|
666 OpenHhsDir( i );
|
9
|
667 UpdateThumbmail( i );
|
2
|
668 }
|
|
669 /* 番号で指定したフォルダを開く */
|
|
670 void MyFrame::OpenHhsDir( int n )
|
|
671 {
|
0
|
672 wxListItem item;
|
2
|
673 item.SetId( n );
|
|
674 item.SetColumn( 2 );
|
|
675 item.SetMask( wxLIST_MASK_TEXT );
|
|
676 m_listCtrl->GetItem( item );
|
|
677 wxString dir = item.GetText();
|
|
678 wxString execmd = wxT("explorer ") + dir;
|
|
679 wxExecute( execmd );
|
0
|
680 }
|
1
|
681
|
0
|
682 /* カナ検索ダイアログ */
|
|
683 void MyFrame::OnKana( wxCommandEvent& WXUNUSED(event) )
|
|
684 {
|
2
|
685 KanaDialog* kana = new KanaDialog( this, wxID_ANY, wxT("カナ氏名で被保番を検索"), wxDefaultPosition, wxSize( 640, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxRESIZE_BORDER|wxSTAY_ON_TOP|wxTAB_TRAVERSAL );
|
0
|
686 kana->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM );
|
1
|
687
|
|
688 if ( kana->ShowModal() == wxID_OK ) {
|
2
|
689 m_hhsno = kana->GetHhsNo();
|
|
690 UpdateList( m_hhsno );
|
9
|
691 UpdateThumbmail( 0 );
|
1
|
692 }
|
0
|
693 }
|
|
694 /* 検索履歴検索ダイアログ */
|
|
695 void MyFrame::OnHistory( wxCommandEvent& WXUNUSED(event) )
|
|
696 {
|
2
|
697 HistDialog* hist = new HistDialog( this, wxID_ANY, wxT("検索履歴"), wxDefaultPosition, wxSize( 600, 500 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL );
|
0
|
698 hist->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM );
|
1
|
699
|
|
700 if ( hist->ShowModal() == wxID_OK ) {
|
2
|
701 m_hhsno = hist->GetHhsNo();
|
|
702 UpdateList( m_hhsno );
|
9
|
703 UpdateThumbmail( 0 );
|
1
|
704 }
|
|
705 }
|
|
706
|
|
707 /* 検索結果をリストアップ */
|
2
|
708 void MyFrame::UpdateList( wxString hhsno )
|
1
|
709 {
|
|
710 m_listCtrl->DeleteAllItems();
|
2
|
711 for ( int i = 0; i < m_statusBar->GetFieldsCount(); i++ ) {
|
|
712 SetStatusMessage( wxEmptyString, i );
|
|
713 }
|
|
714
|
|
715 //
|
|
716 wxArrayString s = wxSplit( GetHhsInfoByHhsNo( hhsno ), '_', '\\' );
|
|
717 wxString history;
|
|
718 if ( s.IsEmpty() ) {
|
|
719 SetStatusMessage( wxT("データベースに存在しない被保険者です."), 0 );
|
|
720 history = hhsno + wxT("###");
|
|
721 }
|
|
722 else {
|
|
723 m_textCtrlName->SetValue( s[0] );
|
|
724 m_textCtrlAddr->SetValue( s[1] );
|
|
725 history = hhsno + wxT("#") + s[0] + wxT("#") + s[1] + wxT("#");
|
|
726 }
|
|
727 m_searchBox->SetValue( hhsno );
|
|
728 m_searchBox->SelectAll();
|
|
729 m_searchBox->SetFocus();
|
|
730
|
|
731 wxArrayString path = GetPathByHhsNo( hhsno );
|
|
732 if ( path.IsEmpty() ) {
|
|
733 SetStatusMessage( wxT("審査会履歴がありません."), 1 );
|
|
734 return;
|
|
735 }
|
|
736
|
|
737 wxRegEx reDate(wxT("(^.*20[0-9]{2}.)(20[0-9]{2})([0-2][0-9])([0-9]{2})(.*$)"));
|
|
738 for ( int i = 0; i < path.GetCount(); i++ ) {
|
|
739 wxString date = path[i];
|
|
740 reDate.ReplaceAll( &date, wxT("\\2-\\3-\\4") );
|
|
741
|
|
742 m_listCtrl->InsertItem( i, -1 );
|
|
743 m_listCtrl->SetItem( i, 0,wxString::Format( wxT("%d"), i + 1 ) , -1 ); // No
|
|
744 m_listCtrl->SetItem( i, 1, date, -1 );
|
|
745 m_listCtrl->SetItem( i, 2, path[i], -1 );
|
|
746
|
|
747 if ( i % 2 ) m_listCtrl->SetItemBackgroundColour( i, wxColour( wxT("WHEAT") ) );
|
|
748 }
|
|
749
|
|
750 SetStatusMessage( wxT("「+」キーで通番1を印刷."), 0 );
|
|
751
|
|
752 //
|
|
753 wxString filename = wxGetCwd() + wxFILE_SEP_PATH + wxT("tmp") + wxFILE_SEP_PATH + wxT("history");
|
|
754 wxDateTime now = wxDateTime::Now();
|
|
755 history = history + now.Format( wxT("%Y-%m-%d %H:%M:%S") );
|
|
756
|
|
757 wxTextFile hist( filename );
|
|
758 hist.Open();
|
|
759 hist.RemoveLine( 20 );
|
|
760 hist.InsertLine( history, 0 );
|
|
761 hist.Write();
|
|
762 hist.Close();
|
1
|
763 }
|
9
|
764 /* フォルダを選択したとき */
|
|
765 void MyFrame::OnSelectItem( wxListEvent& event )
|
|
766 {
|
|
767 UpdateThumbmail( event.GetIndex() );
|
|
768 }
|
|
769 /* サムネイルを更新 */
|
|
770 void MyFrame::UpdateThumbmail( int n )
|
|
771 {
|
|
772 wxListItem item;
|
|
773 item.SetId( n );
|
|
774
|
|
775 item.SetColumn( 2 );
|
|
776 item.SetMask( wxLIST_MASK_TEXT );
|
|
777 m_listCtrl->GetItem( item );
|
|
778
|
|
779 m_thumbPanel->SetImages( item.GetText() );
|
|
780 }
|
1
|
781 /* ステータスバーにメッセージを出力 */
|
|
782 void MyFrame::SetStatusMessage( wxString msg, long n )
|
|
783 {
|
|
784 if ( GetStatusBar() )
|
|
785 SetStatusText( msg, n );
|
0
|
786 }
|
|
787
|
|
788 /* サイズ変更 */
|
|
789 void MyFrame::OnWinSize( wxSizeEvent& event )
|
|
790 {
|
|
791 this->Refresh( true, NULL );
|
|
792 TellLocation();
|
|
793 event.Skip();
|
|
794 }
|
|
795 /* ウィンドウ移動 */
|
|
796 void MyFrame::OnWinMove( wxMoveEvent& WXUNUSED(event) )
|
|
797 {
|
|
798 TellLocation();
|
|
799 return;
|
|
800 }
|
|
801 /* ウィンドウ位置とサイズを表示 */
|
|
802 void MyFrame::TellLocation( void )
|
|
803 {
|
|
804 wxRect r = this->GetRect();
|
|
805 int x = r.GetX();
|
|
806 int y = r.GetY();
|
|
807 int w = r.GetWidth();
|
|
808 int h = r.GetHeight();
|
1
|
809
|
|
810 if ( GetStatusBar() )
|
|
811 SetStatusText( wxString::Format(wxT( "(%d,%d) %dx%d"),x,y,w,h ), 3 );
|
0
|
812 }
|
|
813 /* 終了 */
|
|
814 void MyFrame::OnQuit( wxCommandEvent& WXUNUSED(event) )
|
|
815 {
|
|
816 Close( true );
|
|
817 }
|
|
818 /* 設定を保存 */
|
|
819 void MyFrame::SaveConfig( wxCloseEvent& WXUNUSED(event) )
|
|
820 {
|
|
821 if ( !IsIconized() && !IsMaximized() ) {
|
|
822 wxGetApp().rect = this->GetRect();
|
|
823 }
|
9
|
824 delete config;
|
0
|
825 Destroy();
|
|
826 }
|
|
827 /* アバウトダイアログ */
|
|
828 void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
|
|
829 {
|
|
830 AboutDialog* aboutDlg = new AboutDialog( this, wxID_ANY, wxT("About this Software"), wxDefaultPosition, wxSize(320,280), wxDEFAULT_DIALOG_STYLE|wxSTAY_ON_TOP );
|
|
831 aboutDlg->ShowModal();
|
|
832 }
|
|
833
|