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