gnome-utils r8227 - trunk/logview



Author: cosimoc
Date: Tue Dec 23 13:25:24 2008
New Revision: 8227
URL: http://svn.gnome.org/viewvc/gnome-utils?rev=8227&view=rev

Log:
Refactoe about dialog; keep on working on refactoring LogviewWindow and
LogviewManager.

Added:
   trunk/logview/logview-about.h
Removed:
   trunk/logview/about.c
   trunk/logview/about.h
Modified:
   trunk/logview/logview-manager.c
   trunk/logview/logview-manager.h
   trunk/logview/logview.c

Added: trunk/logview/logview-about.h
==============================================================================
--- (empty file)
+++ trunk/logview/logview-about.h	Tue Dec 23 13:25:24 2008
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2004 Vincent Noel <vnoel cox net>
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
+ * USA.
+ */
+
+#ifndef __LOG_ABOUT_H__
+#define __LOG_ABOUT_H__
+
+static const char *logview_about_authors[] = {
+  "Cesar Miquel <miquel df uba ar>",
+  "Glynn Foster <glynn foster sun com>",
+  "Fernando Herrera  <fherrera onirica com>",
+  "Shakti Sen  <shprasad novell com>",
+  "Julio M Merino Vidal <jmmv menta net>",
+  "Jason Leach  <leach wam umd edu>",
+  "Christian Neumair  <chris gnome-de org>",
+  "Jan Arne Petersen  <jpetersen uni-bonn de>",
+  "Jason Long  <jlong messiah edu>",
+  "Kjartan Maraas  <kmaraas gnome org>",
+  "Vincent Noel  <vincent noel gmail com>",
+  "Cosimo Cecchi <cosimoc gnome org>".
+  NULL
+};
+
+static const char *logview_about_documenters[] = {
+  "Sun GNOME Documentation Team <gdocteam sun com>",
+  "Vincent Noel <vincent noel gmail com>",
+  "Judith Samson <judith samsonsource com>",
+  NULL
+};
+
+static const char * logview_about_license[] = {
+  N_("Log Viewer 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."),
+  N_("Log Viewer 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."),
+  N_("You should have received a copy of the GNU General Public License "
+     "along with the GNOME Web Browser; if not, write to the Free Software Foundation, Inc., "
+     "51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA")
+};
+
+/* translator credits */
+static const char *logview_about_translator_credits = _("translator-credits");
+
+
+#endif /* __LOG_ABOUT_H__ */
+

Modified: trunk/logview/logview-manager.c
==============================================================================
--- trunk/logview/logview-manager.c	(original)
+++ trunk/logview/logview-manager.c	Tue Dec 23 13:25:24 2008
@@ -80,6 +80,15 @@
                                      G_TYPE_NONE, 1,
                                      LOGVIEW_TYPE_LOG);
 
+  signals[LOG_CLOSED] = g_signal_new ("log-closed",
+                                      G_OBJECT_CLASS_TYPE (object_class),
+                                      G_SIGNAL_RUN_LAST,
+                                      G_STRUCT_OFFSET (LogviewManagerClass, log_closed),
+                                      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,
@@ -107,7 +116,8 @@
   self->priv = GET_PRIVATE (self);
 
   priv->active_log = NULL;
-  priv->logs = g_hash_table_new (g_str_hash, g_str_equal);
+  priv->logs = g_hash_table_new_full (g_str_hash, g_str_equal, 
+                                      NULL, (GDestroyNotify) g_object_unref);
 }
 
 static void
@@ -135,6 +145,21 @@
   g_slice_free (CreateCBData, data);
 }
 
