[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/ksysguard/gui/SensorDisplayLib
From:       John Tapsell <john.tapsell () kdemail ! net>
Date:       2009-11-22 10:43:12
Message-ID: 1258886592.240105.13511.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1052699 by johnflux:

Implement our own multilength Qt richtext label

BUG:199434


 M  +70 -10    FancyPlotter.cc  


--- trunk/KDE/kdebase/workspace/ksysguard/gui/SensorDisplayLib/FancyPlotter.cc \
#1052698:1052699 @@ -26,6 +26,7 @@
 #include <QtGui/QHBoxLayout>
 #include <QtGui/QLabel>
 #include <QtGui/QFontInfo>
+#include <QtGui/QResizeEvent>
 
 
 #include <kdebug.h>
@@ -49,39 +50,98 @@
     QList<QColor> colors;
     QString summationName;
 };
+//A QLabel class that has two possible strings
+class MultiLengthLabel : public QLabel {
+    public:
+        MultiLengthLabel() : QLabel() {
+            mLongWidth = 0;
+            setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+            setAlignment(Qt::AlignRight);
+        }
+        void setShortText(const QString &shortText) {
+            mShortText = shortText;
+            setText(mShortText);
+            setMinimumWidth( QLabel::sizeHint().width() );
+            resizeEvent(NULL);
+        }
+        void setLongText(const QString &longText) {
+            mLongText = longText;
+            setText(mLongText);
+            QSize size = QLabel::sizeHint();
+            mHeight = size.height();
+            mLongWidth = size.width();
+            setMaximumWidth( mLongWidth );
+            updateGeometry();
+            resizeEvent(NULL);
+        }
 
+        virtual QSize sizeHint () const {
+            return QSize( mLongWidth, mHeight );
+        }
+        virtual void resizeEvent( QResizeEvent * ) {
+            if(mLongWidth <= width())
+                setText(mLongText);
+            else
+                setText(mShortText);
+        }
+    private:
+        int mLongWidth;
+        int mHeight;
+        QString mShortText;
+        QString mLongText;
+};
 class FancyPlotterLabel : public QWidget {
   public:
     FancyPlotterLabel(QWidget *parent) : QWidget(parent) {
         QBoxLayout *layout = new QHBoxLayout();
         layout->setContentsMargins(0,0,0,0);
-        label = new QLabel();
+        label = new MultiLengthLabel();
         layout->addWidget(label);
         value = new QLabel();
         layout->addWidget(value);
         layout->addStretch(1);
         setLayout(layout);
+        preferredLabelNameWidth = 0;
     }
     ~FancyPlotterLabel() {
         delete label;
         delete value;
     }
-    void setLabel(const QString &name, const QColor &color, const QChar \
&indicatorSymbol) { +    void setLabel(const QString &name, const QColor &color) {
         labelName = name;
-        changeLabel(color, indicatorSymbol);
+
+        if(indicatorSymbol.isNull()) {
+            if(label->fontMetrics().inFont(QChar(0x25CF)))
+                indicatorSymbol = QChar(0x25CF);
+            else
+                indicatorSymbol = '#';
+        }
+        changeLabel(color);
+
     }
-    void changeLabel(const QColor &color, const QChar &indicatorSymbol) {
+    void changeLabel(const QColor &_color) {
+        color = _color;
+
         if ( kapp->layoutDirection() == Qt::RightToLeft )
-            label->setText(QString("<qt>: ") + labelName + " <font color=\"" + \
color.name() + "\">" + indicatorSymbol + "</font>"); +            \
label->setLongText(QString("<qt>: ") + labelName + " <font color=\"" + color.name() + \
"\">" + indicatorSymbol + "</font>");  else
-            label->setText(QString("<qt><font color=\"") + color.name() + "\">" + \
indicatorSymbol + "</font> " + labelName + " :"); +            \
label->setLongText(QString("<qt><font color=\"") + color.name() + "\">" + \
indicatorSymbol + "</font> " + labelName + " :"); +        \
label->setShortText(QString("<qt><font color=\"") + color.name() + "\">" + \
indicatorSymbol);  }
+    virtual void resizeEvent( QResizeEvent * ) {
+        changeLabel(color);
+    }
 
+    int preferredLabelNameWidth;
     QString labelName;
-    QLabel *label;
+    MultiLengthLabel *label;
     QLabel *value;
+    QColor color;
+    static QChar indicatorSymbol;
 };
 
+QChar FancyPlotterLabel::indicatorSymbol;
+
 FancyPlotter::FancyPlotter( QWidget* parent,
                             const QString &title,
                             SharedSettings *workSheetSettings)
@@ -334,7 +394,7 @@
 void FancyPlotter::setBeamColor(int i, const QColor &color)
 {
         mPlotter->setBeamColor( i, color );
-        static_cast<FancyPlotterLabel *>((static_cast<QWidgetItem \
*>(mLabelLayout->itemAt(i)))->widget())->changeLabel(color, mIndicatorSymbol); +      \
static_cast<FancyPlotterLabel *>((static_cast<QWidgetItem \
*>(mLabelLayout->itemAt(i)))->widget())->changeLabel(color);  }
 bool FancyPlotter::addSensor( const QString &hostName, const QString &name,
         const QString &type, const QString &title )
@@ -364,7 +424,7 @@
         FancyPlotterLabel *label = new FancyPlotterLabel(this);
         mLabelLayout->addWidget(label);
         if(!summationName.isEmpty()) {
-            label->setLabel(summationName, mPlotter->beamColor(mBeams), \
mIndicatorSymbol); +            label->setLabel(summationName, \
mPlotter->beamColor(mBeams));  }
         ++mBeams;
     }
@@ -641,7 +701,7 @@
         int beamId = sensor->beamId;
 
         if(summationName.isEmpty())
-            static_cast<FancyPlotterLabel *>((static_cast<QWidgetItem \
*>(mLabelLayout->itemAt(beamId)))->widget())->setLabel(info.name(), \
mPlotter->beamColor(id-100), mIndicatorSymbol); +            \
static_cast<FancyPlotterLabel *>((static_cast<QWidgetItem \
*>(mLabelLayout->itemAt(beamId)))->widget())->setLabel(info.name(), \
mPlotter->beamColor(id-100));  
     } else if( id == 200) {
         /* FIXME This doesn't check the host!  */


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic