Revision: 1768 http://geany.svn.sourceforge.net/geany/?rev=1768&view=rev Author: ntrel Date: 2007-08-03 08:05:53 -0700 (Fri, 03 Aug 2007)
Log Message: ----------- Add filetypes, editor_prefs fields to plugin API. Wrap scintilla_send_message(), sci_cmd(), lookup_widget(). Apply patch from Jeff Pohlmeyer to add more common scintilla wrappers to the plugin API (thanks). Increment plugin ABI version.
Modified Paths: -------------- trunk/ChangeLog trunk/HACKING trunk/src/editor.h trunk/src/plugindata.h trunk/src/plugins.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-07-31 17:07:33 UTC (rev 1767) +++ trunk/ChangeLog 2007-08-03 15:05:53 UTC (rev 1768) @@ -1,3 +1,13 @@ +2007-08-03 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> + + * src/plugindata.h, src/plugins.c, src/editor.h, HACKING: + Add filetypes, editor_prefs fields to plugin API. + Wrap scintilla_send_message(), sci_cmd(), lookup_widget(). + Apply patch from Jeff Pohlmeyer to add more common scintilla wrappers + to the plugin API (thanks). + Increment plugin ABI version. + + 2007-07-31 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* po/Makefile.in.in: Removed.
Modified: trunk/HACKING =================================================================== --- trunk/HACKING 2007-07-31 17:07:33 UTC (rev 1767) +++ trunk/HACKING 2007-08-03 15:05:53 UTC (rev 1768) @@ -67,6 +67,12 @@ Some of these notes below are brief (or maybe incomplete) - please contact the mailing list for more information.
+Modifying data types +-------------------- +When reordering or changing existing elements of structs that are used as part of the +plugin API, you should increment abi_version in plugindata.h (and api_version if changing +elements). This is not needed if you're just appending fields to structs. + Adding a file foo.[hc] in src/ or plugins/ ------------------------------------------ Add foo.c, foo.h to SRCS in path/Makefile.am.
Modified: trunk/src/editor.h =================================================================== --- trunk/src/editor.h 2007-07-31 17:07:33 UTC (rev 1767) +++ trunk/src/editor.h 2007-08-03 15:05:53 UTC (rev 1768) @@ -44,7 +44,7 @@
/* These are the default prefs when creating a new editor window. * Some of these can be overridden per document. */ -typedef struct +typedef struct EditorPrefs { gboolean line_breaking; IndentMode indent_mode;
Modified: trunk/src/plugindata.h =================================================================== --- trunk/src/plugindata.h 2007-07-31 17:07:33 UTC (rev 1767) +++ trunk/src/plugindata.h 2007-08-03 15:05:53 UTC (rev 1768) @@ -51,12 +51,12 @@
/* The API version should be incremented whenever any plugin data types below are * modified. */ -static const gint api_version = 7; +static const gint api_version = 8;
/* The ABI version should be incremented whenever existing fields in the plugin * data types below have to be changed or reordered. It should stay the same if fields * are only appended, as this doesn't affect existing fields. */ -static const gint abi_version = 2; +static const gint abi_version = 3;
/* This performs runtime checks that try to ensure: * 1. Geany ABI data types are compatible with this plugin. @@ -124,12 +124,15 @@ MyApp *app; // Geany application data fields GtkWidget *tools_menu; // Almost all plugins should add menu items to the Tools menu only GArray *doc_array; // array of document pointers + struct filetype **filetypes; + struct EditorPrefs *editor_prefs;
DocumentFuncs *document; ScintillaFuncs *sci; TemplateFuncs *templates; UtilsFuncs *utils; UIUtilsFuncs *ui; + struct SupportFuncs *support; } GeanyData;
@@ -152,14 +155,38 @@
struct ScintillaFuncs { + long int (*send_message) (struct _ScintillaObject* sci, unsigned int iMessage, + long unsigned int wParam, long int lParam); + void (*send_command) (struct _ScintillaObject* sci, gint cmd); + + void (*start_undo_action) (struct _ScintillaObject* sci); + void (*end_undo_action) (struct _ScintillaObject* sci); void (*set_text) (struct _ScintillaObject *sci, const gchar *text); void (*insert_text) (struct _ScintillaObject *sci, gint pos, const gchar *text); - gint (*get_current_position) (struct _ScintillaObject *sci); void (*get_text) (struct _ScintillaObject *sci, gint len, gchar* text); gint (*get_length) (struct _ScintillaObject *sci); + gint (*get_current_position) (struct _ScintillaObject *sci); + void (*set_current_position) (struct _ScintillaObject* sci, gint position, gboolean scroll_to_caret); + gint (*get_col_from_position) (struct _ScintillaObject* sci, gint position); + gint (*get_line_from_position) (struct _ScintillaObject* sci, gint position); + gint (*get_position_from_line) (struct _ScintillaObject* sci, gint line); void (*replace_sel) (struct _ScintillaObject* sci, const gchar* text); void (*get_selected_text) (struct _ScintillaObject* sci, gchar* text); gint (*get_selected_text_length) (struct _ScintillaObject* sci); + gint (*get_selection_start) (struct _ScintillaObject* sci); + gint (*get_selection_end) (struct _ScintillaObject* sci); + gint (*get_selection_mode) (struct _ScintillaObject* sci); + void (*set_selection_mode) (struct _ScintillaObject* sci, gint mode); + void (*set_selection_start) (struct _ScintillaObject* sci, gint position); + void (*set_selection_end) (struct _ScintillaObject* sci, gint position); + void (*get_text_range) (struct _ScintillaObject* sci, gint start, gint end, gchar*text); + gchar* (*get_line) (struct _ScintillaObject* sci, gint line_num); + gint (*get_line_length) (struct _ScintillaObject* sci, gint line); + gint (*get_line_count) (struct _ScintillaObject* sci); + gboolean (*get_line_is_visible) (struct _ScintillaObject* sci, gint line); + void (*ensure_line_is_visible) (struct _ScintillaObject* sci, gint line); + void (*scroll_caret) (struct _ScintillaObject* sci); + gint (*find_bracematch) (struct _ScintillaObject* sci, gint pos); };
struct TemplateFuncs @@ -180,4 +207,10 @@ GtkWidget* (*frame_new_with_alignment) (const gchar *label_text, GtkWidget **alignment); };
+typedef struct SupportFuncs +{ + GtkWidget* (*lookup_widget) (GtkWidget *widget, const gchar *widget_name); +} +SupportFuncs; + #endif
Modified: trunk/src/plugins.c =================================================================== --- trunk/src/plugins.c 2007-07-31 17:07:33 UTC (rev 1767) +++ trunk/src/plugins.c 2007-08-03 15:05:53 UTC (rev 1768) @@ -30,6 +30,13 @@
#include <string.h>
+#ifndef PLAT_GTK +# define PLAT_GTK 1 // needed for ScintillaWidget.h +#endif + +#include "Scintilla.h" +#include "ScintillaWidget.h" + #include "plugins.h" #include "plugindata.h" #include "support.h" @@ -38,6 +45,7 @@ #include "templates.h" #include "sciwrappers.h" #include "ui_utils.h" +#include "editor.h"
#ifdef G_OS_WIN32 # define PLUGIN_EXT "dll" @@ -68,14 +76,36 @@ };
static ScintillaFuncs sci_funcs = { + &scintilla_send_message, + &sci_cmd, + &sci_start_undo_action, + &sci_end_undo_action, &sci_set_text, &sci_insert_text, - &sci_get_current_position, &sci_get_text, &sci_get_length, + &sci_get_current_position, + &sci_set_current_position, + &sci_get_col_from_position, + &sci_get_line_from_position, + &sci_get_position_from_line, &sci_replace_sel, &sci_get_selected_text, - &sci_get_selected_text_length + &sci_get_selected_text_length, + &sci_get_selection_start, + &sci_get_selection_end, + &sci_get_selection_mode, + &sci_set_selection_mode, + &sci_set_selection_start, + &sci_set_selection_end, + &sci_get_text_range, + &sci_get_line, + &sci_get_line_length, + &sci_get_line_count, + &sci_get_line_is_visible, + &sci_ensure_line_is_visible, + &sci_scroll_caret, + &sci_find_bracematch };
static TemplateFuncs template_funcs = { @@ -93,17 +123,24 @@ &ui_frame_new_with_alignment };
+static SupportFuncs support_funcs = { + &lookup_widget +};
+ static GeanyData geany_data = { NULL, NULL, NULL, + NULL, + NULL,
&doc_funcs, &sci_funcs, &template_funcs, &utils_funcs, &uiutils_funcs, + &support_funcs };
@@ -113,6 +150,8 @@ geany_data.app = app; geany_data.tools_menu = lookup_widget(app->window, "tools1_menu"); geany_data.doc_array = doc_array; + geany_data.filetypes = filetypes; + geany_data.editor_prefs = &editor_prefs; }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.