]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/toolbar.cpp
Remove the scripting-based timetable
[r2c2.git] / source / designer / toolbar.cpp
index 46994a081ca0e9b1ac7b207c2b80610d38a3a6c9..950cfc5aaa8edf0706a1e8f6bc89d78a776c8118 100644 (file)
-/* $Id$
-
-This file is part of the MSP Märklin suite
-Copyright © 2009  Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
-#include <msp/gltk/button.h>
-#include <msp/strings/formatter.h>
-#include "designer.h"
 #include "toolbar.h"
 
 using namespace std;
 using namespace Msp;
-using namespace Marklin;
 
-Toolbar::Toolbar(Designer &d):
-       GLtk::Panel(d.get_ui_resources()),
-       designer(d)
+Toolbar::Toolbar(const string &name, unsigned w):
+       content_width(w),
+       expanded(true)
 {
-       set_size(370, 40);
-
-       GLtk::Button *btn;
-       GLtk::Label *lbl;
-
-       add(*(btn=new GLtk::Button(res, "Load")));
-       btn->set_geometry(GLtk::Geometry(5, 10, 40, 24));
-
-       add(*(btn=new GLtk::Button(res, "Save")));
-       btn->set_geometry(GLtk::Geometry(45, 10, 40, 24));
-       btn->signal_clicked.connect(sigc::mem_fun(&designer, &Designer::save));
+       set_focusable(false);
 
-       add(*(btn=new GLtk::Button(res, "Quit")));
-       btn->set_geometry(GLtk::Geometry(85, 10, 40, 24));
-       btn->set_style("red");
-       btn->signal_clicked.connect(sigc::mem_fun(&designer, &Designer::quit));
+       add(*(lbl_title = new GLtk::Label(name)));
 
-       add(*(btn=new GLtk::Button(res, "Trnt")));
-       btn->set_geometry(GLtk::Geometry(135, 10, 40, 24));
+       add(*(btn_expand = new GLtk::Button));
+       btn_expand->set_size(15, 20);
+       btn_expand->set_style("arrow_left");
+       btn_expand->set_tooltip("Collapse toolbar");
+       btn_expand->signal_clicked.connect(sigc::mem_fun(this, &Toolbar::expand_clicked));
 
-       add(*(btn=new GLtk::Button(res, "Sens")));
-       btn->set_geometry(GLtk::Geometry(175, 10, 40, 24));
-
-       add(*(lbl=new GLtk::Label(res, "Routes:")));
-       lbl->set_geometry(GLtk::Geometry(225, 22, 40, 13));
+       add(*(pnl_content = new GLtk::Panel));
+       pnl_content->set_size(content_width, 40);
+       pnl_content->set_style("group");
+}
 
-       add(*(drp_routes=new GLtk::Dropdown(res)));
-       drp_routes->set_geometry(GLtk::Geometry(225, 5, 100, 17));
-       drp_routes->append("(new route)");
-       drp_routes->signal_item_selected.connect(sigc::mem_fun(this, &Toolbar::route_selected));
+void Toolbar::expand(bool e)
+{
+       expanded = e;
+       btn_expand->set_style(expanded ? "arrow_left" : "arrow_right");
+       btn_expand->set_tooltip(expanded ? "Collapse toolbar" : "Expand toolbar");
+       pnl_content->set_visible(expanded);
 
-       add(*(btn=new GLtk::Button(res, "AddT")));
-       btn->set_geometry(GLtk::Geometry(325, 10, 40, 24));
-       btn->signal_clicked.connect(sigc::mem_fun(&designer, &Designer::add_selection_to_route));
+       unsigned w = lbl_title->get_geometry().w+40;
+       if(expanded)
+               w += content_width+5;
+       set_size(w, 40);
 
-       designer.get_layout()->signal_route_added.connect(sigc::hide(sigc::mem_fun(this, &Toolbar::update_routes)));
-       designer.get_layout()->signal_route_removed.connect(sigc::hide(sigc::mem_fun(this, &Toolbar::update_routes)));
-       update_routes();
+       signal_expanded.emit(expanded);
 }
 
-void Toolbar::route_selected(unsigned index, const string &)
+void Toolbar::expand_clicked()
 {
-       if(index==drp_routes->get_n_items()-1)
-       {
-               Route *route = new Route(format("Route %d", designer.get_layout()->get_routes().size()+1));
-               designer.get_layout()->add_route(*route);
-               designer.edit_route(*route);
-
-               const set<Route *> &routes = designer.get_layout()->get_routes();
-               int selected = -1;
-               unsigned n = 0;
-               for(set<Route *>::const_iterator i=routes.begin(); (selected<0 && i!=routes.end()); ++i, ++n)
-                       if(*i==route)
-                               selected = n;
-               drp_routes->set_selected_index(selected);
-       }
-       else
-       {
-               const set<Route *> &routes = designer.get_layout()->get_routes();
-               set<Route *>::const_iterator i = routes.begin();
-               advance(i, index);
-               designer.edit_route(**i);
-       }
+       expand(!expanded);
 }
 
-void Toolbar::update_routes()
+void Toolbar::on_style_change()
 {
-       drp_routes->clear();
-       const set<Route *> &routes = designer.get_layout()->get_routes();
-       int selected = -1;
-       unsigned n = 0;
-       for(set<Route *>::const_iterator i=routes.begin(); i!=routes.end(); ++i, ++n)
-       {
-               drp_routes->append((*i)->get_name());
-               if(*i==designer.get_current_route())
-                       selected = n;
-       }
-       drp_routes->append("(new route)");
-       drp_routes->set_selected_index(selected);
+       lbl_title->autosize();
+       const GLtk::Geometry &lbl_geom = lbl_title->get_geometry();
+       unsigned w = lbl_geom.w+40;
+       if(expanded)
+               w += content_width+5;
+       set_size(w, 40);
+
+       lbl_title->set_position(10, (geom.h-lbl_geom.h)/2);
+       btn_expand->set_position(lbl_geom.w+15, 10);
+       pnl_content->set_position(lbl_geom.w+35, 0);
 }