gui: Build TempLabel from a .ui file

This is better than needing to hard code in all of the widgets.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-04-11 12:10:02 -04:00
parent 5859adc074
commit 494ef04e67
4 changed files with 108 additions and 20 deletions

View File

@ -4,6 +4,7 @@
#include <core/deck.h>
#include <core/string.h>
#include <gui/tabs.h>
#include <gui/queue/label.h>
#include <gui/queue/toolbar.h>
#include <gui/queue/view.h>
@ -39,11 +40,7 @@ private:
/**
* Queue tab widgets
*/
Gtk::HBox q_tab_box;
Gtk::Label q_tab_number;
Gtk::Label q_tab_size;
Gtk::Button q_tab_close;
TempLabel *q_label;
/**
* Queue page widgets
@ -93,25 +90,19 @@ QueueTab :: QueueTab(Queue *pq, unsigned int num)
{
builder = Gtk::Builder::create();
builder->add_from_file(gui :: share_file("QueueView.ui"));
builder->add_from_file(gui :: share_file("QueueLabel.ui"));
builder->add_from_file(gui :: share_file("QueueToolbar.ui"));
/*
* Create our tab widget
*/
q_tab_size.set_justify(Gtk::JUSTIFY_CENTER);
builder->get_widget_derived("TempLabel", q_label);
q_tab_close.set_image_from_icon_name("window-close", Gtk::ICON_SIZE_MENU);
q_tab_close.set_relief(Gtk::RELIEF_NONE);
q_tab_close.signal_clicked().connect(sigc::mem_fun(*this,
q_label->temp_close->signal_clicked().connect(sigc::mem_fun(*this,
&QueueTab::on_close_clicked));
q_tab_box.pack_start(q_tab_number, false, true);
q_tab_box.pack_start(q_tab_size, true, true);
q_tab_box.pack_start(q_tab_close, false, true);
tab_set_size();
queue_set_number(num);
q_tab_box.show_all();
/*
@ -148,14 +139,14 @@ QueueTab :: QueueTab(Queue *pq, unsigned int num)
tab_random = q_toolbar->q_random;
tab_repeat = q_toolbar->q_repeat;
tab_search = q_toolbar->q_search;
tab_size = &q_tab_size;
tab_size = q_label->temp_size;
tab_treeview = q_treeview;
tab_widget = &q_vbox;
tab_finish_init();
queue_mapping[tab_widget] = this;
gui :: get_widget<Gtk::Notebook>("o_notebook")->insert_page(q_vbox, q_tab_box, num);
gui :: get_widget<Gtk::Notebook>("o_notebook")->insert_page(q_vbox, *q_label, num);
gui :: get_widget<Gtk::Notebook>("o_notebook")->set_tab_reorderable(q_vbox);
q_vbox.show_all();
}
@ -224,14 +215,14 @@ void QueueTab :: tab_set_size()
{
std::string span = "<span size='x-large'>";
span += string :: utos(tab_pq->size()) + "</span>";
q_tab_size.set_markup(span);
q_label->temp_size->set_markup(span);
}
void QueueTab :: queue_set_number(unsigned int num)
{
std::string span = "<span size='x-large'>";
span += string :: utos(num) + ". </span>";
q_tab_number.set_markup(span);
q_label->temp_number->set_markup(span);
}
void QueueTab :: on_tab_reordered()
@ -246,8 +237,8 @@ void QueueTab :: on_move_queue(int num)
void QueueTab :: queue_set_sensitive(bool sensitive)
{
q_tab_number.set_sensitive(sensitive);
q_tab_size.set_sensitive(sensitive);
q_label->temp_number->set_sensitive(sensitive);
q_label->temp_size->set_sensitive(sensitive);
q_treeview->set_sensitive(sensitive);
}

17
gui/queue/label.cpp Normal file
View File

@ -0,0 +1,17 @@
/*
* Copyright 2015 (c) Anna Schumaker.
*/
#include <gui/queue/label.h>
TempLabel :: TempLabel(BaseObjectType *cobject,
const Glib::RefPtr<Gtk::Builder> builder)
: Gtk::HBox(cobject), _builder(builder)
{
_builder->get_widget("temp_number", temp_number);
_builder->get_widget("temp_size", temp_size);
_builder->get_widget("temp_close", temp_close);
}
TempLabel :: ~TempLabel()
{
}

22
include/gui/queue/label.h Normal file
View File

@ -0,0 +1,22 @@
/*
* Copyright 2015 (c) Anna Schumaker.
*/
#ifndef OCARINA_GUI_QUEUE_LABEL_H
#define OCARINA_GUI_QUEUE_LABEL_H
#include <gtkmm.h>
class TempLabel : public Gtk::HBox {
private:
Glib::RefPtr<Gtk::Builder> _builder;
public:
Gtk::Label *temp_number;
Gtk::Label *temp_size;
Gtk::Button *temp_close;
TempLabel(BaseObjectType *, const Glib::RefPtr<Gtk::Builder>);
~TempLabel();
};
#endif /* OCARINA_GUI_QUEUE_LABEL_H */

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkBox" id="TempLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="temp_number">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">0.</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="temp_size">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">4242</property>
<property name="justify">center</property>
<property name="angle">0.01</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="temp_close">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="relief">none</property>
<child>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">window-close</property>
<property name="icon_size">1</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</interface>