1 /* -*- mode: C; c-file-style: "gnu" -*- */
2 /* dbus-viewer.c Graphical D-BUS frontend utility
4 * Copyright (C) 2003 Red Hat, Inc.
6 * Licensed under the Academic Free License version 1.2
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 #include "dbus-tree-view.h"
30 #include <glib/dbus-gparser.h>
31 #include <glib/dbus-gutils.h>
34 #define _(x) dgettext (GETTEXT_PACKAGE, x)
45 service_data_new (const char *name)
49 sd = g_new0 (ServiceData, 1);
52 sd->name = g_strdup (name);
58 service_data_ref (ServiceData *sd)
64 service_data_unref (ServiceData *sd)
67 if (sd->refcount == 0)
78 GtkWidget *service_menu;
85 window_closed_callback (GtkWidget *window,
88 g_assert (window == w->window);
94 tree_window_new (void)
101 /* Should use glade, blah */
103 w = g_new0 (TreeWindow, 1);
104 w->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
106 gtk_window_set_title (GTK_WINDOW (w->window), "D-BUS Viewer");
107 gtk_window_set_default_size (GTK_WINDOW (w->window), 400, 500);
109 g_signal_connect (w->window, "destroy", G_CALLBACK (window_closed_callback),
111 gtk_container_set_border_width (GTK_CONTAINER (w->window), 6);
113 vbox = gtk_vbox_new (FALSE, 6);
114 gtk_container_add (GTK_CONTAINER (w->window), vbox);
116 hbox = gtk_hbox_new (FALSE, 6);
117 gtk_container_add (GTK_CONTAINER (vbox), hbox);
119 /* Create tree view */
121 sw = gtk_scrolled_window_new (NULL, NULL);
122 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
123 GTK_POLICY_AUTOMATIC,
124 GTK_POLICY_AUTOMATIC);
126 gtk_box_pack_start (GTK_BOX (hbox), sw, TRUE, TRUE, 0);
128 w->treeview = dbus_tree_view_new ();
130 gtk_container_add (GTK_CONTAINER (sw), w->treeview);
132 /* Create services option menu */
136 /* Show everything */
137 gtk_widget_show_all (w->window);
143 show_error_dialog (GtkWindow *transient_parent,
144 GtkWidget **weak_ptr,
145 const char *message_format,
153 va_start (args, message_format);
154 message = g_strdup_vprintf (message_format, args);
160 if (weak_ptr == NULL || *weak_ptr == NULL)
163 dialog = gtk_message_dialog_new (transient_parent,
164 GTK_DIALOG_DESTROY_WITH_PARENT,
169 g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (gtk_widget_destroy), NULL);
171 if (weak_ptr != NULL)
174 g_object_add_weak_pointer (G_OBJECT (dialog), (void**)weak_ptr);
177 gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
179 gtk_widget_show_all (dialog);
183 g_return_if_fail (GTK_IS_MESSAGE_DIALOG (*weak_ptr));
185 gtk_label_set_text (GTK_LABEL (GTK_MESSAGE_DIALOG (*weak_ptr)->label), message);
187 gtk_window_present (GTK_WINDOW (*weak_ptr));
194 fprintf (stderr, "dbus-viewer [--version] [--help]\n");
201 printf ("D-BUS Message Bus Viewer %s\n"
202 "Copyright (C) 2003 Red Hat, Inc.\n"
203 "This is free software; see the source for copying conditions.\n"
204 "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
210 main (int argc, char **argv)
212 const char *prev_arg;
215 gboolean end_of_args;
218 bindtextdomain (GETTEXT_PACKAGE, DBUS_LOCALEDIR);
219 bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
220 textdomain (GETTEXT_PACKAGE);
222 gtk_init (&argc, &argv);
230 const char *arg = argv[i];
234 if (strcmp (arg, "--help") == 0 ||
235 strcmp (arg, "-h") == 0 ||
236 strcmp (arg, "-?") == 0)
238 else if (strcmp (arg, "--version") == 0)
240 else if (arg[0] == '-' &&
244 else if (arg[0] == '-')
250 files = g_slist_prepend (files, (char*) arg);
254 files = g_slist_prepend (files, (char*) arg);
261 files = g_slist_reverse (files);
268 const char *filename;
270 filename = tmp->data;
273 node = description_load_from_file (filename,
277 g_assert (error != NULL);
278 show_error_dialog (NULL, NULL,
279 _("Unable to load \"%s\": %s\n"),
280 filename, error->message);
281 g_error_free (error);
289 name = node_info_get_name (node);
293 g_printerr (_("Assuming root node of \"%s\" is at path /, since no absolute path is specified"), filename);
297 path = _dbus_gutils_split_path (name);
299 w = tree_window_new ();
300 dbus_tree_view_update (GTK_TREE_VIEW (w->treeview),
303 node_info_unref (node);