comparison horori/merger/src/merger.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 : merger.cpp
2 // Last Change: 2020-05-21 木 15:18:24.
3 //
4 #include <wx/dir.h>
5 #include <wx/textfile.h>
6 #include <wx/msgdlg.h>
7 #include <wx/fileconf.h>
8 #include <wx/html/htmprint.h>
9
10 #include "utils.h"
11 #include "merger.h"
12
13 MergeFrame::MergeFrame(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 SetAccelerator();
18 LoadDefaultParams();
19 InitializeControlsValue();
20
21 m_zoom = 102;
22
23 // Connect Events
24 m_filePicker->Connect(wxEVT_COMMAND_FILEPICKER_CHANGED, wxFileDirPickerEventHandler(MergeFrame::OnFileChanged), NULL, this);
25 m_buttonSet->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnMaskLocSet), NULL, this);
26 m_dataViewListCtrlParam->Connect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(MergeFrame::OnSelectData), NULL, this);
27 m_buttonWrite->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnWrite), NULL, this);
28 m_buttonPrint->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnPrint), NULL, this);
29 m_buttonPrintAll->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnPrintAll), NULL, this);
30 m_buttonAclS->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnAclS), NULL, this);
31 }
32
33 MergeFrame::~MergeFrame()
34 {
35 m_filePicker->Disconnect(wxEVT_COMMAND_FILEPICKER_CHANGED, wxFileDirPickerEventHandler(MergeFrame::OnFileChanged), NULL, this);
36 m_buttonSet->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnMaskLocSet), NULL, this);
37 m_dataViewListCtrlParam->Disconnect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(MergeFrame::OnSelectData), NULL, this);
38 m_buttonWrite->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnWrite), NULL, this);
39 m_buttonPrint->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnPrint), NULL, this);
40 m_buttonPrintAll->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnPrintAll), NULL, this);
41 m_buttonAclS->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnAclS), NULL, this);
42 }
43
44 /* Functions */
45 void MergeFrame::CreateControls()
46 {
47 this->SetIcon(wxIcon(wxT("sample")));
48 this->SetSizeHints(wxDefaultSize, wxDefaultSize);
49 this->SetBackgroundColour(wxColour(240, 140, 100));
50
51 wxGridBagSizer* gbSizer = new wxGridBagSizer(0, 0);
52 gbSizer->SetFlexibleDirection(wxBOTH);
53 gbSizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
54
55 m_staticTextCSV = new wxStaticText(this, wxID_ANY, wxT("CSVファイル"), wxDefaultPosition, wxDefaultSize, 0);
56 gbSizer->Add(m_staticTextCSV, wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5);
57
58 m_filePicker = new wxFilePickerCtrl(this, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("*.csv"), wxDefaultPosition, wxSize(400, -1), wxFLP_CHANGE_DIR|wxFLP_FILE_MUST_EXIST|wxFLP_OPEN|wxFLP_SMALL|wxFLP_USE_TEXTCTRL);
59 gbSizer->Add(m_filePicker, wxGBPosition(0, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5);
60
61 m_gauge = new wxGauge(this, wxID_ANY, 40, wxDefaultPosition, wxSize(100, 20), wxGA_HORIZONTAL);
62 m_gauge->SetValue(0);
63 gbSizer->Add(m_gauge, wxGBPosition(0, 2), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5);
64
65 m_staticTextSpl = new wxStaticText(this, wxID_ANY, wxT("特記"), wxDefaultPosition, wxDefaultSize, 0);
66 gbSizer->Add(m_staticTextSpl, wxGBPosition(1, 0), wxGBSpan(1, 1), wxALL|wxALIGN_RIGHT, 5);
67
68 m_lookwinSpl = new LookWindow(this, wxID_ANY, wxDefaultPosition, wxSize(1000, 150), 0);
69 gbSizer->Add(m_lookwinSpl, wxGBPosition(1, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5);
70
71 m_staticTextOpn1 = new wxStaticText(this, wxID_ANY, wxT("意見書1"), wxDefaultPosition, wxDefaultSize, 0);
72 gbSizer->Add(m_staticTextOpn1, wxGBPosition(2, 0), wxGBSpan(1, 1), wxALL|wxALIGN_RIGHT, 5);
73
74 m_lookwinOpn1 = new LookWindow(this, wxID_ANY, wxDefaultPosition, wxSize(1000, 150), 0);
75 gbSizer->Add(m_lookwinOpn1, wxGBPosition(2, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5);
76
77 m_staticTextOpn2 = new wxStaticText(this, wxID_ANY, wxT("意見書2"), wxDefaultPosition, wxDefaultSize, 0);
78 gbSizer->Add(m_staticTextOpn2, wxGBPosition(3, 0), wxGBSpan(2, 1), wxALL|wxALIGN_RIGHT, 5);
79
80 m_lookwinOpn2 = new LookWindow(this, wxID_ANY, wxDefaultPosition, wxSize(1000, 450), 0);
81 gbSizer->Add(m_lookwinOpn2, wxGBPosition(3, 1), wxGBSpan(3, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5);
82
83 m_buttonAclS = new wxButton(this, ID_NEXT, wxT("Acl_S"), wxDefaultPosition, wxDefaultSize, 0);
84 m_buttonAclS->Hide();
85 gbSizer->Add(m_buttonAclS, wxGBPosition(4, 2), wxGBSpan(1, 1), wxALL, 5);
86
87 m_buttonSet = new wxButton(this, wxID_ANY, wxT("マスク位置セット"), wxDefaultPosition, wxSize(100, -1), 0);
88 m_buttonSet->SetBackgroundColour(wxColour(255, 180, 150));
89 gbSizer->Add(m_buttonSet, wxGBPosition(5, 2), wxGBSpan(1, 1), wxALL|wxALIGN_BOTTOM, 5);
90
91 m_staticTextMask = new wxStaticText(this, wxID_ANY, wxT("マスク位置"), wxDefaultPosition, wxDefaultSize, 0);
92 gbSizer->Add(m_staticTextMask, wxGBPosition(6, 0), wxGBSpan(3, 1), wxALL|wxALIGN_RIGHT, 5);
93
94 m_dataViewListCtrlParam = new wxDataViewListCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(1000, 300), wxDV_ROW_LINES);
95 m_dataViewListColumnNo = m_dataViewListCtrlParam->AppendTextColumn(wxT("No"), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_CENTER), 0);
96 m_dataViewListColumnHno = m_dataViewListCtrlParam->AppendTextColumn(wxT("被保険者番号"), wxDATAVIEW_CELL_INERT, 100, static_cast<wxAlignment>(wxALIGN_CENTER), 0);
97 m_dataViewListColumnName = m_dataViewListCtrlParam->AppendTextColumn(wxT(" 氏名"), wxDATAVIEW_CELL_INERT, 120, static_cast<wxAlignment>(wxALIGN_LEFT), wxDATAVIEW_COL_RESIZABLE);
98 m_dataViewListColumnX1 = m_dataViewListCtrlParam->AppendTextColumn(wxT("x1 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
99 m_dataViewListColumnY1 = m_dataViewListCtrlParam->AppendTextColumn(wxT("y1 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
100 m_dataViewListColumnW1 = m_dataViewListCtrlParam->AppendTextColumn(wxT("w1 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
101 m_dataViewListColumnH1 = m_dataViewListCtrlParam->AppendTextColumn(wxT("h1 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
102 m_dataViewListColumnX2 = m_dataViewListCtrlParam->AppendTextColumn(wxT("x2 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
103 m_dataViewListColumnY2 = m_dataViewListCtrlParam->AppendTextColumn(wxT("y2 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
104 m_dataViewListColumnW2 = m_dataViewListCtrlParam->AppendTextColumn(wxT("w2 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
105 m_dataViewListColumnH2 = m_dataViewListCtrlParam->AppendTextColumn(wxT("h2 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
106 m_dataViewListColumnX3 = m_dataViewListCtrlParam->AppendTextColumn(wxT("x3 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
107 m_dataViewListColumnY3 = m_dataViewListCtrlParam->AppendTextColumn(wxT("y3 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
108 m_dataViewListColumnW3 = m_dataViewListCtrlParam->AppendTextColumn(wxT("w3 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
109 m_dataViewListColumnH3 = m_dataViewListCtrlParam->AppendTextColumn(wxT("h3 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
110 m_dataViewListColumnX4 = m_dataViewListCtrlParam->AppendTextColumn(wxT("x4 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
111 m_dataViewListColumnY4 = m_dataViewListCtrlParam->AppendTextColumn(wxT("y4 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
112 m_dataViewListColumnW4 = m_dataViewListCtrlParam->AppendTextColumn(wxT("w4 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
113 m_dataViewListColumnH4 = m_dataViewListCtrlParam->AppendTextColumn(wxT("h4 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0);
114 m_dataViewListColumnTime = m_dataViewListCtrlParam->AppendTextColumn(wxT("修正時刻"), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_CENTER), 0);
115 m_dataViewListCtrlParam->SetAlternateRowColour(wxColour(255, 200, 180)) ;
116 gbSizer->Add(m_dataViewListCtrlParam, wxGBPosition(6, 1), wxGBSpan(4, 1), wxALL|wxEXPAND, 5);
117
118 m_buttonWrite = new wxButton(this, wxID_ANY, wxT("設定保存"), wxDefaultPosition, wxSize(100, -1), 0);
119 m_buttonWrite->SetBackgroundColour(wxColour(255, 160, 120));
120 gbSizer->Add(m_buttonWrite, wxGBPosition(6, 2), wxGBSpan(1, 1), wxALL, 5);
121
122 gbSizer->Add(0, 210, wxGBPosition(7, 2), wxGBSpan(1, 1), wxEXPAND, 5);
123
124 m_buttonPrint = new wxButton(this, wxID_ANY, wxT("印刷"), wxDefaultPosition, wxSize(100, -1), 0);
125 m_buttonPrint->SetBackgroundColour(wxColour(255, 205, 255));
126 gbSizer->Add(m_buttonPrint, wxGBPosition(8, 2), wxGBSpan(1, 1), wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM, 5);
127
128 m_buttonPrintAll = new wxButton(this, wxID_ANY, wxT("すべて印刷"), wxDefaultPosition, wxSize(100, -1), 0);
129 m_buttonPrintAll->SetBackgroundColour(wxColour(255, 175, 255));
130 gbSizer->Add(m_buttonPrintAll, wxGBPosition(9, 2), wxGBSpan(1, 1), wxALL|wxALIGN_BOTTOM, 5);
131
132 this->SetSizer(gbSizer);
133 this->Layout();
134
135 this->Centre(wxBOTH);
136 }
137
138 void MergeFrame::SetAccelerator()
139 {
140 wxAcceleratorEntry entries[1];
141 entries[0].Set(wxACCEL_NORMAL, (int)'S', ID_NEXT);
142 /*
143 entries[1].Set(wxACCEL_NORMAL, WXK_F1, wxID_HELP);
144 entries[2].Set(wxACCEL_CTRL, (int)'Q', wxID_CLOSE);
145 */
146 wxAcceleratorTable accel(1, entries);
147 SetAcceleratorTable(accel);
148 }
149
150
151 void MergeFrame::InitializeControlsValue()
152 {
153 m_filePicker->SetPath(m_csv);
154
155 wxString file = wxGetCwd() + wxFILE_SEP_PATH + wxT("image") + wxFILE_SEP_PATH + wxT("testpattern.tif");
156
157 m_lookwinSpl->SetDefaultFile(file);
158 m_lookwinSpl->SetDefaultParams(m_rectSplLWin, 1);
159
160 m_lookwinOpn1->SetDefaultFile(file);
161 m_lookwinOpn1->SetDefaultParams(m_rectOpn1LWin, 1);
162
163 m_lookwinOpn2->SetDefaultFile(file);
164 m_lookwinOpn2->SetDefaultParams(m_rectOpn2LWin, 2);
165 }
166
167 void MergeFrame::LoadDefaultParams()
168 {
169 wxString conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("merger.conf");
170 wxFileConfig* conf = new wxFileConfig(wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE);
171
172 conf->SetPath(wxT("/Misc"));
173 conf->Read(wxT("workdir"), &m_workdir);
174 conf->Read(wxT("csv"), &m_csv);
175
176 wxString buf;
177
178 conf->SetPath(wxT("/LookWin"));
179 conf->Read(wxT("spl"), &buf);
180 m_rectSplLWin = Geo2Rect(buf);
181
182 conf->Read(wxT("opn1"), &buf);
183 m_rectOpn1LWin = Geo2Rect(buf);
184
185 conf->Read(wxT("opn2"), &buf);
186 m_rectOpn2LWin = Geo2Rect(buf);
187
188
189 conf->SetPath(wxT("/Mask"));
190 conf->Read(wxT("spl"), &buf);
191 m_rectSplMask = Geo2Rect(buf);
192
193 conf->Read(wxT("opn1"), &buf);
194 m_rectOpn1Mask = Geo2Rect(buf);
195
196 conf->Read(wxT("opn2"), &buf);
197 m_rectOpn2Mask = Geo2Rect(buf);
198
199 conf->Read(wxT("opn3"), &buf);
200 m_rectOpn3Mask = Geo2Rect(buf);
201
202 delete conf;
203 }
204
205 void MergeFrame::MaskLocSet()
206 {
207 wxString x, y, w, h;
208
209 int r = m_dataViewListCtrlParam->GetSelectedRow();
210
211 m_lookwinSpl->GetMaskLoc(1, &x, &y, &w, &h);
212 m_dataViewListCtrlParam->SetTextValue(x, r, 3);
213 m_dataViewListCtrlParam->SetTextValue(y, r, 4);
214 m_dataViewListCtrlParam->SetTextValue(w, r, 5);
215 m_dataViewListCtrlParam->SetTextValue(h, r, 6);
216
217 m_lookwinOpn1->GetMaskLoc(1, &x, &y, &w, &h);
218 m_dataViewListCtrlParam->SetTextValue(x, r, 7);
219 m_dataViewListCtrlParam->SetTextValue(y, r, 8);
220 m_dataViewListCtrlParam->SetTextValue(w, r, 9);
221 m_dataViewListCtrlParam->SetTextValue(h, r, 10);
222
223 m_lookwinOpn2->GetMaskLoc(1, &x, &y, &w, &h);
224 m_dataViewListCtrlParam->SetTextValue(x, r, 11);
225 m_dataViewListCtrlParam->SetTextValue(y, r, 12);
226 m_dataViewListCtrlParam->SetTextValue(w, r, 13);
227 m_dataViewListCtrlParam->SetTextValue(h, r, 14);
228
229 m_lookwinOpn2->GetMaskLoc(2, &x, &y, &w, &h);
230 m_dataViewListCtrlParam->SetTextValue(x, r, 15);
231 m_dataViewListCtrlParam->SetTextValue(y, r, 16);
232 m_dataViewListCtrlParam->SetTextValue(w, r, 17);
233 m_dataViewListCtrlParam->SetTextValue(h, r, 18);
234
235 wxDateTime now = wxDateTime::Now();
236 wxString nowstr = now.Format(wxT("%H:%M:%S"), wxDateTime::GMT9 ).c_str();
237 m_dataViewListCtrlParam->SetTextValue(nowstr, r, 19);
238 }
239
240 void MergeFrame::ShowImages()
241 {
242 int r = m_dataViewListCtrlParam->GetSelectedRow();
243 wxString dirno = m_dataViewListCtrlParam->GetTextValue(r, 0);
244
245 wxRect mask1, mask2, mask3, mask4;
246 GetItemMaskLoc(r, &mask1, &mask2, &mask3, &mask4);
247
248 wxString dir = m_workdir + wxFILE_SEP_PATH + dirno;
249 wxArrayString files;
250 wxDir::GetAllFiles(dir, &files, wxT("*.tif"), wxDIR_FILES);
251
252 m_lookwinSpl->LoadImage(files[2]);
253 m_lookwinOpn1->LoadImage(files[4]);
254 m_lookwinOpn2->LoadImage(files[3]);
255
256 m_lookwinSpl->SetMaskLoc(mask1, ZeroRect());
257 m_lookwinOpn1->SetMaskLoc(mask2, ZeroRect());
258 m_lookwinOpn2->SetMaskLoc(mask3, mask4);
259
260 m_lookwinSpl->DoMask1();
261 m_lookwinOpn1->DoMask1();
262 m_lookwinOpn2->DoMask1();
263 m_lookwinOpn2->DoMask2();
264 }
265
266 void MergeFrame::SaveParams()
267 {
268 if (m_dataViewListCtrlParam->GetItemCount() == 0) {
269 wxMessageBox(wxT("no item."));
270 return;
271 }
272
273 wxArrayString lines;
274 for (int r = 0; r < m_dataViewListCtrlParam->GetItemCount(); r++) {
275 wxArrayString cols;
276 for (int i = 0; i < 20; i++) {
277 cols.Add(m_dataViewListCtrlParam->GetTextValue(r, i));
278 }
279 lines.Add(wxJoin(cols, ',', '\\'));
280 }
281
282 wxTextFile file;
283 file.Open(m_filePicker->GetPath());
284 file.Clear();
285 for (int i = 0; i < lines.GetCount(); i++) {
286 file.AddLine(lines[i]);
287 }
288 file.Write();
289 file.Close();
290 }
291
292 void MergeFrame::DoRealMask(wxString file, wxString maskfile, wxRect mask1, wxRect mask2)
293 {
294 wxCopyFile(file, maskfile, true);
295 wxImage img_org(file, wxBITMAP_TYPE_TIFF);
296 img_org.SetRGB(mask1, 255, 255, 255);
297 img_org.SetRGB(mask2, 255, 255, 255);
298 wxImage img_out = img_org.GetSubImage(wxRect(40, 0, 2400, 3508));
299 img_out.SetOption(wxIMAGE_OPTION_TIFF_COMPRESSION, 5);
300 img_out.SaveFile(maskfile);
301 }
302
303 void MergeFrame::GetItemMaskLoc(int r, wxRect* mask1, wxRect* mask2, wxRect* mask3, wxRect* mask4)
304 {
305 wxString x1 = m_dataViewListCtrlParam->GetTextValue(r, 3);
306 wxString y1 = m_dataViewListCtrlParam->GetTextValue(r, 4);
307 wxString w1 = m_dataViewListCtrlParam->GetTextValue(r, 5);
308 wxString h1 = m_dataViewListCtrlParam->GetTextValue(r, 6);
309 *mask1 = Geo2Rect(wxString::Format(wxT("%sx%s+%s+%s"), w1, h1, x1, y1));
310
311 wxString x2 = m_dataViewListCtrlParam->GetTextValue(r, 7);
312 wxString y2 = m_dataViewListCtrlParam->GetTextValue(r, 8);
313 wxString w2 = m_dataViewListCtrlParam->GetTextValue(r, 9);
314 wxString h2 = m_dataViewListCtrlParam->GetTextValue(r, 10);
315 *mask2 = Geo2Rect(wxString::Format(wxT("%sx%s+%s+%s"), w2, h2, x2, y2));
316
317 wxString x3 = m_dataViewListCtrlParam->GetTextValue(r, 11);
318 wxString y3 = m_dataViewListCtrlParam->GetTextValue(r, 12);
319 wxString w3 = m_dataViewListCtrlParam->GetTextValue(r, 13);
320 wxString h3 = m_dataViewListCtrlParam->GetTextValue(r, 14);
321 *mask3 = Geo2Rect(wxString::Format(wxT("%sx%s+%s+%s"), w3, h3, x3, y3));
322
323 wxString x4 = m_dataViewListCtrlParam->GetTextValue(r, 15);
324 wxString y4 = m_dataViewListCtrlParam->GetTextValue(r, 16);
325 wxString w4 = m_dataViewListCtrlParam->GetTextValue(r, 17);
326 wxString h4 = m_dataViewListCtrlParam->GetTextValue(r, 18);
327 *mask4 = Geo2Rect(wxString::Format(wxT("%sx%s+%s+%s"), w4, h4, x4, y4));
328 }
329
330
331 /* Event Handlers */
332 void MergeFrame::OnAclS(wxCommandEvent& WXUNUSED(event))
333 {
334 int r = m_dataViewListCtrlParam->GetSelectedRow();
335 if (r == wxNOT_FOUND) return;
336
337 MaskLocSet();
338 if (r == m_dataViewListCtrlParam->GetItemCount() - 1) return;
339
340 m_dataViewListCtrlParam->SelectRow(r + 1);
341 if (r > 3) m_dataViewListCtrlParam->LineDown();
342 ShowImages();
343 }
344
345 void MergeFrame::OnFileChanged(wxFileDirPickerEvent& WXUNUSED(event))
346 {
347 m_dataViewListCtrlParam->DeleteAllItems();
348
349 wxTextFile file;
350 file.Open(m_filePicker->GetPath());
351 wxVector<wxVariant> data;
352
353 for (int i = 0; i < file.GetLineCount(); i++) {
354 wxArrayString buf = wxSplit(file.GetLine(i), ',', '\\');
355
356 data.push_back(wxVariant(buf[0]));
357
358 data.push_back(wxVariant(buf[1]));
359 data.push_back(wxVariant(buf[2]));
360
361 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectSplMask.x))); // x1
362 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectSplMask.y))); // y1
363 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectSplMask.width))); // w1
364 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectSplMask.height))); // h2
365 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn1Mask.x))); // x2
366 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn1Mask.y))); // y2
367 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn1Mask.width))); // w2
368 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn1Mask.height))); // h2
369 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn2Mask.x))); // x3
370 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn2Mask.y))); // y3
371 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn2Mask.width))); // w3
372 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn2Mask.height))); // h3
373 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn3Mask.x))); // x4
374 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn3Mask.y))); // y4
375 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn3Mask.width))); // w4
376 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn3Mask.height))); // h4
377 data.push_back(wxVariant(wxEmptyString)); // changed time
378
379 for (int j = 3; j < buf.GetCount(); j++) data[j] = buf[j];
380 m_dataViewListCtrlParam->AppendItem(data);
381
382 data.clear();
383 }
384 file.Close();
385
386 m_dataViewListCtrlParam->SelectRow(0);
387 ShowImages();
388 }
389
390 void MergeFrame::OnMaskLocSet(wxCommandEvent& WXUNUSED(event))
391 {
392 MaskLocSet();
393 }
394
395 void MergeFrame::OnSelectData(wxDataViewEvent& WXUNUSED(event))
396 {
397 ShowImages();
398 }
399
400 void MergeFrame::OnWrite(wxCommandEvent& WXUNUSED(event))
401 {
402 SaveParams();
403 wxMessageBox(wxT("data saved."));
404 }
405
406 void MergeFrame::OnPrint(wxCommandEvent& WXUNUSED(event))
407 {
408 wxString html = wxT("<html><body>\n");
409
410 int r = m_dataViewListCtrlParam->GetSelectedRow();
411 if (r == wxNOT_FOUND) {
412 wxMessageBox(wxT("no item selected."));
413 return;
414 }
415 wxString dirno = m_dataViewListCtrlParam->GetTextValue(r, 0);
416
417 wxRect mask1, mask2, mask3, mask4;
418 GetItemMaskLoc(r, &mask1, &mask2, &mask3, &mask4);
419
420 wxString dir = m_workdir + wxFILE_SEP_PATH + dirno;
421 wxArrayString files;
422 wxDir::GetAllFiles(dir, &files, wxT("*.tif"), wxDIR_FILES);
423
424 wxString temp1 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_1.jpg"), r);
425 wxString temp2 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_2.tif"), r);
426 wxString temp3 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_3.tif"), r);
427 wxString temp4 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_4.tif"), r);
428
429 wxCopyFile(m_workdir + wxFILE_SEP_PATH + wxT("_") + dirno + wxT(".jpg"), temp1);
430 DoRealMask(files[2], temp2, mask1, ZeroRect());
431 DoRealMask(files[3], temp3, mask3, mask4);
432 DoRealMask(files[4], temp4, mask2, ZeroRect());
433
434 wxString imgsz = wxString::Format(wxT("\" width=\"%d\" height=\"%d\""), 750 * m_zoom / 100, 1060 * m_zoom / 100);
435
436 html += wxT("<img src=\"" + temp1 + imgsz + "/>\n");
437 html += wxT("<img src=\"" + temp2 + imgsz + "/>\n");
438 html += wxT("<img src=\"" + temp3 + imgsz + "/>\n");
439 html += wxT("<img src=\"" + temp4 + imgsz + "/>\n");
440 html += wxT("</body></html>");
441
442 // start printing
443 wxPrintDialogData pd;
444 wxPrinter p(&pd);
445
446 wxHtmlPrintout hpout(wxT("Merger"));
447 hpout.SetMargins(-5, -5, -5, -5, 0);
448 hpout.SetHtmlText(html, wxEmptyString, false);
449
450 if (!p.Print(NULL, &hpout, true)) {
451 if (wxPrinter::GetLastError() == wxPRINTER_ERROR)
452 wxMessageBox(wxT("print problem."));
453 else
454 wxMessageBox(wxT("print canceled."));
455 }
456 }
457
458 void MergeFrame::OnPrintAll(wxCommandEvent& WXUNUSED(event))
459 {
460 int n = m_dataViewListCtrlParam->GetItemCount();
461 m_gauge->SetRange(n);
462 m_gauge->SetValue(0);
463
464 wxString html = wxT("<html><body>\n");
465 int page = 1;
466 for (int r = 0; r < n; r++) {
467 wxString dirno = m_dataViewListCtrlParam->GetTextValue(r, 0);
468
469 wxRect mask1, mask2, mask3, mask4;
470 GetItemMaskLoc(r, &mask1, &mask2, &mask3, &mask4);
471
472 wxString dir = m_workdir + wxFILE_SEP_PATH + dirno;
473 wxArrayString files;
474 wxDir::GetAllFiles(dir, &files, wxT("*.tif"), wxDIR_FILES);
475
476 wxString temp1 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_1.jpg"), r);
477 wxString temp2 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_2.tif"), r);
478 wxString temp3 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_3.tif"), r);
479 wxString temp4 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_4.tif"), r);
480
481 wxCopyFile(m_workdir + wxFILE_SEP_PATH + wxT("_") + dirno + wxT(".jpg"), temp1);
482 DoRealMask(files[2], temp2, mask1, ZeroRect());
483 DoRealMask(files[3], temp3, mask3, mask4);
484 DoRealMask(files[4], temp4, mask2, ZeroRect());
485
486 wxString imgszl = wxString::Format(wxT("\" width=\"%d\" height=\"%d\""), 750 * m_zoom / 100, 1060 * m_zoom / 100);
487 wxString imgszr = wxString::Format(wxT("\" width=\"%d\" height=\"%d\""), 750 * m_zoom / 100, 1040 * m_zoom / 100);
488
489 html += wxT("<font size=-2>");
490 html += wxT("<p align=left>");
491 html += wxT("<img src=\"" + temp1 + imgszl + "/>\n");
492 html += wxT("<img src=\"" + temp2 + imgszr + "/>\n");
493 html += wxT("</p>");
494
495 html += wxT("<p align=left>");
496 html += wxString::Format(wxT("  - %02d -"), page++);
497 html += wxT("</p>");
498
499 html += wxT("<p align=right>");
500 html += wxT("<img src=\"" + temp3 + imgszl + "/>\n");
501 html += wxT("<img src=\"" + temp4 + imgszr + "/>\n");
502 html += wxT("</p>");
503
504 html += wxT("<p align=left>");
505 html += wxString::Format(wxT("  - %02d -"), page++);
506 html += wxT("</p>");
507 html += wxT("</font>");
508
509 m_gauge->SetValue(r + 1);
510 }
511 html += wxT("</body></html>");
512 m_gauge->SetValue(0);
513
514 // start printing
515 wxPrintDialogData pd;
516 wxPrinter p(&pd);
517
518 wxHtmlPrintout hpout(wxT("Merger - batch mode"));
519 hpout.SetMargins(-5, -5, -5, -5, 0);
520 hpout.SetHtmlText(html, wxEmptyString, false);
521
522 if (!p.Print(NULL, &hpout, true)) {
523 if (wxPrinter::GetLastError() == wxPRINTER_ERROR)
524 wxMessageBox(wxT("print problem."));
525 else
526 wxMessageBox(wxT("print canceled."));
527 }
528
529 wxMessageDialog dlg(this, wxT("設定を保存しますか?"), wxT("Question ?"), wxYES_NO);
530 if (dlg.ShowModal() == wxID_YES) {
531 SaveParams();
532 wxMessageBox(wxT("data saved."));
533 }
534 }
535