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);
}
Exemplo n.º 2
0
/*
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);
}