void OnButtonPressed(object sender, Gtk.ButtonPressEventArgs args) { switch (args.Event.Button) { case 3: // third mouse button (right-click) clickedTask = null; Gtk.TreeView tv = sender as Gtk.TreeView; if (tv == null) return; Gtk.TreeModel model = tv.Model; Gtk.TreeIter iter; Gtk.TreePath path; Gtk.TreeViewColumn column = null; if (!tv.GetPathAtPos ((int) args.Event.X, (int) args.Event.Y, out path, out column)) return; if (!model.GetIter (out iter, path)) return; clickedTask = model.GetValue (iter, 0) as ITask; if (clickedTask == null) return; Menu popupMenu = new Menu (); ImageMenuItem item; item = new ImageMenuItem (Catalog.GetString ("_Notes...")); item.Image = new Gtk.Image (noteIcon); item.Activated += OnShowTaskNotes; popupMenu.Add (item); popupMenu.Add (new SeparatorMenuItem ()); item = new ImageMenuItem (Catalog.GetString ("_Delete task")); item.Image = new Gtk.Image(Gtk.Stock.Delete, IconSize.Menu); item.Activated += OnDeleteTask; popupMenu.Add (item); item = new ImageMenuItem(Catalog.GetString ("_Edit task")); item.Image = new Gtk.Image(Gtk.Stock.Edit, IconSize.Menu); item.Activated += OnEditTask; popupMenu.Add (item); /* * Depending on the currently selected task's taskList, we create a context popup * here in order to enable changing taskLists. The list of available taskLists * is pre-filtered as to not contain the current taskList and the AllTaskList. */ var filteredTaskLists = new ListStore (typeof (ITaskList)); foreach (var cat in application.BackendManager.TaskLists) { if (cat != null && !(cat.ListType == TaskListType.Smart) && !cat.Contains (clickedTask)) filteredTaskLists.AppendValues (cat); } // The taskLists submenu is only created in case we actually provide at least one taskList. if (filteredTaskLists.GetIterFirst(out iter)) { Menu taskListMenu = new Menu(); TaskListMenuItem taskListItem; filteredTaskLists.Foreach(delegate(TreeModel t, TreePath p, TreeIter i) { taskListItem = new TaskListMenuItem((ITaskList)t.GetValue(i, 0)); taskListItem.Activated += OnChangeTaskList; taskListMenu.Add(taskListItem); return false; }); // TODO Needs translation. item = new ImageMenuItem(Catalog.GetString("_Change list")); item.Image = new Gtk.Image(Gtk.Stock.Convert, IconSize.Menu); item.Submenu = taskListMenu; popupMenu.Add(item); } popupMenu.ShowAll(); popupMenu.Popup (); // Logger.Debug ("Right clicked on task: " + task.Name); break; } }
private void RebuildAddTaskMenu(ICollection<ITaskList> taskListsModel) { Gtk.Menu menu = new Menu (); foreach (var cat in taskListsModel) { if (cat.ListType == TaskListType.Smart) continue; var item = new TaskListMenuItem (cat); item.Activated += OnNewTaskByTaskList; item.ShowAll (); menu.Add (item); } addTaskButton.Menu = menu; }