]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
0021137: EDF 1612 ALL: Shortcut for the Python console, Object Browser and Message Log
authorvsr <vsr@opencascade.com>
Wed, 9 Mar 2011 15:45:48 +0000 (15:45 +0000)
committervsr <vsr@opencascade.com>
Wed, 9 Mar 2011 15:45:48 +0000 (15:45 +0000)
src/LightApp/LightApp_Application.cxx
src/LightApp/resources/LightApp.xml
src/LightApp/resources/LightApp_msg_en.ts
src/PyConsole/PyConsole_Console.cxx
src/PyConsole/PyConsole_Console.h
src/PyConsole/PyConsole_Editor.cxx
src/PyConsole/PyConsole_Editor.h
src/Qtx/QtxDockAction.cxx
src/Qtx/QtxDockAction.h
src/SalomeApp/SalomeApp_Application.cxx
src/SalomeApp/resources/SalomeApp.xml

index b044b09585e8131e259e9a949035aa5d3c3200c8..56f2f9a51fffd52ee5c3e15df4ede1b7031a3c57 100644 (file)
@@ -328,15 +328,15 @@ LightApp_Application::LightApp_Application()
   QStringList anAddFamilies = aResMgr->stringValue( "PyConsole", "additional_families" ).split( ";", QString::SkipEmptyParts );
   QString aFamily;
   for ( QStringList::Iterator it = anAddFamilies.begin(); it != anAddFamilies.end(); ++it )
