Initial commit

This commit is contained in:
2010-09-13 19:24:53 +02:00
commit b230b69539
22 changed files with 2390 additions and 0 deletions

1
src/canvas.c Normal file
View File

@@ -0,0 +1 @@
/* http://www.gnomejournal.org/article/34/writing-a-widget-using-cairo-and-gtk28 */

0
src/canvas.h Normal file
View File

0
src/document.c Normal file
View File

0
src/document.h Normal file
View File

40
src/main.c Normal file
View File

@@ -0,0 +1,40 @@
/*
* main.c -- logdiag main source file.
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010. All rights reserved.
*
* See the file LICENSE for licensing information.
*
*/
#include <gtk/gtk.h>
#include <stdlib.h>
#include "config.h"
#include "window-main.h"
int main (int argc, char *argv[])
{
GtkWidget *wnd;
#ifdef HAVE_GETTEXT
setlocale (LC_ALL, "");
bindtextdomain (GETTEXT_DOMAIN, GETTEXT_DIRNAME);
textdomain (GETTEXT_DOMAIN);
#endif
/* For custom command line arguments, see:
* http://git.gnome.org/browse/glade3/tree/src/main.c
*/
gtk_init (&argc, &argv);
wnd = logdiag_window_main_new ();
gtk_main ();
return 0;
}

69
src/symbol-category.h Normal file
View File

@@ -0,0 +1,69 @@
/*
* symbol-category.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010. All rights reserved.
*
* See the file LICENSE for licensing information.
*
*/
#ifndef __SYMBOL_CATEGORY_H__
#define __SYMBOL_CATEGORY_H__
G_BEGIN_DECLS
#define LOGDIAG_TYPE_SYMBOL_CATEGORY (logdiag_symbol_category_get_type ())
#define LOGDIAG_SYMBOL_CATEGORY(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LOGDIAG_TYPE_SYMBOL_CATEGORY, LogdiagSymbolCategory))
#define LOGDIAG_SYMBOL_CATEGORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LOGDIAG_TYPE_SYMBOL_CATEGORY, LogdiagSymbolCategoryClass))
#define LOGDIAG_IS_SYMBOL_CATEGORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LOGDIAG_TYPE_SYMBOL_CATEGORY))
#define LOGDIAG_IS_SYMBOL_CATEGORY_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LOGDIAG_TYPE_SYMBOL_CATEGORY))
#define LOGDIAG_SYMBOL_CATEGORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LOGDIAG_SYMBOL_CATEGORY, LogdiagSymbolCategoryClass))
typedef struct _LogdiagSymbolCategory LogdiagSymbolCategory;
/*typedef struct _LogdiagSymbolCategoryPrivate LogdiagSymbolCategoryPrivate;*/
typedef struct _LogdiagSymbolCategoryClass LogdiagSymbolCategoryClass;
/**
* LogdiagSymbolCategory:
* @parent: The parent object, may be LogdiagSymbolLibrary
* or another LogdiagSymbolCategory.
* @name: The name of the category.
* @image_path: Path to the image of the category.
* @children: Children of this category.
*/
struct _LogdiagSymbolCategory
{
/*< private >*/
GObject parent_instance;
/*< public >*/
gpointer parent;
char *name;
char *image_path;
GHashTable *children;
};
struct _LogdiagSymbolCategoryClass
{
GtkObjectClass parent_class;
};
GType logdiag_symbol_category_get_type (void) G_GNUC_CONST;
LogdiagSymbolCategory *
logdiag_symbol_category_new (LogdiagSymbolLibrary *parent);
G_END_DECLS
#endif /* ! __SYMBOL_CATEGORY_H__ */

307
src/symbol-library.c Normal file
View File

