Mercurial > mercurial > hgweb_kaigo.hg.cgi
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/horori/merger/src/merger.cpp Mon May 24 21:32:58 2021 +0900 @@ -0,0 +1,535 @@ +// 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.")); + } +} +