+  {
+    aFamily = *it;
+    if ( famdb.contains(aFamily) )
     {
-      aFamily = *it;
-      if ( famdb.contains(aFamily) )
-        {
-          f.setFamily( aFamily );
-          aResMgr->setValue( "PyConsole", "font", f );
-          break;
-        }
+      f.setFamily( aFamily );
+      aResMgr->setValue( "PyConsole", "font", f );
+      break;
     }
+  }
 }
 
 /*!Destructor.
@@ -1151,6 +1151,11 @@ void LightApp_Application::insertDockWindow( const int id, QWidget* wid )
   dock->setFeatures( QDockWidget::AllDockWidgetFeatures );
   dock->setObjectName( QString( "window_%1" ).arg( id ) );
   dock->setWidget( wid );
+
+  QKeySequence accel = wid->property( "shortcut" ).value<QKeySequence>();
+  if ( !accel.isEmpty() )
+    dock->toggleViewAction()->setShortcut( accel );
+
   dock->show();
 }
 
@@ -1175,8 +1180,11 @@ void LightApp_Application::removeDockWindow( const int id )
 void LightApp_Application::placeDockWindow( const int id, Qt::DockWidgetArea place )
 {
   QDockWidget* dock = windowDock( dockWindow( id ) );
-  if ( dock && desktop() )
+  if ( dock && desktop() ) {
     desktop()->addDockWidget( place, dock );
+    QtxDockAction* a = qobject_cast<QtxDockAction*>( action( ViewWindowsId ) );
+    if ( a ) a->update();
+  }
 }
 
 /*!
@@ -1737,9 +1745,8 @@ QWidget* LightApp_Application::createWindow( const int flag )
     ob->treeView()->header()->setResizeMode(SUIT_DataObject::VisibilityId, QHeaderView::Fixed);
     ob->treeView()->header()->moveSection(SUIT_DataObject::NameId,SUIT_DataObject::VisibilityId);
     ob->treeView()->setColumnWidth(SUIT_DataObject::VisibilityId, VISIBILITY_COLUMN_WIDTH);
-
+    ob->setProperty( "shortcut", QKeySequence( "Alt+Shift+O" ) );
     wid = ob;
-
     ob->connectPopupRequest( this, SLOT( onConnectPopupRequest( SUIT_PopupClient*, QContextMenuEvent* ) ) );
   }
 #ifndef DISABLE_PYCONSOLE
@@ -1748,6 +1755,9 @@ QWidget* LightApp_Application::createWindow( const int flag )
     PyConsole_Console* pyCons = new PyConsole_Console( desktop(),new LightApp_PyInterp());
     pyCons->setWindowTitle( tr( "PYTHON_CONSOLE" ) );
     pyCons->setFont(resourceMgr()->fontValue( "PyConsole", "font" ));
+    pyCons->setIsShowBanner(resourceMgr()->booleanValue( "PyConsole", "show_banner", true ));
+    pyCons->setProperty( "shortcut", QKeySequence( "Alt+Shift+P" ) );
+
     wid = pyCons;
     pyCons->connectPopupRequest( this, SLOT( onConnectPopupRequest( SUIT_PopupClient*, QContextMenuEvent* ) ) );
   }
@@ -1756,6 +1766,7 @@ QWidget* LightApp_Application::createWindow( const int flag )
   {
     LogWindow* logWin = new LogWindow( desktop() );
     logWin->setWindowTitle( tr( "LOG_WINDOW" ) );
+    logWin->setProperty( "shortcut", QKeySequence( "Alt+Shift+L" ) );
     wid = logWin;
     logWin->connectPopupRequest( this, SLOT( onConnectPopupRequest( SUIT_PopupClient*, QContextMenuEvent* ) ) );
   }
@@ -1947,6 +1958,7 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref )
 
   int pythonConsoleGroup = pref->addPreference( tr( "PREF_GROUP_PY_CONSOLE" ), genTab );
   pref->addPreference( tr( "PREF_FONT" ), pythonConsoleGroup, LightApp_Preferences::Font, "PyConsole", "font" );
+  pref->addPreference( tr( "PREF_SHOW_BANNER" ), pythonConsoleGroup, LightApp_Preferences::Bool, "PyConsole", "show_banner" );
 
   int viewTab = pref->addPreference( tr( "PREF_TAB_VIEWERS" ), salomeCat );
 
@@ -2549,11 +2561,14 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString
   }
 
 #ifndef DISABLE_PYCONSOLE
-  if( sec=="PyConsole" )
+  if( sec=="PyConsole" && pythonConsole() )
   {
-    if( param=="font" )
-      if( pythonConsole() )
-        pythonConsole()->setFont( resMgr->fontValue( "PyConsole", "font" ) );
+    if ( param=="font" ) {
+      pythonConsole()->setFont( resMgr->fontValue( "PyConsole", "font" ) );
+    }
+    else if ( param=="show_banner" ) {
+      pythonConsole()->setIsShowBanner( resMgr->booleanValue( "PyConsole", "show_banner", true ) );
+    }
   }
 #endif
 
index dd1a20855c4cbaf7717e53818dd56a8d9cc52d0e..de746b8c2ab99b733175bcf9f59bf0b7cb91f58c 100644 (file)
@@ -81,6 +81,7 @@
   </section>
   <section name="PyConsole">
     <!-- Python console preferences -->
+    <parameter name="show_banner"         value="true" />
     <parameter name="font"                value="Helvetic,12" />
     <parameter name="additional_families" value="Helvetic;Helvetica;Helvetica[Adobe];Times;Times[Adobe];Sans Serif;Serif;Monospace;Lucida"/>
   </section>
index 89910ee1268865b6a5bb9fcb1bab32d48380582d..804b47529339dbf3998858ac609b71ec1c0228b7 100644 (file)
@@ -346,6 +346,10 @@ The changes will be applied on the next application session.</translation>
         <source>PREF_GROUP_PY_CONSOLE</source>
         <translation>Python console properties</translation>
     </message>
+    <message>
+        <source>PREF_SHOW_BANNER</source>
+        <translation>Show banner</translation>
+    </message>
     <message>
         <source>PREF_GROUP_STYLE</source>
         <translation>Salome style</translation>
index 4abd2af8e45f8455c1b262c56063b7a65fbca872..7c99936c81c61072b3d8802aa23a35b3609c41d0 100644 (file)
@@ -152,6 +152,30 @@ void PyConsole_Console::setIsSuppressOutput( const bool on )
   myEditor->setIsSuppressOutput(on);
 }
 
+/*!
+  \brief Get 'show banner' flag value.
+  
+  \sa setIsShowBanner()
+  \return \c true if python console shows banner
+*/
+bool PyConsole_Console::isShowBanner() const
+{
+  return myEditor->isShowBanner();
+}
+
+/*!
+  \brief Set 'show banner' flag value.
+
+  The banner is shown in the top of the python console window.
+
+  \sa isShowBanner()
+  \param on 'show banner' flag
+*/
+void PyConsole_Console::setIsShowBanner( const bool on )
+{
+  myEditor->setIsShowBanner( on );
+}
+
 /*!
   \brief Change the python console's font.
   \param f new font
index 8833039fb77620e3bd6fc25da6daddf7d4a62121..edca2edb20b9bcf74ac457210136cb7dbc6599e5 100644 (file)
@@ -66,6 +66,8 @@ public:
   bool                isSuppressOutput() const;
   void                setIsSuppressOutput( const bool );
 
+  bool                isShowBanner() const;
+  void                setIsShowBanner( const bool );
 
   void                exec( const QString& );
   void                execAndWait( const QString& );
index c1bce6b3e75969b0227d7ac5f749fd31537d1a6f..d3430ae6c69b4643e12c8f812e348243ce49219a 100644 (file)
@@ -226,8 +226,8 @@ private:
 
 void staticCallback( void* data, char* c )
 {
-       if(!((PyConsole_Editor*)data)->isSuppressOutput())
-               QApplication::postEvent( (PyConsole_Editor*)data, new PrintEvent( c ) ); 
+  if(!((PyConsole_Editor*)data)->isSuppressOutput())
+    QApplication::postEvent( (PyConsole_Editor*)data, new PrintEvent( c ) ); 
 }
 
 /*!
@@ -243,8 +243,9 @@ PyConsole_Editor::PyConsole_Editor( PyConsole_Interp* theInterp,
   myInterp( 0 ),
   myCmdInHistory( -1 ),
   myEventLoop( 0 ),
+  myShowBanner( true ),
   myIsSync( false ),
-  myIsSuppressOutput(false)
+  myIsSuppressOutput( false )
 {
   QString fntSet( "" );
   QFont aFont = SUIT_Tools::stringToFont( fntSet );
@@ -302,7 +303,7 @@ void PyConsole_Editor::setIsSync( const bool on )
   \brief Get suppress output flag value.
   
   \sa setIsSuppressOutput()
-  \return True if python console output is suppressed.
+  \return \c true if python console output is suppressed.
 */
 bool PyConsole_Editor::isSuppressOutput() const
 {
@@ -322,6 +323,45 @@ void PyConsole_Editor::setIsSuppressOutput( const bool on )
   myIsSuppressOutput = on;
 }
 
