Mercurial > mercurial > hgweb_searcher2.cgi
view src/ccnframe.cpp @ 21:eb3f5c7c990f
small changes.
author | pyon@macmini |
---|---|
date | Mon, 25 Jul 2011 05:20:55 +0900 |
parents | 710be7b6a873 |
children | 05f76f9f9186 |
line wrap: on
line source
// Filename : ccnframe.cpp // Last Change: 23-Jul-2011. // #include "common.h" #include "main.h" #include "ccnframe.h" #include "wx/wxsqlite3.h" FrameCcn::FrameCcn( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style ) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); m_Panel = new wxPanel( this ); wxBoxSizer* bSizer; bSizer = new wxBoxSizer( wxHORIZONTAL ); // DB表示 wxFlexGridSizer* fgSizer = new wxFlexGridSizer( 2, 5, 0, 0 ); fgSizer->AddGrowableRow(1); m_staticText1 = new wxStaticText( m_Panel, wxID_ANY, wxT("開催年月日"), wxDefaultPosition, wxDefaultSize, 0 ); fgSizer->Add( m_staticText1, 0, wxALL, 5 ); fgSizer->Add( 0, 0, 1, wxEXPAND, 5 ); m_staticText2 = new wxStaticText( m_Panel, wxID_ANY, wxT("合議体"), wxDefaultPosition, wxDefaultSize, 0 ); fgSizer->Add( m_staticText2, 0, wxALL, 5 ); fgSizer->Add( 0, 0, 1, wxEXPAND, 5 ); m_staticText3 = new wxStaticText( m_Panel, wxID_ANY, wxT("被保険者"), wxDefaultPosition, wxDefaultSize, 0 ); fgSizer->Add( m_staticText3, 0, wxALL, 5 ); m_listCtrlYmd = new wxListCtrl( m_Panel, ID_YMD, wxDefaultPosition, wxSize( 220, -1 ), wxLC_REPORT|wxLC_SINGLE_SEL ); fgSizer->Add( m_listCtrlYmd, 1, wxALL|wxEXPAND, 5 ); m_staticText4 = new wxStaticText( m_Panel, wxID_ANY, wxT("→"), wxDefaultPosition, wxDefaultSize, 0 ); fgSizer->Add( m_staticText4, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_listCtrlCcn = new wxListCtrl( m_Panel, ID_CCN, wxDefaultPosition, wxSize( 220, -1 ), wxLC_REPORT|wxLC_SINGLE_SEL ); fgSizer->Add( m_listCtrlCcn, 1, wxALL|wxEXPAND, 5 ); m_staticText5 = new wxStaticText( m_Panel, wxID_ANY, wxT("→"), wxDefaultPosition, wxDefaultSize, 0 ); fgSizer->Add( m_staticText5, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_listCtrlHhs = new wxListCtrl( m_Panel, ID_HHS, wxDefaultPosition, wxSize( 220, -1 ), wxLC_REPORT|wxLC_SINGLE_SEL ); fgSizer->Add( m_listCtrlHhs, 1, wxALL|wxEXPAND, 5 ); bSizer->Add( fgSizer, 1, wxEXPAND|wxALL, 5 ); // Index作成 wxGridBagSizer* gbSizer = new wxGridBagSizer( 0, 0 ); gbSizer->SetFlexibleDirection( wxVERTICAL ); gbSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); gbSizer->AddGrowableRow(3); m_btnPrevThu = new wxButton( m_Panel, ID_PRVTHU, wxT("<< 前木"), wxDefaultPosition, wxDefaultSize, 0 ); gbSizer->Add( m_btnPrevThu, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 ); m_btnNextThu = new wxButton( m_Panel, ID_NXTTHU, wxT("次木 >>"), wxDefaultPosition, wxDefaultSize, 0 ); gbSizer->Add( m_btnNextThu, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 ); m_datePicker = new wxDatePickerCtrl( m_Panel, ID_DTPICKER, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxDP_DROPDOWN|wxDP_SHOWCENTURY ); gbSizer->Add( m_datePicker, wxGBPosition( 1, 0 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER|wxALL, 5 ); m_btnMkIdX = new wxButton( m_Panel, ID_MKIDX, wxT("作成"), wxDefaultPosition, wxDefaultSize, 0 ); gbSizer->Add( m_btnMkIdX, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 ); m_btnClose = new wxButton( m_Panel, ID_CLOSE, wxT("閉じる"), wxDefaultPosition, wxDefaultSize, 0 ); gbSizer->Add( m_btnClose, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALIGN_BOTTOM|wxALL, 5 ); bSizer->Add( gbSizer, 0, wxEXPAND|wxALL, 5 ); m_Panel->SetSizer( bSizer ); m_Panel->Layout(); this->SetSize( 1000, 400 ); this->Centre( wxBOTH ); InitListCtrl(); } // Destructor FrameCcn::~FrameCcn() { } // Event Table BEGIN_EVENT_TABLE( FrameCcn, wxFrame ) EVT_LIST_ITEM_SELECTED( ID_YMD, FrameCcn::OnSelectYmd ) EVT_LIST_ITEM_SELECTED( ID_CCN, FrameCcn::OnSelectCcn ) EVT_BUTTON( ID_PRVTHU, FrameCcn::OnPrevThu ) EVT_BUTTON( ID_NXTTHU, FrameCcn::OnNextThu ) EVT_BUTTON( ID_MKIDX, FrameCcn::OnMkIndex ) EVT_BUTTON( ID_CLOSE, FrameCcn::OnClose ) END_EVENT_TABLE() // Event Handlers void FrameCcn::OnSelectYmd(wxListEvent& WXUNUSED(event)) { m_listCtrlCcn->DeleteAllItems(); wxString gszFile = wxGetCwd() + wxT("/db/ccn.db"); wxSQLite3Database ccndb; ccndb.Open( gszFile ); wxSQLite3Statement stmt = ccndb.PrepareStatement("SELECT path FROM path WHERE hhsno = ?"); stmt.Bind( 1, wxT("0300012345") ); wxSQLite3ResultSet q = stmt.ExecuteQuery(); if ( q.IsNull(0) ) { return; } long r=0; while ( q.NextRow() ) { wxString ccn = q.GetString(0); //wxString cnt = q.GetString(1); m_listCtrlCcn->InsertItem( r, ccn ); //m_listCtrlCcn->SetItem( r, 1, cnt, -1 ); r++; } stmt.Finalize(); ccndb.Close(); } void FrameCcn::OnSelectCcn(wxListEvent& WXUNUSED(event)) { m_listCtrlHhs->DeleteAllItems(); wxString gszFile = wxGetCwd() + wxT("/db/ccn.db"); wxSQLite3Database ccndb; ccndb.Open( gszFile ); wxSQLite3Statement stmt = ccndb.PrepareStatement("SELECT ymd, MAX(time) FROM ccn GROUP BY ymd ORDER BY ymd DESC, time DESC"); wxSQLite3ResultSet q = stmt.ExecuteQuery(); long r=0; while ( q.NextRow() ) { wxString ymd = q.GetString(0); wxString time = q.GetString(1); m_listCtrlHhs->InsertItem( r, wxEmptyString ); m_listCtrlHhs->SetItemText( r, ymd ); r++; } stmt.Finalize(); ccndb.Close(); } // 前木 void FrameCcn::OnPrevThu(wxCommandEvent& WXUNUSED(event)) { wxDateTime dt = m_datePicker->GetValue(); wxDateSpan ds( 0, 0, 0, 1 ); dt -= ds; dt.SetToPrevWeekDay( wxDateTime::Thu ); m_datePicker->SetValue( dt ); } // 次木 void FrameCcn::OnNextThu(wxCommandEvent& WXUNUSED(event)) { wxDateTime dt = m_datePicker->GetValue(); wxDateSpan ds( 0, 0, 0, 1 ); dt += ds; dt.SetToNextWeekDay( wxDateTime::Thu ); m_datePicker->SetValue( dt ); } /* インデックス作成 */ void FrameCcn::OnMkIndex(wxCommandEvent& WXUNUSED(event)) { wxDateTime dt = m_datePicker->GetValue(); wxString month = dt.Format(wxT("%m")); wxString year = dt.Format(wxT("%Y")); if ( month.IsSameAs(wxT("01")) || month.IsSameAs(wxT("02")) || month.IsSameAs(wxT("03")) ) { long y; year.ToLong( &y, 10 ); y--; year = wxString::Format(wxT("%d"),y); } wxString pathroot = wxGetApp().rootdir + wxFILE_SEP_PATH + year + dt.Format(wxT("\\%Y%m%d")); wxDir rootd(pathroot); if ( !wxDir::Exists(pathroot) ) { wxMessageBox( wxT("フォルダが存在しません.")+pathroot ); return; } wxProgressDialog pd( wxT("進行状況"), wxT("処理開始..."), 200, this, wxPD_APP_MODAL|wxPD_REMAINING_TIME|wxPD_AUTO_HIDE ); pd.SetSize( wxSize(320,140) ); int count=0; wxString ccndir; bool cont = rootd.GetFirst( &ccndir, wxT("*.*"), wxDIR_DIRS ); while ( cont ) { wxString gszFile = wxGetCwd() + wxT("/db/ccn.db"); wxSQLite3Database ccndb; ccndb.Open( gszFile ); wxSQLite3Statement stmt = ccndb.PrepareStatement("INSERT OR REPLACE INTO ccn VALUES( ?, datetime('now','localtime') )"); stmt.Bind( 1, dt.Format(wxT("%Y-%m-%d")) ); stmt.ExecuteQuery(); stmt.Finalize(); wxDir ccnd( pathroot + wxFILE_SEP_PATH + ccndir ); if ( !ccnd.IsOpened() ) return; wxString hhsdir; bool c = ccnd.GetFirst( &hhsdir, wxT("*.*"), wxDIR_DIRS ); wxRegEx reHhs(wxT("^0[1238][0-9]{8}$")); // 被保番チェック while ( c ) { if ( reHhs.Matches(hhsdir) ) { wxString path = pathroot + wxFILE_SEP_PATH + ccndir + wxFILE_SEP_PATH + hhsdir; stmt = ccndb.PrepareStatement("INSERT OR REPLACE INTO path VALUES( ?, ? )"); stmt.Bind( 1, hhsdir ); stmt.Bind( 2, path ); stmt.ExecuteQuery(); stmt.Finalize(); } c = ccnd.GetNext(&hhsdir); pd.Update( count++, hhsdir+wxT("@")+ccndir+wxT("を処理しました.") ); } ccndb.Close(); cont = rootd.GetNext(&ccndir); } wxMessageBox(wxT("インデックス作成が終了しました.")); } // 閉じる void FrameCcn::OnClose(wxCommandEvent& WXUNUSED(event)) { this->Close(); } // Functions void FrameCcn::InitListCtrl() { wxListItem itemCol; itemCol.SetText( wxT("年-月-日") ); m_listCtrlYmd->InsertColumn( 0, itemCol ); m_listCtrlYmd->SetColumnWidth( 0, 100 ); itemCol.SetText( wxT("更新時刻") ); m_listCtrlYmd->InsertColumn( 1, itemCol ); m_listCtrlYmd->SetColumnWidth( 1, 200 ); itemCol.SetText( wxT("合議体名") ); m_listCtrlCcn->InsertColumn( 0, itemCol ); m_listCtrlCcn->SetColumnWidth( 0, 100 ); itemCol.SetText( wxT("件数") ); m_listCtrlCcn->InsertColumn( 1, itemCol ); m_listCtrlCcn->SetColumnWidth( 1, 100 ); itemCol.SetText( wxT("被保険者番号") ); m_listCtrlHhs->InsertColumn( 0, itemCol ); m_listCtrlHhs->SetColumnWidth( 0, 100 ); itemCol.SetText( wxT("氏名") ); m_listCtrlHhs->InsertColumn( 1, itemCol ); m_listCtrlHhs->SetColumnWidth( 1, 100 ); // read from db m_listCtrlCcn->DeleteAllItems(); wxString gszFile = wxGetCwd() + wxT("/db/ccn.db"); wxSQLite3Database ccndb; ccndb.Open( gszFile ); wxSQLite3Statement stmt = ccndb.PrepareStatement("SELECT ymd, MAX(time) FROM ccn GROUP BY ymd ORDER BY ymd DESC, time DESC"); wxSQLite3ResultSet q = stmt.ExecuteQuery(); long r=0; while ( q.NextRow() ) { wxString ymd = q.GetString(0); wxString time = q.GetString(1); m_listCtrlYmd->InsertItem( r, ymd ); m_listCtrlYmd->SetItem( r, 1, time, -1 ); r++; } stmt.Finalize(); ccndb.Close(); }