+static gboolean
+look_for_log (gpointer key,
+              gpointer value,
+              gpointer user_data)
+{
+  if (user_data == value) {
+    /* we found the log, emit the closed signal and remove the log */
+    g_signal_emit (singleton, signals[LOG_CLOSED], 0, value, NULL);
+
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
 /* public methods */
 
 LogviewManager*
@@ -216,17 +241,9 @@
 int
 logview_manager_get_log_count (LogviewManager *manager)
 {
-  GList *keys;
-  int retval;
-
   g_assert (LOGVIEW_IS_MANAGER (manager));
 
-  keys = g_hash_table_get_keys (manager->priv->logs);
-  retval = g_list_length (keys);
-
-  g_list_free (keys);
-
-  return retval;
+  return g_hash_table_size (manager->priv->logs);
 }
 
 LogviewLog *
@@ -235,4 +252,24 @@
   g_assert (LOGVIEW_IS_MANAGER (manager));
 
   return g_object_ref (g_hash_table_lookup (manager->priv->logs, filename));
+}
+
+void
+logview_manager_close_active_log (LogviewManager *manager)
+{
+  LogviewLog *active_log;
+  GHashTableIter iter;
+
+  g_assert (LOGVIEW_IS_MANAGER (manager));
+
+  active_log = manager->priv->active_log;
+
+  /* we own two refs to the active log; one is inside the hash table */
+  g_object_unref (active_log);
+
+  g_hash_table_find (manager->priv->logs,
+                     (GHRFunc) look_for_log,
+                     active_log);
+
+  /* someone else will take care of setting the next active log to us */
 }
\ No newline at end of file

Modified: trunk/logview/logview-manager.h
==============================================================================
--- trunk/logview/logview-manager.h	(original)
+++ trunk/logview/logview-manager.h	Tue Dec 23 13:25:24 2008
@@ -53,6 +53,8 @@
 
   void (* log_added) (LogviewManager *manager,
                       LogviewLog *log);
+  void (* log_closed) (LogviewManager *manager,
+                       LogviewLog *log);
   void (* log_add_error) (LogviewManager *manager,
                           char *filename);
   void (* active_changed) (LogviewManager *manager,
@@ -73,6 +75,7 @@
 int             logview_manager_get_log_count       (LogviewManager *manager);
 LogviewLog *    logview_manager_get_if_loaded       (LogviewManager *manager,
                                                      char *filename);
+void            logview_manager_close_active_log    (LogviewManager *manager);
 
 G_END_DECLS
 

Modified: trunk/logview/logview.c
==============================================================================
--- trunk/logview/logview.c	(original)
+++ trunk/logview/logview.c	Tue Dec 23 13:25:24 2008
@@ -28,7 +28,6 @@
 #include "loglist.h"
 #include "log_repaint.h"
 #include "logrtns.h"
-#include "monitor.h"
 #include "about.h"
 #include "misc.h"
 #include "logview-findbar.h"
@@ -75,82 +74,12 @@
 G_DEFINE_TYPE (LogviewWindow, logview_window, GTK_TYPE_WINDOW);
 
 /* Function Prototypes */
-
-static void logview_save_prefs (LogviewWindow *logview);
-static void logview_add_log (LogviewWindow *logview, Log *log);
-static void logview_menu_item_set_state (LogviewWindow *logview, char *path, gboolean state);
-static void logview_menu_item_toggle_set_active (LogviewWindow *logview, char *path, gboolean state);
 static void logview_update_findbar_visibility (LogviewWindow *logview);
-
-static void logview_open_log (GtkAction *action, LogviewWindow *logview);
-static void logview_toggle_sidebar (GtkAction *action, LogviewWindow *logview);
-static void logview_toggle_statusbar (GtkAction *action, LogviewWindow *logview);
-static void logview_toggle_calendar (GtkAction *action, LogviewWindow *logview);
-static void logview_collapse_rows (GtkAction *action, LogviewWindow *logview);
-static void logview_toggle_monitor (GtkAction *action, LogviewWindow *logview);
-static void logview_close_log (GtkAction *action, LogviewWindow *logview);
-static void logview_bigger_text (GtkAction *action, LogviewWindow *logview);
-static void logview_smaller_text (GtkAction *action, LogviewWindow *logview);
-static void logview_normal_text (GtkAction *action, LogviewWindow *logview);
 static void logview_calendar_set_state (LogviewWindow *logview);
 static void logview_search (GtkAction *action, LogviewWindow *logview);
-static void logview_help (GtkAction *action, GtkWidget *parent_window);
-static void logview_copy (GtkAction *action, LogviewWindow *logview);
-static void logview_select_all (GtkAction *action, LogviewWindow *logview);
-static Log *logview_find_log_from_name (LogviewWindow *logview, gchar *name);
 
 static void logview_window_get_property	(GObject *object, guint param_id, GValue *value, GParamSpec *pspec);
 
-/* Menus */
-
-static GtkActionEntry entries[] = {
-	{ "FileMenu", NULL, N_("_File"), NULL, NULL, NULL },
-	{ "EditMenu", NULL, N_("_Edit"), NULL, NULL, NULL },
-	{ "ViewMenu", NULL, N_("_View"), NULL, NULL, NULL },
-	{ "HelpMenu", NULL, N_("_Help"), NULL, NULL, NULL },
-
-	{ "OpenLog", GTK_STOCK_OPEN, N_("_Open..."), "<control>O", N_("Open a log from file"), 
-	  G_CALLBACK (logview_open_log) },
-	{ "CloseLog", GTK_STOCK_CLOSE, N_("_Close"), "<control>W", N_("Close this log"), 
-	  G_CALLBACK (logview_close_log) },
-	{ "Quit", GTK_STOCK_QUIT, N_("_Quit"), "<control>Q", N_("Quit the log viewer"), 
-	  G_CALLBACK (gtk_main_quit) },
-
-	{ "Copy", GTK_STOCK_COPY, N_("_Copy"), "<control>C", N_("Copy the selection"),
-	  G_CALLBACK (logview_copy) },
-	{ "SelectAll", NULL, N_("Select _All"), "<Control>A", N_("Select the entire log"),
-	  G_CALLBACK (logview_select_all) },
-	{ "Search", GTK_STOCK_FIND, N_("_Filter..."), "<control>F", N_("Filter log"),
-	  G_CALLBACK (logview_search) },
-
-	{"ViewZoomIn", GTK_STOCK_ZOOM_IN, NULL, "<control>plus", N_("Bigger text size"),
-	 G_CALLBACK (logview_bigger_text)},
-	{"ViewZoomOut", GTK_STOCK_ZOOM_OUT, NULL, "<control>minus", N_("Smaller text size"),
-	 G_CALLBACK (logview_smaller_text)},
-	{"ViewZoom100", GTK_STOCK_ZOOM_100, NULL, "<control>0", N_("Normal text size"),
-	 G_CALLBACK (logview_normal_text)},
-
-	{"CollapseAll", NULL, N_("Collapse _All"), NULL, N_("Collapse all the rows"),
-	 G_CALLBACK (logview_collapse_rows) },
-
-	{ "HelpContents", GTK_STOCK_HELP, N_("_Contents"), "F1", N_("Open the help contents for the log viewer"), 
-	  G_CALLBACK (logview_help) },
-	{ "AboutAction", GTK_STOCK_ABOUT, N_("_About"), NULL, N_("Show the about dialog for the log viewer"), 
-	  G_CALLBACK (logview_about) },
-
-};
-
-static GtkToggleActionEntry toggle_entries[] = {
-    { "ShowStatusBar", NULL, N_("_Statusbar"), NULL, N_("Show Status Bar"),
-      G_CALLBACK (logview_toggle_statusbar), TRUE },
-	{ "ShowSidebar", NULL, N_("Side _Pane"), "F9", N_("Show Side Pane"), 
-		G_CALLBACK (logview_toggle_sidebar), TRUE },
-	{ "MonitorLogs", NULL, N_("_Monitor"), "<control>M", N_("Monitor Current Log"),
-	  G_CALLBACK (logview_toggle_monitor), TRUE },
-	{"ShowCalendar", NULL,  N_("Ca_lendar"), "<control>L", N_("Show Calendar Log"), 
-	 G_CALLBACK (logview_toggle_calendar), TRUE },
-};
-
 static const char *ui_description = 
 	"<ui>"
 	"	<menubar name='LogviewMenu'>"
@@ -164,8 +93,6 @@
 	"	    	<menuitem action='SelectAll'/>"
 	"		</menu>"
 	"		<menu action='ViewMenu'>"
-	"			<menuitem action='MonitorLogs'/>"
-	"			<separator/>"
 	"			<menuitem action='ShowStatusBar'/>"
 	"			<menuitem action='ShowSidebar'/>"
 	"			<menuitem action='ShowCalendar'/>"
@@ -221,31 +148,6 @@
 }
 
 void
-logview_menus_set_state (LogviewWindow *logview)
-{
-    Log *log;
-    gboolean calendar_active = FALSE, monitor_active = FALSE;
-    GtkWidget *widget;
-
-    g_assert (LOGVIEW_IS_WINDOW (logview));
-    log = logview->curlog;
-
-    if (log) {
-        monitor_active = (log->display_name == NULL);
-        calendar_active = (log->days != NULL);
-        logview_menu_item_toggle_set_active (logview, "/LogviewMenu/ViewMenu/MonitorLogs", logview->curlog->monitored);
-    }
-    
-    logview_menu_item_set_state (logview, "/LogviewMenu/ViewMenu/MonitorLogs", monitor_active);
-    logview_menu_item_set_state (logview, "/LogviewMenu/ViewMenu/ShowCalendar", calendar_active);
-    logview_menu_item_set_state (logview, "/LogviewMenu/FileMenu/CloseLog", (log != NULL));
-    logview_menu_item_set_state (logview, "/LogviewMenu/ViewMenu/CollapseAll", calendar_active);
-    logview_menu_item_set_state (logview, "/LogviewMenu/ViewMenu/Search", (log != NULL));
-    logview_menu_item_set_state (logview, "/LogviewMenu/EditMenu/Copy", (log != NULL));
-    logview_menu_item_set_state (logview, "/LogviewMenu/EditMenu/SelectAll", (log != NULL));
-}
-
-void
 logview_set_window_title (LogviewWindow *logview)
 {
     gchar *window_title;
@@ -264,10 +166,7 @@
 	logname = log->display_name;
       else
 	logname = log->name;
-      
-      if (log->monitored) 
-	window_title = g_strdup_printf (_("%s (monitored) - %s"), logname, APP_NAME);
-      else
+
 	window_title = g_strdup_printf ("%s - %s", logname, APP_NAME);
 
     }
@@ -381,177 +280,193 @@
 }
 
 static void
