/* AbiSource Application Framework * Copyright (C) 1998 AbiSource, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include #include #include "ut_debugmsg.h" #include "ut_uuid.h" #include "ut_string.h" #include "xap_Args.h" #include "xap_QNXApp.h" #include "xap_FakeClipboard.h" #include "gr_QNXImage.h" #include "xap_QNXToolbar_Icons.h" #include "xap_QNX_TB_CFactory.h" #include "xap_Prefs.h" #include "gr_QNXGraphics.h" /*****************************************************************/ XAP_QNXApp::XAP_QNXApp(XAP_Args * pArgs, const char * szAppName) : XAP_App(pArgs, szAppName), m_dialogFactory(this), m_controlFactory() { m_pQNXToolbarIcons = 0; _setAbiSuiteLibDir(); memset(&m_geometry,0,sizeof(m_geometry)); // create an instance of UT_UUIDGenerator or appropriate derrived class _setUUIDGenerator(new UT_UUIDGenerator()); // register graphics allocator GR_GraphicsFactory * pGF = getGraphicsFactory(); UT_ASSERT( pGF ); if(pGF) { bool bSuccess = pGF->registerClass(GR_QNXGraphics::graphicsAllocator, GR_QNXGraphics::graphicsDescriptor, GR_QNXGraphics::s_getClassId()); // we are in deep trouble if this did not succeed UT_ASSERT( bSuccess ); pGF->registerAsDefault(GR_QNXGraphics::s_getClassId(), true); pGF->registerAsDefault(GR_QNXGraphics::s_getClassId(), false); } } XAP_QNXApp::~XAP_QNXApp(void) { DELETEP(m_pQNXToolbarIcons); } bool XAP_QNXApp::initialize(const char * szKeyBindingsKey, const char * szKeyBindingsDefaultValue) { XAP_App::initialize(szKeyBindingsKey, szKeyBindingsDefaultValue); /*******************************/ // load only one copy of the platform-specific icons. m_pQNXToolbarIcons = new AP_QNXToolbar_Icons(); // do any thing we need here... return true; } void XAP_QNXApp::reallyExit(void) { //There must be a nicer way to drop out of the event loop PtQuitMainLoop(); } UT_sint32 XAP_QNXApp::makeDirectory(const char *path, UT_sint32 mode) const { return mkdir ( path, mode ); } XAP_DialogFactory * XAP_QNXApp::getDialogFactory(void) { return &m_dialogFactory; } XAP_Toolbar_ControlFactory * XAP_QNXApp::getControlFactory(void) { return &m_controlFactory; } void * XAP_QNXApp::getFontManager(void) { return NULL; } const char * XAP_QNXApp::getUserPrivateDirectory(void) { /* return a pointer to a static buffer */ #ifndef PATH_MAX #define PATH_MAX 4096 #endif char * szAbiDir = ".AbiSuite"; static char buf[PATH_MAX]; memset(buf,0,sizeof(buf)); char * szHome = getenv("HOME"); if (!szHome || !*szHome) szHome = "./"; if (strlen(szHome)+strlen(szAbiDir)+2 >= PATH_MAX) return NULL; strcpy(buf,szHome); if (buf[strlen(buf)-1] != '/') strcat(buf,"/"); strcat(buf,szAbiDir); return buf; } bool XAP_QNXApp::_loadFonts(void) { //Not needed in QNX return true; } void XAP_QNXApp::setWinGeometry(int x,int y,UT_uint32 width,UT_uint32 height, UT_uint32 flags) { // TODO : do some range checking? m_geometry.x = x; m_geometry.y = y; m_geometry.width = width; m_geometry.height = height; m_geometry.flags = flags; } void XAP_QNXApp::getWinGeometry(int *x,int *y,UT_uint32 *width,UT_uint32 *height,UT_uint32 *flags) { UT_ASSERT(x && y && width && height); *x = m_geometry.x; *y = m_geometry.y; *width = m_geometry.width; *height = m_geometry.height; *flags = m_geometry.flags; } void XAP_QNXApp::_setAbiSuiteLibDir() { char buf[PATH_MAX]; // char buf2[PATH_MAX]; // not used? // see if a command line option [-lib ] was given int kLimit = m_pArgs->m_argc; int nFirstArg = 1; // QNX puts the program name in argv[0], so [1] is the first argument int k; for (k=nFirstArg; km_argv[k] == '-') && (UT_stricmp(m_pArgs->m_argv[k],"-lib")==0) && (k+1 < kLimit)) { strcpy(buf,m_pArgs->m_argv[k+1]); int len = strlen(buf); if (buf[len-1]=='/') // trim trailing slash buf[len-1] = 0; XAP_App::_setAbiSuiteLibDir(buf); return; } // if not, see if ABISUITE_HOME was set in the environment const char * sz = getenv("ABISUITE_HOME"); if (sz && *sz) { strcpy(buf,sz); char * p = buf; int len = strlen(p); if ( (p[0]=='"') && (p[len-1]=='"') ) { // trim leading and trailing DQUOTES p[len-1]=0; p++; len -= 2; } if (p[len-1]=='/') // trim trailing slash p[len-1] = 0; XAP_App::_setAbiSuiteLibDir(p); return; } // otherwise, use the hard-coded value XAP_App::_setAbiSuiteLibDir(getAbiSuiteHome()); return; } ////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// /* void XAP_QNXApp::setTimeOfLastEvent(int eventTime) { //Not needed for QNX //m_eventTime = eventTime; } */