1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
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
30 #include <libanjuta/resources.h>
32 #include "utilities.h"
33 #include "sharedlib.h"
36 on_sharedlibs_delete_event (GtkWidget
* w
, GdkEvent
*event
, gpointer data
)
38 Sharedlibs
* sl
= data
;
44 on_sharedlibs_key_press_event (GtkWidget
*widget
, GdkEventKey
*event
,
47 if (event
->keyval
== GDK_Escape
)
49 Sharedlibs
* sl
= data
;
58 sharedlibs_update (const GList
*lines
, gpointer data
)
61 gchar obj
[512], from
[32], to
[32], read
[32];
66 sl
= (Sharedlibs
*)data
;
68 list
= gdb_util_remove_blank_lines(lines
);
70 if(g_list_length(list
) < 2 ){g_list_free(list
); return;}
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
);
81 gtk_clist_append(GTK_CLIST(sl
->widgets
.clist
), row
);
87 on_sharedlibs_update_activate (GtkMenuItem
*menuitem
, gpointer user_data
)
89 Sharedlibs
*sl
= (Sharedlibs
*)user_data
;
91 ianjuta_debugger_info_sharedlib (
93 (IAnjutaDebuggerCallback
)sharedlibs_update
,
99 sharedlibs_update_controls (Sharedlibs
* ew
)
103 R
= ianjuta_debugger_get_status (ew
->debugger
, NULL
) == IANJUTA_DEBUGGER_OK
;
105 gtk_widget_set_sensitive(ew
->widgets
.menu_update
, R
);
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
)
116 if (((GdkEventButton
*)event
)->button
!= 3)
118 bevent
= (GdkEventButton
*)event
;
120 sharedlibs_update_controls(ew
);
121 gtk_menu_popup (GTK_MENU(ew
->widgets
.menu
), NULL
,
123 bevent
->button
, bevent
->time
);
127 static GnomeUIInfo sharedlibs_menu_uiinfo
[] =
130 GNOME_APP_UI_ITEM
, N_("Update"),
132 on_sharedlibs_update_activate
, NULL
, NULL
,
133 GNOME_APP_PIXMAP_NONE
, NULL
,
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
,
148 return sharedlibs_menu
;
152 create_sharedlibs_gui (Sharedlibs
*sl
)
155 GtkWidget
*scrolledwindow4
;
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
),
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
;
214 sharedlibs_new (IAnjutaDebugger
*debugger
)
217 ew
= g_malloc(sizeof(Sharedlibs
));
220 ew
->debugger
= debugger
;
221 g_object_ref (debugger
);
223 ew
->is_showing
= FALSE
;
225 ew
->win_height
= 370;
228 create_sharedlibs_gui(ew
);
234 sharedlibs_clear (Sharedlibs
*sg
)
236 if(GTK_IS_CLIST(sg
->widgets
.clist
))
237 gtk_clist_clear(GTK_CLIST(sg
->widgets
.clist
));
241 sharedlibs_show (Sharedlibs
* ew
)
247 gdk_window_raise(ew
->widgets
.window
->window
);
251 gtk_widget_set_uposition(ew
->widgets
.window
, ew
->win_pos_x
,
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 (
259 (IAnjutaDebuggerCallback
)sharedlibs_update
,
267 sharedlibs_hide (Sharedlibs
* 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
,
276 gtk_widget_hide(ew
->widgets
.window
);
277 ew
->is_showing
= FALSE
;
282 sharedlibs_free(Sharedlibs
* 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
);