Mercurial > mercurial > hgweb_kaigo.hg.cgi
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 |
