gnome-utils r8244 - trunk/logview
- From: cosimoc svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-utils r8244 - trunk/logview
- Date: Tue, 23 Dec 2008 13:25:58 +0000 (UTC)
Author: cosimoc
Date: Tue Dec 23 13:25:58 2008
New Revision: 8244
URL: http://svn.gnome.org/viewvc/gnome-utils?rev=8244&view=rev
Log:
Refactor the LogviewLoglist to the new structure. Some methods are still
to be implemented, waiting for some UI testing before doing that.
Modified:
trunk/logview/loglist.c
trunk/logview/loglist.h
Modified: trunk/logview/loglist.c
==============================================================================
--- trunk/logview/loglist.c (original)
+++ trunk/logview/loglist.c Tue Dec 23 13:25:58 2008
@@ -1,6 +1,6 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/*
* Copyright (C) 2005 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
@@ -18,301 +18,229 @@
*/
#include <gtk/gtk.h>
-#include <libgnomevfs/gnome-vfs.h>
-#include "logview.h"
-#include "misc.h"
-#include "loglist.h"
+#include "logview-manager.h"
+#include "logview-log.h"
-struct LogListPriv {
- GtkTreeStore *model;
+#include "logview-loglist.h"
+
+struct _LogviewLoglistPrivate {
+ GtkTreeStore *model;
+ LogviewManager *manager;
};
+G_DEFINE_TYPE (LogviewLoglist, logview_loglist, GTK_TYPE_TREE_VIEW);
+
+#define GET_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LOG_LIST_TYPE, LogListPriv))
+
enum {
- LOG_NAME = 0,
- LOG_POINTER,
+ LOG_OBJECT = 0,
+ LOG_NAME,
LOG_WEIGHT,
LOG_WEIGHT_SET
};
-G_DEFINE_TYPE (LogList, loglist, GTK_TYPE_TREE_VIEW);
-#define LOG_LIST_GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), LOG_LIST_TYPE, LogListPriv))
-
-
-static GtkTreePath *
-loglist_find_directory (LogList *list, gchar *dir)
+static GtkTreeIter *
+logview_loglist_find_log (LogviewLoglist *list, LogviewLog *log)
{
- GtkTreeIter iter;
- GtkTreeModel *model;
- GtkTreePath *path = NULL;
- gchar *iterdir;
-
- g_assert (LOG_IS_LIST (list));
-
- model = GTK_TREE_MODEL (list->priv->model);
- if (!gtk_tree_model_get_iter_first (model, &iter))
- return NULL;
-
- do {
- gtk_tree_model_get (model, &iter, LOG_NAME, &iterdir, -1);
- if (iterdir) {
- if (g_ascii_strncasecmp (iterdir, dir, -1) == 0) {
- path = gtk_tree_model_get_path (model, &iter);
- break;
- }
- }
- } while (gtk_tree_model_iter_next (model, &iter));
- return path;
-}
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ GtkTreeIter *retval = NULL;
+ LogviewLog *current;
+ model = GTK_TREE_MODEL (list->priv->model);
-/* The returned GtkTreePath needs to be freed */
+ if (!gtk_tree_model_get_iter_first (model, &iter)) {
+ return NULL;
+ }
-static GtkTreePath *
-loglist_find_log (LogList *list, Log *log)
-{
- GtkTreeIter iter, child_iter;
- GtkTreeModel *model;
- GtkTreePath *path = NULL;
- Log *iterlog;
-
- g_assert (LOG_IS_LIST (list));
- g_assert (log != NULL);
-
- model = GTK_TREE_MODEL (list->priv->model);
- if (!gtk_tree_model_get_iter_first (model, &iter))
- return NULL;
-
- do {
- gtk_tree_model_iter_children (model, &child_iter, &iter);
- do {
- gtk_tree_model_get (model, &child_iter, LOG_POINTER, &iterlog, -1);
- if (iterlog == log) {
- path = gtk_tree_model_get_path (model, &child_iter);
- return path;
- }
- } while (gtk_tree_model_iter_next (model, &child_iter));
- } while (gtk_tree_model_iter_next (model, &iter));
+ do {
+ gtk_tree_model_get (model, &iter, LOG_OBJECT, ¤t, -1);
+ if (current == log) {
+ retval = gtk_tree_iter_copy (&iter);
+ }
+ g_object_unref (current);
+ } while (gtk_tree_model_iter_next (model, &iter) && retval == NULL);
- return NULL;
+ return retval;
}
static void
-loglist_get_log_iter (LogList *list, Log *log, GtkTreeIter *logiter)
-{
- GtkTreeModel *model;
- GtkTreePath *path = NULL;
-
- path = loglist_find_log (list, log);
- if (path) {
- model = GTK_TREE_MODEL (list->priv->model);
- gtk_tree_model_get_iter (model, logiter, path);
- gtk_tree_path_free (path);
- }
-}
-
-void
-loglist_unbold_log (LogList *list, Log *log)
+log_changed_cb (LogviewLog *log,
+ gpointer user_data)
{
- GtkTreeModel *model;
- GtkTreeIter iter;
+ LogviewLoglist *list = user_data;
+ LogviewLog *active;
+ GtkTreeIter *iter;
+
+ active = logview_manager_get_active_log (list->priv->manager);
+
+ if (log == active) {
+ g_object_unref (active);
+ return;
+ }
- g_return_if_fail (LOG_IS_LIST (list));
- g_return_if_fail (log != NULL);
+ iter = logview_list_find_log (list, log);
- model = GTK_TREE_MODEL (list->priv->model);
+ if (!iter) {
+ return;
+ }
- loglist_get_log_iter (list, log, &iter);
- gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
- LOG_WEIGHT_SET, FALSE, -1);
+ /* make the log bold in the list */
+ gtk_tree_store_set (list->priv->model, iter,
+ LOG_WEIGHT, PANGO_WEIGHT_BOLD,
+ LOG_WEIGHT_SET, TRUE, -1);
}
-void
-loglist_bold_log (LogList *list, Log *log)
+static void
+manager_active_changed_cb (LogviewManager *manager,
+ LogviewLog *log,
+ gpointer user_data)
{
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- g_return_if_fail (LOG_IS_LIST (list));
- g_return_if_fail (log != NULL);
-
- model = GTK_TREE_MODEL (list->priv->model);
-
- loglist_get_log_iter (list, log, &iter);
- gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
- LOG_WEIGHT, PANGO_WEIGHT_BOLD,
- LOG_WEIGHT_SET, TRUE, -1);
-
- /* if the log is currently shown, put up a timer to unbold it */
- if (logview_get_active_log (log->window) == log)
- g_timeout_add (5000, log_unbold, log);
+ /* TODO: implement */
}
-void
-loglist_select_log (LogList *list, Log *log)
-{
- GtkTreePath *path;
-
- g_return_if_fail (LOG_IS_LIST (list));
- g_return_if_fail (log);
-
- path = loglist_find_log (list, log);
- if (path) {
- GtkTreeSelection *selection;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
- gtk_tree_view_expand_to_path (GTK_TREE_VIEW (list), path);
- gtk_tree_selection_select_path (selection, path);
- gtk_tree_path_free (path);
- }
-}
+static void
+manager_log_closed_cb (LogviewManager *manager,
+ LogviewLog *log,
+ gpointer user_data)
+{
+ LogviewLoglist *list = user_data;
+ GtkTreeIter *iter;
+ gboolean res;
-void
-loglist_remove_log (LogList *list, Log *log)
-{
- GtkTreeIter iter, parent;
+ iter = logview_list_find_log (list, log);
- g_return_if_fail (LOG_IS_LIST (list));
- g_return_if_fail (log != NULL);
+ if (!iter) {
+ return;
+ }
- loglist_get_log_iter (list, log, &iter);
- gtk_tree_model_iter_parent (GTK_TREE_MODEL (list->priv->model), &parent, &iter);
+ g_signal_handlers_disconnect_by_func (log, log_changed_cb, list);
- if (gtk_tree_store_remove (list->priv->model, &iter)) {
- GtkTreeSelection *selection;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
- gtk_tree_selection_select_iter (selection, &iter);
- } else {
- if (!gtk_tree_model_iter_has_child (GTK_TREE_MODEL (list->priv->model), &parent)) {
- if (gtk_tree_store_remove (list->priv->model, &parent)) {
- GtkTreeSelection *selection;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
- gtk_tree_selection_select_iter (selection, &parent);
- }
- }
- }
-}
+ res = gtk_tree_store_remove (list->priv->model, iter);
+ if (res) {
+ GtkTreeSelection *selection;
-void
-loglist_add_directory (LogList *list, gchar *dirname, GtkTreeIter *iter)
-{
- gtk_tree_store_append (list->priv->model, iter, NULL);
- gtk_tree_store_set (list->priv->model, iter,
- LOG_NAME, dirname, LOG_POINTER, NULL, -1);
+ /* iter now points to the next valid row */
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
+ gtk_tree_selection_select_iter (selection, iter);
+ } else {
+ /* FIXME: what shall we do here? */
+ }
+
+ gtk_tree_iter_free (iter);
}
-void
-loglist_add_log (LogList *list, Log *log)
+static void
+manager_log_added_cb (LogviewManager *manager,
+ LogviewLog *log,
+ gpointer user_data)
{
- GtkTreeIter iter, child_iter;
- GtkTreePath *path;
- gchar *filename, *dirname;
-
- g_return_if_fail (LOG_IS_LIST (list));
- g_return_if_fail (log != NULL);
-
- dirname = log_extract_dirname (log);
- path = loglist_find_directory (list, dirname);
- if (path) {
- gtk_tree_model_get_iter (GTK_TREE_MODEL (list->priv->model), &iter, path);
- gtk_tree_path_free (path);
- } else
- loglist_add_directory (list, dirname, &iter);
-
- filename = log_extract_filename (log);
- gtk_tree_store_append (list->priv->model, &child_iter, &iter);
- gtk_tree_store_set (list->priv->model, &child_iter,
- LOG_NAME, filename, LOG_POINTER, log, -1);
+ LogviewLoglist *list = user_data;
+ GtkTreeIter iter;
- if (GTK_WIDGET_VISIBLE (GTK_WIDGET (list)))
- loglist_select_log (list, log);
+ gtk_tree_store_append (list->priv->model, &iter, NULL);
+ gtk_tree_store_set (list->priv->model, &iter,
+ LOG_OBJECT, log,
+ LOG_NAME, logview_log_get_display_name (log), -1);
- g_free (dirname);
- g_free (filename);
+ g_signal_connect (log, "log-changed",
+ G_CALLBACK (log_changed_cb), list);
}
static void
-loglist_selection_changed (GtkTreeSelection *selection, LogviewWindow *logview)
+tree_selection_changed_cb (GtkTreeSelection *selection,
+ gpointer user_data)
{
+ LogviewLoglist *list = user_data;
GtkTreeModel *model;
GtkTreeIter iter;
- gboolean bold;
- gchar *name;
- Log *log;
-
- g_assert (LOGVIEW_IS_WINDOW (logview));
- g_assert (GTK_IS_TREE_SELECTION (selection));
+ LogviewLog *log;
+ gboolean is_bold;
if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
- logview_select_log (logview, NULL);
return;
}
- gtk_tree_model_get (model, &iter,
- LOG_NAME, &name,
- LOG_POINTER, &log,
- LOG_WEIGHT_SET, &bold, -1);
- logview_select_log (logview, log);
- if (bold)
- g_timeout_add (5000, log_unbold, log);
+ gtk_tree_model_get (model, &iter, LOG_OBJECT, &log,
+ LOG_WEIGHT_SET, &is_bold);
+ logview_manager_set_active_log (list->priv->manager, log);
+
+ if (is_bold) {
+ gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
+ LOG_WEIGHT_SET, FALSE, -1);
+ }
+
+ g_object_unref (log);
}
-void
-loglist_connect (LogList *list, LogviewWindow *logview)
+static void
+do_finalize (GObject *obj)
{
- GtkTreeSelection *selection;
+ LogviewLoglist *list = LOGVIEW_LOGLIST (obj);
- g_return_if_fail (LOG_IS_LIST (list));
- g_return_if_fail (LOGVIEW_IS_WINDOW (logview));
+ g_object_unref (list->priv->model);
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
- g_signal_connect (G_OBJECT (selection), "changed",
- G_CALLBACK (loglist_selection_changed), logview);
+ G_OBJECT_CLASS (logview_loglist_parent_class)->finalize (obj);
}
static void
-loglist_init (LogList *list)
+logview_loglist_init (LogviewLoglist *list)
{
- GtkTreeStore *model;
- GtkTreeViewColumn *column;
- GtkTreeSelection *selection;
- GtkCellRenderer *cell;
-
- list->priv = LOG_LIST_GET_PRIVATE (list);
-
- model = gtk_tree_store_new (4, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_INT, G_TYPE_BOOLEAN);
- gtk_tree_view_set_model (GTK_TREE_VIEW (list), GTK_TREE_MODEL (model));
- list->priv->model = model;
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (list), FALSE);
- g_object_unref (G_OBJECT (model));
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
-
- cell = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_pack_start (column, cell, TRUE);
- gtk_tree_view_column_set_attributes (column, cell,
- "text", LOG_NAME,
- "weight-set", LOG_WEIGHT_SET,
- "weight", LOG_WEIGHT,
- NULL);
-
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(list->priv->model), 0, GTK_SORT_ASCENDING);
- gtk_tree_view_append_column (GTK_TREE_VIEW (list), column);
- gtk_tree_view_set_search_column (GTK_TREE_VIEW (list), -1);
+ GtkTreeStore *model;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+ GtkCellRenderer *cell;
+
+ list->priv = GET_PRIVATE (list);
+
+ model = gtk_tree_store_new (4, LOGVIEW_TYPE_LOG, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (list), GTK_TREE_MODEL (model));
+ list->priv->model = model;
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (list), FALSE);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (tree_selection_changed_cb), list);
+
+ cell = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new ();
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_set_attributes (column, cell,
+ "text", LOG_NAME,
+ "weight-set", LOG_WEIGHT_SET,
+ "weight", LOG_WEIGHT,
+ NULL);
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (list->priv->model), 0, GTK_SORT_ASCENDING);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (list), column);
+ gtk_tree_view_set_search_column (GTK_TREE_VIEW (list), -1);
+
+ list->priv->manager = logview_manager_get ();
+
+ g_signal_connect (list->priv->manager, "log-added",
+ G_CALLBACK (manager_log_added_cb), list);
+ g_signal_connect (list->priv->manager, "log-closed",
+ G_CALLBACK (manager_log_closed_cb), list);
+ g_signal_connect (list->priv->manager, "active-changed",
+ G_CALLBACK (manager_active_changed_cb), list);
}
static void
-loglist_class_init (LogListClass *klass)
+logview_loglist_class_init (LogviewLoglistClass *klass)
{
- g_type_class_add_private (klass, sizeof (LogListPriv));
+ GObjectClass *oclass = G_OBJECT_CLASS (klass);
+ oclass->finalize = do_finalize;
+
+ g_type_class_add_private (klass, sizeof (LogviewLoglistPrivate));
}
GtkWidget *
loglist_new (void)
{
- GtkWidget *widget;
- widget = g_object_new (LOG_LIST_TYPE, NULL);
- return widget;
+ GtkWidget *widget;
+ widget = g_object_new (LOG_LIST_TYPE, NULL);
+ return widget;
}
Modified: trunk/logview/loglist.h
==============================================================================
--- trunk/logview/loglist.h (original)
+++ trunk/logview/loglist.h Tue Dec 23 13:25:58 2008
@@ -1,6 +1,6 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/*
* Copyright (C) 2005 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
@@ -17,33 +17,44 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#ifndef __LOG_LIST_H__
-#define __LOG_LIST_H__
+#ifndef __LOGVIEW_LOGLIST_H__
+#define __LOGVIEW_LOGLIST_H__
-#define LOG_LIST_TYPE (loglist_get_type ())
-#define LOG_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LOG_LIST_TYPE, LogList))
-#define LOG_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LOG_LIST_TYPE, LogListClass))
-#define LOG_IS_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LOG_LIST_TYPE))
-#define LOG_IS_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), LOG_LIST_TYPE))
-#define LOG_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LOG_LIST_TYPE, LogListClass))
+#define LOGVIEW_TYPE_LOGLIST logview_loglist_get_type()
+#define LOGVIEW_LOGLIST(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), LOGVIEW_TYPE_LOGLIST, LogviewLoglist))
+#define LOGVIEW_LOGLIST_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), LOGVIEW_TYPE_LOGLIST, LogviewLogListClass))
+#define LOGVIEW_IS_LOGLIST(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LOGVIEW_TYPE_LOGLIST))
+#define LOGVIEW_IS_LOGLIST_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), LOGVIEW_TYPE_LOGLIST))
+#define LOGVIEW_LOGLIST_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), LOGVIEW_TYPE_LOGLIST, LogviewLoglistClass))
#include <gtk/gtk.h>
-#include "logview.h"
-typedef struct LogListPriv LogListPriv;
-typedef struct LogList
+typedef struct _LogviewLoglist LogviewLoglist;
+typedef struct _LogviewLoglistClass LogviewLoglistClass;
+typedef struct _LogviewLoglistPrivate LogviewLogListPrivate;
+
+struct _LogviewLoglist
{
- GtkTreeView parent_instance;
- LogListPriv *priv;
-}LogList;
+ GtkTreeView parent_instance;
+ LogviewLoglistPrivate *priv;
+};
-typedef struct LogListClass
+struct _LogviewLoglistClass
{
GtkTreeViewClass parent_class;
-}LogListClass;
+};
+
+GType logview_loglist_get_type (void);
+
+/* public methods */
+GtkWidget * logview_loglist_new (void);
+
-GType loglist_get_type (void);
-GtkWidget *loglist_new (void);
void loglist_connect (LogList *list, LogviewWindow *window);
void loglist_add_log (LogList *list, Log *log);
void loglist_remove_log (LogList *list, Log *log);
@@ -51,4 +62,4 @@
void loglist_bold_log (LogList *list, Log *log);
void loglist_unbold_log (LogList *list, Log *log);
-#endif /* __LOG_LIST_H__ */
+#endif /* __LOGVIEW_LOGLIST_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]