Mercurial > mercurial > hgweb_golang.cgi
view src/kaigo/horori/searcher/src/searcher.cpp @ 65:0369656be06c default tip
many changes.
author | pyon@macmini |
---|---|
date | Fri, 20 May 2022 06:30:34 +0900 |
parents | ad5c30ee5cf1 |
children |
line wrap: on
line source
// Filename : searcher.cpp // Last Change: 2021-06-15 火 16:11:11. // #include <wx/msgdlg.h> #include <wx/dir.h> #include <wx/fileconf.h> #include <wx/html/htmprint.h> #include <wx/clipbrd.h> #include <wx/regex.h> #include "searcher.h" #include "utils.h" #include "net.h" #define PWPREFIX "Jo" #define PWXORN 23 /** MyStaticBitmap **/ MyStaticBitmap::MyStaticBitmap(wxScrolledWindow *parent, wxWindowID id, const wxBitmap &label, const wxPoint &pos, const wxSize &size, long style, const wxString &name) : wxStaticBitmap(parent, id, label, pos, size, style, name) { m_parent = parent; Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(MyStaticBitmap::OnLeftDown ), NULL, this); Connect(wxEVT_LEFT_UP, wxMouseEventHandler(MyStaticBitmap::OnLeftUp ), NULL, this); Connect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(MyStaticBitmap::OnLeftDClick ), NULL, this); Connect(wxEVT_RIGHT_DCLICK, wxMouseEventHandler(MyStaticBitmap::OnRightDClick ), NULL, this); Connect(wxEVT_MOTION, wxMouseEventHandler(MyStaticBitmap::OnMotion ), NULL, this); Connect(wxEVT_MOUSEWHEEL, wxMouseEventHandler(MyStaticBitmap::OnWheel ), NULL, this); Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(MyStaticBitmap::OnStartRGesture), NULL, this); Connect(wxEVT_RIGHT_UP, wxMouseEventHandler(MyStaticBitmap::OnEndRGesture ), NULL, this); } MyStaticBitmap::~MyStaticBitmap() { Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(MyStaticBitmap::OnLeftDown ), NULL, this); Disconnect(wxEVT_LEFT_UP, wxMouseEventHandler(MyStaticBitmap::OnLeftUp ), NULL, this); Disconnect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(MyStaticBitmap::OnLeftDClick ), NULL, this); Disconnect(wxEVT_RIGHT_DCLICK, wxMouseEventHandler(MyStaticBitmap::OnRightDClick ), NULL, this); Disconnect(wxEVT_MOTION, wxMouseEventHandler(MyStaticBitmap::OnMotion ), NULL, this); Disconnect(wxEVT_MOUSEWHEEL, wxMouseEventHandler(MyStaticBitmap::OnWheel ), NULL, this); Disconnect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(MyStaticBitmap::OnStartRGesture), NULL, this); Disconnect(wxEVT_RIGHT_UP, wxMouseEventHandler(MyStaticBitmap::OnEndRGesture ), NULL, this); } /* Event Handlers */ void MyStaticBitmap::OnWheel(wxMouseEvent& event) { /* if (event.ControlDown()) { if (event.GetWheelRotation() < 0) { } else { } return; } event.Skip(); */ } void MyStaticBitmap::OnLeftDown(wxMouseEvent& event) { event.GetPosition(&m_dragx, &m_dragy); SetCursor(wxCursor(wxCURSOR_SIZING)); } void MyStaticBitmap::OnLeftUp(wxMouseEvent& WXUNUSED(event)) { SetCursor(wxCursor(wxCURSOR_ARROW)); } void MyStaticBitmap::OnLeftDClick(wxMouseEvent& event) { /* if (with_stl) return;OnDrvDateSelected MainFrame* mf = (MainFrame*)FindWindowById(ID_MAIN); mf->ChangeCZoom(1); */ } void MyStaticBitmap::OnRightDClick(wxMouseEvent& event) { /* if (with_stl) return; MainFrame* mf = (MainFrame*)FindWindowById(ID_MAIN); mf->ChangeCZoom(-1); */ } void MyStaticBitmap::OnMotion(wxMouseEvent& event) { if (event.RightIsDown()) return; if (event.Dragging()) { int xv, yv, x, y; m_parent->GetViewStart(&xv, &yv); event.GetPosition(&x, &y); int xa = abs(x - m_dragx); int ya = abs(y - m_dragy); int xs = x - m_dragx < 0 ? -1 : 1; int ys = y - m_dragy < 0 ? -1 : 1; // hantai dakedo sumu-zu m_parent->Scroll(xv + xs * log10(xa + 1), yv + ys * log10(ya + 1)); m_dragx = x; m_dragy = y; } } /* right-gesture: start detect */ void MyStaticBitmap::OnStartRGesture(wxMouseEvent& event) { event.GetPosition(&cx, &cy); } /* right-gesture: judge */ void MyStaticBitmap::OnEndRGesture(wxMouseEvent& event) { //if (with_stl) return; int x, y; event.GetPosition(&x, &y); int dx = x - cx; int dy = y - cy; float rad = fabs(atan2(dy, dx)); float pi = 3.14159; // to right if (rad < pi / 8 && dx > 0) { ChangeBook(1); } // to left else if (rad > pi / 8 * 7 && rad < pi && dx < 0) { ChangeBook(-1); } // to up-right else if (rad > pi / 8 && rad < pi / 8 * 3 && dx > 0) { m_parent2->Close(); } // down else if (rad > pi / 8 * 3 && rad < pi / 8 * 5 && dy > 0) { //mf->PrintImages(); } } /* Functions */ void MyStaticBitmap::ChangeBook(int i) { int n = m_parent1->GetSelection(); if (i < 0) { if (n > 1) m_parent1->SetSelection(n - 1); } else { if (n < 6) m_parent1->SetSelection(n + 1); } } /** SearcherFrame **/ SearchFrame::SearchFrame(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxFrame(parent, id, title, pos, size, style) { CreateControls(); InitializeControlsValue(); SetVersionInfo(); // Connect Events m_notebook->Connect(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler(SearchFrame::OnPageChanged), NULL, this); m_filePicker->Connect(wxEVT_COMMAND_FILEPICKER_CHANGED, wxFileDirPickerEventHandler(SearchFrame::OnFile), NULL, this); m_buttonRead->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnRead), NULL, this); m_dataViewListCtrlBatch->Connect(wxEVT_CHAR, wxKeyEventHandler(SearchFrame::OnSelectBatchListCtrlA), NULL, this); m_dataViewListCtrlBatch->Connect(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler(SearchFrame::OnSelectBatchDClicked), NULL, this); m_choiceIdxYear->Connect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(SearchFrame::OnIdxYearChoice), NULL, this); m_dataViewListCtrlIdxDate->Connect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(SearchFrame::OnIdxDateSelected), NULL, this); m_dataViewListCtrlIdx->Connect(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler(SearchFrame::OnIdxDClicked), NULL, this); m_choiceDrvYear->Connect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(SearchFrame::OnDrvYearChoice), NULL, this); m_dataViewListCtrlDrvDate->Connect(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler(SearchFrame::OnDrvDateDClicked), NULL, this); m_dataViewListCtrlDrvDate->Connect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(SearchFrame::OnDrvDateSelected), NULL, this); m_dataViewListCtrlDrvCcn->Connect(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler(SearchFrame::OnDrvCcnDClicked), NULL, this); m_dataViewListCtrlDrvCcn->Connect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(SearchFrame::OnDrvCcnSelected), NULL, this); m_dataViewListCtrlDrv->Connect(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler(SearchFrame::OnDrvDClicked), NULL, this); m_buttonRegHhs->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnUploadHhsDB), NULL, this); m_buttonRegImg->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnUploadImage), NULL, this); m_buttonCSV->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnDB2CSV), NULL, this); m_textCtrlUPassword->Connect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(SearchFrame::OnUPassword), NULL, this); m_buttonPw->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnSavePw), NULL, this); m_searchCtrl->Connect(wxEVT_CHAR, wxKeyEventHandler(SearchFrame::OnChar), NULL, this); m_buttonPaste->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnPaste), NULL, this); m_dataViewListCtrlAny->Connect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(SearchFrame::OnSelectAnyListItem), NULL, this); m_buttonPrint->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnPrint), NULL, this); m_textCtrlPasswd->Connect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(SearchFrame::OnPassword), NULL, this); this->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(SearchFrame::OnClose)); } SearchFrame::~SearchFrame() { // Disconnect Events m_notebook->Disconnect(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler(SearchFrame::OnPageChanged), NULL, this); m_buttonRead->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnRead), NULL, this); m_filePicker->Disconnect(wxEVT_COMMAND_FILEPICKER_CHANGED, wxFileDirPickerEventHandler(SearchFrame::OnFile), NULL, this); m_dataViewListCtrlBatch->Disconnect(wxEVT_CHAR, wxKeyEventHandler(SearchFrame::OnSelectBatchListCtrlA), NULL, this); m_dataViewListCtrlBatch->Disconnect(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler(SearchFrame::OnSelectBatchDClicked), NULL, this); m_choiceIdxYear->Disconnect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(SearchFrame::OnIdxYearChoice), NULL, this); m_dataViewListCtrlIdxDate->Disconnect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(SearchFrame::OnIdxDateSelected), NULL, this); m_dataViewListCtrlIdx->Disconnect(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler(SearchFrame::OnIdxDClicked), NULL, this); m_choiceDrvYear->Disconnect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(SearchFrame::OnDrvYearChoice), NULL, this); m_dataViewListCtrlDrvDate->Disconnect(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler(SearchFrame::OnDrvDateDClicked), NULL, this); m_dataViewListCtrlDrvDate->Disconnect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(SearchFrame::OnDrvDateSelected), NULL, this); m_dataViewListCtrlDrvCcn->Disconnect(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler(SearchFrame::OnDrvCcnDClicked), NULL, this); m_dataViewListCtrlDrvCcn->Disconnect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(SearchFrame::OnDrvCcnSelected), NULL, this); m_dataViewListCtrlDrv->Disconnect(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler(SearchFrame::OnDrvDClicked), NULL, this); m_buttonRegHhs->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnUploadHhsDB), NULL, this); m_buttonRegImg->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnUploadImage), NULL, this); m_buttonCSV->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnDB2CSV), NULL, this); m_textCtrlUPassword->Disconnect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(SearchFrame::OnUPassword), NULL, this); m_buttonPw->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnSavePw), NULL, this); m_searchCtrl->Disconnect(wxEVT_CHAR, wxKeyEventHandler(SearchFrame::OnChar), NULL, this); m_buttonPaste->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnPaste), NULL, this); m_dataViewListCtrlAny->Disconnect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(SearchFrame::OnSelectAnyListItem), NULL, this); m_buttonPrint->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SearchFrame::OnPrint), NULL, this); m_textCtrlPasswd->Disconnect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(SearchFrame::OnPassword), NULL, this); this->Disconnect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(SearchFrame::OnClose)); } /* Event-Handlers */ void SearchFrame::OnChar(wxKeyEvent& event) { int mod = event.GetModifiers(); int keycode = event.GetKeyCode(); //wxMessageBox(wxString::Format(wxT("%d-%d"), mod, keycode)); if (keycode == 13) { // Enter m_dataViewListCtrlAny->DeleteAllItems(); RemoveTemp(); wxString s = m_searchCtrl->GetValue(); m_searchCtrl->SelectAll(); if (m_user.IsEmpty()) { wxMessageBox(wxT("input password.")); this->SetTitle(wxT("Searcher - ")); m_searchCtrl->SetValue(wxEmptyString); m_textCtrlPasswd->SelectAll(); m_textCtrlPasswd->SetFocus(); return; } if (s.IsSameAs(wxT("9")) || s.IsSameAs(wxT("q"))) { Close(); return; } wxRegEx reHhs(wxT("^0[1238][0-9]{8}$")); if (reHhs.Matches(s)) { // hno search mode SetListAnyHeader(0); SearchByHno(s); return; } if (s.IsEmpty()) { // history mode SetListAnyHeader(1); return; } if (IsHiragana(s) || IsKatakana(s)) { // kana search mode s = Hiragara2Katakana(s); SetListAnyHeader(2); return; } wxMessageBox(wxT("bad input !")); return; } if (keycode == 45) { // num-key '-' as BackSpace wxString t = m_searchCtrl->GetStringSelection(); if (t.IsEmpty()) { long p = m_searchCtrl->GetInsertionPoint(); if (p > 0) m_searchCtrl->Remove(p - 1, p); } else { m_searchCtrl->Cut(); } return; } event.Skip(); } void SearchFrame::OnPageChanged(wxNotebookEvent& event) { int n = event.GetSelection(); int m = event.GetOldSelection(); // setup if (!m_usergroup.StartsWith(wxT("star")) && n == 7) { m_notebook->ChangeSelection(m); wxMessageBox(wxT("you can't view this page.")); return; } if (n == 7) LoadPasswd(false); // batch-print & maintenance if (!m_usergroup.StartsWith(wxT("nintei")) && !(m_usergroup.StartsWith(wxT("star")))) { if (n != 5 && n != 6) return; m_notebook->ChangeSelection(m); wxMessageBox(wxT("you can't view this page.")); return; } } void SearchFrame::OnRead(wxCommandEvent& WXUNUSED(event)) { ReadCSV(); } void SearchFrame::OnFile(wxFileDirPickerEvent& WXUNUSED(event)) { ReadCSV(); } void SearchFrame::OnIdxYearChoice(wxCommandEvent& WXUNUSED(evnet)) { m_dataViewListCtrlIdxDate->DeleteAllItems(); m_dataViewListCtrlIdx->DeleteAllItems(); m_dataViewListCtrlIdxDate->Scroll(0, 0); m_dataViewListCtrlIdx->Scroll(0, 0); int n = m_choiceIdxYear->GetSelection(); wxString url = wxT("/d/") + m_choiceIdxYear->GetString(n); wxString buf = HttpGetText(m_addr, m_port, url); wxArrayString ymd = wxSplit(buf, ':', '\\'); ymd.Sort(false); wxVector<wxVariant> data; for (int i = 0; i < ymd.GetCount(); i++) { data.push_back(wxVariant(wxString::Format(wxT("%02d"), i + 1))); wxString buf = ymd[i].Left(4) + wxT("-") + ymd[i].Mid(4,2) + wxT("-") + ymd[i].Right(2); data.push_back(wxVariant(buf)); m_dataViewListCtrlIdxDate->AppendItem(data); data.clear(); } } void SearchFrame::OnIdxDateSelected(wxDataViewEvent& WXUNUSED(evnet)) { m_dataViewListCtrlIdx->DeleteAllItems(); m_dataViewListCtrlIdx->Scroll(0, 0); int r = m_dataViewListCtrlIdxDate->GetSelectedRow(); wxString date = m_dataViewListCtrlIdxDate->GetTextValue(r, 1); date.Replace(wxT("-"), wxEmptyString, true); wxString url = wxT("/d/") + date; wxString buf = HttpGetText(m_addr, m_port, url); wxArrayString hhs = wxSplit(buf, ':', '\\'); hhs.Sort(false); url = wxT("/hn/") + wxJoin(hhs, ':', '\\'); buf = HttpGetText(m_addr, m_port, url); wxArrayString name = wxSplit(buf, ':', '\\'); wxVector<wxVariant> data; for (int i = 0; i < hhs.GetCount(); i++) { data.push_back(wxVariant(wxString::Format(wxT("%02d"), i + 1))); data.push_back(wxVariant(hhs[i])); data.push_back(wxVariant(name[i])); m_dataViewListCtrlIdx->AppendItem(data); data.clear(); } } void SearchFrame::OnIdxDClicked(wxDataViewEvent& WXUNUSED(event)) { int r = m_dataViewListCtrlIdx->GetSelectedRow(); wxString hno = m_dataViewListCtrlIdx->GetTextValue(r, 1); m_searchCtrl->SetValue(hno); wxString url = wxT("/h/") + hno; wxString h = HttpGetText(m_addr, m_port, url); // Get /h/0800012345 -> name:addr:ymd1#ymd2#... SetHhsInfo(h); SetImages(); SetListAnyHeader(0); m_notebook->SetSelection(0); } void SearchFrame::OnDrvYearChoice(wxCommandEvent& WXUNUSED(evnet)) { m_dataViewListCtrlDrvDate->DeleteAllItems(); m_dataViewListCtrlDrvCcn->DeleteAllItems(); m_dataViewListCtrlDrv->DeleteAllItems(); m_dataViewListCtrlDrvDate->Scroll(0, 0); m_dataViewListCtrlDrvCcn->Scroll(0, 0); m_dataViewListCtrlDrv->Scroll(0, 0); int n = m_choiceDrvYear->GetSelection(); if (n == 0) return; wxString year = wxFILE_SEP_PATH + m_choiceDrvYear->GetString(n); wxDir dir(year); if (!dir.IsOpened()) return; wxString dirname; bool cont = dir.GetFirst(&dirname, wxEmptyString, wxDIR_DIRS); wxVector<wxVariant> data; for (int i = 0; cont; i++) { wxString n = wxString::Format(wxT("%02d"), i + 1); data.push_back(wxVariant(n)); data.push_back(wxVariant(dirname)); m_dataViewListCtrlDrvDate->AppendItem(data); data.clear(); cont = dir.GetNext(&dirname); } } void SearchFrame::OnDrvDateSelected(wxDataViewEvent& WXUNUSED(evnet)) { m_dataViewListCtrlDrvCcn->DeleteAllItems(); m_dataViewListCtrlDrv->DeleteAllItems(); m_dataViewListCtrlDrvCcn->Scroll(0, 0); m_dataViewListCtrlDrv->Scroll(0, 0); int n = m_choiceDrvYear->GetSelection(); int r = m_dataViewListCtrlDrvDate->GetSelectedRow(); wxString date = wxFILE_SEP_PATH + m_choiceDrvYear->GetString(n) + wxFILE_SEP_PATH + m_dataViewListCtrlDrvDate->GetTextValue(r, 1); wxDir dir(date); if (!dir.IsOpened()) return; wxString dirname; bool cont = dir.GetFirst(&dirname, wxEmptyString, wxDIR_DIRS); wxVector<wxVariant> data; for (int i = 0; cont; i++) { wxString n = wxString::Format(wxT("%02d"), i + 1); data.push_back(wxVariant(n)); data.push_back(wxVariant(dirname)); m_dataViewListCtrlDrvCcn->AppendItem(data); data.clear(); cont = dir.GetNext(&dirname); } } void SearchFrame::OnDrvDateDClicked(wxDataViewEvent& WXUNUSED(evnet)) { int n = m_choiceDrvYear->GetSelection(); int r = m_dataViewListCtrlDrvDate->GetSelectedRow(); wxString date = wxFILE_SEP_PATH + m_choiceDrvYear->GetString(n) + wxFILE_SEP_PATH + m_dataViewListCtrlDrvDate->GetTextValue(r, 1); wxString cmd = wxT("explorer.exe ") + date; wxExecute(cmd); } void SearchFrame::OnDrvCcnSelected(wxDataViewEvent& event) { m_dataViewListCtrlDrv->DeleteAllItems(); m_dataViewListCtrlDrv->Scroll(0, 0); int n = m_choiceDrvYear->GetSelection(); int r1 = m_dataViewListCtrlDrvDate->GetSelectedRow(); int r2 = m_dataViewListCtrlDrvCcn->GetSelectedRow(); wxString ccn = wxFILE_SEP_PATH + m_choiceDrvYear->GetString(n); ccn += wxFILE_SEP_PATH + m_dataViewListCtrlDrvDate->GetTextValue(r1, 1); ccn += wxFILE_SEP_PATH + m_dataViewListCtrlDrvCcn->GetTextValue(r2, 1); wxDir dir(ccn); if (!dir.IsOpened()) return; wxString dirname; bool cont = dir.GetFirst(&dirname, wxEmptyString, wxDIR_DIRS); wxArrayString hno; wxVector<wxVariant> data; for (int i = 0; cont; i++) { wxString n = wxString::Format(wxT("%02d"), i); data.push_back(wxVariant(n)); data.push_back(wxVariant(dirname)); hno.Add(dirname); data.push_back(wxVariant(wxEmptyString)); m_dataViewListCtrlDrv->AppendItem(data); data.clear(); cont = dir.GetNext(&dirname); } wxString url = wxT("/hn/") + wxJoin(hno, ':', '\\'); wxString buf = HttpGetText(m_addr, m_port, url); wxArrayString name = wxSplit(buf, ':', '\\'); for (int r = 0; r < name.GetCount(); r++) { m_dataViewListCtrlDrv->SetTextValue(name[r], r, 2); } } void SearchFrame::OnDrvCcnDClicked(wxDataViewEvent& event) { int n = m_choiceDrvYear->GetSelection(); int r1 = m_dataViewListCtrlDrvDate->GetSelectedRow(); int r2 = m_dataViewListCtrlDrvCcn->GetSelectedRow(); wxString ccn = wxFILE_SEP_PATH + m_choiceDrvYear->GetString(n); ccn += wxFILE_SEP_PATH + m_dataViewListCtrlDrvDate->GetTextValue(r1, 1); ccn += wxFILE_SEP_PATH + m_dataViewListCtrlDrvCcn->GetTextValue(r2, 1); wxString cmd = wxT("explorer.exe ") + ccn; wxExecute(cmd); } void SearchFrame::OnDrvDClicked(wxDataViewEvent& WXUNUSED(evnet)) { int n = m_choiceDrvYear->GetSelection(); int r1 = m_dataViewListCtrlDrvDate->GetSelectedRow(); int r2 = m_dataViewListCtrlDrvCcn->GetSelectedRow(); int r3 = m_dataViewListCtrlDrv->GetSelectedRow(); wxString hno = wxFILE_SEP_PATH + m_choiceDrvYear->GetString(n); hno += wxFILE_SEP_PATH + m_dataViewListCtrlDrvDate->GetTextValue(r1, 1); hno += wxFILE_SEP_PATH + m_dataViewListCtrlDrvCcn->GetTextValue(r2, 1); hno += wxFILE_SEP_PATH + m_dataViewListCtrlDrv->GetTextValue(r3, 1); wxString cmd = wxT("explorer.exe ") + hno; wxExecute(cmd); } void SearchFrame::OnUploadHhsDB(wxCommandEvent& WXUNUSED(event)) { wxString incsv = m_filePickerHhsDB->GetPath(); wxString outcsv = m_workdir + wxFILE_SEP_PATH + wxT("hhsdb.csv"); wxString outgz = outcsv + wxT(".gz"); if (wxFileExists(outcsv)) wxRemoveFile(outcsv); wxFFile input, output; if (!input.Open(incsv)) { wxMessageBox(wxT("Cannot open file.")); return; } if (!output.Open(outcsv, wxT("w"))) { wxMessageBox(wxT("Cannot create file.")); return; } wxString buf; wxCSConv cust(wxT("cp932")); input.ReadAll(&buf, cust); input.Close(); buf.Replace(wxT("\""), wxEmptyString, true); output.Write(buf); output.Close(); Gzip(outcsv, outgz); wxString url = wxT("/u/"); if (HttpPostFile(m_addr, m_port, url, outgz)) { wxString url = wxT("/ht/"); wxString date = HttpGetText(m_addr, m_port, url); m_textCtrlLastHhsDB->SetValue(date); wxMessageBox(wxT("upload done.")); } else { wxMessageBox(wxT("upload failed.")); } wxRemoveFile(outcsv); wxRemoveFile(outgz); } void SearchFrame::OnUploadImage(wxCommandEvent& WXUNUSED(event)) { wxDateTime dt = m_datePicker->GetValue(); wxString ymd = dt.Format(wxT("%Y%m%d")); wxString year = dt.Format(wxT("%Y")); wxDateTime::Month month = dt.GetMonth(); if (month == wxDateTime::Jan || month == wxDateTime::Feb || month == wxDateTime::Mar) { year = wxString::Format(wxT("%d"), dt.GetYear() - 1); } wxString ymddir = wxFILE_SEP_PATH + year + wxFILE_SEP_PATH + ymd; if (!wxDirExists(ymddir)) { wxMessageBox(wxT("bad date.")); return; } wxDir ymd_dir(ymddir); if (!ymd_dir.IsOpened()) return; m_gauge->SetRange(200); m_gauge->SetValue(0); wxString url = wxT("/ci/") + ymd; HttpGetText(m_addr, m_port, url); wxString ccn; bool cont = ymd_dir.GetFirst(&ccn, wxEmptyString, wxDIR_DIRS); for (int i = 0; cont; i++) { wxDir ccn_dir(ymddir + wxFILE_SEP_PATH + ccn); wxString hno; bool cont2 = ccn_dir.GetFirst(&hno, wxEmptyString, wxDIR_DIRS); while (cont2) { if (!hno.StartsWith(wxT("0000"))) { wxString d = ymddir + wxFILE_SEP_PATH + ccn + wxFILE_SEP_PATH + hno; wxString tar = m_workdir + wxFILE_SEP_PATH + hno + wxT(".tar"); TarDir(d, tar); wxString gz = m_workdir + wxFILE_SEP_PATH + hno + wxT(".tgz"); Gzip(tar, gz); wxString url = wxT("/ui/") + ymd + wxT("/") + hno + wxT(".tgz"); if (HttpPostFile(m_addr, m_port, url, gz)) { wxRemoveFile(tar); wxRemoveFile(gz); } } cont2 = ccn_dir.GetNext(&hno); m_gauge->SetValue(i); i++; } cont = ymd_dir.GetNext(&ccn); } m_gauge->SetValue(0); url = wxT("/ud/") + ymd; HttpGetText(m_addr, m_port, url); url = wxT("/dt/"); wxString latest = HttpGetText(m_addr, m_port, url); m_textCtrlLastIndex->SetValue(latest); wxMessageBox(wxT("upload done.")); } void SearchFrame::OnDB2CSV(wxCommandEvent& WXUNUSED(event)) { wxString outcsv = m_filePickerCSV->GetPath(); if (wxFileExists(outcsv)) wxRemoveFile(outcsv); wxFFile output; if (!output.Open(outcsv, wxT("w"))) { wxMessageBox(wxT("Cannot create file.")); return; } wxString url = wxT("/hd/"); wxString dbtxt = HttpGetText(m_addr, m_port, url); output.Write(dbtxt); output.Close(); wxMessageBox(wxT("finish !")); } void SearchFrame::OnUPassword(wxCommandEvent& WXUNUSED(event)) { wxMessageBox("upw"); } void SearchFrame::OnSavePw(wxCommandEvent& WXUNUSED(event)) { wxMessageBox("save pw"); } void SearchFrame::OnPaste(wxCommandEvent& WXUNUSED(event)) { if (m_user.IsEmpty()) return; wxString s; if (wxTheClipboard->Open()) { if (wxTheClipboard->IsSupported(wxDF_TEXT)) { wxTextDataObject data; wxTheClipboard->GetData(data); s = data.GetText(); } wxTheClipboard->Close(); } s.Replace(wxT(" "), wxT(""), true); wxRegEx reHhs(wxT("^0[1238][0-9]{8}$")); if (reHhs.Matches(s)) { m_searchCtrl->SetValue(s); m_searchCtrl->SelectAll(); SetListAnyHeader(0); SearchByHno(s); return; } wxMessageBox(wxT("Bad clipboard data !!")); } void SearchFrame::OnSelectBatchListCtrlA(wxKeyEvent& event) { int mod = event.GetModifiers(); int keycode = event.GetKeyCode(); //wxMessageBox(wxString::Format(wxT("%d-%d"), mod, keycode)); if (keycode == 1) m_dataViewListCtrlBatch->SelectAll(); event.Skip(); } void SearchFrame::OnSelectBatchDClicked(wxDataViewEvent& WXUNUSED(event)) { int r = m_dataViewListCtrlBatch->GetSelectedRow(); wxString hno = m_dataViewListCtrlBatch->GetTextValue(r, 1); m_searchCtrl->SetValue(hno); wxString url = wxT("/h/") + hno; wxString h = HttpGetText(m_addr, m_port, url); // Get /h/0800012345 -> name:addr:ymd1#ymd2#... SetHhsInfo(h); SetImages(); SetListAnyHeader(0); m_notebook->SetSelection(0); } void SearchFrame::OnSelectAnyListItem(wxDataViewEvent& WXUNUSED(event)) { RemoveTemp(); if (m_searchmode == 0) { SetImages(); m_notebook->SetSelection(0); } } void SearchFrame::OnPrint(wxCommandEvent& WXUNUSED(event)) { int zoom = m_spinCtrl->GetValue(); wxString imgsz = wxString::Format(wxT("\" width=\"%d\" height=\"%d\""), 750 * zoom / 100, 1060 * zoom / 100); switch (m_notebook->GetSelection()) { case 5: {// batch print RemoveTemp(); if (m_dataViewListCtrlBatch->GetItemCount() == 0) { wxMessageBox(wxT("no item.")); return; } if (m_dataViewListCtrlBatch->GetSelectedItemsCount() == 0) { wxMessageDialog dlg(this, wxT("すべてを印刷しますか?"), wxT("Question"), wxYES_NO); if (dlg.ShowModal() == wxID_NO) return; m_dataViewListCtrlBatch->SelectAll(); } wxPrintDialogData pd; wxPrinter p(&pd); if (p.PrintDialog(NULL) == NULL) return; m_checkBoxMask->SetValue(true); m_gauge->SetRange(m_dataViewListCtrlBatch->GetSelectedItemsCount()); m_gauge->SetValue(0); for (int r = 0; r < m_dataViewListCtrlBatch->GetItemCount(); r++) { if (!m_dataViewListCtrlBatch->IsRowSelected(r)) continue; wxString hno = m_dataViewListCtrlBatch->GetTextValue(r, 1); wxString date = m_dataViewListCtrlBatch->GetTextValue(r, 3); if (date.IsEmpty()) continue; date.Replace(wxT("-"), wxEmptyString, true); // Get /i/20200110/0800012345.tgz wxString url = wxT("/i/") + date + wxT("/") + hno + wxT(".tgz"); HttpGetTgzFile(m_addr, m_port, url, m_workdir); MaskImage(); wxString html; html = wxT("<html><body>\n"); for (int i = 0; i < 5; i++) { if (m_dataViewListCtrlBatch->GetToggleValue(r, 4) && i > 2) continue; html += wxT("<img src=\"") + wxString::Format(wxT("%s/%d"), m_workdir, i + 1) + imgsz + wxT("/>"); html += wxT("<div align=right><font size=-2><u>") + hno + wxT("</u></font></div>"); if (m_checkBoxBoth->IsChecked() && i == 2) { html += wxT("<div> </div><img src=\"./image/space.tif\"") + imgsz + wxT("/>"); } } html += wxT("</body></html>\n"); // start printing wxHtmlPrintout hpout(wxString::Format(wxT("Searcher - batch mode [%d]"), r + 1)); hpout.SetMargins(0, 0, 0, 0, 0); hpout.SetHtmlText(html, wxEmptyString, false); p.Print(NULL, &hpout, false); m_gauge->SetValue(r); RemoveTemp(); } m_gauge->SetValue(0); break; } case 6: {// index break; } default: { wxString org = m_workdir + wxFILE_SEP_PATH + wxT("1"); wxString cpy = m_workdir + wxFILE_SEP_PATH + wxT("0"); wxCopyFile(org, cpy, true); // backup for mask wxDateTime now = wxDateTime::Now(); wxString nowstr = now.Format(wxT("%Y/%m/%d %H:%M"), wxDateTime::GMT9).c_str(); wxString html; html = wxT("<html><body>\n"); wxString footer; footer += wxT("<div align=right><font size=-2><u>") + m_searchCtrl->GetValue(); footer += wxT( "@" ) + m_usergroup + wxT( "#" ) + nowstr + wxT("</u></font></div>"); wxMessageDialog dlg(this, wxT("5枚すべて印刷しますか?"), wxT("Question"), wxYES_NO); if (dlg.ShowModal() == wxID_YES) { if (m_checkBoxMask->IsChecked()) MaskImage(); for (int i = 0; i < 5; i++) { html += wxT("<img src=\"") + wxString::Format(wxT("%s/%d"), m_workdir, i + 1) + imgsz + wxT("/>"); if (!m_checkBoxBoth->IsChecked()) { html += footer; } else { if (i == 0 || i == 2 || i == 3) html += footer; } if (m_checkBoxBoth->IsChecked() && i == 2) { html += wxT("<div> </div><img src=\"./image/space.tif\"") + imgsz + wxT("/>"); } } } else { int i = m_notebook->GetSelection(); if (i == 0 && m_checkBoxMask->IsChecked()) MaskImage(); html += wxT("<img src=\"") + wxString::Format(wxT("%s/%d"), m_workdir, i + 1) + imgsz + wxT("/>"); html += footer; } html += wxT("</body></html>\n"); wxPrintDialogData pd; wxPrinter p(&pd); if (p.PrintDialog(NULL) == NULL) return; wxHtmlPrintout hpout(wxT("Searcher")); hpout.SetMargins(0, 0, 0, 0, 0); hpout.SetHtmlText(html, wxEmptyString, false); p.Print(NULL, &hpout, false); wxCopyFile(cpy, org, true); } } } void SearchFrame::OnPassword(wxCommandEvent& WXUNUSED(event)) { if (m_textCtrlPasswd->GetValue() == wxT(".")) { Close(); return; } wxString x = XoR(PWPREFIX + m_textCtrlPasswd->GetValue(), PWXORN); m_user = wxEmptyString; m_notebook->ChangeSelection(0); wxString url = wxT("/pw/"); wxString buf = HttpGetText(m_addr, m_port, url); wxArrayString idpw = wxSplit(buf, ':', '\\'); for (int i = 2; i < idpw.GetCount(); i += 3) { if (idpw[i].IsSameAs(x)) { m_user = idpw[i - 1]; m_usergroup = idpw[i - 2]; } } if (m_user.IsEmpty()) { wxMessageBox(wxT("invalid user.")); this->SetTitle(wxT("Searcher - ")); m_textCtrlPasswd->SelectAll(); return; } wxMessageBox(wxString::Format(wxT("%s login..."), m_user)); m_textCtrlPasswd->SetValue(wxT("ora ora ora ora !")); wxString sv; if (m_usergroup.StartsWith(wxT("star"))) sv = wxT("...") + m_addr + wxT(":") + m_port; this->SetTitle(wxString::Format(wxT("Searcher - %s(%s) logined"), m_user, m_usergroup) + sv); m_searchCtrl->SetFocus(); } void SearchFrame::OnClose(wxCloseEvent& WXUNUSED(event)) { RemoveTemp(); Destroy(); } /* Functions */ void SearchFrame::CreateControls() { this->SetIcon(wxIcon(wxT("sample"))); this->SetSizeHints(wxDefaultSize, wxDefaultSize); this->SetBackgroundColour(wxColour(217, 217, 217)); int w, h; this->GetSize(&w, &h); wxGridBagSizer* gbSizer = new wxGridBagSizer(0, 0); gbSizer->SetFlexibleDirection(wxBOTH); gbSizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxSize(1300, h - 40), wxNB_FIXEDWIDTH|wxNB_TOP); // for large-display //m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxSize(1000, h - 50), wxNB_FIXEDWIDTH|wxNB_TOP); // for note-pc m_scrolledWindow1 = new wxScrolledWindow(m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL); m_scrolledWindow1->SetScrollRate(5, 5); m_notebook->AddPage(m_scrolledWindow1, wxT("Mシート1"), false); m_scrolledWindow2 = new wxScrolledWindow(m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL); m_scrolledWindow2->SetScrollRate(5, 5); m_notebook->AddPage(m_scrolledWindow2, wxT("Mシート2"), false); m_scrolledWindow3 = new wxScrolledWindow(m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL); m_scrolledWindow3->SetScrollRate(5, 5); m_notebook->AddPage(m_scrolledWindow3, wxT("特記事項"), false); m_scrolledWindow4 = new wxScrolledWindow(m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL); m_scrolledWindow4->SetScrollRate(5, 5); m_notebook->AddPage(m_scrolledWindow4, wxT("意見書1"), false); m_scrolledWindow5 = new wxScrolledWindow(m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL); m_scrolledWindow5->SetScrollRate(5, 5); m_notebook->AddPage(m_scrolledWindow5, wxT("意見書2"), false); m_panelBatch = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); wxGridBagSizer* gbSizerBatch = new wxGridBagSizer(0, 0); gbSizerBatch->SetFlexibleDirection(wxBOTH); gbSizerBatch->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); m_filePicker = new wxFilePickerCtrl(m_panelBatch, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("CSV file(*.csv)|*.csv"), wxDefaultPosition, wxSize(300, -1), wxFLP_FILE_MUST_EXIST|wxFLP_OPEN|wxFLP_SMALL|wxFLP_USE_TEXTCTRL); gbSizerBatch->Add(m_filePicker, wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_buttonRead = new wxButton(m_panelBatch, wxID_ANY, wxT("読込み"), wxDefaultPosition, wxDefaultSize, 0); gbSizerBatch->Add(m_buttonRead, wxGBPosition(0, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_dataViewListCtrlBatch = new wxDataViewListCtrl(m_panelBatch, wxID_ANY, wxDefaultPosition, wxSize(700, h - 120), wxDV_MULTIPLE|wxDV_ROW_LINES); m_dataViewListColumnBPNo = m_dataViewListCtrlBatch->AppendTextColumn(wxT("No"), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE|wxDATAVIEW_COL_SORTABLE); m_dataViewListColumnBPHno = m_dataViewListCtrlBatch->AppendTextColumn(wxT("被保険者番号"), wxDATAVIEW_CELL_INERT, 100, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnBPName = m_dataViewListCtrlBatch->AppendTextColumn(wxT(" 氏名"), wxDATAVIEW_CELL_INERT, 120, static_cast<wxAlignment>(wxALIGN_LEFT), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnBPDate = m_dataViewListCtrlBatch->AppendTextColumn(wxT("日付"), wxDATAVIEW_CELL_INERT, 90, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE|wxDATAVIEW_COL_SORTABLE); m_dataViewListColumnOnlyIk = m_dataViewListCtrlBatch->AppendToggleColumn(wxT("調査のみ"), wxDATAVIEW_CELL_INERT, 70, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE|wxDATAVIEW_COL_SORTABLE); m_dataViewListColumnProgress = m_dataViewListCtrlBatch->AppendProgressColumn(wxT("状態"), wxDATAVIEW_CELL_INERT, 100, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnDummy = m_dataViewListCtrlBatch->AppendTextColumn(wxEmptyString, wxDATAVIEW_CELL_INERT, 80, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListCtrlBatch->SetAlternateRowColour(wxColour(230, 230, 255)) ; gbSizerBatch->Add(m_dataViewListCtrlBatch, wxGBPosition(1, 0), wxGBSpan(1, 2), wxALL, 5); m_panelBatch->SetSizer(gbSizerBatch); m_panelBatch->Layout(); gbSizerBatch->Fit(m_panelBatch); m_notebook->AddPage(m_panelBatch, wxT("バッチ印刷"), false); m_panelMainte = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); wxBoxSizer* bSizerMainte = new wxBoxSizer(wxVERTICAL); m_staticTextIndex = new wxStaticText(m_panelMainte, wxID_ANY, wxT("インデックス"), wxDefaultPosition, wxDefaultSize, 0); m_staticTextIndex->SetFont(wxFont(wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, true, wxEmptyString)); bSizerMainte->Add(m_staticTextIndex, 0, wxALL, 5); wxFlexGridSizer* fgSizerIdx = new wxFlexGridSizer(0, 5, 0, 0); fgSizerIdx->SetFlexibleDirection(wxBOTH); fgSizerIdx->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); m_staticTextDrive = new wxStaticText(m_panelMainte, wxID_ANY, wxT("ドライブ"), wxDefaultPosition, wxDefaultSize, 0); fgSizerIdx->Add(m_staticTextDrive, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5); m_staticTextYear = new wxStaticText(m_panelMainte, wxID_ANY, wxT("年度"), wxDefaultPosition, wxDefaultSize, 0); fgSizerIdx->Add(m_staticTextYear, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5); m_staticTextDate = new wxStaticText(m_panelMainte, wxID_ANY, wxT("日付"), wxDefaultPosition, wxDefaultSize, 0); fgSizerIdx->Add(m_staticTextDate, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5); m_staticTextCcn = new wxStaticText(m_panelMainte, wxID_ANY, wxT("審査会"), wxDefaultPosition, wxDefaultSize, 0); fgSizerIdx->Add(m_staticTextCcn, 0, wxALL, 5); m_staticTextData = new wxStaticText(m_panelMainte, wxID_ANY, wxT("データ"), wxDefaultPosition, wxDefaultSize, 0); fgSizerIdx->Add(m_staticTextData, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5); // -- m_staticTextDB = new wxStaticText(m_panelMainte, wxID_ANY, wxT("DB"), wxDefaultPosition, wxDefaultSize, 0); fgSizerIdx->Add(m_staticTextDB, 0, wxALL, 5); wxString m_choiceIdxYearChoices[] = {wxEmptyString, wxT("2017"), wxT("2018"), wxT("2019"), wxT("2020"), wxT("2021"), wxT("2022"), wxT("2023"), wxT("2024"), wxT("2025"), wxT("2026"), wxT("2027"), wxT("2028"), wxT("2029"), wxT("2030"), wxT("2031"), wxT("2032")}; int m_choiceIdxYearNChoices = sizeof(m_choiceIdxYearChoices) / sizeof(wxString); m_choiceIdxYear = new wxChoice(m_panelMainte, wxID_ANY, wxDefaultPosition, wxSize(100, -1), m_choiceIdxYearNChoices, m_choiceIdxYearChoices, 0); m_choiceIdxYear->SetSelection(0); fgSizerIdx->Add(m_choiceIdxYear, 0, wxALL, 5); m_dataViewListCtrlIdxDate = new wxDataViewListCtrl(m_panelMainte, wxID_ANY, wxDefaultPosition, wxSize(150, 330), wxDV_SINGLE|wxDV_ROW_LINES); m_dataViewListColumnIdxDateNo = m_dataViewListCtrlIdxDate->AppendTextColumn(wxT("No"), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnIdxDate = m_dataViewListCtrlIdxDate->AppendTextColumn(wxT("日付"), wxDATAVIEW_CELL_INERT, 80, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListCtrlIdxDate->SetAlternateRowColour(wxColour(230, 230, 255)) ; fgSizerIdx->Add(m_dataViewListCtrlIdxDate, 1, wxALL|wxEXPAND, 5); m_staticTextIdxCcn = new wxStaticText(m_panelMainte, wxID_ANY, wxT("---"), wxDefaultPosition, wxDefaultSize, 0); fgSizerIdx->Add(m_staticTextIdxCcn, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5); m_dataViewListCtrlIdx = new wxDataViewListCtrl(m_panelMainte, wxID_ANY, wxDefaultPosition, wxSize(300, -1), wxDV_SINGLE|wxDV_ROW_LINES); m_dataViewListColumnIdxNo = m_dataViewListCtrlIdx->AppendTextColumn(wxT("No"), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnIdxHno = m_dataViewListCtrlIdx->AppendTextColumn(wxT("被保険者番号"), wxDATAVIEW_CELL_INERT, 100, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnIdxName = m_dataViewListCtrlIdx->AppendTextColumn(wxT(" 氏名"), wxDATAVIEW_CELL_INERT, 120, static_cast<wxAlignment>(wxALIGN_LEFT), wxDATAVIEW_COL_RESIZABLE); m_dataViewListCtrlIdx->SetAlternateRowColour(wxColour(230, 230, 255)) ; fgSizerIdx->Add(m_dataViewListCtrlIdx, 1, wxALL|wxEXPAND, 5); // -- wxString m_choiceDrvChoices[] = {wxT("C"), wxT("Y"), wxT("Z")}; int m_choiceDrvNChoices = sizeof(m_choiceDrvChoices) / sizeof(wxString); m_choiceDrv = new wxChoice(m_panelMainte, wxID_ANY, wxDefaultPosition, wxSize(50, -1), m_choiceDrvNChoices, m_choiceDrvChoices, 0); m_choiceDrv->SetSelection(0); fgSizerIdx->Add(m_choiceDrv, 0, wxALL, 5); wxString m_choiceDrvYearChoices[] = {wxEmptyString, wxT("2017"), wxT("2018"), wxT("2019"), wxT("2020"), wxT("2021"), wxT("2022"), wxT("2023"), wxT("2024"), wxT("2025"), wxT("2026"), wxT("2027"), wxT("2028"), wxT("2029"), wxT("2030"), wxT("2031"), wxT("2032")}; int m_choiceDrvYearNChoices = sizeof(m_choiceDrvYearChoices) / sizeof(wxString); m_choiceDrvYear = new wxChoice(m_panelMainte, wxID_ANY, wxDefaultPosition, wxSize(100, -1), m_choiceDrvYearNChoices, m_choiceDrvYearChoices, 0); m_choiceDrvYear->SetSelection(0); fgSizerIdx->Add(m_choiceDrvYear, 0, wxALL, 5); m_dataViewListCtrlDrvDate = new wxDataViewListCtrl(m_panelMainte, wxID_ANY, wxDefaultPosition, wxSize(150, 330), wxDV_SINGLE|wxDV_ROW_LINES); m_dataViewListColumnDrvDateNo = m_dataViewListCtrlDrvDate->AppendTextColumn(wxT("No"), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnDrvDate = m_dataViewListCtrlDrvDate->AppendTextColumn(wxT("日付"), wxDATAVIEW_CELL_INERT, 80, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListCtrlDrvDate->SetAlternateRowColour(wxColour(230, 230, 255)) ; fgSizerIdx->Add(m_dataViewListCtrlDrvDate, 1, wxALL|wxEXPAND, 5); m_dataViewListCtrlDrvCcn = new wxDataViewListCtrl(m_panelMainte, wxID_ANY, wxDefaultPosition, wxSize(130, -1), wxDV_SINGLE|wxDV_ROW_LINES); m_dataViewListColumnDrvCcnNo = m_dataViewListCtrlDrvCcn->AppendTextColumn(wxT("No"), wxDATAVIEW_CELL_INERT, 50, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE ); m_dataViewListColumnDrvCcn = m_dataViewListCtrlDrvCcn->AppendTextColumn(wxT("合議対"), wxDATAVIEW_CELL_INERT, -1, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListCtrlDrvCcn->SetAlternateRowColour(wxColour(230, 230, 255)) ; fgSizerIdx->Add(m_dataViewListCtrlDrvCcn, 1, wxALL|wxEXPAND, 5); m_dataViewListCtrlDrv = new wxDataViewListCtrl(m_panelMainte, wxID_ANY, wxDefaultPosition, wxSize(300, -1), wxDV_SINGLE|wxDV_ROW_LINES); m_dataViewListColumnDrvNo = m_dataViewListCtrlDrv->AppendTextColumn(wxT("No"), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnDrvHno = m_dataViewListCtrlDrv->AppendTextColumn(wxT("被保険者番号"), wxDATAVIEW_CELL_INERT, 100, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnDrvName = m_dataViewListCtrlDrv->AppendTextColumn(wxT(" 氏名"), wxDATAVIEW_CELL_INERT, 120, static_cast<wxAlignment>(wxALIGN_LEFT), wxDATAVIEW_COL_RESIZABLE); m_dataViewListCtrlDrv->SetAlternateRowColour(wxColour(230, 230, 255)) ; fgSizerIdx->Add(m_dataViewListCtrlDrv, 1, wxALL|wxEXPAND, 5); bSizerMainte->Add(fgSizerIdx, 0, wxLEFT|wxEXPAND, 30); // ---- m_staticline1 = new wxStaticLine(m_panelMainte, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL); bSizerMainte->Add(m_staticline1, 0, wxEXPAND|wxALL, 5); m_staticTextDBmainte = new wxStaticText(m_panelMainte, wxID_ANY, wxT("DB更新"), wxDefaultPosition, wxDefaultSize, 0); m_staticTextDBmainte->SetFont(wxFont(wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, true, wxEmptyString)); bSizerMainte->Add(m_staticTextDBmainte, 0, wxALL, 5); wxGridBagSizer* gbSizerDB = new wxGridBagSizer(0, 0); gbSizerDB->SetFlexibleDirection(wxBOTH); gbSizerDB->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); m_staticTextHhsDB = new wxStaticText(m_panelMainte, wxID_ANY, wxT("被保険者CSV"), wxDefaultPosition, wxDefaultSize, 0); gbSizerDB->Add(m_staticTextHhsDB, wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5); m_filePickerHhsDB = new wxFilePickerCtrl(m_panelMainte, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("CSV and TXT files (*.csv;*.txt)|*.csv;*.txt"), wxDefaultPosition, wxSize(200, -1), wxFLP_FILE_MUST_EXIST|wxFLP_OPEN|wxFLP_SMALL|wxFLP_USE_TEXTCTRL); gbSizerDB->Add(m_filePickerHhsDB, wxGBPosition(0, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_buttonRegHhs = new wxButton(m_panelMainte, wxID_ANY, wxT("アップロード"), wxDefaultPosition, wxDefaultSize, 0); gbSizerDB->Add(m_buttonRegHhs, wxGBPosition(0, 2), wxGBSpan(1, 1), wxALL, 5); m_textCtrlLastHhsDB = new wxTextCtrl(m_panelMainte, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(180, -1), 0); m_textCtrlLastHhsDB->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENU)); gbSizerDB->Add(m_textCtrlLastHhsDB, wxGBPosition(0, 3), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_staticTextRegImg = new wxStaticText(m_panelMainte, wxID_ANY, wxT("画像登録"), wxDefaultPosition, wxDefaultSize, 0); gbSizerDB->Add(m_staticTextRegImg, wxGBPosition(1, 0), wxGBSpan(1, 1), wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5); m_datePicker = new wxDatePickerCtrl(m_panelMainte, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxDP_DROPDOWN|wxDP_SHOWCENTURY); gbSizerDB->Add(m_datePicker, wxGBPosition(1, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_buttonRegImg = new wxButton(m_panelMainte, wxID_ANY, wxT("アップロード"), wxDefaultPosition, wxDefaultSize, 0); gbSizerDB->Add(m_buttonRegImg, wxGBPosition(1, 2), wxGBSpan(1, 1), wxALL, 5); m_textCtrlLastIndex = new wxTextCtrl(m_panelMainte, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(180, -1), 0); m_textCtrlLastIndex->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENU)); gbSizerDB->Add(m_textCtrlLastIndex, wxGBPosition(1, 3), wxGBSpan(1, 1), wxALL, 5); m_staticTextCSV = new wxStaticText(m_panelMainte, wxID_ANY, wxT("CSV出力"), wxDefaultPosition, wxDefaultSize, 0); gbSizerDB->Add(m_staticTextCSV, wxGBPosition(2, 0), wxGBSpan(1, 1), wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5); m_filePickerCSV = new wxFilePickerCtrl(m_panelMainte, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("CSV file(*.csv)|*.csv"), wxDefaultPosition, wxSize(200, -1), wxFLP_OVERWRITE_PROMPT|wxFLP_SAVE|wxFLP_SMALL|wxFLP_USE_TEXTCTRL); gbSizerDB->Add(m_filePickerCSV, wxGBPosition(2, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_buttonCSV = new wxButton(m_panelMainte, wxID_ANY, wxT("出力"), wxDefaultPosition, wxDefaultSize, 0); gbSizerDB->Add(m_buttonCSV, wxGBPosition(2, 2), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); bSizerMainte->Add(gbSizerDB, 0, wxLEFT, 30); m_staticline2 = new wxStaticLine(m_panelMainte, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL); bSizerMainte->Add(m_staticline2, 0, wxEXPAND | wxALL, 5); m_staticTextVersion = new wxStaticText(m_panelMainte, wxID_ANY, wxT("バージョン情報"), wxDefaultPosition, wxDefaultSize, 0); m_staticTextVersion->SetFont(wxFont(wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, true, wxEmptyString)); bSizerMainte->Add(m_staticTextVersion, 0, wxALL, 5); m_textCtrlVersion = new wxTextCtrl(m_panelMainte, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_MULTILINE); bSizerMainte->Add(m_textCtrlVersion, 1, wxALL|wxEXPAND, 5); m_panelMainte->SetSizer(bSizerMainte); m_panelMainte->Layout(); bSizerMainte->Fit(m_panelMainte); m_notebook->AddPage(m_panelMainte, wxT("メンテナンス"), false); m_panelSetup = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); wxBoxSizer* bSizerSetup = new wxBoxSizer(wxHORIZONTAL); m_dataViewListCtrlPw = new wxDataViewListCtrl(m_panelSetup, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDV_HORIZ_RULES|wxDV_ROW_LINES|wxDV_VERT_RULES); m_dataViewListColumnUId = m_dataViewListCtrlPw->AppendTextColumn(wxT(" ID"), wxDATAVIEW_CELL_EDITABLE, 80, static_cast<wxAlignment>(wxALIGN_LEFT), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnUName = m_dataViewListCtrlPw->AppendTextColumn(wxT(" Name"), wxDATAVIEW_CELL_EDITABLE, 180, static_cast<wxAlignment>(wxALIGN_LEFT), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnUGroup = m_dataViewListCtrlPw->AppendTextColumn(wxT(" Group"), wxDATAVIEW_CELL_EDITABLE, 80, static_cast<wxAlignment>(wxALIGN_LEFT), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnUPw = m_dataViewListCtrlPw->AppendTextColumn(wxT(" Password"), wxDATAVIEW_CELL_EDITABLE, -1, static_cast<wxAlignment>(wxALIGN_LEFT), wxDATAVIEW_COL_RESIZABLE); bSizerSetup->Add(m_dataViewListCtrlPw, 1, wxEXPAND|wxALL, 5); m_textCtrlUPassword = new wxTextCtrl(m_panelSetup, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD|wxTE_PROCESS_ENTER); bSizerSetup->Add(m_textCtrlUPassword, 0, wxALL, 5); m_buttonPw = new wxButton(m_panelSetup, wxID_ANY, wxT("保存"), wxDefaultPosition, wxDefaultSize, 0); bSizerSetup->Add(m_buttonPw, 0, wxALL, 5); m_panelSetup->SetSizer(bSizerSetup); m_panelSetup->Layout(); bSizerSetup->Fit(m_panelSetup); m_notebook->AddPage(m_panelSetup, wxT("設定"), true); gbSizer->Add(m_notebook, wxGBPosition(0, 0), wxGBSpan(9, 1), wxEXPAND|wxALL, 5); m_notebook->SetSelection(0); m_searchCtrl = new wxSearchCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); m_searchCtrl->ShowSearchButton(true); m_searchCtrl->ShowCancelButton(false); m_searchCtrl->SetMaxLength(10); gbSizer->Add(m_searchCtrl, wxGBPosition(0, 1), wxGBSpan(1, 2), wxALL, 5); m_buttonPaste = new wxButton(this, wxID_ANY, wxT("貼付検索"), wxDefaultPosition, wxSize(60, -1), 0); gbSizer->Add(m_buttonPaste, wxGBPosition(0, 3), wxGBSpan(1, 1), wxALL, 5); m_textCtrlName = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); gbSizer->Add(m_textCtrlName, wxGBPosition(1, 1), wxGBSpan(1, 2), wxALL, 5); m_textCtrlAddr = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(220, -1), 0); gbSizer->Add(m_textCtrlAddr, wxGBPosition(2, 1), wxGBSpan(1, 3), wxALL, 5); m_dataViewListCtrlAny = new wxDataViewListCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 400), wxDV_ROW_LINES); m_dataViewListColumnAnyNo = m_dataViewListCtrlAny->AppendTextColumn(wxT("番号"), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnAny1 = m_dataViewListCtrlAny->AppendTextColumn(wxT(" 日付"), wxDATAVIEW_CELL_INERT, 90, static_cast<wxAlignment>(wxALIGN_LEFT), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnAny2 = m_dataViewListCtrlAny->AppendTextColumn(wxEmptyString, wxDATAVIEW_CELL_INERT, 90, static_cast<wxAlignment>(wxALIGN_LEFT), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnAny3 = m_dataViewListCtrlAny->AppendTextColumn(wxEmptyString, wxDATAVIEW_CELL_INERT, 90, static_cast<wxAlignment>(wxALIGN_LEFT), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnAny4 = m_dataViewListCtrlAny->AppendTextColumn(wxEmptyString, wxDATAVIEW_CELL_INERT, -1, static_cast<wxAlignment>(wxALIGN_CENTER), wxDATAVIEW_COL_RESIZABLE); m_dataViewListCtrlAny->SetAlternateRowColour(wxColour(230, 230, 255)) ; gbSizer->Add(m_dataViewListCtrlAny, wxGBPosition(3, 1), wxGBSpan(1, 3), wxALL|wxEXPAND, 5); //gbSizer->Add(0, 220, wxGBPosition(4, 1), wxGBSpan(1, 1), wxEXPAND, 5); gbSizer->Add(0, 20, wxGBPosition(4, 1), wxGBSpan(1, 1), wxEXPAND, 5); m_checkBoxMask = new wxCheckBox(this, wxID_ANY, wxT("マスク処理"), wxDefaultPosition, wxDefaultSize, 0); gbSizer->Add(m_checkBoxMask, wxGBPosition(5, 1), wxGBSpan(1, 1), wxALL, 5); m_checkBoxBoth = new wxCheckBox(this, wxID_ANY, wxT("両面処理"), wxDefaultPosition, wxDefaultSize, 0); m_checkBoxBoth->SetValue(true); gbSizer->Add(m_checkBoxBoth, wxGBPosition(5, 2), wxGBSpan(1, 1), wxALL, 5); m_buttonPrint = new wxButton(this, wxID_ANY, wxT("印刷"), wxDefaultPosition, wxDefaultSize, 0); gbSizer->Add(m_buttonPrint, wxGBPosition(6, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_spinCtrl = new wxSpinCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, 80, 120, 100); gbSizer->Add(m_spinCtrl, wxGBPosition(6, 2), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_gauge = new wxGauge(this, wxID_ANY, 100, wxDefaultPosition, wxSize(200, -1), wxGA_HORIZONTAL); m_gauge->SetValue(0); gbSizer->Add(m_gauge, wxGBPosition(7, 1), wxGBSpan(1, 2), wxALL, 5); m_textCtrlPasswd = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD|wxTE_PROCESS_ENTER); m_textCtrlPasswd->SetMaxLength(16); gbSizer->Add(m_textCtrlPasswd, wxGBPosition(8, 1), wxGBSpan(1, 2), wxALL|wxALIGN_BOTTOM, 5); this->SetSizer(gbSizer); this->Layout(); this->Centre(wxBOTH); } void SearchFrame::InitializeControlsValue() { wxString conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("searcher.conf"); wxFileConfig* conf = new wxFileConfig(wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE); wxString buf; conf->SetPath(wxT("/Server")); conf->Read(wxT("addr"), &m_addr); conf->Read(wxT("port"), &m_port); conf->SetPath(wxT("/BatchPrint")); conf->Read(wxT("file"), &buf); m_filePicker->SetPath(buf); conf->Read(wxT("zoom"), &buf); m_spinCtrl->SetValue(buf); conf->SetPath(wxT("/Mask")); conf->Read(wxT("mask1"), &buf); m_mask1 = Geo2Rect(buf); conf->Read(wxT("mask2"), &buf); m_mask2 = Geo2Rect(buf); conf->Read(wxT("mask3"), &buf); m_mask3 = Geo2Rect(buf); conf->Read(wxT("mask4"), &buf); m_mask4 = Geo2Rect(buf); conf->SetPath(wxT("/Misc")); conf->Read(wxT("workdir"), &m_workdir); conf->Read(wxT("uphhscsv"), &m_hhscsv); delete conf; /* wxFont font(12, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD); m_searchCtrl->SetFont(font); */ 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); m_staticBitmap4 = new MyStaticBitmap(m_scrolledWindow4, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); m_staticBitmap5 = new MyStaticBitmap(m_scrolledWindow5, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0, wxEmptyString); m_staticBitmap1->SetParentWidows(this, m_notebook); m_staticBitmap2->SetParentWidows(this, m_notebook); m_staticBitmap3->SetParentWidows(this, m_notebook); m_staticBitmap4->SetParentWidows(this, m_notebook); m_staticBitmap5->SetParentWidows(this, m_notebook); m_filePickerHhsDB->SetPath(m_hhscsv); wxString url = wxT("/ht/"); wxString date = HttpGetText(m_addr, m_port, url); m_textCtrlLastHhsDB->SetValue(date); url = wxT("/dt/"); wxString latest = HttpGetText(m_addr, m_port, url); m_textCtrlLastIndex->SetValue(latest); m_searchmode = 0; m_textCtrlPasswd->SetFocus(); } void SearchFrame::SetHhsInfo(wxString h) { wxArrayString hinfo = wxSplit(h, ':', '\\'); m_textCtrlName->SetValue(hinfo[0]); m_textCtrlAddr->SetValue(hinfo[1]); wxArrayString ccn = wxSplit(hinfo[2], '#', '\\'); for (int i = 0; i < ccn.GetCount(); i++) { ccn[i] = ccn[i].Left(4) + wxT("-") + ccn[i].Mid(4, 2) + wxT("-") + ccn[i].Right(2); } m_dataViewListCtrlAny->DeleteAllItems(); wxVector<wxVariant> data; for (int i = 0; i < ccn.GetCount(); i++) { data.push_back(wxVariant(wxString::Format(wxT("%02d"), i + 1))); data.push_back(wxVariant(ccn[i])); data.push_back(wxVariant(wxEmptyString)); data.push_back(wxVariant(wxEmptyString)); data.push_back(wxVariant(wxEmptyString)); m_dataViewListCtrlAny->AppendItem(data); data.clear(); } if (ccn.GetCount() > 0) m_dataViewListCtrlAny->SelectRow(0); } void SearchFrame::SetListAnyHeader(int mode) { m_textCtrlName->Clear(); m_textCtrlAddr->Clear(); m_dataViewListColumnAny1->SetTitle(wxEmptyString); m_dataViewListColumnAny2->SetTitle(wxEmptyString); m_dataViewListColumnAny3->SetTitle(wxEmptyString); if (mode == 0) { // hno m_dataViewListColumnAny1->SetTitle(wxT(" 日付")); } if (mode == 1) { // history m_dataViewListColumnAny1->SetTitle(wxT("被保番")); m_dataViewListColumnAny2->SetTitle(wxT(" 氏名")); } if (mode == 2) { // kana m_dataViewListColumnAny1->SetTitle(wxT("被保番")); m_dataViewListColumnAny2->SetTitle(wxT(" 氏名")); m_dataViewListColumnAny3->SetTitle(wxT(" 住所")); } m_searchmode = mode; } void SearchFrame::SearchByHno(wxString hno) { wxString url = wxT("/h/") + hno; wxString h = HttpGetText(m_addr, m_port, url); // Get /h/0800012345 -> name:addr:ymd1#ymd2#... if (h.IsEmpty()) { wxMessageBox(wxT("no data.")); return; } else { SetHhsInfo(h); SetImages(); } m_notebook->SetSelection(0); } void SearchFrame::SetImages() { if (m_dataViewListCtrlAny->GetSelectedRow() == wxNOT_FOUND) return; int r = m_dataViewListCtrlAny->GetSelectedRow(); wxString date = m_dataViewListCtrlAny->GetTextValue(r, 1); date.Replace(wxT("-"), wxEmptyString, true); // Get /i/20200110/0800012345.tgz wxString url = wxT("/i/") + date + wxT("/") + m_searchCtrl->GetValue() + wxT(".tgz"); HttpGetTgzFile(m_addr, m_port, url, m_workdir); LoadBookImages(); } void SearchFrame::LoadBookImage(MyStaticBitmap& mysb, wxString file) { mysb.SetBitmap(wxNullBitmap); mysb.zoom = 0; mysb.ParentWinScroll(0, 0); if (!wxFileExists(file)) file = wxT("image/testpattern.tif"); wxBitmap bmp(file, wxBITMAP_TYPE_TIFF); int width = bmp.GetWidth(); int height = bmp.GetHeight(); wxImage img = bmp.ConvertToImage(); int ww, wh; mysb.ParentWinGetSize(&ww, &wh); float w = ww - 30; float h = w * height / width; mysb.SetBitmap(wxBitmap(img.Scale(w, h, wxIMAGE_QUALITY_HIGH))); mysb.ParentWinSetScrollbars(10, 10, (int)w / 10, (int)h / 10); } void SearchFrame::LoadBookImages() { LoadBookImage(*m_staticBitmap1, m_workdir + wxFILE_SEP_PATH + wxT("1")); LoadBookImage(*m_staticBitmap2, m_workdir + wxFILE_SEP_PATH + wxT("2")); LoadBookImage(*m_staticBitmap3, m_workdir + wxFILE_SEP_PATH + wxT("3")); LoadBookImage(*m_staticBitmap4, m_workdir + wxFILE_SEP_PATH + wxT("4")); LoadBookImage(*m_staticBitmap5, m_workdir + wxFILE_SEP_PATH + wxT("5")); } void SearchFrame::ReadCSV() { m_dataViewListCtrlBatch->DeleteAllItems(); wxString file = m_filePicker->GetPath(); wxTextFile input(file); if (!input.Exists()) { wxMessageBox(wxT("Don't exist file")); return; } wxCSConv cust(wxT("cp932")); input.Open(cust); wxArrayString hhslist, iklist; for (wxString buf = input.GetFirstLine(); !input.Eof(); buf = input.GetNextLine()) { if (buf.StartsWith(wxT("0"))) { hhslist.Add(buf.Left(10)); wxArrayString cols = wxSplit(buf, ',', '\\'); if (cols[2].IsEmpty()) { iklist.Add(wxEmptyString); } else { iklist.Add(wxT("1")); } } } input.Close(); wxString url = wxT("/r/") + wxJoin(hhslist, ':', '\\'); wxString lists = HttpGetText(m_addr, m_port, url); wxArrayString list = wxSplit(lists, ':', '\\'); wxVector<wxVariant> data; for (int i = 0; i < list.GetCount(); i++) { wxArrayString hinfo = wxSplit(list[i], ',', '\\'); data.push_back(wxVariant(wxString::Format(wxT("%03d"), i + 1))); data.push_back(wxVariant(hinfo[0])); data.push_back(wxVariant(hinfo[1])); if (hinfo[2] != wxEmptyString) { hinfo[2] = hinfo[2].Left(4) + wxT("-") + hinfo[2].Mid(4,2) + wxT("-") + hinfo[2].Right(2); } data.push_back(wxVariant(hinfo[2])); if (iklist[i].IsEmpty()) { data.push_back(wxVariant(false)); } else { data.push_back(wxVariant(true)); } data.push_back(wxVariant(1)); // status data.push_back(wxVariant(wxEmptyString)); // dummy m_dataViewListCtrlBatch->AppendItem(data); data.clear(); } } void SearchFrame::MaskImage() { wxString file = m_workdir + wxFILE_SEP_PATH + wxT("1"); wxImage imgfile(file, wxBITMAP_TYPE_TIFF); // here version check int mver = 1; int black = 0; int th = 38; unsigned char r, g, b; for (int x = 2450, y = 1600; y < 1850; y++) { r = imgfile.GetRed(x, y); g = imgfile.GetGreen(x, y); b = imgfile.GetBlue(x, y); if ((int)r < th && (int)g < th && (int)b < th) black++; } if (black > 25) mver = 2; imgfile.SetRGB(m_mask1, 255, 255, 255); imgfile.SetRGB(m_mask2, 255, 255, 255); imgfile.SetRGB(m_mask3, 255, 255, 255); if (mver == 2) imgfile.SetRGB(m_mask4, 255, 255, 255); imgfile.SaveFile(file, wxBITMAP_TYPE_TIFF); } void SearchFrame::LoadPasswd(bool show) { m_dataViewListCtrlPw->DeleteAllItems(); wxString url = wxT("/pw/"); wxString buf = HttpGetText(m_addr, m_port, url); wxArrayString idpw = wxSplit(buf, ':', '\\'); wxVector<wxVariant> data; for (int r = 0; r < idpw.GetCount() / 3; r++) { int i = r * 3; wxArrayString x = wxSplit(idpw[i], '/', '\\'); data.push_back(wxVariant(x[1])); data.push_back(wxVariant(idpw[i + 1])); data.push_back(wxVariant(x[0])); //if (!show) idpw[i + 2] = wxT("********"); //data.push_back(wxVariant(idpw[i + 2])); wxString pw = XoR(idpw[i + 2], PWXORN); pw.Replace(PWPREFIX, wxEmptyString, false); data.push_back(wxVariant(pw)); m_dataViewListCtrlPw->AppendItem(data); data.clear(); } } void SearchFrame::SavePasswd() { } void SearchFrame::RemoveTemp() { for (int p = 0; p < 5; p++) { wxString file = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("%d"), p + 1); if (wxFileExists(file)) wxRemoveFile(file); } } void SearchFrame::SetVersionInfo() { this->SetTitle(wxT("Searcher - v1.1.1")); m_textCtrlVersion->AppendText(wxT("1.1.1 : bug fix (2021-06-15)\n")); m_textCtrlVersion->AppendText(wxT("1.1.0 : adapt to new marksheet (2021-05-11)\n")); m_textCtrlVersion->AppendText(wxT("1.0.4 : small fix (2020-12-24)\n")); m_textCtrlVersion->AppendText(wxT("1.0.3 : new feature - paste search (2020-06-26)\n")); m_textCtrlVersion->AppendText(wxT("1.0.2 : new feature - dump index (2020-06-24)\n")); m_textCtrlVersion->AppendText(wxT("1.0.1 : bug fix (2020-06-22)\n")); m_textCtrlVersion->AppendText(wxT("1.0.0 : release out (2020-05-01)\n")); }