/*************************************************************************** * Name: PlottWareControlMain.cpp * Purpose: Code for Application Frame * Author: Fandly Gergo (fandlygergo@gmail.hu) * Created: 2017-11-25 * Copyright: Copyright (C) 2017 Fandly Gergo (systemtest.tk) * License: This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . **************************************************************************/ #include "PlottWareControlMain.h" #include #include #include "version.h" #include "SettingDialog.h" #include "imageViewer.h" #include "GcodeEditorDialog.h" //(*InternalHeaders(PlottWareControlFrame) #include #include #include #include #include #include #include //*) //helper functions enum wxbuildinfoformat { short_f, long_f }; wxString wxbuildinfo(wxbuildinfoformat format) { wxString wxbuild(wxVERSION_STRING); if (format == long_f ) { #if defined(__WXMSW__) wxbuild << _T("-Windows"); #elif defined(__UNIX__) wxbuild << _T("-Linux"); #endif #if wxUSE_UNICODE wxbuild << _T("-Unicode build"); #else wxbuild << _T("-ANSI build"); #endif // wxUSE_UNICODE } return wxbuild; } //(*IdInit(PlottWareControlFrame) const long PlottWareControlFrame::ID_BUTTON1 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT1 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON2 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON3 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON4 = wxNewId(); const long PlottWareControlFrame::ID_PANEL2 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT2 = wxNewId(); const long PlottWareControlFrame::ID_LISTBOX1 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON5 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON6 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON9 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON23 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON24 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT25 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT26 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT27 = wxNewId(); const long PlottWareControlFrame::ID_TEXTCTRL2 = wxNewId(); const long PlottWareControlFrame::ID_SPINCTRL1 = wxNewId(); const long PlottWareControlFrame::ID_SPINCTRL2 = wxNewId(); const long PlottWareControlFrame::ID_SPINCTRL3 = wxNewId(); const long PlottWareControlFrame::ID_SPINCTRL4 = wxNewId(); const long PlottWareControlFrame::ID_SPINCTRL5 = wxNewId(); const long PlottWareControlFrame::ID_SPINCTRL6 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT4 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT5 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT3 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT7 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT9 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT8 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT10 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT6 = wxNewId(); const long PlottWareControlFrame::ID_PANEL3 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT12 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT11 = wxNewId(); const long PlottWareControlFrame::ID_RADIOBUTTON1 = wxNewId(); const long PlottWareControlFrame::ID_RADIOBUTTON2 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT13 = wxNewId(); const long PlottWareControlFrame::ID_SLIDER1 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT14 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT15 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT16 = wxNewId(); const long PlottWareControlFrame::ID_CHOICE1 = wxNewId(); const long PlottWareControlFrame::ID_CHOICE2 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON25 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON8 = wxNewId(); const long PlottWareControlFrame::ID_PANEL4 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT17 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON10 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON12 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON13 = wxNewId(); const long PlottWareControlFrame::ID_PANEL5 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT18 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT19 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT20 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT21 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON7 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON16 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON17 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON18 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON19 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON20 = wxNewId(); const long PlottWareControlFrame::ID_CHOICE3 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT22 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON21 = wxNewId(); const long PlottWareControlFrame::ID_SPINCTRL7 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT24 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT23 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT28 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT29 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT30 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT32 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT33 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT31 = wxNewId(); const long PlottWareControlFrame::ID_TEXTCTRL1 = wxNewId(); const long PlottWareControlFrame::ID_LISTBOX2 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT34 = wxNewId(); const long PlottWareControlFrame::ID_PANEL1 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON11 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON14 = wxNewId(); const long PlottWareControlFrame::ID_BUTTON15 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT35 = wxNewId(); const long PlottWareControlFrame::ID_GAUGE1 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT36 = wxNewId(); const long PlottWareControlFrame::ID_STATICTEXT37 = wxNewId(); const long PlottWareControlFrame::ID_PANEL6 = wxNewId(); const long PlottWareControlFrame::ID_NOTEBOOK2 = wxNewId(); const long PlottWareControlFrame::MenuSettingItem = wxNewId(); const long PlottWareControlFrame::MenuQuitItem = wxNewId(); const long PlottWareControlFrame::idMenuAbout = wxNewId(); const long PlottWareControlFrame::ID_STATUSBAR1 = wxNewId(); const long PlottWareControlFrame::ID_MESSAGEDIALOG1 = wxNewId(); const long PlottWareControlFrame::ID_TIMER1 = wxNewId(); //*) BEGIN_EVENT_TABLE(PlottWareControlFrame,wxFrame) //(*EventTable(PlottWareControlFrame) //*) END_EVENT_TABLE() PlottWareControlFrame::PlottWareControlFrame(wxWindow* parent,wxWindowID id) { settings=new Settings(); project=NULL; //(*Initialize(PlottWareControlFrame) wxMenuItem* MenuItem2; wxMenuItem* MenuItem1; wxMenu* Menu1; wxMenuBar* MenuBar1; wxMenu* Menu2; Create(parent, wxID_ANY, _("PlottWareControl"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("wxID_ANY")); SetClientSize(wxSize(473,543)); SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); { wxIcon FrameIcon; FrameIcon.CopyFromBitmap(wxBitmap(wxImage(_T(".\\res\\icon.bmp")))); SetIcon(FrameIcon); } MenuChanger = new wxNotebook(this, ID_NOTEBOOK2, wxPoint(680,72), wxSize(475,536), 0, _T("ID_NOTEBOOK2")); MenuChangerProjectPage = new wxPanel(MenuChanger, ID_PANEL2, wxDefaultPosition, wxSize(467,421), wxTAB_TRAVERSAL, _T("ID_PANEL2")); MenuChangerProjectPage->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); ProjNewButton = new wxButton(MenuChangerProjectPage, ID_BUTTON1, _("New"), wxPoint(16,56), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1")); ProjNewButton->SetToolTip(_("Create new project")); StaticText1 = new wxStaticText(MenuChangerProjectPage, ID_STATICTEXT1, _("Project"), wxPoint(16,16), wxDefaultSize, 0, _T("ID_STATICTEXT1")); wxFont StaticText1Font(14,wxFONTFAMILY_SWISS,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL,false,wxEmptyString,wxFONTENCODING_DEFAULT); StaticText1->SetFont(StaticText1Font); ProjOpenButton = new wxButton(MenuChangerProjectPage, ID_BUTTON2, _("Open"), wxPoint(104,56), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON2")); ProjOpenButton->SetToolTip(_("Open an existing project")); ProjSaveButton = new wxButton(MenuChangerProjectPage, ID_BUTTON3, _("Save"), wxPoint(192,56), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON3")); ProjSaveButton->Disable(); ProjSaveButton->SetToolTip(_("Save current project")); ProjCloseButton = new wxButton(MenuChangerProjectPage, ID_BUTTON4, _("Close"), wxPoint(280,56), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON4")); ProjCloseButton->Disable(); ProjCloseButton->SetToolTip(_("Close current project")); MenuChangerImagesPage = new wxPanel(MenuChanger, ID_PANEL3, wxDefaultPosition, wxSize(467,479), wxTAB_TRAVERSAL, _T("ID_PANEL3")); MenuChangerImagesPage->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); StaticText2 = new wxStaticText(MenuChangerImagesPage, ID_STATICTEXT2, _("Images"), wxPoint(16,16), wxDefaultSize, 0, _T("ID_STATICTEXT2")); wxFont StaticText2Font(14,wxFONTFAMILY_SWISS,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL,false,wxEmptyString,wxFONTENCODING_DEFAULT); StaticText2->SetFont(StaticText2Font); ImagesImageListBox = new wxListBox(MenuChangerImagesPage, ID_LISTBOX1, wxPoint(24,56), wxSize(120,168), 0, 0, 0, wxDefaultValidator, _T("ID_LISTBOX1")); ImagesAddButton = new wxButton(MenuChangerImagesPage, ID_BUTTON5, _("Add image"), wxPoint(160,56), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON5")); ImagesAddButton->Disable(); ImagesAddButton->SetToolTip(_("Load new image")); ImagesDeleteButton = new wxButton(MenuChangerImagesPage, ID_BUTTON6, _("Delete"), wxPoint(160,88), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON6")); ImagesDeleteButton->Disable(); ImagesDeleteButton->SetToolTip(_("Delete selected image")); ImagesPreviewButton = new wxButton(MenuChangerImagesPage, ID_BUTTON9, _("Combine"), wxPoint(16,464), wxSize(432,23), 0, wxDefaultValidator, _T("ID_BUTTON9")); ImagesPreviewButton->Disable(); ImagesPreviewButton->SetToolTip(_("Preview images on canvas")); ImagesImageListMoveUpButton = new wxButton(MenuChangerImagesPage, ID_BUTTON23, _("/\\"), wxPoint(160,168), wxSize(24,23), 0, wxDefaultValidator, _T("ID_BUTTON23")); ImagesImageListMoveUpButton->Disable(); ImagesImageListMoveDownButton = new wxButton(MenuChangerImagesPage, ID_BUTTON24, _("\\/"), wxPoint(160,200), wxSize(24,23), 0, wxDefaultValidator, _T("ID_BUTTON24")); ImagesImageListMoveDownButton->Disable(); StaticText24 = new wxStaticText(MenuChangerImagesPage, ID_STATICTEXT25, _("Size:"), wxPoint(24,248), wxDefaultSize, 0, _T("ID_STATICTEXT25")); ImagesSizeLabel = new wxStaticText(MenuChangerImagesPage, ID_STATICTEXT26, _("0x0"), wxPoint(88,248), wxSize(120,13), 0, _T("ID_STATICTEXT26")); StaticText25 = new wxStaticText(MenuChangerImagesPage, ID_STATICTEXT27, _("Scale:"), wxPoint(24,272), wxDefaultSize, 0, _T("ID_STATICTEXT27")); ImagesScaleText = new wxTextCtrl(MenuChangerImagesPage, ID_TEXTCTRL2, _("0"), wxPoint(88,264), wxSize(120,21), 0, wxDefaultValidator, _T("ID_TEXTCTRL2")); ImagesScaleText->Disable(); ImagesPositionXSpinner = new wxSpinCtrl(MenuChangerImagesPage, ID_SPINCTRL1, _T("0"), wxPoint(88,288), wxDefaultSize, 0, 0, 999999999, 0, _T("ID_SPINCTRL1")); ImagesPositionXSpinner->SetValue(_T("0")); ImagesPositionXSpinner->Disable(); ImagesPositionXSpinner->SetToolTip(_("X coordinate of image")); ImagesPositionYSpinner = new wxSpinCtrl(MenuChangerImagesPage, ID_SPINCTRL2, _T("0"), wxPoint(88,312), wxDefaultSize, 0, 0, 999999999, 0, _T("ID_SPINCTRL2")); ImagesPositionYSpinner->SetValue(_T("0")); ImagesPositionYSpinner->Disable(); ImagesPositionYSpinner->SetToolTip(_("X coordinate of image")); ImagesCropX1Spinner = new wxSpinCtrl(MenuChangerImagesPage, ID_SPINCTRL3, _T("0"), wxPoint(88,336), wxDefaultSize, 0, 0, 999999999, 0, _T("ID_SPINCTRL3")); ImagesCropX1Spinner->SetValue(_T("0")); ImagesCropX1Spinner->Disable(); ImagesCropX1Spinner->SetToolTip(_("X coordinate of top-left crop point")); ImagesCropY1Spinner = new wxSpinCtrl(MenuChangerImagesPage, ID_SPINCTRL4, _T("0"), wxPoint(88,360), wxDefaultSize, 0, 0, 999999999, 0, _T("ID_SPINCTRL4")); ImagesCropY1Spinner->SetValue(_T("0")); ImagesCropY1Spinner->Disable(); ImagesCropY1Spinner->SetToolTip(_("Y coordinate of top-left crop point")); ImagesCropX2Spinner = new wxSpinCtrl(MenuChangerImagesPage, ID_SPINCTRL5, _T("0"), wxPoint(88,384), wxDefaultSize, 0, 0, 999999999, 0, _T("ID_SPINCTRL5")); ImagesCropX2Spinner->SetValue(_T("0")); ImagesCropX2Spinner->Disable(); ImagesCropX2Spinner->SetToolTip(_("X coordinate of bottom-right crop point")); ImagesCropY2Spinner = new wxSpinCtrl(MenuChangerImagesPage, ID_SPINCTRL6, _T("0"), wxPoint(88,408), wxDefaultSize, 0, 0, 999999999, 0, _T("ID_SPINCTRL6")); ImagesCropY2Spinner->SetValue(_T("0")); ImagesCropY2Spinner->Disable(); ImagesCropY2Spinner->SetToolTip(_("Y coordinate of bottom-right crop point")); StaticText4 = new wxStaticText(MenuChangerImagesPage, ID_STATICTEXT4, _("X"), wxPoint(72,296), wxSize(8,13), 0, _T("ID_STATICTEXT4")); StaticText5 = new wxStaticText(MenuChangerImagesPage, ID_STATICTEXT5, _("Y"), wxPoint(72,320), wxDefaultSize, 0, _T("ID_STATICTEXT5")); StaticText3 = new wxStaticText(MenuChangerImagesPage, ID_STATICTEXT3, _("Position:"), wxPoint(24,296), wxDefaultSize, 0, _T("ID_STATICTEXT3")); StaticText7 = new wxStaticText(MenuChangerImagesPage, ID_STATICTEXT7, _("X1"), wxPoint(72,344), wxDefaultSize, 0, _T("ID_STATICTEXT7")); StaticText9 = new wxStaticText(MenuChangerImagesPage, ID_STATICTEXT9, _("Y1"), wxPoint(72,368), wxDefaultSize, 0, _T("ID_STATICTEXT9")); StaticText8 = new wxStaticText(MenuChangerImagesPage, ID_STATICTEXT8, _("X2"), wxPoint(72,392), wxDefaultSize, 0, _T("ID_STATICTEXT8")); StaticText10 = new wxStaticText(MenuChangerImagesPage, ID_STATICTEXT10, _("Y2"), wxPoint(72,416), wxDefaultSize, 0, _T("ID_STATICTEXT10")); StaticText6 = new wxStaticText(MenuChangerImagesPage, ID_STATICTEXT6, _("Crop:"), wxPoint(24,344), wxDefaultSize, 0, _T("ID_STATICTEXT6")); MenuChangerProcessingPage = new wxPanel(MenuChanger, ID_PANEL4, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL4")); MenuChangerProcessingPage->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); StaticText12 = new wxStaticText(MenuChangerProcessingPage, ID_STATICTEXT12, _("Retrival mode:"), wxPoint(16,56), wxDefaultSize, 0, _T("ID_STATICTEXT12")); StaticText11 = new wxStaticText(MenuChangerProcessingPage, ID_STATICTEXT11, _("Processing"), wxPoint(16,16), wxDefaultSize, 0, _T("ID_STATICTEXT11")); wxFont StaticText11Font(14,wxFONTFAMILY_SWISS,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL,false,wxEmptyString,wxFONTENCODING_DEFAULT); StaticText11->SetFont(StaticText11Font); ProcessingRetrAllRadio = new wxRadioButton(MenuChangerProcessingPage, ID_RADIOBUTTON1, _("All"), wxPoint(144,56), wxDefaultSize, wxRB_GROUP, wxDefaultValidator, _T("ID_RADIOBUTTON1")); ProcessingRetrAllRadio->SetValue(true); ProcessingRetrAllRadio->Disable(); ProcessingRetrAllRadio->SetToolTip(_("Retrive all borders")); ProcessingRetrExtRadio = new wxRadioButton(MenuChangerProcessingPage, ID_RADIOBUTTON2, _("External"), wxPoint(192,56), wxDefaultSize, 0, wxDefaultValidator, _T("ID_RADIOBUTTON2")); ProcessingRetrExtRadio->Disable(); ProcessingRetrExtRadio->SetToolTip(_("Retrive only the external border")); StaticText13 = new wxStaticText(MenuChangerProcessingPage, ID_STATICTEXT13, _("Canny threshold:"), wxPoint(16,88), wxDefaultSize, 0, _T("ID_STATICTEXT13")); ProcessingCannyThreshSlider = new wxSlider(MenuChangerProcessingPage, ID_SLIDER1, 100, 0, 255, wxPoint(144,80), wxDefaultSize, 0, wxDefaultValidator, _T("ID_SLIDER1")); ProcessingCannyThreshSlider->Disable(); ProcessingCannyThreshSlider->SetToolTip(_("Threshold for canny edge detection")); StaticText14 = new wxStaticText(MenuChangerProcessingPage, ID_STATICTEXT14, _("Coloring:"), wxPoint(16,136), wxDefaultSize, 0, _T("ID_STATICTEXT14")); StaticText15 = new wxStaticText(MenuChangerProcessingPage, ID_STATICTEXT15, _("Edge:"), wxPoint(144,136), wxSize(32,13), 0, _T("ID_STATICTEXT15")); StaticText16 = new wxStaticText(MenuChangerProcessingPage, ID_STATICTEXT16, _("Color:"), wxPoint(144,160), wxDefaultSize, 0, _T("ID_STATICTEXT16")); ProcessingColorLineSelect = new wxChoice(MenuChangerProcessingPage, ID_CHOICE1, wxPoint(184,128), wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE1")); ProcessingColorLineSelect->Disable(); ProcessingColorLineSelect->SetToolTip(_("Edge to be colored")); ProcessingColorColorSelect = new wxChoice(MenuChangerProcessingPage, ID_CHOICE2, wxPoint(184,152), wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE2")); ProcessingColorColorSelect->Append(_("Leave out")); ProcessingColorColorSelect->Disable(); ProcessingColorColorSelect->SetToolTip(_("Used color")); ProcessingColorForAllButton = new wxButton(MenuChangerProcessingPage, ID_BUTTON25, _("Set for all"), wxPoint(320,152), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON25")); ProcessingColorForAllButton->Disable(); ProcessingPreviewButton = new wxButton(MenuChangerProcessingPage, ID_BUTTON8, _("Process"), wxPoint(16,208), wxSize(440,23), 0, wxDefaultValidator, _T("ID_BUTTON8")); ProcessingPreviewButton->Disable(); ProcessingPreviewButton->SetToolTip(_("Preview the processed image")); MenuChangerGcodePage = new wxPanel(MenuChanger, ID_PANEL5, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL5")); MenuChangerGcodePage->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); StaticText17 = new wxStaticText(MenuChangerGcodePage, ID_STATICTEXT17, _("G code"), wxPoint(16,16), wxDefaultSize, 0, _T("ID_STATICTEXT17")); wxFont StaticText17Font(14,wxFONTFAMILY_SWISS,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL,false,wxEmptyString,wxFONTENCODING_DEFAULT); StaticText17->SetFont(StaticText17Font); GcodeGenerateButton = new wxButton(MenuChangerGcodePage, ID_BUTTON10, _("Generate"), wxPoint(16,56), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON10")); GcodeGenerateButton->Disable(); GcodeGenerateButton->SetToolTip(_("Generate G code")); GcodeEditButton = new wxButton(MenuChangerGcodePage, ID_BUTTON12, _("Edit"), wxPoint(104,56), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON12")); GcodeEditButton->Disable(); GcodeEditButton->SetToolTip(_("Edit generate G code")); GcodeExportButton = new wxButton(MenuChangerGcodePage, ID_BUTTON13, _("Export"), wxPoint(192,56), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON13")); GcodeExportButton->Disable(); GcodeExportButton->SetToolTip(_("Export G code to file")); MenuChangerPrintingPage = new wxPanel(MenuChanger, ID_PANEL6, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL6")); MenuChangerPrintingPage->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); StaticText18 = new wxStaticText(MenuChangerPrintingPage, ID_STATICTEXT18, _("Printing"), wxPoint(16,16), wxDefaultSize, 0, _T("ID_STATICTEXT18")); wxFont StaticText18Font(14,wxFONTFAMILY_SWISS,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL,false,wxEmptyString,wxFONTENCODING_DEFAULT); StaticText18->SetFont(StaticText18Font); Panel1 = new wxPanel(MenuChangerPrintingPage, ID_PANEL1, wxPoint(8,120), wxSize(440,280), wxTAB_TRAVERSAL, _T("ID_PANEL1")); Panel1->SetBackgroundColour(wxColour(224,224,224)); StaticText19 = new wxStaticText(Panel1, ID_STATICTEXT19, _("Printer"), wxPoint(8,8), wxDefaultSize, 0, _T("ID_STATICTEXT19")); wxFont StaticText19Font(12,wxFONTFAMILY_SWISS,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL,false,wxEmptyString,wxFONTENCODING_DEFAULT); StaticText19->SetFont(StaticText19Font); StaticText20 = new wxStaticText(Panel1, ID_STATICTEXT20, _("Status:"), wxPoint(88,8), wxDefaultSize, 0, _T("ID_STATICTEXT20")); PrintingPrinterStatusLabel = new wxStaticText(Panel1, ID_STATICTEXT21, _("Offline"), wxPoint(128,8), wxSize(48,13), 0, _T("ID_STATICTEXT21")); PrintingPrinterConnectButton = new wxButton(Panel1, ID_BUTTON7, _("Connect"), wxPoint(8,32), wxSize(72,23), 0, wxDefaultValidator, _T("ID_BUTTON7")); PrintingPrinterConnectButton->SetToolTip(_("Connect/Disconnect to the printer")); PrintingPrinterUpButton = new wxButton(Panel1, ID_BUTTON16, _("/\\"), wxPoint(208,40), wxSize(20,20), 0, wxDefaultValidator, _T("ID_BUTTON16")); PrintingPrinterUpButton->Disable(); PrintingPrinterDownButton = new wxButton(Panel1, ID_BUTTON17, _("\\/"), wxPoint(208,72), wxSize(20,20), 0, wxDefaultValidator, _T("ID_BUTTON17")); PrintingPrinterDownButton->Disable(); PrintingPrinterLeftButton = new wxButton(Panel1, ID_BUTTON18, _("<"), wxPoint(184,56), wxSize(20,20), 0, wxDefaultValidator, _T("ID_BUTTON18")); PrintingPrinterLeftButton->Disable(); wxFont PrintingPrinterLeftButtonFont(12,wxFONTFAMILY_SWISS,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL,false,_T("Arial"),wxFONTENCODING_DEFAULT); PrintingPrinterLeftButton->SetFont(PrintingPrinterLeftButtonFont); PrintingPrinterRightButton = new wxButton(Panel1, ID_BUTTON19, _(">"), wxPoint(232,56), wxSize(20,20), 0, wxDefaultValidator, _T("ID_BUTTON19")); PrintingPrinterRightButton->Disable(); wxFont PrintingPrinterRightButtonFont(12,wxFONTFAMILY_SWISS,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL,false,wxEmptyString,wxFONTENCODING_DEFAULT); PrintingPrinterRightButton->SetFont(PrintingPrinterRightButtonFont); PrintingPrinterHomeButton = new wxButton(Panel1, ID_BUTTON20, _("Home"), wxPoint(320,8), wxSize(50,23), 0, wxDefaultValidator, _T("ID_BUTTON20")); PrintingPrinterHomeButton->Disable(); PrintingPrinterHomeButton->SetToolTip(_("Home axises")); PrintingPrinterHeadSelect = new wxChoice(Panel1, ID_CHOICE3, wxPoint(320,32), wxSize(112,21), 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE3")); PrintingPrinterHeadSelect->SetSelection( PrintingPrinterHeadSelect->Append(_("No tool")) ); PrintingPrinterHeadSelect->Disable(); PrintingPrinterHeadSelect->SetToolTip(_("Select used drawing head")); StaticText21 = new wxStaticText(Panel1, ID_STATICTEXT22, _("Head:"), wxPoint(280,40), wxDefaultSize, 0, _T("ID_STATICTEXT22")); PrintingPrinterPowerButton = new wxButton(Panel1, ID_BUTTON21, _("Power"), wxPoint(384,8), wxSize(50,23), 0, wxDefaultValidator, _T("ID_BUTTON21")); PrintingPrinterPowerButton->Disable(); PrintingPrinterPowerButton->SetToolTip(_("Cycle power supply")); PrintingPrinterMoveSpinner = new wxSpinCtrl(Panel1, ID_SPINCTRL7, _T("25"), wxPoint(320,64), wxSize(48,21), 0, 0, 100, 25, _T("ID_SPINCTRL7")); PrintingPrinterMoveSpinner->SetValue(_T("25")); PrintingPrinterMoveSpinner->Disable(); PrintingPrinterMoveSpinner->SetToolTip(_("Amount in mm to move when button pressed")); StaticText23 = new wxStaticText(Panel1, ID_STATICTEXT24, _("Move:"), wxPoint(280,72), wxDefaultSize, 0, _T("ID_STATICTEXT24")); StaticText22 = new wxStaticText(Panel1, ID_STATICTEXT23, _("Power:"), wxPoint(88,32), wxDefaultSize, 0, _T("ID_STATICTEXT23")); PrintingPrinterPowerLabel = new wxStaticText(Panel1, ID_STATICTEXT28, wxEmptyString, wxPoint(128,32), wxSize(48,13), 0, _T("ID_STATICTEXT28")); StaticText26 = new wxStaticText(Panel1, ID_STATICTEXT29, _("X:"), wxPoint(8,64), wxDefaultSize, 0, _T("ID_STATICTEXT29")); StaticText27 = new wxStaticText(Panel1, ID_STATICTEXT30, _("Y:"), wxPoint(8,80), wxDefaultSize, 0, _T("ID_STATICTEXT30")); PrintingPrinterXLabel = new wxStaticText(Panel1, ID_STATICTEXT32, wxEmptyString, wxPoint(24,64), wxSize(48,13), 0, _T("ID_STATICTEXT32")); PrintingPrinterYLabel = new wxStaticText(Panel1, ID_STATICTEXT33, wxEmptyString, wxPoint(24,80), wxSize(48,13), 0, _T("ID_STATICTEXT33")); StaticText28 = new wxStaticText(Panel1, ID_STATICTEXT31, _("Console:"), wxPoint(8,120), wxDefaultSize, 0, _T("ID_STATICTEXT31")); PrintingPrinterConsole = new wxTextCtrl(Panel1, ID_TEXTCTRL1, wxEmptyString, wxPoint(64,112), wxSize(360,21), 0, wxDefaultValidator, _T("ID_TEXTCTRL1")); PrintingPrinterConsole->Disable(); PrintingPrinterLog = new wxListBox(Panel1, ID_LISTBOX2, wxPoint(8,160), wxSize(424,104), 0, 0, 0, wxDefaultValidator, _T("ID_LISTBOX2")); StaticText29 = new wxStaticText(Panel1, ID_STATICTEXT34, _("Log:"), wxPoint(8,144), wxDefaultSize, 0, _T("ID_STATICTEXT34")); PrintingPrintButton = new wxButton(MenuChangerPrintingPage, ID_BUTTON11, _("Print"), wxPoint(16,56), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON11")); PrintingPrintButton->Disable(); PrintingPrintButton->SetToolTip(_("Start printing")); PrintingStopButton = new wxButton(MenuChangerPrintingPage, ID_BUTTON14, _("Stop"), wxPoint(104,56), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON14")); PrintingStopButton->Disable(); PrintingStopButton->SetToolTip(_("Stop printing")); PrintingEmergencyButton = new wxButton(MenuChangerPrintingPage, ID_BUTTON15, _("Emergency stop"), wxPoint(320,16), wxSize(128,56), 0, wxDefaultValidator, _T("ID_BUTTON15")); PrintingEmergencyButton->Disable(); PrintingEmergencyButton->SetBackgroundColour(wxColour(248,31,90)); wxFont PrintingEmergencyButtonFont(10,wxFONTFAMILY_SWISS,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_BOLD,false,wxEmptyString,wxFONTENCODING_DEFAULT); PrintingEmergencyButton->SetFont(PrintingEmergencyButtonFont); PrintingEmergencyButton->SetToolTip(_("Reset printer immediately")); PrintingStatusLabel = new wxStaticText(MenuChangerPrintingPage, ID_STATICTEXT35, _("Print status:"), wxPoint(24,440), wxDefaultSize, 0, _T("ID_STATICTEXT35")); PrintingStatusLabel->Hide(); PrintingStatusGauge = new wxGauge(MenuChangerPrintingPage, ID_GAUGE1, 1, wxPoint(104,432), wxSize(336,36), 0, wxDefaultValidator, _T("ID_GAUGE1")); PrintingStatusGauge->Hide(); PrintingElapsedTimeLabelLabel = new wxStaticText(MenuChangerPrintingPage, ID_STATICTEXT36, _("Elapsed time:"), wxPoint(24,488), wxSize(72,13), 0, _T("ID_STATICTEXT36")); PrintingElapsedTimeLabelLabel->Hide(); PrintingElapsedTimeLabel = new wxStaticText(MenuChangerPrintingPage, ID_STATICTEXT37, _("00:00:00"), wxPoint(104,488), wxSize(336,13), 0, _T("ID_STATICTEXT37")); PrintingElapsedTimeLabel->Hide(); MenuChanger->AddPage(MenuChangerProjectPage, _("Project"), false); MenuChanger->AddPage(MenuChangerImagesPage, _("Images"), false); MenuChanger->AddPage(MenuChangerProcessingPage, _("Processing"), false); MenuChanger->AddPage(MenuChangerGcodePage, _("G code"), false); MenuChanger->AddPage(MenuChangerPrintingPage, _("Printing"), false); MenuBar1 = new wxMenuBar(); Menu1 = new wxMenu(); MenuItemSettings = new wxMenuItem(Menu1, MenuSettingItem, _("Settings\tCtrl-s"), _("Change settings"), wxITEM_NORMAL); Menu1->Append(MenuItemSettings); MenuItem1 = new wxMenuItem(Menu1, MenuQuitItem, _("Quit\tAlt-F4"), _("Quit the application"), wxITEM_NORMAL); Menu1->Append(MenuItem1); MenuBar1->Append(Menu1, _("&File")); Menu2 = new wxMenu(); MenuItem2 = new wxMenuItem(Menu2, idMenuAbout, _("About\tF1"), _("Show info about this application"), wxITEM_NORMAL); Menu2->Append(MenuItem2); MenuBar1->Append(Menu2, _("Help")); SetMenuBar(MenuBar1); StatusBar1 = new wxStatusBar(this, ID_STATUSBAR1, 0, _T("ID_STATUSBAR1")); int __wxStatusBarWidths_1[2] = { 375, 100 }; int __wxStatusBarStyles_1[2] = { wxSB_NORMAL, wxSB_NORMAL }; StatusBar1->SetFieldsCount(2,__wxStatusBarWidths_1); StatusBar1->SetStatusStyles(2,__wxStatusBarStyles_1); SetStatusBar(StatusBar1); FileDialog1 = new wxFileDialog(this, _("Select file"), wxEmptyString, wxEmptyString, wxFileSelectorDefaultWildcardStr, wxFD_DEFAULT_STYLE, wxDefaultPosition, wxDefaultSize, _T("wxFileDialog")); MessageDialog1 = new wxMessageDialog(this, wxEmptyString, _("Message"), wxOK|wxCANCEL, wxDefaultPosition); PrintingElapsedTimeCheckerTimer.SetOwner(this, ID_TIMER1); Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnProjNewButtonClick); Connect(ID_BUTTON4,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnProjCloseButtonClick); Connect(ID_LISTBOX1,wxEVT_COMMAND_LISTBOX_SELECTED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesImageListBoxSelect); Connect(ID_BUTTON5,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesAddButtonClick); Connect(ID_BUTTON6,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesDeleteButtonClick); Connect(ID_BUTTON9,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesPreviewButtonClick); Connect(ID_BUTTON23,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesImageListMoveUpButtonClick); Connect(ID_BUTTON24,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesImageListMoveDownButtonClick); Connect(ID_TEXTCTRL2,wxEVT_COMMAND_TEXT_UPDATED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesScaleTextText); Connect(ID_SPINCTRL1,wxEVT_COMMAND_SPINCTRL_UPDATED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesPositionXSpinnerChange); Connect(ID_SPINCTRL2,wxEVT_COMMAND_SPINCTRL_UPDATED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesPositionYSpinnerChange); Connect(ID_SPINCTRL3,wxEVT_COMMAND_SPINCTRL_UPDATED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesCropX1SpinnerChange); Connect(ID_SPINCTRL4,wxEVT_COMMAND_SPINCTRL_UPDATED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesCropY1SpinnerChange); Connect(ID_SPINCTRL5,wxEVT_COMMAND_SPINCTRL_UPDATED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesCropX2SpinnerChange); Connect(ID_SPINCTRL6,wxEVT_COMMAND_SPINCTRL_UPDATED,(wxObjectEventFunction)&PlottWareControlFrame::OnImagesCropY2SpinnerChange); Connect(ID_RADIOBUTTON1,wxEVT_COMMAND_RADIOBUTTON_SELECTED,(wxObjectEventFunction)&PlottWareControlFrame::OnProcessingRetrAllRadioSelect); Connect(ID_RADIOBUTTON2,wxEVT_COMMAND_RADIOBUTTON_SELECTED,(wxObjectEventFunction)&PlottWareControlFrame::OnProcessingRetrExtRadioSelect); Connect(ID_SLIDER1,wxEVT_SCROLL_TOP|wxEVT_SCROLL_BOTTOM|wxEVT_SCROLL_LINEUP|wxEVT_SCROLL_LINEDOWN|wxEVT_SCROLL_PAGEUP|wxEVT_SCROLL_PAGEDOWN|wxEVT_SCROLL_THUMBTRACK|wxEVT_SCROLL_THUMBRELEASE|wxEVT_SCROLL_CHANGED,(wxObjectEventFunction)&PlottWareControlFrame::OnProcessingCannyThreshSliderCmdScroll); Connect(ID_CHOICE1,wxEVT_COMMAND_CHOICE_SELECTED,(wxObjectEventFunction)&PlottWareControlFrame::OnProcessingColorLineSelectSelect); Connect(ID_CHOICE2,wxEVT_COMMAND_CHOICE_SELECTED,(wxObjectEventFunction)&PlottWareControlFrame::OnProcessingColorColorSelectSelect); Connect(ID_BUTTON25,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnProcessingColorForAllButtonClick); Connect(ID_BUTTON8,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnProcessingPreviewButtonClick); Connect(ID_BUTTON10,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnGcodeGenerateButtonClick); Connect(ID_BUTTON12,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnGcodeEditButtonClick); Connect(ID_BUTTON13,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnGcodeExportButtonClick); Connect(ID_BUTTON7,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingPrinterConnectButtonClick); Connect(ID_BUTTON16,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingPrinterUpButtonClick); Connect(ID_BUTTON17,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingPrinterDownButtonClick); Connect(ID_BUTTON18,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingPrinterLeftButtonClick); Connect(ID_BUTTON19,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingPrinterRightButtonClick); Connect(ID_BUTTON20,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingPrinterHomeButtonClick); Connect(ID_CHOICE3,wxEVT_COMMAND_CHOICE_SELECTED,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingPrinterHeadSelectSelect); Connect(ID_BUTTON21,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingPrinterPowerButtonClick); Connect(ID_TEXTCTRL1,wxEVT_COMMAND_TEXT_ENTER,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingPrinterConsoleTextEnter); Connect(ID_BUTTON11,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingPrintButtonClick); Connect(ID_BUTTON14,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingStopButtonClick); Connect(ID_BUTTON15,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingEmergencyButtonClick); Connect(MenuSettingItem,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&PlottWareControlFrame::OnMenuItemSettingsSelected); Connect(MenuQuitItem,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&PlottWareControlFrame::OnQuit); Connect(idMenuAbout,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&PlottWareControlFrame::OnAbout); Connect(ID_TIMER1,wxEVT_TIMER,(wxObjectEventFunction)&PlottWareControlFrame::OnPrintingElapsedTimeCheckerTimerTrigger); //*) for(int i=0; igetPrinter()->getPens().size(); i++){ ProcessingColorColorSelect->Append(getSettings()->getPrinter()->getPens().at(i)); } } Settings* PlottWareControlFrame::getSettings(){ return settings; } Project* PlottWareControlFrame::getProject(){ return project; } void PlottWareControlFrame::projectControlEnable(bool to){ ProjSaveButton->Enable(to); ProjCloseButton->Enable(to); ImagesImageListBox->Enable(to); ImagesAddButton->Enable(to); ImagesDeleteButton->Enable(to); ImagesImageListMoveUpButton->Enable(to); ImagesImageListMoveDownButton->Enable(to); ImagesScaleText->Enable(to); ImagesPositionXSpinner->Enable(to); ImagesPositionYSpinner->Enable(to); ImagesCropX1Spinner->Enable(to); ImagesCropY1Spinner->Enable(to); ImagesCropX2Spinner->Enable(to); ImagesCropY2Spinner->Enable(to); ProcessingRetrAllRadio->Enable(to); ProcessingRetrExtRadio->Enable(to); ProcessingCannyThreshSlider->Enable(to); ProcessingColorLineSelect->Enable(to); ProcessingColorColorSelect->Enable(to); ProcessingColorForAllButton->Enable(to); ProcessingPreviewButton->Enable(to); ImagesPreviewButton->Enable(to); GcodeGenerateButton->Enable(to); GcodeEditButton->Enable(to); GcodeExportButton->Enable(to); } void PlottWareControlFrame::printerControlEnable(bool to){ PrintingEmergencyButton->Enable(to); PrintingPrinterHomeButton->Enable(to); PrintingPrinterPowerButton->Enable(to); PrintingPrinterHeadSelect->Enable(to); PrintingPrinterMoveSpinner->Enable(to); PrintingPrinterUpButton->Enable(to); PrintingPrinterDownButton->Enable(to); PrintingPrinterRightButton->Enable(to); PrintingPrinterLeftButton->Enable(to); PrintingPrinterConsole->Enable(to); } void PlottWareControlFrame::printingControlShow(bool to){ PrintingStatusLabel->Show(to); PrintingStatusGauge->Show(to); PrintingElapsedTimeLabelLabel->Show(to); PrintingElapsedTimeLabel->Show(to); } PlottWareControlFrame::~PlottWareControlFrame() { //(*Destroy(PlottWareControlFrame) //*) } void PlottWareControlFrame::OnQuit(wxCommandEvent& event) { Close(); } void PlottWareControlFrame::OnAbout(wxCommandEvent& event) { std::string msg="PlottWareControl\nVersion: "; msg+=Version::FULLVERSION_STRING; msg+="\nBuild: "; msg+=std::to_string(Version::BUILDS_COUNT); msg+="\n\nWhen printing 10 pixe/mm (254 dpi)\n\nCopyright: Fandly Gergo Zoltan\n(fandlygergo@gmail.hu, systemtest.tk)\n\nLicense: GNU GPLv3 (www.gnu.org/licenses/gpl-3.0.en.html)"; wxMessageBox(msg, _("About")); } void PlottWareControlFrame::OnMenuItemSettingsSelected(wxCommandEvent& event) { SettingDialog *dialog=new SettingDialog(this, wxID_ANY, this); dialog->Show(true); } void PlottWareControlFrame::OnProjNewButtonClick(wxCommandEvent& event) { wxFileDialog newFileDialog(this, _("Select the location of new project"), "", "", "PlottWareControl project files (*.pwc)|*.pwc", wxFD_SAVE|wxFD_OVERWRITE_PROMPT); if(newFileDialog.ShowModal()==wxID_CANCEL){ event.Skip(); return; } project=new Project(getSettings(), std::string(newFileDialog.GetPath().mb_str())); if(!getProject()->newProj()){ wxMessageDialog(this, _("Error: Could not write file"), _("Error"), wxOK|wxCENTER|wxICON_ERROR).ShowModal(); event.Skip(); delete project; project=NULL; return; } projectControlEnable(true); } void PlottWareControlFrame::OnProjCloseButtonClick(wxCommandEvent& event) { getProject()->close(); delete project; project=NULL; projectControlEnable(false); } void PlottWareControlFrame::OnImagesAddButtonClick(wxCommandEvent& event) { wxFileDialog loadImageDialog(this, _("Open an image file"), "%userprofile%\pictures", "", "Image files (*.jpg;*jpeg;*.bpm;*.png)|*.jpg;*.jpeg;*.bmp;*.png;*.JPG;*.JPEG;*.BPM;*.PNG", wxFD_OPEN|wxFD_FILE_MUST_EXIST); if(loadImageDialog.ShowModal()==wxID_CANCEL){ event.Skip(); return; } Image img=Image(std::string(loadImageDialog.GetPath().mb_str())); if(!img.load()){ wxMessageDialog(this, _("Could not open or find the image"), _("Error"), wxOK|wxCENTER|wxICON_ERROR).ShowModal(); event.Skip(); return; } getProject()->getImages()->push_back(img); ImagesImageListBox->Append(loadImageDialog.GetFilename()); if(getSettings()->isDebug()){ ImageViewer* iv=new ImageViewer(getProject()->getImages()->back().getMat(), "DEBUG:OnImagesAddBUttonClick> "+img.getFilename()); iv->show(); } return; } void PlottWareControlFrame::OnImagesDeleteButtonClick(wxCommandEvent& event) { if(ImagesImageListBox->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } int sel=ImagesImageListBox->GetSelection(); ImagesImageListBox->Delete(sel); getProject()->getImages()->erase(getProject()->getImages()->begin()+sel); } void PlottWareControlFrame::OnImagesImageListBoxSelect(wxCommandEvent& event) { if(ImagesImageListBox->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } int sel=ImagesImageListBox->GetSelection(); ImagesSizeLabel->SetLabel(std::to_string(getProject()->getImages()->at(sel).getMat()->cols)+"x"+std::to_string(getProject()->getImages()->at(sel).getMat()->rows)); ImagesScaleText->SetValue(std::to_string(getProject()->getImages()->at(sel).getScale())); ImagesPositionXSpinner->SetValue(getProject()->getImages()->at(sel).getPosition().getX()); ImagesPositionYSpinner->SetValue(getProject()->getImages()->at(sel).getPosition().getY()); ImagesCropX1Spinner->SetValue(getProject()->getImages()->at(sel).getCrop1().getX()); ImagesCropY1Spinner->SetValue(getProject()->getImages()->at(sel).getCrop1().getY()); ImagesCropX2Spinner->SetValue(getProject()->getImages()->at(sel).getCrop2().getX()); ImagesCropY2Spinner->SetValue(getProject()->getImages()->at(sel).getCrop2().getY()); } void PlottWareControlFrame::OnImagesPositionXSpinnerChange(wxSpinEvent& event) { if(ImagesImageListBox->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } int sel=ImagesImageListBox->GetSelection(); getProject()->getImages()->at(sel).setPosition(Point(ImagesPositionXSpinner->GetValue(), ImagesPositionYSpinner->GetValue())); } void PlottWareControlFrame::OnImagesPositionYSpinnerChange(wxSpinEvent& event) { if(ImagesImageListBox->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } int sel=ImagesImageListBox->GetSelection(); getProject()->getImages()->at(sel).setPosition(Point(ImagesPositionXSpinner->GetValue(), ImagesPositionYSpinner->GetValue())); } void PlottWareControlFrame::OnImagesCropX1SpinnerChange(wxSpinEvent& event) { if(ImagesImageListBox->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } int sel=ImagesImageListBox->GetSelection(); getProject()->getImages()->at(sel).setCrop(Point(ImagesCropX1Spinner->GetValue(), ImagesCropY1Spinner->GetValue()), Point(ImagesCropX2Spinner->GetValue(), ImagesCropY2Spinner->GetValue())); } void PlottWareControlFrame::OnImagesCropY1SpinnerChange(wxSpinEvent& event) { if(ImagesImageListBox->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } int sel=ImagesImageListBox->GetSelection(); getProject()->getImages()->at(sel).setCrop(Point(ImagesCropX1Spinner->GetValue(), ImagesCropY1Spinner->GetValue()), Point(ImagesCropX2Spinner->GetValue(), ImagesCropY2Spinner->GetValue())); } void PlottWareControlFrame::OnImagesCropX2SpinnerChange(wxSpinEvent& event) { if(ImagesImageListBox->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } int sel=ImagesImageListBox->GetSelection(); getProject()->getImages()->at(sel).setCrop(Point(ImagesCropX1Spinner->GetValue(), ImagesCropY1Spinner->GetValue()), Point(ImagesCropX2Spinner->GetValue(), ImagesCropY2Spinner->GetValue())); } void PlottWareControlFrame::OnImagesCropY2SpinnerChange(wxSpinEvent& event) { if(ImagesImageListBox->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } int sel=ImagesImageListBox->GetSelection(); getProject()->getImages()->at(sel).setCrop(Point(ImagesCropX1Spinner->GetValue(), ImagesCropY1Spinner->GetValue()), Point(ImagesCropX2Spinner->GetValue(), ImagesCropY2Spinner->GetValue())); } void PlottWareControlFrame::OnImagesPreviewButtonClick(wxCommandEvent& event) { getProject()->combine(); } void PlottWareControlFrame::OnImagesImageListMoveUpButtonClick(wxCommandEvent& event) { if(ImagesImageListBox->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } int sel=ImagesImageListBox->GetSelection(); if(sel>0){ std::swap(getProject()->getImages()->at(sel), getProject()->getImages()->at(sel-1)); wxString cp=ImagesImageListBox->GetString(sel-1); ImagesImageListBox->SetString(sel-1, ImagesImageListBox->GetString(sel)); ImagesImageListBox->SetString(sel, cp); ImagesImageListBox->SetSelection(sel-1); } } void PlottWareControlFrame::OnImagesImageListMoveDownButtonClick(wxCommandEvent& event) { if(ImagesImageListBox->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } int sel=ImagesImageListBox->GetSelection(); if(selgetImages()->size()-1){ std::swap(getProject()->getImages()->at(sel), getProject()->getImages()->at(sel+1)); wxString cp=ImagesImageListBox->GetString(sel+1); ImagesImageListBox->SetString(sel+1, ImagesImageListBox->GetString(sel)); ImagesImageListBox->SetString(sel, cp); ImagesImageListBox->SetSelection(sel+1); } } void PlottWareControlFrame::OnImagesScaleTextText(wxCommandEvent& event) { if(ImagesImageListBox->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } int sel=ImagesImageListBox->GetSelection(); double n=std::stod(std::string(ImagesScaleText->GetValue().mb_str())); if(n<=0){ ImagesScaleText->SetBackgroundColour(wxColour("red")); event.Skip(); return; } else{ ImagesScaleText->SetBackgroundColour(wxColour("white")); getProject()->getImages()->at(sel).setScale(n); } } void PlottWareControlFrame::OnProcessingRetrAllRadioSelect(wxCommandEvent& event) { if(ProcessingRetrAllRadio->GetValue()){ getProject()->setRetrMode(CV_RETR_LIST); } else{ getProject()->setRetrMode(CV_RETR_EXTERNAL); } } void PlottWareControlFrame::OnProcessingRetrExtRadioSelect(wxCommandEvent& event) { if(ProcessingRetrAllRadio->GetValue()){ getProject()->setRetrMode(CV_RETR_LIST); } else{ getProject()->setRetrMode(CV_RETR_EXTERNAL); } } void PlottWareControlFrame::OnProcessingCannyThreshSliderCmdScroll(wxScrollEvent& event) { getProject()->setCannyThresh(ProcessingCannyThreshSlider->GetValue()); } void PlottWareControlFrame::OnProcessingPreviewButtonClick(wxCommandEvent& event) { if(!getProject()->process()){ wxMessageDialog(this, _("Please combine the pictures first!"), _("Error"), wxOK|wxCENTER|wxICON_EXCLAMATION).ShowModal(); } //add edges to drop down ProcessingColorLineSelect->Clear(); for(int i=0; igetColoring()->size(); i++){ ProcessingColorLineSelect->Append(std::to_string(i)); } //add colors if this did't happen till now ProcessingColorColorSelect->Clear(); ProcessingColorColorSelect->Append("Leave out"); for(int i=0; igetPrinter()->getPens().size(); i++){ ProcessingColorColorSelect->Append(getSettings()->getPrinter()->getPens().at(i)); } //remove selection ProcessingColorColorSelect->SetSelection(wxNOT_FOUND); } void PlottWareControlFrame::OnProcessingColorLineSelectSelect(wxCommandEvent& event) { //select the set ProcessingColorColorSelect->SetSelection(getProject()->getColoring()->at(ProcessingColorLineSelect->GetSelection())); //show the ominous contour getProject()->printEdge(ProcessingColorLineSelect->GetSelection()); } void PlottWareControlFrame::OnProcessingColorColorSelectSelect(wxCommandEvent& event) { //check if there's selected anything if(ProcessingColorLineSelect->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } getProject()->getColoring()->at(ProcessingColorLineSelect->GetSelection())=ProcessingColorColorSelect->GetSelection(); } void PlottWareControlFrame::OnProcessingColorForAllButtonClick(wxCommandEvent& event) { if(ProcessingColorColorSelect->GetSelection()==wxNOT_FOUND){ event.Skip(); return; } for(int i=0; igetColoring()->size(); i++){ getProject()->getColoring()->at(i)=ProcessingColorColorSelect->GetSelection(); } } void PlottWareControlFrame::OnGcodeGenerateButtonClick(wxCommandEvent& event) { if(!getProject()->generateGcode()){ wxMessageDialog(this, _("Plese process the canvas first!"), _("Error"), wxOK|wxCENTER|wxICON_EXCLAMATION).ShowModal(); } } void PlottWareControlFrame::OnGcodeEditButtonClick(wxCommandEvent& event) { GcodeEditorDialog* dialog=new GcodeEditorDialog(this, wxID_ANY, getProject()->getGcode()); dialog->Show(); } void PlottWareControlFrame::OnGcodeExportButtonClick(wxCommandEvent& event) { wxFileDialog saveFileDialog(this, _("Export G code"), "", "", "G code files (*.g;*.gcode)|*.g;*.gcode", wxFD_SAVE|wxFD_OVERWRITE_PROMPT); if(saveFileDialog.ShowModal()==wxID_CANCEL){ return; } if(!getProject()->exportGcode(std::string(saveFileDialog.GetPath().mb_str()))){ wxMessageDialog(this, _("Can not create or write the selected file"), _("Error"), wxOK|wxCENTER|wxICON_ERROR).ShowModal(); return; } wxMessageDialog(this, _("G code successfully exported"), _("Info"), wxOK|wxCENTER|wxICON_INFORMATION).ShowModal(); } void PlottWareControlFrame::OnPrintingPrinterConnectButtonClick(wxCommandEvent& event) { if(!getSettings()->getPrinter()->isConnected()){ if(!getSettings()->getPrinter()->connect()){ wxMessageDialog(this, _("Can not connect to printer. Please check your settings!"), _("Warning"), wxOK|wxCENTER|wxICON_WARNING).ShowModal(); return; } printerControlEnable(true); PrintingPrinterStatusLabel->SetLabel(_("Online")); PrintingPrinterPowerLabel->SetLabel(getSettings()->getPrinter()->getPowerState()?"On":"Off"); PrintingPrinterConnectButton->SetLabel(_("Disconnect")); if(getSettings()->getPrinter()->getPosition().getX()>-1){ PrintingPrinterXLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getX())); } else{ PrintingPrinterXLabel->SetLabel("?"); } if(getSettings()->getPrinter()->getPosition().getY()>-1){ PrintingPrinterYLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getY())); } else{ PrintingPrinterYLabel->SetLabel("?"); } } else{ getSettings()->getPrinter()->disconnect(); printerControlEnable(false); PrintingPrinterStatusLabel->SetLabel(_("Offline")); PrintingPrinterPowerLabel->SetLabel(""); PrintingPrinterConnectButton->SetLabel(_("Connect")); PrintingPrinterXLabel->SetLabel(""); PrintingPrinterYLabel->SetLabel(""); } } void PlottWareControlFrame::OnPrintingPrinterHomeButtonClick(wxCommandEvent& event) { getSettings()->getPrinter()->send("G28\n"); PrintingPrinterXLabel->SetLabel("0"); PrintingPrinterYLabel->SetLabel("0"); } void PlottWareControlFrame::OnPrintingPrinterPowerButtonClick(wxCommandEvent& event) { if(getSettings()->getPrinter()->getPowerState()){ getSettings()->getPrinter()->send("M81\n"); //turn off } else{ getSettings()->getPrinter()->send("M80"); //turn on } } void PlottWareControlFrame::OnPrintingPrinterHeadSelectSelect(wxCommandEvent& event) { getSettings()->getPrinter()->send("T"+std::to_string(PrintingPrinterHeadSelect->GetSelection())); } void PlottWareControlFrame::OnPrintingPrinterUpButtonClick(wxCommandEvent& event) { getSettings()->getPrinter()->send("G91\nG1 Y"+std::to_string(PrintingPrinterMoveSpinner->GetValue())+"G90"); PrintingPrinterXLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getX())); PrintingPrinterYLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getY())); } void PlottWareControlFrame::OnPrintingPrinterDownButtonClick(wxCommandEvent& event) { getSettings()->getPrinter()->send("G91\nG1 Y"+std::to_string(-PrintingPrinterMoveSpinner->GetValue())+"G90"); PrintingPrinterXLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getX())); PrintingPrinterYLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getY())); } void PlottWareControlFrame::OnPrintingPrinterRightButtonClick(wxCommandEvent& event) { getSettings()->getPrinter()->send("G91\nG1 X"+std::to_string(PrintingPrinterMoveSpinner->GetValue())+"G90"); PrintingPrinterXLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getX())); PrintingPrinterYLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getY())); } void PlottWareControlFrame::OnPrintingPrinterLeftButtonClick(wxCommandEvent& event) { getSettings()->getPrinter()->send("G91\nG1 X"+std::to_string(-PrintingPrinterMoveSpinner->GetValue())+"G90"); PrintingPrinterXLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getX())); PrintingPrinterYLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getY())); } void PlottWareControlFrame::OnPrintingPrinterConsoleTextEnter(wxCommandEvent& event) { getSettings()->getPrinter()->send(std::string(PrintingPrinterConsole->GetValue().mb_str())); std::string r=getSettings()->getPrinter()->recv(); PrintingPrinterLog->AppendAndEnsureVisible(r); PrintingPrinterXLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getX())); PrintingPrinterYLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getY())); } void PlottWareControlFrame::OnPrintingPrintButtonClick(wxCommandEvent& event) { if(getProject()->getGcode()->empty()){ wxMessageDialog(this, _("Please generate some G code first!"), _("Error"), wxCENTER|wxOK|wxICON_ERROR).ShowModal(); return; } //get line count (for status) int lineNumber=std::count(getProject()->getGcode()->begin(), getProject()->getGcode()->end(), '\n'); //prepare UI PrintingStatusGauge->SetRange(lineNumber); PrintingStatusGauge->SetValue(0); PrintingElapsedTimeLabel->SetLabel("00:00:00"); printingControlShow(true); //start UI refresher PrintingStopWatch.Start(); PrintingElapsedTimeCheckerTimer.Start(1000); //set counter getProject()->printStatus=0; //start printing //print to log PrintingPrinterLog->AppendAndEnsureVisible("Printing started"); //print!!! getProject()->printStop=false; std::istringstream print(*getProject()->getGcode()); for(std::string line; std::getline(print, line);){ //stop if we need so if(getProject()->printStop){ break; } //log PrintingPrinterLog->AppendAndEnsureVisible("Printing line #"+std::to_string(getProject()->printStatus)+" of "+std::to_string(lineNumber)); if(!getSettings()->getPrinter()->send(line+"\n")){ //if can't send there's some problem break; } std::string r=getSettings()->getPrinter()->recv(); getProject()->printStatus++; if(r!="OK"){ if(wxMessageDialog(this, _("Something went wrong. The printer responded with:")+r+_("\nWould you like to continue with the printing?"), _("Error"), wxCENTER|wxYES_NO|wxICON_ERROR).ShowModal()==wxID_YES){ continue; } else{ break; } } //update position PrintingPrinterXLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getX())); PrintingPrinterYLabel->SetLabel(std::to_string(getSettings()->getPrinter()->getPosition().getY())); } //finish printing wxMessageDialog(this, _("Printing finished!"), _("Info"), wxCENTER|wxOK|wxICON_INFORMATION).ShowModal(); //print to log PrintingPrinterLog->AppendAndEnsureVisible("Printing finished"); //stop UI refresher PrintingStopWatch.Pause(); PrintingElapsedTimeCheckerTimer.Stop(); } void PlottWareControlFrame::OnPrintingElapsedTimeCheckerTimerTrigger(wxTimerEvent& event) { //update gauge PrintingStatusGauge->SetValue(getProject()->printStatus); //update elapsed time long sec=PrintingStopWatch.Time()/1000; char time[15]; sprintf(time, "%02i:%02i:%02i", sec/3600, sec%3600/60, sec%60); PrintingElapsedTimeLabel->SetLabel(std::string(time)); } void PlottWareControlFrame::OnPrintingStopButtonClick(wxCommandEvent& event) { getProject()->printStop=true; } void PlottWareControlFrame::OnPrintingEmergencyButtonClick(wxCommandEvent& event) { //stop printing getProject()->printStop=true; //send emergency reset code getSettings()->getPrinter()->send("M112\n"); //disconnect from printer getSettings()->getPrinter()->disconnect(); //update UI printerControlEnable(false); PrintingPrinterStatusLabel->SetLabel(_("Offline")); PrintingPrinterPowerLabel->SetLabel(""); PrintingPrinterConnectButton->SetLabel(_("Connect")); PrintingPrinterXLabel->SetLabel(""); PrintingPrinterYLabel->SetLabel(""); }