[geany/geany] fa118f: Add build command access to plugin interface
Lex Trotman
git-noreply at xxxxx
Wed Feb 15 03:18:34 UTC 2012
Branch: refs/heads/master
Author: Lex Trotman <elextr at gmail.com>
Committer: Lex Trotman <elextr at gmail.com>
Date: Wed, 15 Feb 2012 03:18:34
Commit: fa118fb12a0a2a98c6d80939d489cc57c5dcf23b
https://github.com/geany/geany/commit/fa118fb12a0a2a98c6d80939d489cc57c5dcf23b
Log Message:
-----------
Add build command access to plugin interface
Add ability for plugins to read and edit the fields of the build commands.
Modified Paths:
--------------
plugins/geanyfunctions.h
src/build.c
src/build.h
src/plugindata.h
src/plugins.c
Modified: plugins/geanyfunctions.h
10 files changed, 10 insertions(+), 0 deletions(-)
===================================================================
@@ -420,5 +420,15 @@
geany_functions->p_stash->stash_group_update
#define symbols_get_context_separator \
geany_functions->p_symbols->symbols_get_context_separator
+#define build_activate_menu_item \
+ geany_functions->p_build->build_activate_menu_item
+#define build_get_current_menu_item \
+ geany_functions->p_build->build_get_current_menu_item
+#define build_remove_menu_item \
+ geany_functions->p_build->build_remove_menu_item
+#define build_set_menu_item \
+ geany_functions->p_build->build_set_menu_item
+#define build_get_group_count \
+ geany_functions->p_build->build_get_group_count
#endif
Modified: src/build.c
162 files changed, 130 insertions(+), 32 deletions(-)
===================================================================
@@ -132,7 +132,7 @@
static void show_build_result_message(gboolean failure);
static void process_build_output_line(const gchar *line, gint color);
static void show_build_commands_dialog(void);
-
+static void on_build_menu_item(GtkWidget *w, gpointer user_data);
void build_finalize(void)
{
@@ -422,8 +422,7 @@ static void printfcmds(void)
}
-/* get pointer to the command group array */
-static GeanyBuildCommand *get_build_group(GeanyBuildSource src, GeanyBuildGroup grp)
+static GeanyBuildCommand **get_build_group_pointer(const GeanyBuildSource src, const GeanyBuildGroup grp)
{
GeanyDocument *doc;
GeanyFiletype *ft = NULL;
@@ -435,23 +434,22 @@ static void printfcmds(void)
return NULL;
if ((ft = doc->file_type) == NULL)
return NULL;
-
switch (src)
{
- case GEANY_BCS_DEF: return ft->ftdefcmds;
- case GEANY_BCS_FT: return ft->filecmds;
- case GEANY_BCS_HOME_FT: return ft->homefilecmds;
- case GEANY_BCS_PREF: return ft->homefilecmds;
- case GEANY_BCS_PROJ: return ft->projfilecmds;
+ case GEANY_BCS_DEF: return &(ft->ftdefcmds);
+ case GEANY_BCS_FT: return &(ft->filecmds);
+ case GEANY_BCS_HOME_FT: return &(ft->homefilecmds);
+ case GEANY_BCS_PREF: return &(ft->homefilecmds);
+ case GEANY_BCS_PROJ: return &(ft->projfilecmds);
default: return NULL;
}
break;
case GEANY_GBG_NON_FT:
switch (src)
{
- case GEANY_BCS_DEF: return non_ft_def;
- case GEANY_BCS_PREF: return non_ft_pref;
- case GEANY_BCS_PROJ: return non_ft_proj;
+ case GEANY_BCS_DEF: return &(non_ft_def);
+ case GEANY_BCS_PREF: return &(non_ft_pref);
+ case GEANY_BCS_PROJ: return &(non_ft_proj);
default: return NULL;
}
break;
@@ -460,12 +458,12 @@ static void printfcmds(void)
ft = doc->file_type;
switch (src)
{
- case GEANY_BCS_DEF: return exec_def;
- case GEANY_BCS_FT: return ft ? ft->execcmds: NULL;
- case GEANY_BCS_HOME_FT: return ft ? ft->homeexeccmds: NULL;
- case GEANY_BCS_PROJ_FT: return ft ? ft->projexeccmds: NULL;
- case GEANY_BCS_PREF: return exec_pref;
- case GEANY_BCS_PROJ: return exec_proj;
+ case GEANY_BCS_DEF: return &(exec_def);
+ case GEANY_BCS_FT: return ft ? &(ft->execcmds): NULL;
+ case GEANY_BCS_HOME_FT: return ft ? &(ft->homeexeccmds): NULL;
+ case GEANY_BCS_PROJ_FT: return ft ? &(ft->projexeccmds): NULL;
+ case GEANY_BCS_PREF: return &(exec_pref);
+ case GEANY_BCS_PROJ: return &(exec_proj);
default: return NULL;
}
break;
@@ -475,7 +473,16 @@ static void printfcmds(void)
}
-/* * Remove the specified Build menu item.
+/* get pointer to the command group array */
+static GeanyBuildCommand *get_build_group(const GeanyBuildSource src, const GeanyBuildGroup grp)
+{
+ GeanyBuildCommand **g = get_build_group_pointer(src, grp);
+ if (g == NULL) return NULL;
+ return *g;
+};
+
+
+/** Remove the specified Build menu item.
*
* Makes the specified menu item configuration no longer exist. This
* is different to setting fields to blank because the menu item
@@ -490,9 +497,10 @@ static void printfcmds(void)
*
* If any parameter is out of range does nothing.
*
- * @see build_menu_update
+ * Updates the menu.
+ *
**/
-void build_remove_menu_item(GeanyBuildSource src, GeanyBuildGroup grp, gint cmd)
+void build_remove_menu_item(const GeanyBuildSource src, const GeanyBuildGroup grp, const gint cmd)
{
GeanyBuildCommand *bc;
guint i;
@@ -539,30 +547,109 @@ void build_remove_menu_item(GeanyBuildSource src, GeanyBuildGroup grp, gint cmd)
}
-/* * Get the @a GeanyBuildCommand structure for the menu item.
+/** Get the string for the menu item field.
*
* Get the current highest priority command specified by @a grp and @a cmd. This is the one
* that the menu item will use if activated.
*
* @param grp the group of the specified menu item.
* @param cmd the index of the command within the group.
- * @param src pointer to @a gint to return which source provided the command. Ignored if @a NULL.
- * Values are one of @a GeanyBuildSource but returns a signed type not the enum.
+ * @param fld the field to return
*
- * @return a pointer to the @a GeanyBuildCommand structure or @a NULL if it doesn't exist.
+ * @return a pointer to the constant string or @a NULL if it doesn't exist.
* This is a pointer to an internal structure and must not be freed.
*
- * @see build_menu_update
**/
-/* parameter checked version of get_build_cmd for external interface */
-GeanyBuildCommand *build_get_current_menu_item(GeanyBuildGroup grp, guint cmd, guint *src)
+const gchar *build_get_current_menu_item(const GeanyBuildGroup grp, const guint cmd,
+ const GeanyBuildCmdEntries fld)
{
- g_return_val_if_fail(*src < GEANY_BCS_COUNT, NULL);
+ GeanyBuildCommand *c;
+ gchar *str = NULL;
+
g_return_val_if_fail(grp < GEANY_GBG_COUNT, NULL);
+ g_return_val_if_fail(fld < GEANY_BC_CMDENTRIES_COUNT, NULL);
g_return_val_if_fail(cmd < build_groups_count[grp], NULL);
- return get_build_cmd(NULL, grp, cmd, src);
-}
+ c = get_build_cmd(NULL, grp, cmd, NULL);
+ if (c == NULL) return NULL;
+ switch (fld)
+ {
+ case GEANY_BC_COMMAND:
+ str = c->command;
+ break;
+ case GEANY_BC_LABEL:
+ str = c->label;
+ break;
+ case GEANY_BC_WORKING_DIR:
+ str = c->working_dir;
+ break;
+ default:
+ break;
+ }
+ return str;
+};
+
+/** Set the string for the menu item field.
+ *
+ * Set the specified field of the command specified by @a src, @a grp and @a cmd.
+ *
+ * @param src the source of the menu item
+ * @param grp the group of the specified menu item.
+ * @param cmd the index of the menu item within the group.
+ * @param fld the field in the menu item command to set
+ * @param val the value to set the field to, is copied
+ *
+ **/
+
+void build_set_menu_item(const GeanyBuildSource src, const GeanyBuildGroup grp,
+ const guint cmd, const GeanyBuildCmdEntries fld, const gchar *val)
+{
+ GeanyBuildCommand **g;
+
+ g_return_if_fail(src < GEANY_BCS_COUNT);
+ g_return_if_fail(grp < GEANY_GBG_COUNT);
+ g_return_if_fail(fld < GEANY_BC_CMDENTRIES_COUNT);
+ g_return_if_fail(cmd < build_groups_count[grp]);
+
+ g = get_build_group_pointer(src, grp);
+ if (g == NULL) return;
+ if (*g == NULL )
+ {
+ *g = g_new0(GeanyBuildCommand, build_groups_count[grp]);
+ }
+ switch (fld)
+ {
+ case GEANY_BC_COMMAND:
+ SETPTR((*g)[cmd].command, g_strdup(val));
+ (*g)[cmd].exists = TRUE;
+ break;
+ case GEANY_BC_LABEL:
+ SETPTR((*g)[cmd].label, g_strdup(val));
+ (*g)[cmd].exists = TRUE;
+ break;
+ case GEANY_BC_WORKING_DIR:
+ SETPTR((*g)[cmd].working_dir, g_strdup(val));
+ (*g)[cmd].exists = TRUE;
+ break;
+ default:
+ break;
+ }
+ build_menu_update(NULL);
+};
+
+/** Set the string for the menu item field.
+ *
+ * Set the specified field of the command specified by @a src, @a grp and @a cmd.
+ *
+ * @param grp the group of the specified menu item.
+ * @param cmd the index of the command within the group.
+ *
+ **/
+
+void build_activate_menu_item(const GeanyBuildGroup grp, const guint cmd)
+{
+ on_build_menu_item(NULL, GRP_CMD_TO_POINTER(grp, cmd));
+};
/* Clear all error indicators in all documents. */
@@ -2688,8 +2775,19 @@ void build_set_group_count(GeanyBuildGroup grp, gint count)
}
-guint build_get_group_count(GeanyBuildGroup grp)
+/** Get the count of commands for the group
+ *
+ * Get the number of commands in the group specified by @a grp.
+ *
+ * @param grp the group of the specified menu item.
+ *
+ * @return a count of the number of commands in the group
+ *
+ **/
+
+guint build_get_group_count(const GeanyBuildGroup grp)
{
+ g_return_val_if_fail(grp < GEANY_GBG_COUNT, 0);
return build_groups_count[grp];
}
Modified: src/build.h
22 files changed, 14 insertions(+), 8 deletions(-)
===================================================================
@@ -19,7 +19,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/* * @file build.h Interface to the Build menu functionality. */
+/** @file build.h Interface to the Build menu functionality. */
#ifndef GEANY_BUILD_H
#define GEANY_BUILD_H 1
@@ -40,7 +40,7 @@
GEANY_GBO_COUNT /* *< count of how many */
} GeanyBuildType;
-/* * Groups of Build menu items. */
+/** Groups of Build menu items. */
typedef enum
{
GEANY_GBG_FT, /* *< filetype items */
@@ -92,7 +92,7 @@ enum GeanyBuildFixedMenuItems
GBF_COUNT
};
-/* * Build menu item sources in increasing priority */
+/** Build menu item sources in increasing priority */
typedef enum
{
GEANY_BCS_DEF, /* *< Default values. */
@@ -117,7 +117,7 @@ enum GeanyBuildFixedMenuItems
extern GeanyBuildInfo build_info;
-/* * The entries of a command for a menu item */
+/** The entries of a command for a menu item */
typedef enum GeanyBuildCmdEntries
{
GEANY_BC_LABEL, /* *< The menu item label, _ marks mnemonic */
@@ -177,11 +177,17 @@ enum GeanyBuildFixedMenuItems
void build_toolbutton_build_clicked(GtkAction *action, gpointer user_data);
-void build_remove_menu_item(GeanyBuildSource src, GeanyBuildGroup grp, gint cmd);
+void build_remove_menu_item(const GeanyBuildSource src, const GeanyBuildGroup grp, const gint cmd);
-GeanyBuildCommand *build_get_menu_item(GeanyBuildSource src, GeanyBuildGroup grp, guint cmd);
+GeanyBuildCommand *build_get_menu_item(const GeanyBuildSource src, const GeanyBuildGroup grp, const guint cmd);
-GeanyBuildCommand *build_get_current_menu_item(GeanyBuildGroup grp, guint cmd, guint *src);
+const gchar *build_get_current_menu_item(const GeanyBuildGroup grp, const guint cmd,
+ const GeanyBuildCmdEntries field);
+
+void build_set_menu_item(const GeanyBuildSource src, const GeanyBuildGroup grp,
+ const guint cmd, const GeanyBuildCmdEntries field, const gchar *value);
+
+void build_activate_menu_item(const GeanyBuildGroup grp, const guint cmd);
BuildMenuItems *build_get_menu_items(gint filetype_idx);
@@ -192,7 +198,7 @@ enum GeanyBuildFixedMenuItems
void build_set_group_count(GeanyBuildGroup grp, gint count);
-guint build_get_group_count(GeanyBuildGroup grp);
+guint build_get_group_count(const GeanyBuildGroup grp);
gchar **build_get_regex(GeanyBuildGroup grp, GeanyFiletype *ft, guint *from);
Modified: src/plugindata.h
25 files changed, 20 insertions(+), 5 deletions(-)
===================================================================
@@ -39,6 +39,7 @@
#define GEANY(symbol_name) geany->symbol_name
#include "editor.h" /* GeanyIndentType */
+#include "build.h" /* GeanyBuildGroup, GeanyBuildSource, GeanyBuildCmdEntries enums */
/** The Application Programming Interface (API) version, incremented
@@ -52,7 +53,7 @@
* @warning You should not test for values below 200 as previously
* @c GEANY_API_VERSION was defined as an enum value, not a macro.
*/
-#define GEANY_API_VERSION 212
+#define GEANY_API_VERSION 213
/** The Application Binary Interface (ABI) version, incremented whenever
* existing fields in the plugin data types have to be changed or reordered.
@@ -266,14 +267,15 @@
struct SearchFuncs *p_search; /**< See search.h */
struct HighlightingFuncs *p_highlighting; /**< See highlighting.h */
struct FiletypeFuncs *p_filetypes; /**< See filetypes.h */
- struct NavQueueFuncs *p_navqueue; /**< See navqueue.h */
- struct EditorFuncs *p_editor; /**< See editor.h */
- struct MainFuncs *p_main; /**< See main.h */
- struct PluginFuncs *p_plugin; /**< See pluginutils.c */
+ struct NavQueueFuncs *p_navqueue; /**< See navqueue.h */
+ struct EditorFuncs *p_editor; /**< See editor.h */
+ struct MainFuncs *p_main; /**< See main.h */
+ struct PluginFuncs *p_plugin; /**< See pluginutils.c */
struct ScintillaFuncs *p_scintilla; /**< See ScintillaFuncs */
struct MsgWinFuncs *p_msgwin; /**< See msgwindow.h */
struct StashFuncs *p_stash; /**< See stash.h */
struct SymbolsFuncs *p_symbols; /**< See symbols.h */
+ struct BuildFuncs *p_build; /**< See build.h */
}
GeanyFunctions;
@@ -708,6 +710,19 @@
}
SymbolsFuncs;
+/* See build.h */
+typedef struct BuildFuncs
+{
+ void (*build_activate_menu_item)(const GeanyBuildGroup grp, const guint cmd);
+ const gchar *(*build_get_current_menu_item)(const GeanyBuildGroup grp, const guint cmd,
+ const GeanyBuildCmdEntries field);
+ void (*build_remove_menu_item)(const GeanyBuildSource src, const GeanyBuildGroup grp,
+ const gint cmd);
+ void (*build_set_menu_item)(const GeanyBuildSource src, const GeanyBuildGroup grp,
+ const guint cmd, const GeanyBuildCmdEntries field, const gchar *value);
+ guint (*build_get_group_count)(const GeanyBuildGroup grp);
+}
+BuildFuncs;
/* Deprecated aliases */
#ifndef GEANY_DISABLE_DEPRECATED
Modified: src/plugins.c
13 files changed, 11 insertions(+), 2 deletions(-)
===================================================================
@@ -46,7 +46,7 @@
#include "msgwindow.h"
#include "prefs.h"
#include "geanywraplabel.h"
-#include "build.h"
+/* #include "build.h" included in plugindata.h so it can use enums */
#include "encodings.h"
#include "search.h"
#include "highlighting.h"
@@ -353,6 +353,14 @@
&symbols_get_context_separator
};
+static BuildFuncs build_funcs = {
+ &build_activate_menu_item,
+ &build_get_current_menu_item,
+ &build_remove_menu_item,
+ &build_set_menu_item,
+ &build_get_group_count
+};
+
static GeanyFunctions geany_functions = {
&doc_funcs,
&sci_funcs,
@@ -375,7 +383,8 @@
&scintilla_funcs,
&msgwin_funcs,
&stash_funcs,
- &symbols_funcs
+ &symbols_funcs,
+ &build_funcs
};
static GeanyData geany_data;
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).
More information about the Commits
mailing list