Mercurial > mercurial > hgweb_kaigo.hg.cgi
diff horori/mover/src/mover.cpp @ 0:aaaa401818a1 draft
first commit.
author | pyon <pyon@macmini> |
---|---|
date | Mon, 24 May 2021 21:32:58 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/horori/mover/src/mover.cpp Mon May 24 21:32:58 2021 +0900 @@ -0,0 +1,695 @@ +// 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("コピー終了")); +} +