PlottWare/PlottWareControl/PlottWareControlMain.cpp
2019-08-08 17:02:07 +03:00

1030 lines
56 KiB
C++

/***************************************************************************
* 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 <https://www.gnu.org/licenses/>.
**************************************************************************/
#include "PlottWareControlMain.h"
#include <wx/msgdlg.h>
#include <string>
#include "version.h"
#include "SettingDialog.h"
#include "imageViewer.h"
#include "GcodeEditorDialog.h"
//(*InternalHeaders(PlottWareControlFrame)
#include <wx/bitmap.h>
#include <wx/icon.h>
#include <wx/settings.h>
#include <wx/font.h>
#include <wx/intl.h>
#include <wx/image.h>
#include <wx/string.h>
//*)
//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; i<getSettings()->getPrinter()->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(sel<getProject()->getImages()->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; i<getProject()->getColoring()->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; i<getSettings()->getPrinter()->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; i<getProject()->getColoring()->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("");
}