]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
PAL10668 - smart autosize for object browser
authorasl <asl@opencascade.com>
Fri, 9 Dec 2005 13:32:15 +0000 (13:32 +0000)
committerasl <asl@opencascade.com>
Fri, 9 Dec 2005 13:32:15 +0000 (13:32 +0000)
src/LightApp/LightApp_Application.cxx
src/LightApp/resources/LightApp_msg_en.po
src/ObjBrowser/OB_ListItem.cxx
src/ObjBrowser/OB_ListItem.h
src/ObjBrowser/OB_ListView.cxx
src/ObjBrowser/OB_ListView.h
src/SalomeApp/SalomeApp_Application.cxx
src/SalomeApp/resources/SalomeApp.xml
src/SalomeApp/resources/SalomeApp_msg_en.po

index 18bf4439e84ee6bdb1a8120558a9f998f18140a4..f11a4f23e10604175c82396b9b2fc8c88d05f5c6 100644 (file)
@@ -41,6 +41,7 @@
 
 #include <LogWindow.h>
 #include <OB_Browser.h>
+#include <OB_ListView.h>
 #include <PythonConsole_PyConsole.h>
 
 #include <GLViewer_Viewer.h>
@@ -77,9 +78,6 @@
 #include <qcombobox.h>
 #include <qinputdialog.h>
 
-#define OBJECT_BROWSER_WIDTH 300
-#define OBJECT_COLUMN_WIDTH 150
-
 #ifdef WIN32
 #define DEFAULT_BROWSER "start iexplore.exe"
 #else
@@ -888,6 +886,8 @@ void LightApp_Application::addWindow( QWidget* wid, const int flag, const int st
     myWindows[flag]->setResizeEnabled( true );
     myWindows[flag]->setCloseMode( QDockWindow::Always );
     myWindows[flag]->setName( QString( "dock_window_%1" ).arg( flag ) );
+    myWindows[flag]->setFixedExtentWidth( wid->width() );
+    myWindows[flag]->setFixedExtentHeight( wid->height() );
   }
 
   QFont f;
@@ -1317,10 +1317,12 @@ QWidget* LightApp_Application::createWindow( const int flag )
     ob->setAutoUpdate( true );
     ob->setAutoOpenLevel( 1 );
     ob->setCaption( tr( "OBJECT_BROWSER" ) );
-    ob->listView()->setColumnWidth( 0, OBJECT_COLUMN_WIDTH );
-    ob->resize( OBJECT_BROWSER_WIDTH, ob->height() );
-    ob->setFilter( new LightApp_OBFilter( selectionMgr() ) );
 
+    OB_ListView* ob_list = dynamic_cast<OB_ListView*>( const_cast<QListView*>( ob->listView() ) );
+    if( ob_list )
+      ob_list->setColumnMaxWidth( 0, desktop()->width()/4 );
+
+    ob->setFilter( new LightApp_OBFilter( selectionMgr() ) );
     ob->setNameTitle( tr( "OBJ_BROWSER_NAME" ) );
 
     // Create OBSelector
@@ -1584,6 +1586,13 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref )
                       LightApp_Preferences::Color, "SUPERVGraph", "Title" );
 //  pref->addPreference( tr( "PREF_SUPERV_CTRL_COLOR" ), supervGroup,
 //                    LightApp_Preferences::Color, "SUPERVGraph", "Ctrl" );
+
+  int obTab = pref->addPreference( tr( "PREF_TAB_OBJBROWSER" ), salomeCat );
+  int objSetGroup = pref->addPreference( tr( "PREF_OBJ_BROWSER_SETTINGS" ), obTab );
+  pref->addPreference( tr( "PREF_AUTO_SIZE_FIRST" ), objSetGroup, LightApp_Preferences::Bool,
+                      "ObjectBrowser", "auto_size_first" );
+  pref->addPreference( tr( "PREF_AUTO_SIZE" ), objSetGroup, LightApp_Preferences::Bool,
+                      "ObjectBrowser", "auto_size" );
 }
 
 /*!Changed preferences */
@@ -1646,15 +1655,16 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString
 
   if( sec=="ObjectBrowser" )
   {
-    if( param=="auto_size" )
+    if( param=="auto_size" || param=="auto_size_first" )
     {
       OB_Browser* ob = objectBrowser();
       if( !ob )
        return;
 
-      bool autoSize = resMgr->booleanValue( "ObjectBrowser", "auto_size", false );
+      bool autoSize = resMgr->booleanValue( "ObjectBrowser", "auto_size", false ),
+           autoSizeFirst = resMgr->booleanValue( "ObjectBrowser", "auto_size_first", true );
       ob->setWidthMode( autoSize ? QListView::Maximum : QListView::Manual );
-
+      ob->listView()->setColumnWidthMode( 0, autoSizeFirst ? QListView::Maximum : QListView::Manual );
       updateObjectBrowser( false );
     }
   }
