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 |