Make actions implement UIElement

This commit is contained in:
Jesse van den Kieboom 2014-07-20 10:54:46 +03:00
parent 4ada2ec7ff
commit 242e23fac1
4 changed files with 70 additions and 30 deletions

View file

@ -20,22 +20,37 @@
namespace Gitg
{
class RefActionDelete : GitgExt.Action, GitgExt.RefAction, Object
class RefActionDelete : GitgExt.UIElement, GitgExt.Action, GitgExt.RefAction, Object
{
// Do this to pull in config.h before glib.h (for gettext...)
private const string version = Gitg.Config.VERSION;
public GitgExt.Application? application { owned get; construct set; }
public GitgExt.RefActionInterface action_interface { get; construct set; }
public Gitg.Ref reference { get; construct set; }
public RefActionDelete(GitgExt.RefActionInterface action_interface, Gitg.Ref reference)
public RefActionDelete(GitgExt.Application application,
GitgExt.RefActionInterface action_interface,
Gitg.Ref reference)
{
Object(action_interface: action_interface, reference: reference);
Object(application: application,
action_interface: action_interface,
reference: reference);
}
public string label
public string id
{
get { return _("Delete"); }
owned get { return "/org/gnome/gitg/ref-actions/delete"; }
}
public string display_name
{
owned get { return _("Delete"); }
}
public string description
{
owned get { return _("Delete the selected reference"); }
}
public bool enabled
@ -47,12 +62,17 @@ class RefActionDelete : GitgExt.Action, GitgExt.RefAction, Object
}
}
public bool visible
public Gtk.Widget? widget
{
get { return true; }
owned get { return null; }
}
public void activated()
public string? icon
{
owned get { return null; }
}
public void activate()
{
var query = new GitgExt.UserQuery();

View file

@ -20,27 +20,37 @@
namespace Gitg
{
class RefActionRename : GitgExt.Action, GitgExt.RefAction, Object
class RefActionRename : GitgExt.UIElement, GitgExt.Action, GitgExt.RefAction, Object
{
// Do this to pull in config.h before glib.h (for gettext...)
private const string version = Gitg.Config.VERSION;
public GitgExt.Application? application { owned get; construct set; }
public GitgExt.RefActionInterface action_interface { get; construct set; }
public Gitg.Ref reference { get; construct set; }
public RefActionRename(GitgExt.RefActionInterface action_interface, Gitg.Ref reference)
public RefActionRename(GitgExt.Application application,
GitgExt.RefActionInterface action_interface,
Gitg.Ref reference)
{
Object(action_interface: action_interface, reference: reference);
Object(application: application,
action_interface: action_interface,
reference: reference);
}
public string label
public string id
{
get { return _("Rename"); }
owned get { return "/org/gnome/gitg/ref-actions/rename"; }
}
public bool visible
public string display_name
{
get { return true; }
owned get { return _("Rename"); }
}
public string description
{
owned get { return _("Rename the selected reference"); }
}
public bool enabled
@ -52,7 +62,17 @@ class RefActionRename : GitgExt.Action, GitgExt.RefAction, Object
}
}
public void activated()
public Gtk.Widget? widget
{
owned get { return null; }
}
public string? icon
{
owned get { return null; }
}
public void activate()
{
action_interface.edit_ref_name(reference, on_ref_name_editing_done);
}

View file

@ -365,7 +365,7 @@ namespace GitgHistory
private void add_ref_action(Gee.LinkedList<GitgExt.RefAction> actions, GitgExt.RefAction? action)
{
if (action.visible)
if (action.available)
{
actions.add(action);
}
@ -391,11 +391,13 @@ namespace GitgHistory
var af = new ActionInterface(application, d_main.refs_list);
add_ref_action(actions, new Gitg.RefActionRename(af, reference));
add_ref_action(actions, new Gitg.RefActionDelete(af, reference));
add_ref_action(actions, new Gitg.RefActionRename(application, af, reference));
add_ref_action(actions, new Gitg.RefActionDelete(application, af, reference));
var exts = new Peas.ExtensionSet(Gitg.PluginsEngine.get_default(),
typeof(GitgExt.RefAction),
"application",
application,
"action_interface",
af,
"reference",

View file

@ -20,24 +20,22 @@
namespace GitgExt
{
public interface Action : Object
public interface Action : UIElement
{
public abstract string label { get; }
public abstract bool enabled { get; }
public abstract bool visible { get; }
public virtual signal void activated()
{
}
public virtual void populate_menu(Gtk.Menu menu)
{
var item = new Gtk.MenuItem.with_label(label);
if (!available)
{
return;
}
var item = new Gtk.MenuItem.with_label(display_name);
item.tooltip_text = description;
if (enabled)
{
item.activate.connect(() => {
activated();
activate();
});
}
else