index eb18204a2e0cce7e4bdb0b0f258b189db4211c35..b569c87ac2efe591ae62770f6dc47513b85042e9 100644 (file)
@@ -138,6 +138,9 @@ msgstr "Font"
 msgid "LightApp_Application::PREF_TAB_OBJBROWSER"
 msgstr "Object browser"
 
+msgid "LightApp_Application::PREF_OBJ_BROWSER_SETTINGS"
+msgstr "Object browser settings"
+
 msgid "LightApp_Application::PREF_GROUP_DEF_COLUMNS"
 msgstr "Default columns"
 
@@ -230,6 +233,12 @@ msgstr "Title color"
 msgid "LightApp_Application::PREF_SUPERV_CTRL_COLOR"
 msgstr "Ctrl color"
 
+msgid "LightApp_Application::PREF_AUTO_SIZE"
+msgstr "Auto size for other columns"
+
+msgid "LightApp_Application::PREF_AUTO_SIZE_FIRST"
+msgstr "Auto size for first column"
+
 //=======================================================================================
 
 msgid "LightApp_PreferencesDlg::CAPTION"
index fb821308f2d2d6c8bcf8c9f87f5b3f19d3356762..b2ced5c7bc77fbd83574f3ecc87ae88633a6ec3b 100755 (executable)
@@ -192,6 +192,17 @@ int OB_ListItem::rtti() const
   return RTTI();
 }
 
+void OB_ListItem::setText( int column, const QString& text )
+{
+  QListViewItem::setText( column, text );
+  QFontMetrics fm = listView()->fontMetrics();
+  int necessary = width( fm, listView(), column ),
+      current = listView()->columnWidth( column );
+
+  if( listView()->columnWidthMode( column )==QListView::Maximum && necessary>current )
+    listView()->setColumnWidth( column, necessary );
+}
+
 /*!
     Class: OB_CheckListItem
     Descr: Check list view item for OB_Browser.
index 071ec308a68883b82258df78c1a2d24353ea0146..6b06cd8424fdbfd81e77f8561ceb473a669ffabb 100755 (executable)
@@ -75,6 +75,7 @@ public:
   virtual void            paintFocus( QPainter* p, const QColorGroup& cg, const QRect& r );
   virtual void            paintCell( QPainter* p, const QColorGroup& cg, int c, int w, int align );
 
+  virtual void setText ( int column, const QString & text );
 
   virtual int      rtti() const;
 
index 70a9ca63534006199aae9865dae82e3db3da2f12..5f3894120f7d2340d7f72dced541922c0e0576c1 100755 (executable)
@@ -162,3 +162,39 @@ bool OB_ListView::isDropAccepted( QListViewItem* drag, QListViewItem* drop ) con
 
   return dropObj->isDropAccepted( dragObj );
 }
+
+void OB_ListView::setColumnWidth( int col, int width )
+{
+  int max = columnMaxWidth( col );
+  if( max>0 && width>max )
+    width = max;
+  QListView::setColumnWidth( col, width );
+}
+
+int OB_ListView::columnMaxWidth( const int col ) const
+{
+  int res = -1;
+  if( myMaxColWidth.contains( col ) )
+    res = myMaxColWidth[col];
+  else if( myMaxColRatio[col] )
+    res = int( myMaxColRatio[col]*height() );
+  return res;
+}
+
+void OB_ListView::setColumnMaxWidth( const int col, const int w )
+{
+  myMaxColWidth.insert( col, w );
+}
+
+double OB_ListView::columnMaxRatio( const int col ) const
+{
+  double res = 0.0;
+  if( myMaxColRatio.contains( col ) )
+    res = myMaxColRatio[col];
+  return res;
+}
+
+void OB_ListView::setColumnMaxRatio( const int col, const double r )
+{
+  myMaxColRatio.insert( col, r );
+}
index 5c9feb5d117174fd9a26c71a8f406a447a532668..03a394c213bd1c23a2e7a986ed4f39942f86744c 100755 (executable)
@@ -47,6 +47,11 @@ public:
   void                    setFilter( OB_Filter* );
 
   bool                    isOk( QListViewItem* ) const;
+  virtual void            setColumnWidth( int, int );
+  int                     columnMaxWidth( const int ) const;
+  void                    setColumnMaxWidth( const int, const int );
+  double                  columnMaxRatio( const int ) const;
+  void                    setColumnMaxRatio( const int, const double );
 
 signals:
   void                    dropped( QPtrList<QListViewItem>, QListViewItem*, int );
@@ -69,6 +74,8 @@ private:
 protected:
   QPtrList<QListViewItem> myItems;
   OB_Filter*              myFilter;
+  QMap<int,int>           myMaxColWidth;
+  QMap<int,double>        myMaxColRatio;
 };
 
 #ifdef WIN32
index f1477565a50737fc04cec5f475bada946e966b14..a73131d0215886b2f9b16787dd1a5560bf8840b6 100644 (file)
@@ -557,7 +557,8 @@ QWidget* SalomeApp_Application::createWindow( const int flag )
   {
     OB_Browser* ob = (OB_Browser*)wid;
     connect( ob->listView(), SIGNAL( doubleClicked( QListViewItem* ) ), this, SLOT( onDblClick( QListViewItem* ) ) );
-    bool autoSize = resMgr->booleanValue( "ObjectBrowser", "auto_size", false );
+    bool autoSize = resMgr->booleanValue( "ObjectBrowser", "auto_size", false ),
+         autoSizeFirst = resMgr->booleanValue( "ObjectBrowser", "auto_size_first", true );
     for ( int i = SalomeApp_DataObject::CT_Value; i <= SalomeApp_DataObject::CT_RefEntry; i++ )
     {
       ob->addColumn( tr( QString().sprintf( "OBJ_BROWSER_COLUMN_%d", i ) ), i );
@@ -565,6 +566,8 @@ QWidget* SalomeApp_Application::createWindow( const int flag )
                                                    QString().sprintf( "visibility_column_%d", i ), true ) );
     }
     ob->setWidthMode( autoSize ? QListView::Maximum : QListView::Manual );
+    ob->listView()->setColumnWidthMode( 0, autoSizeFirst ? QListView::Maximum : QListView::Manual );
+    ob->resize( desktop()->width()/3, ob->height() );
   }
   else if ( flag == WT_PyConsole )
   {
@@ -573,6 +576,7 @@ QWidget* SalomeApp_Application::createWindow( const int flag )
     PythonConsole* pyCons = new PythonConsole( desktop(), new SalomeApp_PyInterp() );
     pyCons->setCaption( tr( "PYTHON_CONSOLE" ) );
     wid = pyCons;
+    pyCons->resize( pyCons->width(), desktop()->height()/4 );
     //    pyCons->connectPopupRequest( this, SLOT( onConnectPopupRequest( SUIT_PopupClient*, QContextMenuEvent* ) ) );
   }
   return wid;
@@ -595,9 +599,6 @@ void SalomeApp_Application::createPreferences( LightApp_Preferences* pref )
                          LightApp_Preferences::Bool, "ObjectBrowser", QString().sprintf( "visibility_column_%d", i ) );
   }
   pref->setItemProperty( defCols, "columns", 1 );
-
-  int objSetGroup = pref->addPreference( tr( "PREF_OBJ_BROWSER_SETTINGS" ), obTab );
-  pref->addPreference( tr( "PREF_AUTO_SIZE" ), objSetGroup, LightApp_Preferences::Bool, "ObjectBrowser", "auto_size" );
 }
 
 /*!Update desktop title.*/
