Mercurial > mercurial > hgweb_golang.cgi
view src/kaigo/horori/mover/src/mover.cpp @ 53:8df74a781c8c
mover: small improve.
author | pyon@macmini |
---|---|
date | Fri, 15 May 2020 21:28:41 +0900 |
parents | 8384ca56f1b4 |
children |
line wrap: on
line source
// Filename : mover.cpp // Last Change: 2020-05-14 木 17:14:42. // #include <wx/dir.h> #include <wx/textfile.h> #include <wx/splash.h> #include <wx/msgdlg.h> #include <wx/fileconf.h> #include "mover.h" #include "../../searcher/include/net.h" MoveFrame::MoveFrame(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxFrame(parent, id, title, pos, size, style) { CreateControls(); InitializeControlsValue(); LoadDB(); this->Connect(wxEVT_CHAR, wxKeyEventHandler(MoveFrame::OnKey)); m_buttonAuto->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MoveFrame::OnAuto), NULL, this); m_dataViewListCtrl->Connect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(MoveFrame::OnSelect), NULL, this); m_dataViewListCtrl->Connect(wxEVT_CHAR, wxKeyEventHandler(MoveFrame::OnListChar), NULL, this); m_textCtrlName->Connect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(MoveFrame::OnName), NULL, this); m_textCtrlHno->Connect(wxEVT_CHAR, wxKeyEventHandler(MoveFrame::OnHnoChar), NULL, this); m_textCtrlHno->Connect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(MoveFrame::OnHno), NULL, this); m_checkBox->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(MoveFrame::OnCheck), NULL, this); m_listViewThumb->Connect(wxEVT_COMMAND_LIST_ITEM_DESELECTED, wxListEventHandler(MoveFrame::OnThumbDeselected), NULL, this); m_listViewThumb->Connect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(MoveFrame::OnThumbSelected), NULL, this); m_listViewThumb->Connect(wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler(MoveFrame::OnThumbDClick), NULL, this); m_buttonSave->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MoveFrame::OnSave), NULL, this); } MoveFrame::~MoveFrame() { this->Disconnect(wxEVT_CHAR, wxKeyEventHandler(MoveFrame::OnKey)); m_buttonAuto->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MoveFrame::OnAuto), NULL, this); m_dataViewListCtrl->Disconnect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(MoveFrame::OnSelect), NULL, this); m_dataViewListCtrl->Disconnect(wxEVT_CHAR, wxKeyEventHandler(MoveFrame::OnListChar), NULL, this); m_textCtrlName->Disconnect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(MoveFrame::OnName), NULL, this); m_textCtrlHno->Disconnect(wxEVT_CHAR, wxKeyEventHandler(MoveFrame::OnHnoChar), NULL, this); m_textCtrlHno->Disconnect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(MoveFrame::OnHno), NULL, this); m_checkBox->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(MoveFrame::OnCheck), NULL, this); m_listViewThumb->Disconnect(wxEVT_COMMAND_LIST_ITEM_DESELECTED, wxListEventHandler(MoveFrame::OnThumbDeselected), NULL, this); m_listViewThumb->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(MoveFrame::OnThumbSelected), NULL, this); m_listViewThumb->Disconnect(wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler(MoveFrame::OnThumbDClick), NULL, this); m_buttonSave->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MoveFrame::OnSave), NULL, this); } /* Functions */ void MoveFrame::CreateControls() { this->SetIcon(wxIcon(wxT("sample"))); this->SetSizeHints(wxDefaultSize, wxDefaultSize); this->SetBackgroundColour(wxColour(210, 210, 255)); wxGridBagSizer* gbSizer = new wxGridBagSizer(0, 0); gbSizer->SetFlexibleDirection(wxBOTH); gbSizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); m_dirPicker = new wxDirPickerCtrl(this, wxID_ANY, wxEmptyString, wxT("Select a folder"), wxDefaultPosition, wxSize(320, -1), wxDIRP_DIR_MUST_EXIST|wxDIRP_SMALL|wxDIRP_USE_TEXTCTRL); gbSizer->Add(m_dirPicker, wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL, 5); m_buttonAuto = new wxButton(this, wxID_ANY, wxT("一括判定"), wxDefaultPosition, wxDefaultSize, 0); m_buttonAuto->SetDefault(); gbSizer->Add(m_buttonAuto, wxGBPosition(0, 1), wxGBSpan(1, 1), wxALL, 5); m_spinCtrlUD = new wxSpinCtrl(this, wxID_ANY, wxT("0"), wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, -50, 50, 0); gbSizer->Add(m_spinCtrlUD, wxGBPosition(0, 2), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5); m_spinCtrlLR = new wxSpinCtrl(this, wxID_ANY, wxT("0"), wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, -50, 50, 0); gbSizer->Add(m_spinCtrlLR, wxGBPosition(0, 3), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_checkBox = new wxCheckBox(this, wxID_ANY, wxT("申請書モード"), wxDefaultPosition, wxDefaultSize, 0); gbSizer->Add(m_checkBox, wxGBPosition(0, 5), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_dataViewListCtrl = new wxDataViewListCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(320, 1200), wxDV_SINGLE|wxDV_ROW_LINES); m_dataViewListColumnNo = m_dataViewListCtrl->AppendTextColumn(wxT("No"), wxDATAVIEW_CELL_INERT, 30, static_cast<wxAlignment>(wxALIGN_CENTER), 0); m_dataViewListColumnHno = m_dataViewListCtrl->AppendTextColumn(wxT("被保険者番号"), wxDATAVIEW_CELL_INERT, 100, static_cast<wxAlignment>(wxALIGN_CENTER), 0); m_dataViewListColumnName = m_dataViewListCtrl->AppendTextColumn(wxT(" 氏名"), wxDATAVIEW_CELL_INERT, 150, static_cast<wxAlignment>(wxALIGN_LEFT), 0); //m_dataViewListColumnChecked = m_dataViewListCtrl->AppendToggleColumn(wxT("確認"), wxDATAVIEW_CELL_EDITABLE, -1, static_cast<wxAlignment>(wxALIGN_CENTER), 0); m_dataViewListCtrl->SetAlternateRowColour(wxColour(230, 230, 255)) ; gbSizer->Add(m_dataViewListCtrl, wxGBPosition(1, 0), wxGBSpan(7, 1), wxALL|wxEXPAND, 5); m_bitmapName = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(HNAME_WW, HNAME_WH), 0); gbSizer->Add(m_bitmapName, wxGBPosition(1, 1), wxGBSpan(1, 4), wxALL, 5); wxFont font(24, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD); m_textCtrlName = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(580, -1), wxTE_PROCESS_ENTER); m_textCtrlName->SetFont(font); gbSizer->Add(m_textCtrlName, wxGBPosition(1, 5), wxGBSpan(1, 4), wxALL|wxALIGN_BOTTOM, 5); m_bitmapHno = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(HNO_WW, HNO_WH), 0); gbSizer->Add(m_bitmapHno, wxGBPosition(2, 1), wxGBSpan(1, 4), wxALL, 5); m_textCtrlHno = new wxTextCtrl(this, wxID_ANY, wxT("0123456789"), wxDefaultPosition, wxSize(200, -1), wxTE_PROCESS_ENTER); m_textCtrlHno->SetMaxLength(10); m_textCtrlHno->SetFont(font); gbSizer->Add(m_textCtrlHno, wxGBPosition(2, 5), wxGBSpan(1, 1), wxALL|wxALIGN_BOTTOM, 5); m_staticTextHnoMsg = new wxStaticText(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); m_staticTextHnoMsg->SetForegroundColour(wxColour(255, 0, 0)); m_staticTextHnoMsg->SetFont(font); gbSizer->Add(m_staticTextHnoMsg, wxGBPosition(2, 6), wxGBSpan(1, 1), wxALL|wxALIGN_BOTTOM, 5); m_bitmapTk = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(RIGHT_W, RIGHT_H1), 0); gbSizer->Add(m_bitmapTk, wxGBPosition(3, 1), wxGBSpan(1, 6), wxALL, 5); m_bitmapIk = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(RIGHT_W, RIGHT_H2), 0); gbSizer->Add(m_bitmapIk, wxGBPosition(4, 1), wxGBSpan(1, 6), wxALL, 5); m_listViewThumb = new wxListView(this, wxID_ANY, wxDefaultPosition, wxSize(RIGHT_W, THUMB_H * 2.5), wxLC_ICON); m_listViewThumb->SetBackgroundColour(wxColour(230, 230, 255)); gbSizer->Add(m_listViewThumb, wxGBPosition(5, 1), wxGBSpan(1, 6), wxALL, 5); m_staticTextDate = new wxStaticText(this, wxID_ANY, wxT("開催日"), wxDefaultPosition, wxDefaultSize, 0); gbSizer->Add(m_staticTextDate, wxGBPosition(6, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5); m_datePicker = new wxDatePickerCtrl(this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxDP_DEFAULT|wxDP_DROPDOWN|wxDP_SHOWCENTURY); gbSizer->Add(m_datePicker, wxGBPosition(6, 2), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_staticTextCcn = new wxStaticText(this, wxID_ANY, wxT("合議体"), wxDefaultPosition, wxDefaultSize, 0); gbSizer->Add(m_staticTextCcn, wxGBPosition(6, 3), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5); wxArrayString m_choiceCcnChoices; m_choiceCcn = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceCcnChoices, 0); gbSizer->Add(m_choiceCcn, wxGBPosition(6, 4), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_buttonSave = new wxButton(this, wxID_ANY, wxT("保存"), wxDefaultPosition, wxDefaultSize, 0); gbSizer->Add(m_buttonSave, wxGBPosition(6, 5), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_textCtrlMsg = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(200, -1), wxTE_READONLY|wxTE_RIGHT); m_textCtrlMsg->SetBackgroundColour(wxColour(230, 230, 255)); gbSizer->Add(m_textCtrlMsg, wxGBPosition(6, 6), wxGBSpan(1, 1), wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5); this->SetSizer(gbSizer); this->Layout(); this->Centre(wxBOTH); m_buttonAuto->SetFocus(); } void MoveFrame::InitializeControlsValue() { wxString conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("mover.conf"); wxFileConfig* conf = new wxFileConfig(wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE); wxString work; conf->SetPath(wxT("/Dirs")); conf->Read(wxT("work"), &work); conf->SetPath(wxT("/Server")); conf->Read(wxT("addr"), &m_addr); conf->Read(wxT("port"), &m_port); delete conf; m_dirPicker->SetPath(work); wxDateTime today = wxDateTime::Today(); wxDateTime sun = today.SetToNextWeekDay(wxDateTime::WeekDay::Sun); wxDateTime thu = sun.SetToNextWeekDay(wxDateTime::WeekDay::Thu); m_datePicker->SetValue(thu); LoadDefaultImages(); } void MoveFrame::LoadDefaultImages() { wxBitmap bmp; bmp.LoadFile(wxT("image/mover.png"), wxBITMAP_TYPE_PNG); m_bitmapName->SetBitmap(bmp); bmp.LoadFile(wxT("image/0123456789.png"), wxBITMAP_TYPE_PNG); m_bitmapHno->SetBitmap(bmp); bmp.LoadFile(wxT("image/testpattern.png"), wxBITMAP_TYPE_PNG); m_bitmapTk->SetBitmap(bmp); bmp.LoadFile(wxT("image/testpattern2.png"), wxBITMAP_TYPE_PNG); m_bitmapIk->SetBitmap(bmp); } void MoveFrame::LoadDB() { wxString conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("mover.conf"); wxFileConfig* conf = new wxFileConfig(wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE); wxString buf; conf->SetPath(wxT("/Ccn")); conf->Read(wxT("ccn"), &buf); wxArrayString ccn = wxSplit(buf, ':'); for (int i = 0; i < ccn.GetCount(); i++) { m_choiceCcn->Append(ccn[i]); } conf->Read(wxT("sss"), &buf); m_sss = wxSplit(buf, ':'); delete conf; wxString hhsdb = wxT("hhsdb.csv"); wxString url = wxT("/ha/"); if (!HttpGetFile(m_addr, m_port, url, hhsdb)) return; wxTextFile hhsfile; hhsfile.Open(hhsdb); for (int i = 0; i < hhsfile.GetLineCount(); i++) { wxArrayString buf = wxSplit(hhsfile.GetLine(i), ',', '\\'); m_hhash[buf[0]] = wxString::Format(wxT("%s (%s)"), buf[2], buf[3]); if (m_maxhno.Cmp(buf[0]) < 0) m_maxhno = buf[0]; } hhsfile.Close(); } void MoveFrame::AutoDetect() { m_dataViewListCtrl->DeleteAllItems(); wxDir dir(m_dirPicker->GetPath()); if (!dir.IsOpened()) return; wxString dirname, fn; bool cont = dir.GetFirst(&dirname, wxEmptyString, wxDIR_DIRS); wxVector<wxVariant> data; while (cont) { data.push_back(wxVariant(dirname)); wxDir subdir(m_dirPicker->GetPath() + wxFILE_SEP_PATH + dirname); if (!subdir.IsOpened()) return; subdir.GetFirst(&fn, wxT("*.tif"), wxDIR_FILES); fn = m_dirPicker->GetPath() + wxFILE_SEP_PATH + dirname + wxFILE_SEP_PATH + fn; wxString hno = AnalizeHhsno(fn, m_spinCtrlLR->GetValue() * 5, m_spinCtrlUD->GetValue() * 5); data.push_back(wxVariant(hno)); data.push_back(wxVariant(m_hhash[hno])); //data.push_back(wxVariant(false)); m_dataViewListCtrl->AppendItem(data); data.clear(); cont = dir.GetNext(&dirname); } wxMessageBox(wxT("自動認識終了")); } void MoveFrame::SelectItem(int r) { m_dataViewListCtrl->SelectRow(r); m_offx = 0; m_offy = 0; m_listViewThumb->DeleteAllItems(); wxString dirno = m_dataViewListCtrl->GetTextValue(r, 0); wxString hno = m_dataViewListCtrl->GetTextValue(r, 1); wxString hname = m_dataViewListCtrl->GetTextValue(r, 2); wxString img_path = m_dirPicker->GetPath() + wxFILE_SEP_PATH + dirno; wxDir dir(img_path); if (!dir.IsOpened()) return; wxString fn; bool cont = dir.GetFirst(&fn, wxT("*.tif"), wxDIR_FILES); m_curms = img_path + wxFILE_SEP_PATH + fn; wxImage image(m_curms, wxBITMAP_TYPE_TIFF); wxImage img_buf; wxBitmap bmp_buf; img_buf = image.GetSubImage(wxRect(HNAME_X, HNAME_Y, HNAME_W, HNAME_H)); bmp_buf = img_buf.Scale(HNAME_WW, HNAME_WH, wxIMAGE_QUALITY_HIGH); m_bitmapName->SetBitmap(bmp_buf); img_buf = image.GetSubImage(wxRect(HNO_X, HNO_Y, HNO_W, HNO_H)); bmp_buf = img_buf.Scale(HNO_WW, HNO_WH, wxIMAGE_QUALITY_HIGH); m_bitmapHno->SetBitmap(bmp_buf); m_textCtrlName->SetValue(hname); m_textCtrlHno->SetValue(hno); m_staticTextHnoMsg->SetLabel(wxEmptyString); if (hno.Cmp(m_maxhno) > 0) m_staticTextHnoMsg->SetLabel(wxString::Format(wxT("> %s !"), m_maxhno)); wxImageList* imglist = new wxImageList(THUMB_W, THUMB_H); m_listViewThumb->SetImageList(imglist, wxIMAGE_LIST_NORMAL); for (int i = 0; cont; i++) { wxString buf = img_path + wxFILE_SEP_PATH + fn; wxImage img(buf, wxBITMAP_TYPE_TIFF); bmp_buf = img.Scale(THUMB_W, THUMB_H, wxIMAGE_QUALITY_HIGH); imglist->Add(bmp_buf); m_listViewThumb->InsertItem(i, fn, i); if (i == 2) { wxImage im = img.GetSubImage(wxRect(0, 0, img.GetWidth() - 1, 300)); // 2480x300 bmp_buf = im.Scale(RIGHT_W, RIGHT_H1, wxIMAGE_QUALITY_HIGH); m_bitmapTk->SetBitmap(bmp_buf); } if (i == 3) { wxImage im = img.GetSubImage(wxRect(0, 20, img.GetWidth() - 1, 700)); // 2480x500 bmp_buf = im.Scale(RIGHT_W, RIGHT_H2, wxIMAGE_QUALITY_HIGH); m_bitmapIk->SetBitmap(bmp_buf); } cont = dir.GetNext(&fn); } } void MoveFrame::ThumbnailPaper() { wxString path = m_dirPicker->GetPath(); wxDir dir(path); if (!dir.IsOpened()) return; wxString file; bool cont = dir.GetFirst(&file, wxT("*.tif"), wxDIR_FILES); wxImageList* imglist = new wxImageList(THUMB_W / 2, THUMB_H / 2); m_listViewThumb->SetImageList(imglist, wxIMAGE_LIST_NORMAL); wxBitmap bmp; int n = 0; for (int i = 0; cont; i++) { wxImage img(path + wxFILE_SEP_PATH + file, wxBITMAP_TYPE_TIFF); bmp = img.Scale(THUMB_W / 2, THUMB_H / 2, wxIMAGE_QUALITY_HIGH); imglist->Add(bmp); m_listViewThumb->InsertItem(i, file, i); n++; cont = dir.GetNext(&file); } int m = m_listViewThumb->GetSelectedItemCount(); m_textCtrlMsg->SetValue(wxString::Format(wxT("%d / %d"), m, n)); wxMessageBox(wxString::Format(wxT("%d files found."), n)); } wxString MoveFrame::AnalizeHhsno(wxString file, int offx, int offy) { wxImage image(file, wxBITMAP_TYPE_TIFF); int sx = MS_X + offx; // start x int sy = MS_Y + offy; int bw = MS_W / 10; // block width int bh = MS_H / 10; int area = bw * bh; int black = 0; int th = 38; int x, y; unsigned char r, g, b; int max_n; float max, bk; wxString hno; for (int c = 0; c < 10; c++) { max = 0.0; max_n = -1; for(int n = 0; n < 10; n++) { for (x = sx + bw * c; x < sx + bw * (c + 1); x++) { for (y = sy + bh * n; y < sy + bh * (n + 1); y++) { r = image.GetRed(x, y); g = image.GetGreen(x, y); b = image.GetBlue(x, y); if ((int)r < th && (int)g < th && (int)b < th) black++; } } bk = (float)black / area; if (max < bk) { max = bk; max_n = n; } black = 0; } hno.Append(wxString::Format(wxT("%d"), max_n)); } return hno; } void MoveFrame::MoveLookWin(int x, int y) { m_offx += x * 5; m_offy += y * 5; wxImage image(m_curms, wxBITMAP_TYPE_TIFF); wxImage img_buf; wxBitmap bmp_buf; img_buf = image.GetSubImage(wxRect(HNAME_X + m_offx, HNAME_Y + m_offy, HNAME_W, HNAME_H)); bmp_buf = img_buf.Scale(HNAME_WW, HNAME_WH, wxIMAGE_QUALITY_HIGH); m_bitmapName->SetBitmap(bmp_buf); img_buf = image.GetSubImage(wxRect(HNO_X + m_offx, HNO_Y + m_offy, HNO_W, HNO_H)); bmp_buf = img_buf.Scale(HNO_WW, HNO_WH, wxIMAGE_QUALITY_HIGH); m_bitmapHno->SetBitmap(bmp_buf); wxString hno = AnalizeHhsno(m_curms, m_offx, m_offy); m_textCtrlName->SetValue(m_hhash[hno]); m_textCtrlHno->SetValue(hno); m_staticTextHnoMsg->SetLabel(wxEmptyString); if (hno.Cmp(m_maxhno) > 0) m_staticTextHnoMsg->SetLabel(wxString::Format(wxT("> %s !"), m_maxhno)); } /* Event Handlers */ void MoveFrame::OnKey(wxKeyEvent& event) { int mod = event.GetModifiers(); int key = event.GetKeyCode(); switch (key) { case WXK_F5: { wxMessageBox("aaa"); break; } } } void MoveFrame::OnAuto(wxCommandEvent& WXUNUSED(event)) { if (m_checkBox->IsChecked()) { ThumbnailPaper(); return; } m_offx = 0; m_offy = 0; AutoDetect(); SelectItem(0); m_dataViewListCtrl->SetFocus(); } void MoveFrame::OnSelect(wxDataViewEvent& WXUNUSED(event)) { int r = m_dataViewListCtrl->GetSelectedRow(); SelectItem(r); } void MoveFrame::OnListChar(wxKeyEvent& event) { int mod = event.GetModifiers(); int key = event.GetKeyCode(); switch (key) { case WXK_UP: { if (mod == wxMOD_CONTROL) { MoveLookWin(0, 1); return; } break; } case WXK_DOWN: { if (mod == wxMOD_CONTROL) { MoveLookWin(0, -1); return; } break; } case WXK_RIGHT: { if (mod == wxMOD_CONTROL) { MoveLookWin(-1, 0); return; } break; } case WXK_LEFT: { if (mod == wxMOD_CONTROL) { MoveLookWin(1, 0); return; } break; } case WXK_RETURN: { int r = m_dataViewListCtrl->GetSelectedRow(); m_dataViewListCtrl->SetTextValue(m_textCtrlHno->GetValue(), r, 1); m_dataViewListCtrl->SetTextValue(m_textCtrlName->GetValue(), r, 2); //if (r != m_dataViewListCtrl->GetItemCount() - 1) SelectItem(r + 1); return; } } event.Skip(); } void MoveFrame::OnName(wxCommandEvent& WXUNUSED(event)) { int r = m_dataViewListCtrl->GetSelectedRow(); m_dataViewListCtrl->SetTextValue(m_textCtrlHno->GetValue(), r, 1); m_dataViewListCtrl->SetTextValue(m_textCtrlName->GetValue(), r, 2); //if (r != m_dataViewListCtrl->GetItemCount() - 1) SelectItem(r + 1); m_dataViewListCtrl->SetFocus(); } void MoveFrame::OnHnoChar(wxKeyEvent& event) { int mod = event.GetModifiers(); int key = event.GetKeyCode(); if (key == 45) { // num-key '-' as BackSpace wxString t = m_textCtrlHno->GetStringSelection(); if (t.IsEmpty()) { long p = m_textCtrlHno->GetInsertionPoint(); if (p > 0) m_textCtrlHno->Remove(p - 1, p); } else { m_textCtrlHno->Cut(); } return; } switch (key) { case WXK_UP: { if (mod == wxMOD_CONTROL) { MoveLookWin(0, 1); return; } break; } case WXK_DOWN: { if (mod == wxMOD_CONTROL) { MoveLookWin(0, -1); return; } break; } case WXK_RIGHT: { if (mod == wxMOD_CONTROL) { MoveLookWin(-1, 0); return; } break; } case WXK_LEFT: { if (mod == wxMOD_CONTROL) { MoveLookWin(1, 0); return; } break; } } event.Skip(); } void MoveFrame::OnHno(wxCommandEvent& WXUNUSED(event)) { m_textCtrlHno->SelectAll(); if (m_textCtrlHno->GetLineLength(0) != 10) { wxMessageBox(wxT("Bat input")); return; } wxString hno = m_textCtrlHno->GetValue(); m_textCtrlName->SetValue(m_hhash[hno]); int r = m_dataViewListCtrl->GetSelectedRow(); if (r == wxNOT_FOUND) { return; } m_dataViewListCtrl->SetTextValue(hno, r, 1); m_dataViewListCtrl->SetTextValue(m_hhash[hno], r, 2); //if (r != m_dataViewListCtrl->GetItemCount() - 1) SelectItem(r + 1); m_dataViewListCtrl->SetFocus(); } void MoveFrame::OnCheck(wxCommandEvent& WXUNUSED(event)) { if (m_checkBox->IsChecked()) { m_buttonAuto->SetLabel(wxT("表示")); } else { m_buttonAuto->SetLabel(wxT("一括判定")); } m_dataViewListCtrl->DeleteAllItems(); m_textCtrlName->SetValue(wxEmptyString); m_textCtrlHno->SetValue(wxT("0123456789")); m_listViewThumb->DeleteAllItems(); LoadDefaultImages(); } void MoveFrame::OnThumbDeselected(wxListEvent& WXUNUSED(event)) { int m = m_listViewThumb->GetItemCount(); int n = m_listViewThumb->GetSelectedItemCount(); m_textCtrlMsg->SetValue(wxString::Format(wxT("%d / %d"), n, m)); } void MoveFrame::OnThumbSelected(wxListEvent& WXUNUSED(event)) { int m = m_listViewThumb->GetItemCount(); int n = m_listViewThumb->GetSelectedItemCount(); m_textCtrlMsg->SetValue(wxString::Format(wxT("%d / %d"), n, m)); } void MoveFrame::OnThumbDClick(wxListEvent& WXUNUSED(event)) { wxString file = m_dirPicker->GetPath() + wxFILE_SEP_PATH; if (!m_checkBox->IsChecked()) { int r = m_dataViewListCtrl->GetSelectedRow(); file += m_dataViewListCtrl->GetTextValue(r, 0) + wxFILE_SEP_PATH; } for (int i = 0; i < m_listViewThumb->GetItemCount(); i++) { if (m_listViewThumb->IsSelected(i)) file += m_listViewThumb->GetItemText(i, 0); } wxImage img(file, wxBITMAP_TYPE_TIFF); wxBitmap bmp = img.Scale(THUMB_W * 6, THUMB_H * 6, wxIMAGE_QUALITY_HIGH); wxSplashScreen* splash = new wxSplashScreen(bmp, wxSPLASH_CENTRE_ON_SCREEN|wxSPLASH_TIMEOUT, 10000, NULL, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_RAISED|wxSTAY_ON_TOP); wxYield(); } void MoveFrame::OnSave(wxCommandEvent& WXUNUSED(event)) { if (m_choiceCcn->GetCurrentSelection() == wxNOT_FOUND) { wxMessageBox(wxT("Bad choice.")); return; } 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)) wxFileName::Mkdir(ymddir, wxS_DIR_DEFAULT, 0); int n = m_choiceCcn->GetCurrentSelection(); wxString ccndir = ymddir + wxFILE_SEP_PATH + m_choiceCcn->GetString(n); if (!wxDirExists(ccndir)) wxFileName::Mkdir(ccndir, wxS_DIR_DEFAULT, 0); wxString sssdir = ymddir + wxFILE_SEP_PATH + m_choiceCcn->GetString(n) + wxFILE_SEP_PATH + m_sss[n]; if (!wxDirExists(sssdir)) wxFileName::Mkdir(sssdir, wxS_DIR_DEFAULT, 0); if (m_checkBox->IsChecked()) { wxString srcdir = m_dirPicker->GetPath(); wxString dstdir = sssdir; wxDir dir(srcdir); if (!dir.IsOpened()) return; if (m_listViewThumb->GetSelectedItemCount() == 0) { wxMessageBox(wxT("no item selected.")); return; } for (int i = 0; i < m_listViewThumb->GetItemCount(); i++) { if (m_listViewThumb->IsSelected(i)) { wxString file = m_listViewThumb->GetItemText(i, 0); wxString src = srcdir + wxFILE_SEP_PATH + file; wxString dst = dstdir + wxFILE_SEP_PATH + file; wxCopyFile(src, dst, true); } } } else { for (int r = 0; r < m_dataViewListCtrl->GetItemCount(); r++) { wxString srcdir = m_dirPicker->GetPath() + wxFILE_SEP_PATH + m_dataViewListCtrl->GetTextValue(r, 0); wxString dstdir = ccndir + wxFILE_SEP_PATH + m_dataViewListCtrl->GetTextValue(r, 1); wxDir dir(srcdir); if (!dir.IsOpened()) return; if (!wxDirExists(dstdir)) wxFileName::Mkdir(dstdir, wxS_DIR_DEFAULT, 0); wxString file; bool cont = dir.GetFirst(&file, wxT("*.tif"), wxDIR_FILES); while (cont) { wxString src = srcdir + wxFILE_SEP_PATH + file; wxString dst = dstdir + wxFILE_SEP_PATH + file; wxCopyFile(src, dst, true); cont = dir.GetNext(&file); } } wxString listfn = ymd + wxT("_") + m_choiceCcn->GetString(n) + wxT(".csv"); if (wxFileExists(listfn)) wxRemoveFile(listfn); wxTextFile listfile; listfile.Create(listfn); for(int r = 0; r < m_dataViewListCtrl->GetItemCount(); r++) { wxString s = m_dataViewListCtrl->GetTextValue(r, 0); s += wxT(",") + m_dataViewListCtrl->GetTextValue(r, 1); s += wxT(",") + m_dataViewListCtrl->GetTextValue(r, 2); listfile.AddLine(s); } listfile.Write(); listfile.Close(); } wxMessageBox(wxT("コピー終了")); }