Mercurial > mercurial > hgweb_kaigo.hg.cgi
view 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 |
line wrap: on
line source
// Filename : merger.cpp // Last Change: 2020-05-21 木 15:18:24. // #include <wx/dir.h> #include <wx/textfile.h> #include <wx/msgdlg.h> #include <wx/fileconf.h> #include <wx/html/htmprint.h> #include "utils.h" #include "merger.h" MergeFrame::MergeFrame(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxFrame(parent, id, title, pos, size, style) { CreateControls(); SetAccelerator(); LoadDefaultParams(); InitializeControlsValue(); m_zoom = 102; // Connect Events m_filePicker->Connect(wxEVT_COMMAND_FILEPICKER_CHANGED, wxFileDirPickerEventHandler(MergeFrame::OnFileChanged), NULL, this); m_buttonSet->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnMaskLocSet), NULL, this); m_dataViewListCtrlParam->Connect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(MergeFrame::OnSelectData), NULL, this); m_buttonWrite->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnWrite), NULL, this); m_buttonPrint->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnPrint), NULL, this); m_buttonPrintAll->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnPrintAll), NULL, this); m_buttonAclS->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnAclS), NULL, this); } MergeFrame::~MergeFrame() { m_filePicker->Disconnect(wxEVT_COMMAND_FILEPICKER_CHANGED, wxFileDirPickerEventHandler(MergeFrame::OnFileChanged), NULL, this); m_buttonSet->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnMaskLocSet), NULL, this); m_dataViewListCtrlParam->Disconnect(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED, wxDataViewEventHandler(MergeFrame::OnSelectData), NULL, this); m_buttonWrite->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnWrite), NULL, this); m_buttonPrint->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnPrint), NULL, this); m_buttonPrintAll->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnPrintAll), NULL, this); m_buttonAclS->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MergeFrame::OnAclS), NULL, this); } /* Functions */ void MergeFrame::CreateControls() { this->SetIcon(wxIcon(wxT("sample"))); this->SetSizeHints(wxDefaultSize, wxDefaultSize); this->SetBackgroundColour(wxColour(240, 140, 100)); wxGridBagSizer* gbSizer = new wxGridBagSizer(0, 0); gbSizer->SetFlexibleDirection(wxBOTH); gbSizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); m_staticTextCSV = new wxStaticText(this, wxID_ANY, wxT("CSVファイル"), wxDefaultPosition, wxDefaultSize, 0); gbSizer->Add(m_staticTextCSV, wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5); 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); gbSizer->Add(m_filePicker, wxGBPosition(0, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_gauge = new wxGauge(this, wxID_ANY, 40, wxDefaultPosition, wxSize(100, 20), wxGA_HORIZONTAL); m_gauge->SetValue(0); gbSizer->Add(m_gauge, wxGBPosition(0, 2), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); m_staticTextSpl = new wxStaticText(this, wxID_ANY, wxT("特記"), wxDefaultPosition, wxDefaultSize, 0); gbSizer->Add(m_staticTextSpl, wxGBPosition(1, 0), wxGBSpan(1, 1), wxALL|wxALIGN_RIGHT, 5); m_lookwinSpl = new LookWindow(this, wxID_ANY, wxDefaultPosition, wxSize(1000, 150), 0); gbSizer->Add(m_lookwinSpl, wxGBPosition(1, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_staticTextOpn1 = new wxStaticText(this, wxID_ANY, wxT("意見書1"), wxDefaultPosition, wxDefaultSize, 0); gbSizer->Add(m_staticTextOpn1, wxGBPosition(2, 0), wxGBSpan(1, 1), wxALL|wxALIGN_RIGHT, 5); m_lookwinOpn1 = new LookWindow(this, wxID_ANY, wxDefaultPosition, wxSize(1000, 150), 0); gbSizer->Add(m_lookwinOpn1, wxGBPosition(2, 1), wxGBSpan(1, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_staticTextOpn2 = new wxStaticText(this, wxID_ANY, wxT("意見書2"), wxDefaultPosition, wxDefaultSize, 0); gbSizer->Add(m_staticTextOpn2, wxGBPosition(3, 0), wxGBSpan(2, 1), wxALL|wxALIGN_RIGHT, 5); m_lookwinOpn2 = new LookWindow(this, wxID_ANY, wxDefaultPosition, wxSize(1000, 450), 0); gbSizer->Add(m_lookwinOpn2, wxGBPosition(3, 1), wxGBSpan(3, 1), wxALL|wxALIGN_CENTER_VERTICAL, 5); m_buttonAclS = new wxButton(this, ID_NEXT, wxT("Acl_S"), wxDefaultPosition, wxDefaultSize, 0); m_buttonAclS->Hide(); gbSizer->Add(m_buttonAclS, wxGBPosition(4, 2), wxGBSpan(1, 1), wxALL, 5); m_buttonSet = new wxButton(this, wxID_ANY, wxT("マスク位置セット"), wxDefaultPosition, wxSize(100, -1), 0); m_buttonSet->SetBackgroundColour(wxColour(255, 180, 150)); gbSizer->Add(m_buttonSet, wxGBPosition(5, 2), wxGBSpan(1, 1), wxALL|wxALIGN_BOTTOM, 5); m_staticTextMask = new wxStaticText(this, wxID_ANY, wxT("マスク位置"), wxDefaultPosition, wxDefaultSize, 0); gbSizer->Add(m_staticTextMask, wxGBPosition(6, 0), wxGBSpan(3, 1), wxALL|wxALIGN_RIGHT, 5); m_dataViewListCtrlParam = new wxDataViewListCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(1000, 300), wxDV_ROW_LINES); m_dataViewListColumnNo = m_dataViewListCtrlParam->AppendTextColumn(wxT("No"), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_CENTER), 0); m_dataViewListColumnHno = m_dataViewListCtrlParam->AppendTextColumn(wxT("被保険者番号"), wxDATAVIEW_CELL_INERT, 100, static_cast<wxAlignment>(wxALIGN_CENTER), 0); m_dataViewListColumnName = m_dataViewListCtrlParam->AppendTextColumn(wxT(" 氏名"), wxDATAVIEW_CELL_INERT, 120, static_cast<wxAlignment>(wxALIGN_LEFT), wxDATAVIEW_COL_RESIZABLE); m_dataViewListColumnX1 = m_dataViewListCtrlParam->AppendTextColumn(wxT("x1 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnY1 = m_dataViewListCtrlParam->AppendTextColumn(wxT("y1 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnW1 = m_dataViewListCtrlParam->AppendTextColumn(wxT("w1 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnH1 = m_dataViewListCtrlParam->AppendTextColumn(wxT("h1 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnX2 = m_dataViewListCtrlParam->AppendTextColumn(wxT("x2 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnY2 = m_dataViewListCtrlParam->AppendTextColumn(wxT("y2 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnW2 = m_dataViewListCtrlParam->AppendTextColumn(wxT("w2 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnH2 = m_dataViewListCtrlParam->AppendTextColumn(wxT("h2 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnX3 = m_dataViewListCtrlParam->AppendTextColumn(wxT("x3 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnY3 = m_dataViewListCtrlParam->AppendTextColumn(wxT("y3 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnW3 = m_dataViewListCtrlParam->AppendTextColumn(wxT("w3 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnH3 = m_dataViewListCtrlParam->AppendTextColumn(wxT("h3 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnX4 = m_dataViewListCtrlParam->AppendTextColumn(wxT("x4 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnY4 = m_dataViewListCtrlParam->AppendTextColumn(wxT("y4 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnW4 = m_dataViewListCtrlParam->AppendTextColumn(wxT("w4 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnH4 = m_dataViewListCtrlParam->AppendTextColumn(wxT("h4 "), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_RIGHT), 0); m_dataViewListColumnTime = m_dataViewListCtrlParam->AppendTextColumn(wxT("修正時刻"), wxDATAVIEW_CELL_INERT, 40, static_cast<wxAlignment>(wxALIGN_CENTER), 0); m_dataViewListCtrlParam->SetAlternateRowColour(wxColour(255, 200, 180)) ; gbSizer->Add(m_dataViewListCtrlParam, wxGBPosition(6, 1), wxGBSpan(4, 1), wxALL|wxEXPAND, 5); m_buttonWrite = new wxButton(this, wxID_ANY, wxT("設定保存"), wxDefaultPosition, wxSize(100, -1), 0); m_buttonWrite->SetBackgroundColour(wxColour(255, 160, 120)); gbSizer->Add(m_buttonWrite, wxGBPosition(6, 2), wxGBSpan(1, 1), wxALL, 5); gbSizer->Add(0, 210, wxGBPosition(7, 2), wxGBSpan(1, 1), wxEXPAND, 5); m_buttonPrint = new wxButton(this, wxID_ANY, wxT("印刷"), wxDefaultPosition, wxSize(100, -1), 0); m_buttonPrint->SetBackgroundColour(wxColour(255, 205, 255)); gbSizer->Add(m_buttonPrint, wxGBPosition(8, 2), wxGBSpan(1, 1), wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM, 5); m_buttonPrintAll = new wxButton(this, wxID_ANY, wxT("すべて印刷"), wxDefaultPosition, wxSize(100, -1), 0); m_buttonPrintAll->SetBackgroundColour(wxColour(255, 175, 255)); gbSizer->Add(m_buttonPrintAll, wxGBPosition(9, 2), wxGBSpan(1, 1), wxALL|wxALIGN_BOTTOM, 5); this->SetSizer(gbSizer); this->Layout(); this->Centre(wxBOTH); } void MergeFrame::SetAccelerator() { wxAcceleratorEntry entries[1]; entries[0].Set(wxACCEL_NORMAL, (int)'S', ID_NEXT); /* entries[1].Set(wxACCEL_NORMAL, WXK_F1, wxID_HELP); entries[2].Set(wxACCEL_CTRL, (int)'Q', wxID_CLOSE); */ wxAcceleratorTable accel(1, entries); SetAcceleratorTable(accel); } void MergeFrame::InitializeControlsValue() { m_filePicker->SetPath(m_csv); wxString file = wxGetCwd() + wxFILE_SEP_PATH + wxT("image") + wxFILE_SEP_PATH + wxT("testpattern.tif"); m_lookwinSpl->SetDefaultFile(file); m_lookwinSpl->SetDefaultParams(m_rectSplLWin, 1); m_lookwinOpn1->SetDefaultFile(file); m_lookwinOpn1->SetDefaultParams(m_rectOpn1LWin, 1); m_lookwinOpn2->SetDefaultFile(file); m_lookwinOpn2->SetDefaultParams(m_rectOpn2LWin, 2); } void MergeFrame::LoadDefaultParams() { wxString conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("merger.conf"); wxFileConfig* conf = new wxFileConfig(wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE); conf->SetPath(wxT("/Misc")); conf->Read(wxT("workdir"), &m_workdir); conf->Read(wxT("csv"), &m_csv); wxString buf; conf->SetPath(wxT("/LookWin")); conf->Read(wxT("spl"), &buf); m_rectSplLWin = Geo2Rect(buf); conf->Read(wxT("opn1"), &buf); m_rectOpn1LWin = Geo2Rect(buf); conf->Read(wxT("opn2"), &buf); m_rectOpn2LWin = Geo2Rect(buf); conf->SetPath(wxT("/Mask")); conf->Read(wxT("spl"), &buf); m_rectSplMask = Geo2Rect(buf); conf->Read(wxT("opn1"), &buf); m_rectOpn1Mask = Geo2Rect(buf); conf->Read(wxT("opn2"), &buf); m_rectOpn2Mask = Geo2Rect(buf); conf->Read(wxT("opn3"), &buf); m_rectOpn3Mask = Geo2Rect(buf); delete conf; } void MergeFrame::MaskLocSet() { wxString x, y, w, h; int r = m_dataViewListCtrlParam->GetSelectedRow(); m_lookwinSpl->GetMaskLoc(1, &x, &y, &w, &h); m_dataViewListCtrlParam->SetTextValue(x, r, 3); m_dataViewListCtrlParam->SetTextValue(y, r, 4); m_dataViewListCtrlParam->SetTextValue(w, r, 5); m_dataViewListCtrlParam->SetTextValue(h, r, 6); m_lookwinOpn1->GetMaskLoc(1, &x, &y, &w, &h); m_dataViewListCtrlParam->SetTextValue(x, r, 7); m_dataViewListCtrlParam->SetTextValue(y, r, 8); m_dataViewListCtrlParam->SetTextValue(w, r, 9); m_dataViewListCtrlParam->SetTextValue(h, r, 10); m_lookwinOpn2->GetMaskLoc(1, &x, &y, &w, &h); m_dataViewListCtrlParam->SetTextValue(x, r, 11); m_dataViewListCtrlParam->SetTextValue(y, r, 12); m_dataViewListCtrlParam->SetTextValue(w, r, 13); m_dataViewListCtrlParam->SetTextValue(h, r, 14); m_lookwinOpn2->GetMaskLoc(2, &x, &y, &w, &h); m_dataViewListCtrlParam->SetTextValue(x, r, 15); m_dataViewListCtrlParam->SetTextValue(y, r, 16); m_dataViewListCtrlParam->SetTextValue(w, r, 17); m_dataViewListCtrlParam->SetTextValue(h, r, 18); wxDateTime now = wxDateTime::Now(); wxString nowstr = now.Format(wxT("%H:%M:%S"), wxDateTime::GMT9 ).c_str(); m_dataViewListCtrlParam->SetTextValue(nowstr, r, 19); } void MergeFrame::ShowImages() { int r = m_dataViewListCtrlParam->GetSelectedRow(); wxString dirno = m_dataViewListCtrlParam->GetTextValue(r, 0); wxRect mask1, mask2, mask3, mask4; GetItemMaskLoc(r, &mask1, &mask2, &mask3, &mask4); wxString dir = m_workdir + wxFILE_SEP_PATH + dirno; wxArrayString files; wxDir::GetAllFiles(dir, &files, wxT("*.tif"), wxDIR_FILES); m_lookwinSpl->LoadImage(files[2]); m_lookwinOpn1->LoadImage(files[4]); m_lookwinOpn2->LoadImage(files[3]); m_lookwinSpl->SetMaskLoc(mask1, ZeroRect()); m_lookwinOpn1->SetMaskLoc(mask2, ZeroRect()); m_lookwinOpn2->SetMaskLoc(mask3, mask4); m_lookwinSpl->DoMask1(); m_lookwinOpn1->DoMask1(); m_lookwinOpn2->DoMask1(); m_lookwinOpn2->DoMask2(); } void MergeFrame::SaveParams() { if (m_dataViewListCtrlParam->GetItemCount() == 0) { wxMessageBox(wxT("no item.")); return; } wxArrayString lines; for (int r = 0; r < m_dataViewListCtrlParam->GetItemCount(); r++) { wxArrayString cols; for (int i = 0; i < 20; i++) { cols.Add(m_dataViewListCtrlParam->GetTextValue(r, i)); } lines.Add(wxJoin(cols, ',', '\\')); } wxTextFile file; file.Open(m_filePicker->GetPath()); file.Clear(); for (int i = 0; i < lines.GetCount(); i++) { file.AddLine(lines[i]); } file.Write(); file.Close(); } void MergeFrame::DoRealMask(wxString file, wxString maskfile, wxRect mask1, wxRect mask2) { wxCopyFile(file, maskfile, true); wxImage img_org(file, wxBITMAP_TYPE_TIFF); img_org.SetRGB(mask1, 255, 255, 255); img_org.SetRGB(mask2, 255, 255, 255); wxImage img_out = img_org.GetSubImage(wxRect(40, 0, 2400, 3508)); img_out.SetOption(wxIMAGE_OPTION_TIFF_COMPRESSION, 5); img_out.SaveFile(maskfile); } void MergeFrame::GetItemMaskLoc(int r, wxRect* mask1, wxRect* mask2, wxRect* mask3, wxRect* mask4) { wxString x1 = m_dataViewListCtrlParam->GetTextValue(r, 3); wxString y1 = m_dataViewListCtrlParam->GetTextValue(r, 4); wxString w1 = m_dataViewListCtrlParam->GetTextValue(r, 5); wxString h1 = m_dataViewListCtrlParam->GetTextValue(r, 6); *mask1 = Geo2Rect(wxString::Format(wxT("%sx%s+%s+%s"), w1, h1, x1, y1)); wxString x2 = m_dataViewListCtrlParam->GetTextValue(r, 7); wxString y2 = m_dataViewListCtrlParam->GetTextValue(r, 8); wxString w2 = m_dataViewListCtrlParam->GetTextValue(r, 9); wxString h2 = m_dataViewListCtrlParam->GetTextValue(r, 10); *mask2 = Geo2Rect(wxString::Format(wxT("%sx%s+%s+%s"), w2, h2, x2, y2)); wxString x3 = m_dataViewListCtrlParam->GetTextValue(r, 11); wxString y3 = m_dataViewListCtrlParam->GetTextValue(r, 12); wxString w3 = m_dataViewListCtrlParam->GetTextValue(r, 13); wxString h3 = m_dataViewListCtrlParam->GetTextValue(r, 14); *mask3 = Geo2Rect(wxString::Format(wxT("%sx%s+%s+%s"), w3, h3, x3, y3)); wxString x4 = m_dataViewListCtrlParam->GetTextValue(r, 15); wxString y4 = m_dataViewListCtrlParam->GetTextValue(r, 16); wxString w4 = m_dataViewListCtrlParam->GetTextValue(r, 17); wxString h4 = m_dataViewListCtrlParam->GetTextValue(r, 18); *mask4 = Geo2Rect(wxString::Format(wxT("%sx%s+%s+%s"), w4, h4, x4, y4)); } /* Event Handlers */ void MergeFrame::OnAclS(wxCommandEvent& WXUNUSED(event)) { int r = m_dataViewListCtrlParam->GetSelectedRow(); if (r == wxNOT_FOUND) return; MaskLocSet(); if (r == m_dataViewListCtrlParam->GetItemCount() - 1) return; m_dataViewListCtrlParam->SelectRow(r + 1); if (r > 3) m_dataViewListCtrlParam->LineDown(); ShowImages(); } void MergeFrame::OnFileChanged(wxFileDirPickerEvent& WXUNUSED(event)) { m_dataViewListCtrlParam->DeleteAllItems(); wxTextFile file; file.Open(m_filePicker->GetPath()); wxVector<wxVariant> data; for (int i = 0; i < file.GetLineCount(); i++) { wxArrayString buf = wxSplit(file.GetLine(i), ',', '\\'); data.push_back(wxVariant(buf[0])); data.push_back(wxVariant(buf[1])); data.push_back(wxVariant(buf[2])); data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectSplMask.x))); // x1 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectSplMask.y))); // y1 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectSplMask.width))); // w1 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectSplMask.height))); // h2 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn1Mask.x))); // x2 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn1Mask.y))); // y2 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn1Mask.width))); // w2 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn1Mask.height))); // h2 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn2Mask.x))); // x3 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn2Mask.y))); // y3 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn2Mask.width))); // w3 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn2Mask.height))); // h3 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn3Mask.x))); // x4 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn3Mask.y))); // y4 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn3Mask.width))); // w4 data.push_back(wxVariant(wxString::Format(wxT("%d"), m_rectOpn3Mask.height))); // h4 data.push_back(wxVariant(wxEmptyString)); // changed time for (int j = 3; j < buf.GetCount(); j++) data[j] = buf[j]; m_dataViewListCtrlParam->AppendItem(data); data.clear(); } file.Close(); m_dataViewListCtrlParam->SelectRow(0); ShowImages(); } void MergeFrame::OnMaskLocSet(wxCommandEvent& WXUNUSED(event)) { MaskLocSet(); } void MergeFrame::OnSelectData(wxDataViewEvent& WXUNUSED(event)) { ShowImages(); } void MergeFrame::OnWrite(wxCommandEvent& WXUNUSED(event)) { SaveParams(); wxMessageBox(wxT("data saved.")); } void MergeFrame::OnPrint(wxCommandEvent& WXUNUSED(event)) { wxString html = wxT("<html><body>\n"); int r = m_dataViewListCtrlParam->GetSelectedRow(); if (r == wxNOT_FOUND) { wxMessageBox(wxT("no item selected.")); return; } wxString dirno = m_dataViewListCtrlParam->GetTextValue(r, 0); wxRect mask1, mask2, mask3, mask4; GetItemMaskLoc(r, &mask1, &mask2, &mask3, &mask4); wxString dir = m_workdir + wxFILE_SEP_PATH + dirno; wxArrayString files; wxDir::GetAllFiles(dir, &files, wxT("*.tif"), wxDIR_FILES); wxString temp1 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_1.jpg"), r); wxString temp2 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_2.tif"), r); wxString temp3 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_3.tif"), r); wxString temp4 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_4.tif"), r); wxCopyFile(m_workdir + wxFILE_SEP_PATH + wxT("_") + dirno + wxT(".jpg"), temp1); DoRealMask(files[2], temp2, mask1, ZeroRect()); DoRealMask(files[3], temp3, mask3, mask4); DoRealMask(files[4], temp4, mask2, ZeroRect()); wxString imgsz = wxString::Format(wxT("\" width=\"%d\" height=\"%d\""), 750 * m_zoom / 100, 1060 * m_zoom / 100); html += wxT("<img src=\"" + temp1 + imgsz + "/>\n"); html += wxT("<img src=\"" + temp2 + imgsz + "/>\n"); html += wxT("<img src=\"" + temp3 + imgsz + "/>\n"); html += wxT("<img src=\"" + temp4 + imgsz + "/>\n"); html += wxT("</body></html>"); // start printing wxPrintDialogData pd; wxPrinter p(&pd); wxHtmlPrintout hpout(wxT("Merger")); hpout.SetMargins(-5, -5, -5, -5, 0); hpout.SetHtmlText(html, wxEmptyString, false); if (!p.Print(NULL, &hpout, true)) { if (wxPrinter::GetLastError() == wxPRINTER_ERROR) wxMessageBox(wxT("print problem.")); else wxMessageBox(wxT("print canceled.")); } } void MergeFrame::OnPrintAll(wxCommandEvent& WXUNUSED(event)) { int n = m_dataViewListCtrlParam->GetItemCount(); m_gauge->SetRange(n); m_gauge->SetValue(0); wxString html = wxT("<html><body>\n"); int page = 1; for (int r = 0; r < n; r++) { wxString dirno = m_dataViewListCtrlParam->GetTextValue(r, 0); wxRect mask1, mask2, mask3, mask4; GetItemMaskLoc(r, &mask1, &mask2, &mask3, &mask4); wxString dir = m_workdir + wxFILE_SEP_PATH + dirno; wxArrayString files; wxDir::GetAllFiles(dir, &files, wxT("*.tif"), wxDIR_FILES); wxString temp1 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_1.jpg"), r); wxString temp2 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_2.tif"), r); wxString temp3 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_3.tif"), r); wxString temp4 = m_workdir + wxFILE_SEP_PATH + wxString::Format(wxT("temp%02d_4.tif"), r); wxCopyFile(m_workdir + wxFILE_SEP_PATH + wxT("_") + dirno + wxT(".jpg"), temp1); DoRealMask(files[2], temp2, mask1, ZeroRect()); DoRealMask(files[3], temp3, mask3, mask4); DoRealMask(files[4], temp4, mask2, ZeroRect()); wxString imgszl = wxString::Format(wxT("\" width=\"%d\" height=\"%d\""), 750 * m_zoom / 100, 1060 * m_zoom / 100); wxString imgszr = wxString::Format(wxT("\" width=\"%d\" height=\"%d\""), 750 * m_zoom / 100, 1040 * m_zoom / 100); html += wxT("<font size=-2>"); html += wxT("<p align=left>"); html += wxT("<img src=\"" + temp1 + imgszl + "/>\n"); html += wxT("<img src=\"" + temp2 + imgszr + "/>\n"); html += wxT("</p>"); html += wxT("<p align=left>"); html += wxString::Format(wxT(" - %02d -"), page++); html += wxT("</p>"); html += wxT("<p align=right>"); html += wxT("<img src=\"" + temp3 + imgszl + "/>\n"); html += wxT("<img src=\"" + temp4 + imgszr + "/>\n"); html += wxT("</p>"); html += wxT("<p align=left>"); html += wxString::Format(wxT(" - %02d -"), page++); html += wxT("</p>"); html += wxT("</font>"); m_gauge->SetValue(r + 1); } html += wxT("</body></html>"); m_gauge->SetValue(0); // start printing wxPrintDialogData pd; wxPrinter p(&pd); wxHtmlPrintout hpout(wxT("Merger - batch mode")); hpout.SetMargins(-5, -5, -5, -5, 0); hpout.SetHtmlText(html, wxEmptyString, false); if (!p.Print(NULL, &hpout, true)) { if (wxPrinter::GetLastError() == wxPRINTER_ERROR) wxMessageBox(wxT("print problem.")); else wxMessageBox(wxT("print canceled.")); } wxMessageDialog dlg(this, wxT("設定を保存しますか?"), wxT("Question ?"), wxYES_NO); if (dlg.ShowModal() == wxID_YES) { SaveParams(); wxMessageBox(wxT("data saved.")); } }