浏览代码

Fix ComboBoxMap

Daniele Bartolini 9 年之前
父节点
当前提交
bc936b7e8c
共有 1 个文件被更改,包括 45 次插入3 次删除
  1. 45 3
      tools/widgets/combo_box_map.vala

+ 45 - 3
tools/widgets/combo_box_map.vala

@@ -10,16 +10,58 @@ namespace Crown
 	/// <summary>
 	/// Map combo box.
 	/// </summary>
-	public class ComboBoxMap : Gtk.ComboBoxText
+	public class ComboBoxMap : Gtk.Bin
 	{
+		// Data
+		private bool _stop_emit;
+
+		// Widgets
+		private Gtk.ComboBoxText _combo_box;
+
+		// Signals
+		public signal void value_changed();
+
+		public string value
+		{
+			get
+			{
+				return _combo_box.get_active_id();
+			}
+			set
+			{
+				_stop_emit = true;
+				_combo_box.set_active_id((string)value);
+				_stop_emit = false;
+			}
+		}
+
 		public ComboBoxMap()
 		{
-			this.scroll_event.connect(on_scroll);
+			// Data
+			_stop_emit = true;
+
+			// Widgets
+			_combo_box = new Gtk.ComboBoxText();
+			_combo_box.changed.connect(on_changed);
+			_combo_box.scroll_event.connect(on_scroll);
+
+			add(_combo_box);
+		}
+
+		public void append(string? id, string text)
+		{
+			_combo_box.append(id, text);
+		}
+
+		private void on_changed()
+		{
+			if (!_stop_emit)
+				value_changed();
 		}
 
 		private bool on_scroll(Gdk.EventScroll ev)
 		{
-			GLib.Signal.stop_emission_by_name(this, "scroll-event");
+			GLib.Signal.stop_emission_by_name(_combo_box, "scroll-event");
 			return false;
 		}
 	}