gnome-utils r8225 - trunk/logview
- From: cosimoc svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-utils r8225 - trunk/logview
- Date: Tue, 23 Dec 2008 13:25:20 +0000 (UTC)
Author: cosimoc
Date: Tue Dec 23 13:25:19 2008
New Revision: 8225
URL: http://svn.gnome.org/viewvc/gnome-utils?rev=8225&view=rev
Log:
Start reworking somewhat the LogviewWindow. Implement a new
LogviewManager that takes care of opening/closing/notifying the logs wrt
all the other objects; nothing works now still...
Added:
trunk/logview/logview-manager.c
trunk/logview/logview-manager.h
Modified:
trunk/logview/logview-main.c
trunk/logview/logview.c
trunk/logview/logview.h
Modified: trunk/logview/logview-main.c
==============================================================================
--- trunk/logview/logview-main.c (original)
+++ trunk/logview/logview-main.c Tue Dec 23 13:25:19 2008
@@ -113,10 +113,6 @@
}
gtk_window_set_default_icon_name ("logviewer");
-
- prefs_connect (logview);
- logview_menus_set_state (logview);
-
gtk_widget_show (GTK_WIDGET (logview));
if (argc == 1) {
Added: trunk/logview/logview-manager.c
==============================================================================
--- (empty file)
+++ trunk/logview/logview-manager.c Tue Dec 23 13:25:19 2008
@@ -0,0 +1,204 @@
+/* logview-manager.c
+ *
+ * Copyright (C) 2008 Cosimo Cecchi <cosimoc gnome org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 551 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ * USA.
+ */
+
+/* logview-manager.c */
+
+#include "logview-manager.h"
+
+enum {
+ LOG_ADDED,
+ LOG_ADD_ERROR,
+ ACTIVE_CHANGED,
+ LAST_SIGNAL
+};
+
+static LogviewManager *singleton = NULL;
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE (LogviewManager, logview_manager, G_TYPE_OBJECT);
+
+#define GET_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LOGVIEW_TYPE_MANAGER, LogviewManagerPrivate))
+
+typedef struct {
+ LogviewManager *manager;
+ char *filename;
+ gboolean set_active;
+} CreateCBData;
+
+struct _LogviewManagerPrivate {
+ GList *logs;
+ LogviewLog *active_log;
+};
+
+static void
+logview_manager_finalize (GObject *object)
+{
+ G_OBJECT_CLASS (logview_manager_parent_class)->finalize (object);
+}
+
+static void
+logview_manager_class_init (LogviewManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = logview_manager_finalize;
+
+ signals[LOG_ADDED] = g_signal_new ("log-added",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (LogviewManagerClass, log_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ LOGVIEW_TYPE_LOG);
+
+ signals[LOG_ADD_ERROR] = g_signal_new ("log-add-error",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (LogviewManagerClass, log_add_error),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1,
+ G_TYPE_STRING);
+
+ signals[ACTIVE_CHANGED] = g_signal_new ("active-changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (LogviewManagerClass, active_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ LOGVIEW_TYPE_LOG);
+
+ g_type_class_add_private (klass, sizeof (LogviewManagerPrivate));
+}
+
+static void
+logview_manager_init (LogviewManager *self)
+{
+ self->priv = GET_PRIVATE (self);
+
+ priv->active_log = NULL;
+ priv->logs = NULL;
+}
+
+static void
+create_log_cb (LogviewLog *log,
+ GError *error,
+ gpointer user_data)
+{
+ CreateCBData *data;
+
+ if (log) {
+ /* creation went well, store the log and notify */
+ g_slist_append (data->manager->priv->logs, log);
+
+ g_signal_emit (data->manager, signals[LOG_ADDED], 0, log, NULL);
+
+ if (data->set_active) {
+ logview_manager_set_active (data->manager, log);
+ }
+ } else {
+ /* notify the error */
+ g_signal_emit (data->manager, signals[LOG_ADD_ERROR], 0, data->filename, NULL);
+ }
+
+ g_free (data->filename);
+ g_slice_free (CreateCBData, data);
+}
+
+/* public methods */
+
+LogviewManager*
+logview_manager_get (void)
+{
+ if (!singleton) {
+ singleton = g_object_new (LOGVIEW_TYPE_MANAGER, NULL);
+ }
+
+ return singleton;
+}
+
+void
+logview_manager_set_active_log (LogviewManager *manager,
+ LogviewLog *log)
+{
+ g_assert (LOGVIEW_IS_MANAGER (manager));
+
+ if (manager->priv->active_log) {
+ g_object_unref (manager->priv->active_log);
+ }
+
+ manager->priv->active_log = g_object_ref (log);
+ g_signal_emit (manager, signals[ACTIVE_CHANGED], 0, log, NULL);
+}
+
+void
+logview_manager_get_active_log (LogviewManager *manager)
+{
+ g_assert (LOGVIEW_IS_MANAGER (manager));
+
+ return (manager->priv->active_log != NULL) ?
+ g_object_ref (manager->priv->active_log) :
+ NULL;
+}
+
+void
+logview_manager_add_logs_from_names (LogviewManager *manager,
+ GSList *names,
+ const char *active)
+{
+ GSList *l;
+
+ g_assert (LOGVIEW_IS_MANAGER (manager));
+
+ for (l = names; l; l = l->next) {
+ logview_manager_add_log_from_name (l->data, (g_ascii_strcasecmp (active, l->data) == 0));
+ }
+}
+
+void
+logview_manager_add_log_from_name (LogviewManager *manager,
+ const char *filename, gboolean set_active)
+{
+ CreateCBData *data = g_slice_new0 (CreateCBData);
+
+ g_assert (LOGVIEW_IS_MANAGER (manager));
+
+ if (set_active == FALSE) {
+ /* if it's the first log being added, set it as active anyway */
+ set_active = (manager->priv->logs == NULL);
+ }
+
+ data->filename = g_strdup (filename);
+ data->manager = manager;
+ data->set_active = set_active;
+
+ logview_log_create (filename, create_log_cb, data);
+}
+
+int
+logview_manager_get_log_count (LogviewManager *manager)
+{
+ g_assert (LOGVIEW_IS_MANAGER (manager));
+
+ return g_slist_length (manager->priv->logs);
+}
\ No newline at end of file
Added: trunk/logview/logview-manager.h
==============================================================================
--- (empty file)
+++ trunk/logview/logview-manager.h Tue Dec 23 13:25:19 2008
@@ -0,0 +1,77 @@
+/* logview-manager.h
+ *
+ * Copyright (C) 2008 Cosimo Cecchi <cosimoc gnome org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 551 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ * USA.
+ */
+
+/* logview-manager.h */
+
+#ifndef __LOGVIEW_MANAGER_H__
+#define __LOGVIEW_MANAGER_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define LOGVIEW_TYPE_MANAGER logview_manager_get_type()
+#define LOGVIEW_MANAGER(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), LOGVIEW_TYPE_MANAGER, LogviewManager))
+#define LOGVIEW_MANAGER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), LOGVIEW_TYPE_MANAGER, LogviewManagerClass))
+#define LOGVIEW_IS_MANAGER(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LOGVIEW_TYPE_MANAGER))
+#define LOGVIEW_IS_MANAGER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), LOGVIEW_TYPE_MANAGER))
+#define LOGVIEW_MANAGER_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), LOGVIEW_TYPE_MANAGER, LogviewManagerClass))
+
+typedef struct _LogviewManager LogviewManager;
+typedef struct _LogviewManagerClass LogviewManagerClass;
+typedef struct _LogviewManagerPrivate LogviewManagerPrivate;
+
+struct _LogviewManager {
+ GObject parent;
+ LogviewManagerPrivate *priv;
+};
+
+struct _LogviewManagerClass {
+ GObjectClass parent_class;
+
+ void (* log_added) (LogviewManager *manager,
+ LogviewLog *log);
+ void (* log_add_error) (LogviewManager *manager,
+ char *filename);
+ void (* active_changed) (LogviewManager *manager,
+ LogviewLog *log);
+};
+
+GType logview_manager_get_type (void);
+
+/* public methods */
+LogviewManager* logview_manager_get (void);
+void logview_manager_add_log_from_name (LogviewManager *manager,
+ const char *filename);
+void logview_manager_add_logs_from_names (LogviewManager *manager,
+ GSList *names);
+void logview_manager_set_active_log (LogviewManager *manager,
+ LogviewLog *log);
+LogviewLog * logview_manager_get_active_log (LogviewManager *manager);
+int logview_manager_get_log_count (LogviewManager *manager);
+
+G_END_DECLS
+
+#endif /* __LOGVIEW_MANAGER_H__ */
Modified: trunk/logview/logview.c
==============================================================================
--- trunk/logview/logview.c (original)
+++ trunk/logview/logview.c Tue Dec 23 13:25:19 2008
@@ -1,22 +1,22 @@
-/* ----------------------------------------------------------------------
-
- Copyright (C) 1998 Cesar Miquel (miquel df uba ar)
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- ---------------------------------------------------------------------- */
+/* logview-window.c - main window of logview
+ *
+ * Copyright (C) 1998 Cesar Miquel <miquel df uba ar>
+ * Copyright (C) 2008 Cosimo Cecchi <cosimoc gnome org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
#include <config.h>
#include <stdlib.h>
@@ -33,6 +33,7 @@
#include "misc.h"
#include "logview-findbar.h"
#include "logview-prefs.h"
+#include "logview-manager.h"
#include "calendar.h"
#define APP_NAME _("System Log Viewer")
@@ -49,6 +50,28 @@
LOG_LINE_WEIGHT_SET
};
+struct _LogviewWindowPrivate {
+ GtkWidget *view;
+ GtkWidget *statusbar;
+ GtkUIManager *ui_manager;
+
+ GtkWidget *calendar;
+ GtkWidget *find_bar;
+ GtkWidget *loglist;
+ GtkWidget *sidebar;
+ GtkWidget *version_bar;
+ GtkWidget *version_selector;
+ GtkWidget *hpaned;
+
+ int original_fontsize, fontsize;
+
+ LogviewPrefs *prefs;
+ LogviewManager *manager;
+};
+
+#define GET_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LOGVIEW_TYPE_WINDOW, LogviewWindowPrivate))
+
G_DEFINE_TYPE (LogviewWindow, logview_window, GTK_TYPE_WINDOW);
/* Function Prototypes */
@@ -163,27 +186,6 @@
/* public interface */
-Log *
-logview_get_active_log (LogviewWindow *logview)
-{
- g_return_val_if_fail (LOGVIEW_IS_WINDOW (logview), NULL);
- return logview->curlog;
-}
-
-LogList *
-logview_get_loglist (LogviewWindow *logview)
-{
- g_return_val_if_fail (LOGVIEW_IS_WINDOW (logview), NULL);
- return LOG_LIST (logview->loglist);
-}
-
-int
-logview_count_logs (LogviewWindow *logview)
-{
- g_assert (LOGVIEW_IS_WINDOW (logview));
- return g_slist_length (logview->logs);
-}
-
static void
logview_store_visible_range (LogviewWindow *logview)
{
@@ -218,44 +220,7 @@
gtk_widget_grab_focus (logview->view);
}
-void
-logview_add_log_from_name (LogviewWindow *logview, gchar *file)
-{
- Log *log;
-
- g_return_if_fail (LOGVIEW_IS_WINDOW (logview));
- g_return_if_fail (file);
-
- log = log_open (file, TRUE);
- if (log != NULL)
- logview_add_log (logview, log);
-}
-
-void
-logview_add_logs_from_names (LogviewWindow *logview, GSList *lognames, gchar *selected)
-{
- GSList *list;
- Log *log, *curlog = NULL;
-
- g_return_if_fail (LOGVIEW_IS_WINDOW (logview));
-
- if (lognames == NULL)
- return;
-
- for (list = lognames; list != NULL; list = g_slist_next (list)) {
- log = log_open (list->data, FALSE);
- if (log != NULL) {
- logview_add_log (logview, log);
- if (selected!=NULL && g_strncasecmp (log->name, selected, -1)==0)
- curlog = log;
- }
- }
-
- if (curlog)
- loglist_select_log (LOG_LIST (logview->loglist), curlog);
- gtk_tree_view_expand_all (GTK_TREE_VIEW (logview->loglist));
-}
void
logview_menus_set_state (LogviewWindow *logview)
@@ -370,38 +335,6 @@
}
}
-static void
-logview_destroy (GObject *object, LogviewWindow *logview)
-{
- g_assert (LOGVIEW_IS_WINDOW (logview));
-
- if (logview->curlog) {
- if (logview->curlog->monitored)
- monitor_stop (logview->curlog);
- }
-
- logview_save_prefs (logview);
- prefs_free_loglist ();
-
- if (gtk_main_level() > 0)
- gtk_main_quit ();
- else
- exit (0);
-}
-
-static void
-logview_add_log (LogviewWindow *logview, Log *log)
-{
- g_return_if_fail (LOGVIEW_IS_WINDOW (logview));
- g_return_if_fail (log);
-
- logview->logs = g_slist_append (logview->logs, log);
- loglist_add_log (LOG_LIST(logview->loglist), log);
- log->window = logview;
- monitor_start (log);
-}
-
-
static Log *
logview_find_log_from_name (LogviewWindow *logview, gchar *name)
{
@@ -765,187 +698,200 @@
static void
logview_help (GtkAction *action, GtkWidget *parent_window)
{
- GError *error = NULL;
+ GError *error = NULL;
- gtk_show_uri (gtk_widget_get_screen (parent_window),
- "ghelp:gnome-system-log", gtk_get_current_event_time (),
- &error);
-
- if (error) {
- error_dialog_show (parent_window, _("There was an error displaying help."), error->message);
- g_error_free (error);
- }
+ gtk_show_uri (gtk_widget_get_screen (parent_window),
+ "ghelp:gnome-system-log", gtk_get_current_event_time (),
+ &error);
+
+ if (error) {
+ error_dialog_show (parent_window, _("There was an error displaying help."), error->message);
+ g_error_free (error);
+ }
}
static gboolean
window_size_changed_cb (GtkWidget *widget, GdkEventConfigure *event,
- gpointer data)
+ gpointer data)
{
- LogviewWindow *logview = LOGVIEW_WINDOW (data);
-
- g_assert (LOGVIEW_IS_WINDOW (logview));
- prefs_store_window_size (GTK_WIDGET(logview));
- return FALSE;
+ logview_prefs_store_window_size (event->width, event->height);
+
+ return FALSE;
}
static void
logview_window_finalize (GObject *object)
{
- LogviewWindow *logview = LOGVIEW_WINDOW(object);
+ LogviewWindow *logview = LOGVIEW_WINDOW (object);
- g_object_unref (logview->ui_manager);
- G_OBJECT_CLASS (logview_window_parent_class)->finalize (object);
+ g_object_unref (logview->priv->ui_manager);
+ G_OBJECT_CLASS (logview_window_parent_class)->finalize (object);
}
static void
logview_window_init (LogviewWindow *logview)
{
- GtkWidget *vbox;
- GtkTreeStore *tree_store;
- GtkTreeSelection *selection;
- GtkTreeViewColumn *column;
- GtkCellRenderer *renderer;
- gint i;
- GtkActionGroup *action_group;
- GtkAccelGroup *accel_group;
- GError *error = NULL;
- GtkWidget *menubar;
- GtkWidget *hpaned;
- GtkWidget *label;
- GtkWidget *main_view;
- GtkWidget *loglist_scrolled, *scrolled;
- PangoContext *context;
- PangoFontDescription *fontdesc;
- gchar *monospace_font_name;
-
- gtk_window_set_default_size (GTK_WINDOW (logview), prefs_get_width (), prefs_get_height ());
-
- vbox = gtk_vbox_new (FALSE, 0);
- gtk_container_add (GTK_CONTAINER (logview), vbox);
-
- /* Create menus */
- action_group = gtk_action_group_new ("LogviewMenuActions");
- gtk_action_group_set_translation_domain (action_group, NULL);
- gtk_action_group_add_actions (action_group, entries, G_N_ELEMENTS (entries), logview);
- gtk_action_group_add_toggle_actions(action_group, toggle_entries, G_N_ELEMENTS (toggle_entries), logview);
-
- logview->ui_manager = gtk_ui_manager_new ();
-
- gtk_ui_manager_insert_action_group (logview->ui_manager, action_group, 0);
-
- accel_group = gtk_ui_manager_get_accel_group (logview->ui_manager);
- gtk_window_add_accel_group (GTK_WINDOW (logview), accel_group);
-
- if (!gtk_ui_manager_add_ui_from_string (logview->ui_manager, ui_description, -1, &error)) {
- logview->ui_manager = NULL;
- return;
- }
-
- menubar = gtk_ui_manager_get_widget (logview->ui_manager, "/LogviewMenu");
- gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);
-
- /* panes */
- hpaned = gtk_hpaned_new ();
- gtk_box_pack_start (GTK_BOX (vbox), hpaned, TRUE, TRUE, 0);
+ GtkTreeStore *tree_store;
+ GtkTreeSelection *selection;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ gint i;
+ GtkActionGroup *action_group;
+ GtkAccelGroup *accel_group;
+ GError *error = NULL;
+ GtkWidget *hpaned, *main_view, *loglist_scrolled, *scrolled, *vbox;
+ PangoContext *context;
+ PangoFontDescription *fontdesc;
+ gchar *monospace_font_name;
+ LogviewWindowPrivate *priv = logview->priv;
+ int width, height;
+
+ priv = GET_PRIVATE (logview);
+ priv->prefs = logview_prefs_get ();
+ priv->manager = logview_manager_get ();
+
+ logview_prefs_get_stored_window_size (prefs, &width, &height);
+ gtk_window_set_default_size (GTK_WINDOW (logview), width, height);
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (logview), vbox);
+
+ /* Create menus */
+ action_group = gtk_action_group_new ("LogviewMenuActions");
+ gtk_action_group_set_translation_domain (action_group, NULL);
+ gtk_action_group_add_actions (action_group, entries, G_N_ELEMENTS (entries), logview);
+ gtk_action_group_add_toggle_actions(action_group, toggle_entries, G_N_ELEMENTS (toggle_entries), logview);
+
+ priv->ui_manager = gtk_ui_manager_new ();
+
+ gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, 0);
+
+ accel_group = gtk_ui_manager_get_accel_group (priv->ui_manager);
+ gtk_window_add_accel_group (GTK_WINDOW (logview), accel_group);
+
+ if (!gtk_ui_manager_add_ui_from_string (priv->ui_manager, ui_description, -1, &error)) {
+ priv->ui_manager = NULL;
+ g_critical ("Can't load the UI description: %s", error->message);
+ g_error_free (error);
+ return;
+ }
- /* First pane : sidebar (list of logs + calendar) */
- logview->sidebar = gtk_vbox_new (FALSE, 0);
-
- logview->calendar = calendar_new ();
- calendar_connect (CALENDAR (logview->calendar), logview);
- gtk_box_pack_end (GTK_BOX (logview->sidebar), GTK_WIDGET(logview->calendar), FALSE, FALSE, 0);
-
- /* log list */
- loglist_scrolled = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (loglist_scrolled),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (loglist_scrolled),
- GTK_SHADOW_ETCHED_IN);
- logview->loglist = loglist_new ();
- gtk_container_add (GTK_CONTAINER (loglist_scrolled), logview->loglist);
- gtk_box_pack_start (GTK_BOX (logview->sidebar), loglist_scrolled, TRUE, TRUE, 0);
- gtk_paned_pack1 (GTK_PANED (hpaned), logview->sidebar, FALSE, FALSE);
- loglist_connect (LOG_LIST(logview->loglist), logview);
-
- /* Second pane : log */
- main_view = gtk_vbox_new (FALSE, 0);
- gtk_paned_pack2 (GTK_PANED (hpaned), GTK_WIDGET (main_view), TRUE, TRUE);
-
- /* Scrolled window for the main view */
- scrolled = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_box_pack_start (GTK_BOX(main_view), scrolled, TRUE, TRUE, 0);
-
- /* Main Tree View */
- logview->view = gtk_tree_view_new ();
- gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (logview->view), FALSE);
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (logview->view), FALSE);
-
- /* Use the desktop monospace font */
- monospace_font_name = prefs_get_monospace ();
- logview_set_font (logview, monospace_font_name);
- g_free (monospace_font_name);
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_pack_start (column, renderer, TRUE);
- gtk_tree_view_column_set_attributes (column, renderer,
- "text", LOG_LINE_TEXT,
- "weight", LOG_LINE_WEIGHT,
- "weight-set", LOG_LINE_WEIGHT_SET,
- NULL);
- //gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_append_column (GTK_TREE_VIEW (logview->view), column);
-
- /* Version selector */
- logview->version_bar = gtk_hbox_new (FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (logview->version_bar), 3);
- logview->version_selector = gtk_combo_box_new_text ();
- g_signal_connect (G_OBJECT (logview->version_selector), "changed",
- G_CALLBACK (logview_version_selector_changed), logview);
- label = gtk_label_new (_("Version: "));
-
- gtk_box_pack_end (GTK_BOX(logview->version_bar), logview->version_selector, FALSE, FALSE, 0);
- gtk_box_pack_end (GTK_BOX(logview->version_bar), label, FALSE, FALSE, 0);
- gtk_box_pack_end (GTK_BOX(main_view), logview->version_bar, FALSE, FALSE, 0);
-
- logview->find_bar = logview_findbar_new ();
- gtk_box_pack_end (GTK_BOX (main_view), logview->find_bar, FALSE, FALSE, 0);
- logview_findbar_connect (LOGVIEW_FINDBAR (logview->find_bar), logview);
-
- /* Remember the original font size */
- context = gtk_widget_get_pango_context (logview->view);
- fontdesc = pango_context_get_font_description (context);
- logview->original_fontsize = pango_font_description_get_size (fontdesc) / PANGO_SCALE;
- logview->fontsize = logview->original_fontsize;
+ gtk_ui_manager_set_add_tearoffs (priv->ui_manager,
+ logview_prefs_get_have_tearoff (priv->prefs));
- gtk_container_add (GTK_CONTAINER (scrolled), GTK_WIDGET (logview->view));
- gtk_widget_show_all (scrolled);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (logview->view));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
+ w = gtk_ui_manager_get_widget (priv->ui_manager, "/LogviewMenu");
+ gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);
+ gtk_widget_show (w);
+
+ /* panes */
+ hpaned = gtk_hpaned_new ();
+ gtk_box_pack_start (GTK_BOX (vbox), hpaned, TRUE, TRUE, 0);
+
+ /* First pane : sidebar (list of logs + calendar) */
+ priv->sidebar = gtk_vbox_new (FALSE, 0);
+
+ priv->calendar = calendar_new ();
+ calendar_connect (CALENDAR (priv->calendar), logview);
+ gtk_box_pack_end (GTK_BOX (priv->sidebar), priv->calendar, FALSE, FALSE, 0);
+
+ /* log list */
+ loglist_scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (loglist_scrolled),
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (loglist_scrolled),
+ GTK_SHADOW_ETCHED_IN);
+ priv->loglist = loglist_new ();
+ gtk_container_add (GTK_CONTAINER (loglist_scrolled), priv->loglist);
+ gtk_box_pack_start (GTK_BOX (priv->sidebar), loglist_scrolled, TRUE, TRUE, 0);
+ gtk_paned_pack1 (GTK_PANED (hpaned), priv->sidebar, FALSE, FALSE);
+ loglist_connect (LOG_LIST (priv->loglist), logview);
+
+ /* Second pane : log */
+ main_view = gtk_vbox_new (FALSE, 0);
+ gtk_paned_pack2 (GTK_PANED (hpaned), main_view, TRUE, TRUE);
+
+ /* Scrolled window for the main view */
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start (GTK_BOX (main_view), scrolled, TRUE, TRUE, 0);
+
+ /* Main Tree View */
+ priv->view = gtk_tree_view_new ();
+ gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (priv->view), FALSE);
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->view), FALSE);
+
+ /* Use the desktop monospace font */
+ monospace_font_name = prefs_get_monospace ();
+ logview_set_font (logview, monospace_font_name);
+ g_free (monospace_font_name);
+
+ renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new ();
+ gtk_tree_view_column_pack_start (column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "text", LOG_LINE_TEXT,
+ "weight", LOG_LINE_WEIGHT,
+ "weight-set", LOG_LINE_WEIGHT_SET,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (priv->view), column);
+
+ /* Version selector */
+ priv->version_bar = gtk_hbox_new (FALSE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (priv->version_bar), 3);
+ priv->version_selector = gtk_combo_box_new_text ();
+ g_signal_connect (priv->version_selector, "changed",
+ G_CALLBACK (logview_version_selector_changed), logview);
+ w = gtk_label_new (_("Version: "));
+
+ gtk_box_pack_end (GTK_BOX (priv->version_bar), priv->version_selector, FALSE, FALSE, 0);
+ gtk_box_pack_end (GTK_BOX (priv->version_bar), w, FALSE, FALSE, 0);
+ gtk_box_pack_end (GTK_BOX (main_view), priv->version_bar, FALSE, FALSE, 0);
+
+ priv->find_bar = logview_findbar_new ();
+ gtk_box_pack_end (GTK_BOX (main_view), priv->find_bar, FALSE, FALSE, 0);
+ logview_findbar_connect (LOGVIEW_FINDBAR (priv->find_bar), logview);
+
+ /* Remember the original font size */
+ context = gtk_widget_get_pango_context (priv->view);
+ fontdesc = pango_context_get_font_description (context);
+ priv->original_fontsize = pango_font_description_get_size (fontdesc) / PANGO_SCALE;
+ priv->fontsize = priv->original_fontsize;
+
+ gtk_container_add (GTK_CONTAINER (scrolled), priv->view);
+ gtk_widget_show_all (scrolled);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->view));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
+
+ /* Add signal handlers */
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (selection_changed_cb), logview);
+ g_signal_connect (priv->view, "row-expanded",
+ G_CALLBACK (row_toggled_cb), logview);
+ g_signal_connect (priv->view, "row-collapsed",
+ G_CALLBACK (row_toggled_cb), logview);
+ g_signal_connect (logview, "configure_event",
+ G_CALLBACK (window_size_changed_cb), logview);
+ g_signal_connect (priv->prefs, "system-font-changed",
+ G_CALLBACK (font_changed_cb), logview);
+ g_signal_connect (priv->prefs, "have-tearoff-changed",
+ G_CALLBACK (tearoff_changed_cb), logview);
+ g_signal_connect (priv->manager, "log-added",
+ G_CALLBACK (log_added_cb), logview);
+ g_signal_connect (priv->manager, "active-changed",
+ G_CALLBACK (active_log_changed_cb), logview);
+
+ /* Status area at bottom */
+ priv->statusbar = gtk_statusbar_new ();
+ gtk_box_pack_start (GTK_BOX (vbox), priv->statusbar, FALSE, FALSE, 0);
+
+ gtk_widget_show (loglist_scrolled);
+ gtk_widget_show (main_view);
+ gtk_widget_show (vbox);
- /* Add signal handlers */
- g_signal_connect (G_OBJECT (selection), "changed",
- G_CALLBACK (selection_changed_cb), logview);
- g_signal_connect (G_OBJECT (logview->view), "row-expanded",
- G_CALLBACK (row_toggled_cb), logview);
- g_signal_connect (G_OBJECT (logview->view), "row-collapsed",
- G_CALLBACK (row_toggled_cb), logview);
- g_signal_connect (G_OBJECT (logview), "configure_event",
- G_CALLBACK (window_size_changed_cb), logview);
-
- /* Status area at bottom */
- logview->statusbar = gtk_statusbar_new ();
- gtk_box_pack_start (GTK_BOX (vbox), logview->statusbar, FALSE, FALSE, 0);
-
- gtk_widget_show (menubar);
- gtk_widget_show (loglist_scrolled);
- gtk_widget_show (main_view);
- gtk_widget_show (vbox);
- logview->hpaned = hpaned;
+ priv->hpaned = hpaned;
}
static void
@@ -966,36 +912,32 @@
static void
logview_window_class_init (LogviewWindowClass *klass)
{
- GObjectClass *object_class = (GObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
- object_class->finalize = logview_window_finalize;
- object_class->get_property = logview_window_get_property;
+ object_class->finalize = logview_window_finalize;
+ object_class->get_property = logview_window_get_property;
g_object_class_install_property (object_class, PROP_DAYS,
g_param_spec_pointer ("days",
_("Days"),
_("Pointer towards a GSList of days for the current log."),
(G_PARAM_READABLE)));
+
+ g_type_class_add_private (klass, sizeof (LogviewWindowPrivate));
}
+/* public methods */
+
GtkWidget *
logview_window_new ()
{
- LogviewWindow *logview;
- GtkWidget *window;
-
- window = g_object_new (LOGVIEW_TYPE_WINDOW, NULL);
- logview = LOGVIEW_WINDOW (window);
- if (logview->ui_manager == NULL)
- return NULL;
-
- logview->logs = NULL;
+ LogviewWindow *logview;
- gtk_ui_manager_set_add_tearoffs (logview->ui_manager,
- prefs_get_have_tearoff ());
+ logview = g_object_new (LOGVIEW_TYPE_WINDOW, NULL);
- g_signal_connect (GTK_OBJECT (window), "destroy",
- G_CALLBACK (logview_destroy), logview);
+ if (priv->ui_manager == NULL) {
+ return NULL;
+ }
- return window;
-}
+ return window;
+}
\ No newline at end of file
Modified: trunk/logview/logview.h
==============================================================================
--- trunk/logview/logview.h (original)
+++ trunk/logview/logview.h Tue Dec 23 13:25:19 2008
@@ -1,30 +1,30 @@
+/* logview-window.h - main window of logview
+ *
+ * Copyright (C) 1998 Cesar Miquel <miquel df uba ar>
+ * Copyright (C) 2008 Cosimo Cecchi <cosimoc gnome org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
-/* ----------------------------------------------------------------------
-
- Copyright (C) 1998 Cesar Miquel (miquel df uba ar)
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- ---------------------------------------------------------------------- */
-
-#ifndef __LOGVIEW_H__
-#define __LOGVIEW_H__
+#ifndef __LOGVIEW_WINDOW_H__
+#define __LOGVIEW_WINDOW_H__
#include <gtk/gtk.h>
#include "logrtns.h"
+#include "loglist.h"
#define MAX_VERSIONS 5
@@ -37,33 +37,21 @@
typedef struct _LogviewWindow LogviewWindow;
typedef struct _LogviewWindowClass LogviewWindowClass;
+typedef struct _LogviewWindowPrivate LogviewWindowPrivate;
struct _LogviewWindow {
- GtkWindow parent_instance;
-
- GtkWidget *view;
- GtkWidget *statusbar;
- GtkUIManager *ui_manager;
-
- GtkWidget *calendar;
- GtkWidget *find_bar;
- GtkWidget *loglist;
- GtkWidget *sidebar;
- GtkWidget *version_bar;
- GtkWidget *version_selector;
- GtkWidget *hpaned;
-
- GSList *logs;
- Log *curlog;
-
- int original_fontsize, fontsize;
+ GtkWindow parent_instance;
+ LogviewWindowPrivate *priv;
};
struct _LogviewWindowClass {
GtkWindowClass parent_class;
};
-#include "loglist.h"
+GType logview_window_get_type (void);
+
+/* public methods */
+GtkWidget *logview_window_new (void);
Log *logview_get_active_log (LogviewWindow *logview);
LogList *logview_get_loglist (LogviewWindow *logview);
@@ -75,7 +63,5 @@
void logview_set_window_title (LogviewWindow *window);
void logview_set_font (LogviewWindow *window, const gchar *fontname);
void logview_show_main_content (LogviewWindow *window);
-GType logview_window_get_type (void);
-GtkWidget *logview_window_new (void);
-#endif /* __LOGVIEW_H__ */
+#endif /* __LOGVIEW_WINDOW_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]