@@ -0,0 +1,307 @@
/*
* symbol-library.c
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010. All rights reserved.
*
* See the file LICENSE for licensing information.
*
*/
#include <gtk/gtk.h>
#include <lua.h>
/* #include <lauxlib.h> */
#include <stdlib.h>
#include "config.h"
#include "symbol-library.h"
#include "symbol-category.h"
#include "symbol.h"
/* ===== Symbol library ==================================================== */
/**
* SECTION:symbol-library
* @short_description: A symbol library.
* @see_also: #LogdiagSymbol, #LogdiagSymbolCategory
*
* #LogdiagSymbolLibrary is used for loading symbols from their files.
*/
/*
* LogdiagSymbolLibraryPrivate:
* @lua_state: Lua state.
*/
struct _LogdiagSymbolLibraryPrivate
{
lua_State *lua_state;
};
G_DEFINE_TYPE (LogdiagSymbolLibrary, logdiag_symbol_library, G_TYPE_OBJECT);
static void
logdiag_symbol_library_finalize (GObject *gobject);
static void
logdiag_symbol_library_class_init (LogdiagSymbolLibraryClass *klass)
{
GObjectClass *object_class;
object_class = G_OBJECT_CLASS (klass);
object_class->finalize = logdiag_symbol_library_finalize;
/**
* LogdiagSymbolLibrary::changed:
* @library: The library object.
*
* Contents of the library have changed.
*/
klass->changed_signal = g_signal_new
("changed", G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
g_type_class_add_private (klass, sizeof (LogdiagSymbolLibraryPrivate));
}
static void
logdiag_symbol_library_init (LogdiagSymbolLibrary *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE
(self, LOGDIAG_TYPE_SYMBOL_LIBRARY, LogdiagSymbolLibraryPrivate);
/* TODO: lua */
self->priv->lua_state = NULL;
/* TODO: use _new_full and specify destroy functions. */
self->categories = g_hash_table_new (g_str_hash, g_str_equal);
}
static void
logdiag_symbol_library_finalize (GObject *gobject)
{
LogdiagSymbolLibrary *self;
self = LOGDIAG_SYMBOL_LIBRARY (gobject);
g_hash_table_destroy (self->categories);
/* Chain up to the parent class. */
G_OBJECT_CLASS (logdiag_symbol_library_parent_class)->finalize (gobject);
}
/**
* logdiag_symbol_library_new:
*
* Create an instance.
*/
LogdiagSymbolLibrary *
logdiag_symbol_library_new (void)
{
return g_object_new (LOGDIAG_TYPE_SYMBOL_LIBRARY, NULL);
}
/*
* load_category:
* @self: A symbol library object.
* @path: The path to the category.
* @name: The default name of the category.
*
* Loads a category into the library.
*/
LogdiagSymbolCategory *
load_category (LogdiagSymbolLibrary *self, const char *path, const char *name)
{
LogdiagSymbolCategory *cat;
gchar *icon_file;
g_return_val_if_fail (LOGDIAG_IS_SYMBOL_LIBRARY (self), NULL);
g_return_val_if_fail (path != NULL, NULL);
g_return_val_if_fail (name != NULL, NULL);
icon_file = g_build_filename (path, "icon.svg", NULL);
if (!g_file_test (icon_file, G_FILE_TEST_IS_REGULAR))
{
g_warning ("The category in %s has no icon.", path);
g_free (icon_file);
return NULL;
}
/* TODO: Search for category.json and read the category name from it. */
/* TODO: Search for xyz.lua and load the objects into the category. */
cat = logdiag_symbol_category_new (self);
cat->name = g_strdup (name);
cat->image_path = icon_file;
return cat;
}
/**
* logdiag_symbol_library_load:
* @self: A symbol library object.
* @directory: A directory to be loaded.
*
* Load the contents of a directory into the library.
*/
gboolean
logdiag_symbol_library_load (LogdiagSymbolLibrary *self, const char *path)
{
GDir *dir;
const gchar *item;
g_return_val_if_fail (LOGDIAG_IS_SYMBOL_LIBRARY (self), FALSE);
g_return_val_if_fail (path != NULL, FALSE);
dir = g_dir_open (path, 0, NULL);
if (!dir)
return FALSE;
while ((item = g_dir_read_name (dir)))
{
LogdiagSymbolCategory *cat;
gchar *categ_path;
categ_path = g_build_filename (path, item, NULL);
cat = load_category (self, categ_path, item);
if (cat)
g_hash_table_insert (self->categories, cat->name, cat);
g_free (categ_path);
}
g_dir_close (dir);
return TRUE;
}
/**
* logdiag_symbol_library_clear:
*
* Clears all the contents.
*/
void
logdiag_symbol_library_clear (LogdiagSymbolLibrary *self)
{
g_return_if_fail (LOGDIAG_IS_SYMBOL_LIBRARY (self));
g_hash_table_remove_all (self->categories);
return;
}
/* ===== Symbol category =================================================== */
/**
* SECTION:symbol-category
* @short_description: A category of symbols.
* @see_also: #LogdiagSymbol, #LogdiagSymbolLibrary
*
* #LogdiagSymbolCategory represents a category of #LogdiagSymbol objects.
*/
G_DEFINE_TYPE (LogdiagSymbolCategory, logdiag_symbol_category, G_TYPE_OBJECT);
static void
logdiag_symbol_category_finalize (GObject *gobject);
static void
logdiag_symbol_category_class_init (LogdiagSymbolCategoryClass *klass)
{
GObjectClass *object_class;
object_class = G_OBJECT_CLASS (klass);
object_class->finalize = logdiag_symbol_category_finalize;
}
static void
logdiag_symbol_category_init (LogdiagSymbolCategory *self)
{
/* TODO: use _new_full, correct equal and specify destroy functions. */
/* XXX: How's the situation with subcategory names and symbol names
* within the same hashtable?
*/
self->children = g_hash_table_new (g_str_hash, g_str_equal);
}
static void
logdiag_symbol_category_finalize (GObject *gobject)
{
LogdiagSymbolCategory *self;
self = LOGDIAG_SYMBOL_CATEGORY (gobject);
if (self->name)
g_free (self->name);
if (self->image_path)
g_free (self->image_path);
g_object_unref (self->parent);
g_hash_table_destroy (self->children);
/* Chain up to the parent class. */
G_OBJECT_CLASS (logdiag_symbol_category_parent_class)->finalize (gobject);
}
/**
* logdiag_symbol_category_new:
*
* Create an instance.
*/
LogdiagSymbolCategory *
logdiag_symbol_category_new (LogdiagSymbolLibrary *parent)
{
LogdiagSymbolCategory *cat;
cat = g_object_new (LOGDIAG_TYPE_SYMBOL_CATEGORY, NULL);
cat->parent = parent;
g_object_ref (parent);
return cat;
}
/* ===== Symbol ============================================================ */
/**
* SECTION:symbol
* @short_description: A symbol.
* @see_also: #LogdiagDocument, #LogdiagCanvas
*
* #LogdiagSymbol represents a symbol in the #LogdiagDocument that is in turn
* drawn onto the #LogdiagCanvas.
*/
/*
* LogdiagSymbolPrivate:
* @parent_library: The parent LogdiagSymbolLibrary.
* The library contains the real function for rendering.
*/
struct _LogdiagSymbolPrivate
{
LogdiagSymbolLibrary *parent_library;
};
/**
* logdiag_symbol_build_identifier:
*
* Build an identifier for the symbol.
* The identifier is in the format "Category/Category/Symbol".
*/
char *
logdiag_symbol_build_identifier (LogdiagSymbol *self)
{
return NULL;
}
/**
* logdiag_symbol_draw:
*
* Draw the symbol onto a Cairo surface.
*/
void
logdiag_symbol_draw (LogdiagSymbol *self, cairo_t *surface,
GHashTable *param, gint x, gint y, gdouble zoom)
{
return;
}

69
src/symbol-library.h Normal file
View File

@@ -0,0 +1,69 @@
/*
* symbol-library.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010. All rights reserved.
*
* See the file LICENSE for licensing information.
*
*/
#ifndef __SYMBOL_LIBRARY_H__
#define __SYMBOL_LIBRARY_H__
G_BEGIN_DECLS
#define LOGDIAG_TYPE_SYMBOL_LIBRARY (logdiag_symbol_library_get_type ())
#define LOGDIAG_SYMBOL_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LOGDIAG_TYPE_SYMBOL_LIBRARY, LogdiagSymbolLibrary))
#define LOGDIAG_SYMBOL_LIBRARY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LOGDIAG_TYPE_SYMBOL_LIBRARY, LogdiagSymbolLibraryClass))
#define LOGDIAG_IS_SYMBOL_LIBRARY(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LOGDIAG_TYPE_SYMBOL_LIBRARY))
#define LOGDIAG_IS_SYMBOL_LIBRARY_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LOGDIAG_TYPE_SYMBOL_LIBRARY))
#define LOGDIAG_SYMBOL_LIBRARY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LOGDIAG_SYMBOL_LIBRARY, LogdiagSymbolLibraryClass))
typedef struct _LogdiagSymbolLibrary LogdiagSymbolLibrary;
typedef struct _LogdiagSymbolLibraryPrivate LogdiagSymbolLibraryPrivate;
typedef struct _LogdiagSymbolLibraryClass LogdiagSymbolLibraryClass;
/**
* LogdiagSymbolLibrary:
* @categories: Lists all the categories (#LogdiagSymbolCategory).
*
* Object structure.
*/
struct _LogdiagSymbolLibrary
{
/*< private >*/
GObject parent_instance;
LogdiagSymbolLibraryPrivate *priv;
/*< public >*/
GHashTable *categories;
};
struct _LogdiagSymbolLibraryClass
{
/*< private >*/
GObjectClass parent_class;
guint changed_signal;
};
GType logdiag_symbol_library_get_type (void) G_GNUC_CONST;
LogdiagSymbolLibrary *logdiag_symbol_library_new (void);
gboolean logdiag_symbol_library_load (LogdiagSymbolLibrary *self,
const char *directory);
void logdiag_symbol_library_clear (LogdiagSymbolLibrary *self);
G_END_DECLS
#endif /* ! __SYMBOL_LIBRARY_H__ */

69
src/symbol.h Normal file
View File

@@ -0,0 +1,69 @@
/*
* symbol.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010. All rights reserved.
*
* See the file LICENSE for licensing information.
*
*/
#ifndef __SYMBOL_H__
#define __SYMBOL_H__
G_BEGIN_DECLS
#define LOGDIAG_TYPE_SYMBOL (logdiag_symbol_get_type ())
#define LOGDIAG_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LOGDIAG_TYPE_SYMBOL, LogdiagSymbol))
#define LOGDIAG_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LOGDIAG_TYPE_SYMBOL, LogdiagSymbolClass))
#define LOGDIAG_IS_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LOGDIAG_TYPE_SYMBOL))
#define LOGDIAG_IS_SYMBOL_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LOGDIAG_TYPE_SYMBOL))
#define LOGDIAG_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LOGDIAG_SYMBOL, LogdiagSymbolClass))
typedef struct _LogdiagSymbol LogdiagSymbol;
/*typedef struct _LogdiagSymbolPrivate LogdiagSymbolPrivate;*/
typedef struct _LogdiagSymbolClass LogdiagSymbolClass;
/**
* LogdiagSymbol:
* @parent: The parent category.
* @name: The name of this symbol.
*/
struct _LogdiagSymbol
{
/*< private >*/
GObject parent_instance;
/* LogdiagSymbolPrivate *priv;*/
/*< public >*/
LogdiagSymbolCategory *parent;
char *name;
};
struct _LogdiagSymbolClass
{
GtkObjectClass parent_class;
};
GType logdiag_symbol_get_type (void) G_GNUC_CONST;
char *logdiag_symbol_build_identifier (LogdiagSymbol *self);
void logdiag_symbol_draw (LogdiagSymbol *self, cairo_t *surface,
GHashTable *param, gint x, gint y, gdouble zoom);
/* TODO: Funkce pro získání terminálů. */
G_END_DECLS
#endif /* ! __SYMBOL_H__ */

283
src/window-main.c Normal file
View File

@@ -0,0 +1,283 @@
/*
* window-main.c
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010. All rights reserved.
*
* See the file LICENSE for licensing information.
*
*/
#include <gtk/gtk.h>
#include <stdlib.h>
#include <string.h>
#include "config.h"
#include "window-main.h"
#include "symbol-library.h"
/**
* SECTION:window-main
* @short_description: The main application window.
*
* #LogdiagWindowMain is the main window of the application.
*/
/* NOTE: The main window should not maybe be included in either
* the documentation or the static library.
*/
/* Private members of the window. */
struct _LogdiagWindowMainPrivate
{
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *menu;
GtkWidget *toolbar;
LogdiagSymbolLibrary *library;
GtkWidget *statusbar;
guint statusbar_menu_context_id;
};
/* Define the type. */
G_DEFINE_TYPE (LogdiagWindowMain, logdiag_window_main, GTK_TYPE_WINDOW);
/*
* cb_ui_proxy_connected:
*
* An item was connected to the manager.
*/
static void
cb_ui_proxy_connected (GtkUIManager *ui, GtkAction *action,
GtkWidget *proxy, LogdiagWindowMain *window);
/*
* cb_ui_proxy_disconnected:
*
* An item was disconnected from the manager.
*/
static void
cb_ui_proxy_disconnected (GtkUIManager *ui, GtkAction *action,
GtkWidget *proxy, LogdiagWindowMain *window);
/* A menu item was selected. */
static void
cb_menu_item_selected (GtkWidget *item, LogdiagWindowMain *window);
/* A menu item was deselected. */
static void
cb_menu_item_deselected (GtkItem *item, LogdiagWindowMain *window);
/* Show the about dialog. */
static void
cb_show_about_dialog (GtkAction *action, LogdiagWindowMain *window);
/* Actions for menus, toolbars, accelerators. */
static GtkActionEntry mw_actionEntries[] =
{
{"FileMenu", NULL, Q_("_File")},
{"New", GTK_STOCK_NEW, NULL, NULL,
Q_("Create a new document"), NULL},
{"Open", GTK_STOCK_OPEN, NULL, NULL,
Q_("Open a document"), NULL},
{"Save", GTK_STOCK_SAVE, NULL, NULL,
Q_("Save the current document"), NULL},
{"SaveAs", GTK_STOCK_SAVE_AS, NULL, NULL,
Q_("Save the current document with another name"), NULL},
{"Export", NULL, Q_("_Export"), NULL,
Q_("Export the document"), NULL},
{"Quit", GTK_STOCK_QUIT, NULL, NULL,
Q_("Quit the program"), NULL},
{"EditMenu", NULL, Q_("_Edit")},
{"Cut", GTK_STOCK_CUT, NULL, NULL, NULL, NULL},
{"Copy", GTK_STOCK_COPY, NULL, NULL, NULL, NULL},
{"Paste", GTK_STOCK_PASTE, NULL, NULL, NULL, NULL},
{"Delete", GTK_STOCK_DELETE, NULL, NULL, NULL, NULL},
{"SelectAll", GTK_STOCK_SELECT_ALL, NULL, NULL, NULL, NULL},
{"HelpMenu", NULL, Q_("_Help")},
{"About", GTK_STOCK_ABOUT, NULL, NULL, NULL,
G_CALLBACK(cb_show_about_dialog)}
};
/**
* logdiag_window_main_new:
*
* Create an instance.
*/
GtkWidget *
logdiag_window_main_new (void)
{
return g_object_new (LOGDIAG_TYPE_WINDOW_MAIN, NULL);
}
static void
logdiag_window_main_class_init (LogdiagWindowMainClass *klass)
{
GObjectClass *object_class;
GtkWidgetClass *widget_class;
object_class = G_OBJECT_CLASS (klass);
widget_class = GTK_WIDGET_CLASS (klass);
g_type_class_add_private (klass, sizeof (LogdiagWindowMainPrivate));
}
static void
logdiag_window_main_init (LogdiagWindowMain *self)
{
LogdiagWindowMainPrivate *priv;
GtkActionGroup *action_group;
GtkUIManager *ui_manager;
GError *error;
self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE
(self, LOGDIAG_TYPE_WINDOW_MAIN, LogdiagWindowMainPrivate);
priv->vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (self), priv->vbox);
ui_manager = gtk_ui_manager_new ();
/* TODO: Show tooltips in the statusbar:
* http://git.gnome.org/browse/glade3/tree/src/glade-window.c : 2165
*/
g_signal_connect (ui_manager, "connect-proxy",
G_CALLBACK (cb_ui_proxy_connected), self);
g_signal_connect (ui_manager, "disconnect-proxy",
G_CALLBACK (cb_ui_proxy_disconnected), self);
/* Prepare our actions. */
action_group = gtk_action_group_new ("MainActions");
gtk_action_group_add_actions (action_group,
mw_actionEntries, G_N_ELEMENTS (mw_actionEntries), self);
gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
error = NULL;
gtk_ui_manager_add_ui_from_file
(ui_manager, PROJECT_SHARE_DIR "gui/window-main.ui", &error);
if (error)
{
g_message (_("Building UI failed: %s"), error->message);
g_error_free (error);
}
/* Load keyboard accelerators into the window. */
gtk_window_add_accel_group
(GTK_WINDOW (self), gtk_ui_manager_get_accel_group (ui_manager));
priv->menu = gtk_ui_manager_get_widget (ui_manager, "/MenuBar");
gtk_box_pack_start (GTK_BOX (priv->vbox), priv->menu, FALSE, FALSE, 0);
priv->hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start (GTK_BOX (priv->vbox), priv->hbox, TRUE, TRUE, 0);
priv->toolbar = gtk_toolbar_new ();
/* NOTE: For GTK 2.16+, s/toolbar/orientable/ */
gtk_toolbar_set_orientation
(GTK_TOOLBAR (priv->toolbar), GTK_ORIENTATION_VERTICAL);
gtk_toolbar_set_icon_size
(GTK_TOOLBAR (priv->toolbar), GTK_ICON_SIZE_LARGE_TOOLBAR);
gtk_toolbar_set_style
(GTK_TOOLBAR (priv->toolbar), GTK_TOOLBAR_ICONS);
/* Symbol library. */
priv->library = logdiag_symbol_library_new ();
logdiag_symbol_library_load (priv->library, PROJECT_SHARE_DIR "library/");
/* TODO: Show contents of the library in the toolbar. */
GtkToolItem *item;
item = gtk_tool_button_new (/* icon widget */ NULL, _("Blah"));
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "network");
gtk_toolbar_insert (GTK_TOOLBAR (priv->toolbar), item, 0);
/* http://library.gnome.org/devel/gdk-pixbuf/unstable/ */
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->toolbar, FALSE, FALSE, 0);
/* TODO: GtkHPaned */
priv->statusbar = gtk_statusbar_new ();
priv->statusbar_menu_context_id = gtk_statusbar_get_context_id
(GTK_STATUSBAR (priv->statusbar), "menu");
gtk_box_pack_end (GTK_BOX (priv->vbox), priv->statusbar, FALSE, FALSE, 0);
/* Do this on disposal. */
/* g_object_unref(ui_manager); */
/* Proceed to showing the window. */
g_signal_connect (self, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_window_set_default_size (GTK_WINDOW (self), 500, 400);
gtk_widget_show_all (GTK_WIDGET (self));
}
static void
cb_ui_proxy_connected (GtkUIManager *ui, GtkAction *action,
GtkWidget *proxy, LogdiagWindowMain *window)
{
if (GTK_IS_MENU_ITEM (proxy))
{
g_signal_connect (proxy, "select",
G_CALLBACK (cb_menu_item_selected), window);
g_signal_connect (proxy, "deselect",
G_CALLBACK (cb_menu_item_deselected), window);
}
}
static void
cb_ui_proxy_disconnected (GtkUIManager *ui, GtkAction *action,
GtkWidget *proxy, LogdiagWindowMain *window)
{
if (GTK_IS_MENU_ITEM (proxy))
{
g_signal_handlers_disconnect_by_func
(proxy, G_CALLBACK (cb_menu_item_selected), window);
g_signal_handlers_disconnect_by_func
(proxy, G_CALLBACK (cb_menu_item_deselected), window);
}
}
static void
cb_menu_item_selected (GtkWidget *item, LogdiagWindowMain *window)
{
GtkAction *action;
gchar *tooltip;
action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (item));
g_object_get (G_OBJECT (action), "tooltip", &tooltip, NULL);
if (tooltip != NULL)
gtk_statusbar_push (GTK_STATUSBAR (window->priv->statusbar),
window->priv->statusbar_menu_context_id, tooltip);
g_free (tooltip);
}
static void
cb_menu_item_deselected (GtkItem *item, LogdiagWindowMain *window)
{
gtk_statusbar_pop (GTK_STATUSBAR (window->priv->statusbar),
window->priv->statusbar_menu_context_id);
}
static void
cb_show_about_dialog (GtkAction *action, LogdiagWindowMain *window)
{
gtk_show_about_dialog (GTK_WINDOW (window),
"program-name", PROJECT_NAME,
"version", PROJECT_VERSION,
"copyright", "Copyright Přemysl Janouch 2010",
NULL);
}

