Esempio n. 1
0
        public StringListWidget()
        {
            treeview = new Gtk.TreeView();
            treeview.HeadersVisible = false;
            PackStart(treeview, true, true, 0);
            ShowAll();

            var col = new TreeViewColumn {
                MinWidth = CellRendererAddRemove.MinWidth, Resizable = true, Sizing = Gtk.TreeViewColumnSizing.Autosize
            };
            var addRemoveRenderer = new CellRendererAddRemove();

            col.PackStart(addRemoveRenderer, false);
            col.SetCellDataFunc(addRemoveRenderer, delegate(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) {
                if (treeStore.GetValue(iter, (int)ListColumn.Object) != null)
                {
                    addRemoveRenderer.Action = CellRendererAddRemove.AddRemoveAction.Remove;
                }
                else
                {
                    addRemoveRenderer.Action = CellRendererAddRemove.AddRemoveAction.Add;
                }
            });
            addRemoveRenderer.RemoveClicked += delegate {
                TreeIter iter;
                bool     hasSelection = treeview.Selection.GetSelected(out iter);
                PObject  obj          = null;
                if (hasSelection)
                {
                    obj = (PObject)treeStore.GetValue(iter, (int)ListColumn.Object);
                    treeStore.Remove(ref iter);

                    editing = true;
                    obj.Remove();
                    editing = false;
                }
            };
            addRemoveRenderer.AddClicked += delegate {
                PObject  obj = new PString(string.Empty);
                TreeIter iter;

                bool hasSelection = treeview.Selection.GetSelected(out iter);
                if (hasSelection)
                {
                    treeStore.SetValues(iter, string.Empty, obj);
                    AppendCreateNewEntry();

                    editing = true;
                    array.Add(obj);
                    editing = false;
                }
            };
            treeview.AppendColumn(col);

            var valueRenderer = new CellRendererCombo();

            valueRenderer.Mode       = CellRendererMode.Editable;
            valueRenderer.TextColumn = (int)ListColumn.DisplayValue;

            valueRenderer.Edited += delegate(object o, EditedArgs args) {
                TreeIter iter;

                if (!treeStore.GetIterFromString(out iter, args.Path))
                {
                    return;
                }

                var pObject = (PObject)treeStore.GetValue(iter, (int)ListColumn.Object);
                if (pObject == null)
                {
                    return;
                }

                string newValue = !string.IsNullOrEmpty(ValuePrefix) ? ValuePrefix + args.NewText : args.NewText;

                pObject.SetValue(newValue);
            };

            treeview.AppendColumn(GettextCatalog.GetString("Value"), valueRenderer, delegate(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) {
                var text     = (string)tree_model.GetValue(iter, (int)ListColumn.DisplayValue);
                var obj      = (PObject)tree_model.GetValue(iter, (int)ListColumn.Object);
                var renderer = (CellRendererCombo)cell;

                renderer.Sensitive = obj != null;
                renderer.Editable  = obj != null;
                renderer.Text      = text;
            });

            treeview.EnableGridLines = TreeViewGridLines.Horizontal;
            treeview.Model           = treeStore;
        }
		public StringListWidget ()
		{
			treeview = new Gtk.TreeView ();
			treeview.HeadersVisible = false;
			PackStart (treeview, true, true, 0);
			ShowAll ();
			
			var col = new TreeViewColumn { MinWidth = CellRendererAddRemove.MinWidth, Resizable = true, Sizing = Gtk.TreeViewColumnSizing.Autosize };
			var addRemoveRenderer = new CellRendererAddRemove ();
			col.PackStart (addRemoveRenderer, false);
			col.SetCellDataFunc (addRemoveRenderer, delegate (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) {
				if (treeStore.GetValue (iter, (int) ListColumn.Object) != null)
					addRemoveRenderer.Action = CellRendererAddRemove.AddRemoveAction.Remove;
				else
					addRemoveRenderer.Action = CellRendererAddRemove.AddRemoveAction.Add;
			});
			addRemoveRenderer.RemoveClicked += delegate {
				TreeIter iter;
				bool hasSelection = treeview.Selection.GetSelected (out iter);
				PObject obj = null;
				if (hasSelection) {
					obj = (PObject) treeStore.GetValue (iter, (int) ListColumn.Object);
					treeStore.Remove (ref iter);

					editing = true;
					obj.Remove ();
					editing = false;
				}
			};
			addRemoveRenderer.AddClicked += delegate {
				PObject obj = new PString (string.Empty);
				TreeIter iter;

				bool hasSelection = treeview.Selection.GetSelected (out iter);
				if (hasSelection) {
					treeStore.SetValues (iter, string.Empty, obj);
					AppendCreateNewEntry ();

					editing = true;
					array.Add (obj);
					editing = false;
				}
			};
			treeview.AppendColumn (col);
			
			var valueRenderer = new CellRendererCombo ();
			valueRenderer.Mode = CellRendererMode.Editable;
			valueRenderer.TextColumn = (int) ListColumn.DisplayValue;
			
			valueRenderer.Edited += delegate (object o, EditedArgs args) {
				TreeIter iter;
				
				if (!treeStore.GetIterFromString (out iter, args.Path))
					return;
				
				var pObject = (PObject) treeStore.GetValue (iter, (int) ListColumn.Object);
				if (pObject == null)
					return;
				
				string newValue = !string.IsNullOrEmpty (ValuePrefix) ? ValuePrefix + args.NewText : args.NewText;
				
				pObject.SetValue (newValue);
			};
			
			treeview.AppendColumn (GettextCatalog.GetString ("Value"), valueRenderer, delegate (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) {
				var text     = (string) tree_model.GetValue (iter, (int) ListColumn.DisplayValue);
				var obj      = (PObject) tree_model.GetValue (iter, (int) ListColumn.Object);
				var renderer = (CellRendererCombo) cell;
				
				renderer.Sensitive = obj != null;
				renderer.Editable = obj != null;
				renderer.Text = text;
			});
			
			treeview.EnableGridLines = TreeViewGridLines.Horizontal;
			treeview.Model = treeStore;
		}