void OfflineLocalisationDialog::MakeLayout() { this->setWindowTitle("Offline Localisation"); QVBoxLayout *buttonsLayout = new QVBoxLayout(); QPushButton *openFileButton = new QPushButton("&Open Log..."); connect(openFileButton,SIGNAL(clicked()), this, SLOT(OpenLogFiles())); buttonsLayout->addWidget(openFileButton); QPushButton *runSimulationButton = new QPushButton("&Run simulation"); connect(runSimulationButton,SIGNAL(clicked()), this, SLOT(BeginSimulation())); buttonsLayout->addWidget(runSimulationButton); QPushButton *saveLogButton = new QPushButton("Save &Log..."); saveLogButton->setEnabled(false); connect(m_offline_loc,SIGNAL(SimDataChanged(bool)), saveLogButton, SLOT(setEnabled(bool))); connect(saveLogButton,SIGNAL(clicked()), this, SLOT(SaveAsLocalisationLog())); buttonsLayout->addWidget(saveLogButton); QPushButton *saveReportButton = new QPushButton("Save Report..."); saveReportButton->setEnabled(false); connect(m_offline_loc,SIGNAL(SimDataChanged(bool)), saveReportButton, SLOT(setEnabled(bool))); //connect(runSimulationButton,SIGNAL(pressed()), this, SLOT(BeginSimulation())); buttonsLayout->addWidget(saveReportButton); QVBoxLayout *displayLayout = new QVBoxLayout(); QLabel *fileLabel = new QLabel("Log files"); displayLayout->addWidget(fileLabel); m_fileListDisplay = new QTextBrowser(this); m_fileListDisplay->setWordWrapMode(QTextOption::NoWrap); displayLayout->addWidget(m_fileListDisplay); QHBoxLayout *overallLayout = new QHBoxLayout(); overallLayout->addLayout(buttonsLayout); overallLayout->addLayout(displayLayout,1); m_progressBar = new QProgressDialog("Runing localisation...","Cancel",0, m_offline_loc->NumberOfLogFrames(),this); m_progressBar->setWindowModality(Qt::WindowModal); m_progressBar->setValue(0); m_progressBar->setMinimumDuration(100); connect(m_offline_loc, SIGNAL(updateProgress(int,int)), this, SLOT(DiplayProgress(int,int))); connect(m_offline_loc, SIGNAL(finished()), this, SLOT(CompleteSimulation())); connect(m_progressBar, SIGNAL(canceled()), this, SLOT(CancelProgress())); connect(m_reader, SIGNAL(OpenLogFilesChanged(std::vector<QFileInfo>)), this, SLOT(SetOpenFileList(std::vector<QFileInfo>))); setLayout(overallLayout); }
/* DialogProc this is the window event handler for the main dialog */ BOOL CALLBACK DialogProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: // dialog is initializing - store the picture box handle in a global variable for later HOutput = GetDlgItem(hwnd, IDC_PICTURE_OUTPUT); // instantiate and initialize our graphics framework object PGraphics = new GraphicsFramework(HOutput); break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_BTN_DRAW: //GetDlgItems which sets up the variables BeginSimulation(); CalculateSimulation(); Beep(500, 200); system("myfile.txt"); break; case IDC_BTN_CLEAR: // clear button was pressed so clear the scene and draw the empty scene PGraphics->ClearScene(RGB(0, 0, 0)); PGraphics->Draw(); break; case IDCANCEL: // user is quitting so release the GraphicsFramework object and quit delete PGraphics; quit = true; PostQuitMessage(0); break; } } return FALSE; }
SimulationWindow::SimulationWindow(wxWindow *parent) : m_threadCondition(m_threadMutex), m_controlInterface(this), m_started(false), m_simulationTimer(this, 1), m_drawTimer(this, 2) { srand(time(nullptr)); // initialize XRC elements.. wxXmlResource::Get()->LoadFrame(this, parent, wxT("SimulationWindow")); wxPanel * p = XRCCTRL(*this, "m_topPanel", wxPanel); XRC_INIT(m_joy1_enable, wxCheckBox); INIT_JOY(1_x) INIT_JOY(1_y) INIT_JOY(1_z) INIT_JOY(1_t) m_joy1_x->SetReadOnly(true); m_joy1_y->SetReadOnly(true); m_joy1_z->SetReadOnly(true); m_joy1_t->SetReadOnly(true); XRC_INIT(m_joy1_1, wxCheckBox); XRC_INIT(m_joy1_2, wxCheckBox); XRC_INIT(m_joy1_3, wxCheckBox); XRC_INIT(m_joy1_4, wxCheckBox); INIT_JOY(2_x) INIT_JOY(2_y) INIT_JOY(2_z) INIT_JOY(2_t) XRC_INIT(m_joy2_1, wxCheckBox); XRC_INIT(m_joy2_2, wxCheckBox); XRC_INIT(m_joy2_3, wxCheckBox); XRC_INIT(m_joy2_4, wxCheckBox); XRC_INIT(m_ds_i_1, wxCheckBox); XRC_INIT(m_ds_i_2, wxCheckBox); XRC_INIT(m_ds_i_3, wxCheckBox); XRC_INIT(m_ds_i_4, wxCheckBox); XRC_INIT(m_ds_i_5, wxCheckBox); XRC_INIT(m_ds_i_6, wxCheckBox); XRC_INIT(m_ds_i_7, wxCheckBox); XRC_INIT(m_ds_i_8, wxCheckBox); INIT_DS_ANALOG(1) INIT_DS_ANALOG(2) INIT_DS_ANALOG(3) INIT_DS_ANALOG(4) XRC_INIT(m_stepText, wxTextCtrl); XRC_INIT(m_startButton, wxButton); XRC_INIT(m_statusBar, wxStatusBar); XRC_INIT(m_enabledBox, wxCheckBox); XRC_INIT(m_autonomousBox, wxCheckBox); XRC_INIT(m_lcdTop, wxTextCtrl); XRC_INIT(m_lcdBottom, wxTextCtrl); // setup validation m_stepText->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); // statusbar m_statusBar->SetFieldsCount(2); m_statusBar->SetStatusText(wxT("Stopped"), 0); m_statusBar->SetStatusText(wxT("0.0s"), 1); // initialize analog inputs wxXmlResource * xmlRes = wxXmlResource::Get(); // slot 1 for (int i = 0; i < ANALOG_IO_CHANNELS; i++) { m_slot1Analog[i] = new Slider(p, wxID_ANY, 0, 5, false); xmlRes->AttachUnknownControl( wxString::Format(wxT("m_analog_1_%d"), i+1), m_slot1Analog[i], p); } // slot 2 for (int i = 0; i < ANALOG_IO_CHANNELS; i++) { m_slot2Analog[i] = new Slider(p, wxID_ANY, 0, 5, false); xmlRes->AttachUnknownControl( wxString::Format(wxT("m_analog_2_%d"), i+1), m_slot2Analog[i], p); } // initialize pwm outputs // slot 4 for (int i = 0; i < DIGITAL_PWM_CHANNELS; i++) { m_slot1PWM[i] = new Slider(p, wxID_ANY, -1, 1, true); xmlRes->AttachUnknownControl( wxString::Format(wxT("m_pwm_1_%d"), i+1), m_slot1PWM[i], p); } // slot 6 // HAHAHAHAHAHAHAHAHAAHAHAHAAHAH // I'd been trying to fix this assert error for HOURS // and then I realized: size_t = long on Linux for (int i = 0; i < DIGITAL_PWM_CHANNELS; i++) { m_slot2PWM[i] = new Slider(p, wxID_ANY, -1, 1, true); xmlRes->AttachUnknownControl( wxString::Format(wxT("m_pwm_2_%d"), i+1), m_slot2PWM[i], p); } // slot 8 (solenoids) for (int i = 0; i < SOLENOID_IO_CHANNELS; i++) { m_solenoids[i] = new TogglePanelButton(p, wxID_ANY); m_solenoids[i]->SetReadOnly(true); xmlRes->AttachUnknownControl( wxString::Format(wxT("m_sol_%d"), i+1), m_solenoids[i], p); } // initialize digital channels // slot 4 for (int i = 0; i < DIGITAL_IO_CHANNELS; i++) { m_slot1DIO[i] = new TogglePanelButton(p, wxID_ANY); xmlRes->AttachUnknownControl( wxString::Format(wxT("m_dio_1_%d"), i+1), m_slot1DIO[i], p); m_slot1DIO_lbl[i] = wxStaticCast(FindWindow(xmlRes->GetXRCID(wxString::Format(wxT("m_diol_1_%d"), i+1))), wxStaticText); } // slot 6 for (int i = 0; i < DIGITAL_IO_CHANNELS; i++) { m_slot2DIO[i] = new TogglePanelButton(p, wxID_ANY); xmlRes->AttachUnknownControl( wxString::Format(wxT("m_dio_2_%d"), i+1), m_slot2DIO[i], p); m_slot2DIO_lbl[i] = wxStaticCast(FindWindow(xmlRes->GetXRCID(wxString::Format(wxT("m_diol_2_%d"), i+1))), wxStaticText); } p->Fit(); p->Layout(); Layout(); // initialize the simulation thread BeginSimulation(); // anything else that needs to be done m_joystick1.SetCapture(this); // try to update regularly m_drawTimer.Start(150); }