[glabels/vala] Initial vala implementation of merge property editor.
- From: Jim Evins <jimevins src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glabels/vala] Initial vala implementation of merge property editor.
- Date: Mon, 8 Oct 2012 03:01:42 +0000 (UTC)
commit 9b82a1cd47224bd3e82df267b449cdde71818302
Author: Jim Evins <evins snaught com>
Date: Sun Oct 7 23:00:42 2012 -0400
Initial vala implementation of merge property editor.
data/ui/Makefile.am | 5 +-
data/ui/merge-properties-dialog.ui | 212 --------------------------
data/ui/merge_property_editor.ui | 255 +++++++++++++++++++++++++++++++
data/ui/property-bar.ui | 237 -----------------------------
data/ui/property_editor.ui | 52 -------
glabels/Makefile.am | 2 +-
glabels/field_button.vala | 19 ++-
glabels/label.vala | 10 +-
glabels/merge.vala | 5 +
glabels/merge_backends.vala | 63 +++++++-
glabels/merge_property_editor.vala | 292 ++++++++++++++++++++++++++++++++++++
glabels/ui.vala | 47 +------
glabels/window.vala | 76 ++++++----
13 files changed, 688 insertions(+), 587 deletions(-)
---
diff --git a/data/ui/Makefile.am b/data/ui/Makefile.am
index d83cc01..d730b20 100644
--- a/data/ui/Makefile.am
+++ b/data/ui/Makefile.am
@@ -1,11 +1,14 @@
## Process this file with automake to produce Makefile.in
+NULL =
+
builderdir = $(datadir)/$(GLABELS_BRANCH)/ui/
builder_DATA = \
+ merge_property_editor.ui \
new_label_dialog.ui \
object_editor.ui \
- property_editor.ui
+ $(NULL)
EXTRA_DIST = $(builder_DATA)
diff --git a/data/ui/merge_property_editor.ui b/data/ui/merge_property_editor.ui
new file mode 100644
index 0000000..0c65d6d
--- /dev/null
+++ b/data/ui/merge_property_editor.ui
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkWindow" id="window1">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkBox" id="merge_property_editor_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">9</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkGrid" id="grid1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Format:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Location:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="type_combo">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="entry_text_column">0</property>
+ <property name="id_column">1</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="location_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="location_na_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="no_show_all">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">N/A</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="location_fixed_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="no_show_all">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Fixed</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFileChooserButton" id="location_file_button">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="no_show_all">True</property>
+ <property name="orientation">vertical</property>
+ <property name="focus_on_click">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"><b>Source</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="records_treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="rules_hint">True</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection1">
+ <property name="mode">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkButton" id="select_all_button">
+ <property name="label" translatable="yes">Select all</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="unselect_all_button">
+ <property name="label" translatable="yes">Unselect all</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"><b>Records</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/glabels/Makefile.am b/glabels/Makefile.am
index 1d2e23c..82e4d41 100644
--- a/glabels/Makefile.am
+++ b/glabels/Makefile.am
@@ -62,6 +62,7 @@ glabels_4_SOURCES = \
merge_backends/merge_text.vala \
merge_field.vala \
merge_info.vala \
+ merge_property_editor.vala \
merge_record.vala \
message_bar.vala \
model.vala \
@@ -77,7 +78,6 @@ glabels_4_SOURCES = \
prefs.vala \
print_op.vala \
print_op_dialog.vala \
- property_editor.vala \
svg_cache.vala \
template_history.vala \
text_line.vala \
diff --git a/glabels/field_button.vala b/glabels/field_button.vala
index ce77bc5..6d3cd83 100644
--- a/glabels/field_button.vala
+++ b/glabels/field_button.vala
@@ -72,15 +72,22 @@ namespace glabels
public void set_keys( List<string> key_list )
{
menu.set_keys( key_list );
- key = key_list.first().data;
- if ( klabel_is_key )
+ if ( key_list.length() > 0 )
{
- klabel.set_text( key );
- }
+ key = key_list.first().data;
+ if ( klabel_is_key )
+ {
+ klabel.set_text( key );
+ }
- menu.show_all();
+ menu.show_all();
- set_sensitive( true );
+ set_sensitive( true );
+ }
+ else
+ {
+ set_sensitive( false );
+ }
}
diff --git a/glabels/label.vala b/glabels/label.vala
index 0a46a06..f6206d3 100644
--- a/glabels/label.vala
+++ b/glabels/label.vala
@@ -167,6 +167,7 @@ namespace glabels
if ( _merge != value )
{
_merge = value;
+ _merge.changed.connect( on_merge_changed );
changed();
merge_changed();
modified = true;
@@ -204,7 +205,7 @@ namespace glabels
public Label()
{
- _merge = new MergeNone();
+ _merge = MergeBackends.create_merge( "None" );
template_history = new TemplateHistory( 5 );
@@ -318,6 +319,13 @@ namespace glabels
}
+ private void on_merge_changed()
+ {
+ changed();
+ merge_changed();
+ }
+
+
public void draw( Cairo.Context cr,
bool in_editor,
MergeRecord? record )
diff --git a/glabels/merge.vala b/glabels/merge.vala
index f73b6c4..b80f962 100644
--- a/glabels/merge.vala
+++ b/glabels/merge.vala
@@ -27,6 +27,9 @@ namespace glabels
public abstract class Merge : Object
{
+ public signal void changed();
+
+
public MergeInfo info { get; construct; }
@@ -62,6 +65,8 @@ namespace glabels
_record_list.append( record );
}
this.close();
+
+ changed();
}
}
diff --git a/glabels/merge_backends.vala b/glabels/merge_backends.vala
index 003d427..a15a863 100644
--- a/glabels/merge_backends.vala
+++ b/glabels/merge_backends.vala
@@ -27,6 +27,10 @@ namespace glabels
public class MergeBackends
{
+ private const string DEFAULT_ID = "None";
+ private const string DEFAULT_NAME = _("None");
+
+
private static Gee.HashMap<string,MergeInfo> id_map;
private static Gee.HashMap<string,MergeInfo> name_map;
@@ -43,19 +47,19 @@ namespace glabels
register_backend( "Text/Comma", _("Text: Comma Separated Values (CSV)"),
MergeSrcType.FILE, typeof(MergeTextCsv) );
register_backend( "Text/Comma/Line1Keys", _("Text: Comma Separated Values (CSV), keys on line 1"),
- MergeSrcType.FILE, typeof(MergeTextCsv) );
+ MergeSrcType.FILE, typeof(MergeTextCsvKeys) );
register_backend( "Text/Tab", _("Text: Tab Separated Values (TSV)"),
MergeSrcType.FILE, typeof(MergeTextTsv) );
register_backend( "Text/Tab/Line1Keys", _("Text: Tab Separated Values (TSV), keys on line 1"),
- MergeSrcType.FILE, typeof(MergeTextTsv) );
+ MergeSrcType.FILE, typeof(MergeTextTsvKeys) );
register_backend( "Text/Colon", _("Text: Colon Separated Values"),
MergeSrcType.FILE, typeof(MergeTextColon) );
register_backend( "Text/Colon/Line1Keys", _("Text: Colon Separated Values, keys on line 1"),
- MergeSrcType.FILE, typeof(MergeTextColon) );
+ MergeSrcType.FILE, typeof(MergeTextColonKeys) );
register_backend( "Text/Semicolon", _("Text: Semicolon Separated Values"),
MergeSrcType.FILE, typeof(MergeTextSemicolon) );
register_backend( "Text/Semicolon/Line1Keys", _("Text: Semicolon Separated Values, keys on line 1"),
- MergeSrcType.FILE, typeof(MergeTextSemicolon) );
+ MergeSrcType.FILE, typeof(MergeTextSemicolonKeys) );
initialized = true;
}
@@ -102,10 +106,57 @@ namespace glabels
}
else
{
- return new MergeNone();
+ MergeInfo merge_info = id_map.get( "None" );
+
+ return Object.new( typeof(MergeNone), info: merge_info ) as Merge;
+ }
+ }
+
+
+ public static List<string> get_name_list()
+ {
+ List<string> list = null;
+
+ foreach ( string key in name_map.keys )
+ {
+ list.insert_sorted( key, strcmp );
+ }
+
+ return list;
+ }
+
+
+ public static string id_to_name( string id )
+ {
+ string id_casefold = id.casefold();
+
+ if ( id_map.has_key( id_casefold ) )
+ {
+ MergeInfo merge_info = id_map.get( id_casefold );
+
+ return merge_info.name;
+ }
+ else
+ {
+ return DEFAULT_NAME;
+ }
+ }
+
+
+ public static string name_to_id( string name )
+ {
+ if ( name_map.has_key( name ) )
+ {
+ MergeInfo merge_info = name_map.get( name );
+
+ return merge_info.id;
+ }
+ else
+ {
+ return DEFAULT_ID;
}
}
-
+
}
diff --git a/glabels/merge_property_editor.vala b/glabels/merge_property_editor.vala
new file mode 100644
index 0000000..bb35c8b
--- /dev/null
+++ b/glabels/merge_property_editor.vala
@@ -0,0 +1,292 @@
+/* merge_property_editor.vala
+ *
+ * Copyright (C) 2012 Jim Evins <evins snaught com>
+ *
+ * This file is part of gLabels.
+ *
+ * gLabels is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * gLabels is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gLabels. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+using GLib;
+
+namespace glabels
+{
+
+ public class MergePropertyEditor : Gtk.Box
+ {
+ private const int SELECT_COLUMN = 0;
+ private const int RECORD_FIELD_COLUMN = 1;
+ private const int VALUE_COLUMN = 2;
+ private const int IS_RECORD_COLUMN = 3;
+ private const int DATA_COLUMN = 4;
+
+
+ private Model model;
+
+
+ /* Widgets */
+ private Gtk.ComboBoxText type_combo;
+ private Gtk.Label location_na_label;
+ private Gtk.Label location_fixed_label;
+ private Gtk.FileChooserButton location_file_button;
+ private Gtk.TreeView records_treeview;
+ private Gtk.Button select_all_button;
+ private Gtk.Button unselect_all_button;
+
+ /* Treeview Model */
+ private Gtk.TreeStore tree_store;
+
+
+ /* Signal IDs */
+ private ulong sigid_type_combo_changed;
+ private ulong sigid_location_file_button_selection_changed;
+
+
+ public MergePropertyEditor()
+ {
+ /* Load the user interface. */
+ Gtk.Builder builder = new Gtk.Builder();
+ try
+ {
+ string file = GLib.Path.build_filename( Config.DATADIR, Config.GLABELS_BRANCH,
+ "ui", "merge_property_editor.ui" );
+ string[] objects = { "merge_property_editor_box",
+ null };
+ builder.add_objects_from_file( file, objects );
+ }
+ catch ( Error err )
+ {
+ error( "Error: %s", err.message );
+ }
+
+ Gtk.Box merge_property_editor_box = builder.get_object( "merge_property_editor_box" ) as Gtk.Box;
+ pack_start( merge_property_editor_box );
+
+ type_combo = builder.get_object( "type_combo" ) as Gtk.ComboBoxText;
+ location_na_label = builder.get_object( "location_na_label" ) as Gtk.Label;
+ location_fixed_label = builder.get_object( "location_fixed_label" ) as Gtk.Label;
+ location_file_button = builder.get_object( "location_file_button" ) as Gtk.FileChooserButton;
+ records_treeview = builder.get_object( "records_treeview" ) as Gtk.TreeView;
+ select_all_button = builder.get_object( "select_all_button" ) as Gtk.Button;
+ unselect_all_button = builder.get_object( "unselect_all_button" ) as Gtk.Button;
+
+ foreach ( string name in MergeBackends.get_name_list() )
+ {
+ type_combo.append_text( name );
+ }
+
+ tree_store = new Gtk.TreeStore( 5,
+ /* 0 : SELECT_COLUMN */ typeof(bool),
+ /* 1 : RECORD_FIELD_COLUMN */ typeof(string),
+ /* 2 : VALUE_COLUMN */ typeof(string),
+ /* 3 : IS_RECORD_COLUMN */ typeof(bool),
+ /* 4 : DATA_COLUMN */ typeof(void*) );
+ records_treeview.set_model( tree_store );
+
+ Gtk.CellRendererToggle record_select_renderer = new Gtk.CellRendererToggle();
+ Gtk.TreeViewColumn record_select_column = new Gtk.TreeViewColumn.with_attributes( _("Select"),
+ record_select_renderer,
+ "active", 0, "visible", 3, null );
+ records_treeview.append_column( record_select_column );
+
+ Gtk.CellRendererText record_field_renderer = new Gtk.CellRendererText();
+ Gtk.TreeViewColumn record_field_column = new Gtk.TreeViewColumn.with_attributes( _("Record/Field"),
+ record_field_renderer,
+ "text", 1, null );
+ records_treeview.append_column( record_field_column );
+
+ Gtk.CellRendererText field_value_renderer = new Gtk.CellRendererText();
+ Gtk.TreeViewColumn field_value_column = new Gtk.TreeViewColumn.with_attributes( _("Value"),
+ field_value_renderer,
+ "text", 2, null );
+ records_treeview.append_column( field_value_column );
+
+ record_field_renderer.yalign = 0;
+ field_value_renderer.yalign = 0;
+
+ record_field_column.set_sizing( Gtk.TreeViewColumnSizing.AUTOSIZE );
+ field_value_column.set_sizing( Gtk.TreeViewColumnSizing.AUTOSIZE );
+
+ records_treeview.set_expander_column( record_field_column );
+
+ sigid_type_combo_changed =
+ type_combo.changed.connect( on_type_combo_changed );
+ sigid_location_file_button_selection_changed =
+ location_file_button.file_set.connect( on_location_file_button_selection_changed );
+ record_select_renderer.toggled.connect( on_record_select_toggled );
+ select_all_button.clicked.connect( on_select_all_button_clicked );
+ unselect_all_button.clicked.connect( on_unselect_all_button_clicked );
+ }
+
+
+ public void set_model( Model model )
+ {
+ this.model = model;
+
+ on_merge_changed();
+ model.label.merge_changed.connect( on_merge_changed );
+ }
+
+
+ private void on_merge_changed()
+ {
+ GLib.SignalHandler.block( (void *)type_combo, sigid_type_combo_changed );
+ ComboUtil.set_active_text( type_combo, model.label.merge.info.name );
+ GLib.SignalHandler.unblock( (void *)type_combo, sigid_type_combo_changed );
+
+ switch ( model.label.merge.info.src_type )
+ {
+ case MergeSrcType.NONE:
+ location_na_label.show();
+ location_fixed_label.hide();
+ location_file_button.hide();
+ break;
+ case MergeSrcType.FIXED:
+ location_na_label.hide();
+ location_fixed_label.show();
+ location_file_button.hide();
+ break;
+ case MergeSrcType.FILE:
+ location_na_label.hide();
+ location_fixed_label.hide();
+ location_file_button.show();
+
+ if ( model.label.merge.src != null )
+ {
+ GLib.SignalHandler.block( (void *)location_file_button, sigid_location_file_button_selection_changed );
+ location_file_button.set_filename( model.label.merge.src );
+ GLib.SignalHandler.unblock( (void *)location_file_button, sigid_location_file_button_selection_changed );
+ }
+ break;
+ default:
+ assert_not_reached();
+ }
+
+ load_tree( tree_store, model.label.merge );
+ }
+
+
+ private void load_tree( Gtk.TreeStore store, Merge merge )
+ {
+ store.clear();
+
+ string primary_key = merge.get_primary_key();
+
+ foreach ( MergeRecord record in merge.record_list )
+ {
+ string primary_value = record.eval_key( primary_key );
+
+ Gtk.TreeIter iter1;
+ store.append( out iter1, null );
+ store.set( iter1,
+ SELECT_COLUMN, record.selected,
+ RECORD_FIELD_COLUMN, primary_value,
+ IS_RECORD_COLUMN, true,
+ DATA_COLUMN, record );
+
+ foreach ( MergeField field in record.field_list )
+ {
+ Gtk.TreeIter iter2;
+ store.append( out iter2, iter1 );
+ store.set( iter2,
+ RECORD_FIELD_COLUMN, field.key,
+ VALUE_COLUMN, field.value,
+ IS_RECORD_COLUMN, false );
+ }
+ }
+
+ }
+
+
+
+ private void on_type_combo_changed()
+ {
+ string name = type_combo.get_active_text();
+ string id = MergeBackends.name_to_id( name );
+ model.label.merge = MergeBackends.create_merge( id );
+ }
+
+
+ private void on_location_file_button_selection_changed()
+ {
+ model.label.merge.src = location_file_button.get_filename();
+ }
+
+
+ private void on_record_select_toggled( string path_str )
+ {
+ /* get toggled iter */
+ Gtk.TreePath path = new Gtk.TreePath.from_string( path_str );
+ Gtk.TreeIter iter;
+ tree_store.get_iter( out iter, path );
+
+ /* get current data */
+ unowned MergeRecord record;
+ tree_store.get( iter, DATA_COLUMN, out record );
+
+ /* toggle the select flag within the record */
+ record.selected = !record.selected;
+
+ /* set new value in store */
+ tree_store.set( iter, SELECT_COLUMN, record.selected );
+ }
+
+
+ private void on_select_all_button_clicked()
+ {
+ Gtk.TreeIter iter;
+
+ for ( bool good = tree_store.get_iter_first( out iter );
+ good;
+ good = tree_store.iter_next( ref iter ) )
+ {
+ /* get current data */
+ unowned MergeRecord record;
+ tree_store.get( iter, DATA_COLUMN, out record );
+
+ /* set select flag within the record */
+ record.selected = true;
+
+ /* set new value in store */
+ tree_store.set( iter, SELECT_COLUMN, record.selected );
+ }
+ }
+
+
+ private void on_unselect_all_button_clicked()
+ {
+ Gtk.TreeIter iter;
+
+ for ( bool good = tree_store.get_iter_first( out iter );
+ good;
+ good = tree_store.iter_next( ref iter ) )
+ {
+ /* get current data */
+ unowned MergeRecord record;
+ tree_store.get( iter, DATA_COLUMN, out record );
+
+ /* clear select flag within the record */
+ record.selected = false;
+
+ /* set new value in store */
+ tree_store.set( iter, SELECT_COLUMN, record.selected );
+ }
+ }
+
+
+ }
+
+}
+
diff --git a/glabels/ui.vala b/glabels/ui.vala
index 44e34cf..15d6c88 100644
--- a/glabels/ui.vala
+++ b/glabels/ui.vala
@@ -358,13 +358,6 @@ namespace glabels
N_("Center objects to vertical label center"),
on_objects_center_vert },
- { "ObjectsMergeProperties",
- "glabels-merge",
- N_("Merge properties"),
- null,
- N_("Edit merge properties"),
- on_objects_merge_properties },
-
/* Help actions entries. */
{ "HelpContents",
@@ -509,8 +502,6 @@ namespace glabels
<menuitem action='ObjectsCenterHorizontal' always-show-image='true' />
<menuitem action='ObjectsCenterVertical' always-show-image='true' />
</menu>
- <separator />
- <menuitem action='ObjectsMergeProperties' />
</menu>
<menu action='HelpMenu'>
<menuitem action='HelpContents' />
@@ -524,10 +515,6 @@ namespace glabels
<toolitem action='FileSave' />
<separator />
<toolitem action='FilePrint' />
- <separator />
- <toolitem action='EditCut' />
- <toolitem action='EditCopy' />
- <toolitem action='EditPaste' />
</toolbar>
<toolbar name='DrawingToolBar'>
@@ -545,7 +532,9 @@ namespace glabels
<toolitem action='ViewZoom1to1' />
<toolitem action='ViewZoomToFit' />
<separator />
- <toolitem action='ObjectsMergeProperties' />
+ <toolitem action='EditCut' />
+ <toolitem action='EditCopy' />
+ <toolitem action='EditPaste' />
</toolbar>
<popup action='ContextMenu'>
@@ -631,8 +620,7 @@ namespace glabels
"/ui/MenuBar/ObjectsMenu/ObjectsAlignMenu/ObjectsAlignVCenter",
"/ui/MenuBar/ObjectsMenu/ObjectsCenterMenu",
"/ui/MenuBar/ObjectsMenu/ObjectsCenterMenu/ObjectsCenterHorizontal",
- "/ui/MenuBar/ObjectsMenu/ObjectsCenterMenu/ObjectsCenterVertical",
- "/ui/MenuBar/ObjectsMenu/ObjectsMergeProperties"
+ "/ui/MenuBar/ObjectsMenu/ObjectsCenterMenu/ObjectsCenterVertical"
};
static string[] doc_modified_verbs = {
@@ -1270,33 +1258,6 @@ namespace glabels
}
- private void on_objects_merge_properties( Gtk.Action action )
- {
- /*
- if (window->merge_dialog) {
-
- gtk_window_present (GTK_WINDOW(window->merge_dialog));
- gtk_window_set_transient_for (GTK_WINDOW (window->merge_dialog),
- GTK_WINDOW (window ));
-
- } else {
-
- window->merge_dialog =
- g_object_ref (
- gl_merge_properties_dialog_new (GL_VIEW(window->view)->label,
- GTK_WINDOW(window )) );
-
- g_signal_connect (G_OBJECT(window->merge_dialog), "destroy",
- G_CALLBACK (gtk_widget_destroyed),
- &window->merge_dialog);
-
- gtk_widget_show (GTK_WIDGET (window->merge_dialog));
-
- }
- */
- }
-
-
private void on_help_contents( Gtk.Action action )
{
Help.display_contents( window );
diff --git a/glabels/window.vala b/glabels/window.vala
index 915179f..186b487 100644
--- a/glabels/window.vala
+++ b/glabels/window.vala
@@ -36,60 +36,61 @@ namespace glabels
public static unowned List<weak Window> window_list { get; private set; }
+ private Gtk.Notebook notebook;
- private Gtk.Box content_hbox;
+ public Model? model { get; private set; }
+ public View view { get; private set; }
+ public MergePropertyEditor merge_property_editor { get; private set; }
+ public MiniPreview preview { get; private set; }
- public Model? model { get; private set; }
- public View? view { get; private set; }
+ public Gtk.Statusbar statusbar { get; private set; }
+ private Gtk.Label zoom_info_label;
+ private Gtk.Label cursor_info_label;
+ public uint menu_tips_context_id { get; private set; }
- public Gtk.Statusbar statusbar { get; private set; }
- private Gtk.Label zoom_info_label;
- private Gtk.Label cursor_info_label;
- public uint menu_tips_context_id { get; private set; }
+ private Gtk.Menu context_menu;
+ private Gtk.Menu empty_selection_context_menu;
- private Gtk.Menu context_menu;
- private Gtk.Menu empty_selection_context_menu;
+ private Prefs prefs;
+ private Ui ui;
- private Prefs prefs;
- private Ui ui;
-
- private PropertyEditor property_editor;
- private ObjectEditor object_editor;
+ private ObjectEditor object_editor;
public Window()
{
prefs = new Prefs();
+ ui = new Ui( this );
Gtk.Box vbox1 = new Gtk.Box( Gtk.Orientation.VERTICAL, 0 );
add( vbox1 );
- ui = new Ui( this );
vbox1.pack_start( ui.get_widget( "/MenuBar" ), false, false, 0 );
vbox1.pack_start( ui.get_widget( "/MainToolBar" ), false, false, 0 );
- vbox1.pack_start( ui.get_widget( "/DrawingToolBar" ), false, false, 0 );
- Gtk.Box main_hbox = new Gtk.Box( Gtk.Orientation.HORIZONTAL, 0 );
- vbox1.pack_start( main_hbox, true, true, 0 );
+ notebook = new Gtk.Notebook();
+ notebook.set_sensitive( false );
+ vbox1.pack_start( notebook );
- property_editor = new PropertyEditor();
- property_editor.set_hexpand( false );
- main_hbox.pack_start( property_editor, false, false, 0 );
- content_hbox = new Gtk.Box( Gtk.Orientation.HORIZONTAL, 0 );
- content_hbox.set_hexpand( true );
- main_hbox.pack_start( content_hbox, true, true, 0 );
+ Gtk.Box editor_page = new Gtk.Box( Gtk.Orientation.VERTICAL, 0 );
+ notebook.append_page( editor_page, new Gtk.Label( _("Editor") ) );
+
+ editor_page.pack_start( ui.get_widget( "/DrawingToolBar" ), false, false, 0 );
+ Gtk.Box hbox1 = new Gtk.Box( Gtk.Orientation.HORIZONTAL, 0 );
+ hbox1.set_hexpand( true );
+ editor_page.pack_start( hbox1, true, true, 0 );
view = new View();
- content_hbox.pack_start( view, true, true, 0 );
+ hbox1.pack_start( view, true, true, 0 );
view.show_all();
object_editor = new ObjectEditor();
object_editor.set_hexpand( false );
- main_hbox.pack_end( object_editor, false, false, 0 );
+ hbox1.pack_end( object_editor, false, false, 0 );
Gtk.Box status_hbox = new Gtk.Box( Gtk.Orientation.HORIZONTAL, 0 );
- vbox1.pack_start( status_hbox, false, false, 0 );
+ editor_page.pack_start( status_hbox, false, false, 0 );
statusbar = new Gtk.Statusbar();
status_hbox.pack_start( statusbar, true, true, 0 );
@@ -121,6 +122,22 @@ namespace glabels
context_menu = (Gtk.Menu)ui.get_widget( "/ContextMenu" );
empty_selection_context_menu = (Gtk.Menu)ui.get_widget( "/EmptySelectionContextMenu" );
+
+ Gtk.Box merge_property_page = new Gtk.Box( Gtk.Orientation.VERTICAL, 0 );
+ notebook.append_page( merge_property_page, new Gtk.Label( _("Merge") ) );
+
+ merge_property_editor = new MergePropertyEditor();
+ merge_property_page.pack_start( merge_property_editor, true, true, 0 );
+
+
+ Gtk.Box preview_page = new Gtk.Box( Gtk.Orientation.VERTICAL, 0 );
+ notebook.append_page( preview_page, new Gtk.Label( _("Preview") ) );
+
+ preview = new MiniPreview( 280, 420 );
+ preview.show_all();
+ preview_page.pack_start( preview, true, true, 0 );
+
+
window_list.append( this );
}
@@ -167,9 +184,10 @@ namespace glabels
label.modified = false;
set_window_title( label );
- property_editor.set_model( model );
view.model = model;
object_editor.set_model( model );
+ merge_property_editor.set_model( model );
+ preview.set_model( model );
view.zoom_to_fit();
@@ -191,6 +209,8 @@ namespace glabels
view.pointer_exit.connect( on_pointer_exit );
this.set_focus.connect( on_set_focus );
+ notebook.set_sensitive( true );
+
/* TODO: clipboard changed. */
/* TODO: set copy/paste sensitivity. */
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]