]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Implementation of the "21386: [CEA 510] Plot2d Highlight curves in the viewer" issue.
authorrnv <rnv@opencascade.com>
Fri, 21 Oct 2011 11:23:19 +0000 (11:23 +0000)
committerrnv <rnv@opencascade.com>
Fri, 21 Oct 2011 11:23:19 +0000 (11:23 +0000)
17 files changed:
src/LightApp/LightApp_Application.cxx
src/LightApp/LightApp_Plot2dSelector.cxx
src/LightApp/LightApp_Plot2dSelector.h
src/LightApp/resources/LightApp.xml
src/LightApp/resources/LightApp_msg_en.ts
src/Plot2d/Plot2d_Curve.cxx
src/Plot2d/Plot2d_Histogram.cxx
src/Plot2d/Plot2d_Object.cxx
src/Plot2d/Plot2d_Object.h
src/Plot2d/Plot2d_PlotItems.cxx
src/Plot2d/Plot2d_PlotItems.h
src/Plot2d/Plot2d_ViewFrame.cxx
src/Plot2d/Plot2d_ViewFrame.h
src/Plot2d/Plot2d_ViewModel.cxx
src/Plot2d/Plot2d_ViewModel.h
src/SPlot2d/SPlot2d_ViewModel.cxx
src/SPlot2d/SPlot2d_ViewModel.h

index d7f99ce9e5eba00d35513d81bf16af55052ca8ec..4edd203cd24bc810a2d7435572fe2c85b3aba236 100644 (file)
@@ -2241,9 +2241,7 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref )
   pref->setItemProperty( "strings", aValuesList,   legendPosition );
   pref->setItemProperty( "indexes", anIndicesList, legendPosition );
 
-  pref->addPreference( tr( "PREF_FONT" ), plot2dGroup, LightApp_Preferences::Font, "Plot2d", "LegendFont" );
-  
-  pref->addPreference( tr( "PREF_FONT_COLOR" ), plot2dGroup, LightApp_Preferences::Color, "Plot2d", "LegendColor" );
+  pref->addPreference( tr( "PREF_LEGEND_FONT" ), plot2dGroup, LightApp_Preferences::Font, "Plot2d", "LegendFont" );
 
   int curveType = pref->addPreference( tr( "PREF_CURVE_TYPE" ), plot2dGroup,
                                        LightApp_Preferences::Selector, "Plot2d", "CurveType" );
@@ -2281,6 +2279,14 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref )
   pref->addPreference( tr( "PREF_VIEWER_BACKGROUND" ), plot2dGroup,
                        LightApp_Preferences::Color, "Plot2d", "Background" );
 
+  pref->addPreference( tr( "PREF_FONT_COLOR" ), plot2dGroup, LightApp_Preferences::Color, "Plot2d", "LegendFontColor" );
+
+  pref->addPreference( tr( "PREF_SELECTED_FONT_COLOR" ), plot2dGroup, LightApp_Preferences::Color, "Plot2d", "SelectedLegendFontColor" );
+
+  pref->addPreference( tr( "PREF_VIEWER_SELECTION" ), plot2dGroup,
+                       LightApp_Preferences::Color, "Plot2d", "SelectionColor" );
+
+
   int dirTab = pref->addPreference( tr( "PREF_TAB_DIRECTORIES" ), salomeCat );
   int dirGroup = pref->addPreference( tr( "PREF_GROUP_DIRECTORIES" ), dirTab );
   pref->addPreference( tr( "" ), dirGroup,
@@ -2736,6 +2742,19 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString
          QtxWebBrowser::webBrowser()->close();
       }
   }
+
+#ifndef DISABLE_PLOT2DVIEWER
+  if ( sec == "Plot2d" ) {
+    if( param == "SelectionColor" ) {
+      QColor c = resMgr->colorValue( sec, param );
+      Plot2d_Object::setSelectionColor(c);
+    }
+    else if (param == "SelectedLegendFontColor") {
+      QColor c = resMgr->colorValue( sec, param );      
+      Plot2d_Object::setHighlightedLegendTextColor(c);
+    }
+  }
+#endif
 }
 
 /*!
index 79b8dcd9cbd888e5ef076270b751f403a706972f..05b7c514dec3bde45033be9c29ec0c6b89c56d81 100755 (executable)
 #include "LightApp_DataObject.h"
 #include "LightApp_Application.h"
 
+#include <SPlot2d_ViewModel.h>
+
+#include <SALOME_ListIO.hxx>
+
 /*!
   Constructor
 */
 LightApp_Plot2dSelector::LightApp_Plot2dSelector( Plot2d_Viewer* v, SUIT_SelectionMgr* mgr )
