0
|
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
|