index f4a1acd58db65abbe0bded17a0337d09da08762b..7f28000b87e703d5ee0abe28823f27149007b0d9 100644 (file)
@@ -89,7 +89,8 @@
   </section>
   <section name="ObjectBrowser" >
     <parameter value="false" name="auto_size" />
-    <parameter value="true" name="visibility_column_0" />
+    <parameter value="true"  name="auto_size_first" />
+    <parameter value="true"  name="visibility_column_0" />
     <parameter value="false" name="visibility_column_1" />
     <parameter value="false" name="visibility_column_2" />
     <parameter value="false" name="visibility_column_3" />
index ef835c709304b901b50d319f5f17692df9e4373f..63a7477fa6c351e3bf295d43dcbb9d66a8cd52a5 100644 (file)
@@ -99,8 +99,8 @@ msgstr "Object browser"
 msgid "SalomeApp_Application::MEN_OPENWITH"
 msgstr "Activate Module"
 
-msgid "SalomeApp_Application::MEN_DELETE_REFERENCE"
-msgstr "Delete Reference"
+msgid "SalomeApp_Application::MEN_DELETE_INVALID_REFERENCE"
+msgstr "Delete Invalid Reference"
 
 //=======================================================================================
 
@@ -118,9 +118,6 @@ msgstr "Default columns"
 msgid "SalomeApp_Application::PREF_OBJ_BROWSER_SETTINGS"
 msgstr "Settings"
 
-msgid "SalomeApp_Application::PREF_AUTO_SIZE"
-msgstr "Auto size columns"
-
 //=======================================================================================
 
 msgid "SalomeApp_Application::OBJ_BROWSER_NAME"