SF.net SVN: geany-plugins:[1125] trunk/geany-plugins/geanygdb/src
dmaphy at users.sourceforge.net
dmaphy at xxxxx
Sat Jan 16 14:00:38 UTC 2010
Revision: 1125
http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1125&view=rev
Author: dmaphy
Date: 2010-01-16 14:00:38 +0000 (Sat, 16 Jan 2010)
Log Message:
-----------
GeanyGDB:
- add a menu entry for
- add possibility to set keyboard shortcuts
- add page was in the bottom toolbar which in the future may be used to display the stack and local variables or watches
- introduce Radu Stefan as new contributor, welcome Radu!
Modified Paths:
--------------
trunk/geany-plugins/geanygdb/src/gdb-ui-main.c
trunk/geany-plugins/geanygdb/src/gdb-ui.h
trunk/geany-plugins/geanygdb/src/geanygdb.c
Modified: trunk/geany-plugins/geanygdb/src/gdb-ui-main.c
===================================================================
--- trunk/geany-plugins/geanygdb/src/gdb-ui-main.c 2010-01-15 18:54:31 UTC (rev 1124)
+++ trunk/geany-plugins/geanygdb/src/gdb-ui-main.c 2010-01-16 14:00:38 UTC (rev 1125)
@@ -1,6 +1,7 @@
/*
* gdb-ui-main.c - A GTK-based user interface for the GNU debugger.
* Copyright 2008 Jeff Pohlmeyer <yetanothergeek(at)gmail(dot)com>
+ * Copyright 2010 Radu Stefan <radu124 at gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -42,29 +43,42 @@
static GtkWidget *action_area;
static GtkWidget *stat_lab;
-static GtkWidget *load_btn;
-static GtkWidget *run_btn;
-static GtkWidget *pause_btn;
-static GtkWidget *cont_btn;
-static GtkWidget *step_btn;
-static GtkWidget *stepi_btn;
-static GtkWidget *next_btn;
-static GtkWidget *nexti_btn;
-static GtkWidget *until_btn;
-static GtkWidget *stack_btn;
-static GtkWidget *break_btn;
-static GtkWidget *watch_btn;
-static GtkWidget *finish_btn;
-static GtkWidget *return_btn;
-static GtkWidget *kill_btn;
-static GtkWidget *env_btn;
-static GtkWidget *unload_btn;
-static GtkWidget *prefs_btn;
-
static GtkWidget *term_chk;
static GtkWidget *pipe_chk;
+#define DEBUGACTIONS \
+DAENTRY(load , GTK_STOCK_OPEN, "_Load" ,"Load target program into debugger.")\
+DAENTRY(unload , GTK_STOCK_QUIT, "_Unload" ,"Kill the target program AND the debugger.")\
+DAENTRY(run , GTK_STOCK_EXECUTE, "_Run" ,"Execute target program in debugger.")\
+DAENTRY(kill , GTK_STOCK_STOP, "_Kill" ,"Kill the target program with SIGKILL.")\
+DAENTRY(pause , GTK_STOCK_MEDIA_PAUSE, "_Pause" ,"Pause the target program with SIGINT.")\
+DAENTRY(cont , GTK_STOCK_MEDIA_PLAY, "_Continue" ,"Continue executing target program.")\
+DAENTRY(step , GTK_STOCK_GO_FORWARD, "_Step" ,"Step to the next line or function call.")\
+DAENTRY(stepi , GTK_STOCK_GOTO_LAST, "Step _Into" ,"Execute the next machine instruction or function call.")\
+DAENTRY(next , GTK_STOCK_MEDIA_FORWARD,"_Next" ,"Step to the next line.")\
+DAENTRY(nexti , GTK_STOCK_MEDIA_NEXT, "Ne_xt in" ,"Execute the next machine instruction.")\
+DAENTRY(until , GTK_STOCK_JUMP_TO, "Run _To" ,"Run to specified source line.")\
+DAENTRY(stack , GTK_STOCK_DND_MULTIPLE, "Sta_ck" ,"Display a backtrace of the current call stack.")\
+DAENTRY(break , GTK_STOCK_INDEX, "_Break" ,"Add or remove breakpoints.")\
+DAENTRY(watch , GTK_STOCK_FIND, "_Watches" ,"Add or remove watches.")\
+DAENTRY(finish , GTK_STOCK_GOTO_BOTTOM, "_Finish" ,"Complete the currently executing function.")\
+DAENTRY(return , GTK_STOCK_UNDO, "_Return" ,"Return immediately from the current function.")\
+DAENTRY(env , GTK_STOCK_PROPERTIES, "En_vironment" ,"Set target environment and command line options.")\
+DAENTRY(prefs , GTK_STOCK_PREFERENCES, "_Options" ,"Set user interface options.")
+struct SdebugMenu
+{
+ GtkWidget *menu;
+#define DAENTRY(A,B,C,D) GtkWidget *_##A;
+ DEBUGACTIONS
+#undef DAENTRY
+} sdm;
+
+#define DAENTRY(A,B,C,D) GtkWidget *A##_btn;
+ DEBUGACTIONS
+#undef DAENTRY
+
+
static GtkWidget *con_lab;
static GtkWidget *con_cmd;
@@ -76,6 +90,14 @@
#define we(w) gtk_widget_set_sensitive(w,TRUE);
#define wd(w) gtk_widget_set_sensitive(w,FALSE);
+#define bwe(w) do { gtk_widget_set_sensitive(w##_btn,TRUE); \
+ gtk_widget_set_sensitive(sdm._##w,TRUE); \
+ } while(0)
+#define bwd(w) do { gtk_widget_set_sensitive(w##_btn,FALSE); \
+ gtk_widget_set_sensitive(sdm._##w,FALSE); \
+ } while(0)
+
+
#define pipe_chk_active() gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pipe_chk))
#define black "#000000"
@@ -117,47 +139,50 @@
static void
status_func(GdbStatus st)
{
- wd(load_btn);
- wd(run_btn);
- wd(pause_btn);
- wd(cont_btn);
- wd(step_btn);
- wd(stepi_btn);
- wd(next_btn);
- wd(nexti_btn);
- wd(until_btn);
- wd(finish_btn) wd(return_btn) wd(stack_btn);
- wd(kill_btn);
+ bwd(load);
+ bwd(run);
+ bwd(pause);
+ bwd(cont);
+ bwd(step);
+ bwd(stepi);
+ bwd(next);
+ bwd(nexti);
+ bwd(until);
+ bwd(finish);
+ bwd(return);
+ bwd(stack);
+
+ bwd(kill);
wd(pipe_chk);
- wd(break_btn);
- wd(watch_btn);
+ bwd(break);
+ bwd(watch);
wd(con_lab);
wd(con_cmd);
wd(term_chk);
- wd(env_btn);
- we(unload_btn);
+ bwd(env);
+ bwe(unload);
switch (st)
{
case GdbDead:
{
- we(load_btn);
+ bwe(load);
we(pipe_chk);
we(term_chk);
- wd(unload_btn);
+ bwd(unload);
status(_("(no program)"), black, white);
break;
}
case GdbLoaded:
{
- we(load_btn);
- we(run_btn);
+ bwe(load);
+ bwe(run);
we(pipe_chk);
- we(break_btn);
- we(watch_btn);
+ bwe(break);
+ bwe(watch);
we(term_chk);
we(con_lab);
we(con_cmd);
- we(env_btn);
+ bwe(env);
status(_("loaded"), white, black);
break;
}
@@ -168,41 +193,43 @@
}
case GdbRunning:
{
- we(pause_btn);
- we(kill_btn);
+ bwe(pause);
+ bwe(kill);
status(_("running"), green, white);
break;
}
case GdbStopped:
{
- we(cont_btn);
- we(step_btn);
- we(stepi_btn);
- we(next_btn);
- we(nexti_btn);
- we(until_btn);
- we(finish_btn) we(return_btn) we(stack_btn);
- we(kill_btn);
- we(break_btn);
- we(watch_btn);
+ bwe(cont);
+ bwe(step);
+ bwe(stepi);
+ bwe(next);
+ bwe(nexti);
+ bwe(until);
+ bwe(finish);
+ bwe(return);
+ bwe(stack);
+ bwe(kill);
+ bwe(break);
+ bwe(watch);
we(con_lab);
we(con_cmd);
we(pipe_chk);
- we(env_btn);
+ bwe(env);
status(_("stopped"), red, yellow);
break;
}
case GdbFinished:
{
- we(load_btn);
- we(run_btn);
+ bwe(load);
+ bwe(run);
we(con_lab);
we(con_cmd);
we(pipe_chk);
we(term_chk);
- we(break_btn);
- we(watch_btn);
- we(env_btn);
+ bwe(break);
+ bwe(watch);
+ bwe(env);
status(_("terminated"), white, black);
break;
}
@@ -817,6 +844,66 @@
#define BtnFill TRUE
#define BtnPad 1
+#define MENUENTRY(A,QI,Q2,D) \
+ sdm._##A = gtk_image_menu_item_new_with_mnemonic (_(Q2)); \
+ gtk_widget_show (sdm._##A); \
+ gtk_container_add (GTK_CONTAINER (sdm.menu), sdm._##A); \
+ if (QI[0]) {\
+ img=gtk_image_new_from_stock (QI, GTK_ICON_SIZE_MENU); \
+ gtk_widget_show (img); \
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (sdm._##A), img); \
+ } \
+ ui_widget_set_tooltip_text(sdm._##A,_(D));\
+ g_signal_connect(GTK_OBJECT(sdm._##A), "activate", G_CALLBACK(A##_click), NULL); \
+ keybindings_set_item(plugin_key_group, KB_DEBUG_##A, kb_activate, \
+ 0, 0, ""#Q2, _(Q2 ": " D), sdm._##A);
+
+#define DBKEYACT(A,B,C) \
+ case KB_DEBUG_##A: \
+ A##_click(NULL,NULL); \
+ break;
+
+#define DBBUTTON(A,B,C,D) A##_btn = make_btn(_(C), A##_click, B, _(D));
+
+enum
+{
+#define DAENTRY(A,B,C,D) KB_DEBUG_##A,
+ DEBUGACTIONS
+#undef DAENTRY
+ KB_DEBUG_COUNT
+};
+
+PLUGIN_KEY_GROUP(debug, KB_DEBUG_COUNT)
+
+static void kb_activate(guint key_id)
+{
+ //gtk_notebook_set_current_page(GTK_NOTEBOOK(geany->main_widgets->sidebar_notebook), page_number);
+ //gtk_widget_grab_focus(file_view);
+ switch (key_id)
+ {
+#define DAENTRY(A,B,C,D) DBKEYACT(A,B,C)
+ DEBUGACTIONS
+#undef DAENTRY
+ }
+}
+
+
+void gdbui_create_menu(GtkWidget * parent)
+{
+ GtkWidget* img;
+ sdm.menu = gtk_menu_new ();
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (parent), sdm.menu);
+#define DAENTRY(A,B,C,D) MENUENTRY(A,B,C,D);
+ DEBUGACTIONS
+#undef DAENTRY
+// gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (sdm._load), GTK_STOCK_OPEN);
+}
+
+void gdbui_create_dview(GtkWidget * parent)
+{
+
+}
+
GtkWidget *
gdbui_create_widgets(GtkWidget * parent)
{
@@ -842,65 +929,20 @@
action_area = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(main_vbox), action_area, FALSE, FALSE, 0);
gtk_widget_show(action_area);
- load_btn =
- make_btn(_("_Load"), load_click, GTK_STOCK_OPEN, _("Load target program into debugger."));
- unload_btn =
- make_btn(_("_Unload"), unload_click, GTK_STOCK_QUIT,
- _("Kill the target program AND the debugger."));
- run_btn =
- make_btn(_("_Run"), run_click, GTK_STOCK_EXECUTE,
- _("Execute target program in debugger."));
- kill_btn =
- make_btn(_("_Kill"), kill_click, GTK_STOCK_STOP,
- _("Kill the target program with SIGKILL."));
- pause_btn =
- make_btn(_("_Pause"), pause_click, GTK_STOCK_MEDIA_PAUSE,
- _("Pause the target program with SIGINT."));
- cont_btn =
- make_btn(_("_Continue"), cont_click, GTK_STOCK_MEDIA_PLAY,
- _("Continue executing target program."));
- step_btn =
- make_btn(_("_Step"), step_click, GTK_STOCK_GO_FORWARD,
- _("Step to the next line or function call."));
- stepi_btn =
- make_btn(_("Step _in"), stepi_click, GTK_STOCK_GOTO_LAST,
- _("Execute the next machine instruction or function call."));
- next_btn = make_btn("_Next", next_click, GTK_STOCK_MEDIA_FORWARD, _("Step to the next line."));
- nexti_btn =
- make_btn(_("Ne_xt in"), nexti_click, GTK_STOCK_MEDIA_NEXT,
- _("Execute the next machine instruction."));
- until_btn =
- make_btn(_("Run _to"), until_click, GTK_STOCK_JUMP_TO,
- _("Run to specified source line."));
- stack_btn =
- make_btn(_("Stac_k"), stack_click, GTK_STOCK_DND_MULTIPLE,
- _("Display a backtrace of the current call stack."));
- break_btn = make_btn("_Breaks", break_click, GTK_STOCK_INDEX, _("Add or remove breakpoints."));
- watch_btn = make_btn("_Watches", watch_click, GTK_STOCK_FIND, _("Add or remove watchpoints."));
- finish_btn =
- make_btn(_("_Finish"), finish_click, GTK_STOCK_GOTO_BOTTOM,
- _("Complete the currently executing function."));
- return_btn =
- make_btn(_("_Return"), return_click, GTK_STOCK_UNDO,
- _("Return immediately from the current function."));
- env_btn =
- make_btn(_("En_viron"), env_click, GTK_STOCK_PROPERTIES,
- _("Set target environment and command line options."));
- prefs_btn =
- make_btn(_("_Options"), prefs_click, GTK_STOCK_PREFERENCES,
- _("Set user interface options."));
+#define DAENTRY DBBUTTON
+ DEBUGACTIONS
+#undef DAENTRY
+
split1;
new_row;
gtk_box_pack_start(GTK_BOX(w), load_btn, BtnGrow, BtnFill, BtnPad);
gtk_box_pack_start(GTK_BOX(w), unload_btn, BtnGrow, BtnFill, BtnPad);
-
new_row;
gtk_box_pack_start(GTK_BOX(w), run_btn, BtnGrow, BtnFill, BtnPad);
gtk_box_pack_start(GTK_BOX(w), kill_btn, BtnGrow, BtnFill, BtnPad);
-
split1;
new_row;
@@ -923,7 +965,6 @@
gtk_box_pack_start(GTK_BOX(w), until_btn, BtnGrow, BtnFill, BtnPad);
gtk_box_pack_start(GTK_BOX(w), stack_btn, BtnGrow, BtnFill, BtnPad);
-
split1;
new_row;
Modified: trunk/geany-plugins/geanygdb/src/gdb-ui.h
===================================================================
--- trunk/geany-plugins/geanygdb/src/gdb-ui.h 2010-01-15 18:54:31 UTC (rev 1124)
+++ trunk/geany-plugins/geanygdb/src/gdb-ui.h 2010-01-16 14:00:38 UTC (rev 1125)
@@ -1,6 +1,7 @@
/*
* gdb-ui.h - A GTK-based user interface for the GNU debugger.
* Copyright 2008 Jeff Pohlmeyer <yetanothergeek(at)gmail(dot)com>
+ * Copyright 2010 Radu Stefan <radu124 at gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -67,6 +68,9 @@
GtkWidget *gdbui_create_widgets(GtkWidget * parent);
+void gdbui_create_menu(GtkWidget * parent);
+void gdbui_create_dview(GtkWidget * parent);
+
void gdbui_set_tip(GtkWidget * w, gchar * tip);
void gdbui_enable(gboolean enabled);
Modified: trunk/geany-plugins/geanygdb/src/geanygdb.c
===================================================================
--- trunk/geany-plugins/geanygdb/src/geanygdb.c 2010-01-15 18:54:31 UTC (rev 1124)
+++ trunk/geany-plugins/geanygdb/src/geanygdb.c 2010-01-16 14:00:38 UTC (rev 1125)
@@ -2,6 +2,7 @@
* geanygdb.c - Integrated debugger plugin for the Geany IDE
* Copyright 2008 Jeff Pohlmeyer <yetanothergeek(at)gmail(dot)com>
* Copyright 2009 - 2010 Dominic Hopf <dmaphy at googlemail.com>
+ * Copyright 2010 Radu Stefan <radu124 at gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -32,7 +33,7 @@
#define UNIX_NAME_OLD "debugger"
-PLUGIN_VERSION_CHECK(115)
+PLUGIN_VERSION_CHECK(163)
PLUGIN_SET_INFO(_("GeanyGDB"), _("Integrated debugging with GDB."), VERSION, _("Jeff Pohlmeyer, Dominic Hopf"))
GeanyData *geany_data;
@@ -41,6 +42,8 @@
static GtkNotebook *msgbook;
static GtkWidget *compwin;
static GtkWidget *frame;
+static GtkWidget *menudbg;
+static GtkWidget *btmframe;
static gchar *config_file;
@@ -371,6 +374,22 @@
frame = gtk_frame_new(NULL);
gtk_notebook_append_page(GTK_NOTEBOOK(geany->main_widgets->sidebar_notebook), frame,
gtk_label_new("Debug"));
+
+ menudbg = gtk_menu_item_new_with_mnemonic (_("Debu_g"));
+ gtk_widget_show (menudbg);
+ gtk_menu_insert (
+ GTK_CONTAINER ( ui_lookup_widget(geany->main_widgets->window, "menubar1"))
+ , menudbg, 7);
+
+ btmframe = gtk_frame_new(NULL);
+ gtk_widget_show_all(btmframe);
+ gtk_notebook_append_page(
+ GTK_NOTEBOOK(ui_lookup_widget(geany->main_widgets->window, "notebook_info")),
+ btmframe,
+ gtk_label_new(_("Debug")));
+
+
+ gdbui_create_menu(menudbg);
gdbui_create_widgets(frame);
gtk_widget_show_all(frame);
}
@@ -387,6 +406,8 @@
g_free(gdbio_setup.tty_helper);
gtk_widget_destroy(frame);
+ gtk_widget_destroy(btmframe);
+ gtk_widget_destroy(menudbg);
gdbui_opts_done();
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Plugins-Commits
mailing list