mirror of
https://github.com/Ryujinx/GtkSharp.git
synced 2024-09-07 23:43:18 +02:00
327 lines
11 KiB
C#
327 lines
11 KiB
C#
// Actions.cs - Gtk.Action class Test implementation (port of testactions.c)
|
|
//
|
|
// Author: Jeroen Zwartepoorte <jeroen@xs4all.nl>
|
|
//
|
|
// (c) 2004 Jeroen Zwartepoorte
|
|
|
|
namespace GtkSamples {
|
|
|
|
using Gtk;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
public class Actions {
|
|
static VBox box = null;
|
|
static Statusbar statusbar = null;
|
|
static ActionGroup group = null;
|
|
static Toolbar toolbar = null;
|
|
static SpinButton spin = null;
|
|
static ActionGroup dynGroup = null;
|
|
static uint mergeId = 0;
|
|
static UIManager uim = null;
|
|
static Dictionary<Widget, Gtk.Action> actions = new Dictionary<Widget, Gtk.Action> ();
|
|
|
|
/* XML description of the menus for the test app. The parser understands
|
|
* a subset of the Bonobo UI XML format, and uses GMarkup for parsing */
|
|
const string ui_info =
|
|
" <menubar>\n" +
|
|
" <menu name=\"Menu _1\" action=\"Menu1Action\">\n" +
|
|
" <menuitem name=\"cut\" action=\"cut\" />\n" +
|
|
" <menuitem name=\"copy\" action=\"copy\" />\n" +
|
|
" <menuitem name=\"paste\" action=\"paste\" />\n" +
|
|
" <separator name=\"sep1\" />\n" +
|
|
" <menuitem name=\"bold1\" action=\"bold\" />\n" +
|
|
" <menuitem name=\"bold2\" action=\"bold\" />\n" +
|
|
" <separator name=\"sep2\" />\n" +
|
|
" <menuitem name=\"toggle-cnp\" action=\"toggle-cnp\" />\n" +
|
|
" <separator name=\"sep3\" />\n" +
|
|
" <menuitem name=\"quit\" action=\"quit\" />\n" +
|
|
" </menu>\n" +
|
|
" <menu name=\"Menu _2\" action=\"Menu2Action\">\n" +
|
|
" <menuitem name=\"cut\" action=\"cut\" />\n" +
|
|
" <menuitem name=\"copy\" action=\"copy\" />\n" +
|
|
" <menuitem name=\"paste\" action=\"paste\" />\n" +
|
|
" <separator name=\"sep4\"/>\n" +
|
|
" <menuitem name=\"bold\" action=\"bold\" />\n" +
|
|
" <separator name=\"sep5\"/>\n" +
|
|
" <menuitem name=\"justify-left\" action=\"justify-left\" />\n" +
|
|
" <menuitem name=\"justify-center\" action=\"justify-center\" />\n" +
|
|
" <menuitem name=\"justify-right\" action=\"justify-right\" />\n" +
|
|
" <menuitem name=\"justify-fill\" action=\"justify-fill\" />\n" +
|
|
" <separator name=\"sep6\"/>\n" +
|
|
" <menuitem name=\"customise-accels\" action=\"customise-accels\" />\n" +
|
|
" <separator name=\"sep7\"/>\n" +
|
|
" <menuitem action=\"toolbar-icons\" />\n" +
|
|
" <menuitem action=\"toolbar-text\" />\n" +
|
|
" <menuitem action=\"toolbar-both\" />\n" +
|
|
" <menuitem action=\"toolbar-both-horiz\" />\n" +
|
|
" <separator name=\"sep8\"/>\n" +
|
|
" <menuitem action=\"toolbar-small-icons\" />\n" +
|
|
" <menuitem action=\"toolbar-large-icons\" />\n" +
|
|
" </menu>\n" +
|
|
" <menu name=\"DynamicMenu\" action=\"Menu3Action\" />\n" +
|
|
" </menubar>\n" +
|
|
" <toolbar name=\"toolbar\">\n" +
|
|
" <toolitem name=\"cut\" action=\"cut\" />\n" +
|
|
" <toolitem name=\"copy\" action=\"copy\" />\n" +
|
|
" <toolitem name=\"paste\" action=\"paste\" />\n" +
|
|
" <separator name=\"sep9\" />\n" +
|
|
" <toolitem name=\"bold\" action=\"bold\" />\n" +
|
|
" <separator name=\"sep10\" />\n" +
|
|
" <toolitem name=\"justify-left\" action=\"justify-left\" />\n" +
|
|
" <toolitem name=\"justify-center\" action=\"justify-center\" />\n" +
|
|
" <toolitem name=\"justify-right\" action=\"justify-right\" />\n" +
|
|
" <toolitem name=\"justify-fill\" action=\"justify-fill\" />\n" +
|
|
" <separator name=\"sep11\"/>\n" +
|
|
" <toolitem name=\"quit\" action=\"quit\" />\n" +
|
|
" </toolbar>\n";
|
|
|
|
static ActionEntry[] entries = new ActionEntry[] {
|
|
new ActionEntry ("Menu1Action", null, "Menu _1", null, null, null),
|
|
new ActionEntry ("Menu2Action", null, "Menu _2", null, null, null),
|
|
new ActionEntry ("Menu3Action", null, "_Dynamic Menu", null, null, null),
|
|
new ActionEntry ("cut", Stock.Cut, "C_ut", "<control>X",
|
|
"Cut the selected text to the clipboard",
|
|
new EventHandler (OnActivate)),
|
|
new ActionEntry ("copy", Stock.Copy, "_Copy", "<control>C",
|
|
"Copy the selected text to the clipboard",
|
|
new EventHandler (OnActivate)),
|
|
new ActionEntry ("paste", Stock.Paste, "_Paste", "<control>V",
|
|
"Paste the text from the clipboard",
|
|
new EventHandler (OnActivate)),
|
|
new ActionEntry ("quit", Stock.Quit, null, "<control>Q",
|
|
"Quit the application", new EventHandler (OnQuit)),
|
|
new ActionEntry ("customise-accels", null, "Customise _Accels", null,
|
|
"Customize keyboard shortcuts",
|
|
new EventHandler (OnCustomizeAccels)),
|
|
new ActionEntry ("toolbar-small-icons", null, "Small Icons", null,
|
|
null, new EventHandler (OnToolbarSizeSmall)),
|
|
new ActionEntry ("toolbar-large-icons", null, "Large Icons", null,
|
|
null, new EventHandler (OnToolbarSizeLarge))
|
|
};
|
|
|
|
static ToggleActionEntry[] toggleEntries = new ToggleActionEntry[] {
|
|
new ToggleActionEntry ("bold", Stock.Bold, "_Bold", "<control>B",
|
|
"Change to bold face",
|
|
new EventHandler (OnToggle), false),
|
|
new ToggleActionEntry ("toggle-cnp", null, "Enable Cut/Copy/Paste",
|
|
null, "Change the sensitivity of the cut, copy and paste actions",
|
|
new EventHandler (OnToggleCnp), true)
|
|
};
|
|
|
|
enum Justify {
|
|
Left,
|
|
Center,
|
|
Right,
|
|
Fill
|
|
};
|
|
|
|
static RadioActionEntry[] radioEntries = new RadioActionEntry[] {
|
|
new RadioActionEntry ("justify-left", Stock.JustifyLeft, "_Left",
|
|
"<control>L", "Left justify the text",
|
|
(int)Justify.Left),
|
|
new RadioActionEntry ("justify-center", Stock.JustifyCenter, "C_enter",
|
|
"<control>E", "Center justify the text",
|
|
(int)Justify.Center),
|
|
new RadioActionEntry ("justify-right", Stock.JustifyRight, "_Right",
|
|
"<control>R", "Right justify the text",
|
|
(int)Justify.Right),
|
|
new RadioActionEntry ("justify-fill", Stock.JustifyFill, "_Fill",
|
|
"<control>J", "Fill justify the text",
|
|
(int)Justify.Fill)
|
|
};
|
|
|
|
static RadioActionEntry[] toolbarEntries = new RadioActionEntry[] {
|
|
new RadioActionEntry ("toolbar-icons", null, "Icons", null,
|
|
null, (int)ToolbarStyle.Icons),
|
|
new RadioActionEntry ("toolbar-text", null, "Text", null,
|
|
null, (int)ToolbarStyle.Text),
|
|
new RadioActionEntry ("toolbar-both", null, "Both", null,
|
|
null, (int)ToolbarStyle.Both),
|
|
new RadioActionEntry ("toolbar-both-horiz", null, "Both Horizontal",
|
|
null, null, (int)ToolbarStyle.BothHoriz)
|
|
};
|
|
|
|
public static int Main (string[] args)
|
|
{
|
|
Application.Init ();
|
|
Window win = new Window ("Action Demo");
|
|
win.DefaultSize = new Gdk.Size (200, 150);
|
|
win.DeleteEvent += new DeleteEventHandler (OnWindowDelete);
|
|
|
|
box = new VBox (false, 0);
|
|
win.Add (box);
|
|
|
|
group = new ActionGroup ("TestActions");
|
|
group.Add (entries);
|
|
group.Add (toggleEntries);
|
|
group.Add (radioEntries, (int)Justify.Left, new ChangedHandler (OnRadio));
|
|
group.Add (toolbarEntries, (int)ToolbarStyle.BothHoriz, new ChangedHandler (OnToolbarStyle));
|
|
|
|
uim = new UIManager ();
|
|
uim.AddWidget += new AddWidgetHandler (OnWidgetAdd);
|
|
uim.ConnectProxy += new ConnectProxyHandler (OnProxyConnect);
|
|
uim.InsertActionGroup (group, 0);
|
|
uim.AddUiFromString (ui_info);
|
|
|
|
statusbar = new Statusbar ();
|
|
box.PackEnd (statusbar, false, true, 0);
|
|
|
|
VBox vbox = new VBox (false, 5);
|
|
Button button = new Button ("Blah");
|
|
vbox.PackEnd (button, true, true, 0);
|
|
HBox hbox = new HBox (false, 5);
|
|
spin = new SpinButton (new Adjustment (100, 100, 10000, 1, 100, 100), 100, 0);
|
|
hbox.PackStart (spin, true, true, 0);
|
|
button = new Button ("Remove");
|
|
button.Clicked += new EventHandler (OnDynamicRemove);
|
|
hbox.PackEnd (button, false, false, 0);
|
|
button = new Button ("Add");
|
|
button.Clicked += new EventHandler (OnDynamicAdd);
|
|
hbox.PackEnd (button, false, false, 0);
|
|
vbox.PackEnd (hbox, false, false, 0);
|
|
box.PackEnd (vbox, true, true, 0);
|
|
|
|
win.ShowAll ();
|
|
Application.Run ();
|
|
return 0;
|
|
}
|
|
|
|
static void OnActivate (object obj, EventArgs args)
|
|
{
|
|
Gtk.Action action = (Gtk.Action)obj;
|
|
Console.WriteLine ("Action {0} (type={1}) activated",
|
|
action.Name, action.GetType ().FullName);
|
|
}
|
|
|
|
static void OnCustomizeAccels (object obj, EventArgs args)
|
|
{
|
|
Console.WriteLine ("Sorry, accel dialog not available");
|
|
}
|
|
|
|
static void OnToolbarSizeSmall (object obj, EventArgs args)
|
|
{
|
|
toolbar.IconSize = IconSize.SmallToolbar;
|
|
}
|
|
|
|
static void OnToolbarSizeLarge (object obj, EventArgs args)
|
|
{
|
|
toolbar.IconSize = IconSize.LargeToolbar;
|
|
}
|
|
|
|
static void OnToggle (object obj, EventArgs args)
|
|
{
|
|
ToggleAction action = (ToggleAction)obj;
|
|
Console.WriteLine ("Action {0} (type={1}) activated (active={2})",
|
|
action.Name, action.GetType ().FullName, action.Active);
|
|
}
|
|
|
|
static void OnToggleCnp (object obj, EventArgs args)
|
|
{
|
|
Gtk.Action action = (ToggleAction)obj;
|
|
bool sensitive = ((ToggleAction)action).Active;
|
|
action = group.GetAction ("cut");
|
|
action.Sensitive = sensitive;
|
|
action = group.GetAction ("copy");
|
|
action.Sensitive = sensitive;
|
|
action = group.GetAction ("paste");
|
|
action.Sensitive = sensitive;
|
|
|
|
action = group.GetAction ("toggle-cnp");
|
|
if (sensitive)
|
|
action.Label = "Disable Cut and past ops";
|
|
else
|
|
action.Label = "Enable Cut and paste ops";
|
|
}
|
|
|
|
static void OnRadio (object obj, ChangedArgs args)
|
|
{
|
|
RadioAction action = (RadioAction)obj;
|
|
Console.WriteLine ("Action {0} (type={1}) activated (active={2}) (value {3})",
|
|
action.Name, action.GetType ().FullName,
|
|
action.Active, action.CurrentValue);
|
|
}
|
|
|
|
static void OnToolbarStyle (object obj, ChangedArgs args)
|
|
{
|
|
RadioAction action = (RadioAction)obj;
|
|
ToolbarStyle style = (ToolbarStyle)action.CurrentValue;
|
|
toolbar.ToolbarStyle = style;
|
|
}
|
|
|
|
static void OnDynamicAdd (object obj, EventArgs args)
|
|
{
|
|
if (mergeId != 0 || dynGroup != null)
|
|
return;
|
|
|
|
int num = spin.ValueAsInt;
|
|
dynGroup = new ActionGroup ("DynamicActions");
|
|
uim.InsertActionGroup (dynGroup, 0);
|
|
mergeId = uim.NewMergeId ();
|
|
|
|
for (int i = 0; i < num; i++) {
|
|
string name = "DynAction" + i;
|
|
string label = "Dynamic Action " + i;
|
|
Gtk.Action action = new Gtk.Action (name, label);
|
|
dynGroup.Add (action);
|
|
uim.AddUi (mergeId, "/menubar/DynamicMenu", name,
|
|
name, UIManagerItemType.Menuitem, false);
|
|
}
|
|
|
|
uim.EnsureUpdate ();
|
|
}
|
|
|
|
static void OnDynamicRemove (object obj, EventArgs args)
|
|
{
|
|
if (mergeId == 0 || dynGroup == null)
|
|
return;
|
|
|
|
uim.RemoveUi (mergeId);
|
|
uim.EnsureUpdate ();
|
|
mergeId = 0;
|
|
uim.RemoveActionGroup (dynGroup);
|
|
dynGroup = null;
|
|
}
|
|
|
|
static void OnWindowDelete (object obj, DeleteEventArgs args)
|
|
{
|
|
Application.Quit ();
|
|
args.RetVal = true;
|
|
}
|
|
|
|
static void OnWidgetAdd (object obj, AddWidgetArgs args)
|
|
{
|
|
if (args.Widget is Toolbar)
|
|
toolbar = (Toolbar)args.Widget;
|
|
args.Widget.Show ();
|
|
box.PackStart (args.Widget, false, true, 0);
|
|
}
|
|
|
|
static void OnSelect (object obj, EventArgs args)
|
|
{
|
|
Gtk.Action action = actions[(Widget)obj];
|
|
if (action.Tooltip != null)
|
|
statusbar.Push (0, action.Tooltip);
|
|
}
|
|
|
|
static void OnDeselect (object obj, EventArgs args)
|
|
{
|
|
statusbar.Pop (0);
|
|
}
|
|
|
|
static void OnProxyConnect (object obj, ConnectProxyArgs args)
|
|
{
|
|
if (args.Proxy is MenuItem) {
|
|
actions[args.Proxy] = args.Action;
|
|
((MenuItem)args.Proxy).Selected += new EventHandler (OnSelect);
|
|
((MenuItem)args.Proxy).Deselected += new EventHandler (OnDeselect);
|
|
}
|
|
}
|
|
|
|
static void OnQuit (object obj, EventArgs args)
|
|
{
|
|
Application.Quit ();
|
|
}
|
|
}
|
|
}
|