[glabels/vala] Incorporate field menu as submenu of color menu.
- From: Jim Evins <jimevins src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glabels/vala] Incorporate field menu as submenu of color menu.
- Date: Mon, 12 Mar 2012 03:52:35 +0000 (UTC)
commit 66da0d8e655d6558bd316198ab5be2c5b949f499
Author: Jim Evins <evins snaught com>
Date: Sun Mar 11 23:51:26 2012 -0400
Incorporate field menu as submenu of color menu.
data/ui/object_editor.ui | 48 +++++++---
glabels/Makefile.am | 4 +-
glabels/color_button.vala | 97 ++++++++++++++++----
glabels/color_menu.vala | 90 +++++++++++++++----
glabels/color_swatch.vala | 30 ++++---
glabels/field_button.vala | 4 +-
.../{field_button_menu.vala => field_menu.vala} | 14 ++--
..._button_menu_item.vala => field_menu_item.vala} | 4 +-
glabels/object_editor.vala | 38 +++++++-
9 files changed, 255 insertions(+), 74 deletions(-)
---
diff --git a/data/ui/object_editor.ui b/data/ui/object_editor.ui
index 85ba3e0..a9731f5 100644
--- a/data/ui/object_editor.ui
+++ b/data/ui/object_editor.ui
@@ -1,6 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.20"/>
+ <object class="GtkSizeGroup" id="color_box_sizegroup">
+ <widgets>
+ <widget name="shadow_color_box"/>
+ <widget name="line_color_box"/>
+ <widget name="fill_color_box"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup" id="label_sizegroup">
+ <widgets>
+ <widget name="line_w_label"/>
+ <widget name="line_color_label"/>
+ <widget name="fill_color_label"/>
+ <widget name="pos_x_label"/>
+ <widget name="pos_y_label"/>
+ <widget name="size_w_label"/>
+ <widget name="size_h_label"/>
+ <widget name="label40"/>
+ <widget name="label41"/>
+ <widget name="label45"/>
+ <widget name="label46"/>
+ </widgets>
+ </object>
<object class="GtkAdjustment" id="line_width_adjustment">
<property name="lower">0.25</property>
<property name="upper">10</property>
@@ -120,13 +142,11 @@
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="hexpand">True</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<property name="n_rows">2</property>
<child>
- <placeholder/>
- </child>
- <child>
<object class="GtkLabel" id="line_w_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -162,6 +182,7 @@
<object class="GtkLabel" id="label21">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="xalign">0</property>
<property name="label" translatable="yes">points</property>
</object>
<packing>
@@ -176,7 +197,6 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.14000000059604645</property>
<property name="label" translatable="yes">Color:</property>
</object>
<packing>
@@ -201,6 +221,9 @@
<property name="height">1</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</child>
</object>
@@ -235,18 +258,15 @@
<object class="GtkGrid" id="grid2">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="hexpand">True</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<property name="n_rows">1</property>
<child>
- <placeholder/>
- </child>
- <child>
<object class="GtkLabel" id="fill_color_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.14000000059604645</property>
<property name="label" translatable="yes">Color:</property>
</object>
<packing>
@@ -260,7 +280,6 @@
<object class="GtkBox" id="fill_color_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
@@ -272,6 +291,9 @@
<property name="height">1</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</child>
</object>
@@ -666,13 +688,11 @@
<object class="GtkGrid" id="shadow_controls_grid">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="hexpand">True</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<property name="n_rows">4</property>
<child>
- <placeholder/>
- </child>
- <child>
<object class="GtkLabel" id="label40">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -705,7 +725,6 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.14000000059604645</property>
<property name="label" translatable="yes">Color:</property>
</object>
<packing>
@@ -840,6 +859,9 @@
<property name="height">1</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</child>
</object>
diff --git a/glabels/Makefile.am b/glabels/Makefile.am
index fd65d5d..466ac0c 100644
--- a/glabels/Makefile.am
+++ b/glabels/Makefile.am
@@ -19,8 +19,8 @@ glabels_4_SOURCES = \
cursor.vapi \
enum_util.vala \
field_button.vala \
- field_button_menu.vala \
- field_button_menu_item.vala \
+ field_menu.vala \
+ field_menu_item.vala \
file.vala \
file_util.vala \
font_button.vala \
diff --git a/glabels/color_button.vala b/glabels/color_button.vala
index 3129d9b..a8c2d8c 100644
--- a/glabels/color_button.vala
+++ b/glabels/color_button.vala
@@ -27,18 +27,19 @@ namespace glabels
public class ColorButton : Gtk.ToggleButton
{
- private const int SWATCH_W = 24;
+ private const int SWATCH_W = 100;
private const int SWATCH_H = 24;
- public signal void color_changed( Color color,
- bool is_default );
+ public signal void color_changed( ColorNode color_node,
+ bool is_default );
private bool is_default_flag;
- private Color color;
+ private ColorNode color_node;
private Color default_color;
private ColorSwatch swatch;
+ private Gtk.Label label;
private ColorMenu menu;
@@ -57,41 +58,80 @@ namespace glabels
swatch = new ColorSwatch( SWATCH_W, SWATCH_H, color );
hbox.pack_start( swatch, true, true, 0 );
+ label = new Gtk.Label( "" );
+ label.hide();
+ hbox.pack_start( label, true, true, 0 );
+
Gtk.Arrow arrow = new Gtk.Arrow( Gtk.ArrowType.DOWN, Gtk.ShadowType.IN );
hbox.pack_end( arrow, false, false, 0 );
this.default_color = default_color;
- this.color = color;
+ this.color_node = ColorNode.from_color( color );
- menu = new ColorMenu( default_label, color );
+ menu = new ColorMenu( default_label, default_color, color );
menu.show_all();
menu.color_changed.connect( on_menu_color_changed );
menu.selection_done.connect( on_menu_selection_done );
this.button_press_event.connect( on_button_press_event );
+ this.show.connect( on_show );
+ }
+
+
+ public void set_color_node( ColorNode color_node )
+ {
+ is_default_flag = false;
+
+ this.color_node = color_node;
+
+ swatch.set_color( color_node.color );
}
+
public void set_color( Color color )
{
is_default_flag = false;
- this.color = color;
+
+ this.color_node.field_flag = false;
+ this.color_node.color = color;
+ this.color_node.key = null;
+
swatch.set_color( color );
}
+
public void set_to_default()
{
is_default_flag = true;
- color = default_color;
- swatch.set_color( color );
+
+ color_node.field_flag = false;
+ color_node.color = default_color;
+ color_node.key = null;
+
+ swatch.set_color( default_color );
}
- public Color get_color( out bool is_default )
+
+ public ColorNode get_color_node( out bool is_default )
{
is_default = is_default_flag;
- return color;
+ return color_node;
+ }
+
+
+ public void set_keys( List<string> key_list )
+ {
+ menu.set_keys( key_list );
+ }
+
+
+ public void clear_keys()
+ {
+ menu.clear_keys();
}
+
private void menu_position_function( Gtk.Menu menu,
out int x,
out int y,
@@ -135,6 +175,7 @@ namespace glabels
push_in = true;
}
+
private bool on_button_press_event( Gdk.EventButton event )
{
switch (event.button)
@@ -153,24 +194,46 @@ namespace glabels
return false;
}
- private void on_menu_color_changed( Color color, bool is_default )
+
+ private void on_show()
{
+ base.show();
- if (is_default)
+ if ( color_node.field_flag )
{
- this.color = default_color;
+ swatch.hide();
+ label.show();
}
else
{
- this.color = color;
+ swatch.show();
+ label.hide();
}
+ }
+
+
+ private void on_menu_color_changed( ColorNode color_node, bool is_default )
+ {
+ this.color_node = color_node;
this.is_default_flag = is_default;
- swatch.set_color( color );
+ if ( color_node.field_flag )
+ {
+ swatch.hide();
+ label.show();
+ label.set_label( "$(%s)".printf( color_node.key ) );
+ }
+ else
+ {
+ swatch.show();
+ swatch.set_color( color_node.color );
+ label.hide();
+ }
- color_changed( color, is_default );
+ color_changed( color_node, is_default );
}
+
private void on_menu_selection_done()
{
this.set_active( false );
diff --git a/glabels/color_menu.vala b/glabels/color_menu.vala
index d721373..4cb1fde 100644
--- a/glabels/color_menu.vala
+++ b/glabels/color_menu.vala
@@ -26,11 +26,11 @@ namespace glabels
public class ColorMenu : Gtk.Menu
{
- public signal void color_changed( Color color,
- bool is_default );
+ public signal void color_changed( ColorNode color_node,
+ bool is_default );
private Color default_color;
- private Color color;
+ private ColorNode color_node;
private struct ColorTableEntry {
uchar r;
@@ -98,6 +98,8 @@ namespace glabels
private const int ROW_HISTORY = ROW_SEP_2 + 1;
private const int ROW_SEP_3 = ROW_HISTORY + 1;
private const int ROW_CUSTOM = ROW_SEP_3 + 1;
+ private const int ROW_SEP_4 = ROW_CUSTOM + 1;
+ private const int ROW_FIELD = ROW_SEP_4 + 1;
private Gtk.MenuItem default_menu_item;
@@ -106,12 +108,18 @@ namespace glabels
private Gtk.MenuItem custom_menu_item;
+ private Gtk.MenuItem use_merge_field_menu_item;
+ private FieldMenu merge_field_menu;
+
+
public ColorMenu( string default_label,
+ Color default_color,
Color color )
{
Gtk.SeparatorMenuItem separator_menu_item;
- this.default_color = this.color = color;
+ this.default_color = default_color;
+ this.color_node = ColorNode.from_color( color );
this.default_menu_item = new Gtk.MenuItem.with_label( default_label );
this.attach( this.default_menu_item, 0, PALETTE_COLS, ROW_DEFAULT, ROW_DEFAULT+1 );
@@ -160,34 +168,67 @@ namespace glabels
this.attach( custom_menu_item, 0, PALETTE_COLS, ROW_CUSTOM, ROW_CUSTOM+1 );
+ separator_menu_item = new Gtk.SeparatorMenuItem();
+ this.attach( separator_menu_item, 0, PALETTE_COLS, ROW_SEP_4, ROW_SEP_4+1 );
+
+ use_merge_field_menu_item = new Gtk.MenuItem.with_label( _("Use merge field") );
+ this.attach( use_merge_field_menu_item, 0, PALETTE_COLS, ROW_FIELD, ROW_FIELD+1 );
+ merge_field_menu = new FieldMenu();
+ use_merge_field_menu_item.set_submenu( merge_field_menu );
+ use_merge_field_menu_item.set_sensitive( false );
+
+ merge_field_menu.key_selected.connect( on_merge_field_menu_key_selected );
+
custom_color_history = new ColorHistory( PALETTE_COLS );
this.map_event.connect( on_map_event );
}
+
+ public void set_keys( List<string> key_list )
+ {
+ use_merge_field_menu_item.set_sensitive( true );
+ merge_field_menu.set_keys( key_list );
+ }
+
+
+ public void clear_keys()
+ {
+ use_merge_field_menu_item.set_sensitive( false );
+ }
+
+
private void on_default_menu_item_activate()
{
- color = default_color;
+ color_node.field_flag = false;
+ color_node.color = default_color;
+ color_node.key = null;
- color_changed( color, true );
+ color_changed( color_node, true );
}
+
private void on_palette_menu_item_activated( int id )
{
- color = Color.from_byte_rgb( color_table[id].r,
- color_table[id].g,
- color_table[id].b );
+ color_node.field_flag = false;
+ color_node.color = Color.from_byte_rgb( color_table[id].r,
+ color_table[id].g,
+ color_table[id].b );
+ color_node.key = null;
- color_changed( color, false );
+ color_changed( color_node, false );
}
+
private void on_history_menu_item_activated( int id )
{
+ color_node.field_flag = false;
+ color_node.color = custom_color_history.get_color( id );
+ color_node.key = null;
- color = custom_color_history.get_color( id );
-
- color_changed( color, false );
+ color_changed( color_node, false );
}
+
private void on_custom_menu_item_activate()
{
Gtk.ColorSelectionDialog dialog = new Gtk.ColorSelectionDialog( _("Custom Color") );
@@ -195,7 +236,7 @@ namespace glabels
Gdk.Color gdk_color;
int response;
- gdk_color = color.to_gdk_color();
+ gdk_color = color_node.color.to_gdk_color();
colorsel.set_current_color( gdk_color );
response = dialog.run();
@@ -204,10 +245,13 @@ namespace glabels
case Gtk.ResponseType.OK:
colorsel.get_current_color( out gdk_color );
- color = Color.from_gdk_color( gdk_color );
- custom_color_history.add_color( color );
+ color_node.field_flag = false;
+ color_node.color = Color.from_gdk_color( gdk_color );
+ color_node.key = null;
+
+ custom_color_history.add_color( color_node.color );
- color_changed( color, false );
+ color_changed( color_node, false );
dialog.destroy();
break;
@@ -219,6 +263,17 @@ namespace glabels
}
+
+ private void on_merge_field_menu_key_selected( string key )
+ {
+ color_node.field_flag = true;
+ color_node.color = Color.none();
+ color_node.key = key;
+
+ color_changed( color_node, false );
+ }
+
+
private void load_custom_color_history()
{
int i;
@@ -238,6 +293,7 @@ namespace glabels
}
+
private bool on_map_event()
{
load_custom_color_history();
diff --git a/glabels/color_swatch.vala b/glabels/color_swatch.vala
index ce763e1..bc3387c 100644
--- a/glabels/color_swatch.vala
+++ b/glabels/color_swatch.vala
@@ -28,6 +28,7 @@ namespace glabels
{
private Color color;
+
public ColorSwatch( int w,
int h,
Color color )
@@ -38,18 +39,17 @@ namespace glabels
this.color = color;
}
+
public override bool draw( Cairo.Context cr )
{
- Gtk.Style style;
- double w, h;
- Color fill_color, line_color;
+ Color fill_color, line_color;
cr.set_antialias( Cairo.Antialias.NONE );
- w = get_allocated_width();
- h = get_allocated_height();
+ double w = get_allocated_width();
+ double h = get_allocated_height();
- style = this.get_style();
+ Gtk.Style style = this.get_style();
if ( this.is_sensitive() )
{
fill_color = color;
@@ -63,8 +63,11 @@ namespace glabels
cr.rectangle( 1, 1, w-2, h-2 );
- cr.set_source_rgba( fill_color.r, fill_color.g, fill_color.b, fill_color.a );
- cr.fill_preserve();
+ if ( fill_color.has_alpha() )
+ {
+ cr.set_source_rgba( fill_color.r, fill_color.g, fill_color.b, fill_color.a );
+ cr.fill_preserve();
+ }
cr.set_source_rgb( line_color.r, line_color.g, line_color.b );
cr.set_line_width( 1.0 );
@@ -73,11 +76,13 @@ namespace glabels
return false;
}
+
public override void style_set( Gtk.Style? style )
{
redraw_canvas();
}
+
public void set_color( Color color )
{
if ( !this.color.equal( color ) )
@@ -87,18 +92,19 @@ namespace glabels
}
}
+
private void redraw_canvas()
{
- var window = get_window ();
+ var window = get_window();
if (null == window)
{
return;
}
- unowned Cairo.Region region = window.get_clip_region ();
+ unowned Cairo.Region region = window.get_clip_region();
// redraw the cairo canvas completely by exposing it
- window.invalidate_region (region, true);
- window.process_updates (true);
+ window.invalidate_region(region, true);
+ window.process_updates(true);
}
diff --git a/glabels/field_button.vala b/glabels/field_button.vala
index 0eb5031..bbfe620 100644
--- a/glabels/field_button.vala
+++ b/glabels/field_button.vala
@@ -29,8 +29,8 @@ namespace glabels
private bool klabel_is_key;
private string key;
- private Gtk.Label klabel;
- private FieldButtonMenu menu;
+ private Gtk.Label klabel;
+ private FieldMenu menu;
public signal void key_selected( string key );
public signal void changed();
diff --git a/glabels/field_button_menu.vala b/glabels/field_menu.vala
similarity index 81%
rename from glabels/field_button_menu.vala
rename to glabels/field_menu.vala
index 504f550..bb21622 100644
--- a/glabels/field_button_menu.vala
+++ b/glabels/field_menu.vala
@@ -24,11 +24,11 @@ using GLib;
namespace glabels
{
- public class FieldButtonMenu : Gtk.Menu
+ public class FieldMenu : Gtk.Menu
{
public signal void key_selected( string key );
- private List<unowned FieldButtonMenuItem> menu_items;
+ private List<unowned FieldMenuItem> menu_items;
private const int MAX_MENU_ROWS = 25;
@@ -36,8 +36,8 @@ namespace glabels
public void set_keys( List<string> key_list )
{
/* Remove old menu items and cleanup list. */
- unowned List<FieldButtonMenuItem> p;
- unowned List<FieldButtonMenuItem> p_next = null;
+ unowned List<FieldMenuItem> p;
+ unowned List<FieldMenuItem> p_next = null;
for ( p = menu_items; p != null; p = p_next )
{
remove( p.first().data );
@@ -51,7 +51,7 @@ namespace glabels
int i = 0;
foreach ( string key in key_list )
{
- FieldButtonMenuItem menu_item = new FieldButtonMenuItem( key );
+ FieldMenuItem menu_item = new FieldMenuItem( key );
menu_item.show();
menu_item.activate.connect( on_menu_item_activated );
@@ -68,8 +68,8 @@ namespace glabels
private void on_menu_item_activated( Gtk.MenuItem menu_item )
{
- FieldButtonMenuItem fb_menu_item = (FieldButtonMenuItem)menu_item;
- key_selected( fb_menu_item.key );
+ FieldMenuItem f_menu_item = (FieldMenuItem)menu_item;
+ key_selected( f_menu_item.key );
}
diff --git a/glabels/field_button_menu_item.vala b/glabels/field_menu_item.vala
similarity index 90%
rename from glabels/field_button_menu_item.vala
rename to glabels/field_menu_item.vala
index 7149c1c..93d72e5 100644
--- a/glabels/field_button_menu_item.vala
+++ b/glabels/field_menu_item.vala
@@ -24,11 +24,11 @@ using GLib;
namespace glabels
{
- public class FieldButtonMenuItem : Gtk.MenuItem
+ public class FieldMenuItem : Gtk.MenuItem
{
public string key { get; private set; }
- public FieldButtonMenuItem( string key )
+ public FieldMenuItem( string key )
{
this.key = key;
diff --git a/glabels/object_editor.vala b/glabels/object_editor.vala
index f293fb1..b18674f 100644
--- a/glabels/object_editor.vala
+++ b/glabels/object_editor.vala
@@ -55,7 +55,7 @@ namespace glabels
/* TODO: aspect lock, and image reset */
private Gtk.CheckButton shadow_enable_check;
- private Gtk.Table shadow_controls_grid;
+ private Gtk.Grid shadow_controls_grid;
private Gtk.SpinButton shadow_x_spin;
private Gtk.SpinButton shadow_y_spin;
private Gtk.Label shadow_x_units_label;
@@ -79,7 +79,7 @@ namespace glabels
"size_w_adjustment", "size_h_adjustment",
"pos_x_adjustment", "pos_y_adjustment",
"shadow_x_adjustment", "shadow_y_adjustment", "shadow_opacity_adjustment",
- "page_sizegroup", "width_sizegroup",
+ "page_sizegroup", "width_sizegroup", "label_sizegroup", "color_box_sizegroup",
null };
builder.add_objects_from_file( file, objects );
}
@@ -102,6 +102,40 @@ namespace glabels
title_label.set_use_markup( true );
title_label.set_sensitive( false );
+ /* Line widgets. */
+ line_width_spin = builder.get_object( "line_width_spin" ) as Gtk.SpinButton;
+ line_color_box = builder.get_object( "line_color_box" ) as Gtk.Box;
+ line_color_button = new ColorButton( _("No line"), Color.none(), Color.black() );
+ line_color_box.pack_start( line_color_button, true, true, 0 );
+
+ /* Fill widgets. */
+ fill_color_box = builder.get_object( "fill_color_box" ) as Gtk.Box;
+ fill_color_button = new ColorButton( _("No fill"), Color.none(), Color.black() );
+ fill_color_box.pack_start( fill_color_button, true, true, 0 );
+
+ /* Position widgets. */
+ pos_x_spin = builder.get_object( "pos_x_spin" ) as Gtk.SpinButton;
+ pos_y_spin = builder.get_object( "pos_y_spin" ) as Gtk.SpinButton;
+ pos_x_units_label = builder.get_object( "pos_x_units_label" ) as Gtk.Label;
+ pos_y_units_label = builder.get_object( "pos_y_units_label" ) as Gtk.Label;
+
+ /* Size widgets. */
+ size_w_spin = builder.get_object( "size_w_spin" ) as Gtk.SpinButton;
+ size_h_spin = builder.get_object( "size_h_spin" ) as Gtk.SpinButton;
+ size_w_units_label = builder.get_object( "size_w_units_label" ) as Gtk.Label;
+ size_h_units_label = builder.get_object( "size_h_units_label" ) as Gtk.Label;
+
+ /* Shadow widgets. */
+ shadow_enable_check = builder.get_object( "shadow_enable_check" ) as Gtk.CheckButton;
+ shadow_controls_grid = builder.get_object( "shadow_controls_grid" ) as Gtk.Grid;
+ shadow_x_spin = builder.get_object( "shadow_x_spin" ) as Gtk.SpinButton;
+ shadow_y_spin = builder.get_object( "shadow_y_spin" ) as Gtk.SpinButton;
+ shadow_x_units_label = builder.get_object( "shadow_x_units_label" ) as Gtk.Label;
+ shadow_y_units_label = builder.get_object( "shadow_y_units_label" ) as Gtk.Label;
+ shadow_color_box = builder.get_object( "shadow_color_box" ) as Gtk.Box;
+ shadow_opacity_spin = builder.get_object( "shadow_opacity_spin" ) as Gtk.SpinButton;
+ shadow_color_button = new ColorButton( _("Default"), Color.black(), Color.black() );
+ shadow_color_box.pack_start(shadow_color_button, true, true, 0 );
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]