]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/mainwindow.cpp
Complete rewrite of the engineer UI
[r2c2.git] / source / engineer / mainwindow.cpp
diff --git a/source/engineer/mainwindow.cpp b/source/engineer/mainwindow.cpp
new file mode 100644 (file)
index 0000000..6e3888c
--- /dev/null
@@ -0,0 +1,83 @@
+#include <msp/gltk/button.h>
+#include "libr2c2/driver.h"
+#include "engineer.h"
+#include "mainwindow.h"
+#include "trainlistdialog.h"
+
+using namespace std;
+using namespace Msp;
+
+MainWindow::MainWindow(Engineer &e):
+       engineer(e)
+{
+       Loader::WidgetMap widgets;
+       DataFile::load(*this, "data/mainwindow.ui", widgets);
+
+       ind_on = dynamic_cast<GLtk::Indicator *>(get_item(widgets, "ind_on"));
+       ind_off = dynamic_cast<GLtk::Indicator *>(get_item(widgets, "ind_off"));
+       ind_halt = dynamic_cast<GLtk::Indicator *>(get_item(widgets, "ind_halt"));
+       lbl_status = dynamic_cast<GLtk::Label *>(get_item(widgets, "lbl_status"));
+
+       dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_on"))->signal_clicked.connect(sigc::mem_fun(this, &MainWindow::on_clicked));
+       dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_off"))->signal_clicked.connect(sigc::mem_fun(this, &MainWindow::off_clicked));
+       dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_halt"))->signal_clicked.connect(sigc::mem_fun(this, &MainWindow::halt_clicked));
+       dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_trains"))->signal_clicked.connect(sigc::mem_fun(this, &MainWindow::trains_clicked));
+       dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_quit"))->signal_clicked.connect(sigc::mem_fun(this, &MainWindow::quit_clicked));
+
+       R2C2::Driver &driver = engineer.get_layout().get_driver();
+       if(driver.get_power())
+               ind_on->set_active(true);
+       else
+               ind_off->set_active(true);
+
+       driver.signal_power.connect(sigc::mem_fun(this, &MainWindow::power_event));
+       driver.signal_halt.connect(sigc::mem_fun(this, &MainWindow::halt_event));
+}
+
+void MainWindow::set_status_text(const string &txt)
+{
+       lbl_status->set_text(txt);
+}
+
+void MainWindow::on_clicked()
+{
+       engineer.get_layout().get_driver().set_power(true);
+}
+
+void MainWindow::off_clicked()
+{
+       engineer.get_layout().get_driver().set_power(false);
+}
+
+void MainWindow::halt_clicked()
+{
+       R2C2::Driver &driver = engineer.get_layout().get_driver();
+       driver.halt(!driver.is_halted());
+}
+
+void MainWindow::trains_clicked()
+{
+       GLtk::Container *root = parent;
+       while(root->get_parent())
+               root = root->get_parent();
+
+       TrainListDialog *dlg = new TrainListDialog(engineer);
+       root->add(*dlg);
+       dlg->autosize();
+}
+
+void MainWindow::quit_clicked()
+{
+       engineer.quit();
+}
+
+void MainWindow::power_event(bool p)
+{
+       ind_on->set_active(p);
+       ind_off->set_active(!p);
+}
+
+void MainWindow::halt_event(bool h)
+{
+       ind_halt->set_active(h);
+}