Mercurial > mercurial > hgweb_searcher03.cgi
comparison src/myframe.cpp @ 1:7b6dab24f4b8
Gui parts complete.
author | pyon@macmini |
---|---|
date | Sun, 04 Aug 2013 21:42:49 +0900 |
parents | 0c0701a935f8 |
children | c066fde99517 |
comparison
equal
deleted
inserted
replaced
0:0c0701a935f8 | 1:7b6dab24f4b8 |
---|---|
1 // Filename : myframe.cpp | 1 // Filename : myframe.cpp |
2 // Last Change: 21-Jul-2013. | 2 // Last Change: 04-Aug-2013. |
3 // | 3 // |
4 #include "main.h" | 4 #include "main.h" |
5 #include "db.h" | |
5 #include "myframe.h" | 6 #include "myframe.h" |
6 #include "about.h" | 7 #include "about.h" |
7 #include "kana.h" | 8 #include "kana.h" |
8 #include "hist.h" | 9 #include "hist.h" |
9 #include "index.h" | 10 #include "index.h" |
10 #include "mask.h" | 11 #include "mask.h" |
11 | 12 |
13 /////////////////////////////////////////////////////////////// | |
14 // カスタム検索ボックス | |
15 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 ) | |
17 { | |
18 } | |
19 | |
20 MySearchBox::~MySearchBox() | |
21 { | |
22 } | |
23 | |
24 // Event Table | |
25 BEGIN_EVENT_TABLE( MySearchBox, wxSearchCtrl ) | |
26 EVT_CHAR( MySearchBox::OnKey ) | |
27 END_EVENT_TABLE() | |
28 | |
29 // Event Handlers & Functions | |
30 void MySearchBox::OnKey( wxKeyEvent& event ) | |
31 { | |
32 wxString s = GetValue(); | |
33 // statustext( s.Len() ); | |
34 | |
35 if ( event.GetKeyCode() == 45 ) { // テンキーの '-' キーで1文字削除 | |
36 wxString t = GetStringSelection(); | |
37 if ( t.IsEmpty() ) { | |
38 long p = GetInsertionPoint(); | |
39 if ( p > 0 ) Remove( p - 1, p ); | |
40 } | |
41 else { | |
42 Cut(); | |
43 } | |
44 return; | |
45 } | |
46 | |
47 if ( event.GetKeyCode() == WXK_RETURN ) { | |
48 | |
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; | |
69 } | |
70 | |
71 event.Skip(); | |
72 } | |
73 | |
74 /////////////////////////////////////////////////////////////// | |
75 // メインフレーム | |
12 #define WINL_W 400 | 76 #define WINL_W 400 |
13 #define LOGO_W 200 | 77 #define LOGO_W 200 |
14 #define LOGO_H 92 | 78 #define LOGO_H 92 |
15 | 79 |
16 // resources | 80 // resources |
17 #if !defined(__WXMSW__) && !defined(__WXPM__) | 81 #if !defined(__WXMSW__) && !defined(__WXPM__) |
18 #include "sample.xpm" | 82 #include "sample.xpm" |
19 #endif | 83 #endif |
20 | 84 |
21 | |
22 MyFrame::MyFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) | 85 MyFrame::MyFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) |
23 : wxFrame( parent, id, title, pos, size, style ) | 86 : wxFrame( parent, id, title, pos, size, style ) |
24 { | 87 { |
25 this->SetSizeHints( wxSize( WINL_W, 500 ), wxDefaultSize ); | 88 this->SetSizeHints( wxSize( WINL_W, 500 ), wxDefaultSize ); |
26 this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_ACTIVEBORDER ) ); | 89 this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_ACTIVEBORDER ) ); |
58 | 121 |
59 // | 122 // |
60 wxBoxSizer* bSizerTop = new wxBoxSizer( wxVERTICAL ); | 123 wxBoxSizer* bSizerTop = new wxBoxSizer( wxVERTICAL ); |
61 | 124 |
62 m_splitter = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D ); | 125 m_splitter = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D ); |
63 //m_splitter->Connect( wxEVT_IDLE, wxIdleEventHandler( MyFrame::m_splitterOnIdle ), NULL, this ); | 126 wxBoxSizer* bSizerL = new wxBoxSizer( wxVERTICAL ); |
64 | 127 |
128 // left-pane | |
65 m_panelL = new wxPanel( m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); | 129 m_panelL = new wxPanel( m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); |
66 wxBoxSizer* bSizerL = new wxBoxSizer( wxVERTICAL ); | |
67 | 130 |
68 wxString logo = wxGetCwd() + wxFILE_SEP_PATH + wxT("image") + wxFILE_SEP_PATH + wxT("logo.png"); | 131 wxString logo = wxGetCwd() + wxFILE_SEP_PATH + wxT("image") + wxFILE_SEP_PATH + wxT("logo.png"); |
69 wxBitmap bmp = wxBitmap( logo, wxBITMAP_TYPE_PNG ); | 132 wxBitmap bmp = wxBitmap( logo, wxBITMAP_TYPE_PNG ); |
70 m_bitmap = new wxStaticBitmap( m_panelL, wxID_ANY, bmp, wxDefaultPosition, wxSize( LOGO_W, LOGO_H ), 0 ); | 133 m_bitmap = new wxStaticBitmap( m_panelL, wxID_ANY, bmp, wxDefaultPosition, wxSize( LOGO_W, LOGO_H ), 0 ); |
71 bSizerL->Add( m_bitmap, 0, wxALL, 5 ); | 134 bSizerL->Add( m_bitmap, 0, wxALL, 5 ); |
89 m_listCtrl->SetColumnWidth( 2, 300 ); | 152 m_listCtrl->SetColumnWidth( 2, 300 ); |
90 bSizerL->Add( m_listCtrl, 1, wxALL|wxEXPAND, 5 ); | 153 bSizerL->Add( m_listCtrl, 1, wxALL|wxEXPAND, 5 ); |
91 | 154 |
92 wxBoxSizer* bSizerCmd = new wxBoxSizer( wxHORIZONTAL ); | 155 wxBoxSizer* bSizerCmd = new wxBoxSizer( wxHORIZONTAL ); |
93 | 156 |
94 //m_staticText = new wxStaticText( m_panelL, wxID_ANY, wxT("コマンド?"), wxDefaultPosition, wxDefaultSize, 0 ); | 157 m_staticText = new wxStaticText( m_panelL, wxID_ANY, wxT("コマンド?"), wxDefaultPosition, wxDefaultSize, 0 ); |
95 //bSizerCmd->Add( m_staticText, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | 158 bSizerCmd->Add( m_staticText, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); |
96 | 159 |
97 m_searchCtrl = new wxSearchCtrl( m_panelL, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER ); | 160 m_searchBox = new MySearchBox( m_panelL, ID_SEARCH, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER ); |
98 #ifndef __WXMAC__ | 161 #ifndef __WXMAC__ |
99 m_searchCtrl->ShowSearchButton( true ); | 162 m_searchBox->ShowSearchButton( true ); |
100 #endif | 163 #endif |
101 m_searchCtrl->ShowCancelButton( false ); | 164 m_searchBox->ShowCancelButton( false ); |
102 bSizerCmd->Add( m_searchCtrl, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); | 165 m_searchBox->SetFocus(); |
103 | 166 bSizerCmd->Add( m_searchBox, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); |
104 m_buttonKana = new wxButton( m_panelL, ID_KANA, wxT("カナ検索"), wxDefaultPosition, wxDefaultSize, 0 ); | 167 |
105 bSizerCmd->Add( m_buttonKana, 0, wxALL, 5 ); | 168 m_buttonKana = new wxButton( m_panelL, ID_KANA, wxT("カナ検索"), wxDefaultPosition, wxSize( 65, -1 ), 0 ); |
106 | 169 bSizerCmd->Add( m_buttonKana, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 20 ); |
107 m_buttonHist = new wxButton( m_panelL, ID_HIST, wxT("検索履歴"), wxDefaultPosition, wxDefaultSize, 0 ); | 170 |
171 m_buttonHist = new wxButton( m_panelL, ID_HIST, wxT("検索履歴"), wxDefaultPosition, wxSize( 65, -1 ), 0 ); | |
108 bSizerCmd->Add( m_buttonHist, 0, wxALL, 5 ); | 172 bSizerCmd->Add( m_buttonHist, 0, wxALL, 5 ); |
109 | 173 |
110 bSizerL->Add( bSizerCmd, 0, wxEXPAND, 5 ); | 174 bSizerL->Add( bSizerCmd, 0, wxEXPAND, 5 ); |
111 | 175 |
112 m_panelL->SetSizer( bSizerL ); | 176 m_panelL->SetSizer( bSizerL ); |
113 m_panelL->Layout(); | 177 m_panelL->Layout(); |
114 bSizerL->Fit( m_panelL ); | 178 bSizerL->Fit( m_panelL ); |
115 | 179 |
180 // right-pane | |
116 m_panelR = new wxPanel( m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); | 181 m_panelR = new wxPanel( m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); |
117 wxBoxSizer* bSizerR = new wxBoxSizer( wxHORIZONTAL ); | 182 wxBoxSizer* bSizerR = new wxBoxSizer( wxHORIZONTAL ); |
118 | 183 |
119 m_bitmapView = new wxStaticBitmap( m_panelR, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); | 184 m_bitmapView = new wxStaticBitmap( m_panelR, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); |
120 bSizerR->Add( m_bitmapView, 1, wxALL|wxEXPAND, 5 ); | 185 bSizerR->Add( m_bitmapView, 1, wxALL|wxEXPAND, 5 ); |
125 m_panelR->SetSizer( bSizerR ); | 190 m_panelR->SetSizer( bSizerR ); |
126 m_panelR->Layout(); | 191 m_panelR->Layout(); |
127 bSizerR->Fit( m_panelR ); | 192 bSizerR->Fit( m_panelR ); |
128 | 193 |
129 m_panelR->Show( false ); | 194 m_panelR->Show( false ); |
195 m_splitter->Initialize( m_panelL ); | |
130 bSizerTop->Add( m_splitter, 1, wxEXPAND, 5 ); | 196 bSizerTop->Add( m_splitter, 1, wxEXPAND, 5 ); |
131 | 197 |
132 this->SetSizer( bSizerTop ); | 198 this->SetSizer( bSizerTop ); |
133 this->Layout(); | 199 this->Layout(); |
134 | 200 |
135 // ステータスバー Statusbar | 201 // ステータスバー Statusbar |
136 m_statusBar = this->CreateStatusBar( 4, wxST_SIZEGRIP, wxID_ANY ); | 202 m_statusBar = new wxStatusBar( this, wxID_ANY, wxST_SIZEGRIP ); |
137 int widths[] = { 200, 100, -1, 90 }; | 203 int widths[] = { 200, 100, -1, 90 }; |
138 m_statusBar->SetStatusWidths( WXSIZEOF(widths), widths ); | 204 m_statusBar->SetFieldsCount( 4, widths ); |
205 this->SetStatusBar( m_statusBar ); | |
206 SetStatusText( wxT("被保番を入力してスタート!") ); | |
139 | 207 |
140 this->Centre( wxBOTH ); | 208 this->Centre( wxBOTH ); |
209 LoadMaskParam(); | |
141 } | 210 } |
142 | 211 |
143 MyFrame::~MyFrame() | 212 MyFrame::~MyFrame() |
144 { | 213 { |
145 } | 214 } |
166 { | 235 { |
167 IndexDialog* index = new IndexDialog( this, wxID_ANY, wxT("インデックス作成"), wxDefaultPosition, wxSize( 500, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); | 236 IndexDialog* index = new IndexDialog( this, wxID_ANY, wxT("インデックス作成"), wxDefaultPosition, wxSize( 500, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); |
168 index->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); | 237 index->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); |
169 index->ShowModal(); | 238 index->ShowModal(); |
170 } | 239 } |
240 /* マスクパラメータを設定ファイルから読み込む */ | |
241 void MyFrame::LoadMaskParam( void ) | |
242 { | |
243 conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("app.conf"); | |
244 config = new wxFileConfig( wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE ); | |
245 | |
246 int x, y, w, h; | |
247 | |
248 config->SetPath( wxT("/Mask") ); | |
249 | |
250 config->Read( wxT("x1"), &x ); | |
251 config->Read( wxT("y1"), &y ); | |
252 config->Read( wxT("w1"), &w ); | |
253 config->Read( wxT("h1"), &h ); | |
254 m_mask1.SetPosition( wxPoint( x, y ) ); | |
255 m_mask1.SetSize( wxSize( w, h ) ); | |
256 | |
257 config->Read( wxT("x2"), &x ); | |
258 config->Read( wxT("y2"), &y ); | |
259 config->Read( wxT("w2"), &w ); | |
260 config->Read( wxT("h2"), &h ); | |
261 m_mask2.SetPosition( wxPoint( x, y ) ); | |
262 m_mask2.SetSize( wxSize( w, h ) ); | |
263 | |
264 config->Read( wxT("x3"), &x ); | |
265 config->Read( wxT("y3"), &y ); | |
266 config->Read( wxT("w3"), &w ); | |
267 config->Read( wxT("h3"), &h ); | |
268 m_mask3.SetPosition( wxPoint( x, y ) ); | |
269 m_mask3.SetSize( wxSize( w, h ) ); | |
270 | |
271 } | |
171 /* マスクパラメータ設定ダイアログ */ | 272 /* マスクパラメータ設定ダイアログ */ |
172 void MyFrame::OnMaskParam( wxCommandEvent& WXUNUSED(event) ) | 273 void MyFrame::OnMaskParam( wxCommandEvent& WXUNUSED(event) ) |
173 { | 274 { |
174 MaskDialog* mask = new MaskDialog( this, wxID_ANY, wxT("マスク位置とサイズの指定"), wxDefaultPosition, wxSize( 400, 210 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); | 275 MaskDialog* mask = new MaskDialog( this, wxID_ANY, wxT("マスク位置とサイズの指定"), wxDefaultPosition, wxSize( 400, 210 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); |
276 mask->SetMask1( m_mask1 ); | |
277 mask->SetMask2( m_mask2 ); | |
278 mask->SetMask3( m_mask3 ); | |
279 mask->LoadParams(); | |
175 mask->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); | 280 mask->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); |
176 mask->ShowModal(); | 281 |
282 if ( mask->ShowModal() == wxID_OK ) { | |
283 m_mask1 = mask->GetMask1(); | |
284 m_mask2 = mask->GetMask2(); | |
285 m_mask3 = mask->GetMask3(); | |
286 | |
287 config->SetPath( wxT("/Mask") ); | |
288 | |
289 config->Write( wxT("x1"), m_mask1.GetX() ); | |
290 config->Write( wxT("y1"), m_mask1.GetY() ); | |
291 config->Write( wxT("w1"), m_mask1.GetWidth() ); | |
292 config->Write( wxT("h1"), m_mask1.GetHeight() ); | |
293 | |
294 config->Write( wxT("x2"), m_mask2.GetX() ); | |
295 config->Write( wxT("y2"), m_mask2.GetY() ); | |
296 config->Write( wxT("w2"), m_mask2.GetWidth() ); | |
297 config->Write( wxT("h2"), m_mask2.GetHeight() ); | |
298 | |
299 config->Write( wxT("x3"), m_mask3.GetX() ); | |
300 config->Write( wxT("y3"), m_mask3.GetY() ); | |
301 config->Write( wxT("w3"), m_mask3.GetWidth() ); | |
302 config->Write( wxT("h3"), m_mask3.GetHeight() ); | |
303 | |
304 delete config; | |
305 } | |
177 } | 306 } |
178 /* アプリフォルダを開く */ | 307 /* アプリフォルダを開く */ |
179 void MyFrame::OnOpenAppDir( wxCommandEvent& WXUNUSED(event) ) | 308 void MyFrame::OnOpenAppDir( wxCommandEvent& WXUNUSED(event) ) |
180 { | 309 { |
181 wxString appdir = wxGetCwd(); | 310 wxString appdir = wxGetCwd(); |
216 dvf->m_dir = hhsdir; | 345 dvf->m_dir = hhsdir; |
217 dvf->LoadListImage(); | 346 dvf->LoadListImage(); |
218 dvf->Show(true); | 347 dvf->Show(true); |
219 */ | 348 */ |
220 } | 349 } |
350 | |
221 /* カナ検索ダイアログ */ | 351 /* カナ検索ダイアログ */ |
222 void MyFrame::OnKana( wxCommandEvent& WXUNUSED(event) ) | 352 void MyFrame::OnKana( wxCommandEvent& WXUNUSED(event) ) |
223 { | 353 { |
224 KanaDialog* kana = new KanaDialog( this, wxID_ANY, wxT("カナ氏名で被保番を検索"), wxDefaultPosition, wxSize( 500, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxRESIZE_BORDER|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); | 354 KanaDialog* kana = new KanaDialog( this, wxID_ANY, wxT("カナ氏名で被保番を検索"), wxDefaultPosition, wxSize( 600, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxRESIZE_BORDER|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); |
225 kana->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); | 355 kana->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); |
226 kana->ShowModal(); | 356 |
357 if ( kana->ShowModal() == wxID_OK ) { | |
358 wxMessageBox( kana->GetHhsNo() ); | |
359 } | |
360 | |
361 UpdateList(); | |
227 } | 362 } |
228 /* 検索履歴検索ダイアログ */ | 363 /* 検索履歴検索ダイアログ */ |
229 void MyFrame::OnHistory( wxCommandEvent& WXUNUSED(event) ) | 364 void MyFrame::OnHistory( wxCommandEvent& WXUNUSED(event) ) |
230 { | 365 { |
231 HistDialog* hist = new HistDialog( this, wxID_ANY, wxT("検索履歴"), wxDefaultPosition, wxSize( 550, 500 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); | 366 HistDialog* hist = new HistDialog( this, wxID_ANY, wxT("検索履歴"), wxDefaultPosition, wxSize( 550, 500 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); |
232 hist->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); | 367 hist->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); |
233 hist->ShowModal(); | 368 |
369 if ( hist->ShowModal() == wxID_OK ) { | |
370 | |
371 } | |
372 | |
373 UpdateList(); | |
374 } | |
375 | |
376 /* 検索結果をリストアップ */ | |
377 void MyFrame::UpdateList( void ) | |
378 { | |
379 m_listCtrl->DeleteAllItems(); | |
380 } | |
381 | |
382 /* ステータスバーにメッセージを出力 */ | |
383 void MyFrame::SetStatusMessage( wxString msg, long n ) | |
384 { | |
385 if ( GetStatusBar() ) | |
386 SetStatusText( msg, n ); | |
234 } | 387 } |
235 | 388 |
236 /* サイズ変更 */ | 389 /* サイズ変更 */ |
237 void MyFrame::OnWinSize( wxSizeEvent& event ) | 390 void MyFrame::OnWinSize( wxSizeEvent& event ) |
238 { | 391 { |
252 wxRect r = this->GetRect(); | 405 wxRect r = this->GetRect(); |
253 int x = r.GetX(); | 406 int x = r.GetX(); |
254 int y = r.GetY(); | 407 int y = r.GetY(); |
255 int w = r.GetWidth(); | 408 int w = r.GetWidth(); |
256 int h = r.GetHeight(); | 409 int h = r.GetHeight(); |
257 //SetStatusText( wxString::Format(wxT("(%d,%d) %dx%d"),x,y,w,h), 3 ); | 410 |
411 if ( GetStatusBar() ) | |
412 SetStatusText( wxString::Format(wxT( "(%d,%d) %dx%d"),x,y,w,h ), 3 ); | |
258 } | 413 } |
259 /* 終了 */ | 414 /* 終了 */ |
260 void MyFrame::OnQuit( wxCommandEvent& WXUNUSED(event) ) | 415 void MyFrame::OnQuit( wxCommandEvent& WXUNUSED(event) ) |
261 { | 416 { |
262 Close( true ); | 417 Close( true ); |