/// <summary>
		/// Use a list of modifications to update Gtk.TreeStore
		/// </summary>
		public static void Update(RemoteTreeStore remoteStore, Gtk.TreeStore gtkStore)
		{
			RemoteTreeModification[] modifications = remoteStore.GetModifications();
			if (modifications.Length > 0) {
				Console.WriteLine(String.Format("Received {0} modifications from {1}", modifications.Length, remoteStore));
			}
			foreach(RemoteTreeModification mod in modifications) {
				Console.WriteLine(mod);
				if (mod is RemoteTreeModification.InsertNode) {
					RemoteTreeModification.InsertNode insertMod = (RemoteTreeModification.InsertNode)mod;
					if (insertMod.ParentNodePath.Indices.Length == 0) {
						// Insert to the top level
						gtkStore.InsertNode(insertMod.NodeIndex);
					} else {
						TreeIter it;
						gtkStore.GetIter(out it, new TreePath(insertMod.ParentNodePath.Indices));
						gtkStore.InsertNode(it, insertMod.NodeIndex);
					}
				}
				if (mod is RemoteTreeModification.RemoveNode) {
					RemoteTreeModification.RemoveNode removeMod = (RemoteTreeModification.RemoveNode)mod;
					TreeIter it;
					gtkStore.GetIter(out it, new TreePath(removeMod.NodePath.Indices));
					gtkStore.Remove(ref it);
				}
				if (mod is RemoteTreeModification.UpdateNode) {
					RemoteTreeModification.UpdateNode updateMod = (RemoteTreeModification.UpdateNode)mod;
					// Igonre the root node
					if (updateMod.NodePath.IsRoot) {
						continue;
					}
					TreeIter it;
					gtkStore.GetIter(out it, new TreePath(updateMod.NodePath.Indices));
					object value = updateMod.Value;
					// If it is image, dereference it
					if (value is PixmapRef) {
						value = ((PixmapRef)value).GetPixbuf();
					}
					gtkStore.SetValue(it, updateMod.ColumnIndex, value);
				}
			}
		}
示例#2
0
        public static void LoadCertificateTree(Gtk.TreeStore certStore)
        {
            foreach (EveCertGroup group in m_CertGroups.Values)
            {
                Gtk.TreeIter groupIter = certStore.AppendValues(group.Name, -1, group.ID, true);
                group.TreeReference = new Gtk.TreeRowReference(certStore, certStore.GetPath(groupIter));
            }

            foreach (EveCertificate cert in m_Certificates.Values)
            {
                EveCertGroup group = m_CertGroups[cert.GroupID];
                Gtk.TreeIter groupIter;
                Gtk.TreeIter certIter;

                if (certStore.GetIter(out groupIter, group.TreeReference.Path))
                {
                    certIter = certStore.AppendValues(groupIter, cert.Name, cert.Grade, cert.ID, false);
                    cert.TreeReference = new Gtk.TreeRowReference(certStore, certStore.GetPath(certIter));
                }
            }
        }
        private bool FilterTree(Gtk.TreeModel model, Gtk.TreeIter iter)
        {
            lock (inventory)
            {

                try
                {
                    if (this.entry_search.Text == "")
                        return true;

                    if (filtered.Contains(iter))//*sigh*
                        return true;

                    object obj = model.GetValue(iter, 1);
                    if (obj == null)
                        return false;

                    string Name = (string)obj;

                    if (Name.Contains(this.entry_search.Text))
                    {
                        filtered.Add(iter);//*sigh*

                        TreePath path = model.GetPath(iter);
                        while (path.Depth > 1)
                        {
                            path.Up();
                            TreeIter iter2;
                            model.GetIter(out iter2, path);
                            filtered.Add(iter2);//*sigh*
                        }

                        return true;
                    }

                    return false;
                }
                catch
                {
                    return false;
                }
            }
        }
        /**
         * Gets both iters from the provided ListStore obj based on the passed TreePath object(the selected row)
         */
        private bool getPrevIterFromSelection(out Gtk.TreeIter selectedIter, out Gtk.TreeIter prevIter, 
                                                Gtk.TreePath selectedRow,  Gtk.ListStore listModel)
        {
            
            listModel.GetIter(out selectedIter, selectedRow);
            selectedRow.Prev();
            listModel.GetIter(out prevIter, selectedRow);

            return  (prevIter.Stamp!=0 && !prevIter.Equals(selectedIter));
        }
        /**
         * Gets both iters from the provided ListStore obj based on the passed TreePath object(the selected row)
         */

        private bool getNextIterFromSelection(out Gtk.TreeIter selectedIter, out Gtk.TreeIter nextIter, 
                                                Gtk.TreePath selectedRow,  Gtk.ListStore listModel)
        {
            
            listModel.GetIter(out selectedIter, selectedRow);
            selectedRow.Next();
            listModel.GetIter(out nextIter, selectedRow);

            return (nextIter.Stamp!=0  && !nextIter.Equals(selectedIter));
        }
        /*
         * Returns the value of the removed element, or null- if no element removed
         */
        private String removeSelectedElementInTreeview(Gtk.TreeView target, Gtk.ListStore model)
        {
            Gtk.TreeIter iter; 
            Gtk.TreePath[] selectedRows=  target.Selection.GetSelectedRows();

            if(selectedRows.Length >0 )
            {
                model.GetIter(out iter, selectedRows[0]);
                string value = (string)model.GetValue(iter, 0);

                if(model.Remove(ref iter))
                    return value;
                else
                    return null;
            }
            return null;
        }
示例#7
0
        public static void LoadMarket(Gtk.TreeStore marketStore, Gtk.ListStore itemStore)
        {
            LoadMarket();

            foreach(EveMarketGroup group in m_MarketGroups.Values)
            {
                Gtk.TreeIter groupIter;
                Gtk.TreeIter  parentIter;

                if (group.ParentID > -1 && marketStore.GetIter(out parentIter, m_MarketGroups[group.ParentID].TreeReference.Path))
                {
                    groupIter = marketStore.AppendNode(parentIter);
                }
                else
                {
                    groupIter = marketStore.AppendNode();
                }

                group.TreeReference = new Gtk.TreeRowReference(marketStore, marketStore.GetPath(groupIter));
                marketStore.SetValues(groupIter, new Gdk.Pixbuf(ItemDatabase.GetMarketIconStream(group.IconString)), group.Name, group.ID, group.HasItems, true);
            }

            foreach (EveItem item in m_Items.Values)
            {
                if (item.MarketGroupID > -1)
                {
                    Gtk.TreeIter parentIter;
                    if (marketStore.GetIter(out parentIter, m_MarketGroups[item.MarketGroupID].TreeReference.Path))
                    {
                        Gtk.TreeIter childIter = marketStore.AppendValues(parentIter, null, item.Name, item.ID, false, false);
                        itemStore.AppendValues(item.Name, item.ID);

                        item.TreeReference = new Gtk.TreeRowReference(marketStore, marketStore.GetPath(childIter));
                    }
                }
            }
        }