-logview_close_log (GtkAction *action, LogviewWindow *logview)
+logview_calendar_set_state (LogviewWindow *logview)
 {
-    Log *log;
     g_assert (LOGVIEW_IS_WINDOW (logview));
 
-    if (logview->curlog == NULL)
-        return;
-
-    if (logview->curlog->monitored) {
-        GtkAction *action = gtk_ui_manager_get_action (logview->ui_manager, "/LogviewMenu/ViewMenu/MonitorLogs");
-        gtk_action_activate (action);
-    }
-    
-    gtk_widget_hide (logview->find_bar);
+    if (logview->curlog) {
+        if (logview->curlog->days != NULL)
+            calendar_init_data (CALENDAR (logview->calendar), logview);
+        gtk_widget_set_sensitive (logview->calendar, (logview->curlog->days != NULL));
+    } else
+        gtk_widget_set_sensitive (logview->calendar, FALSE);
+}
 
-    log = logview->curlog;
-    logview->curlog = NULL;
+/* private helpers */
 
-    logview->logs = g_slist_remove (logview->logs, log);
-    log_close (log);
-    loglist_remove_log (LOG_LIST (logview->loglist), log);
-}
+#define DEFAULT_LOGVIEW_FONT "Monospace 10"
 
 static void
-logview_toggle_statusbar (GtkAction *action, LogviewWindow *logview)
+logview_set_font (LogviewWindow *logview,
+                  const char    *fontname)
 {
-    g_assert (LOGVIEW_IS_WINDOW (logview));
+  PangoFontDescription *font_desc;
 
-    if (GTK_WIDGET_VISIBLE (logview->statusbar))
-        gtk_widget_hide (logview->statusbar);
-    else
-        gtk_widget_show (logview->statusbar);
-}
+  g_assert (LOGVIEW_IS_WINDOW (logview));
 