-: SUIT_Selector( mgr, v )
+  : SUIT_Selector( mgr, v ),
+    myViewer(v)
 {
   if ( v )
     connect( v, SIGNAL( legendSelected( const QString& ) ), this, SLOT( onSelectionChanged( const QString& ) ) );
@@ -46,16 +51,27 @@ LightApp_Plot2dSelector::~LightApp_Plot2dSelector()
 void LightApp_Plot2dSelector::getSelection( SUIT_DataOwnerPtrList& theList ) const
 {
   if( !myCurEntry.isNull() )
-    theList.append( new LightApp_DataOwner( myCurEntry ) );
+    theList.append( new LightApp_DataOwner( new SALOME_InteractiveObject(qPrintable(myCurEntry),"","") ) );
 }
 
 /*!Sets selection.*/
 void LightApp_Plot2dSelector::setSelection( const SUIT_DataOwnerPtrList& theList )
 {
-  /*  if( theList.count()>0 )
-    myCurEntry = theList.first()->getEntry();
-  else*/
-  myCurEntry = QString::null;
+  SALOME_ListIO anIOList;
+  for ( SUIT_DataOwnerPtrList::const_iterator it = theList.begin(); it != theList.end(); ++it ) {
+    const LightApp_DataOwner* owner = dynamic_cast<const LightApp_DataOwner*>( (*it).operator->() );
+    if ( owner  ) {
+      if( !owner->IO().IsNull() ) {
+       anIOList.Append(owner->IO());
+      } else if ( !owner->entry().isEmpty() ) {
+       anIOList.Append( new SALOME_InteractiveObject(qPrintable(owner->entry()),"","") );
+      }      
+    }
+  }
+  SPlot2d_Viewer* v = dynamic_cast<SPlot2d_Viewer*>(myViewer);
+
+  if(v)
+    v->setObjectsSelected(anIOList);
 }
 
 /*!On selection changed.*/
@@ -63,4 +79,5 @@ void LightApp_Plot2dSelector::onSelectionChanged( const QString& entry )
 {
   myCurEntry = entry;
   selectionChanged();
+  myCurEntry = QString();
 }
index afe970a46bfd4a7b13f8a15d0d542b8360fa1c01..4032fa8ed57cff5e0cd70daabc3e5e7e0008afff 100755 (executable)
@@ -51,7 +51,8 @@ protected:
   virtual void setSelection( const SUIT_DataOwnerPtrList& );
 
 private:
-  QString myCurEntry;
+  QString             myCurEntry;
+  Plot2d_Viewer*      myViewer;
 };
 
 #endif
index 87b0a4f0396ffe95fe33e15beda932ee3c5c55dc..fa09126ea34b4b70a94cf90e3a6c4577329ba1ba 100644 (file)
  <section name="Plot2d" >
     <!-- Plot2d viewer preferences -->
     <parameter name="Background"   value="255, 255, 255" />
+    <parameter name="SelectionColor"   value="80, 80, 80" />
     <parameter name="CurveType"    value="1" />
     <parameter name="HorScaleMode" value="0" />
     <parameter name="LegendPos"    value="1" />
     <parameter name="LegendFont"   value="Helvetic,12" />
-    <parameter name="LegendColor"  value="0, 0, 0" />
+    <parameter name="LegendFontColor"  value="0, 0, 0" />
+    <parameter name="SelectedLegendFontColor"  value="255, 255, 255" />
     <parameter name="MarkerSize"   value="9" />
     <parameter name="ShowLegend"   value="true" />
     <parameter name="VerScaleMode" value="0" />
index 2ff4b920ed0c47a60cf0dbc4fdb0739219149810..9ee4fcba3f71305644721548540a4a3bf9b1e318 100644 (file)
@@ -522,6 +522,10 @@ The changes will be applied on the next application session.</translation>
         <source>PREF_VIEWER_BACKGROUND</source>
         <translation>Background color</translation>
     </message>
+    <message>
+        <source>PREF_VIEWER_SELECTION</source>
+        <translation>Selection color</translation>
+    </message>    
     <message>
         <source>PREF_XYVIEWER_BACKGROUND</source>
         <translation>XY View background color</translation>
@@ -542,10 +546,18 @@ The changes will be applied on the next application session.</translation>
         <source>PREF_FONT</source>
         <translation>Font</translation>
     </message>
+    <message>
+        <source>PREF_LEGEND_FONT</source>
+        <translation>Legend font</translation>
+    </message>
     <message>
         <source>PREF_FONT_COLOR</source>
         <translation>Legend font color</translation>
     </message>
+    <message>
+        <source>PREF_SELECTED_FONT_COLOR</source>
+        <translation>Highlighted legend font color</translation>
+    </message>                         
     <message>
         <source>PREF_LEFT</source>
         <translation>Left</translation>
index 26285b3e88e0e63e042298b8d3b07aead03acdb0..c225716a2aa2fcfefb7ec3580442b680fb68ee8a 100755 (executable)
@@ -118,7 +118,7 @@ void Plot2d_Curve::updatePlotItem( QwtPlotItem* theItem )
   if ( theItem->rtti() != rtti() )
     return;
 
