[glabels/vala] Reconciled design patterns of merge backends with barcode backends.
- From: Jim Evins <jimevins src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glabels/vala] Reconciled design patterns of merge backends with barcode backends.
- Date: Mon, 1 Oct 2012 01:24:06 +0000 (UTC)
commit 9d2ca5e23a86aa978a0eb761e825a4266fc68e72
Author: Jim Evins <evins snaught com>
Date: Sun Sep 30 21:22:51 2012 -0400
Reconciled design patterns of merge backends with barcode backends.
.gitignore | 1 +
data/ui/object-editor.ui | 2376 --------------------------
glabels/Makefile.am | 7 +-
glabels/glabels.vala | 1 +
glabels/merge.vala | 9 +-
glabels/merge_backends.vala | 112 ++
glabels/{ => merge_backends}/merge_none.vala | 8 +-
glabels/{ => merge_backends}/merge_text.vala | 98 +-
glabels/merge_factory.vala | 78 -
glabels/{merge_none.vala => merge_info.vala} | 52 +-
glabels/xml_label.vala | 6 +-
11 files changed, 224 insertions(+), 2524 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index fc5b79e..30200ec 100644
--- a/.gitignore
+++ b/.gitignore
@@ -66,6 +66,7 @@ glabels-*.tar.gz
/glabels/glabels-4
/glabels/barcode_backends/*.c
/glabels/cursors/cursor_pixdata.h
+/glabels/merge_backends/*.c
/src/marshal.[ch]
/src/stock-pixmaps/stockpixbufs.h
diff --git a/glabels/Makefile.am b/glabels/Makefile.am
index 038a3e8..1d2e23c 100644
--- a/glabels/Makefile.am
+++ b/glabels/Makefile.am
@@ -57,11 +57,12 @@ glabels_4_SOURCES = \
label_region.vala \
label_state.vala \
merge.vala \
- merge_factory.vala \
+ merge_backends.vala \
+ merge_backends/merge_none.vala \
+ merge_backends/merge_text.vala \
merge_field.vala \
- merge_none.vala \
+ merge_info.vala \
merge_record.vala \
- merge_text.vala \
message_bar.vala \
model.vala \
model_clipboard.vala \
diff --git a/glabels/glabels.vala b/glabels/glabels.vala
index b92d11c..d26a4af 100644
--- a/glabels/glabels.vala
+++ b/glabels/glabels.vala
@@ -58,6 +58,7 @@ namespace glabels
libglabels.XmlUtil.default_units = libglabels.Units.inch();
glbarcode.Factory.init();
BarcodeBackends.init();
+ MergeBackends.init();
Gtk.IconTheme icon_theme = Gtk.IconTheme.get_default();
icon_theme.append_search_path( Path.build_filename( Config.DATADIR, Config.GLABELS_BRANCH, "icons", null ) );
diff --git a/glabels/merge.vala b/glabels/merge.vala
index 63d4a27..f73b6c4 100644
--- a/glabels/merge.vala
+++ b/glabels/merge.vala
@@ -24,13 +24,10 @@ using GLib;
namespace glabels
{
- public enum MergeSrcType { NONE, FIXED, FILE }
-
public abstract class Merge : Object
{
- public string name { get; construct; }
- public string description { get; construct; }
- public MergeSrcType src_type { get; protected set; }
+
+ public MergeInfo info { get; construct; }
public unowned List<MergeRecord> record_list
@@ -80,8 +77,6 @@ namespace glabels
protected abstract MergeRecord? get_record();
public abstract Merge dup();
-
-
}
}
diff --git a/glabels/merge_backends.vala b/glabels/merge_backends.vala
new file mode 100644
index 0000000..003d427
--- /dev/null
+++ b/glabels/merge_backends.vala
@@ -0,0 +1,112 @@
+/* merge_backends.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 MergeBackends
+ {
+
+ private static Gee.HashMap<string,MergeInfo> id_map;
+ private static Gee.HashMap<string,MergeInfo> name_map;
+
+ private static bool initialized = false;
+
+
+ static construct
+ {
+ id_map = new Gee.HashMap<string,MergeInfo>();
+ name_map = new Gee.HashMap<string,MergeInfo>();
+
+ register_backend( "None", _("None"), MergeSrcType.NONE, typeof(MergeNone) );
+
+ 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) );
+ 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) );
+ 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) );
+ 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) );
+
+ initialized = true;
+ }
+
+
+ public static void init()
+ {
+ if ( !initialized )
+ {
+ new MergeBackends();
+ }
+ else
+ {
+ message( "MergeBackends already initialized.\n" );
+ }
+ }
+
+
+ private static void register_backend( string id, string name, MergeSrcType src_type, Type type )
+ {
+ if ( type.is_a( typeof(Merge) ) )
+ {
+ MergeInfo merge_info = new MergeInfo( id, name, src_type, type );
+
+ id_map.set( id.casefold(), merge_info );
+ name_map.set( name, merge_info );
+ }
+ else
+ {
+ message( "MergeBackends.register_backend: invalid merge type: %s\n", type.name() );
+ }
+ }
+
+
+ public static Merge create_merge( string id )
+ {
+ string id_casefold = id.casefold();
+
+ if ( id_map.has_key( id_casefold ) )
+ {
+ MergeInfo merge_info = id_map.get( id_casefold );
+
+ return Object.new( merge_info.merge_type, info: merge_info ) as Merge;
+ }
+ else
+ {
+ return new MergeNone();
+ }
+ }
+
+
+ }
+
+}
diff --git a/glabels/merge_none.vala b/glabels/merge_backends/merge_none.vala
similarity index 92%
copy from glabels/merge_none.vala
copy to glabels/merge_backends/merge_none.vala
index dc9ea62..05b1d0f 100644
--- a/glabels/merge_none.vala
+++ b/glabels/merge_backends/merge_none.vala
@@ -27,12 +27,6 @@ namespace glabels
public class MergeNone : Merge
{
- public MergeNone()
- {
- src_type = MergeSrcType.NONE;
- }
-
-
public override List<string> get_key_list()
{
return new List<string>();
@@ -63,7 +57,7 @@ namespace glabels
public override Merge dup()
{
- MergeNone copy = new MergeNone();
+ MergeNone copy = Object.new( get_type(), info: info ) as MergeNone;
return copy;
}
diff --git a/glabels/merge_text.vala b/glabels/merge_backends/merge_text.vala
similarity index 87%
rename from glabels/merge_text.vala
rename to glabels/merge_backends/merge_text.vala
index a5d18c3..597ef44 100644
--- a/glabels/merge_text.vala
+++ b/glabels/merge_backends/merge_text.vala
@@ -24,28 +24,97 @@ using GLib;
namespace glabels
{
- public class MergeText : Merge
+ public class MergeTextCsv : MergeText
{
- public int delim { get; construct; default=','; }
- public bool line1_has_keys { get; construct; default=false; }
+ static construct
+ {
+ delim = ',';
+ line1_has_keys = false;
+ }
+ }
- private FileStream fp;
+ public class MergeTextCsvKeys : MergeText
+ {
+ static construct
+ {
+ delim = ',';
+ line1_has_keys = true;
+ }
+ }
+
+
+ public class MergeTextTsv : MergeText
+ {
+ static construct
+ {
+ delim = '\t';
+ line1_has_keys = false;
+ }
+ }
- private string[] keys;
- private int n_fields_max;
-
- public MergeText( string name = "text/csv",
- string description = "",
- int delim = ',',
- bool line1_has_keys = false )
+ public class MergeTextTsvKeys : MergeText
+ {
+ static construct
{
- Object( name:name, description:description, delim:delim, line1_has_keys:line1_has_keys );
+ delim = '\t';
+ line1_has_keys = true;
+ }
+ }
- src_type = MergeSrcType.FILE;
+
+ public class MergeTextColon : MergeText
+ {
+ static construct
+ {
+ delim = ':';
+ line1_has_keys = false;
}
+ }
+
+ public class MergeTextColonKeys : MergeText
+ {
+ static construct
+ {
+ delim = ':';
+ line1_has_keys = true;
+ }
+ }
+
+
+ public class MergeTextSemicolon : MergeText
+ {
+ static construct
+ {
+ delim = ';';
+ line1_has_keys = false;
+ }
+ }
+
+
+ public class MergeTextSemicolonKeys : MergeText
+ {
+ static construct
+ {
+ delim = ';';
+ line1_has_keys = true;
+ }
+ }
+
+
+ public abstract class MergeText : Merge
+ {
+ protected static int delim;
+ protected static bool line1_has_keys;
+
+
+ private FileStream fp;
+
+ private string[] keys;
+ private int n_fields_max;
+
public override List<string> get_key_list()
{
@@ -155,7 +224,8 @@ namespace glabels
public override Merge dup()
{
- MergeText copy = new MergeText();
+ MergeText copy = Object.new( get_type(), info : info ) as MergeText;
+ copy.src = src;
return copy;
}
diff --git a/glabels/merge_none.vala b/glabels/merge_info.vala
similarity index 56%
rename from glabels/merge_none.vala
rename to glabels/merge_info.vala
index dc9ea62..3d9a051 100644
--- a/glabels/merge_none.vala
+++ b/glabels/merge_info.vala
@@ -1,4 +1,4 @@
-/* merge_none.vala
+/* merge_info.vala
*
* Copyright (C) 2012 Jim Evins <evins snaught com>
*
@@ -24,49 +24,29 @@ using GLib;
namespace glabels
{
- public class MergeNone : Merge
- {
-
- public MergeNone()
- {
- src_type = MergeSrcType.NONE;
- }
-
+ public enum MergeSrcType { NONE, FIXED, FILE }
- public override List<string> get_key_list()
- {
- return new List<string>();
- }
-
-
- public override string get_primary_key()
- {
- return "";
- }
-
-
- protected override void open()
- {
- }
+ public class MergeInfo : Object
+ {
- protected override void close()
- {
- }
+ public string id { get; protected set; }
+ public string name { get; protected set; }
+ public MergeSrcType src_type { get; protected set; }
+ public Type merge_type { get; protected set; }
- protected override MergeRecord? get_record()
+ public MergeInfo( string id,
+ string name,
+ MergeSrcType src_type,
+ Type merge_type )
{
- return null;
+ this.id = id;
+ this.name = name;
+ this.src_type = src_type;
+ this.merge_type = merge_type;
}
-
- public override Merge dup()
- {
- MergeNone copy = new MergeNone();
- return copy;
- }
-
}
}
diff --git a/glabels/xml_label.vala b/glabels/xml_label.vala
index d645536..807f9cc 100644
--- a/glabels/xml_label.vala
+++ b/glabels/xml_label.vala
@@ -595,7 +595,7 @@ namespace glabels
private void parse_merge_node( Xml.Node node,
Label label )
{
- Merge merge = MergeFactory.create_merge( XmlUtil.get_prop_string( node, "type", null ) );
+ Merge merge = MergeBackends.create_merge( XmlUtil.get_prop_string( node, "type", null ) );
merge.src = XmlUtil.get_prop_string( node, "src", null );
@@ -1120,8 +1120,8 @@ namespace glabels
{
unowned Xml.Node *node = root.new_child( ns, "Merge" );
- XmlUtil.set_prop_string( node, "type", label.merge.name );
- XmlUtil.set_prop_string( node, "src", label.merge.src );
+ XmlUtil.set_prop_string( node, "type", label.merge.info.id );
+ XmlUtil.set_prop_string( node, "src", label.merge.src );
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]