-static void
-logview_toggle_sidebar (GtkAction *action, LogviewWindow *logview)
-{
-    g_assert (LOGVIEW_IS_WINDOW (logview));
+  if (fontname == NULL)
+    fontname = DEFAULT_LOGVIEW_FONT;
 
-	if (GTK_WIDGET_VISIBLE (logview->sidebar))
-		gtk_widget_hide (logview->sidebar);
-	else
-		gtk_widget_show (logview->sidebar);
+  font_desc = pango_font_description_from_string (fontname);
+  if (font_desc) {
+    gtk_widget_modify_font (logview->priv->view, font_desc);
+    pango_font_description_free (font_desc);
+  }
 }
 
-static void 
-logview_toggle_calendar (GtkAction *action, LogviewWindow *logview)
+static void
+logview_set_fontsize (LogviewWindow *logview)
 {
-    g_assert (LOGVIEW_IS_WINDOW (logview));
+  PangoFontDescription *fontdesc;
+  PangoContext *context;
+	
+  g_assert (LOGVIEW_IS_WINDOW (logview));
 
-	if (GTK_WIDGET_VISIBLE (logview->calendar))
-		gtk_widget_hide (logview->calendar);
-	else {
-		gtk_widget_show (logview->calendar);
-		if (!GTK_WIDGET_VISIBLE (logview->sidebar)) {
-			GtkAction *action = gtk_ui_manager_get_action (logview->ui_manager, "/LogviewMenu/ViewMenu/ShowSidebar");
-			gtk_action_activate (action);
-		}
-	}
+  context = gtk_widget_get_pango_context (priv->view);
+  fontdesc = pango_context_get_font_description (context);
+  pango_font_description_set_size (fontdesc, (priv->fontsize) * PANGO_SCALE);
+  gtk_widget_modify_font (priv->view, fontdesc);
+
+  logview_prefs_store_fontsize (logview->priv->prefs, priv->fontsize);
 }
 
