]> git.tdb.fi Git - r2c2.git/blobdiff - source/remote/statusbar.cpp
Add a new remote control program with GLtk-based UI
[r2c2.git] / source / remote / statusbar.cpp
diff --git a/source/remote/statusbar.cpp b/source/remote/statusbar.cpp
new file mode 100644 (file)
index 0000000..5feda64
--- /dev/null
@@ -0,0 +1,52 @@
+#include <msp/core/maputils.h>
+#include <msp/gltk/button.h>
+#include "statusbar.h"
+
+using namespace std;
+using namespace Msp;
+using namespace R2C2;
+
+StatusBar::StatusBar(Client &c):
+       client(c)
+{
+       Loader::WidgetMap widgets;
+       DataFile::load(*this, "data/remote/statusbar.ui", widgets);
+
+       Msp::GLtk::Button *btn = dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_power_on"));
+       btn->signal_clicked.connect(sigc::bind(sigc::mem_fun(&client, &Client::set_power), true));
+       btn = dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_power_off"));
+       btn->signal_clicked.connect(sigc::bind(sigc::mem_fun(&client, &Client::set_power), false));
+       btn = dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_halt"));
+       btn->signal_clicked.connect(sigc::mem_fun(this, &StatusBar::ui_halt_clicked));
+
+       ind_power_on = dynamic_cast<GLtk::Indicator *>(get_item(widgets, "ind_power_on"));
+       ind_power_off = dynamic_cast<GLtk::Indicator *>(get_item(widgets, "ind_power_off"));
+       ind_halt = dynamic_cast<GLtk::Indicator *>(get_item(widgets, "ind_halt"));
+
+       lbl_status = dynamic_cast<GLtk::Label *>(get_item(widgets, "lbl_status"));
+
+       client.signal_power_changed.connect(sigc::mem_fun(this, &StatusBar::power_changed));
+       client.signal_halt_changed.connect(sigc::mem_fun(this, &StatusBar::halt_changed));
+       client.signal_emergency.connect(sigc::mem_fun(this, &StatusBar::emergency));
+}
+
+void StatusBar::ui_halt_clicked()
+{
+       //client.set_halt(!client.get_halt());
+}
+
+void StatusBar::power_changed(bool p)
+{
+       ind_power_on->set_active(p);
+       ind_power_off->set_active(!p);
+}
+
+void StatusBar::halt_changed(bool h)
+{
+       ind_halt->set_active(h);
+}
+
+void StatusBar::emergency(const string &e)
+{
+       lbl_status->set_text(e);
+}