Mercurial > mercurial > hgweb_searcher03.cgi
view src/myframe.cpp @ 1:7b6dab24f4b8
Gui parts complete.
author | pyon@macmini |
---|---|
date | Sun, 04 Aug 2013 21:42:49 +0900 |
parents | 0c0701a935f8 |
children | c066fde99517 |
line wrap: on
line source
// Filename : myframe.cpp // Last Change: 04-Aug-2013. // #include "main.h" #include "db.h" #include "myframe.h" #include "about.h" #include "kana.h" #include "hist.h" #include "index.h" #include "mask.h" /////////////////////////////////////////////////////////////// // カスタム検索ボックス MySearchBox::MySearchBox( wxWindow* parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, long style ) : wxSearchCtrl( parent, id, value, pos, size, style ) { } MySearchBox::~MySearchBox() { } // Event Table BEGIN_EVENT_TABLE( MySearchBox, wxSearchCtrl ) EVT_CHAR( MySearchBox::OnKey ) END_EVENT_TABLE() // Event Handlers & Functions void MySearchBox::OnKey( wxKeyEvent& event ) { wxString s = GetValue(); // statustext( s.Len() ); if ( event.GetKeyCode() == 45 ) { // テンキーの '-' キーで1文字削除 wxString t = GetStringSelection(); if ( t.IsEmpty() ) { long p = GetInsertionPoint(); if ( p > 0 ) Remove( p - 1, p ); } else { Cut(); } return; } if ( event.GetKeyCode() == WXK_RETURN ) { if ( s.IsSameAs( wxT("+") ) ) { wxMessageBox(wxT("pripri")); return; } wxRegEx reHhs( wxT("^0[1238][0-9]{8}$") ); if ( reHhs.Matches( s ) ) { wxString t = GetHhsInfoByHhsNo( s ); wxArrayString array = GetPathByHhsNo( s ); wxMessageBox( t ); return; } wxRegEx reNo( wxT("^[0-9]{1,2}$") ); if ( reNo.Matches( s ) ) { return; } //m_parent->SetStatusMessage(wxT("bad input"), 0 ); return; } event.Skip(); } /////////////////////////////////////////////////////////////// // メインフレーム #define WINL_W 400 #define LOGO_W 200 #define LOGO_H 92 // resources #if !defined(__WXMSW__) && !defined(__WXPM__) #include "sample.xpm" #endif MyFrame::MyFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style ) { this->SetSizeHints( wxSize( WINL_W, 500 ), wxDefaultSize ); this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_ACTIVEBORDER ) ); //this->SetBackgroundColour( wxColour(wxT("WHEAT")) ); // set the frame icon SetIcon(wxICON(sample)); // メニューバー Menu m_menubar = new wxMenuBar( 0 ); m_menuFile = new wxMenu(); wxMenuItem* m_menuItemViewMode = new wxMenuItem( m_menuFile, ID_MNVIEW, wxString( wxT("ビューモード") ) , wxT("Toggle ViewMode"), wxITEM_CHECK ); m_menuFile->Append( m_menuItemViewMode ); m_menuFile->AppendSeparator(); // ---- wxMenuItem* m_menuItemIndex = new wxMenuItem( m_menuFile, ID_MNINDEX, wxString( wxT("インデックス") ) , wxT("Update index"), wxITEM_NORMAL ); m_menuFile->Append( m_menuItemIndex ); wxMenuItem* m_menuItemMask = new wxMenuItem( m_menuFile, ID_MNMASKPARAM, wxString( wxT("マスクパラメータ") ) , wxT("Setup mask parameters"), wxITEM_NORMAL ); m_menuFile->Append( m_menuItemMask ); wxMenuItem* m_menuItemAppDir = new wxMenuItem( m_menuFile, ID_MNAPPDIR, wxString( wxT("アプリケーションフォルダを開く") ) , wxT("Open application directory"), wxITEM_NORMAL ); m_menuFile->Append( m_menuItemAppDir ); m_menuFile->AppendSeparator(); // ---- wxMenuItem* m_menuItemAbout = new wxMenuItem( m_menuFile, ID_MNABOUT, wxString( wxT("&About...\tF1") ) , wxT("Show about dialog"), wxITEM_NORMAL ); m_menuFile->Append( m_menuItemAbout ); m_menubar->Append( m_menuFile, wxT("ファイル(&F)") ); this->SetMenuBar( m_menubar ); // wxBoxSizer* bSizerTop = new wxBoxSizer( wxVERTICAL ); m_splitter = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D ); wxBoxSizer* bSizerL = new wxBoxSizer( wxVERTICAL ); // left-pane m_panelL = new wxPanel( m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxString logo = wxGetCwd() + wxFILE_SEP_PATH + wxT("image") + wxFILE_SEP_PATH + wxT("logo.png"); wxBitmap bmp = wxBitmap( logo, wxBITMAP_TYPE_PNG ); m_bitmap = new wxStaticBitmap( m_panelL, wxID_ANY, bmp, wxDefaultPosition, wxSize( LOGO_W, LOGO_H ), 0 ); bSizerL->Add( m_bitmap, 0, wxALL, 5 ); m_textCtrlName = new wxTextCtrl( m_panelL, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 200, -1 ), 0 ); bSizerL->Add( m_textCtrlName, 0, wxALL, 5 ); m_textCtrlAddr = new wxTextCtrl( m_panelL, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 380, -1 ), 0 ); bSizerL->Add( m_textCtrlAddr, 0, wxALL, 5 ); m_listCtrl = new wxListCtrl( m_panelL, ID_LIST, wxDefaultPosition, wxDefaultSize, wxLC_REPORT ); wxListItem itemCol; itemCol.SetText( wxT("通番") ); m_listCtrl->InsertColumn( 0, itemCol ); m_listCtrl->SetColumnWidth( 0, 50 ); itemCol.SetText( wxT("年月日") ); m_listCtrl->InsertColumn( 1, itemCol ); m_listCtrl->SetColumnWidth( 1, 80 ); itemCol.SetText( wxT("場所") ); m_listCtrl->InsertColumn( 2, itemCol ); m_listCtrl->SetColumnWidth( 2, 300 ); bSizerL->Add( m_listCtrl, 1, wxALL|wxEXPAND, 5 ); wxBoxSizer* bSizerCmd = new wxBoxSizer( wxHORIZONTAL ); m_staticText = new wxStaticText( m_panelL, wxID_ANY, wxT("コマンド?"), wxDefaultPosition, wxDefaultSize, 0 ); bSizerCmd->Add( m_staticText, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_searchBox = new MySearchBox( m_panelL, ID_SEARCH, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER ); #ifndef __WXMAC__ m_searchBox->ShowSearchButton( true ); #endif m_searchBox->ShowCancelButton( false ); m_searchBox->SetFocus(); bSizerCmd->Add( m_searchBox, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_buttonKana = new wxButton( m_panelL, ID_KANA, wxT("カナ検索"), wxDefaultPosition, wxSize( 65, -1 ), 0 ); bSizerCmd->Add( m_buttonKana, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 20 ); m_buttonHist = new wxButton( m_panelL, ID_HIST, wxT("検索履歴"), wxDefaultPosition, wxSize( 65, -1 ), 0 ); bSizerCmd->Add( m_buttonHist, 0, wxALL, 5 ); bSizerL->Add( bSizerCmd, 0, wxEXPAND, 5 ); m_panelL->SetSizer( bSizerL ); m_panelL->Layout(); bSizerL->Fit( m_panelL ); // right-pane m_panelR = new wxPanel( m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizerR = new wxBoxSizer( wxHORIZONTAL ); m_bitmapView = new wxStaticBitmap( m_panelR, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); bSizerR->Add( m_bitmapView, 1, wxALL|wxEXPAND, 5 ); m_listCtrlThumb = new wxListCtrl( m_panelR, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_ICON ); bSizerR->Add( m_listCtrlThumb, 0, wxALL|wxEXPAND, 5 ); m_panelR->SetSizer( bSizerR ); m_panelR->Layout(); bSizerR->Fit( m_panelR ); m_panelR->Show( false ); m_splitter->Initialize( m_panelL ); bSizerTop->Add( m_splitter, 1, wxEXPAND, 5 ); this->SetSizer( bSizerTop ); this->Layout(); // ステータスバー Statusbar m_statusBar = new wxStatusBar( this, wxID_ANY, wxST_SIZEGRIP ); int widths[] = { 200, 100, -1, 90 }; m_statusBar->SetFieldsCount( 4, widths ); this->SetStatusBar( m_statusBar ); SetStatusText( wxT("被保番を入力してスタート!") ); this->Centre( wxBOTH ); LoadMaskParam(); } MyFrame::~MyFrame() { } // Event Table BEGIN_EVENT_TABLE( MyFrame, wxFrame ) EVT_MENU( ID_MNABOUT, MyFrame::OnAbout ) EVT_MENU( wxID_EXIT, MyFrame::OnQuit ) EVT_MENU( ID_MNVIEW, MyFrame::OnViewMode ) EVT_MENU( ID_MNINDEX, MyFrame::OnIndex ) EVT_MENU( ID_MNMASKPARAM, MyFrame::OnMaskParam ) EVT_MENU( ID_MNAPPDIR, MyFrame::OnOpenAppDir ) EVT_LIST_ITEM_ACTIVATED( ID_LIST, MyFrame::OnOpenHhsDir ) EVT_BUTTON( ID_KANA, MyFrame::OnKana ) EVT_BUTTON( ID_HIST, MyFrame::OnHistory ) EVT_SIZE( MyFrame::OnWinSize ) EVT_MOVE( MyFrame::OnWinMove ) EVT_CLOSE( MyFrame::SaveConfig ) END_EVENT_TABLE() // Event Handlers & Functions /* インデックス作成ダイアログ */ void MyFrame::OnIndex( wxCommandEvent& WXUNUSED(event) ) { IndexDialog* index = new IndexDialog( this, wxID_ANY, wxT("インデックス作成"), wxDefaultPosition, wxSize( 500, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); index->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); index->ShowModal(); } /* マスクパラメータを設定ファイルから読み込む */ void MyFrame::LoadMaskParam( void ) { conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("app.conf"); config = new wxFileConfig( wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE ); int x, y, w, h; config->SetPath( wxT("/Mask") ); config->Read( wxT("x1"), &x ); config->Read( wxT("y1"), &y ); config->Read( wxT("w1"), &w ); config->Read( wxT("h1"), &h ); m_mask1.SetPosition( wxPoint( x, y ) ); m_mask1.SetSize( wxSize( w, h ) ); config->Read( wxT("x2"), &x ); config->Read( wxT("y2"), &y ); config->Read( wxT("w2"), &w ); config->Read( wxT("h2"), &h ); m_mask2.SetPosition( wxPoint( x, y ) ); m_mask2.SetSize( wxSize( w, h ) ); config->Read( wxT("x3"), &x ); config->Read( wxT("y3"), &y ); config->Read( wxT("w3"), &w ); config->Read( wxT("h3"), &h ); m_mask3.SetPosition( wxPoint( x, y ) ); m_mask3.SetSize( wxSize( w, h ) ); } /* マスクパラメータ設定ダイアログ */ void MyFrame::OnMaskParam( wxCommandEvent& WXUNUSED(event) ) { MaskDialog* mask = new MaskDialog( this, wxID_ANY, wxT("マスク位置とサイズの指定"), wxDefaultPosition, wxSize( 400, 210 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); mask->SetMask1( m_mask1 ); mask->SetMask2( m_mask2 ); mask->SetMask3( m_mask3 ); mask->LoadParams(); mask->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); if ( mask->ShowModal() == wxID_OK ) { m_mask1 = mask->GetMask1(); m_mask2 = mask->GetMask2(); m_mask3 = mask->GetMask3(); config->SetPath( wxT("/Mask") ); config->Write( wxT("x1"), m_mask1.GetX() ); config->Write( wxT("y1"), m_mask1.GetY() ); config->Write( wxT("w1"), m_mask1.GetWidth() ); config->Write( wxT("h1"), m_mask1.GetHeight() ); config->Write( wxT("x2"), m_mask2.GetX() ); config->Write( wxT("y2"), m_mask2.GetY() ); config->Write( wxT("w2"), m_mask2.GetWidth() ); config->Write( wxT("h2"), m_mask2.GetHeight() ); config->Write( wxT("x3"), m_mask3.GetX() ); config->Write( wxT("y3"), m_mask3.GetY() ); config->Write( wxT("w3"), m_mask3.GetWidth() ); config->Write( wxT("h3"), m_mask3.GetHeight() ); delete config; } } /* アプリフォルダを開く */ void MyFrame::OnOpenAppDir( wxCommandEvent& WXUNUSED(event) ) { wxString appdir = wxGetCwd(); wxString execmd = wxT("explorer ") + appdir; wxExecute( execmd ); } /* ビューモードの切替え */ void MyFrame::OnViewMode( wxCommandEvent& event ) { if ( event.IsChecked() ) { int x, y; GetSize( &x, &y ); SetSize( WINL_W + 500, y ); m_splitter->SplitVertically( m_panelL, m_panelR, 0 ); } else { m_splitter->Unsplit(); SetSize( WINL_W, -1 ); } } /* 被保険者フォルダを開く */ void MyFrame::OnOpenHhsDir( wxListEvent& event ) { wxString hhsdir; /* hhsdir = m_textCtrlDist->GetValue() + wxFILE_SEP_PATH; int i = event.GetIndex(); wxListItem item; item.SetId(i); item.SetColumn(1); item.SetMask(wxLIST_MASK_TEXT); m_listCtrlHhsDir->GetItem( item ); hhsdir.Append( item.GetText() ); DirViewFrame* dvf = new DirViewFrame( (wxWindow*)this, wxID_ANY, wxEmptyString ); dvf->m_dir = hhsdir; dvf->LoadListImage(); dvf->Show(true); */ } /* カナ検索ダイアログ */ void MyFrame::OnKana( wxCommandEvent& WXUNUSED(event) ) { KanaDialog* kana = new KanaDialog( this, wxID_ANY, wxT("カナ氏名で被保番を検索"), wxDefaultPosition, wxSize( 600, 600 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxRESIZE_BORDER|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); kana->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); if ( kana->ShowModal() == wxID_OK ) { wxMessageBox( kana->GetHhsNo() ); } UpdateList(); } /* 検索履歴検索ダイアログ */ void MyFrame::OnHistory( wxCommandEvent& WXUNUSED(event) ) { HistDialog* hist = new HistDialog( this, wxID_ANY, wxT("検索履歴"), wxDefaultPosition, wxSize( 550, 500 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL ); hist->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM ); if ( hist->ShowModal() == wxID_OK ) { } UpdateList(); } /* 検索結果をリストアップ */ void MyFrame::UpdateList( void ) { m_listCtrl->DeleteAllItems(); } /* ステータスバーにメッセージを出力 */ void MyFrame::SetStatusMessage( wxString msg, long n ) { if ( GetStatusBar() ) SetStatusText( msg, n ); } /* サイズ変更 */ void MyFrame::OnWinSize( wxSizeEvent& event ) { this->Refresh( true, NULL ); TellLocation(); event.Skip(); } /* ウィンドウ移動 */ void MyFrame::OnWinMove( wxMoveEvent& WXUNUSED(event) ) { TellLocation(); return; } /* ウィンドウ位置とサイズを表示 */ void MyFrame::TellLocation( void ) { wxRect r = this->GetRect(); int x = r.GetX(); int y = r.GetY(); int w = r.GetWidth(); int h = r.GetHeight(); if ( GetStatusBar() ) SetStatusText( wxString::Format(wxT( "(%d,%d) %dx%d"),x,y,w,h ), 3 ); } /* 終了 */ void MyFrame::OnQuit( wxCommandEvent& WXUNUSED(event) ) { Close( true ); } /* 設定を保存 */ void MyFrame::SaveConfig( wxCloseEvent& WXUNUSED(event) ) { if ( !IsIconized() && !IsMaximized() ) { wxGetApp().rect = this->GetRect(); } Destroy(); } /* アバウトダイアログ */ void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) ) { AboutDialog* aboutDlg = new AboutDialog( this, wxID_ANY, wxT("About this Software"), wxDefaultPosition, wxSize(320,280), wxDEFAULT_DIALOG_STYLE|wxSTAY_ON_TOP ); aboutDlg->ShowModal(); }