-static void 
-logview_collapse_rows (GtkAction *action, LogviewWindow *logview)
+static void
+logview_menu_item_set_state (LogviewWindow *logview, char *path, gboolean state)
 {
-    g_assert (LOGVIEW_IS_WINDOW (logview));
+  GtkAction *action;
+
+  g_assert (path);
 
-    gtk_tree_view_collapse_all (GTK_TREE_VIEW (logview->view));
+  action = gtk_ui_manager_get_action (logview->priv->ui_manager, path);
+  gtk_action_set_sensitive (action, state);
 }
 
+/* actions callbacks */
+
 static void
-logview_toggle_monitor (GtkAction *action, LogviewWindow *logview)
+open_file_selected_cb (GtkWidget *chooser, gint response, LogviewWindow *logview)
 {
-    Log *log;
+  char *f;
+  LogviewLog *log;
 
-    g_assert (LOGVIEW_IS_WINDOW (logview));
+  g_assert (LOGVIEW_IS_WINDOW (logview));
 
-    log = logview->curlog;
-    if ((log == NULL) || (log->display_name))
-        return;
+  gtk_widget_hide (GTK_WIDGET (chooser));
+  if (response != GTK_RESPONSE_OK) {
+	  return;
+  }
 
-    if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)) &&
-        (log->monitored))
-        return;
+  f = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
 
-    if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))==FALSE &&
-        (!log->monitored))
-        return;
+  log = logview_manager_get_if_loaded (logview->priv->manager, f);
 
-    if (log->monitored)
-        monitor_stop (log);
-    else
-        monitor_start (log);
-    
-    logview_set_window_title (logview);
-    logview_menus_set_state (logview);
-}
+  if (log) {
+    logview_manager_set_active_log (log);
+    g_object_unref (log);
+    goto out;
+  }
 
-#define DEFAULT_LOGVIEW_FONT "Monospace 10"
+  logview_manager_add_log_from_name (logview->priv->manager, f);
 
-void
-logview_set_font (LogviewWindow *logview,
-                  const gchar   *fontname)
+out:
+  g_free (f);
+}
+
+static void
+logview_open_log (GtkAction *action, LogviewWindow *logview)
 {
-	PangoFontDescription *font_desc;
+  static GtkWidget *chooser = NULL;
+  char *active;
 
-	g_return_if_fail (LOGVIEW_IS_WINDOW (logview));
+  if (chooser == NULL) {
+    chooser = gtk_file_chooser_dialog_new (_("Open Log"),
+                                           GTK_WINDOW (logview),
+                                           GTK_FILE_CHOOSER_ACTION_OPEN,
+                                           GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                           GTK_STOCK_OPEN, GTK_RESPONSE_OK,
+                                           NULL);
+    gtk_dialog_set_default_response (GTK_DIALOG (chooser), GTK_RESPONSE_OK);
+    gtk_window_set_modal (GTK_WINDOW (chooser), TRUE);
+    g_signal_connect (G_OBJECT (chooser), "response",
+                      G_CALLBACK (open_file_selected_cb), logview);
+    g_signal_connect (G_OBJECT (chooser), "destroy",
+                      G_CALLBACK (gtk_widget_destroyed), &chooser);
+    active = logview_prefs_get_active_logfile (logview->priv->prefs);
+    if (active != NULL) {
+      gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (chooser), active);
+      g_free (active);
+    }
+  }
 
-	if (fontname == NULL)
-		fontname = DEFAULT_LOGVIEW_FONT;
+  gtk_window_present (GTK_WINDOW (chooser));
+}
 
-	font_desc = pango_font_description_from_string (fontname);
-	if (font_desc) {
-		gtk_widget_modify_font (logview->view, font_desc);
-		pango_font_description_free (font_desc);
-	}
+static void
+logview_close_log (GtkAction *action, LogviewWindow *logview)
+{
+  g_assert (LOGVIEW_IS_WINDOW (logview));
+
+  gtk_widget_hide (logview->priv->find_bar);
+  logview_manager_close_active_log (logview->priv->manager);
 }
 
 static void