-  QwtPlotCurve* aCurve = dynamic_cast<QwtPlotCurve*>( theItem );
+  Plot2d_QwtPlotCurve* aCurve = dynamic_cast<Plot2d_QwtPlotCurve*>( theItem );
   if ( !aCurve )
     return;
 
@@ -126,11 +126,25 @@ void Plot2d_Curve::updatePlotItem( QwtPlotItem* theItem )
 
   Qt::PenStyle     ps = Plot2d::plot2qwtLine( getLine() );
   QwtSymbol::Style ms = Plot2d::plot2qwtMarker( getMarker() );
+  
+  QColor aColor = isSelected() ?  Plot2d_Object::selectionColor() : getColor();
+  int lineW = getLineWidth(); 
+  if ( isSelected() ) lineW += (lineW == 0 ? 3 : 2);
 
-  aCurve->setPen( QPen( getColor(), getLineWidth(), ps ) );
-  aCurve->setSymbol( QwtSymbol( ms, QBrush( getColor() ), 
-                               QPen( getColor() ), 
-                               QSize( getMarkerSize(), getMarkerSize() ) ) );
+  int markerS = isSelected() ? getMarkerSize() + 2 : getMarkerSize();
+
+  aCurve->setSelected(isSelected());
+
+  aCurve->setPen( QPen(aColor , lineW, ps ) );
+  aCurve->setSymbol( QwtSymbol( ms, QBrush( aColor ), 
+                               QPen( aColor ), 
+                               QSize( markerS , markerS ) ) );
+
+  aCurve->setLegendPen(QPen(getColor(), getLineWidth(), ps ));
+  aCurve->setLegendSymbol( QwtSymbol( ms, QBrush( getColor() ), 
+                                     QPen( getColor() ), 
+                                     QSize( getMarkerSize() , getMarkerSize() )));
+  
   double *x, *y;
   long nb = getData( &x, &y );
   aCurve->setData( x, y, nb );
index df75e41b820800f2665930d0cab98310e78876aa..f2832fdf13bb70bd9e5890041b7a19c0f168d536 100644 (file)
@@ -111,7 +111,9 @@ void Plot2d_Histogram::updatePlotItem( QwtPlotItem* theItem )
   Plot2d_Object::updatePlotItem( theItem );
 
   anItem->setData( getData() );
-  anItem->setColor( getColor() );
+  anItem->setLegendPen(getColor());
+  anItem->setSelected(isSelected());
+  anItem->setColor( isSelected() ? Plot2d_Object::selectionColor() : getColor() );
 }
 
 /*!
index 85b2480cb2a7d4fe1d0ce45218b489933b13815c..c018e99f521f3cea01179afebe60dca7b52e2629 100755 (executable)
 
 #include "Plot2d_Object.h"
 
+
+#include <SUIT_Session.h>
+#include <SUIT_ResourceMgr.h>
+
 // color tolerance (used to compare color values)
 const long COLOR_DISTANCE = 100;
 
+
+// Static members
+QColor Plot2d_Object::mySelectionColor;
+QColor Plot2d_Object::myHighlightedLegendTextColor;
+
+/*
+ * Read colors from the resource manager.
+*/
+void Plot2d_Object::initColors() {
+  SUIT_Session* session = SUIT_Session::session();
+  if(!session)
+    return;
+
+  SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+  if(resMgr) {
+    mySelectionColor = resMgr->colorValue( "Plot2d", "SelectionColor", QColor(80,80,80) );
+    myHighlightedLegendTextColor = resMgr->colorValue( "Plot2d", "SelectedLegendFontColor", QColor(255,255,255) );
+  }
+}
+
 /*!
   Constructor
 */
@@ -53,7 +77,8 @@ Plot2d_Object::Plot2d_Object()
   myHorUnits( "" ), myVerUnits( "" ),
   myName( "" ),
   myXAxis( QwtPlot::xBottom ),
-  myYAxis( QwtPlot::yLeft )
+  myYAxis( QwtPlot::yLeft ),
+  myIsSelected(false)
 {
 }
 
@@ -484,3 +509,44 @@ bool Plot2d_Object::closeColors( const QColor& color1,
   return tol <= 0;
 }
 
