SF.net SVN: geany:[4011] branches/build-system
elextr at users.sourceforge.net
elextr at xxxxx
Wed Jul 22 03:04:17 UTC 2009
Revision: 4011
http://geany.svn.sourceforge.net/geany/?rev=4011&view=rev
Author: elextr
Date: 2009-07-22 03:04:17 +0000 (Wed, 22 Jul 2009)
Log Message:
-----------
Added Plugin interface for Build menu functionality
Modified Paths:
--------------
branches/build-system/ChangeLog
branches/build-system/doc/geany.html
branches/build-system/src/Makefile.am
branches/build-system/src/build.c
branches/build-system/src/build.h
branches/build-system/src/project.c
branches/build-system/wscript
Modified: branches/build-system/ChangeLog
===================================================================
--- branches/build-system/ChangeLog 2009-07-21 22:12:13 UTC (rev 4010)
+++ branches/build-system/ChangeLog 2009-07-22 03:04:17 UTC (rev 4011)
@@ -1,3 +1,13 @@
+2009-07-22 Lex Trotman <elextr(at)gmail(dot)com>
+
+ * src/build.h, src/build.c, src/project.c
+ Created and documented plugins interface to build menu.
+ Factored out new get_cmd_group function.
+ Changed name of remove_command function to be consistent with the rest
+ of the interface & changed calls in project.c.
+ * src/Makefile.am, wscript
+ Added build.h to installed files lists.
+
2009-07-20 Lex Trotman <elextr(at)gmail(dot)com>
* doc/geany.txt
Modified: branches/build-system/doc/geany.html
===================================================================
--- branches/build-system/doc/geany.html 2009-07-21 22:12:13 UTC (rev 4010)
+++ branches/build-system/doc/geany.html 2009-07-22 03:04:17 UTC (rev 4011)
@@ -6,7 +6,7 @@
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
<title>Geany</title>
<meta name="authors" content="Enrico Tröger Nick Treleaven Frank Lanitz" />
-<meta name="date" content="2009-07-17" />
+<meta name="date" content="2009-07-20" />
<style type="text/css">
/*
@@ -139,7 +139,7 @@
<br />Nick Treleaven
<br />Frank Lanitz</td></tr>
<tr><th class="docinfo-name">Date:</th>
-<td>2009-07-17</td></tr>
+<td>2009-07-20</td></tr>
<tr><th class="docinfo-name">Version:</th>
<td>0.18</td></tr>
</tbody>
@@ -5336,7 +5336,7 @@
<div class="footer">
<hr class="footer" />
<a class="reference" href="geany.txt">View document source</a>.
-Generated on: 2009-07-20 03:46 UTC.
+Generated on: 2009-07-22 02:16 UTC.
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
</div>
Modified: branches/build-system/src/Makefile.am
===================================================================
--- branches/build-system/src/Makefile.am 2009-07-21 22:12:13 UTC (rev 4010)
+++ branches/build-system/src/Makefile.am 2009-07-22 03:04:17 UTC (rev 4011)
@@ -71,7 +71,8 @@
templates.h \
toolbar.h \
ui_utils.h \
- utils.h
+ utils.h \
+ build.h
INCLUDES = -I$(srcdir)/../scintilla/include -I$(srcdir)/../tagmanager/include @GTK_CFLAGS@ @GIO_CFLAGS@
Modified: branches/build-system/src/build.c
===================================================================
--- branches/build-system/src/build.c 2009-07-21 22:12:13 UTC (rev 4010)
+++ branches/build-system/src/build.c 2009-07-22 03:04:17 UTC (rev 4011)
@@ -291,8 +291,8 @@
if (printbuildcmds)printfcmds();
if (cmdgrp>=GBG_COUNT)return NULL;
- if (from!=NULL)fr=from;
- if (doc==NULL)doc=document_get_current();
+ if (from!=NULL)fr = from;
+ if (doc==NULL)doc = document_get_current();
if (doc!=NULL)ft = doc->file_type;
switch(cmdgrp)
{
@@ -357,63 +357,86 @@
return NULL;
}
-/* remove the specified command, cmd<0 remove whole group */
-void remove_command(GeanyBuildSource src, GeanyBuildGroup grp, gint cmd)
+/* get pointer to the command group array */
+GeanyBuildCommand *get_build_group(GeanyBuildSource src, GeanyBuildGroup grp)
{
- GeanyBuildCommand *bc;
- gint i;
GeanyDocument *doc;
GeanyFiletype *ft;
switch(grp)
{
case GBG_FT:
- if ((doc=document_get_current())==NULL)return;
- if ((ft=doc->file_type)==NULL)return;
+ if ((doc=document_get_current())==NULL)return NULL;
+ if ((ft=doc->file_type)==NULL)return NULL;
switch(src)
{
- case BCS_DEF: bc=ft->ftdefcmds; break;
- case BCS_FT: bc=ft->filecmds; break;
- case BCS_HOME_FT: bc=ft->homefilecmds; break;
- case BCS_PREF: bc=ft->homefilecmds; break;
- case BCS_PROJ: bc=ft->projfilecmds; break;
- default: return;
+ case BCS_DEF: return ft->ftdefcmds;
+ case BCS_FT: return ft->filecmds;
+ case BCS_HOME_FT: return ft->homefilecmds;
+ case BCS_PREF: return ft->homefilecmds;
+ case BCS_PROJ: return ft->projfilecmds;
+ default: return NULL;
}
break;
case GBG_NON_FT:
switch(src)
{
- case BCS_DEF: bc=non_ft_def; break;
- case BCS_PREF: bc=non_ft_pref; break;
- case BCS_PROJ: bc=non_ft_proj; break;
- default: return;
+ case BCS_DEF: return non_ft_def;
+ case BCS_PREF: return non_ft_pref;
+ case BCS_PROJ: return non_ft_proj;
+ default: return NULL;
}
break;
case GBG_EXEC:
- if ((doc=document_get_current())==NULL)return;
- if ((ft=doc->file_type)==NULL)return;
+ if ((doc=document_get_current())==NULL)return NULL;
+ if ((ft=doc->file_type)==NULL)return NULL;
switch(src)
{
- case BCS_DEF: bc=exec_def; break;
- case BCS_FT: bc=ft->execcmds; break;
- case BCS_HOME_FT: bc=ft->homeexeccmds; break;
- case BCS_PREF: bc=exec_pref; break;
- case BCS_PROJ: bc=exec_proj; break;
- default: return;
+ case BCS_DEF: return exec_def;
+ case BCS_FT: return ft->execcmds;
+ case BCS_HOME_FT: return ft->homeexeccmds;
+ case BCS_PREF: return exec_pref;
+ case BCS_PROJ: return exec_proj;
+ default: return NULL;
}
break;
default:
- return;
+ return NULL;
}
+}
+
+/* remove the specified command, cmd<0 remove whole group */
+void build_remove_menu_item(GeanyBuildSource src, GeanyBuildGroup grp, gint cmd)
+{
+ GeanyBuildCommand *bc;
+ gint i;
+ bc = get_build_group(src, grp);
if (bc==NULL)return;
if (cmd<0)
for (i=0; i<build_groups_count[grp]; ++i)
bc[i].exists=FALSE;
- else
+ else if(cmd<build_groups_count[grp])
bc[cmd].exists=FALSE;
}
+/* get the build build command for the specified menu item */
+GeanyBuildCommand *build_get_menu_item(GeanyBuildSource src, GeanyBuildGroup grp, gint cmd)
+{
+ GeanyBuildCommand *bc;
+ if (src>=BCS_COUNT || grp>=GBG_COUNT || cmd>=build_groups_count[grp]) return NULL;
+ bc = get_build_group(src, grp);
+ if (bc==NULL) return NULL;
+ return &(bc[cmd]);
+}
+
+/* parameter checked version of get_build_cmd for external interface */
+GeanyBuildCommand *build_get_current_menu_item(GeanyBuildGroup grp, gint cmd, gint *src)
+{
+ if (src>=BCS_COUNT || grp>=GBG_COUNT || cmd>=build_groups_count[grp]) return NULL;
+ return get_build_cmd(NULL, grp, cmd, src);
+}
+
/* Clear all error indicators in all documents. */
static void clear_errors(GeanyDocument *doc)
{
Modified: branches/build-system/src/build.h
===================================================================
--- branches/build-system/src/build.h 2009-07-21 22:12:13 UTC (rev 4010)
+++ branches/build-system/src/build.h 2009-07-22 03:04:17 UTC (rev 4011)
@@ -21,6 +21,7 @@
* $Id$
*/
+/** @file build.h Interface to the Build menu functionality. */
#ifndef GEANY_BUILD_H
#define GEANY_BUILD_H 1
@@ -40,12 +41,13 @@
GBO_COUNT /* count of how many */
} GeanyBuildType;
-typedef enum /* build command groups, order as above */
+/** Groups of Build menu items. */
+typedef enum
{
- GBG_FT, /* filetype */
- GBG_NON_FT, /* non filetype */
- GBG_EXEC, /* execute */
- GBG_COUNT /* count of how many */
+ GBG_FT, /**< filetype items */
+ GBG_NON_FT, /**< non filetype items.*/
+ GBG_EXEC, /**< execute items */
+ GBG_COUNT /**< count of groups. */
} GeanyBuildGroup;
/* include the fixed widgets in an array indexed by groups */
@@ -68,14 +70,15 @@
GBF_COUNT
};
-typedef enum /* build command sources, in increasing priority */
+/** Build menu item sources in increasing priority */
+typedef enum
{
- BCS_DEF, /* default */
- BCS_FT, /* filetype */
- BCS_HOME_FT,/* filetypes in home */
- BCS_PREF, /* preferences */
- BCS_PROJ, /* project */
- BCS_COUNT /* count of how many */
+ BCS_DEF, /**< Default values. */
+ BCS_FT, /**< System filetype values. */
+ BCS_HOME_FT,/**< Filetypes in ~/.config/geany/filedefs */
+ BCS_PREF, /**< Preferences file ~/.config/geany/geany.conf */
+ BCS_PROJ, /**< Project file if open. */
+ BCS_COUNT /**< Count of sources. */
} GeanyBuildSource;
typedef struct GeanyBuildInfo
@@ -91,20 +94,24 @@
extern GeanyBuildInfo build_info;
+/** The entries of a command for a menu item */
typedef enum GeanyBuildCmdEntries
{
- BC_LABEL,
- BC_COMMAND,
- BC_WORKING_DIR,
- BC_CMDENTRIES_COUNT,
+ BC_LABEL, /**< The menu item label, _ marks mnemonic */
+ BC_COMMAND, /**< The command to run. */
+ BC_WORKING_DIR, /**< The directory to run in */
+ BC_CMDENTRIES_COUNT, /**< Count of entries */
} GeanyBuildCmdEntries;
+/** The command for a menu item. */
typedef struct GeanyBuildCommand
{
+ /** Pointers to g_string values values of the command entries.
+ * Must be freed if the pointer is changed. */
gchar *entries[BC_CMDENTRIES_COUNT];
- gboolean exists;
- gboolean changed;
- gboolean old;
+ gboolean exists; /**< If the entries have valid values. */
+ gboolean changed; /**< Save on exit if @c changed, remove if not @c exist. */
+ gboolean old; /**< Converted from old format. */
} GeanyBuildCommand;
extern GeanyBuildCommand *non_ft_proj, *exec_proj; /* project command array pointers */
@@ -144,14 +151,84 @@
gboolean build_parse_make_dir(const gchar *string, gchar **prefix);
/* build menu functions */
+
+/** Update the build menu to reflect changes in configuration or status.
+ *
+ * Sets the labels and number of visible items to match the highest
+ * priority configured commands. Also sets sensitivity if build commands are
+ * running and switches executes to stop when commands are running.
+ *
+ * @param doc The current document, if available, to save looking it up.
+ * If @c NULL it will be looked up.
+ *
+ * Call this after modifying any fields of a GeanyBuildCommand structure.
+ *
+ * @see Build Menu Configuration section of the Manual.
+ *
+ **/
+
void build_menu_update(GeanyDocument *doc);
-BuildMenuItems *build_get_menu_items(gint filetype_idx);
void build_toolbutton_build_clicked(GtkAction *action, gpointer user_data);
-void remove_command(GeanyBuildSource src, GeanyBuildGroup grp, gint cmd);
+/** 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
+ * will be deleted from the configuration file on saving
+ * (except the system filetypes settings @see Build Menu Configuration
+ * section of the Manual).
+ *
+ * @param src the source of the menu item to remove.
+ * @param grp the group of the command to remove.
+ * @param cmd the index (from 0) of the command within the group. A negative
+ * value will remove the whole group.
+ *
+ * If any parameter is out of range does nothing.
+ *
+ * @see build_menu_update
+ **/
+void build_remove_menu_item(GeanyBuildSource src, GeanyBuildGroup grp, gint cmd);
+
+/** Get the @a GeanyBuildCommand structure for the specified Build menu item.
+ *
+ * Get the command for any menu item specified by @a src, @a grp and @a cmd even if it is
+ * hidden by higher priority commands.
+ *
+ * @param src the source of the specified menu item.
+ * @param grp the group of the specified menu item.
+ * @param cmd the index of the command within the group.
+ *
+ * @return a pointer to the @a GeanyBuildCommand structure 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
+ **/
+
+GeanyBuildCommand *build_get_menu_item(GeanyBuildSource src, GeanyBuildGroup grp, gint cmd);
+
+/** Get the @a GeanyBuildCommand structure for the menu item.
+ *
+ * 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.
+ *
+ * @return a pointer to the @a GeanyBuildCommand structure 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
+ **/
+
+GeanyBuildCommand *build_get_current_menu_item(GeanyBuildGroup grp, gint cmd, gint *src);
+
+BuildMenuItems *build_get_menu_items(gint filetype_idx);
+
/* load and store menu configuration */
void load_build_menu( GKeyFile *config, GeanyBuildSource dst, gpointer ptr);
Modified: branches/build-system/src/project.c
===================================================================
--- branches/build-system/src/project.c 2009-07-21 22:12:13 UTC (rev 4010)
+++ branches/build-system/src/project.c 2009-07-22 03:04:17 UTC (rev 4011)
@@ -352,8 +352,8 @@
g_ptr_array_free(app->project->build_filetypes_list, FALSE);
/* remove project non filetype build menu items */
- remove_command( BCS_PROJ, GBG_NON_FT, -1 );
- remove_command( BCS_PROJ, GBG_EXEC, -1 );
+ build_remove_menu_item( BCS_PROJ, GBG_NON_FT, -1 );
+ build_remove_menu_item( BCS_PROJ, GBG_EXEC, -1 );
/* remove project regexen */
setptr(regex_proj, NULL);
Modified: branches/build-system/wscript
===================================================================
--- branches/build-system/wscript 2009-07-21 22:12:13 UTC (rev 4010)
+++ branches/build-system/wscript 2009-07-22 03:04:17 UTC (rev 4011)
@@ -453,7 +453,7 @@
src/highlighting.h src/keybindings.h src/main.h src/msgwindow.h src/plugindata.h
src/plugins.h src/prefs.h src/project.h src/sciwrappers.h src/search.h src/support.h
src/templates.h src/toolbar.h src/ui_utils.h src/utils.h plugins/pluginmacros.h
- plugins/geanyplugin.h plugins/geanyfunctions.h ''')
+ plugins/geanyplugin.h plugins/geanyfunctions.h src/build.h ''')
bld.install_files('${PREFIX}/include/geany/scintilla', '''
scintilla/include/SciLexer.h scintilla/include/Scintilla.h
scintilla/include/Scintilla.iface scintilla/include/ScintillaWidget.h ''')
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list