-logview_set_fontsize (LogviewWindow *logview)
+logview_help (GtkAction *action, GtkWidget *parent_window)
 {
-	PangoFontDescription *fontdesc;
-	PangoContext *context;
-	
-    g_assert (LOGVIEW_IS_WINDOW (logview));
+  GError *error = NULL;
 
-	context = gtk_widget_get_pango_context (logview->view);
-	fontdesc = pango_context_get_font_description (context);
-	pango_font_description_set_size (fontdesc, (logview->fontsize)*PANGO_SCALE);
-	gtk_widget_modify_font (logview->view, fontdesc);
-	logview_save_prefs (logview);
-}	
+  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 void
 logview_bigger_text (GtkAction *action, LogviewWindow *logview)
 {
-    g_assert (LOGVIEW_IS_WINDOW (logview));
+  g_assert (LOGVIEW_IS_WINDOW (logview));
 
-	logview->fontsize = MIN (logview->fontsize + 1, 24);
-	logview_set_fontsize (logview);
+  logview->priv->fontsize = MIN (logview->priv->fontsize + 1, 24);
+  logview_set_fontsize (logview);
 }	
 
 static void
 logview_smaller_text (GtkAction *action, LogviewWindow *logview)
 {
-    g_assert (LOGVIEW_IS_WINDOW (logview));
+  g_assert (LOGVIEW_IS_WINDOW (logview));
 
-	logview->fontsize = MAX (logview->fontsize-1, 6);
-	logview_set_fontsize (logview);
+  logview->priv->fontsize = MAX (logview->priv->fontsize-1, 6);
+  logview_set_fontsize (logview);
 }	
 
 static void
 logview_normal_text (GtkAction *action, LogviewWindow *logview)
 {
-    g_assert (LOGVIEW_IS_WINDOW (logview));
+  g_assert (LOGVIEW_IS_WINDOW (logview));
 
-	logview->fontsize = logview->original_fontsize;
-	logview_set_fontsize (logview);
+  logview->priv->fontsize = logview->priv->original_fontsize;
+  logview_set_fontsize (logview);
 }
-	
+
 static void
-logview_search (GtkAction *action, LogviewWindow *logview)
+logview_select_all (GtkAction *action, LogviewWindow *logview)
 {
-    g_assert (LOGVIEW_IS_WINDOW (logview));
-    
-    gtk_widget_show_all (logview->find_bar);
-    logview_findbar_grab_focus (LOGVIEW_FINDBAR (logview->find_bar));
+  GtkTreeSelection *selection;
+
+  g_assert (LOGVIEW_IS_WINDOW (logview));
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (logview->priv->view));
+  gtk_tree_selection_select_all (selection);
 }
 
 static void
 logview_copy (GtkAction *action, LogviewWindow *logview)
 {
+#if 0 doesn't work for now;
 	gchar *text, **lines;
 	int nline, i, l1, l2;
     gchar *line;
@@ -584,128 +499,142 @@
 
     g_free (text);
     g_strfreev (lines);
+#endif
 }
 
-static void
-logview_select_all (GtkAction *action, LogviewWindow *logview)
+static void 
+logview_collapse_rows (GtkAction *action, LogviewWindow *logview)
 {
-	GtkTreeSelection *selection;
-
-    g_assert (LOGVIEW_IS_WINDOW (logview));
+  g_assert (LOGVIEW_IS_WINDOW (logview));
 
-	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (logview->view));
-	gtk_tree_selection_select_all (selection);
+  gtk_tree_view_collapse_all (GTK_TREE_VIEW (logview->priv->view));
 }
 
 static void
-logview_menu_item_toggle_set_active (LogviewWindow *logview, char *path, gboolean state)
+logview_search (GtkAction *action, LogviewWindow *logview)
 {
-    GtkToggleAction *action;
-    
-    g_assert (path);
+  g_assert (LOGVIEW_IS_WINDOW (logview));
     
-    action = GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (logview->ui_manager, path));
-    gtk_toggle_action_set_active (action, state);
+  gtk_widget_show_all (logview->priv->find_bar);
+  logview_findbar_grab_focus (LOGVIEW_FINDBAR (logview->priv->find_bar));
 }
 
-static void
-logview_menu_item_set_state (LogviewWindow *logview, char *path, gboolean state)
+void
+logview_about (GtkWidget *widget, GtkWidget *window)
 {
-	GtkAction *action;
+  g_return_if_fail (GTK_IS_WINDOW (window));
 
-	g_assert (path);
+  char *license_trans = g_strjoin ("\n\n", _(logview_about_license[0]),
+                                   _(logview_about_license[1]),
+                                   _(logview_about_license[2]), NULL);
+
+  gtk_show_about_dialog (GTK_WINDOW (window),
+                         "name",  _("System Log Viewer"),
+                         "version", VERSION,
+                         "copyright", "Copyright \xc2\xa9 1998-2008 Free Software Foundation, Inc.",
+                         "license", license_trans,
+                         "wrap-license", TRUE,
+                         "comments", _("A system log viewer for GNOME."),
+                         "authors", logview_about_authors,
+                         "documenters", logview_about_documenters,
+                         "translator_credits", strcmp (logview_about_translator_credits,
+                                                       "translator-credits") != 0 ?
+                                               logview_about_translator_credits : NULL,
+                         "logo_icon_name", "logviewer",
+                         NULL);
+  g_free (license_trans);
 
-	action = gtk_ui_manager_get_action (logview->ui_manager, path);
-	gtk_action_set_sensitive (action, state);
+  return;
 }
 
 static void
