source: trunk/third/gnome-utils/logview/zoom.c @ 18641

Revision 18641, 8.6 KB checked in by ghudson, 21 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18640, which included commits to RCS files with non-trunk default branches.
Line 
1/*  ----------------------------------------------------------------------
2
3    Copyright (C) 1998  Cesar Miquel  (miquel@df.uba.ar)
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 2 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software
17    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
19    ---------------------------------------------------------------------- */
20
21
22#include <config.h>
23#include <gnome.h>
24#include <unistd.h>
25#include <time.h>
26#include <sys/stat.h>
27#include "logview.h"
28#include "gnome.h"
29
30/*
31 *  --------------------------
32 *  Local and global variables
33 *  --------------------------
34 */
35
36int zoom_visible;
37GtkWidget *zoom_dialog;
38static GtkWidget *scrolled_window = NULL;
39
40extern Log *curlog;
41extern char *month[12];
42extern GList *regexp_db, *descript_db;
43extern GnomeUIInfo view_menu[];
44
45void close_zoom_view (GtkWidget *widget, gpointer data);
46void quit_zoom_view (GtkWidget *widget, gpointer data);
47void create_zoom_view (void);
48int match_line_in_db (LogLine *line, GList *db);
49
50/* ----------------------------------------------------------------------
51   NAME:          create_zoom_view
52   DESCRIPTION:   Display the statistics of the log.
53   ---------------------------------------------------------------------- */
54
55void
56create_zoom_view (void)
57{
58
59   if (curlog == NULL || zoom_visible)
60      return;
61
62   if (zoom_dialog == NULL) {
63        zoom_dialog  = gtk_dialog_new_with_buttons (_("Zoom view"),
64                                                    GTK_WINDOW_TOPLEVEL,
65                                                    GTK_DIALOG_DESTROY_WITH_PARENT,
66                                                    GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
67                                                    NULL);
68        /* FIXME: no need to pass zoom_dialog - its global !! */
69        g_signal_connect (G_OBJECT (zoom_dialog), "response",
70                          G_CALLBACK (close_zoom_view),
71                          &zoom_dialog);
72        g_signal_connect (G_OBJECT (zoom_dialog), "destroy",
73                          G_CALLBACK (quit_zoom_view),
74                          &zoom_dialog);
75        g_signal_connect (G_OBJECT (zoom_dialog), "delete_event",
76                          G_CALLBACK (gtk_true),
77                          NULL);
78       
79    gtk_window_set_default_size (GTK_WINDOW (zoom_dialog), 500, 175);
80    gtk_dialog_set_default_response (GTK_DIALOG (zoom_dialog), GTK_RESPONSE_CLOSE);
81        gtk_container_set_border_width (GTK_CONTAINER (zoom_dialog), 0);
82
83    repaint_zoom ();
84   }
85   gtk_widget_show (zoom_dialog);
86
87   zoom_visible = TRUE;
88}
89
90/* ----------------------------------------------------------------------
91   NAME:          repaint_zoom
92   DESCRIPTION:   Repaint the zoom window.
93   ---------------------------------------------------------------------- */
94
95int
96repaint_zoom (void)
97{
98   static GtkWidget *zoom_tree;
99   static GtkCellRenderer *renderer;
100   static GtkTreeViewColumn *column1, *column2;
101   static GtkListStore *store;
102   const gchar *titles[] = { N_("Date:"), N_("Process:"),
103                N_("Message:"), N_("Description:"), NULL };
104   GtkTreeIter iter;
105   LogLine *line;
106   struct tm date = {0};
107   char buffer[1024];
108   char *utf8;
109   gint i;
110
111   if (scrolled_window == NULL) {
112
113       scrolled_window = gtk_scrolled_window_new (NULL, NULL);
114       gtk_widget_set_sensitive (scrolled_window, TRUE);
115       gtk_container_set_border_width (GTK_CONTAINER (scrolled_window),
116                                       GNOME_PAD_SMALL);
117       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
118                                       GTK_POLICY_AUTOMATIC,
119                                       GTK_POLICY_AUTOMATIC);
120       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (zoom_dialog)->vbox),
121                           scrolled_window, TRUE, TRUE, 0);
122
123       store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
124       zoom_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
125       gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (zoom_tree), TRUE);
126
127       gtk_container_add (GTK_CONTAINER (scrolled_window), zoom_tree);
128
129       /* Create Columns */
130       renderer = gtk_cell_renderer_text_new ();
131       column1 = gtk_tree_view_column_new_with_attributes (_("Log line detail for"),
132                    renderer, "text", 0, NULL);
133       gtk_tree_view_column_set_sizing (column1, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
134       gtk_tree_view_column_set_resizable (column1, TRUE);
135       gtk_tree_view_append_column (GTK_TREE_VIEW (zoom_tree), column1);
136       gtk_tree_view_column_set_spacing (column1, GNOME_PAD_BIG);
137 
138       renderer = gtk_cell_renderer_text_new ();
139       column2 = gtk_tree_view_column_new_with_attributes ("", renderer,
140                    "text", 1, NULL);
141       gtk_tree_view_column_set_sizing (column2, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
142       gtk_tree_view_column_set_resizable (column2, TRUE);
143       gtk_tree_view_append_column (GTK_TREE_VIEW (zoom_tree), column2);
144       gtk_tree_view_column_set_spacing (column2, GNOME_PAD_BIG);
145
146       /* Add entries to the list */
147       for (i = 0; titles[i]; ++i) {
148           gtk_list_store_append (GTK_LIST_STORE (store), &iter);
149           gtk_list_store_set (GTK_LIST_STORE (store), &iter, 0, titles[i], -1);
150       }
151
152   }
153
154   if (curlog != NULL)
155       g_snprintf (buffer, sizeof (buffer), "%s", curlog->name);
156   else
157       g_snprintf (buffer, sizeof (buffer), _("<No log loaded>"));
158   gtk_tree_view_column_set_title (column2, buffer);
159
160   gtk_widget_show_all (scrolled_window);
161
162   /* Check that there is at least one log */
163   if (curlog == NULL) {
164       gtk_list_store_clear (GTK_LIST_STORE (store));
165       /* Add entries to the list */
166       for (i = 0; titles[i]; ++i) {
167           gtk_list_store_append (GTK_LIST_STORE (store), &iter);
168           gtk_list_store_set (GTK_LIST_STORE (store), &iter, 0, titles[i], -1);
169       }
170       return -1;
171   }
172 
173   if (gtk_tree_model_get_iter_root (GTK_TREE_MODEL (store), &iter)) {
174       line = (curlog->lines)[curlog->current_line_no];
175
176       date.tm_mon = line->month;
177       date.tm_year = 70 /* bogus */;
178       date.tm_mday = line->date;
179       date.tm_hour = line->hour;
180       date.tm_min = line->min;
181       date.tm_sec = line->sec;
182       date.tm_isdst = 0;
183
184       /* Translators: do not include year, it would be bogus */
185       if (strftime (buffer, sizeof (buffer), _("%B %e %X"), &date) <= 0) {
186           /* as a backup print in US style */
187           utf8 = g_strdup_printf ("%s %d %02d:%02d:%02d",
188                       _(month[(int)line->month]),
189                       (int) line->date,
190                       (int) line->hour,
191                       (int) line->min,
192                       (int) line->sec);
193       } else {
194           utf8 = LocaleToUTF8 (buffer);
195       }
196
197       gtk_list_store_set (GTK_LIST_STORE (store), &iter, 1, utf8, -1);
198       g_free (utf8);
199
200       gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter);
201       utf8 = LocaleToUTF8 (line->process);
202       gtk_list_store_set (GTK_LIST_STORE (store), &iter, 1, utf8, -1);
203       g_free (utf8);
204
205       gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter);
206       utf8 = LocaleToUTF8 (line->message);
207       gtk_list_store_set (GTK_LIST_STORE (store), &iter, 1, utf8, -1);
208       g_free (utf8);
209
210       gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter);
211       if (match_line_in_db (line, regexp_db))
212           if (find_tag_in_db (line, descript_db)) {
213               utf8 = LocaleToUTF8 (line->description->description);
214               gtk_list_store_set (GTK_LIST_STORE (store), &iter, 1, utf8, -1);
215               g_free (utf8);
216       }
217               
218   }
219
220   return TRUE;
221
222}
223
224/* ----------------------------------------------------------------------
225   NAME:          CloseLogInfo
226   DESCRIPTION:   Callback called when the log info window is closed.
227   ---------------------------------------------------------------------- */
228
229void
230close_zoom_view (GtkWidget *widget, gpointer data)
231{
232   if (zoom_visible) {
233      gtk_widget_hide (GTK_WIDGET (zoom_dialog));
234      gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (view_menu[1].widget), FALSE);
235/*
236      if (G_IS_OBJECT (zoom_layout))
237         g_object_unref (G_OBJECT (zoom_layout)); */
238   }
239   zoom_dialog = NULL;
240   scrolled_window = NULL;
241   zoom_visible = FALSE;
242}
243
244void
245quit_zoom_view (GtkWidget *widget, gpointer data) {
246 
247        zoom_dialog = NULL;
248        scrolled_window = NULL;
249}
Note: See TracBrowser for help on using the repository browser.