X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSALOMEGUI%2FQAD_Desktop.cxx;h=189665a8e367f45ae0dda69484e9b97d77557de6;hb=9483a95cb84e57058d023f45a235e77fc0422234;hp=c4d0c8cad4886c885a4550b6408c2c7bdc3612d7;hpb=102608ce8b69dd1ea798169e30223b67742ec26d;p=modules%2Fkernel.git diff --git a/src/SALOMEGUI/QAD_Desktop.cxx b/src/SALOMEGUI/QAD_Desktop.cxx index c4d0c8cad..189665a8e 100644 --- a/src/SALOMEGUI/QAD_Desktop.cxx +++ b/src/SALOMEGUI/QAD_Desktop.cxx @@ -98,6 +98,8 @@ using namespace std; #include #include +static const char* SEPARATOR = ":"; + extern "C" { # include @@ -262,14 +264,27 @@ myQueryClose( true ) /* find component icon */ QString iconfile = strdup(list_composants[ind].moduleicone) ; QString modulename = strdup(list_composants[ind].modulename) ; + QString moduleusername = strdup(list_composants[ind].moduleusername) ; + + // MESSAGE ( " MODULE = " << modulename ) + // MESSAGE ( " MODULE icon = " << iconfile ) + // MESSAGE ( " MODULE username = " << moduleusername ) + + if ( mapComponentName.contains( moduleusername ) ) { + QMessageBox::warning( this, tr("WRN_WARNING"), QString( moduleusername + " is already associated with " + mapComponentName[moduleusername] + ".\nPlease, change the component username of " + modulename) , tr ("BUT_OK") ); + continue; + } + mapComponentName.insert( moduleusername, modulename ); + resDir = resMgr->findFile(iconfile,modulename) ; if (resDir) { + MESSAGE ( "resDir" << resDir ) //resDir = QAD_Tools::addSlash(resDir) ; //QPixmap Icone(resDir+iconfile) ; QPixmap Icone( QAD_Tools::addSlash( resDir ) + iconfile ); QToolButton * toolb = - new QToolButton( QIconSet( Icone ), modulename, QString::null, this, + new QToolButton( QIconSet( Icone ), moduleusername, QString::null, this, SLOT( onButtonActiveComponent () ),tbComponent ); toolb->setToggleButton( true ); myComponentButton.append(toolb); @@ -282,7 +297,7 @@ myQueryClose( true ) } if ( !QString(list_composants[ind].modulename).isEmpty() ) - myCombo->insertItem( strdup(list_composants[ind].modulename) ); + myCombo->insertItem( strdup(list_composants[ind].moduleusername) ); } @@ -1149,6 +1164,23 @@ Engines::Component_var QAD_Desktop::getEngine(const char *containerName, return eng._retn(); } +QString QAD_Desktop::getComponentName(const char *componentUserName) +{ + if ( mapComponentName.contains(componentUserName) ) + return mapComponentName[ componentUserName ] ; + else + return ""; +} + +QString QAD_Desktop::getComponentUserName(const char *componentName) +{ + QMap::Iterator it; + for( it = mapComponentName.begin(); it != mapComponentName.end(); ++it ) + if (it.data() == componentName ) + return it.key(); + return ""; +} + /*! gets application Help Window (and creates if necessary) */ @@ -1156,6 +1188,37 @@ QAD_HelpWindow* QAD_Desktop::getHelpWindow() { if (!myHelpWindow) { myHelpWindow = new QAD_HelpWindow(); + + QMap::Iterator it; + for( it = mapComponentName.begin(); it != mapComponentName.end(); ++it ) { + QCString dir; + QString root; + + // look for index.html and set homeDir + // 1. $(MODULE_ROOT_DIR)/doc/index.html + // 2. $(MODULE_ROOT_DIR)/doc/html/index.html + // 3. $(MODULE_ROOT_DIR)/doc/html/html/index.html + + if (dir = getenv( QString( it.data() + "_ROOT_DIR")) ) { + root = QAD_Tools::addSlash( QAD_Tools::addSlash(dir) + QAD_Tools::addSlash("share") + QAD_Tools::addSlash("salome") + "doc" ); + if ( QFileInfo( root + "index.html" ).exists() ) { + helpContext( root + "index.html", "" ); + } + else { + root = QAD_Tools::addSlash( root + "html" ); + if ( QFileInfo( root + "index.html" ).exists() ) { + helpContext( root + "index.html", "" ); + } + else { + root = QAD_Tools::addSlash( root + "html" ); + if ( QFileInfo( root + "index.html" ).exists() ) { + helpContext( root + "index.html", "" ); + } + } + } + } + } + connect(myHelpWindow, SIGNAL(helpWindowClosed()), this, SLOT(onHelpWindowClosed())); } return myHelpWindow; @@ -1481,7 +1544,7 @@ void QAD_Desktop::onOpenStudy() tr("BUT_OK") ); } else if (myActiveComp != "") { QApplication::setOverrideCursor( Qt::waitCursor ); - loadComponentData(myActiveComp); + loadComponentData(mapComponentName[myActiveComp]); openStudy->updateObjBrowser(true); QApplication::restoreOverrideCursor(); } @@ -1502,14 +1565,14 @@ void QAD_Desktop::onOpenStudy() bool QAD_Desktop::loadComponentData( const QString& compName ) { // Open component's data in active study if any - MESSAGE("loadComponentData(): Opening component data") + MESSAGE("loadComponentData(): Opening " << compName << " component data ") if (!myActiveStudy) { MESSAGE("loadComponentData(): No active study exists") return false; } Engines::Component_var comp ; - if ( compName.compare("Supervision") == 0 ) { + if ( compName.compare("SUPERV") == 0 ) { comp = getEngine( "SuperVisionContainer", compName) ; } else { @@ -1522,7 +1585,7 @@ bool QAD_Desktop::loadComponentData( const QString& compName ) } SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument(); - SALOMEDS::SComponent_var SCO = SALOMEDS::SComponent::_narrow(aStudy->FindObject(compName)); + SALOMEDS::SComponent_var SCO = SALOMEDS::SComponent::_narrow(aStudy->FindObject( getComponentUserName(compName) )); if (!SCO->_is_nil()) { if (!CORBA::is_nil(comp)) { @@ -2178,7 +2241,7 @@ void QAD_Desktop::onOpenWith() if (SCO->FindAttribute(anAttr, "AttributeName")) { aName = SALOMEDS::AttributeName::_narrow(anAttr); name = aName->Value(); - SALOME_ModuleCatalog::Acomponent_var Comp = myCatalogue->GetComponent( name ); + SALOME_ModuleCatalog::Acomponent_var Comp = myCatalogue->GetComponent( mapComponentName[name] ); if ( !Comp->_is_nil() ) { SALOME_ModuleCatalog::ListOfComponents_var list_type_composants = @@ -2230,6 +2293,7 @@ void QAD_Desktop::onOpenWith() } typedef bool OneDim1(QAD_Desktop*); +typedef bool OneDim2(QAD_Desktop*, char*); /*! Called to define settings of component. @@ -2238,10 +2302,18 @@ void QAD_Desktop::setSettings() { if (!myActiveComp.isEmpty()) { OSD_Function osdF = mySharedLibrary.DlSymb("SetSettings"); - if ( osdF != NULL ) { - OneDim1 (*f1) = (bool (*) (QAD_Desktop*)) osdF; - (*f1)(this); - } + if ( osdF != NULL ) + if (_islibso) + { + OneDim1 (*f1) = (bool (*) (QAD_Desktop*)) osdF; + (*f1)(this); + } + else + { + QString Component =mapComponentName[myActiveComp]; + OneDim2 (*f1) = (bool (*) (QAD_Desktop*, char*)) osdF; + (*f1)(this, (char*)Component.latin1()); + } } } @@ -2256,7 +2328,7 @@ bool QAD_Desktop::loadComponent(QString Component) QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager(); if ( resMgr ) { QString msg; - if (!resMgr->loadResources( Component + "GUI", msg )) + if (!resMgr->loadResources( Component, msg )) { //NRI QCString errMsg; // errMsg.sprintf( "Do not load all resources for module %sGUI.\n" , @@ -2270,14 +2342,14 @@ bool QAD_Desktop::loadComponent(QString Component) /* Parse xml file */ myXmlHandler = new QAD_XmlHandler(); myXmlHandler->setMainWindow(this); - if (!myXmlHandler->setComponent(resMgr->resources(Component + "GUI"))) return false; + if (!myXmlHandler->setComponent(resMgr->resources( Component ))) return false; - QString language = resMgr->language( Component + "GUI" ); + QString language = resMgr->language( Component ); QString ComponentXml = Component + "_" + language + ".xml"; //ComponentXml = resMgr->resources(Component + "GUI") ; //ComponentXml = QAD_Tools::addSlash(ComponentXml) ; - ComponentXml = QAD_Tools::addSlash( resMgr->findFile( ComponentXml, Component + "GUI" ) ) + ComponentXml; + ComponentXml = QAD_Tools::addSlash( resMgr->findFile( ComponentXml, Component ) ) + ComponentXml; QFile file( ComponentXml ); if ( !file.exists() || !file.open( IO_ReadOnly ) ) { @@ -2315,44 +2387,67 @@ bool QAD_Desktop::loadComponent(QString Component) nbToolbars = myActiveMenus->getToolBarList().count(); /* Open Shared Library */ mySharedLibrary = OSD_SharedLibrary(); + _islibso = false; QString ComponentLib; - QCString dir; + QCString libs; QFileInfo fileInfo ; - bool found = false; - if ( dir = getenv("SALOME_SITE_DIR")) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; + QString fileString ; + QString dir; + + if ( libs = getenv("LD_LIBRARY_PATH")) { + // MESSAGE ( " LD_LIBRARY_PATH : " << libs ); + QStringList dirList = QStringList::split( SEPARATOR, libs, false ); // skip empty entries + for ( int i = dirList.count()-1; i >= 0; i-- ) { + dir = dirList[ i ]; #ifdef WNT - dir = dir + "lib" + Component.latin1() + "GUI.dll" ; + fileString = QAD_Tools::addSlash( dir ) + "lib" + Component + "GUI.dll" ; #else - dir = dir + "lib" + Component.latin1() + "GUI.so" ; + fileString = QAD_Tools::addSlash( dir ) + "lib" + Component + "GUI.so" ; #endif - MESSAGE ( " GUI library = " << dir ) - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ComponentLib = fileInfo.fileName() ; - found = true; + + fileInfo.setFile(fileString) ; + if (fileInfo.exists()) { + // MESSAGE ( " GUI library = " << fileString ); + ComponentLib = fileInfo.fileName() ; + _islibso = true; + break; + } } } - - if ( (dir = getenv("SALOME_ROOT_DIR")) && !found ) { - dir = QAD_Tools::addSlash(dir) ; - dir = dir + "lib" ; - dir = QAD_Tools::addSlash(dir) ; + + if (!_islibso) // component GUI could be in PyQt, use generic library + { + MESSAGE("GUI library not found, trying generic library for PyQt GUI"); + bool found = false; + if (dir = getenv("KERNEL_ROOT_DIR")) + { + dir = QAD_Tools::addSlash(dir) ; + dir = dir + "lib" ; + dir = QAD_Tools::addSlash(dir) ; + dir = dir + "salome" ; + dir = QAD_Tools::addSlash(dir) ; #ifdef WNT - dir = dir + "lib" + Component.latin1() + "GUI.dll" ; + dir = dir + "libSalomePyQtcmodule.dll" ; #else - dir = dir + "lib" + Component.latin1() + "GUI.so" ; + dir = dir + "libSalomePyQtcmodule.so" ; #endif - MESSAGE ( " GUI library = " << dir ) - fileInfo.setFile(dir) ; - if (fileInfo.exists()) { - ComponentLib = fileInfo.fileName() ; - found = true; + MESSAGE ( " GUI library = " << dir ); + fileInfo.setFile(dir) ; + if (fileInfo.exists()) + { + ComponentLib = fileInfo.fileName() ; + found = true; + } + } + if ( !found ) + { + QMessageBox::critical( this, + tr("ERR_ERROR"), + tr("ERR_LIBGUI" ).arg(Component) ); + return false; + } } - } mySharedLibrary.SetName(TCollection_AsciiString((char*)ComponentLib.latin1()).ToCString()); ok = mySharedLibrary.DlOpen(OSD_RTLD_LAZY); @@ -2366,10 +2461,19 @@ bool QAD_Desktop::loadComponent(QString Component) /* SETTINGS */ OSD_Function osdF = mySharedLibrary.DlSymb("SetSettings"); - if ( osdF != NULL ) { - OneDim1 (*f1) = (bool (*) (QAD_Desktop*)) osdF; - (*f1)(this); - } + if ( osdF != NULL ) + if (_islibso) + { + OneDim1 (*f1) = (bool (*) (QAD_Desktop*)) osdF; + (*f1)(this); + } + else + { + OneDim2 (*f1) = (bool (*) (QAD_Desktop*, char*)) osdF; + (*f1)(this, (char*)Component.latin1()); + } + + /* COMPONENT INTERFACE */ SALOME_ModuleCatalog::Acomponent_ptr aComponent = @@ -2381,7 +2485,7 @@ bool QAD_Desktop::loadComponent(QString Component) } myActiveStudy->setMessage(QString("Component : ") + - aComponent->componentname() + " created " ); + aComponent->componentusername() + " created " ); myActiveStudy->setMessage(QString("Type : ") + QString::number(aComponent->component_type())); myActiveStudy->setMessage(QString("Constraint : ") + @@ -2473,6 +2577,8 @@ void QAD_Desktop::onDispatchTools(int id) dir = QAD_Tools::addSlash(dir) ; dir = dir + "lib" ; dir = QAD_Tools::addSlash(dir) ; + dir = dir + "salome" ; + dir = QAD_Tools::addSlash(dir) ; #ifdef WNT dir = dir + "libToolsGUI.dll" ; #else @@ -2490,6 +2596,27 @@ void QAD_Desktop::onDispatchTools(int id) dir = QAD_Tools::addSlash(dir) ; dir = dir + "lib" ; dir = QAD_Tools::addSlash(dir) ; + dir = dir + "salome" ; + dir = QAD_Tools::addSlash(dir) ; +#ifdef WNT + dir = dir + "libToolsGUI.dll" ; +#else + dir = dir + "libToolsGUI.so" ; +#endif + MESSAGE ( " GUI library = " << dir ); + fileInfo.setFile(dir) ; + if (fileInfo.exists()) { + ToolsLib = fileInfo.fileName() ; + found = true; + } + } + + if ( (dir = getenv("KERNEL_ROOT_DIR")) && !found ) { + dir = QAD_Tools::addSlash(dir) ; + dir = dir + "lib" ; + dir = QAD_Tools::addSlash(dir) ; + dir = dir + "salome" ; + dir = QAD_Tools::addSlash(dir) ; #ifdef WNT dir = dir + "libToolsGUI.dll" ; #else @@ -2510,6 +2637,8 @@ void QAD_Desktop::onDispatchTools(int id) dir = QAD_Tools::addSlash(dir) ; dir = dir + "lib" ; dir = QAD_Tools::addSlash(dir) ; + dir = dir + "salome" ; + dir = QAD_Tools::addSlash(dir) ; dir = dir + QAD_XmlHandler::_bibmap[ id ].latin1() ; MESSAGE ( " GUI library = " << dir ); fileInfo.setFile(dir) ; @@ -2523,6 +2652,23 @@ void QAD_Desktop::onDispatchTools(int id) dir = QAD_Tools::addSlash(dir) ; dir = dir + "lib" ; dir = QAD_Tools::addSlash(dir) ; + dir = dir + "salome" ; + dir = QAD_Tools::addSlash(dir) ; + dir = dir + QAD_XmlHandler::_bibmap[ id ].latin1() ; + MESSAGE ( " GUI library = " << dir ); + fileInfo.setFile(dir) ; + if (fileInfo.exists()) { + ToolsLib = fileInfo.fileName() ; + found = true; + } + } + + if ( (dir = getenv("KERNEL_ROOT_DIR")) && !found ) { + dir = QAD_Tools::addSlash(dir) ; + dir = dir + "lib" ; + dir = QAD_Tools::addSlash(dir) ; + dir = dir + "salome" ; + dir = QAD_Tools::addSlash(dir) ; dir = dir + QAD_XmlHandler::_bibmap[ id ].latin1() ; MESSAGE ( " GUI library = " << dir ); fileInfo.setFile(dir) ; @@ -2591,7 +2737,8 @@ void QAD_Desktop::onComboActiveComponent( const QString & component, bool isLoad if (!myXmlHandler->myIdList.IsEmpty()) clearMenus(); if ( myCombo->currentText() != component ) myCombo->setCurrentText( component ); - if (component.compare(QString("Salome"))!= 0) { + //NRI if (component.compare(QString("Salome"))!= 0) { + if (component.compare( getComponentUserName( "KERNEL" ) )!= 0) { // QApplication::setOverrideCursor( Qt::waitCursor ); myActiveComp = component; @@ -2605,7 +2752,7 @@ void QAD_Desktop::onComboActiveComponent( const QString & component, bool isLoad } myActiveStudy->Selection( component ); - if ( !loadComponent(component) ) { + if ( !loadComponent(mapComponentName[component]) ) { myCombo->setCurrentItem (0); for ( QToolButton* aButton=myComponentButton.first(); aButton; aButton=myComponentButton.next() ) { aButton->setOn(false); @@ -2626,7 +2773,7 @@ void QAD_Desktop::onComboActiveComponent( const QString & component, bool isLoad } // Open new component's data in active study if any - if(isLoadData) loadComponentData(component); + if(isLoadData) loadComponentData(mapComponentName[component]); oldSel->Clear(); myActiveStudy->updateObjBrowser(true); @@ -2635,7 +2782,8 @@ void QAD_Desktop::onComboActiveComponent( const QString & component, bool isLoad } else { // component == "Salome" myActiveComp = ""; - myActiveStudy->Selection( "Salome" ); + //NRI myActiveStudy->Selection( "Salome" ); + myActiveStudy->Selection( getComponentUserName( "KERNEL" ) ); SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() ); Sel->ClearIObjects(); for ( QToolButton* aButton=myComponentButton.first(); aButton; aButton=myComponentButton.next() ) { @@ -3226,7 +3374,31 @@ void QAD_Desktop::helpSearch() /* Help Contents */ void QAD_Desktop::helpContents() { - getHelpWindow()->contents(); + if (myActiveComp == "") + myActiveComp = getComponentUserName( "KERNEL" ); //NRI "Salome"; + + QCString dir; + QString root; + if (dir = getenv( getComponentName( myActiveComp ) + "_ROOT_DIR")) { + root = QAD_Tools::addSlash( QAD_Tools::addSlash(dir) + QAD_Tools::addSlash("share") + QAD_Tools::addSlash("salome") + "doc" ); + if ( QFileInfo( root + "index.html" ).exists() ) { + helpContext( root + "index.html", "" ); + } + else { + root = QAD_Tools::addSlash( root + "html" ); + if ( QFileInfo( root + "index.html" ).exists() ) { + helpContext( root + "index.html", "" ); + } + else { + root = QAD_Tools::addSlash( root + "html" ); + if ( QFileInfo( root + "index.html" ).exists() ) { + helpContext( root + "index.html", "" ); + } + } + } + } + + //NRI getHelpWindow()->contents(); getHelpWindow()->show(); getHelpWindow()->raise(); getHelpWindow()->setActiveWindow();