-logview_calendar_set_state (LogviewWindow *logview)
+logview_toggle_statusbar (GtkAction *action, LogviewWindow *logview)
 {
-    g_assert (LOGVIEW_IS_WINDOW (logview));
+  g_assert (LOGVIEW_IS_WINDOW (logview));
 
-    if (logview->curlog) {
-        if (logview->curlog->days != NULL)
-            calendar_init_data (CALENDAR (logview->calendar), logview);
-        gtk_widget_set_sensitive (logview->calendar, (logview->curlog->days != NULL));
-    } else
-        gtk_widget_set_sensitive (logview->calendar, FALSE);
+  if (GTK_WIDGET_VISIBLE (logview->priv->statusbar))
+    gtk_widget_hide (logview->priv->statusbar);
+  else
+    gtk_widget_show (logview->priv->statusbar);
 }
 
-/* actions callbacks */
-
 static void
-open_file_selected_cb (GtkWidget *chooser, gint response, LogviewWindow *logview)
+logview_toggle_sidebar (GtkAction *action, LogviewWindow *logview)
 {
-  char *f;
-  LogviewLog *log;
-
   g_assert (LOGVIEW_IS_WINDOW (logview));
 
-  gtk_widget_hide (GTK_WIDGET (chooser));
-  if (response != GTK_RESPONSE_OK) {
-	  return;
-  }
-
-  f = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
-
-  log = logview_manager_get_if_loaded (logview->priv->manager, f);
-
-  if (log) {
-    logview_manager_set_active_log (log);
-    g_object_unref (log);
-    goto out;
-  }
-
-  logview_manager_add_log_from_name (logview->priv->manager, f);
-
-out:
-  g_free (f);
+  if (GTK_WIDGET_VISIBLE (logview->priv->sidebar))
+    gtk_widget_hide (logview->priv->sidebar);
+  else
+    gtk_widget_show (logview->priv->sidebar);
 }
 
