From: Rodrigo Moya (rodrigo@gnome-db.org)
Date: Wed Jul 09 2003 - 08:03:11 EDT
On Wed, 2003-07-09 at 04:22, Dom Lachowicz wrote:
> Bump required version up to 0.90.0 for GDA and
> LibGnomeDB
>
> Also do a bunch of work toward importing GdaDataModels
> as tables. Once there's a standard for .connection
> files being used as queries, we should be able to
> import a result set as a table.
>
> Right now, we have the ability to "paste" a result set
> in as a table, in theory.
>
wow, that's nice, although I haven't been able to test it, since I've
got my local copy with modifications to add the Tools->Data Sources menu
item, and it displays:
DEBUG: DOM: loading plugin
/opt/gnome/lib/AbiWord-2.0/plugins/libAbiGDA.so
**** (1) Assert ****
**** (1) UT_SHOULD_NOT_HAPPEN at ap_Menu_Layouts.cpp:334 ****
**** (1) Continue ? (y/n) [y] :
see the attached patch to check what I'm doing.
cheers
? acinclude.m4
? autom4te.cache
? install-sh
? missing
? mkinstalldirs
? plugin.status
? tools/gda/unix/.libs
? tools/gda/unix/AbiGDA.lo
? tools/gda/unix/libAbiGDA.la
? tools/google/GNUmakefile
? tools/ots/GNUmakefile
? tools/ots/xp/GNUmakefile
? wp/impexp/OpenWriter/xp/.libs
? wp/impexp/OpenWriter/xp/ie_exp_OpenWriter.lo
? wp/impexp/OpenWriter/xp/ie_imp_OpenWriter.lo
? wp/impexp/OpenWriter/xp/ie_impexp_OpenWriter.lo
? wp/impexp/OpenWriter/xp/libAbiOpenWriter.la
? wp/impexp/docbook/xp/.libs
? wp/impexp/docbook/xp/ie_exp_DocBook.lo
? wp/impexp/docbook/xp/ie_imp_DocBook.lo
? wp/impexp/docbook/xp/ie_impexp_DocBook.lo
? wp/impexp/docbook/xp/libAbiDocBook.la
Index: tools/gda/unix/AbiGDA.cpp
===================================================================
RCS file: /cvsroot/abiword-plugins/tools/gda/unix/AbiGDA.cpp,v
retrieving revision 1.8
diff -u -p -r1.8 AbiGDA.cpp
--- tools/gda/unix/AbiGDA.cpp 9 Jul 2003 02:34:43 -0000 1.8
+++ tools/gda/unix/AbiGDA.cpp 9 Jul 2003 12:02:00 -0000
@@ -54,8 +54,6 @@
#include <libgnomedb/gnome-db-login.h>
#include <libgnomedb/gnome-db-util.h>
-static const char* GDA_MenuLabel = "G&DA Database";
-static const char* GDA_MenuTooltip = "Mailmerge using a database";
static GdaClient* connection_pool = NULL;
// -----------------------------------------------------------------------
@@ -352,6 +350,33 @@ GDA_execSQL(AV_View* v, EV_EditMethodCal
return ret;
}
+//
+// GDA_viewDataSources
+// -------------------
+static bool
+GDA_viewDataSources(AV_View* v, EV_EditMethodCallData *d)
+{
+ char *argv[2];
+
+ /* run gnome-database-properties config tool */
+ argv[0] = (char *) "gnome-database-properties";
+ argv[1] = NULL;
+
+ return g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH,
+ NULL, NULL, NULL, NULL);
+}
+
+const static struct {
+ const char * methodName;
+ EV_EditMethod_pFn method;
+ const char * label;
+ const char * description;
+ EV_Menu_LayoutFlags flags; // usually EV_MLF_Normal
+} gda_menus [] = {
+ { "GDA_execSQL", GDA_execSQL, "G&DA Database", "Mailmerge using a database", EV_MLF_Normal },
+ { "GDA_viewDataSources", GDA_viewDataSources, "Data Sources", "Configure and admin data sources", EV_MLF_Normal }
+};
+
static void
GDA_removeFromMenus()
{
@@ -368,40 +393,30 @@ GDA_removeFromMenus()
int frameCount = pApp->getFrameCount();
XAP_Menu_Factory * pFact = pApp->getMenuFactory();
- pFact->removeMenuItem("Main",NULL,GDA_MenuLabel);
- for(int i = 0; i < frameCount; ++i)
- {
- // Get the current frame that we're iterating through.
- XAP_Frame* pFrame = pApp->getFrame(i);
- pFrame->rebuildMenus();
- }
+ UT_uint32 i;
+ for (i = 0; i < G_N_ELEMENTS (gda_menus); i++) {
+ pFact->removeMenuItem("Main",NULL,gda_menus[i].label);
+ }
+
+ for(int i = 0; i < frameCount; ++i) {
+ // Get the current frame that we're iterating through.
+ XAP_Frame* pFrame = pApp->getFrame(i);
+ pFrame->rebuildMenus();
+ }
}
static void
GDA_addToMenus()
{
+ UT_uint32 i;
+
// First we need to get a pointer to the application itself.
XAP_App *pApp = XAP_App::getApp();
- // Create an EditMethod that will link our method's name with
- // it's callback function. This is used to link the name to
- // the callback.
- EV_EditMethod *myEditMethod = new EV_EditMethod("GDA_execSQL", // name of callback function
- GDA_execSQL, // callback function itself.
- 0, // no additional data required.
- "" // description -- allegedly never used for anything
- );
-
// Now we need to get the EditMethod container for the application.
// This holds a series of Edit Methods and links names to callbacks.
EV_EditMethodContainer* pEMC = pApp->getEditMethodContainer();
-
- // We have to add our EditMethod to the application's EditMethodList
- // so that the application will know what callback to call when a call
- // to "AiksaurusABI_invoke" is received.
- pEMC->addEditMethod(myEditMethod);
-
-
+
// Now we need to grab an ActionSet. This is going to be used later
// on in our for loop. Take a look near the bottom.
EV_Menu_ActionSet* pActionSet = pApp->getMenuActionSet();
@@ -414,37 +429,50 @@ GDA_addToMenus()
int frameCount = pApp->getFrameCount();
XAP_Menu_Factory * pFact = pApp->getMenuFactory();
-
- //
- // Put it in the main menu.
- //
- XAP_Menu_Id newID = pFact->addNewMenuAfter("Main",NULL,"&Mail Merge",EV_MLF_Normal);
- pFact->addNewLabel(NULL,newID,GDA_MenuLabel, GDA_MenuTooltip);
-
- // Create the Action that will be called.
- EV_Menu_Action* myAction = new EV_Menu_Action(newID, // id that the layout said we could use
- 0, // no, we don't have a sub menu.
- 1, // yes, we raise a dialog.
- 0, // no, we don't have a checkbox.
- 0,
- "GDA_execSQL", // name of callback function to call.
- NULL, // don't know/care what this is for
- NULL // don't know/care what this is for
- );
-
- // Now what we need to do is add this particular action to the ActionSet
- // of the application. This forms the link between our new ID that we
- // got for this particular frame with the EditMethod that knows how to
- // call our callback function.
-
- pActionSet->addAction(myAction);
-
- for(int i = 0; i < frameCount; ++i)
- {
- // Get the current frame that we're iterating through.
- XAP_Frame* pFrame = pApp->getFrame(i);
- pFrame->rebuildMenus();
- }
+
+ for (i = 0; i < G_N_ELEMENTS (gda_menus); i++) {
+ // Create an EditMethod that will link our method's name with
+ // it's callback function. This is used to link the name to
+ // the callback.
+ EV_EditMethod *myEditMethod = new EV_EditMethod(gda_menus[i].methodName,
+ gda_menus[i].method,
+ 0,
+ "");
+
+ // We have to add our EditMethod to the application's EditMethodList
+ // so that the application will know what callback to call when a call
+ // to "AiksaurusABI_invoke" is received.
+ pEMC->addEditMethod(myEditMethod);
+
+ //
+ // Put it in the main menu.
+ //
+ const char *prev = "S&cripts...";
+ if (i != 0)
+ prev = gda_menus[i - 1].label;
+ XAP_Menu_Id newID = pFact->addNewMenuAfter("Main",NULL,
+ prev,
+ gda_menus[i].flags);
+ pFact->addNewLabel(NULL,newID,gda_menus[i].label, gda_menus[i].description);
+
+ // Create the Action that will be called.
+ EV_Menu_Action* myAction = new EV_Menu_Action(newID, 0, 1, 0, 0,
+ (const char *) gda_menus[i].methodName,
+ NULL, NULL);
+
+ // Now what we need to do is add this particular action to the ActionSet
+ // of the application. This forms the link between our new ID that we
+ // got for this particular frame with the EditMethod that knows how to
+ // call our callback function.
+
+ pActionSet->addAction(myAction);
+ }
+
+ for(int i = 0; i < frameCount; ++i) {
+ // Get the current frame that we're iterating through.
+ XAP_Frame* pFrame = pApp->getFrame(i);
+ pFrame->rebuildMenus();
+ }
}
// -----------------------------------------------------------------------
This archive was generated by hypermail 2.1.4 : Wed Jul 09 2003 - 08:16:15 EDT