60
src/window-main.h Normal file
View File

@@ -0,0 +1,60 @@
/*
* window-main.h
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2010. All rights reserved.
*
* See the file LICENSE for licensing information.
*
*/
#ifndef __WINDOW_MAIN_H__
#define __WINDOW_MAIN_H__
G_BEGIN_DECLS
#define LOGDIAG_TYPE_WINDOW_MAIN (logdiag_window_main_get_type ())
#define LOGDIAG_WINDOW_MAIN(obj) (G_TYPE_CHECK_INSTANCE_CAST \
((obj), LOGDIAG_TYPE_WINDOW_MAIN, LogdiagWindowMain))
#define LOGDIAG_WINDOW_MAIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
((klass), LOGDIAG_TYPE_WINDOW_MAIN, LogdiagWindowMainClass))
#define LOGDIAG_IS_WINDOW_MAIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
((obj), LOGDIAG_TYPE_WINDOW_MAIN))
#define LOGDIAG_IS_WINDOW_MAIN_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
((klass), LOGDIAG_TYPE_WINDOW_MAIN))
#define LOGDIAG_WINDOW_MAIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
((obj), LOGDIAG_WINDOW_MAIN, LogdiagWindowMainClass))
typedef struct _LogdiagWindowMain LogdiagWindowMain;
typedef struct _LogdiagWindowMainPrivate LogdiagWindowMainPrivate;
typedef struct _LogdiagWindowMainClass LogdiagWindowMainClass;
/**
* LogdiagWindowMain:
*
* Object structure.
*/
struct _LogdiagWindowMain
{
/*< private >*/
GtkWindow parent_instance;
LogdiagWindowMainPrivate *priv;
};
struct _LogdiagWindowMainClass
{
GtkWindowClass parent_class;
};
GType logdiag_window_main_get_type (void) G_GNUC_CONST;
GtkWidget *logdiag_window_main_new (void);
G_END_DECLS
#endif /* ! __WINDOW_MAIN_H__ */