+/*!
+  Sets object's selected property
+*/
+void Plot2d_Object::setSelected(const bool on) {
+  myIsSelected = on;
+}
+
+/*!
+  Gets object's selected property
+*/
+bool Plot2d_Object::isSelected() const {
+  return myIsSelected;
+}
+
+/*!
+ * Sets selection color of the object.
+*/
+void Plot2d_Object::setSelectionColor(const QColor& c) {
+  mySelectionColor = c;
+}
+
+/*!
+ * Return selection color of the object.
+*/
+QColor Plot2d_Object::selectionColor() {
+  return mySelectionColor;
+}
+
+/*!
+ * Sets font color of the selected legend item.
+*/
+void Plot2d_Object::setHighlightedLegendTextColor(const QColor& c) {
+  myHighlightedLegendTextColor = c;
+}
+
+/*!
+ * Sets font color of the selected legend item.
+*/
+QColor Plot2d_Object::highlightedLegendTextColor() {
+  return myHighlightedLegendTextColor;
+}
index a35b8625fae65d1ae3171acf7686f2ede2bfc393..5a2fffb662e37f022018bac42ad4f99c73d8a301 100755 (executable)
@@ -107,8 +107,19 @@ public:
   double               getMaxX() const;
   double               getMinY() const;
   double               getMaxY() const;
+  
+  void                 setSelected(const bool);
+  bool                 isSelected() const;
 
   static bool          closeColors( const QColor&, const QColor&, int distance = -1 );
+  
+  static void initColors();
+  
+  static void   setSelectionColor(const QColor& c);
+  static QColor selectionColor();
+
+  static void   setHighlightedLegendTextColor(const QColor& c);
+  static QColor highlightedLegendTextColor();
 
 protected:
   bool                 myAutoAssign;
@@ -121,6 +132,11 @@ protected:
   QwtPlot::Axis        myYAxis;
 
   pointList            myPoints;
+  bool                 myIsSelected;
+
+ private:
+  static QColor mySelectionColor;            //!< Color of the selected curve or histogram
+  static QColor myHighlightedLegendTextColor;  //!< Color of the selected legend item font
 };
 
 typedef QList<Plot2d_Object*> objectList;
index 2f058acb2ab5c8ca1f9732f8acd580727dcd0ed6..5e23d88c416cb7f2d767cdcd9c554dc360ee74aa 100644 (file)
 //  Author : Natalia ERMOLAEVA, Open CASCADE S.A.S. (natalia.donis@opencascade.com)
 
 #include "Plot2d_PlotItems.h"
+#include "Plot2d_Object.h"
 
 #include <QPainter>
+#include <QPalette>
+#include <QLayout>
 #include <qwt_plot.h>
 #include <qwt_painter.h>
 #include <qwt_scale_map.h>
