From cc55564e634accd65c038ae76938f84706351767 Mon Sep 17 00:00:00 2001 From: vsr Date: Fri, 27 Apr 2018 12:02:10 +0300 Subject: [PATCH] 0023551: [EDF] Help menu : option to set links --- src/LightApp/LightApp_Application.cxx | 111 +++++++++++++++----------- src/LightApp/resources/LightApp.xml | 3 + src/STD/resources/about.png | Bin 459 -> 14007 bytes 3 files changed, 68 insertions(+), 46 deletions(-) mode change 100755 => 100644 src/STD/resources/about.png diff --git a/src/LightApp/LightApp_Application.cxx b/src/LightApp/LightApp_Application.cxx index 351397e10..128df3e64 100644 --- a/src/LightApp/LightApp_Application.cxx +++ b/src/LightApp/LightApp_Application.cxx @@ -191,6 +191,7 @@ #include #include #include +#include #include @@ -597,47 +598,59 @@ void LightApp_Application::createActions() tr( "MEN_DESK_PREFERENCES" ), tr( "PRP_DESK_PREFERENCES" ), Qt::CTRL+Qt::Key_P, desk, false, this, SLOT( onPreferences() ) ); - // Help menu: - - // - Help for modules + // Help menu int helpMenu = createMenu( tr( "MEN_DESK_HELP" ), -1, -1, 1000 ); - createMenu( separator(), helpMenu, -1, 10 ); - // Site && forum int id = LightApp_Application::UserID + FIRST_HELP_ID; - QString site = tr ( "SALOME_SITE" ); - QAction* as = createAction( id, site, - resMgr->loadPixmap( "LightApp", tr( "ICON_WWW" ), false ), - site, site, - 0, desk, false, this, SLOT( onHelpOnline() ) ); - as->setData( "salome-platform.org" ); - createMenu( as, helpMenu, -1, 0 ); - id++; - - QString forum = tr ( "SALOME_FORUM" ); - - QAction* af = createAction( helpMenu, forum, - resMgr->loadPixmap( "LightApp", tr( "ICON_WWW" ), false ), - forum, forum, - 0, desk, false, this, SLOT( onHelpOnline() ) ); - af->setData( "salome-platform.org/forum" ); - createMenu( af, helpMenu, -1, 0 ); - id++; - - createMenu( separator(), helpMenu, -1, 0 ); - - // YouTube channel - QString video = tr ( "SALOME_VIDEO_TUTORIALS" ); - QAction* av = createAction( helpMenu, video, - resMgr->loadPixmap( "LightApp", tr( "ICON_LIFE_RIGN" ), false ), - video, video, - 0, desk, false, this, SLOT( onHelpOnline() ) ); - av->setData( "www.youtube.com/playlist?list=PLgvBxFyGVRbZZz4wVvP36xXQL-S81RZsc&disable_polymer=true" ); - createMenu( av, helpMenu, -1, 0 ); - id++; - + // a) Link to web site + QString url = resMgr->stringValue("GUI", "site_url"); + if ( !url.isEmpty() ) { + QString title = tr ( "SALOME_SITE" ); + QAction* as = createAction( id, title, + resMgr->loadPixmap( "LightApp", tr( "ICON_WWW" ), false ), + title, title, + 0, desk, false, this, SLOT( onHelpOnline() ) ); + as->setData( url ); + createMenu( as, helpMenu, -1, 0 ); + id++; + } + + // b) Link to Forum + url = resMgr->stringValue("GUI", "forum_url"); + if ( !url.isEmpty() ) { + QString title = tr ( "SALOME_FORUM" ); + QAction* af = createAction( helpMenu, title, + resMgr->loadPixmap( "LightApp", tr( "ICON_WWW" ), false ), + title, title, + 0, desk, false, this, SLOT( onHelpOnline() ) ); + af->setData( url ); + createMenu( af, helpMenu, -1, 0 ); + id++; + } + + // c) Link to YouTube channel + url = resMgr->stringValue("GUI", "channel_url"); + if ( !url.isEmpty() ) { + createMenu( separator(), helpMenu, -1, 0 ); + QString title = tr ( "SALOME_VIDEO_TUTORIALS" ); + QAction* av = createAction( helpMenu, title, + resMgr->loadPixmap( "LightApp", tr( "ICON_LIFE_RIGN" ), false ), + title, title, + 0, desk, false, this, SLOT( onHelpOnline() ) ); + av->setData( url ); + createMenu( av, helpMenu, -1, 0 ); + id++; + } + + // d) Help for modules + + // - First create top-level menus to preserve correct order + QString userGuide = "User's Guide"; + QString devGuide = "Developer's Guide"; + createMenu( userGuide, helpMenu, -1, 5 ); + createMenu( devGuide, helpMenu, -1, 5 ); QStringList aModuleList; modules( aModuleList, false ); @@ -652,8 +665,8 @@ void LightApp_Application::createActions() QString helpSubMenu; // help submenu name (empty if not needed) QString modName = moduleName( aModule ); // module name if ( modName.isEmpty() ) modName = aModule; // for KERNEL and GUI - QString rootDir = QString( "%1_ROOT_DIR" ).arg( modName ); // module root dir variable - QString modDir = getenv( rootDir.toLatin1().constData() ); // module root dir + QString rootDir = QString( "%1_ROOT_DIR" ).arg( modName ); // module root dir env variable + QString modDir = getenv( rootDir.toLatin1().constData() ); // module root dir path QString docSection; if (resMgr->hasValue( modName, "documentation" ) ) docSection = resMgr->stringValue(modName, "documentation"); @@ -689,8 +702,15 @@ void LightApp_Application::createActions() helpFileName.replace( "//", "" ); // obtain submenus hierarchy if given QStringList smenus = helpFileName.split( "/" ); - helpFileName = smenus.last(); - smenus.removeLast(); + helpFileName = smenus.takeLast(); + // workaround for User's Guide and Developer's Guide to avoid having single item in module's submenu. + if ( helpFileName == userGuide || helpFileName == devGuide ) { + QString menuPath = smenus.join( "/" ); + QStringList allKeys = helpData.keys(); + QStringList total = allKeys.filter( QRegExp( QString( "^%1" ).arg( menuPath ) ) ); + if ( total.count() == 1 && smenus.count() > 0 ) + helpFileName = smenus.takeLast(); + } QAction* a = createAction( id, helpFileName, resMgr->loadPixmap( "STD", tr( "ICON_HELP" ), false ), helpFileName, helpFileName, @@ -701,17 +721,16 @@ void LightApp_Application::createActions() } // create sub-menus hierarchy int menuId = helpMenu; - foreach ( QString subMenu, smenus ) { - menuId = createMenu( subMenu, menuId, -1, 0 ); - } - createMenu( a, menuId, -1, 0 ); + foreach ( QString subMenu, smenus ) + menuId = createMenu( subMenu, menuId, -1, 5 ); + createMenu( a, menuId, -1, ( menuId != helpMenu && (helpFileName == userGuide || helpFileName == devGuide) ) ? 0 : 5 ); id++; } } // - Additional help items - createMenu( separator(), helpMenu, -1, 5 ); + createMenu( separator(), helpMenu, -1, 10 ); QStringList addHelpItems = resMgr->parameters( "add_help" ); foreach ( QString addHelpItem, addHelpItems ) { @@ -722,7 +741,7 @@ void LightApp_Application::createActions() addHelpItem, addHelpItem, 0, desk, false, this, SLOT( onHelpContentsModule() ) ); a->setData( valueStr ); - createMenu( a, helpMenu, -1, 5 ); + createMenu( a, helpMenu, -1, 10 ); id++; } } diff --git a/src/LightApp/resources/LightApp.xml b/src/LightApp/resources/LightApp.xml index 5e9e844ab..9004e7b2a 100644 --- a/src/LightApp/resources/LightApp.xml +++ b/src/LightApp/resources/LightApp.xml @@ -241,6 +241,9 @@
+ + +
diff --git a/src/STD/resources/about.png b/src/STD/resources/about.png old mode 100755 new mode 100644 index 25dbd81dff729833d78e808db31aa325196805d0..747c4536bdd9de9df25b41b5af389a1afe5be078 GIT binary patch literal 14007 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%0AN#8xF?fkn}f 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 HGV=cb0A>HE delta 430 zcmV;f0a5<9ZOa28iBL{Q4GJ0x0000DNk~Le0000O0000O2nGNE0N{5$_>mzge-6X| z01m_fl`9S#00007bV*G`2jT%14mKFR_z%tfC+64>W!#;TgONm7wi6B@6nOmg@*KBmJat}op(1vMgxZmI+W4h2KG0mT