Mercurial > mercurial > hgweb_rsearcher.cgi
diff src/rsearcher.cpp @ 10:36811fd22bd2
v1.4
author | pyon@macmini |
---|---|
date | Thu, 08 Nov 2018 19:15:43 +0900 |
parents | ae89ce4793d8 |
children | 799b6008db8e |
line wrap: on
line diff
--- a/src/rsearcher.cpp Wed Oct 31 20:10:29 2018 +0900 +++ b/src/rsearcher.cpp Thu Nov 08 19:15:43 2018 +0900 @@ -1,5 +1,5 @@ // Filename : rsearcher.cpp -// Last Change: 2018-10-31 水 16:39:35. +// Last Change: 2018-11-08 木 14:47:21. // #include <wx/arrstr.h> @@ -272,8 +272,11 @@ // Event Table BEGIN_EVENT_TABLE( MainFrame, wxFrame ) + EVT_SPLITTER_DCLICK( ID_SPLIT, MainFrame::OnSplitWin ) EVT_DATAVIEW_SELECTION_CHANGED( ID_LIST, MainFrame::OnItemSelected ) EVT_DATAVIEW_ITEM_ACTIVATED( ID_LIST, MainFrame::OnItemDClicked ) + EVT_DATAVIEW_SELECTION_CHANGED( ID_LISTKANA, MainFrame::OnKanaItemSelected ) + EVT_DATAVIEW_ITEM_ACTIVATED( ID_LISTKANA, MainFrame::OnKanaItemDClicked ) EVT_NOTEBOOK_PAGE_CHANGED( ID_NBOOK, MainFrame::OnNBookChanged ) EVT_BUTTON( ID_PSEARCH, MainFrame::OnPasteSearch ) EVT_BUTTON( wxID_PRINT, MainFrame::OnPrint ) @@ -293,6 +296,13 @@ // Event Handler +void MainFrame::OnSplitWin( wxSplitterEvent& WXUNUSED(event) ) +{ + int w, h; + this->GetSize( &w, &h ); + m_splitter->SetSashPosition( w - 200, true ); +} + void MainFrame::OnItemSelected( wxDataViewEvent& WXUNUSED(event) ) { int r = m_dataViewListCtrl->GetSelectedRow(); @@ -321,6 +331,26 @@ m_dataViewListCtrl->SetTextValue( wxT( "OK" ), r, 2 ); } +void MainFrame::OnKanaItemSelected( wxDataViewEvent& WXUNUSED(event) ) +{ + int r = m_dataViewListKana->GetSelectedRow(); + if ( r == wxNOT_FOUND ) return; +} + +void MainFrame::OnKanaItemDClicked( wxDataViewEvent& WXUNUSED(event) ) +{ + m_dataViewListCtrl->DeleteAllItems(); + wxGetApp().RemoveFile( wxT( ".cache/*" ) ); + LoadBitmaps( wxEmptyString, false ); + + int r = m_dataViewListKana->GetSelectedRow(); + m_searchCtrl->SetValue( m_dataViewListKana->GetTextValue( r, 0 ) ); + m_textCtrlName->SetValue( m_dataViewListKana->GetTextValue( r, 1 ) ); + m_textCtrlAddr->SetValue( m_dataViewListKana->GetTextValue( r, 2 ) ); + m_hhs = m_searchCtrl->GetValue(); + Search(); +} + void MainFrame::OnNBookChanged( wxBookCtrlEvent& WXUNUSED(event) ) { for ( int i = 0; i < m_notebook->GetPageCount(); i++ ) { @@ -399,7 +429,7 @@ void MainFrame::OnHelp( wxCommandEvent& WXUNUSED(event) ) { wxString version, build; - version = wxString::Format( wxT( "Re:Searcher-- version %s / %s\n\n" ), RSVER, RSRELEASE ); + version = wxString::Format( wxT( "Re:Searcher -- version %s / %s\n\n" ), RSVER, RSRELEASE ); build = wxString::Format( wxT( "build with %s\nrunning under %s." ), wxVERSION_STRING, wxGetOsDescription() ); wxMessageBox( version + build, wxT( "Help" ) ); @@ -431,20 +461,33 @@ void MainFrame::CreateControls( void ) { this->SetIcon( wxIcon( wxT( "sample" ) ) ); - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetSizeHints( wxSize( 400, 300 ), wxDefaultSize ); this->SetBackgroundColour( wxColour( 30, 80, 40 ) ); //this->SetBackgroundColour( wxColour( 153, 153, 153 ) ); wxBoxSizer* bSizerTop = new wxBoxSizer( wxHORIZONTAL ); + + m_splitter = new wxSplitterWindow( this, ID_SPLIT, wxDefaultPosition, wxDefaultSize, wxSP_THIN_SASH ); + m_splitter->SetMinimumPaneSize( 20 ); + m_panelLeft = new wxPanel( m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelLeft->SetBackgroundColour( wxColour( 30, 80, 40 ) ); + m_panelRight = new wxPanel( m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelRight->SetBackgroundColour( wxColour( 30, 80, 40 ) ); + + int w, h; + this->GetSize( &w, &h ); + m_splitter->SplitVertically( m_panelLeft, m_panelRight, w - 200 ); // Left + wxBoxSizer* bSizerLeft = new wxBoxSizer( wxVERTICAL ); + wxImageList* imgList = new wxImageList( 16, 16, false, 1 ); wxBitmap bmp( wxT( "image/blue.png" ), wxBITMAP_TYPE_PNG ); imgList->Add( bmp, wxNullBitmap ); bmp.LoadFile( wxT( "image/water.png" ), wxBITMAP_TYPE_PNG ); imgList->Add( bmp, wxNullBitmap ); - m_notebook = new wxNotebook( this, ID_NBOOK, wxDefaultPosition, wxDefaultSize, 0 ); + m_notebook = new wxNotebook( m_panelLeft, ID_NBOOK, wxDefaultPosition, wxDefaultSize, 0 ); m_notebook->SetImageList( imgList ); m_scrolledWindow1 = new wxScrolledWindow( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); @@ -471,44 +514,51 @@ m_scrolledWindow6->SetScrollRate( 5, 5 ); m_notebook->AddPage( m_scrolledWindow6, wxT( "Image-06" ), false, 0 ); - bSizerTop->Add( m_notebook, 1, wxEXPAND|wxALL, 5 ); + bSizerLeft->Add( m_notebook, 1, wxEXPAND|wxALL, 5 ); + m_panelLeft->SetSizer( bSizerLeft ); // Right wxBoxSizer* bSizerRight = new wxBoxSizer( wxVERTICAL ); - m_searchCtrl = new MySearchCtrl( this, ID_SEARCH, wxEmptyString, wxDefaultPosition, wxSize( -1, 24 ), wxTE_PROCESS_ENTER ); + m_searchCtrl = new MySearchCtrl( m_panelRight, ID_SEARCH, wxEmptyString, wxDefaultPosition, wxSize( -1, 24 ), wxTE_PROCESS_ENTER ); bSizerRight->Add( m_searchCtrl, 0, wxALL, 5 ); m_searchCtrl->SetFocus(); - m_textCtrlName = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80, -1 ), wxTE_READONLY ); + m_textCtrlName = new wxTextCtrl( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80, -1 ), wxTE_READONLY ); m_textCtrlName->SetBackgroundColour( wxColour( 180, 210, 240 ) ); bSizerRight->Add( m_textCtrlName, 0, wxALL, 5 ); - m_textCtrlAddr = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 160, -1 ), wxTE_READONLY ); + m_textCtrlAddr = new wxTextCtrl( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 160, -1 ), wxTE_READONLY ); m_textCtrlAddr->SetBackgroundColour( wxColour( 180, 210, 240 ) ); bSizerRight->Add( m_textCtrlAddr, 0, wxALL|wxEXPAND, 5 ); - m_dataViewListCtrl = new wxDataViewListCtrl( this, ID_LIST, wxDefaultPosition, wxDefaultSize, wxDV_ROW_LINES|wxDV_SINGLE ); - m_dataViewListColumnNo = m_dataViewListCtrl->AppendTextColumn( wxT( "No" ), wxDATAVIEW_CELL_INERT, 30, wxALIGN_RIGHT, wxDATAVIEW_COL_RESIZABLE|wxDATAVIEW_COL_SORTABLE ); - m_dataViewListColumnDate = m_dataViewListCtrl->AppendTextColumn( wxT( "Date" ), wxDATAVIEW_CELL_INERT, 80, wxALIGN_CENTER, wxDATAVIEW_COL_RESIZABLE|wxDATAVIEW_COL_SORTABLE ); - m_dataViewListColumnDate = m_dataViewListCtrl->AppendTextColumn( wxT( "Ready" ), wxDATAVIEW_CELL_INERT, 60, wxALIGN_CENTER, wxDATAVIEW_COL_RESIZABLE|wxDATAVIEW_COL_SORTABLE ); - + m_dataViewListCtrl = new wxDataViewListCtrl( m_panelRight, ID_LIST, wxDefaultPosition, wxDefaultSize, wxDV_ROW_LINES|wxDV_SINGLE ); + m_dataViewListColumnNo = m_dataViewListCtrl->AppendTextColumn( wxT( "No" ), wxDATAVIEW_CELL_INERT, 30, wxALIGN_RIGHT, wxDATAVIEW_COL_RESIZABLE|wxDATAVIEW_COL_SORTABLE ); + m_dataViewListColumnDate = m_dataViewListCtrl->AppendTextColumn( wxT( " Date" ), wxDATAVIEW_CELL_INERT, 80, wxALIGN_LEFT, wxDATAVIEW_COL_RESIZABLE|wxDATAVIEW_COL_SORTABLE ); + m_dataViewListColumnReady = m_dataViewListCtrl->AppendTextColumn( wxT( "Ready" ), wxDATAVIEW_CELL_INERT, 60, wxALIGN_CENTER, wxDATAVIEW_COL_RESIZABLE|wxDATAVIEW_COL_SORTABLE ); bSizerRight->Add( m_dataViewListCtrl, 1, wxALL|wxEXPAND, 5 ); - m_textCtrlLog = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerRight->Add( m_textCtrlLog, 1, wxALL|wxEXPAND, 5 ); + m_dataViewListKana = new wxDataViewListCtrl( m_panelRight, ID_LISTKANA, wxDefaultPosition, wxDefaultSize, wxDV_ROW_LINES|wxDV_SINGLE ); + m_dataViewListColumnKNo = m_dataViewListKana->AppendTextColumn( wxT( " No" ), wxDATAVIEW_CELL_INERT, 70, wxALIGN_LEFT, wxDATAVIEW_COL_RESIZABLE|wxDATAVIEW_COL_SORTABLE ); + m_dataViewListColumnName = m_dataViewListKana->AppendTextColumn( wxT( " Name" ), wxDATAVIEW_CELL_INERT, 80, wxALIGN_LEFT, wxDATAVIEW_COL_RESIZABLE|wxDATAVIEW_COL_SORTABLE ); + m_dataViewListColumnAddr = m_dataViewListKana->AppendTextColumn( wxT( " Address" ), wxDATAVIEW_CELL_INERT, -1, wxALIGN_LEFT, wxDATAVIEW_COL_RESIZABLE|wxDATAVIEW_COL_SORTABLE ); + bSizerRight->Add( m_dataViewListKana, 1, wxALL|wxEXPAND, 5 ); + + m_textCtrlLog = new wxTextCtrl( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, 40 ), 0 ); + bSizerRight->Add( m_textCtrlLog, 0, wxALL|wxEXPAND, 5 ); - m_slider = new wxSlider( this, ID_SLDR, 1, 1, 5, wxDefaultPosition, wxSize( -1, 200 ), wxSL_AUTOTICKS|wxSL_INVERSE|wxSL_LABELS|wxSL_VERTICAL ); - bSizerRight->Add( m_slider, 0, wxALL, 5 ); - - m_buttonPsearch = new wxButton( this, ID_PSEARCH, wxT( "Paste-Search" ), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonPsearch = new wxButton( m_panelRight, ID_PSEARCH, wxT( "Paste-Search" ), wxDefaultPosition, wxDefaultSize, 0 ); bSizerRight->Add( m_buttonPsearch, 0, wxALL, 5 ); - m_buttonPrint = new wxButton( this, wxID_PRINT, wxT( "Print" ), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonPrint = new wxButton( m_panelRight, wxID_PRINT, wxT( "Print" ), wxDefaultPosition, wxDefaultSize, 0 ); bSizerRight->Add( m_buttonPrint, 0, wxALL, 5 ); - m_buttonLogout = new wxButton( this, ID_LOGOUT, wxT( "Logout" ), wxDefaultPosition, wxDefaultSize, 0 ); - bSizerRight->Add( m_buttonLogout, 0, wxALL, 5 ); + // now building... + m_slider = new wxSlider( m_panelRight, ID_SLDR, 1, 1, 5, wxDefaultPosition, wxSize( -1, 200 ), wxSL_AUTOTICKS|wxSL_INVERSE|wxSL_LABELS|wxSL_VERTICAL ); + //bSizerRight->Add( m_slider, 0, wxALL, 5 ); + + m_buttonLogout = new wxButton( m_panelRight, ID_LOGOUT, wxT( "Logout" ), wxDefaultPosition, wxDefaultSize, 0 ); + //bSizerRight->Add( m_buttonLogout, 0, wxALL, 5 ); // invisible buttons for shortcut-key m_buttonFocus = new wxButton( this, ID_FOCUS, wxT( "Focus" ), wxDefaultPosition, wxDefaultSize, 0 ); @@ -521,18 +571,20 @@ m_buttonDark->Hide(); m_buttonSatellite = new wxButton( this, ID_SWIN, wxT( "Satellite" ), wxDefaultPosition, wxDefaultSize, 0 ); m_buttonSatellite->Hide(); - m_buttonClose = new wxButton( this, wxID_CLOSE, wxT( "Close" ), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonClose = new wxButton( this, wxID_CLOSE, wxT( "Close" ), wxDefaultPosition, wxDefaultSize, 0 ); m_buttonClose->Hide(); - m_buttonHelp = new wxButton( this, wxID_HELP, wxT( "Help" ), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonHelp = new wxButton( this, wxID_HELP, wxT( "Help" ), wxDefaultPosition, wxDefaultSize, 0 ); m_buttonHelp->Hide(); - bSizerTop->Add( bSizerRight, 0, wxEXPAND, 5 ); + m_panelRight->SetSizer( bSizerRight ); + // + bSizerTop->Add( m_splitter, 1, wxEXPAND, 0 ); + this->SetSizer( bSizerTop ); this->Layout(); //this->Centre( wxBOTH ); - m_staticBitmap1 = new MyStaticBitmap( m_scrolledWindow1, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0, wxEmptyString ); m_staticBitmap2 = new MyStaticBitmap( m_scrolledWindow2, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0, wxEmptyString ); m_staticBitmap3 = new MyStaticBitmap( m_scrolledWindow3, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0, wxEmptyString ); @@ -561,6 +613,7 @@ m_textCtrlName->SetValue( wxEmptyString ); m_textCtrlAddr->SetValue( wxEmptyString ); m_dataViewListCtrl->DeleteAllItems(); + m_dataViewListKana->DeleteAllItems(); wxGetApp().RemoveFile( wxT( ".cache/*" ) ); LoadBitmaps( wxEmptyString, false ); @@ -603,6 +656,58 @@ return; } + wxString hiragana = wxT( "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽぁぃぅぇぉゃゅょっ " ); + wxString katakana = wxT( "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンガギグゲコザジズゼゾダヂヅデドバビブベボパピプペポァィゥェォャュョッ " ); + wxRegEx reHiraGana( wxT( "^[" ) + hiragana + wxT( "]+$" ) ); + wxRegEx reKataKana( wxT( "^[" ) + katakana + wxT( "]+$" ) ); + + bool fuzzy = false; + if ( cmd.Right( 1 ).IsSameAs( wxT( "%" ) ) ) { + cmd.Replace( wxT( "%" ), wxEmptyString, true ); + fuzzy = true; + } + + if ( reHiraGana.Matches( cmd ) || reKataKana.Matches( cmd ) ) { + if ( cmd.Len() < 5 ) { + wxMessageBox( wxT( "too short !" ) ); + return; + } + if ( reHiraGana.Matches( cmd ) ) { + for ( int i = 0; i < hiragana.Len(); i++ ) + cmd.Replace( hiragana[i], katakana[i], true ); + } + + int match_cnt = 0; + HhsHash::iterator it; + for( it = hhash.begin(); it != hhash.end(); ++it ){ + wxString key = it->first, value = it->second->kana; + value.Replace( wxT( " " ), wxEmptyString, true ); + if ( value.IsSameAs( cmd ) || ( fuzzy && value.StartsWith( cmd ) ) ) { + wxVector<wxVariant> data; + data.push_back( key ); + data.push_back( it->second->name ); + data.push_back( it->second->addr ); + m_dataViewListKana->AppendItem( data ); + data.clear(); + m_dataViewListKana->ToggleWindowStyle( wxHSCROLL ); + match_cnt++; + } + } + + if ( match_cnt == 1 ) { + m_searchCtrl->SetValue( m_dataViewListKana->GetTextValue( 0, 0 ) ); + m_textCtrlName->SetValue( m_dataViewListKana->GetTextValue( 0, 1 ) ); + m_textCtrlAddr->SetValue( m_dataViewListKana->GetTextValue( 0, 2 ) ); + m_hhs = m_searchCtrl->GetValue(); + Search(); + } + + if ( match_cnt == 0 ) { + wxMessageBox( wxT( "No name matched." ) ); + } + return; + } + wxMessageBox( wxT( "Bad Input !!" ) ); } @@ -818,7 +923,7 @@ Search(); return; } - wxMessageBox( wxT( "Bad Input !!" ) ); + wxMessageBox( wxT( "Bad clipboard data !!" ) ); } void MainFrame::PrintImages( void )