[gnome-calculator/wip/glade: 2/2] Migrate MathWindow to GtkBuilder and use GtkTemplate to define the UI layout
- From: Alberto Ruiz <aruiz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calculator/wip/glade: 2/2] Migrate MathWindow to GtkBuilder and use GtkTemplate to define the UI layout
- Date: Tue, 12 Jan 2016 19:44:53 +0000 (UTC)
commit 1f7200afd0e1304b01bf4857f9c1436341216d6e
Author: Alberto Ruiz <aruiz gnome org>
Date: Sun Jan 10 20:03:34 2016 +0000
Migrate MathWindow to GtkBuilder and use GtkTemplate to define the UI layout
data/Makefile.am | 1 +
data/gnome-calculator.gresource.xml | 1 +
data/math-window.ui | 102 +++++++++++++++++++++++++++++++++++
gnome-calculator.doap | 2 +-
po/POTFILES.in | 1 +
src/math-buttons.vala | 2 +-
src/math-window.vala | 79 +++++++--------------------
7 files changed, 128 insertions(+), 60 deletions(-)
---
diff --git a/data/Makefile.am b/data/Makefile.am
index 76fa087..957a555 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -19,6 +19,7 @@ EXTRA_DIST = \
buttons-financial.ui \
buttons-programming.ui \
math-converter.ui \
+ math-window.ui \
menu.ui \
calculator.css \
gnome-calculator.gresource.xml \
diff --git a/data/gnome-calculator.gresource.xml b/data/gnome-calculator.gresource.xml
index b68e708..30630d9 100644
--- a/data/gnome-calculator.gresource.xml
+++ b/data/gnome-calculator.gresource.xml
@@ -6,6 +6,7 @@
<file preprocess="xml-stripblanks">buttons-financial.ui</file>
<file preprocess="xml-stripblanks">buttons-programming.ui</file>
<file preprocess="xml-stripblanks">math-converter.ui</file>
+ <file preprocess="xml-stripblanks">math-window.ui</file>
<file preprocess="xml-stripblanks">menu.ui</file>
<file>calculator.css</file>
</gresource>
diff --git a/data/math-window.ui b/data/math-window.ui
new file mode 100644
index 0000000..3d2ca84
--- /dev/null
+++ b/data/math-window.ui
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.19.0 -->
+<interface>
+ <requires lib="gtk+" version="3.16"/>
+ <object class="GtkAdjustment" id="hadjustment">
+ <property name="upper">100</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="vadjustment">
+ <property name="upper">100</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ <signal name="changed" handler="scroll_changed_cb" swapped="no"/>
+ <signal name="value-changed" handler="scroll_value_changed_cb" swapped="no"/>
+ </object>
+ <template class="MathWindow" parent="GtkApplicationWindow">
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes">Calculator</property>
+ <property name="role">gnome-calculator</property>
+ <property name="resizable">False</property>
+ <property name="show_menubar">False</property>
+ <child>
+ <object class="GtkGrid" id="grid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <property name="border_width">6</property>
+ <property name="orientation">vertical</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolled_window">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="hadjustment">hadjustment</property>
+ <property name="vadjustment">vadjustment</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="shadow_type">in</property>
+ <property name="min_content_height">154</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="titlebar">
+ <object class="GtkHeaderBar" id="headerbar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show_close_button">True</property>
+ <child type="title">
+ <object class="GtkMenuButton" id="menu_button">
+ <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="GtkGrid" id="grid1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="mode_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">baseline</property>
+ <property name="hexpand">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkArrow" id="arrow">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="arrow_type">down</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <style>
+ <class name="title"/>
+ <class name="text-button"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/gnome-calculator.doap b/gnome-calculator.doap
index 90d320e..66de213 100644
--- a/gnome-calculator.doap
+++ b/gnome-calculator.doap
@@ -4,7 +4,7 @@
xmlns:gnome="http://api.gnome.org/doap-extensions#"
xmlns="http://usefulinc.com/ns/doap#">
- <name xml:lang="en">gnome-calculator</name>
+ <name xml:lang="en">GNOME Calculator/name>
<shortdesc xml:lang="en">Desktop calculator</shortdesc>
<homepage rdf:resource="https://wiki.gnome.org/Apps/Calculator" />
<mailing-list rdf:resource="https://mail.gnome.org/mailman/listinfo/gcalctool-list" />
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 4124820..f0d867a 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -8,6 +8,7 @@
data/gnome-calculator.desktop.in
data/gnome-calculator.appdata.xml.in
data/math-converter.ui
+data/math-window.ui
[type: gettext/glade]data/menu.ui
data/org.gnome.calculator.gschema.xml
lib/currency.vala
diff --git a/src/math-buttons.vala b/src/math-buttons.vala
index 1207eff..9fd6333 100644
--- a/src/math-buttons.vala
+++ b/src/math-buttons.vala
@@ -94,7 +94,7 @@ public class MathButtons : Gtk.Box
public MathButtons (MathEquation equation)
{
- Object (orientation: Gtk.Orientation.VERTICAL);
+ Object (orientation: Gtk.Orientation.VERTICAL, vexpand_set: true);
spacing = 6;
show.connect (load_buttons);
this.equation = equation;
diff --git a/src/math-window.vala b/src/math-window.vala
index c6c32f7..8eb121e 100644
--- a/src/math-window.vala
+++ b/src/math-window.vala
@@ -9,6 +9,7 @@
* license.
*/
+[GtkTemplate (ui = "/org/gnome/calculator/math-window.ui")]
public class MathWindow : Gtk.ApplicationWindow
{
private MathEquation _equation;
@@ -21,11 +22,15 @@ public class MathWindow : Gtk.ApplicationWindow
public MathButtons buttons { get { return _buttons; } }
private bool right_aligned;
private bool remove_buttons;
- private Gtk.MenuButton menu_button;
- private Gtk.HeaderBar headerbar;
- private Gtk.Box vbox;
+ [GtkChild]
+ private Gtk.MenuButton menu_button;
+ [GtkChild]
private Gtk.Label mode_label;
+ [GtkChild]
+ private Gtk.ScrolledWindow scrolled_window;
+ [GtkChild]
+ private Gtk.Grid grid;
private const ActionEntry[] window_entries =
{
@@ -40,15 +45,7 @@ public class MathWindow : Gtk.ApplicationWindow
{
Object (application: app);
_equation = equation;
- set_title (/* Title of main window */
- _("Calculator"));
-
- role = "gnome-calculator";
- resizable = false;
- converter = new MathConverter (_equation);
- converter.set_category (null);
- converter.set_conversion (equation.source_units, equation.target_units);
- add_action_entries (window_entries, this);
+ right_aligned = true;
var builder = new Gtk.Builder ();
try
@@ -60,51 +57,13 @@ public class MathWindow : Gtk.ApplicationWindow
error ("Error loading menu UI: %s", e.message);
}
- mode_label = new Gtk.Label (null);
- mode_label.show ();
-
- var arrow = new Gtk.Arrow (Gtk.ArrowType.DOWN, Gtk.ShadowType.NONE);
- arrow.show ();
-
- var menu_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6);
- menu_box.pack_start (mode_label);
- menu_box.pack_start (arrow);
- menu_box.show ();
-
- menu_button = new Gtk.MenuButton ();
- menu_button.add (menu_box);
menu_button.menu_model = (MenuModel) builder.get_object ("window-menu");
- menu_button.get_style_context ().add_class ("title");
- menu_button.get_style_context ().add_class ("text-button");
- menu_button.use_popover = true;
- menu_button.relief = Gtk.ReliefStyle.NONE;
- menu_button.show ();
-
- headerbar = new Gtk.HeaderBar ();
- headerbar.show_close_button = true;
- headerbar.custom_title = menu_button;
- headerbar.show ();
- set_titlebar (headerbar);
-
- var main_vbox = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
- add (main_vbox);
- main_vbox.show ();
-
- vbox = new Gtk.Box (Gtk.Orientation.VERTICAL, 6);
- vbox.border_width = 6;
- vbox.set_vexpand (true);
- vbox.pack_start (converter, false, true, 0);
- main_vbox.pack_start (vbox, true, true, 0);
- vbox.show ();
-
- var scrolled_window = new Gtk.ScrolledWindow (null, null);
- scrolled_window.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER);
- scrolled_window.set_shadow_type (Gtk.ShadowType.IN);
- vbox.pack_start (scrolled_window, false, true, 0);
- scrolled_window.get_hadjustment ().changed.connect (scroll_changed_cb);
- scrolled_window.get_hadjustment ().value_changed.connect (scroll_value_changed_cb);
- right_aligned = true;
- scrolled_window.show ();
+ add_action_entries (window_entries, this);
+
+ converter = new MathConverter (_equation);
+ converter.set_category (null);
+ converter.set_conversion (equation.source_units, equation.target_units);
+ grid.add (converter);
_display = new MathDisplay (equation);
scrolled_window.add (_display);
@@ -112,15 +71,17 @@ public class MathWindow : Gtk.ApplicationWindow
_display.grabfocus ();
_buttons = new MathButtons (equation);
+ grid.add(buttons);
if (_buttons.mode != ButtonMode.KEYBOARD) /* Checks if the calculator is in Keyboard mode or not */
{
- vbox.pack_start (buttons, true, true, 0); /* Packs buttons if not in keyboard mode. */
+ buttons.set_visible (true);
remove_buttons = false;
converter.set_visible (false);
}
else
{
+ buttons.set_visible(false);
remove_buttons = true;
converter.set_visible (true); /* Unpacks buttons if in keyboard mode */
resizable = true;
@@ -180,14 +141,14 @@ public class MathWindow : Gtk.ApplicationWindow
if (remove_buttons == true && buttons.mode != ButtonMode.KEYBOARD)
{
- vbox.pack_start (buttons, true, true, 0); /* Packs buttons when calculator is switched from
keyboard mode to any other mode */
+ buttons.set_visible (true);
remove_buttons = false;
converter.set_visible (false);
resizable = false;
}
else if (remove_buttons == false && buttons.mode == ButtonMode.KEYBOARD)
{
- vbox.remove (vbox.get_children ().nth_data (2)); /* Unpacks buttons when switched to keyboard
mode */
+ buttons.set_visible (false);
remove_buttons = true;
converter.set_visible (true); /* Converter above the display window is set to visible. */
resizable = true;
@@ -238,12 +199,14 @@ public class MathWindow : Gtk.ApplicationWindow
return result;
}
+ [GtkCallback]
private void scroll_changed_cb (Gtk.Adjustment adjustment)
{
if (right_aligned)
adjustment.set_value (adjustment.get_upper () - adjustment.get_page_size ());
}
+ [GtkCallback]
private void scroll_value_changed_cb (Gtk.Adjustment adjustment)
{
if (adjustment.get_value () == adjustment.get_upper () - adjustment.get_page_size ())
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]