Updated Spanish translation
[anjuta-git-plugin.git] / plugins / debug-manager / sharedlib.c
blob372a20ac16f77e8482fb10ff7217662d0b62ac93
1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3 sharedlibs.c
4 Copyright (C) 2000 Kh. Naba Kumar Singh
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 #ifdef HAVE_CONFIG_H
21 # include <config.h>
22 #endif
24 #include <sys/stat.h>
25 #include <unistd.h>
26 #include <string.h>
28 #include <gnome.h>
30 #include <libanjuta/resources.h>
32 #include "utilities.h"
33 #include "sharedlib.h"
35 static gint
36 on_sharedlibs_delete_event (GtkWidget* w, GdkEvent *event, gpointer data)
38 Sharedlibs* sl = data;
39 sharedlibs_hide(sl);
40 return TRUE;
43 static gboolean
44 on_sharedlibs_key_press_event (GtkWidget *widget, GdkEventKey *event,
45 gpointer data)
47 if (event->keyval == GDK_Escape)
49 Sharedlibs* sl = data;
50 sharedlibs_hide(sl);
51 return TRUE;
53 return FALSE;
57 static void
58 sharedlibs_update (const GList *lines, gpointer data)
60 Sharedlibs *sl;
61 gchar obj[512], from[32], to[32], read[32];
62 gchar *row[4];
63 gint count;
64 GList *list, *node;
66 sl = (Sharedlibs*)data;
68 list = gdb_util_remove_blank_lines(lines);
69 sharedlibs_clear(sl);
70 if(g_list_length(list) < 2 ){g_list_free(list); return;}
71 node = list->next;
72 while(node)
74 count = sscanf((char*)node->data, "%s %s %s %s", from,to,read,obj);
75 node = g_list_next(node);
76 if(count != 4) continue;
77 row[0]=(gchar*) g_path_get_basename (obj);
78 row[1]=from;
79 row[2]=to;
80 row[3]=read;
81 gtk_clist_append(GTK_CLIST(sl->widgets.clist), row);
83 g_list_free(list);
86 static void
87 on_sharedlibs_update_activate (GtkMenuItem *menuitem, gpointer user_data)
89 Sharedlibs *sl = (Sharedlibs *)user_data;
91 ianjuta_debugger_info_sharedlib (
92 sl->debugger,
93 (IAnjutaDebuggerCallback)sharedlibs_update,
94 sl,
95 NULL);
98 static void
99 sharedlibs_update_controls (Sharedlibs* ew)
101 gboolean R;
103 R = ianjuta_debugger_get_status (ew->debugger, NULL) == IANJUTA_DEBUGGER_OK;
105 gtk_widget_set_sensitive(ew->widgets.menu_update, R);
108 static gboolean
109 on_sharedlibs_event (GtkWidget *widget, GdkEvent *event, gpointer user_data)
111 GdkEventButton *bevent;
112 Sharedlibs *ew = (Sharedlibs*)user_data;
114 if (event->type != GDK_BUTTON_PRESS)
115 return FALSE;
116 if (((GdkEventButton *)event)->button != 3)
117 return FALSE;
118 bevent = (GdkEventButton *)event;
119 bevent->button = 1;
120 sharedlibs_update_controls(ew);
121 gtk_menu_popup (GTK_MENU(ew->widgets.menu), NULL,
122 NULL, NULL, NULL,
123 bevent->button, bevent->time);
124 return TRUE;
127 static GnomeUIInfo sharedlibs_menu_uiinfo[] =
130 GNOME_APP_UI_ITEM, N_("Update"),
131 NULL,
132 on_sharedlibs_update_activate, NULL, NULL,
133 GNOME_APP_PIXMAP_NONE, NULL,
134 0, 0, NULL
136 GNOMEUIINFO_END
139 static GtkWidget*
140 create_sharedlibs_menu (Sharedlibs *sl)
142 GtkWidget *sharedlibs_menu;
144 sharedlibs_menu = gtk_menu_new ();
145 sharedlibs_menu_uiinfo[0].user_data = sl;
146 gnome_app_fill_menu (GTK_MENU_SHELL (sharedlibs_menu), sharedlibs_menu_uiinfo,
147 NULL, FALSE, 0);
148 return sharedlibs_menu;
151 static void
152 create_sharedlibs_gui (Sharedlibs *sl)
154 GtkWidget *window3;
155 GtkWidget *scrolledwindow4;
156 GtkWidget *clist4;
157 GtkWidget *label6, *label7, *label8, *label9;
159 window3 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
160 gtk_widget_set_usize (window3, 170, -2);
161 gtk_window_set_title (GTK_WINDOW (window3), _("Shared libraries"));
162 gtk_window_set_wmclass (GTK_WINDOW (window3), "sharedlibs", "Anjuta");
163 gtk_window_set_default_size (GTK_WINDOW (window3), 240, 230);
164 gnome_window_icon_set_from_default(GTK_WINDOW(window3));
166 scrolledwindow4 = gtk_scrolled_window_new (NULL, NULL);
167 gtk_widget_show (scrolledwindow4);
168 gtk_container_add (GTK_CONTAINER (window3), scrolledwindow4);
169 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow4),
170 GTK_POLICY_AUTOMATIC,
171 GTK_POLICY_AUTOMATIC);
172 clist4 = gtk_clist_new (4);
173 gtk_widget_show (clist4);
174 gtk_container_add (GTK_CONTAINER (scrolledwindow4), clist4);
175 gtk_clist_set_column_width (GTK_CLIST (clist4), 0, 110);
176 gtk_clist_set_column_width (GTK_CLIST (clist4), 1, 90);
177 gtk_clist_set_column_width (GTK_CLIST (clist4), 2, 90);
178 gtk_clist_set_column_width (GTK_CLIST (clist4), 3, 80);
179 gtk_clist_set_selection_mode (GTK_CLIST (clist4), GTK_SELECTION_BROWSE);
180 gtk_clist_column_titles_show (GTK_CLIST (clist4));
181 gtk_clist_set_column_auto_resize (GTK_CLIST(clist4), 0, TRUE);
183 label6 = gtk_label_new (_(" Shared Object "));
184 gtk_widget_show (label6);
185 gtk_clist_set_column_widget (GTK_CLIST (clist4), 0, label6);
187 label7 = gtk_label_new (_("From"));
188 gtk_widget_show (label7);
189 gtk_clist_set_column_widget (GTK_CLIST (clist4), 1, label7);
191 label8 = gtk_label_new (_("To"));
192 gtk_widget_show (label8);
193 gtk_clist_set_column_widget (GTK_CLIST (clist4), 2, label8);
195 label9 = gtk_label_new (_("Sysm Read"));
196 gtk_widget_show (label9);
197 gtk_clist_set_column_widget (GTK_CLIST (clist4), 3, label9);
199 gtk_signal_connect (GTK_OBJECT (window3), "delete_event",
200 GTK_SIGNAL_FUNC (on_sharedlibs_delete_event), sl);
201 gtk_signal_connect (GTK_OBJECT (window3), "key-press-event",
202 GTK_SIGNAL_FUNC (on_sharedlibs_key_press_event), sl);
203 gtk_signal_connect (GTK_OBJECT (clist4), "event",
204 GTK_SIGNAL_FUNC (on_sharedlibs_event),
205 sl);
207 sl->widgets.window = window3;
208 sl->widgets.clist = clist4;
209 sl->widgets.menu = create_sharedlibs_menu (sl);
210 sl->widgets.menu_update = sharedlibs_menu_uiinfo[0].widget;
213 Sharedlibs*
214 sharedlibs_new (IAnjutaDebugger *debugger)
216 Sharedlibs* ew;
217 ew = g_malloc(sizeof(Sharedlibs));
218 if(ew)
220 ew->debugger = debugger;
221 g_object_ref (debugger);
223 ew->is_showing = FALSE;
224 ew->win_width = 410;
225 ew->win_height = 370;
226 ew->win_pos_x = 120;
227 ew->win_pos_y = 140;
228 create_sharedlibs_gui(ew);
230 return ew;
233 void
234 sharedlibs_clear (Sharedlibs *sg)
236 if(GTK_IS_CLIST(sg->widgets.clist))
237 gtk_clist_clear(GTK_CLIST(sg->widgets.clist));
240 void
241 sharedlibs_show (Sharedlibs* ew)
243 if(ew)
245 if(ew->is_showing)
247 gdk_window_raise(ew->widgets.window->window);
249 else
251 gtk_widget_set_uposition(ew->widgets.window, ew->win_pos_x,
252 ew->win_pos_y);
253 gtk_window_set_default_size(GTK_WINDOW(ew->widgets.window),
254 ew->win_width, ew->win_height);
255 gtk_widget_show(ew->widgets.window);
256 ew->is_showing = TRUE;
257 ianjuta_debugger_info_sharedlib (
258 ew->debugger,
259 (IAnjutaDebuggerCallback)sharedlibs_update,
261 NULL);
266 void
267 sharedlibs_hide (Sharedlibs* ew)
269 if(ew)
271 if(ew->is_showing == FALSE) return;
272 gdk_window_get_root_origin(ew ->widgets.window->window,
273 &ew->win_pos_x, &ew->win_pos_y);
274 gdk_window_get_size(ew ->widgets.window->window, &ew->win_width,
275 &ew->win_height);
276 gtk_widget_hide(ew->widgets.window);
277 ew->is_showing = FALSE;
281 void
282 sharedlibs_free(Sharedlibs* sg)
284 if(sg)
286 sharedlibs_clear(sg);
287 g_object_unref (sg->debugger);
288 gtk_widget_destroy(sg->widgets.window);
289 gtk_widget_destroy(sg->widgets.menu);
290 g_free(sg);