Mercurial > mercurial > hgweb_kaigo.hg.cgi
comparison 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 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:aaaa401818a1 |
|---|---|
| 1 // Filename : mover.cpp | |
| 2 // Last Change: 2020-05-14 木 17:14:42. | |
| 3 // | |
| 4 #include <wx/dir.h> | |
| 5 #include <wx/textfile.h> | |
| 6 #include <wx/splash.h> | |
| 7 #include <wx/msgdlg.h> | |
| 8 #include <wx/fileconf.h> | |
| 9 | |
| 10 #include "mover.h" | |
| 11 #include "../../searcher/include/net.h" | |
| 12 | |
| 13 MoveFrame::MoveFrame(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) | |
| 14 : wxFrame(parent, id, title, pos, size, style) | |
| 15 { | |
| 16 CreateControls(); | |
| 17 InitializeControlsValue(); | |
| 18 LoadDB(); | |
| 19 | |
| 20 this->Connect(wxEVT_CHAR, wxKeyEventHandler(MoveFrame::OnKey)); | |
| 21 m_buttonAuto->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MoveFrame::OnAuto), NULL, this); | |
| 22 m_dataViewListCtrl->Connect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(MoveFrame::OnSelect), NULL, this); | |
| 23 m_dataViewListCtrl->Connect(wxEVT_CHAR, wxKeyEventHandler(MoveFrame::OnListChar), NULL, this); | |
| 24 m_textCtrlName->Connect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(MoveFrame::OnName), NULL, this); | |
| 25 m_textCtrlHno->Connect(wxEVT_CHAR, wxKeyEventHandler(MoveFrame::OnHnoChar), NULL, this); | |
| 26 m_textCtrlHno->Connect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(MoveFrame::OnHno), NULL, this); | |
| 27 m_checkBox->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(MoveFrame::OnCheck), NULL, this); | |
| 28 m_listViewThumb->Connect(wxEVT_COMMAND_LIST_ITEM_DESELECTED, wxListEventHandler(MoveFrame::OnThumbDeselected), NULL, this); | |
| 29 m_listViewThumb->Connect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(MoveFrame::OnThumbSelected), NULL, this); | |
| 30 m_listViewThumb->Connect(wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler(MoveFrame::OnThumbDClick), NULL, this); | |
| 31 m_buttonSave->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MoveFrame::OnSave), NULL, this); | |
| 32 } | |
| 33 | |
| 34 MoveFrame::~MoveFrame() | |
| 35 { | |
| 36 this->Disconnect(wxEVT_CHAR, wxKeyEventHandler(MoveFrame::OnKey)); | |
| 37 m_buttonAuto->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MoveFrame::OnAuto), NULL, this); | |
| 38 m_dataViewListCtrl->Disconnect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(MoveFrame::OnSelect), NULL, this); | |
| 39 m_dataViewListCtrl->Disconnect(wxEVT_CHAR, wxKeyEventHandler(MoveFrame::OnListChar), NULL, this); | |
| 40 m_textCtrlName->Disconnect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(MoveFrame::OnName), NULL, this); | |
| 41 m_textCtrlHno->Disconnect(wxEVT_CHAR, wxKeyEventHandler(MoveFrame::OnHnoChar), NULL, this); | |
| 42 m_textCtrlHno->Disconnect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(MoveFrame::OnHno), NULL, this); | |
| 43 m_checkBox->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(MoveFrame::OnCheck), NULL, this); | |
| 44 m_listViewThumb->Disconnect(wxEVT_COMMAND_LIST_ITEM_DESELECTED, wxListEventHandler(MoveFrame::OnThumbDeselected), NULL, this); | |
| 45 m_listViewThumb->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(MoveFrame::OnThumbSelected), NULL, this); | |
| 46 m_listViewThumb->Disconnect(wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler(MoveFrame::OnThumbDClick), NULL, this); | |
| 47 m_buttonSave->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MoveFrame::OnSave), NULL, this); | |
| 48 } | |
| 49 | |
| 50 /* Functions */ | |
| 51 void MoveFrame::CreateControls() | |
| 52 { | |
| 53 this->SetIcon(wxIcon(wxT("sample"))); | |
| 54 this->SetSizeHints(wxDefaultSize, wxDefaultSize); | |
| 55 this->SetBackgroundColour(wxColour(210, 210, 255)); | |
| 56 | |
| 57 wxGridBagSizer* gbSizer = new wxGridBagSizer(0, 0); | |
| 58 gbSizer->SetFlexibleDirection(wxBOTH); | |
| 59 gbSizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); | |
| 60 | |
| 61 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); | |
| 62 gbSizer->Add(m_dirPicker, wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL, 5); | |
| 63 | |
| 64 m_buttonAuto = new wxButton(this, wxID_ANY, wxT("一括判定"), wxDefaultPosition, wxDefaultSize, 0); | |
| 65 m_buttonAuto->SetDefault(); | |
| 66 gbSizer->Add(m_buttonAuto, wxGBPosition(0, 1), wxGBSpan(1, 1), wxALL, 5); | |
| 67 | |
| 68 m_spinCtrlUD = new wxSpinCtrl(this, wxID_ANY, wxT("0"), wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, -50, 50, 0); | |
| 69 gbSizer->Add(m_spinCtrlUD, wxGBPosition(0, 2), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5); | |
| 70 | |
| 71 m_spinCtrlLR = new wxSpinCtrl(this, wxID_ANY, wxT("0"), wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, -50, 50, 0); | |
| 72 gbSizer->Add(m_spinCtrlLR, wxGBPosition(0, 3), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); | |
| 73 | |
| 74 m_checkBox = new wxCheckBox(this, wxID_ANY, wxT("申請書モード"), wxDefaultPosition, wxDefaultSize, 0); | |
| 75 gbSizer->Add(m_checkBox, wxGBPosition(0, 5), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); | |
| 76 | |
| 77 m_dataViewListCtrl = new wxDataViewListCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(320, 1200), wxDV_SINGLE|wxDV_ROW_LINES); | |
| 78 m_dataViewListColumnNo = m_dataViewListCtrl->AppendTextColumn(wxT("No"), wxDATAVIEW_CELL_INERT, 30, static_cast<wxAlignment>(wxALIGN_CENTER), 0); | |
| 79 m_dataViewListColumnHno = m_dataViewListCtrl->AppendTextColumn(wxT("被保険者番号"), wxDATAVIEW_CELL_INERT, 100, static_cast<wxAlignment>(wxALIGN_CENTER), 0); | |
| 80 m_dataViewListColumnName = m_dataViewListCtrl->AppendTextColumn(wxT(" 氏名"), wxDATAVIEW_CELL_INERT, 150, static_cast<wxAlignment>(wxALIGN_LEFT), 0); | |
| 81 //m_dataViewListColumnChecked = m_dataViewListCtrl->AppendToggleColumn(wxT("確認"), wxDATAVIEW_CELL_EDITABLE, -1, static_cast<wxAlignment>(wxALIGN_CENTER), 0); | |
| 82 m_dataViewListCtrl->SetAlternateRowColour(wxColour(230, 230, 255)) ; | |
| 83 gbSizer->Add(m_dataViewListCtrl, wxGBPosition(1, 0), wxGBSpan(7, 1), wxALL|wxEXPAND, 5); | |
| 84 | |
| 85 m_bitmapName = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(HNAME_WW, HNAME_WH), 0); | |
| 86 gbSizer->Add(m_bitmapName, wxGBPosition(1, 1), wxGBSpan(1, 4), wxALL, 5); | |
| 87 | |
| 88 wxFont font(24, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD); | |
| 89 m_textCtrlName = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(580, -1), wxTE_PROCESS_ENTER); | |
| 90 m_textCtrlName->SetFont(font); | |
| 91 gbSizer->Add(m_textCtrlName, wxGBPosition(1, 5), wxGBSpan(1, 4), wxALL|wxALIGN_BOTTOM, 5); | |
| 92 | |
| 93 m_bitmapHno = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(HNO_WW, HNO_WH), 0); | |
| 94 gbSizer->Add(m_bitmapHno, wxGBPosition(2, 1), wxGBSpan(1, 4), wxALL, 5); | |
| 95 | |
| 96 m_textCtrlHno = new wxTextCtrl(this, wxID_ANY, wxT("0123456789"), wxDefaultPosition, wxSize(200, -1), wxTE_PROCESS_ENTER); | |
| 97 m_textCtrlHno->SetMaxLength(10); | |
| 98 m_textCtrlHno->SetFont(font); | |
| 99 gbSizer->Add(m_textCtrlHno, wxGBPosition(2, 5), wxGBSpan(1, 1), wxALL|wxALIGN_BOTTOM, 5); | |
| 100 | |
| 101 m_staticTextHnoMsg = new wxStaticText(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); | |
| 102 m_staticTextHnoMsg->SetForegroundColour(wxColour(255, 0, 0)); | |
| 103 m_staticTextHnoMsg->SetFont(font); | |
| 104 gbSizer->Add(m_staticTextHnoMsg, wxGBPosition(2, 6), wxGBSpan(1, 1), wxALL|wxALIGN_BOTTOM, 5); | |
| 105 | |
| 106 m_bitmapTk = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(RIGHT_W, RIGHT_H1), 0); | |
| 107 gbSizer->Add(m_bitmapTk, wxGBPosition(3, 1), wxGBSpan(1, 6), wxALL, 5); | |
| 108 | |
| 109 m_bitmapIk = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(RIGHT_W, RIGHT_H2), 0); | |
| 110 gbSizer->Add(m_bitmapIk, wxGBPosition(4, 1), wxGBSpan(1, 6), wxALL, 5); | |
| 111 | |
| 112 m_listViewThumb = new wxListView(this, wxID_ANY, wxDefaultPosition, wxSize(RIGHT_W, THUMB_H * 2.5), wxLC_ICON); | |
| 113 m_listViewThumb->SetBackgroundColour(wxColour(230, 230, 255)); | |
| 114 gbSizer->Add(m_listViewThumb, wxGBPosition(5, 1), wxGBSpan(1, 6), wxALL, 5); | |
| 115 | |
| 116 m_staticTextDate = new wxStaticText(this, wxID_ANY, wxT("開催日"), wxDefaultPosition, wxDefaultSize, 0); | |
| 117 gbSizer->Add(m_staticTextDate, wxGBPosition(6, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5); | |
| 118 | |
| 119 m_datePicker = new wxDatePickerCtrl(this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxDP_DEFAULT|wxDP_DROPDOWN|wxDP_SHOWCENTURY); | |
| 120 gbSizer->Add(m_datePicker, wxGBPosition(6, 2), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); | |
| 121 | |
| 122 m_staticTextCcn = new wxStaticText(this, wxID_ANY, wxT("合議体"), wxDefaultPosition, wxDefaultSize, 0); | |
| 123 gbSizer->Add(m_staticTextCcn, wxGBPosition(6, 3), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5); | |
| 124 | |
| 125 wxArrayString m_choiceCcnChoices; | |
| 126 m_choiceCcn = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceCcnChoices, 0); | |
| 127 gbSizer->Add(m_choiceCcn, wxGBPosition(6, 4), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); | |
| 128 | |
| 129 m_buttonSave = new wxButton(this, wxID_ANY, wxT("保存"), wxDefaultPosition, wxDefaultSize, 0); | |
| 130 gbSizer->Add(m_buttonSave, wxGBPosition(6, 5), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); | |
| 131 | |
| 132 m_textCtrlMsg = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(200, -1), wxTE_READONLY|wxTE_RIGHT); | |
| 133 m_textCtrlMsg->SetBackgroundColour(wxColour(230, 230, 255)); | |
| 134 gbSizer->Add(m_textCtrlMsg, wxGBPosition(6, 6), wxGBSpan(1, 1), wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5); | |
| 135 | |
| 136 this->SetSizer(gbSizer); | |
| 137 this->Layout(); | |
| 138 | |
| 139 this->Centre(wxBOTH); | |
| 140 | |
| 141 m_buttonAuto->SetFocus(); | |
| 142 } | |
| 143 | |
| 144 void MoveFrame::InitializeControlsValue() | |
| 145 { | |
| 146 wxString conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("mover.conf"); | |
| 147 wxFileConfig* conf = new wxFileConfig(wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE); | |
| 148 | |
| 149 wxString work; | |
| 150 conf->SetPath(wxT("/Dirs")); | |
| 151 conf->Read(wxT("work"), &work); | |
| 152 | |
| 153 conf->SetPath(wxT("/Server")); | |
| 154 conf->Read(wxT("addr"), &m_addr); | |
| 155 conf->Read(wxT("port"), &m_port); | |
| 156 | |
| 157 delete conf; | |
| 158 | |
| 159 m_dirPicker->SetPath(work); | |
| 160 | |
| 161 wxDateTime today = wxDateTime::Today(); | |
| 162 wxDateTime sun = today.SetToNextWeekDay(wxDateTime::WeekDay::Sun); | |
| 163 wxDateTime thu = sun.SetToNextWeekDay(wxDateTime::WeekDay::Thu); | |
| 164 m_datePicker->SetValue(thu); | |
| 165 | |
| 166 LoadDefaultImages(); | |
| 167 } | |
| 168 | |
| 169 void MoveFrame::LoadDefaultImages() | |
| 170 { | |
| 171 wxBitmap bmp; | |
| 172 | |
| 173 bmp.LoadFile(wxT("image/mover.png"), wxBITMAP_TYPE_PNG); | |
| 174 m_bitmapName->SetBitmap(bmp); | |
| 175 | |
| 176 bmp.LoadFile(wxT("image/0123456789.png"), wxBITMAP_TYPE_PNG); | |
| 177 m_bitmapHno->SetBitmap(bmp); | |
| 178 | |
| 179 bmp.LoadFile(wxT("image/testpattern.png"), wxBITMAP_TYPE_PNG); | |
| 180 m_bitmapTk->SetBitmap(bmp); | |
| 181 | |
| 182 bmp.LoadFile(wxT("image/testpattern2.png"), wxBITMAP_TYPE_PNG); | |
| 183 m_bitmapIk->SetBitmap(bmp); | |
| 184 } | |
| 185 | |
| 186 void MoveFrame::LoadDB() | |
| 187 { | |
| 188 wxString conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("mover.conf"); | |
| 189 wxFileConfig* conf = new wxFileConfig(wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE); | |
| 190 | |
| 191 wxString buf; | |
| 192 conf->SetPath(wxT("/Ccn")); | |
| 193 conf->Read(wxT("ccn"), &buf); | |
| 194 wxArrayString ccn = wxSplit(buf, ':'); | |
| 195 for (int i = 0; i < ccn.GetCount(); i++) { | |
| 196 m_choiceCcn->Append(ccn[i]); | |
| 197 } | |
| 198 conf->Read(wxT("sss"), &buf); | |
| 199 m_sss = wxSplit(buf, ':'); | |
| 200 | |
| 201 delete conf; | |
| 202 | |
| 203 wxString hhsdb = wxT("hhsdb.csv"); | |
| 204 wxString url = wxT("/ha/"); | |
| 205 if (!HttpGetFile(m_addr, m_port, url, hhsdb)) return; | |
| 206 | |
| 207 wxTextFile hhsfile; | |
| 208 hhsfile.Open(hhsdb); | |
| 209 for (int i = 0; i < hhsfile.GetLineCount(); i++) { | |
| 210 wxArrayString buf = wxSplit(hhsfile.GetLine(i), ',', '\\'); | |
| 211 m_hhash[buf[0]] = wxString::Format(wxT("%s (%s)"), buf[2], buf[3]); | |
| 212 if (m_maxhno.Cmp(buf[0]) < 0) m_maxhno = buf[0]; | |
| 213 } | |
| 214 hhsfile.Close(); | |
| 215 } | |
| 216 | |
| 217 void MoveFrame::AutoDetect() | |
| 218 { | |
| 219 m_dataViewListCtrl->DeleteAllItems(); | |
| 220 wxDir dir(m_dirPicker->GetPath()); | |
| 221 if (!dir.IsOpened()) return; | |
| 222 | |
| 223 wxString dirname, fn; | |
| 224 bool cont = dir.GetFirst(&dirname, wxEmptyString, wxDIR_DIRS); | |
| 225 | |
| 226 wxVector<wxVariant> data; | |
| 227 while (cont) { | |
| 228 data.push_back(wxVariant(dirname)); | |
| 229 | |
| 230 wxDir subdir(m_dirPicker->GetPath() + wxFILE_SEP_PATH + dirname); | |
| 231 if (!subdir.IsOpened()) return; | |
| 232 | |
| 233 subdir.GetFirst(&fn, wxT("*.tif"), wxDIR_FILES); | |
| 234 fn = m_dirPicker->GetPath() + wxFILE_SEP_PATH + dirname + wxFILE_SEP_PATH + fn; | |
| 235 wxString hno = AnalizeHhsno(fn, m_spinCtrlLR->GetValue() * 5, m_spinCtrlUD->GetValue() * 5); | |
| 236 | |
| 237 data.push_back(wxVariant(hno)); | |
| 238 data.push_back(wxVariant(m_hhash[hno])); | |
| 239 //data.push_back(wxVariant(false)); | |
| 240 | |
| 241 m_dataViewListCtrl->AppendItem(data); | |
| 242 | |
| 243 data.clear(); | |
| 244 | |
| 245 cont = dir.GetNext(&dirname); | |
| 246 } | |
| 247 wxMessageBox(wxT("自動認識終了")); | |
| 248 } | |
| 249 | |
| 250 void MoveFrame::SelectItem(int r) | |
| 251 { | |
| 252 m_dataViewListCtrl->SelectRow(r); | |
| 253 | |
| 254 m_offx = 0; | |
| 255 m_offy = 0; | |
| 256 m_listViewThumb->DeleteAllItems(); | |
| 257 | |
| 258 wxString dirno = m_dataViewListCtrl->GetTextValue(r, 0); | |
| 259 wxString hno = m_dataViewListCtrl->GetTextValue(r, 1); | |
| 260 wxString hname = m_dataViewListCtrl->GetTextValue(r, 2); | |
| 261 | |
| 262 wxString img_path = m_dirPicker->GetPath() + wxFILE_SEP_PATH + dirno; | |
| 263 wxDir dir(img_path); | |
| 264 if (!dir.IsOpened()) return; | |
| 265 | |
| 266 wxString fn; | |
| 267 bool cont = dir.GetFirst(&fn, wxT("*.tif"), wxDIR_FILES); | |
| 268 | |
| 269 m_curms = img_path + wxFILE_SEP_PATH + fn; | |
| 270 wxImage image(m_curms, wxBITMAP_TYPE_TIFF); | |
| 271 wxImage img_buf; | |
| 272 wxBitmap bmp_buf; | |
| 273 | |
| 274 img_buf = image.GetSubImage(wxRect(HNAME_X, HNAME_Y, HNAME_W, HNAME_H)); | |
| 275 bmp_buf = img_buf.Scale(HNAME_WW, HNAME_WH, wxIMAGE_QUALITY_HIGH); | |
| 276 m_bitmapName->SetBitmap(bmp_buf); | |
| 277 | |
| 278 img_buf = image.GetSubImage(wxRect(HNO_X, HNO_Y, HNO_W, HNO_H)); | |
| 279 bmp_buf = img_buf.Scale(HNO_WW, HNO_WH, wxIMAGE_QUALITY_HIGH); | |
| 280 m_bitmapHno->SetBitmap(bmp_buf); | |
| 281 | |
| 282 m_textCtrlName->SetValue(hname); | |
| 283 m_textCtrlHno->SetValue(hno); | |
| 284 m_staticTextHnoMsg->SetLabel(wxEmptyString); | |
| 285 if (hno.Cmp(m_maxhno) > 0) m_staticTextHnoMsg->SetLabel(wxString::Format(wxT("> %s !"), m_maxhno)); | |
| 286 | |
| 287 wxImageList* imglist = new wxImageList(THUMB_W, THUMB_H); | |
| 288 m_listViewThumb->SetImageList(imglist, wxIMAGE_LIST_NORMAL); | |
| 289 for (int i = 0; cont; i++) { | |
| 290 wxString buf = img_path + wxFILE_SEP_PATH + fn; | |
| 291 wxImage img(buf, wxBITMAP_TYPE_TIFF); | |
| 292 bmp_buf = img.Scale(THUMB_W, THUMB_H, wxIMAGE_QUALITY_HIGH); | |
| 293 imglist->Add(bmp_buf); | |
| 294 m_listViewThumb->InsertItem(i, fn, i); | |
| 295 | |
| 296 if (i == 2) { | |
| 297 wxImage im = img.GetSubImage(wxRect(0, 0, img.GetWidth() - 1, 300)); // 2480x300 | |
| 298 bmp_buf = im.Scale(RIGHT_W, RIGHT_H1, wxIMAGE_QUALITY_HIGH); | |
| 299 m_bitmapTk->SetBitmap(bmp_buf); | |
| 300 } | |
| 301 if (i == 3) { | |
| 302 wxImage im = img.GetSubImage(wxRect(0, 20, img.GetWidth() - 1, 700)); // 2480x500 | |
| 303 bmp_buf = im.Scale(RIGHT_W, RIGHT_H2, wxIMAGE_QUALITY_HIGH); | |
| 304 m_bitmapIk->SetBitmap(bmp_buf); | |
| 305 } | |
| 306 cont = dir.GetNext(&fn); | |
| 307 } | |
| 308 } | |
| 309 | |
| 310 void MoveFrame::ThumbnailPaper() | |
| 311 { | |
| 312 wxString path = m_dirPicker->GetPath(); | |
| 313 wxDir dir(path); | |
| 314 if (!dir.IsOpened()) return; | |
| 315 | |
| 316 wxString file; | |
| 317 bool cont = dir.GetFirst(&file, wxT("*.tif"), wxDIR_FILES); | |
| 318 | |
| 319 wxImageList* imglist = new wxImageList(THUMB_W / 2, THUMB_H / 2); | |
| 320 m_listViewThumb->SetImageList(imglist, wxIMAGE_LIST_NORMAL); | |
| 321 wxBitmap bmp; | |
| 322 int n = 0; | |
| 323 for (int i = 0; cont; i++) { | |
| 324 wxImage img(path + wxFILE_SEP_PATH + file, wxBITMAP_TYPE_TIFF); | |
| 325 bmp = img.Scale(THUMB_W / 2, THUMB_H / 2, wxIMAGE_QUALITY_HIGH); | |
| 326 imglist->Add(bmp); | |
| 327 m_listViewThumb->InsertItem(i, file, i); | |
| 328 n++; | |
| 329 cont = dir.GetNext(&file); | |
| 330 } | |
| 331 | |
| 332 int m = m_listViewThumb->GetSelectedItemCount(); | |
| 333 m_textCtrlMsg->SetValue(wxString::Format(wxT("%d / %d"), m, n)); | |
| 334 wxMessageBox(wxString::Format(wxT("%d files found."), n)); | |
| 335 } | |
| 336 | |
| 337 wxString MoveFrame::AnalizeHhsno(wxString file, int offx, int offy) | |
| 338 { | |
| 339 wxImage image(file, wxBITMAP_TYPE_TIFF); | |
| 340 int sx = MS_X + offx; // start x | |
| 341 int sy = MS_Y + offy; | |
| 342 int bw = MS_W / 10; // block width | |
| 343 int bh = MS_H / 10; | |
| 344 int area = bw * bh; | |
| 345 int black = 0; | |
| 346 int th = 38; | |
| 347 int x, y; | |
| 348 unsigned char r, g, b; | |
| 349 | |
| 350 int max_n; | |
| 351 float max, bk; | |
| 352 | |
| 353 wxString hno; | |
| 354 for (int c = 0; c < 10; c++) { | |
| 355 max = 0.0; | |
| 356 max_n = -1; | |
| 357 | |
| 358 for(int n = 0; n < 10; n++) { | |
| 359 for (x = sx + bw * c; x < sx + bw * (c + 1); x++) { | |
| 360 for (y = sy + bh * n; y < sy + bh * (n + 1); y++) { | |
| 361 r = image.GetRed(x, y); | |
| 362 g = image.GetGreen(x, y); | |
| 363 b = image.GetBlue(x, y); | |
| 364 if ((int)r < th && (int)g < th && (int)b < th) black++; | |
| 365 } | |
| 366 } | |
| 367 | |
| 368 bk = (float)black / area; | |
| 369 if (max < bk) { | |
| 370 max = bk; | |
| 371 max_n = n; | |
| 372 } | |
| 373 black = 0; | |
| 374 } | |
| 375 hno.Append(wxString::Format(wxT("%d"), max_n)); | |
| 376 } | |
| 377 | |
| 378 return hno; | |
| 379 } | |
| 380 | |
| 381 void MoveFrame::MoveLookWin(int x, int y) | |
| 382 { | |
| 383 m_offx += x * 5; | |
| 384 m_offy += y * 5; | |
| 385 | |
| 386 wxImage image(m_curms, wxBITMAP_TYPE_TIFF); | |
| 387 wxImage img_buf; | |
| 388 wxBitmap bmp_buf; | |
| 389 | |
| 390 img_buf = image.GetSubImage(wxRect(HNAME_X + m_offx, HNAME_Y + m_offy, HNAME_W, HNAME_H)); | |
| 391 bmp_buf = img_buf.Scale(HNAME_WW, HNAME_WH, wxIMAGE_QUALITY_HIGH); | |
| 392 m_bitmapName->SetBitmap(bmp_buf); | |
| 393 | |
| 394 img_buf = image.GetSubImage(wxRect(HNO_X + m_offx, HNO_Y + m_offy, HNO_W, HNO_H)); | |
| 395 bmp_buf = img_buf.Scale(HNO_WW, HNO_WH, wxIMAGE_QUALITY_HIGH); | |
| 396 m_bitmapHno->SetBitmap(bmp_buf); | |
| 397 | |
| 398 wxString hno = AnalizeHhsno(m_curms, m_offx, m_offy); | |
| 399 m_textCtrlName->SetValue(m_hhash[hno]); | |
| 400 m_textCtrlHno->SetValue(hno); | |
| 401 | |
| 402 m_staticTextHnoMsg->SetLabel(wxEmptyString); | |
| 403 if (hno.Cmp(m_maxhno) > 0) m_staticTextHnoMsg->SetLabel(wxString::Format(wxT("> %s !"), m_maxhno)); | |
| 404 } | |
| 405 | |
| 406 /* Event Handlers */ | |
| 407 void MoveFrame::OnKey(wxKeyEvent& event) | |
| 408 { | |
| 409 int mod = event.GetModifiers(); | |
| 410 int key = event.GetKeyCode(); | |
| 411 | |
| 412 switch (key) { | |
| 413 case WXK_F5: { | |
| 414 wxMessageBox("aaa"); | |
| 415 break; | |
| 416 } | |
| 417 } | |
| 418 } | |
| 419 | |
| 420 void MoveFrame::OnAuto(wxCommandEvent& WXUNUSED(event)) | |
| 421 { | |
| 422 if (m_checkBox->IsChecked()) { | |
| 423 ThumbnailPaper(); | |
| 424 return; | |
| 425 } | |
| 426 | |
| 427 m_offx = 0; | |
| 428 m_offy = 0; | |
| 429 AutoDetect(); | |
| 430 SelectItem(0); | |
| 431 m_dataViewListCtrl->SetFocus(); | |
| 432 } | |
| 433 | |
| 434 void MoveFrame::OnSelect(wxDataViewEvent& WXUNUSED(event)) | |
| 435 { | |
| 436 int r = m_dataViewListCtrl->GetSelectedRow(); | |
| 437 SelectItem(r); | |
| 438 } | |
| 439 | |
| 440 void MoveFrame::OnListChar(wxKeyEvent& event) | |
| 441 { | |
| 442 int mod = event.GetModifiers(); | |
| 443 int key = event.GetKeyCode(); | |
| 444 | |
| 445 switch (key) { | |
| 446 case WXK_UP: { | |
| 447 if (mod == wxMOD_CONTROL) { | |
| 448 MoveLookWin(0, 1); | |
| 449 return; | |
| 450 } | |
| 451 break; | |
| 452 } | |
| 453 case WXK_DOWN: { | |
| 454 if (mod == wxMOD_CONTROL) { | |
| 455 MoveLookWin(0, -1); | |
| 456 return; | |
| 457 } | |
| 458 break; | |
| 459 } | |
| 460 case WXK_RIGHT: { | |
| 461 if (mod == wxMOD_CONTROL) { | |
| 462 MoveLookWin(-1, 0); | |
| 463 return; | |
| 464 } | |
| 465 break; | |
| 466 } | |
| 467 case WXK_LEFT: { | |
| 468 if (mod == wxMOD_CONTROL) { | |
| 469 MoveLookWin(1, 0); | |
| 470 return; | |
| 471 } | |
| 472 break; | |
| 473 } | |
| 474 case WXK_RETURN: { | |
| 475 int r = m_dataViewListCtrl->GetSelectedRow(); | |
| 476 m_dataViewListCtrl->SetTextValue(m_textCtrlHno->GetValue(), r, 1); | |
| 477 m_dataViewListCtrl->SetTextValue(m_textCtrlName->GetValue(), r, 2); | |
| 478 //if (r != m_dataViewListCtrl->GetItemCount() - 1) SelectItem(r + 1); | |
| 479 return; | |
| 480 } | |
| 481 } | |
| 482 event.Skip(); | |
| 483 } | |
| 484 | |
| 485 void MoveFrame::OnName(wxCommandEvent& WXUNUSED(event)) | |
| 486 { | |
| 487 int r = m_dataViewListCtrl->GetSelectedRow(); | |
| 488 m_dataViewListCtrl->SetTextValue(m_textCtrlHno->GetValue(), r, 1); | |
| 489 m_dataViewListCtrl->SetTextValue(m_textCtrlName->GetValue(), r, 2); | |
| 490 //if (r != m_dataViewListCtrl->GetItemCount() - 1) SelectItem(r + 1); | |
| 491 m_dataViewListCtrl->SetFocus(); | |
| 492 } | |
| 493 | |
| 494 void MoveFrame::OnHnoChar(wxKeyEvent& event) | |
| 495 { | |
| 496 int mod = event.GetModifiers(); | |
| 497 int key = event.GetKeyCode(); | |
| 498 | |
| 499 if (key == 45) { // num-key '-' as BackSpace | |
| 500 wxString t = m_textCtrlHno->GetStringSelection(); | |
| 501 if (t.IsEmpty()) { | |
| 502 long p = m_textCtrlHno->GetInsertionPoint(); | |
| 503 if (p > 0) m_textCtrlHno->Remove(p - 1, p); | |
| 504 } else { | |
| 505 m_textCtrlHno->Cut(); | |
| 506 } | |
| 507 return; | |
| 508 } | |
| 509 | |
| 510 switch (key) { | |
| 511 case WXK_UP: { | |
| 512 if (mod == wxMOD_CONTROL) { | |
| 513 MoveLookWin(0, 1); | |
| 514 return; | |
| 515 } | |
| 516 break; | |
| 517 } | |
| 518 case WXK_DOWN: { | |
| 519 if (mod == wxMOD_CONTROL) { | |
| 520 MoveLookWin(0, -1); | |
| 521 return; | |
| 522 } | |
| 523 break; | |
| 524 } | |
| 525 case WXK_RIGHT: { | |
| 526 if (mod == wxMOD_CONTROL) { | |
| 527 MoveLookWin(-1, 0); | |
| 528 return; | |
| 529 } | |
| 530 break; | |
| 531 } | |
| 532 case WXK_LEFT: { | |
| 533 if (mod == wxMOD_CONTROL) { | |
| 534 MoveLookWin(1, 0); | |
| 535 return; | |
| 536 } | |
| 537 break; | |
| 538 } | |
| 539 } | |
| 540 event.Skip(); | |
| 541 } | |
| 542 | |
| 543 void MoveFrame::OnHno(wxCommandEvent& WXUNUSED(event)) | |
| 544 { | |
| 545 m_textCtrlHno->SelectAll(); | |
| 546 if (m_textCtrlHno->GetLineLength(0) != 10) { | |
| 547 wxMessageBox(wxT("Bat input")); | |
| 548 return; | |
| 549 } | |
| 550 | |
| 551 wxString hno = m_textCtrlHno->GetValue(); | |
| 552 m_textCtrlName->SetValue(m_hhash[hno]); | |
| 553 | |
| 554 int r = m_dataViewListCtrl->GetSelectedRow(); | |
| 555 if (r == wxNOT_FOUND) { | |
| 556 return; | |
| 557 } | |
| 558 m_dataViewListCtrl->SetTextValue(hno, r, 1); | |
| 559 m_dataViewListCtrl->SetTextValue(m_hhash[hno], r, 2); | |
| 560 | |
| 561 //if (r != m_dataViewListCtrl->GetItemCount() - 1) SelectItem(r + 1); | |
| 562 m_dataViewListCtrl->SetFocus(); | |
| 563 } | |
| 564 | |
| 565 void MoveFrame::OnCheck(wxCommandEvent& WXUNUSED(event)) | |
| 566 { | |
| 567 if (m_checkBox->IsChecked()) { | |
| 568 m_buttonAuto->SetLabel(wxT("表示")); | |
| 569 } else { | |
| 570 m_buttonAuto->SetLabel(wxT("一括判定")); | |
| 571 } | |
| 572 | |
| 573 m_dataViewListCtrl->DeleteAllItems(); | |
| 574 m_textCtrlName->SetValue(wxEmptyString); | |
| 575 m_textCtrlHno->SetValue(wxT("0123456789")); | |
| 576 m_listViewThumb->DeleteAllItems(); | |
| 577 LoadDefaultImages(); | |
| 578 } | |
| 579 | |
| 580 void MoveFrame::OnThumbDeselected(wxListEvent& WXUNUSED(event)) | |
| 581 { | |
| 582 int m = m_listViewThumb->GetItemCount(); | |
| 583 int n = m_listViewThumb->GetSelectedItemCount(); | |
| 584 m_textCtrlMsg->SetValue(wxString::Format(wxT("%d / %d"), n, m)); | |
| 585 } | |
| 586 | |
| 587 void MoveFrame::OnThumbSelected(wxListEvent& WXUNUSED(event)) | |
| 588 { | |
| 589 int m = m_listViewThumb->GetItemCount(); | |
| 590 int n = m_listViewThumb->GetSelectedItemCount(); | |
| 591 m_textCtrlMsg->SetValue(wxString::Format(wxT("%d / %d"), n, m)); | |
| 592 } | |
| 593 | |
| 594 void MoveFrame::OnThumbDClick(wxListEvent& WXUNUSED(event)) | |
| 595 { | |
| 596 wxString file = m_dirPicker->GetPath() + wxFILE_SEP_PATH; | |
| 597 | |
| 598 if (!m_checkBox->IsChecked()) { | |
| 599 int r = m_dataViewListCtrl->GetSelectedRow(); | |
| 600 file += m_dataViewListCtrl->GetTextValue(r, 0) + wxFILE_SEP_PATH; | |
| 601 } | |
| 602 | |
| 603 for (int i = 0; i < m_listViewThumb->GetItemCount(); i++) { | |
| 604 if (m_listViewThumb->IsSelected(i)) | |
| 605 file += m_listViewThumb->GetItemText(i, 0); | |
| 606 } | |
| 607 | |
| 608 wxImage img(file, wxBITMAP_TYPE_TIFF); | |
| 609 wxBitmap bmp = img.Scale(THUMB_W * 6, THUMB_H * 6, wxIMAGE_QUALITY_HIGH); | |
| 610 wxSplashScreen* splash = new wxSplashScreen(bmp, wxSPLASH_CENTRE_ON_SCREEN|wxSPLASH_TIMEOUT, 10000, NULL, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_RAISED|wxSTAY_ON_TOP); | |
| 611 wxYield(); | |
| 612 } | |
| 613 | |
| 614 void MoveFrame::OnSave(wxCommandEvent& WXUNUSED(event)) | |
| 615 { | |
| 616 if (m_choiceCcn->GetCurrentSelection() == wxNOT_FOUND) { | |
| 617 wxMessageBox(wxT("Bad choice.")); | |
| 618 return; | |
| 619 } | |
| 620 | |
| 621 wxDateTime dt = m_datePicker->GetValue(); | |
| 622 wxString ymd = dt.Format(wxT("%Y%m%d")); | |
| 623 wxString year = dt.Format(wxT("%Y")); | |
| 624 | |
| 625 wxDateTime::Month month = dt.GetMonth(); | |
| 626 if (month == wxDateTime::Jan || month == wxDateTime::Feb || month == wxDateTime::Mar) { | |
| 627 year = wxString::Format(wxT("%d"), dt.GetYear() - 1); | |
| 628 } | |
| 629 | |
| 630 wxString ymddir = wxFILE_SEP_PATH + year + wxFILE_SEP_PATH + ymd; | |
| 631 if (!wxDirExists(ymddir)) wxFileName::Mkdir(ymddir, wxS_DIR_DEFAULT, 0); | |
| 632 | |
| 633 int n = m_choiceCcn->GetCurrentSelection(); | |
| 634 wxString ccndir = ymddir + wxFILE_SEP_PATH + m_choiceCcn->GetString(n); | |
| 635 if (!wxDirExists(ccndir)) wxFileName::Mkdir(ccndir, wxS_DIR_DEFAULT, 0); | |
| 636 wxString sssdir = ymddir + wxFILE_SEP_PATH + m_choiceCcn->GetString(n) + wxFILE_SEP_PATH + m_sss[n]; | |
| 637 if (!wxDirExists(sssdir)) wxFileName::Mkdir(sssdir, wxS_DIR_DEFAULT, 0); | |
| 638 | |
| 639 if (m_checkBox->IsChecked()) { | |
| 640 wxString srcdir = m_dirPicker->GetPath(); | |
| 641 wxString dstdir = sssdir; | |
| 642 | |
| 643 wxDir dir(srcdir); | |
| 644 if (!dir.IsOpened()) return; | |
| 645 | |
| 646 if (m_listViewThumb->GetSelectedItemCount() == 0) { | |
| 647 wxMessageBox(wxT("no item selected.")); | |
| 648 return; | |
| 649 } | |
| 650 | |
| 651 for (int i = 0; i < m_listViewThumb->GetItemCount(); i++) { | |
| 652 if (m_listViewThumb->IsSelected(i)) { | |
| 653 wxString file = m_listViewThumb->GetItemText(i, 0); | |
| 654 wxString src = srcdir + wxFILE_SEP_PATH + file; | |
| 655 wxString dst = dstdir + wxFILE_SEP_PATH + file; | |
| 656 wxCopyFile(src, dst, true); | |
| 657 } | |
| 658 } | |
| 659 | |
| 660 } else { | |
| 661 for (int r = 0; r < m_dataViewListCtrl->GetItemCount(); r++) { | |
| 662 wxString srcdir = m_dirPicker->GetPath() + wxFILE_SEP_PATH + m_dataViewListCtrl->GetTextValue(r, 0); | |
| 663 wxString dstdir = ccndir + wxFILE_SEP_PATH + m_dataViewListCtrl->GetTextValue(r, 1); | |
| 664 | |
| 665 wxDir dir(srcdir); | |
| 666 if (!dir.IsOpened()) return; | |
| 667 if (!wxDirExists(dstdir)) wxFileName::Mkdir(dstdir, wxS_DIR_DEFAULT, 0); | |
| 668 | |
| 669 wxString file; | |
| 670 bool cont = dir.GetFirst(&file, wxT("*.tif"), wxDIR_FILES); | |
| 671 while (cont) { | |
| 672 wxString src = srcdir + wxFILE_SEP_PATH + file; | |
| 673 wxString dst = dstdir + wxFILE_SEP_PATH + file; | |
| 674 wxCopyFile(src, dst, true); | |
| 675 cont = dir.GetNext(&file); | |
| 676 } | |
| 677 } | |
| 678 | |
| 679 wxString listfn = ymd + wxT("_") + m_choiceCcn->GetString(n) + wxT(".csv"); | |
| 680 if (wxFileExists(listfn)) wxRemoveFile(listfn); | |
| 681 | |
| 682 wxTextFile listfile; | |
| 683 listfile.Create(listfn); | |
| 684 for(int r = 0; r < m_dataViewListCtrl->GetItemCount(); r++) { | |
| 685 wxString s = m_dataViewListCtrl->GetTextValue(r, 0); | |
| 686 s += wxT(",") + m_dataViewListCtrl->GetTextValue(r, 1); | |
| 687 s += wxT(",") + m_dataViewListCtrl->GetTextValue(r, 2); | |
| 688 listfile.AddLine(s); | |
| 689 } | |
| 690 listfile.Write(); | |
| 691 listfile.Close(); | |
| 692 } | |
| 693 wxMessageBox(wxT("コピー終了")); | |
| 694 } | |
| 695 |