@@ -71,7 +74,8 @@ const char* yAxisRight[] = {
 */
 Plot2d_QwtLegendItem::Plot2d_QwtLegendItem( QWidget* parent ) :
   QwtLegendItem( parent ),
-  myYAxisIdentifierMode( IM_None )
+  myYAxisIdentifierMode( IM_None ),
+  myIsSelected(false)
 {
   myYAxisLeftIcon = yAxisLeft;
   myYAxisRightIcon = yAxisRight;
@@ -112,18 +116,65 @@ void Plot2d_QwtLegendItem::drawIdentifier( QPainter* painter, const QRect& rect
   }
 }
 
+/*!
+  Update highliting on the item.
+*/
+void Plot2d_QwtLegendItem::updateHighlit() {
+  QwtText txt = text();
+  if(isSelected()) {
+    QColor highlightColor = Plot2d_Object::selectionColor();
+    if(highlightColor != txt.backgroundBrush().color()) {
+      txt.setBackgroundBrush(highlightColor);
+      setText(txt);
+    }    
+  } else if( QWidget* parent = qobject_cast<QWidget*>(this->parent()->parent()) ) {
+    QPalette aPal = parent->palette();
+    if(aPal.color(QPalette::Background) != txt.backgroundBrush().color()) {
+      txt.setBackgroundBrush(aPal.color(QPalette::Background));
+      setText(txt);
+    }
+  }
+}
+
+/*!
+  Sets selected property.
+*/
+void Plot2d_QwtLegendItem::setSelected(const bool on) {
+  myIsSelected = on;
+}
+
+/*!
+  Gets selected property.
+*/
+bool Plot2d_QwtLegendItem::isSelected() const {
+  return myIsSelected;
+}
+
+
+/*
+  Draw text of the item.
+*/
 void  Plot2d_QwtLegendItem::drawText(QPainter * painter, const QRect &rect) {
+  painter->setPen( isSelected() ? Plot2d_Object::highlightedLegendTextColor() : 
+                  getColorFromPalette( QPalette::Text) );
+  
+  QwtLegendItem::drawText( painter, rect );
+}
+
+/*
+  Get color from the legend pallete by 'role' flag.
+*/
+QColor Plot2d_QwtLegendItem::getColorFromPalette(QPalette::ColorRole role) {
   QWidget* pw = parentWidget(); 
-  QColor  col = palette().color( QPalette::WindowText );
+  QColor  col = palette().color( role );
   while( pw ) {
     if ( qobject_cast<QwtLegend*>( pw ) ) {
-         col = pw->palette().color( QPalette::WindowText );
+      col = pw->palette().color(role );
       break;
     }
     pw = pw->parentWidget();
   } 
-  painter->setPen( col );
-  QwtLegendItem::drawText( painter, rect );
+  return col;
 }
 
 /*!
@@ -131,9 +182,10 @@ void  Plot2d_QwtLegendItem::drawText(QPainter * painter, const QRect &rect) {
 */
 Plot2d_QwtPlotCurve::Plot2d_QwtPlotCurve( const QString& title,
                                           QwtPlot::Axis yAxis /*const int index*/ ) :
+  Plot2d_SelectableItem(),                                       
   QwtPlotCurve( title ),
   myYAxis( yAxis ),
-  myYAxisIdentifierEnabled( false )
+  myYAxisIdentifierEnabled( false )  
 {
 }
 
@@ -157,10 +209,35 @@ void Plot2d_QwtPlotCurve::setYAxisIdentifierEnabled( const bool on )
 */
 void Plot2d_QwtPlotCurve::updateLegend( QwtLegend* legend ) const
 {
-  QwtPlotCurve::updateLegend( legend );
-
-  if ( legend ) {
-    QWidget* widget = legend->find( this );
+  if ( !legend )
+    return; 
+
+  QWidget* widget = legend->find( this );
+
+  if ( testItemAttribute(QwtPlotItem::Legend)) {   
+
+    if ( widget == NULL ) {
+      widget = legendItem();
+      if ( widget ) {
+       if ( widget->inherits("QwtLegendItem") ) {
+         QwtLegendItem *label = (QwtLegendItem *)widget;
+         label->setItemMode(legend->itemMode());
+               
+         if ( plot() ) {
+           QObject::connect(label, SIGNAL(clicked()),
+                            plot(), SLOT(legendItemClicked()));
+           QObject::connect(label, SIGNAL(checked(bool)),
+                            plot(), SLOT(legendItemChecked(bool)));
+         }
+       }
+       legend->contentsWidget()->layout()->addWidget(widget);
+       legend->insert(this, widget);
+      }
+    }
+    
+    QwtPlotCurve::updateLegend( legend );
+    
+    
     if( Plot2d_QwtLegendItem* anItem = dynamic_cast<Plot2d_QwtLegendItem*>( widget ) ) {
       int aMode = Plot2d_QwtLegendItem::IM_None;
       if( myYAxisIdentifierEnabled )
@@ -168,6 +245,12 @@ void Plot2d_QwtPlotCurve::updateLegend( QwtLegend* legend ) const
          Plot2d_QwtLegendItem::IM_Right :
          Plot2d_QwtLegendItem::IM_Left;
       anItem->setYAxisIdentifierMode( aMode );
+      if(isSelected()) {
+       anItem->setCurvePen(legendPen());
+       anItem->setSymbol(legendSymbol());
+      }
+      anItem->setSelected(isSelected());
+      anItem->updateHighlit();
     }
   }
 }
@@ -179,6 +262,62 @@ QWidget* Plot2d_QwtPlotCurve::legendItem() const
 {
   return new Plot2d_QwtLegendItem;
 }
+/*!
+  Constructor.
+*/
+Plot2d_SelectableItem::Plot2d_SelectableItem():
+  myIsSelected(false)
+{ 
+}
+
+/*!
+  Destructor.
+*/
+Plot2d_SelectableItem::~Plot2d_SelectableItem()
+{ 
+}
+
+/*!
+  Sets selected property.
+*/
+void Plot2d_SelectableItem::setSelected( const bool on) {
+  myIsSelected = on;
+}
+
+/*!
+  Return selected property.
+*/
+bool Plot2d_SelectableItem::isSelected() const {
+  return myIsSelected;
+}
+
+/*!
+  Sets legend pen property.
+*/  
+void Plot2d_SelectableItem::setLegendPen( const QPen & p) {
+  myLegendPen = p;
+}
+
+/*!
+  Return legend pen property.
+*/  
+QPen Plot2d_SelectableItem::legendPen() const {
+  return myLegendPen;
+}
+
+/*!
+  Sets legend symbol property.
+*/  
+void Plot2d_SelectableItem::setLegendSymbol(const QwtSymbol& s) {
+  myLegendSymbol = s;
+}
+
+/*!
+  Sets legend symbol property.
+*/  
+QwtSymbol Plot2d_SelectableItem::legendSymbol() const {
+  return myLegendSymbol;
+}
 
 /*!
   Constructor
@@ -444,7 +583,8 @@ void Plot2d_HistogramQwtItem::drawBar( QPainter* thePainter,
   Constructor
 */
 Plot2d_HistogramItem::Plot2d_HistogramItem( const QwtText& theTitle )
-: Plot2d_HistogramQwtItem( theTitle ), 
+: Plot2d_HistogramQwtItem( theTitle ),
+  Plot2d_SelectableItem(), 
   myCrossed( true )
 {
 }
@@ -487,14 +627,16 @@ void Plot2d_HistogramItem::updateLegend( QwtLegend* theLegend ) const
   if ( !theWidget || !theWidget->inherits( "QwtLegendItem" ) )
     return;
 
-  QwtLegendItem* anItem = ( QwtLegendItem* )theWidget;
+  Plot2d_QwtLegendItem* anItem = ( Plot2d_QwtLegendItem* )theWidget;
   QFontMetrics aFMetrics( anItem->font() );
   int aSize = aFMetrics.height();
-  QwtSymbol aSymbol( QwtSymbol::Rect, QBrush( color() ),
-                     QPen( color() ), QSize( aSize, aSize ) );
+  QwtSymbol aSymbol( QwtSymbol::Rect, QBrush( legendPen().color() ),
+                     QPen( legendPen().color() ), QSize( aSize, aSize ) );
   anItem->setSymbol( aSymbol );
   anItem->setIdentifierMode( theLegend->identifierMode()
                             | QwtLegendItem::ShowSymbol ); 
+  anItem->setSelected(isSelected());
+  anItem->updateHighlit();
   anItem->update();
 }
 
@@ -588,6 +730,15 @@ bool Plot2d_HistogramItem::isCrossItems() const
   return myCrossed;
 }
 