+/*!
+  \brief Get 'show banner' flag value.
+  
+  \sa setIsShowBanner()
+  \return \c true if python console shows banner
+*/
+bool PyConsole_Editor::isShowBanner() const
+{
+  return myShowBanner;
+}
+
+/*!
+  \brief Set 'show banner' flag value.
+
+  The banner is shown in the top of the python console window.
+
+  \sa isShowBanner()
+  \param on 'show banner' flag
+*/
+void PyConsole_Editor::setIsShowBanner( const bool on )
+{
+  if ( myShowBanner != on ) {
+    myShowBanner = on;
+    clear();
+  }
+}
+
+/*!
+  \brief Get size hint for the Python console window
+  \return size hint value
+*/
+QSize PyConsole_Editor::sizeHint() const
+{
+  QFontMetrics fm( font() );
+  int nbLines = ( isShowBanner() ? myBanner.split("\n").count() : 0 ) + 1;
+  QSize s(100, fm.lineSpacing()*nbLines);
+  return s;
+}
+
 /*!
   \brief Put the string \a str to the python editor.
   \param str string to be put in the command line of the editor
@@ -1036,7 +1076,8 @@ void PyConsole_Editor::onPyInterpChanged( PyConsole_Interp* interp )
     if ( myInterp ) {
       // print banner
       myBanner = myInterp->getbanner().c_str();
-      addText( myBanner );
+      if ( isShowBanner() )
+       addText( myBanner );
       // clear command buffer
       myCommandBuffer.truncate(0);
       // unset read-only state
@@ -1123,7 +1164,8 @@ void PyConsole_Editor::paste()
 void PyConsole_Editor::clear()
 {
   QTextEdit::clear();
-  addText( myBanner );
+  if ( isShowBanner() )
+    addText( myBanner );
   myPrompt = READY_PROMPT;
   addText( myPrompt );
 }
index 6f8eba127022819d7c3b487121d08a2c013e08c5..8a5931a1bd9e1695279c846e90c7b28a2c33c848 100644 (file)
@@ -55,6 +55,11 @@ public:
   bool           isSuppressOutput() const;
   void           setIsSuppressOutput(const bool);
 
+  bool           isShowBanner() const;
+  void           setIsShowBanner( const bool );
+
+  virtual QSize  sizeHint() const;
+
 protected:
   virtual void   dropEvent( QDropEvent* event );
   virtual void   mouseReleaseEvent( QMouseEvent* event );
@@ -81,6 +86,7 @@ private:
   QStringList       myHistory;          //!< commands history buffer
   QEventLoop*       myEventLoop;        //!< internal event loop
   QString           myBanner;           //!< current banner
+  bool              myShowBanner;       //!< 'show banner' flag
   QStringList       myQueue;            //!< python commands queue
   bool              myIsSync;           //!< synchronous mode flag
   bool              myIsSuppressOutput; //!< suppress output flag
index 5a1f3fa581aa4bb86d6fd2f346b4e58aae7ee1f6..819323d958d1a1f1e42415bb316147f945e74dd4 100755 (executable)
@@ -95,6 +95,14 @@ QtxDockAction::~QtxDockAction()
   }
 }
 
+/*!
+  \brief Update associated menu
+*/
+void QtxDockAction::update()
+{
+  updateMenu();
+}
+
 /*!
   \brief Get parent main window.
   \return main window pointer.
index 64b2c4ea19c3776adbfe9b4f41796dfe1d56073e..114c9f0847807f6a56c3287f2fe9a4e958232ea5 100755 (executable)
@@ -57,6 +57,8 @@ public:
   QtxDockAction( const QString&, const QIcon&, const QString&, QMainWindow* );
   virtual ~QtxDockAction();
 
+  void         update();
+
   int          dockType() const;
   void         setDockType( const int );
 
index c74eae84e9702722e59edec8e3128798607a76dd..1e7e3863ecf290dcd125c04d0792d77c58355822 100644 (file)
@@ -940,6 +940,7 @@ QWidget* SalomeApp_Application::createWindow( const int flag )
       ob->setAutoSizeFirstColumn(autoSizeFirst);
       ob->setAutoSizeColumns(autoSize);
       ob->setResizeOnExpandItem(resizeOnExpandItem);
+      ob->setProperty( "shortcut", QKeySequence( "Alt+Shift+O" ) );
 
       // temporary commented
       /*
@@ -964,8 +965,10 @@ QWidget* SalomeApp_Application::createWindow( const int flag )
     PyConsole_Console* pyCons = new PyConsole_Console( desktop(), new SalomeApp_PyInterp() );
     pyCons->setWindowTitle( tr( "PYTHON_CONSOLE" ) );
     pyCons->setFont(resourceMgr()->fontValue( "PyConsole", "font" ));
+    pyCons->setIsShowBanner(resourceMgr()->booleanValue( "PyConsole", "show_banner", true ));
+    pyCons->setProperty( "shortcut", QKeySequence( "Alt+Shift+P" ) );
     wid = pyCons;
-    pyCons->resize( pyCons->width(), desktop()->height()/4 );
+    //pyCons->resize( pyCons->width(), desktop()->height()/4 );
     pyCons->connectPopupRequest( this, SLOT( onConnectPopupRequest( SUIT_PopupClient*, QContextMenuEvent* ) ) );
   }
   return wid;
index 358809fc3690ae3598557a6fc2654608f2330e36..b8053da90feb990b5723780730adb57277471530 100644 (file)
   </section>
   <section name="PyConsole">
     <!-- Python console preferences -->
+    <parameter name="show_banner"         value="true" />
     <parameter name="font"                value="Helvetic,12" />
     <parameter name="additional_families" value="Helvetic;Helvetica;Helvetica[Adobe];Times;Times[Adobe];Sans Serif;Serif;Monospace;Lucida"/>
   </section>