static void AbiGOffice_removeFromMenus () { // First we need to get a pointer to the application itself. XAP_App *pApp = XAP_App::getApp(); XAP_Menu_Factory * pFact = pApp->getMenuFactory(); // remove the edit method EV_EditMethodContainer* pEMC = pApp->getEditMethodContainer() ; EV_EditMethod * pEM = ev_EditMethod_lookup ( "AbiGOChart_Create" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; pFact->removeMenuItem("Main",NULL,InsertGOChartID); if (g_slist_length (mime_types) > 0) { pEM = ev_EditMethod_lookup ( "AbiGOComponent_FileInsert" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; pEM = ev_EditMethod_lookup ( "AbiGOComponent_Create" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; pFact->removeMenuItem("Main",NULL,InsertGOComponentFromFileID); pFact->removeMenuItem("Main",NULL,CreateGOComponentID); } pFact->removeMenuItem("Main",NULL,newObjectID); int frameCount = pApp->getFrameCount(); for(int i = 0;i < frameCount;++i) { // Get the current frame that we're iterating through. XAP_Frame* pFrame = pApp->getFrame(i); pFrame->rebuildMenus(); } }
bool Presentation::end(void) { if(m_sPrevBindings.size() == 0) return false; EV_EditMethodContainer * pEMC = m_pApp->getEditMethodContainer(); g_return_val_if_fail (pEMC != 0, FALSE); UT_sint32 i = m_pApp->setInputMode(m_sPrevBindings.c_str()); if(i <=0 ) return false; // get a handle to the actual EditMethod EV_EditMethod * pFullScreen = pEMC->findEditMethodByName ("viewFullScreen"); g_return_val_if_fail (pFullScreen != 0, false); const char * sz =""; EV_EditMethodCallData calldata(sz,0); calldata.m_xPos = 0; calldata.m_yPos = 0; XAP_Frame * pFrame = static_cast<XAP_Frame*>(m_pView->getParentData()); pFrame->hideMenuScroll(false); bool b= (pFullScreen->Fn(static_cast<AV_View *>(m_pView),&calldata) ? TRUE : FALSE); pFrame->setZoomType(m_OldZoomType); pFrame->setZoomPercentage(m_iOldZoom); pFrame->quickZoom(m_iOldZoom); return b; }
static void AikSaurusABI_RemoveFromMenus () { // First we need to get a pointer to the application itself. XAP_App *pApp = XAP_App::getApp(); // remove the edit method EV_EditMethodContainer* pEMC = pApp->getEditMethodContainer() ; EV_EditMethod * pEM = ev_EditMethod_lookup ( "AiksaurusABI_invoke" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; // now remove crap from the menus int frameCount = pApp->getFrameCount(); XAP_Menu_Factory * pFact = pApp->getMenuFactory(); pFact->removeMenuItem("Main",NULL,AiksaurusABI_MenuLabel); pFact->removeMenuItem("contextText",NULL,AiksaurusABI_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(); } }
static void AbiMathView_removeFromMenus () { // First we need to get a pointer to the application itself. XAP_App *pApp = XAP_App::getApp(); // remove the edit method EV_EditMethodContainer* pEMC = pApp->getEditMethodContainer() ; EV_EditMethod * pEM = ev_EditMethod_lookup ( "AbiMathView_FileInsert" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; pEM = ev_EditMethod_lookup ( "AbiMathView_LatexInsert" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; // now remove crap from the menus XAP_Menu_Factory * pFact = pApp->getMenuFactory(); pFact->removeMenuItem("Main",NULL,newEquationID); pFact->removeMenuItem("Main",NULL,FromFileID); pFact->removeMenuItem("Main",NULL,FromLatexID); pFact->removeMenuItem("Main",NULL, endEquationID); pApp->rebuildMenus(); }
bool AP_App::openCmdLinePlugins(const AP_Args * Args, bool &bSuccess) { if(Args->m_sPluginArgs) { // // Start a plugin rather than the main abiword application. // const char * szName = NULL; XAP_Module * pModule = NULL; const char * szRequest = NULL; bool bFound = false; if(Args->m_sPluginArgs[0]) { szRequest = Args->m_sPluginArgs[0]; const UT_GenericVector<XAP_Module*> * pVec = XAP_ModuleManager::instance().enumModules (); UT_DEBUGMSG((" %d plugins loaded \n",pVec->getItemCount())); for (UT_sint32 i = 0; (i < pVec->size()) && !bFound; i++) { pModule = pVec->getNthItem (i); szName = pModule->getModuleInfo()->name; UT_DEBUGMSG(("%s\n", szName)); if(strcmp(szName,szRequest) == 0) { bFound = true; } } } if(!bFound) { fprintf(stderr, "Plugin %s not found or loaded \n",szRequest); bSuccess = false; return false; } // // You must put the name of the ev_EditMethod in the usage field // of the plugin registered information. // const char * evExecute = pModule->getModuleInfo()->usage; EV_EditMethodContainer* pEMC = Args->getApp()->getEditMethodContainer(); const EV_EditMethod * pInvoke = pEMC->findEditMethodByName(evExecute); if(!pInvoke) { fprintf(stderr, "Plugin %s invoke method %s not found \n", Args->m_sPluginArgs[0],evExecute); bSuccess = false; return false; } // // Execute the plugin, then quit // UT_String *sCommandLine = Args->getPluginOptions(); ev_EditMethod_invoke(pInvoke, *sCommandLine); delete sCommandLine; return false; } return true; }
bool Presentation::start(AV_View * view) { EV_EditMethodContainer * pEMC = m_pApp->getEditMethodContainer(); g_return_val_if_fail (pEMC != 0, FALSE); m_pView = static_cast<FV_View *>(view); m_sPrevBindings = m_pApp->getInputMode(); _loadPresentationBindings(view); UT_sint32 i = m_pApp->setInputMode("Presentation"); if(i < 0 ) return false; // get a handle to the actual EditMethod EV_EditMethod * pFullScreen = pEMC->findEditMethodByName ("viewFullScreen"); g_return_val_if_fail (pFullScreen != 0, false); const char * sz =""; EV_EditMethodCallData calldata(sz,0); calldata.m_xPos = 0; calldata.m_yPos = 0; m_iPage = 0; XAP_Frame * pFrame = static_cast<XAP_Frame*>(m_pView->getParentData()); m_OldZoomType = pFrame->getZoomType(); m_iOldZoom = pFrame->getZoomPercentage(); pFrame->hideMenuScroll(true); bool b = false; b = (pFullScreen->Fn(view,&calldata) ? TRUE : FALSE); GR_Graphics * pG = m_pView->getGraphics(); // // Let all the configure events propagate to their full extent // for(i= 0; i<20;i++) pFrame->nullUpdate(); pFrame->setZoomType(XAP_Frame::z_PAGEWIDTH); i = m_pView-> calculateZoomPercentForPageWidth(); pFrame->quickZoom(i); for(i= 0; i<20;i++) pFrame->nullUpdate(); b= showNextPage(); if(pG) pG->allCarets()->disable(); return b; }
bool Presentation::_loadPresentationBindings(AV_View * pView) { EV_EditMethodContainer * pEMC = m_pApp->getEditMethodContainer(); g_return_val_if_fail (pEMC != 0, FALSE); if(m_pApp->getBindingMap("Presentation") != NULL) { return true; } // get the path where our app data is located XAP_App * pApp = static_cast<XAP_App*>(XAP_App::getApp()); UT_String data_path( pApp->getAbiSuiteLibDir() ); data_path += G_DIR_SEPARATOR; data_path += "Presentation.xml"; EV_EditMethod * pLoadB = pEMC->findEditMethodByName ("com.abisource.abiword.loadbindings.fromURI"); g_return_val_if_fail (pLoadB != 0, false); EV_EditMethodCallData calldata(data_path.c_str(),data_path.size()); calldata.m_xPos = 0; calldata.m_yPos = 0; return (pLoadB->Fn(pView,&calldata) ? TRUE : FALSE); }
static void Presentation_RemoveFromMethods () { // First we need to get a pointer to the application itself. XAP_App *pApp = XAP_App::getApp (); // remove the edit method EV_EditMethodContainer *pEMC = pApp->getEditMethodContainer (); EV_EditMethod *pEM = ev_EditMethod_lookup ("Presentation_start"); pEMC->removeEditMethod (pEM); DELETEP (pEM); pEM = ev_EditMethod_lookup ("Presentation_end"); pEMC->removeEditMethod (pEM); DELETEP (pEM); pEM = ev_EditMethod_lookup ("Presentation_nextPage"); pEMC->removeEditMethod (pEM); DELETEP (pEM); pEM = ev_EditMethod_lookup ("Presentation_prevPage"); pEMC->removeEditMethod (pEM); DELETEP (pEM); pEM = ev_EditMethod_lookup ("Presentation_context"); pEMC->removeEditMethod (pEM); DELETEP (pEM); XAP_Menu_Factory * pFact = pApp->getMenuFactory(); pFact->removeMenuItem("Main",NULL,presentationID); }
static void AbiGOffice_addToMenus() { // First we need to get a pointer to the application itself. XAP_App *pApp = XAP_App::getApp(); // // Translated Strings // // const XAP_StringSet * pSS = pApp->getStringSet(); // AbiMathView_MenuLabelEquation= pSS->getValue(AP_STRING_ID_MENU_LABEL_INSERT_EQUATION); // AbiMathView_MenuTooltipEquation = pSS->getValue(AP_STRING_ID_MENU_LABEL_TOOLTIP_INSERT_EQUATION); // AbiMathView_MenuLabelFileInsert = pSS->getValue(AP_STRING_ID_MENU_LABEL_INSERT_EQUATION_FILE); // AbiMathView_MenuTooltipFileInsert = pSS->getValue(AP_STRING_ID_MENU_LABEL_TOOLTIP_INSERT_EQUATION_FILE); // 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 *myEditMethodFile = new EV_EditMethod( "AbiGOChart_Create", // name of callback function AbiGOChart_Create, // 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 "AbiMathView_FileInsert" is received. pEMC->addEditMethod(myEditMethodFile); // 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(); XAP_Menu_Factory * pFact = pApp->getMenuFactory(); // Look to see if "Object" has been loaded already.. bool bObjectExists = true; if(newObjectID <= 0) { // Put it after Insert Picture in the Main menu // FIXME put it before! bObjectExists = false; newObjectID= pFact->addNewMenuBefore("Main",NULL,AP_MENU_ID_INSERT_DIRECTIONMARKER,EV_MLF_BeginSubMenu); } UT_DEBUGMSG(("newObjectID %d \n",newObjectID)); pFact->addNewLabel(NULL,newObjectID,Object_MenuLabelObject, Object_MenuTooltipObject); // Create the Action that will be called. EV_Menu_Action* myObjectAction = new EV_Menu_Action( newObjectID, // id that the layout said we could use 1, // yes, we have a sub menu. 0, // no, we don't raise a dialog. 0, // no, we don't have a checkbox. 0, // no radio buttons for me, thank you NULL, // no 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(myObjectAction); InsertGOChartID= pFact->addNewMenuAfter("Main",NULL,newObjectID,EV_MLF_Normal); UT_DEBUGMSG(("GOChart ID %d \n",InsertGOChartID)); pFact->addNewLabel(NULL, InsertGOChartID,AbiGOChart_MenuLabelInsert, AbiGOChart_MenuTooltipInsert); // Create the Action that will be called. EV_Menu_Action* myChartAction = new EV_Menu_Action( InsertGOChartID, // 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, // no radio buttons for me, thank you "AbiGOChart_Create", // 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(myChartAction); if (g_slist_length (mime_types) > 0) { myEditMethodFile = new EV_EditMethod( "AbiGOComponent_FileInsert", // name of callback function AbiGOComponent_FileInsert, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); pEMC->addEditMethod(myEditMethodFile); myEditMethodFile = new EV_EditMethod( "AbiGOComponent_Create", // name of callback function AbiGOComponent_Create, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); pEMC->addEditMethod(myEditMethodFile); InsertGOComponentFromFileID= pFact->addNewMenuAfter("Main",NULL,InsertGOChartID,EV_MLF_Normal); UT_DEBUGMSG(("GOComponentFromFile ID %d \n",InsertGOComponentFromFileID)); pFact->addNewLabel(NULL, InsertGOComponentFromFileID,AbiGOComponent_MenuLabelInsertFromFile, AbiGOComponent_MenuTooltipInsertFromFile); // Create the Action that will be called. EV_Menu_Action* myFileAction = new EV_Menu_Action( InsertGOComponentFromFileID, // 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, // no radio buttons for me, thank you "AbiGOComponent_FileInsert", // 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(myFileAction); CreateGOComponentID= pFact->addNewMenuAfter("Main",NULL,InsertGOComponentFromFileID,EV_MLF_Normal); UT_DEBUGMSG(("CreateGOComponent ID %d \n",CreateGOComponentID)); pFact->addNewLabel(NULL, CreateGOComponentID,AbiGOComponent_MenuLabelCreate, AbiGOComponent_MenuTooltipCreate); // Create the Action that will be called. EV_Menu_Action* myCompAction = new EV_Menu_Action( CreateGOComponentID, // 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, // no radio buttons for me, thank you "AbiGOComponent_Create", // 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(myCompAction); if(!bObjectExists) { XAP_Menu_Id endObjectID= pFact->addNewMenuAfter("Main",NULL,CreateGOComponentID,EV_MLF_EndSubMenu); UT_DEBUGMSG(("End Object ID %d \n",endObjectID)); pFact->addNewLabel(NULL,endObjectID,NULL,NULL); // Create the Action that will be called. EV_Menu_Action* myEndObjectAction = new EV_Menu_Action( endObjectID, // id that the layout said we could use 0, // no, we don't have a sub menu. 0, // no, we raise a dialog. 0, // no, we don't have a checkbox. 0, // no radio buttons for me, thank you NULL, // name of callback function to call. NULL, // don't know/care what this is for NULL // don't know/care what this is for ); pActionSet->addAction(myEndObjectAction); } } else if(!bObjectExists) { XAP_Menu_Id endObjectID= pFact->addNewMenuAfter("Main",NULL,InsertGOChartID,EV_MLF_EndSubMenu); UT_DEBUGMSG(("End Object ID %d \n",endObjectID)); pFact->addNewLabel(NULL,endObjectID,NULL,NULL); // Create the Action that will be called. EV_Menu_Action* myEndObjectAction = new EV_Menu_Action( endObjectID, // id that the layout said we could use 0, // no, we don't have a sub menu. 0, // no, we raise a dialog. 0, // no, we don't have a checkbox. 0, // no radio buttons for me, thank you NULL, // name of callback function to call. NULL, // don't know/care what this is for NULL // don't know/care what this is for ); pActionSet->addAction(myEndObjectAction); } // We need to go through and add the menu element to each "frame" // of the application. We can iterate through the frames by doing // XAP_App::getFrameCount() to tell us how many frames there are, // then calling XAP_App::getFrame(i) to get the i-th frame. int frameCount = pApp->getFrameCount(); for(int i = 0;i < frameCount;++i) { // Get the current frame that we're iterating through. XAP_Frame* pFrame = pApp->getFrame(i); pFrame->rebuildMenus(); } }
// // AiksaurusABI_addToMenus // ----------------------- // Adds "Thesaurus" option to AbiWord's Tools Menu. // static void AiksaurusABI_addToMenus() { // 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( "AiksaurusABI_invoke", // name of callback function AiksaurusABI_invoke, // 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(); // We need to go through and add the menu element to each "frame" // of the application. We can iterate through the frames by doing // XAP_App::getFrameCount() to tell us how many frames there are, // then calling XAP_App::getFrame(i) to get the i-th frame. int frameCount = pApp->getFrameCount(); XAP_Menu_Factory * pFact = pApp->getMenuFactory(); // // Put it in the context menu. // XAP_Menu_Id newID = pFact->addNewMenuAfter("contextText",NULL,"Bullets and &Numbering",EV_MLF_Normal); pFact->addNewLabel(NULL,newID,AiksaurusABI_MenuLabel, AiksaurusABI_MenuTooltip); // // Also put it under word Wount in the main menu, // pFact->addNewMenuAfter("Main",NULL,"&Word Count",EV_MLF_Normal,newID); // 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, "AiksaurusABI_invoke", // 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(); } }
/*! * A callback for AP_Args's doWindowlessArgs call which handles * platform-specific windowless args. * return false if we should exit normally but Window should not be displayed */ bool AP_Win32App::doWindowlessArgs(const AP_Args *Args, bool & bSuccess) { bSuccess = true; AP_Win32App * pMyWin32App = static_cast<AP_Win32App*>(Args->getApp()); if (Args->m_sGeometry) { // [--geometry <X geometry string>] #if 0 gint x = 0; gint y = 0; guint width = 0; guint height = 0; XParseGeometry(Args->m_sGeometry, &x, &y, &width, &height); // set the xap-level geometry for future frame use Args->getApp()->setGeometry(x, y, width, height, f); #endif parseAndSetGeometry(Args->m_sGeometry); } else if (Args->m_sPrintTo) { if (Args->m_sFiles[0]) { UT_DEBUGMSG(("DOM: Printing file %s\n", Args->m_sFiles[0])); AP_Convert conv ; if (Args->m_sMerge) conv.setMergeSource (Args->m_sMerge); if (Args->m_impProps) conv.setImpProps (Args->m_impProps); if (Args->m_expProps) conv.setExpProps (Args->m_expProps); UT_String s = "AbiWord: "; s+= Args->m_sFiles[0]; UT_Win32LocaleString prn, doc; prn.fromASCII (Args->m_sPrintTo); doc.fromASCII (s.c_str()); GR_Graphics * pG = GR_Win32Graphics::getPrinterGraphics(prn.c_str(), doc.c_str()); if(!pG) { // do not assert here, if the graphics creation failed, the static // constructor has asserted already somewhere more relevant return false; } conv.setVerbose(Args->m_iVerbose); conv.print (Args->m_sFiles[0], pG, Args->m_sFileExtension); delete pG; } else { // couldn't load document UT_DEBUGMSG(("Error: no file to print!\n")); bSuccess = false; } return false; } if(Args->m_sPluginArgs) { // // Start a plugin rather than the main abiword application. // const char * szName = NULL; XAP_Module * pModule = NULL; bool bFound = false; if(Args->m_sPluginArgs[0]) { const char * szRequest = Args->m_sPluginArgs[0]; const UT_GenericVector<XAP_Module*> * pVec = XAP_ModuleManager::instance().enumModules (); UT_DEBUGMSG((" %d plugins loaded \n",pVec->getItemCount())); for (UT_sint32 i = 0; (i < pVec->size()) && !bFound; i++) { pModule = pVec->getNthItem (i); szName = pModule->getModuleInfo()->name; UT_DEBUGMSG(("%s\n", szName)); if(strcmp(szName,szRequest) == 0) { bFound = true; } } } if(!bFound) { UT_DEBUGMSG(("Plugin %s not found or loaded \n",Args->m_sPluginArgs[0])); bSuccess = false; return false; } // // You must put the name of the ev_EditMethod in the usage field // of the plugin registered information. // const char * evExecute = pModule->getModuleInfo()->usage; EV_EditMethodContainer* pEMC = pMyWin32App->getEditMethodContainer(); const EV_EditMethod * pInvoke = pEMC->findEditMethodByName(evExecute); if(!pInvoke) { UT_DEBUGMSG(("Plugin %s invoke method %s not found \n", Args->m_sPluginArgs[0],evExecute)); bSuccess = false; return false; } // // Execute the plugin, then quit // ev_EditMethod_invoke(pInvoke, UT_String("Called From App")); return false; } return true; }
static void AbiMathView_addToMenus() { // First we need to get a pointer to the application itself. XAP_App *pApp = XAP_App::getApp(); // // Translated Strings // const XAP_StringSet * pSS = pApp->getStringSet(); AbiMathView_MenuLabelEquation= pSS->getValue(AP_STRING_ID_MENU_LABEL_INSERT_EQUATION); AbiMathView_MenuTooltipEquation = pSS->getValue(AP_STRING_ID_MENU_LABEL_TOOLTIP_INSERT_EQUATION); AbiMathView_MenuLabelFileInsert = pSS->getValue(AP_STRING_ID_MENU_LABEL_INSERT_EQUATION_FILE); AbiMathView_MenuTooltipFileInsert = pSS->getValue(AP_STRING_ID_MENU_LABEL_TOOLTIP_INSERT_EQUATION_FILE); AbiMathView_MenuLabelLatexInsert = pSS->getValue(AP_STRING_ID_MENU_LABEL_INSERT_EQUATION_LATEX); AbiMathView_MenuTooltipLatexInsert = pSS->getValue(AP_STRING_ID_MENU_LABEL_TOOLTIP_INSERT_EQUATION_LATEX); // 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 *myEditMethodFile = new EV_EditMethod( "AbiMathView_FileInsert", // name of callback function AbiMathView_FileInsert, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); EV_EditMethod *myEditMethodLatex = new EV_EditMethod( "AbiMathView_LatexInsert", // name of callback function AbiMathView_LatexInsert, // 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 "AbiMathView_FileInsert" is received. pEMC->addEditMethod(myEditMethodFile); pEMC->addEditMethod(myEditMethodLatex); // 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(); XAP_Menu_Factory * pFact = pApp->getMenuFactory(); // Put it after Insert Picture in the Main menu newEquationID= pFact->addNewMenuAfter("Main",NULL,AP_MENU_ID_INSERT_GRAPHIC,EV_MLF_BeginSubMenu); UT_DEBUGMSG(("newEquationID %d \n",newEquationID)); pFact->addNewLabel(NULL,newEquationID,AbiMathView_MenuLabelEquation, AbiMathView_MenuTooltipEquation); // Create the Action that will be called. EV_Menu_Action* myEquationAction = new EV_Menu_Action( newEquationID, // id that the layout said we could use 1, // yes, we have a sub menu. 0, // no, we don't raise a dialog. 0, // no, we don't have a checkbox. 0, // no radio buttons for me, thank you NULL, // no 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(myEquationAction); FromFileID= pFact->addNewMenuAfter("Main",NULL,newEquationID,EV_MLF_Normal); UT_DEBUGMSG(("FromFile ID %d \n",FromFileID)); pFact->addNewLabel(NULL,FromFileID,AbiMathView_MenuLabelFileInsert, AbiMathView_MenuTooltipFileInsert); // Create the Action that will be called. EV_Menu_Action* myFileAction = new EV_Menu_Action( FromFileID, // 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, // no radio buttons for me, thank you "AbiMathView_FileInsert", // 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(myFileAction); FromLatexID= pFact->addNewMenuAfter("Main",NULL,FromFileID,EV_MLF_Normal); UT_DEBUGMSG(("Latex ID %d \n",FromLatexID)); pFact->addNewLabel(NULL,FromLatexID,AbiMathView_MenuLabelLatexInsert, AbiMathView_MenuTooltipLatexInsert); // Create the Action that will be called. EV_Menu_Action* myLatexAction = new EV_Menu_Action( FromLatexID, // 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, // no radio buttons for me, thank you "AbiMathView_LatexInsert", // name of callback function to call. NULL, // don't know/care what this is for NULL // don't know/care what this is for ); pActionSet->addAction(myLatexAction); endEquationID= pFact->addNewMenuAfter("Main",NULL,AbiMathView_MenuLabelLatexInsert,EV_MLF_EndSubMenu); UT_DEBUGMSG(("End Equation ID %d \n",endEquationID)); pFact->addNewLabel(NULL,endEquationID,AbiMathView_MenuEndEquation,NULL); // Create the Action that will be called. EV_Menu_Action* myEndEquationAction = new EV_Menu_Action( endEquationID, // id that the layout said we could use 0, // no, we don't have a sub menu. 0, // no, we raise a dialog. 0, // no, we don't have a checkbox. 0, // no radio buttons for me, thank you NULL, // name of callback function to call. NULL, // don't know/care what this is for NULL // don't know/care what this is for ); pActionSet->addAction(myEndEquationAction); pApp->rebuildMenus(); }
EV_EditMethod* ev_EditMethod_lookup (const char * methodName) { UT_ASSERT(methodName); EV_EditMethodContainer* pEMC = XAP_App::getApp()->getEditMethodContainer() ; return pEMC->findEditMethodByName ( methodName ) ; }
// // Presentation_registerMethod() // ----------------------- // Adds Presentation_start, Presentation_end to the EditMethod list // static void Presentation_registerMethod () { // 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 ("Presentation_start", // name of callback function Presentation_start, // 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 pEMC->addEditMethod (myEditMethod); myEditMethod = new EV_EditMethod ("Presentation_end", // name of callback function Presentation_end, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); pEMC->addEditMethod (myEditMethod); myEditMethod = new EV_EditMethod ("Presentation_nextPage", // name of callback function Presentation_nextPage, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); pEMC->addEditMethod (myEditMethod); myEditMethod = new EV_EditMethod ("Presentation_prevPage", // name of callback function Presentation_prevPage, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); pEMC->addEditMethod (myEditMethod); myEditMethod = new EV_EditMethod ("Presentation_context", // name of callback function Presentation_context, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); 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(); XAP_Menu_Factory * pFact = pApp->getMenuFactory(); // Put it after presentationID= pFact->addNewMenuAfter("Main",NULL,AP_MENU_ID_VIEW_SHOWPARA,EV_MLF_Normal); UT_DEBUGMSG(("presentationID %d \n",presentationID)); pFact->addNewLabel(NULL,presentationID,szPresentation,szPresentationStatus); // Create the Action that will be called. EV_Menu_Action* myPresentationAction = new EV_Menu_Action( presentationID, // id that the layout said we could use 0, // no, we don't have a sub menu. 0, // no, we don't raise a dialog. 0, // no, we don't have a checkbox. 0, // no radio buttons for me, thank you "Presentation_start", // 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(myPresentationAction); // // OK Now build a context menu // PresentationContextID = pFact->createContextMenu("PresentationContext"); prevSlideID = pFact->addNewMenuBefore("PresentationContext",NULL,0,EV_MLF_Normal,0); pFact->addNewLabel(NULL,prevSlideID,szPrevSlide, NULL); nextSlideID = pFact->addNewMenuBefore("PresentationContext",NULL,0,EV_MLF_Normal,0); pFact->addNewLabel(NULL,nextSlideID,szNextSlide, NULL); endPresentationID = pFact->addNewMenuBefore("PresentationContext",NULL,0,EV_MLF_Normal,0); pFact->addNewLabel(NULL,endPresentationID,szEndPresentation, NULL); myPresentationAction = new EV_Menu_Action( prevSlideID, // id that the layout said we could use 0, // no, we don't have a sub menu. 0, // no, we don't raise a dialog. 0, // no, we don't have a checkbox. 0, // no radio buttons for me, thank you "Presentation_prevPage", // callback function to call. NULL, // don't know/care what this is for NULL // don't know/care what this is for ); pActionSet->addAction(myPresentationAction); myPresentationAction = new EV_Menu_Action( nextSlideID, // id that the layout said we could use 0, // no, we don't have a sub menu. 0, // no, we don't raise a dialog. 0, // no, we don't have a checkbox. 0, // no radio buttons for me, thank you "Presentation_nextPage", // callback function to call. NULL, // don't know/care what this is for NULL // don't know/care what this is for ); pActionSet->addAction(myPresentationAction); myPresentationAction = new EV_Menu_Action( endPresentationID, // id that the layout said we could use 0, // no, we don't have a sub menu. 0, // no, we don't raise a dialog. 0, // no, we don't have a checkbox. 0, // no radio buttons for me, thank you "Presentation_end", // callback function to call. NULL, // don't know/care what this is for NULL // don't know/care what this is for ); pActionSet->addAction(myPresentationAction); }
/*! * Remove the menu items unpon unloading the plugin. */ void s_abicollab_remove_menus() { // First we need to get a pointer to the application itself. XAP_App *pApp = XAP_App::getApp(); // remove the edit method EV_EditMethodContainer* pEMC = pApp->getEditMethodContainer(); EV_EditMethod * pEM; pEM = ev_EditMethod_lookup ( "s_abicollab_offer" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; pEM = ev_EditMethod_lookup ( "s_abicollab_join" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; pEM = ev_EditMethod_lookup ( "s_abicollab_accounts" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; pEM = ev_EditMethod_lookup ( "s_abicollab_authors" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; #if !defined(ABICOLLAB_RECORD_ALWAYS) && defined(DEBUG) pEM = ev_EditMethod_lookup ( "s_abicollab_record" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; #endif #if defined(DEBUG) pEM = ev_EditMethod_lookup ( "s_abicollab_viewrecord" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; #endif pEM = ev_EditMethod_lookup ( "com.abisource.abiword.abicollab.command" ) ; pEMC->removeEditMethod ( pEM ) ; DELETEP( pEM ) ; // now remove crap from the menus int frameCount = pApp->getFrameCount(); XAP_Menu_Factory * pFact = pApp->getMenuFactory(); pFact->removeMenuItem("Main", NULL, szCollaboration); pFact->removeMenuItem("Main", NULL, szCollaborationOffer); pFact->removeMenuItem("Main", NULL, szCollaborationJoin); pFact->removeMenuItem("Main", NULL, szCollaborationAccounts); pFact->removeMenuItem("Main", NULL, szCollaborationShowAuthors); #if !defined(ABICOLLAB_RECORD_ALWAYS) && defined(DEBUG) pFact->removeMenuItem("Main", NULL, szCollaborationRecord); #endif #if defined(DEBUG) pFact->removeMenuItem("Main", NULL, szCollaborationViewRecord); #endif pFact->removeMenuItem("Main", NULL, szEndCollaboration); 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 implements the "Collaborate" main submenu. */ void s_abicollab_add_menus() { // First we need to get a pointer to the application itself. XAP_App *pApp = XAP_App::getApp(); EV_EditMethodContainer* pEMC = pApp->getEditMethodContainer(); int frameCount = pApp->getFrameCount(); XAP_Menu_Factory * pFact = pApp->getMenuFactory(); EV_Menu_ActionSet* pActionSet = pApp->getMenuActionSet(); // TODO: make this a translatable set of strings // const XAP_StringSet * pSS = pApp->getStringSet(); // The Collaboration menu item XAP_Menu_Id collabId = pFact->addNewMenuBefore("Main", NULL, AP_MENU_ID_WINDOW, EV_MLF_BeginSubMenu); pFact->addNewLabel(NULL, collabId, szCollaboration, szCollaborationTip); EV_Menu_Action* myCollaborationAction = new EV_Menu_Action ( collabId, // id that the layout said we could use 1, // yes, we have a sub menu. 0, // no, we don't raise a dialog. 0, // no, we don't have a checkbox. 0, // no radio buttons for me, thank you NULL, // no callback function to call. NULL, // Function for whether not label is enabled/disabled checked/unchecked NULL // Function to compute Menu Label "Dynamic Label" ); pActionSet->addAction(myCollaborationAction); // The Start Collaboration connect item XAP_Menu_Id collabOfferId = pFact->addNewMenuAfter("Main", NULL, collabId, EV_MLF_Normal); pFact->addNewLabel(NULL, collabOfferId, szCollaborationOffer, szCollaborationOfferTip); EV_Menu_Action* myActionOffer = new EV_Menu_Action ( collabOfferId, // 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, // no radio buttons for me, thank you "s_abicollab_offer", // name of callback function to call. collab_GetState_CanShare, // Function for whether not label is enabled/disabled checked/unchecked NULL // Function to compute Menu Label "Dynamic Label" ); pActionSet->addAction(myActionOffer); EV_EditMethod *myEditMethodOffer = new EV_EditMethod ( "s_abicollab_offer", // name of callback function s_abicollab_offer, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); pEMC->addEditMethod(myEditMethodOffer); // The Join Collaboration connect item XAP_Menu_Id collabJoinId = pFact->addNewMenuAfter("Main", NULL, collabOfferId, EV_MLF_Normal); pFact->addNewLabel(NULL, collabJoinId, szCollaborationJoin, szCollaborationJoinTip); EV_Menu_Action* myActionJoin = new EV_Menu_Action ( collabJoinId, // 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, // no radio buttons for me, thank you "s_abicollab_join", // name of callback function to call. collab_GetState_AnyActive, // Function for whether not label is enabled/disabled checked/unchecked NULL // Function to compute Menu Label "Dynamic Label" ); pActionSet->addAction(myActionJoin); EV_EditMethod *myEditMethodJoin = new EV_EditMethod ( "s_abicollab_join", // name of callback function s_abicollab_join, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); pEMC->addEditMethod(myEditMethodJoin); // The Join Collaboration connect item XAP_Menu_Id collabAccountsId = pFact->addNewMenuAfter("Main", NULL, collabJoinId, EV_MLF_Normal); pFact->addNewLabel(NULL, collabAccountsId, szCollaborationAccounts, szCollaborationAccountsTip); EV_Menu_Action* myActionAccounts = new EV_Menu_Action ( collabAccountsId, // 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, // no radio buttons for me, thank you "s_abicollab_accounts", // name of callback function to call. NULL, // Function for whether not label is enabled/disabled checked/unchecked NULL // Function to compute Menu Label "Dynamic Label" ); pActionSet->addAction(myActionAccounts); EV_EditMethod *myEditMethodAccounts = new EV_EditMethod ( "s_abicollab_accounts", // name of callback function s_abicollab_accounts, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); pEMC->addEditMethod(myEditMethodAccounts); // The Show Authors item XAP_Menu_Id ShowAuthorId = pFact->addNewMenuAfter("Main", NULL, collabAccountsId, EV_MLF_Normal); pFact->addNewLabel(NULL, ShowAuthorId, szCollaborationShowAuthors, szCollaborationShowAuthorsTip); EV_Menu_Action* myActionShowAuthors = new EV_Menu_Action ( ShowAuthorId, // id that the layout said we could use 0, // no, we don't have a sub menu. 0, // no, we don't raise a dialog. 1, // yes, we have a checkbox. 0, // no radio buttons for me, thank you "s_abicollab_authors", // name of callback function to call. collab_GetState_ShowAuthors, // Function for whether not label is enabled/disabled checked/unchecked NULL // Function to compute Menu Label "Dynamic Label" ); pActionSet->addAction(myActionShowAuthors); EV_EditMethod *myEditMethodShowAuthors = new EV_EditMethod ( "s_abicollab_authors", // name of callback function s_abicollab_authors, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); pEMC->addEditMethod(myEditMethodShowAuthors); // The Record session connect item #if defined(DEBUG) #if !defined(ABICOLLAB_RECORD_ALWAYS) XAP_Menu_Id collabRecordId = pFact->addNewMenuAfter("Main", NULL,ShowAuthorId , EV_MLF_Normal); pFact->addNewLabel(NULL, collabRecordId, szCollaborationRecord, szCollaborationRecordTip); EV_Menu_Action* myActionRecord = new EV_Menu_Action ( collabRecordId, // id that the layout said we could use 0, // no, we don't have a sub menu. 0, // no, we don't raise a dialog. 1, // yes, we have a checkbox. 0, // no radio buttons for me, thank you "s_abicollab_record", // name of callback function to call. collab_GetState_Recording, // Function for whether not label is enabled/disabled checked/unchecked NULL // Function to compute Menu Label "Dynamic Label" ); pActionSet->addAction(myActionRecord); EV_EditMethod *myEditMethodRecord = new EV_EditMethod ( "s_abicollab_record", // name of callback function s_abicollab_record, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); pEMC->addEditMethod(myEditMethodRecord); XAP_Menu_Id followupMenuId = collabRecordId; #else XAP_Menu_Id followupMenuId = ShowAuthorId; #endif /* !defined(ABICOLLAB_RECORD_ALWAYS) */ XAP_Menu_Id collabViewRecordId = pFact->addNewMenuAfter("Main", NULL, followupMenuId, EV_MLF_Normal); pFact->addNewLabel(NULL, collabViewRecordId, szCollaborationViewRecord, szCollaborationViewRecordTip); EV_Menu_Action* myActionViewRecord = new EV_Menu_Action ( collabViewRecordId, // id that the layout said we could use 0, // no, we don't have a sub menu. 1, // yes, we don't raise a dialog. 0, // no, we have a checkbox. 0, // no radio buttons for me, thank you "s_abicollab_viewrecord", // name of callback function to call. NULL, // Function for whether not label is enabled/disabled checked/unchecked NULL // Function to compute Menu Label "Dynamic Label" ); pActionSet->addAction(myActionViewRecord); EV_EditMethod *myEditMethodViewRecord = new EV_EditMethod ( "s_abicollab_viewrecord", // name of callback function s_abicollab_viewrecord, // callback function itself. 0, // no additional data required. "" // description -- allegedly never used for anything ); pEMC->addEditMethod(myEditMethodViewRecord); XAP_Menu_Id lastMenuId = collabViewRecordId; #else XAP_Menu_Id lastMenuId = ShowAuthorId; #endif /* defined(DEBUG) */ // End of the Collaboration menu XAP_Menu_Id endCollaborationId = pFact->addNewMenuAfter("Main", NULL, lastMenuId, EV_MLF_EndSubMenu); pFact->addNewLabel(NULL, endCollaborationId, szEndCollaboration, NULL); EV_Menu_Action* myEndCollaborationAction = new EV_Menu_Action ( endCollaborationId, // id that the layout said we could use 0, // no, we don't have a sub menu. 0, // no, we raise a dialog. 0, // no, we don't have a checkbox. 0, // no radio buttons for me, thank you NULL, // name of callback function to call. NULL, // Function for whether not label is enabled/disabled checked/unchecked NULL // Function to compute Menu Label "Dynamic Label" ); pActionSet->addAction(myEndCollaborationAction); EV_EditMethod* myCommandEM = new EV_EditMethod ("com.abisource.abiword.abicollab.command", s_abicollab_command_invoke, 0, "" ); pEMC->addEditMethod (myCommandEM); // We need to go through and add the menu element to each "frame" // of the application. We can iterate through the frames by doing // XAP_App::getFrameCount() to tell us how many frames there are, // then calling XAP_App::getFrame(i) to get the i-th frame. for(int i = 0; i < frameCount;++i) { // Get the current frame that we're iterating through. XAP_Frame* pFrame = pApp->getFrame(i); pFrame->rebuildMenus(); } }