+/*!
+  Redefined method, which creates and returns legend item of the curve
+*/
+QWidget* Plot2d_HistogramItem::legendItem() const
+{
+  return new Plot2d_QwtLegendItem;
+}
+
+
 /*!
   Draws bar of histogram and on it bars of histograms with lower height.
 */
index 68decac651d92d63f754c96881aef9bd4a89db2d..9ae278acc9d6e787ebb2b0edec082927a705cbc3 100644 (file)
@@ -44,20 +44,47 @@ public:
 
 public:
   void             setYAxisIdentifierMode( const int );
+  void             updateHighlit();
+  void             setSelected(const bool on);
+  bool             isSelected() const;
+  QColor           getColorFromPalette(QPalette::ColorRole role);  
 
 protected:
   virtual void     drawIdentifier( QPainter*, const QRect& ) const;
   virtual void     drawText(QPainter *, const QRect &);
 
+private:
+
 private:
   int              myYAxisIdentifierMode;
   QPixmap          myYAxisLeftIcon;
   QPixmap          myYAxisRightIcon;
   int              mySpacingCollapsed;
   int              mySpacingExpanded;
+  bool             myIsSelected;
 };
 
-class PLOT2D_EXPORT Plot2d_QwtPlotCurve : public QwtPlotCurve
+class PLOT2D_EXPORT Plot2d_SelectableItem {
+public:
+    Plot2d_SelectableItem();
+    ~Plot2d_SelectableItem();
+  
+    void             setSelected( const bool );
+    bool             isSelected() const;
+    
+    void             setLegendPen( const QPen & );
+    QPen             legendPen() const;
+       
+    void             setLegendSymbol( const QwtSymbol& );
+    QwtSymbol        legendSymbol() const;
+    
+private:
+  bool             myIsSelected;
+  QPen             myLegendPen;
+  QwtSymbol        myLegendSymbol;
+};
+
+class PLOT2D_EXPORT Plot2d_QwtPlotCurve : public QwtPlotCurve, public Plot2d_SelectableItem
 {
 public:
   Plot2d_QwtPlotCurve( const QString&, QwtPlot::Axis = QwtPlot::yLeft );
@@ -118,7 +145,7 @@ private:
   double                 myReference;
 };
 
-class PLOT2D_EXPORT Plot2d_HistogramItem : public Plot2d_HistogramQwtItem
+class PLOT2D_EXPORT Plot2d_HistogramItem : public Plot2d_HistogramQwtItem, public Plot2d_SelectableItem
 {
 public:
   explicit Plot2d_HistogramItem( const QString& = QString() );
@@ -139,6 +166,8 @@ protected:
                                            const QRect& ) const;
   int                    getCrossedTop( const QRect& ) const;
 
+  virtual QWidget*       legendItem() const;
+
 protected:
   QList<QRect>           myBarItems;
   bool                   myCrossed;
index 10f2367a71c870445d1316865cb599c3cc225c15..1a231a75819750f4649a6e0a3dc07022effbec68 100755 (executable)
@@ -211,7 +211,7 @@ Plot2d_ViewFrame::Plot2d_ViewFrame( QWidget* parent, const QString& title )
   setBackgroundColor( myBackground );
   setLegendPos( myLegendPos );
   setLegendFont( myLegendFont );
-  setLegendColor( myLegendColor );
+  setLegendFontColor( myLegendColor );
   showLegend( myShowLegend, false );
   myPlot->replot();
 
