public void NotificationUpdated(CustomNotification notification) { TreeIter iter; Boolean searchMore = NotificationListStore.GetIterFirst(out iter); while (searchMore) { if (NotificationListStore.GetValue(iter, 0) == notification) { NotificationListStore.EmitRowChanged(NotificationListStore.GetPath(iter), iter); } searchMore = NotificationListStore.IterNext(ref iter); } }
/// <summary> /// Loads the plugins treeview. /// </summary> private void LoadPluginsTreeview() { ListStore store = new ListStore(typeof(PluginTreeviewContainer)); foreach (IBase plug in Plugins.LoadAllPlugins()) { bool loaded = true; IBase loaded_plug = this.ui.Plugins.FirstOrDefault(p => p.GetType().Assembly.GetName().Name == plug.GetType().Assembly.GetName().Name); if (loaded_plug == null) loaded_plug = this.ui.Trays.FirstOrDefault(p => p.GetType().Assembly.GetName().Name == plug.GetType().Assembly.GetName().Name); if (loaded_plug == null) { loaded_plug = plug; loaded = false; } store.AppendValues(new PluginTreeviewContainer() { Enabled = loaded, Name = plug.Name, Description = plug.Description, DllName = plug.GetType().Assembly.GetName().Name, Plugin = loaded_plug }); } TreeViewColumn column = new TreeViewColumn(); column.Title = Catalog.GetString("Enabled"); CellRendererToggle toggle_cell = new CellRendererToggle(); toggle_cell.Toggled += (s, e) => { TreeIter iter; store.GetIter(out iter, new TreePath(e.Path)); PluginTreeviewContainer item = (PluginTreeviewContainer)store.GetValue(iter, 0); item.Enabled = !((CellRendererToggle)s).Active; Type t = item.Plugin.GetType(); string[] plugins = Core.Settings.Instance[Core.Settings.Keys.Plugins.List].AsString().Split('|'); string name = t.Assembly.GetName().Name; ((CellRendererToggle)s).Active = !((CellRendererToggle)s).Active; if (((CellRendererToggle)s).Active) { try { if (t.GetInterface(typeof(IPlugin).Name) != null) { IPlugin plugin = (IPlugin)item.Plugin; plugin.Load(); this.ui.Plugins.Add(plugin); this.ui.Plugins = this.ui.Plugins.OrderBy(p => p.Name).ToList(); this.ui.RebuildMenu(); this.ReloadPluginPreferencesPages(); } else if (t.GetInterface(typeof(ITray).Name) != null) { ITray plugin = (ITray)item.Plugin; plugin.Load(this.ui.Menu, this.ui.RebuildMenu); this.ui.Trays.Add((ITray)item.Plugin); } if (!plugins.Contains(name)) Core.Settings.Instance[Core.Settings.Keys.Plugins.List] = plugins[0] != string.Empty ? string.Join("|", plugins) + "|" + name : name; } catch (Exception ex) { Tools.PrintInfo(ex, this.GetType()); if (plugins.Contains(name)) Core.Settings.Instance[Core.Settings.Keys.Plugins.List] = string.Join("|", plugins.Where(p => p != name).ToArray()); } } else { try { if (t.GetInterface(typeof(IPlugin).Name) != null) { IPlugin plugin = (IPlugin)item.Plugin; this.ui.Plugins.Remove(plugin); plugin.Dispose(); this.ui.RebuildMenu(); this.ReloadPluginPreferencesPages(); } else if (t.GetInterface(typeof(ITray).Name) != null) { ITray plugin = (ITray)item.Plugin; this.ui.Trays.Remove(plugin); plugin.Unload(); } } catch (Exception ex) { Tools.PrintInfo(ex, this.GetType()); } finally { if (plugins.Contains(name)) Core.Settings.Instance[Core.Settings.Keys.Plugins.List] = string.Join("|", plugins.Where(p => p != name).ToArray()); } } store.EmitRowChanged(new TreePath(e.Path), iter); }; column.PackStart(toggle_cell, true); column.SetCellDataFunc(toggle_cell, delegate (TreeViewColumn col, CellRenderer cell, TreeModel model, TreeIter iter) { ((CellRendererToggle)cell).Active = ((PluginTreeviewContainer)model.GetValue(iter, 0)).Enabled; }); this.treeviewPlugins.AppendColumn(column); column = new TreeViewColumn(); column.Title = Catalog.GetString("Name"); CellRendererText text_cell = new CellRendererText(); column.PackStart(text_cell, true); column.SetCellDataFunc(text_cell, delegate (TreeViewColumn col, CellRenderer cell, TreeModel model, TreeIter iter) { ((CellRendererText)cell).Text = ((PluginTreeviewContainer)model.GetValue(iter, 0)).Name; }); this.treeviewPlugins.AppendColumn(column); column = new TreeViewColumn(); column.Title = Catalog.GetString("Description"); text_cell = new CellRendererText(); column.PackStart(text_cell, true); column.SetCellDataFunc(text_cell, delegate (TreeViewColumn col, CellRenderer cell, TreeModel model, TreeIter iter) { ((CellRendererText)cell).Text = ((PluginTreeviewContainer)model.GetValue(iter, 0)).Description; }); this.treeviewPlugins.AppendColumn(column); this.treeviewPlugins.Model = store; this.treeviewPlugins.ShowAll(); }