GtkSharp/sample/GnomeHelloWorld.cs
Rachel Hestilow eb38e65353 2002-07-13 Rachel Hestilow <hestilow@ximian.com>
* generator/Parameters.cs: Allow nulls if null_ok set.
	* generator/SymbolTable.cs: Add method IsStruct.
	* parser/Gtk.metadata, Gdk.metadata, Gnome.metadata: Merge in
	null_ok from *.defs. This is probably incomplete though, I've
	already found one method that wasn't listed.

	* sample/GnomeHelloWorld.cs: Remove IntPtr.Zero hack.

svn path=/trunk/gtk-sharp/; revision=5792
2002-07-14 01:32:18 +00:00

164 lines
4.3 KiB
C#

// GnomeHelloWorld.cs - Basic Gnome/Gnome.UI sample app
//
// Author: Rachel Hestilow <hestilow@ximian.com>
//
// (c) 2002 Rachel Hestilow
namespace GtkSamples {
using Gtk;
using Gdk;
using GtkSharp;
using Gnome;
using System;
using System.IO;
using System.Drawing;
using System.Runtime.InteropServices;
public struct DemoEntry {
public string program;
public string desc;
public string icon;
public DemoEntry (string program, string desc, string icon)
{
this.program = program;
this.desc = desc;
this.icon = icon;
}
}
public class GnomeHelloWorld {
DemoEntry[] entries;
public GnomeHelloWorld () {
entries = new DemoEntry [3];
entries[0] = new DemoEntry ("button.exe", "Button", "gnome-ccdialog.png");
entries[1] = new DemoEntry ("menu.exe", "Menu", "gnome-gmenu.png");
entries[2] = new DemoEntry ("gtk-hello-world.exe", "Gtk# Hello World", "gnome-mdi.png");
}
string BaseName (string filename)
{
int ind = filename.LastIndexOf (Path.DirectorySeparatorChar);
if (ind != -1)
return filename.Substring (ind);
else
return filename;
}
IconList CreateList ()
{
IconList icons = new IconList (64, null, 0);
foreach (DemoEntry entry in entries)
{
icons.Append ("pixmaps" + Path.DirectorySeparatorChar + entry.icon,
entry.desc);
}
icons.IconSelected += new EventHandler (icon_selected_cb);
return icons;
}
Gtk.Widget CreateMenus ()
{
MenuBar bar = new MenuBar ();
Menu file_menu = new Menu ();
MenuItem file_menu_item = new MenuItem ("_File");
file_menu_item.Submenu = file_menu;
MenuItem file_exit = new MenuItem ("E_xit");
file_exit.Activated += new EventHandler (exit_cb);
file_menu.Append (file_exit);
bar.Append (file_menu_item);
Menu help_menu = new Menu ();
MenuItem help_menu_item = new MenuItem ("_Help");
help_menu_item.Submenu = help_menu;
MenuItem file_help = new MenuItem ("_About");
file_help.Activated += new EventHandler (about_cb);
help_menu.Append (file_help);
bar.Append (help_menu_item);
return bar;
}
public Gtk.Window CreateWindow ()
{
Gtk.Window win = new Gtk.Window ("Gnome# Hello World");
win.DeleteEvent += new EventHandler (Window_Delete);
VBox vbox = new VBox (false, 0);
vbox.PackStart (CreateMenus (), false, false, 0);
vbox.PackStart (new Label ("The following demos are available.\nTo run a demo, double click on its icon."), false, false, 4);
vbox.PackStart (CreateList (), true, true, 4);
win.DefaultSize = new Size (250, 130);
win.Add (vbox);
return win;
}
public static int Main (string[] args)
{
/* FIXME: Broken params support in mcs, should be fixed soonish */
object[] props = new object[0];
Program kit = new Program ("gnome-hello-world", "0.0.1", Modules.UI,
args, props);
GnomeHelloWorld hello = new GnomeHelloWorld ();
Window win = hello.CreateWindow ();
win.ShowAll ();
kit.Run ();
return 0;
}
static void Window_Delete (object obj, EventArgs args)
{
SignalArgs sa = (SignalArgs) args;
Application.Quit ();
sa.RetVal = true;
}
static void exit_cb (object o, EventArgs args)
{
Console.WriteLine ("hi {0}", Gnome.Program.Get ().AppId);
Application.Quit ();
}
static void about_cb (object o, EventArgs args)
{
Pixbuf logo = new Pixbuf ("pixmaps" + Path.DirectorySeparatorChar + "gtk-sharp-logo.png");
String[] authors = new string[] {
"Rachel Hestilow (hestilow@ximian.com)"
};
string[] documentors = new string[] {};
About about = new About ("Gnome# Hello World", "0.0.1",
"Copyright (C) 2002 Rachel Hestilow",
"A test application for the GNOME .NET bindings",
authors, documentors, "", logo);
about.Show ();
}
// Wonder what the .NET func to do this is...and if it
// is implemented in mono yet.
[DllImport("glib-2.0")]
static extern bool g_spawn_command_line_async (string command, IntPtr err);
void icon_selected_cb (object obj, EventArgs args)
{
SignalArgs sa = (SignalArgs) args;
int idx = (int) sa.Args[0];
Event ev = (Event) sa.Args[1];
if (ev.IsValid && ev.Type == EventType.TwoButtonPress) {
g_spawn_command_line_async ("mono " + entries[idx].program, IntPtr.Zero);
}
}
}
}