@@ -378,7 +378,7 @@ void Plot2d_ViewFrame::readPreferences()
   myShowLegend = resMgr->booleanValue( "Plot2d", "ShowLegend", myShowLegend );
   myLegendPos = resMgr->integerValue( "Plot2d", "LegendPos", myLegendPos );
   myLegendFont = resMgr->fontValue( "Plot2d", "LegendFont", myLegendFont );
-  myLegendColor = resMgr->colorValue( "Plot2d", "LegendColor", myLegendColor );
+  myLegendColor = resMgr->colorValue( "Plot2d", "LegendFontColor", myLegendColor );
   myMarkerSize = resMgr->integerValue( "Plot2d", "MarkerSize", myMarkerSize );
   myBackground = resMgr->colorValue( "Plot2d", "Background", myBackground );
 
@@ -420,7 +420,7 @@ void Plot2d_ViewFrame::writePreferences()
   resMgr->setValue( "Plot2d", "ShowLegend", myShowLegend );
   resMgr->setValue( "Plot2d", "LegendPos", myLegendPos );
   resMgr->setValue( "Plot2d", "LegendFont", myLegendFont );
-  resMgr->setValue( "Plot2d", "LegendColor", myLegendColor );
+  resMgr->setValue( "Plot2d", "LegendFontColor", myLegendColor );
   resMgr->setValue( "Plot2d", "MarkerSize", myMarkerSize );
   resMgr->setValue( "Plot2d", "Background", myBackground );
   resMgr->setValue( "Plot2d", "ShowTitle", myTitleEnabled );
@@ -639,7 +639,7 @@ void Plot2d_ViewFrame::displayObject( Plot2d_Object* object, bool update )
 {
   if ( !object )
     return;
-
+  
   if ( object->getYAxis() == QwtPlot::yRight )
     mySecondY = true;
 
@@ -787,6 +787,18 @@ void Plot2d_ViewFrame::updateLegend( const Plot2d_Prs* prs )
   }
 }
 
+/*!
+  update legend
+*/
+void Plot2d_ViewFrame::updateLegend() {
+  if ( myPlot->getLegend() ) {
+    ObjectDict::iterator it = myObjects.begin();
+    for( ; it != myObjects.end(); ++it ) 
+      it.key()->updateLegend(myPlot->getLegend());
+  }
+}
+
+
 /*!
   Fits the view to see all data
 */
@@ -1073,7 +1085,7 @@ void Plot2d_ViewFrame::onSettings()
       setLegendFont( dlg->getLegendFont() );
     }
        if ( myLegendColor != dlg->getLegendColor() ) {
-      setLegendColor( dlg->getLegendColor() );
+      setLegendFontColor( dlg->getLegendColor() );
     }
 
     // marker size
@@ -1196,13 +1208,13 @@ void Plot2d_ViewFrame::showLegend( bool show, bool update )
     QwtLegend* legend = myPlot->legend();
     if ( !legend ) {
       legend = new QwtLegend( myPlot );
-      legend->setFrameStyle( QFrame::Box | QFrame::Sunken );
+      legend->setFrameStyle( QFrame::Box | QFrame::Sunken );      
     }
     legend->setItemMode( QwtLegend::ClickableItem );
     myPlot->insertLegend( legend );
     setLegendPos( myLegendPos );
     setLegendFont( myLegendFont );
-    setLegendColor( myLegendColor );
+    setLegendFontColor( myLegendColor );  
   }
   else
     myPlot->insertLegend( 0 );
@@ -1266,7 +1278,7 @@ QFont Plot2d_ViewFrame::getLegendFont() const
 /*!
   Gets legend font color
 */
-QColor Plot2d_ViewFrame::getLegendColor() const
+QColor Plot2d_ViewFrame::getLegendFontColor() const
 {
   return myLegendColor;
 }
@@ -1274,13 +1286,13 @@ QColor Plot2d_ViewFrame::getLegendColor() const
 /*!
   Sets legend font color
 */
-void Plot2d_ViewFrame::setLegendColor( const QColor& col )
+void Plot2d_ViewFrame::setLegendFontColor( const QColor& col )
 {
   myLegendColor = col;
   QwtLegend* legend = myPlot->legend();
   if ( legend ) {
     QPalette pal = legend->palette();
-    pal.setColor( QPalette::WindowText, col );
+    pal.setColor( QPalette::Text, col );
     legend->setPalette( pal );
   }
 }
@@ -1302,6 +1314,8 @@ void Plot2d_ViewFrame::setMarkerSize( const int size, bool update )
         QwtSymbol aSymbol = crv->symbol();
         aSymbol.setSize( myMarkerSize, myMarkerSize );
         crv->setSymbol( aSymbol );
+       if(it.value())
+         it.value()->setMarkerSize( myMarkerSize );
       }
     }
     if ( update )
@@ -1332,6 +1346,7 @@ void Plot2d_ViewFrame::setBackgroundColor( const QColor& color )
       aPal.setColor( QPalette::Background, myBackground );
     }
     myPlot->getLegend()->setPalette( aPal );
