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 )