-static void
-logview_open_log (GtkAction *action, LogviewWindow *logview)
+static void 
+logview_toggle_calendar (GtkAction *action, LogviewWindow *logview)
 {
-  static GtkWidget *chooser = NULL;
-  char *active;
+  g_assert (LOGVIEW_IS_WINDOW (logview));
 
-  if (chooser == NULL) {
-    chooser = gtk_file_chooser_dialog_new (_("Open Log"),
-                                           GTK_WINDOW (logview),
-                                           GTK_FILE_CHOOSER_ACTION_OPEN,
-                                           GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-                                           GTK_STOCK_OPEN, GTK_RESPONSE_OK,
-                                           NULL);
-    gtk_dialog_set_default_response (GTK_DIALOG (chooser), GTK_RESPONSE_OK);
-    gtk_window_set_modal (GTK_WINDOW (chooser), TRUE);
-    g_signal_connect (G_OBJECT (chooser), "response",
-                      G_CALLBACK (open_file_selected_cb), logview);
-    g_signal_connect (G_OBJECT (chooser), "destroy",
-                      G_CALLBACK (gtk_widget_destroyed), &chooser);
-    active = logview_prefs_get_active_logfile (logview->priv->prefs);
-    if (active != NULL) {
-      gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (chooser), active);
-      g_free (active);
+  if (GTK_WIDGET_VISIBLE (logview->priv->calendar))
+    gtk_widget_hide (logview->priv->calendar);
+  else {
+    gtk_widget_show (logview->priv->calendar);
+    if (!GTK_WIDGET_VISIBLE (logview->priv->sidebar)) {
+      GtkAction *action = gtk_ui_manager_get_action (logview->priv->ui_manager,
+                                                     "/LogviewMenu/ViewMenu/ShowSidebar");
+      gtk_action_activate (action);
     }
   }
-
-  gtk_window_present (GTK_WINDOW (chooser));
 }
 
-static void
-logview_help (GtkAction *action, GtkWidget *parent_window)
-{
-  GError *error = NULL;
+/* GObject functions */
 
-  gtk_show_uri (gtk_widget_get_screen (parent_window),
-                "ghelp:gnome-system-log", gtk_get_current_event_time (),
-                &error);
+/* Menus */
 
-  if (error) {
-    error_dialog_show (parent_window, _("There was an error displaying help."), error->message);
-    g_error_free (error);
-  }
-}
+static GtkActionEntry entries[] = {
+    { "FileMenu", NULL, N_("_File"), NULL, NULL, NULL },
+    { "EditMenu", NULL, N_("_Edit"), NULL, NULL, NULL },
+    { "ViewMenu", NULL, N_("_View"), NULL, NULL, NULL },
+    { "HelpMenu", NULL, N_("_Help"), NULL, NULL, NULL },
+
+    { "OpenLog", GTK_STOCK_OPEN, N_("_Open..."), "<control>O", N_("Open a log from file"), 
+      G_CALLBACK (logview_open_log) },
+    { "CloseLog", GTK_STOCK_CLOSE, N_("_Close"), "<control>W", N_("Close this log"), 
+      G_CALLBACK (logview_close_log) },
+    { "Quit", GTK_STOCK_QUIT, N_("_Quit"), "<control>Q", N_("Quit the log viewer"), 
+      G_CALLBACK (gtk_main_quit) },
+
+    { "Copy", GTK_STOCK_COPY, N_("_Copy"), "<control>C", N_("Copy the selection"),
+      G_CALLBACK (logview_copy) },
+    { "SelectAll", NULL, N_("Select _All"), "<Control>A", N_("Select the entire log"),
+      G_CALLBACK (logview_select_all) },
+    { "Search", GTK_STOCK_FIND, N_("_Filter..."), "<control>F", N_("Filter log"),
+      G_CALLBACK (logview_search) },
+
+    {"ViewZoomIn", GTK_STOCK_ZOOM_IN, NULL, "<control>plus", N_("Bigger text size"),
+      G_CALLBACK (logview_bigger_text)},
+    {"ViewZoomOut", GTK_STOCK_ZOOM_OUT, NULL, "<control>minus", N_("Smaller text size"),
+      G_CALLBACK (logview_smaller_text)},
+    {"ViewZoom100", GTK_STOCK_ZOOM_100, NULL, "<control>0", N_("Normal text size"),
+      G_CALLBACK (logview_normal_text)},
+
+    {"CollapseAll", NULL, N_("Collapse _All"), NULL, N_("Collapse all the rows"),
+      G_CALLBACK (logview_collapse_rows) },
+
+    { "HelpContents", GTK_STOCK_HELP, N_("_Contents"), "F1", N_("Open the help contents for the log viewer"), 
+      G_CALLBACK (logview_help) },
+    { "AboutAction", GTK_STOCK_ABOUT, N_("_About"), NULL, N_("Show the about dialog for the log viewer"), 
+      G_CALLBACK (logview_about) },
+
+};
+
+static GtkToggleActionEntry toggle_entries[] = {
+    { "ShowStatusBar", NULL, N_("_Statusbar"), NULL, N_("Show Status Bar"),
+      G_CALLBACK (logview_toggle_statusbar), TRUE },
+    { "ShowSidebar", NULL, N_("Side _Pane"), "F9", N_("Show Side Pane"), 
+      G_CALLBACK (logview_toggle_sidebar), TRUE },  
+    {"ShowCalendar", NULL,  N_("Ca_lendar"), "<control>L", N_("Show Calendar Log"), 
+      G_CALLBACK (logview_toggle_calendar), TRUE },
+};
 
 static gboolean 
 window_size_changed_cb (GtkWidget *widget, GdkEventConfigure *event, 
@@ -937,4 +866,29 @@
   }
 
   return window;
+}
+
+void
+logview_window_menus_set_state (LogviewWindow *logview)
+{
+  LogviewLog *log;
+  gboolean calendar_active = FALSE;
+  GtkWidget *widget;
+
+  g_assert (LOGVIEW_IS_WINDOW (logview));
+
+  log = logview_manager_get_current_log (logview->priv->manager);
+
+  if (log) {
+    calendar_active = (log->days != NULL);
+  }
+
+  logview_menu_item_set_state (logview, "/LogviewMenu/ViewMenu/ShowCalendar", calendar_active);
+  logview_menu_item_set_state (logview, "/LogviewMenu/FileMenu/CloseLog", (log != NULL));
+  logview_menu_item_set_state (logview, "/LogviewMenu/ViewMenu/CollapseAll", calendar_active);
+  logview_menu_item_set_state (logview, "/LogviewMenu/ViewMenu/Search", (log != NULL));
+  logview_menu_item_set_state (logview, "/LogviewMenu/EditMenu/Copy", (log != NULL));
+  logview_menu_item_set_state (logview, "/LogviewMenu/EditMenu/SelectAll", (log != NULL));
+
+  g_object_unref (log);
 }
\ No newline at end of file



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]