+    updateLegend();
   }
   Repaint();
 }
index 63811bae9d5f38c68f45cb7b18a502b239945170..87418891972a57def6f9fee1afef5b8dedd75f1c 100755 (executable)
@@ -96,6 +96,7 @@ public:
   void           updateObject( Plot2d_Object*, bool = false );
 
   void           updateLegend( const Plot2d_Prs* );
+  void           updateLegend();
   void           fitAll();
   void           fitArea( const QRect& );
   void           fitData( const int, const double, const double,
@@ -119,8 +120,8 @@ public:
   int            getLegendPos() const;
   void           setLegendFont( const QFont& );
   QFont          getLegendFont() const;
-  void           setLegendColor( const QColor& );
-  QColor         getLegendColor() const;
+  void           setLegendFontColor( const QColor& );
+  QColor         getLegendFontColor() const;
   void           setMarkerSize( const int, bool = true  );
   int            getMarkerSize() const;
   void           setBackgroundColor( const QColor& );
index 0caefe4ea009d9b41eac8d0e5fc56264aa15add0..c2fd139cf341de186dd7d027f5f88986ec023941 100755 (executable)
@@ -40,6 +40,7 @@ Plot2d_Viewer::Plot2d_Viewer(bool theAutoDel)
 {
   myPrs = 0;
   myAutoDel = theAutoDel;
+  Plot2d_Object::initColors();
 }
 
 /*!
index 205f93c60ec44b6bdc1bc078be4e77bb0d1a13c5..f120c988c9d33dfa7d3ae250b94a86125b75a064 100755 (executable)
@@ -40,7 +40,7 @@ class PLOT2D_EXPORT Plot2d_Viewer: public SUIT_ViewModel
 
 public:
   static QString Type() { return "Plot2d"; }
-
+  
   Plot2d_Viewer(bool theAutoDel = false);
   ~Plot2d_Viewer();
 
index 51381cf08915326908c67cbdce794ade04d4763f..0c4d53a9b42b0919f9f879d2a785881fb5fbdaa4 100644 (file)
@@ -35,6 +35,7 @@
 #include "SUIT_ViewManager.h"
 
 #include "SALOME_ListIO.hxx"
+#include "SALOME_ListIteratorOfListIO.hxx"
 
 #include <QApplication>
 #include <QToolBar>
@@ -424,3 +425,55 @@ void SPlot2d_Viewer::onLegendClicked( QwtPlotItem* plotItem )
       emit legendSelected( anEntry );
   }
 }
+
+/*!
+  
+*/
+void SPlot2d_Viewer::setObjectsSelected( SALOME_ListIO& theList ) {
+  Plot2d_ViewFrame* aViewFrame = getActiveViewFrame();
+  if(aViewFrame) {
+
+    objectList allObjects;
+    aViewFrame->getObjects( allObjects );
+    
+    bool isSelected = false;
+    SPlot2d_Histogram* h = 0;
+    SPlot2d_Curve* c =0;
+    
+    foreach ( Plot2d_Object* o, allObjects ) {
+      isSelected = false;
+      
+      Handle(SALOME_InteractiveObject) io;
+      if( (h = dynamic_cast<SPlot2d_Histogram*>(o)) && h->hasIO() ) {
+       io = h->getIO();
+      } else if((c = dynamic_cast<SPlot2d_Curve*>(o)) && c->hasIO()) {
+       io = c->getIO();
+      } else {
+       continue;
+      }
+
+      SALOME_ListIteratorOfListIO anIter( theList ); 
+      
+      for( ; anIter.More(); anIter.Next() ) {
+       if ( anIter.Value()->hasEntry() ) {
+         if( io->isSame(anIter.Value()) ) {
+           isSelected = o->isSelected();
+           if( !isSelected ) {
+             o->setSelected(true);
+             aViewFrame->updateObject(o);
+             theList.Remove(anIter);
+             isSelected = true;
+             break;
+           } else 
+             break;
+         }
+       }
+      }
+      if( !isSelected && o->isSelected() != false ) {  
+       o->setSelected(false);
+       aViewFrame->updateObject(o);
+      }
+    }    
+    aViewFrame->Repaint();
+  }
+}
index d5033b272abd11981db95574ec93e30244ee9528..f29904fd8ecfd456c6cbc8331439bf76b267d072 100644 (file)
@@ -75,6 +75,8 @@ public:
   virtual bool         isVisible( const Handle(SALOME_InteractiveObject)& IObject );
   virtual void         GetVisible( SALOME_ListIO& theList );
 
+  virtual void         setObjectsSelected(  SALOME_ListIO& theList );
+
 
   /* operations */
   SPlot2d_Curve*                   getCurveByIO( const Handle(SALOME_InteractiveObject)&, Plot2d_ViewFrame* = 0 );