KDE/kdebase/workspace/plasma/applets/tasks

Bill Egert begert at gmail.com
Sun Feb 10 20:17:54 CET 2008


SVN commit 773306 by begert:

CCMAIL: Panel-devel at kde.org

Perhaps I need some more testing with the flowlayout.  I still can reproduce problems with non-bottom panels with my changes reverted, but at least this removes anything these changes could have introduced.

 M  +45 -33    abstracttaskitem.cpp  
 M  +19 -5     taskgroupitem.cpp  
 M  +13 -2     taskgroupitem.h  
 M  +8 -2      tasks.cpp  
 M  +1 -1      windowtaskitem.cpp  


--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/abstracttaskitem.cpp #773305:773306
@@ -183,11 +183,12 @@
     // A fixed maximum size is used instead of calculating the content size
     // because overly-long task items make navigating around the task bar
     // more difficult
-    const QSizeF size(200, 200);
-
+    QSizeF size(200, 200);
+#if 0
     //FIXME HARDCODE
-    //QSizeF sz = QSizeF(MaxTaskIconSize + QFontMetricsF(QApplication::font()).width(text() + IconTextSpacing),
-    //              200);
+    QSizeF sz = QSizeF(MaxTaskIconSize + QFontMetricsF(QApplication::font()).width(text() + IconTextSpacing),
+                  200);
+#endif
 
    // kDebug() << "Task max size hint:" << sz;
 
@@ -223,16 +224,22 @@
 
     if (option->state & QStyle::State_MouseOver
          || m_animId != -1
-         || taskFlags() & TaskHasFocus) {
-
+         || taskFlags() & TaskHasFocus)
+    {
         QLinearGradient background(boundingRect().topLeft(),
                                    boundingRect().bottomLeft());
 
-        QColor startColor = (taskFlags() & TaskHasFocus) ?
-                            colorScheme.background(KColorScheme::NormalBackground).color() :
-                            colorScheme.background(KColorScheme::AlternateBackground).color();
-        QColor endColor = colorScheme.shade(startColor,KColorScheme::DarkShade);
+        QColor startColor;
+        QColor endColor;
 
+        if (taskFlags() & TaskHasFocus) {
+            startColor = colorScheme.background(KColorScheme::NormalBackground).color();
+        } else {
+            startColor = colorScheme.background(KColorScheme::AlternateBackground).color();
+        }
+
+        endColor = colorScheme.shade(startColor,KColorScheme::DarkShade);
+
         const qreal pressedAlpha = 0.2;
 
         qreal alpha = 0;
@@ -266,18 +273,19 @@
 QSize AbstractTaskItem::layoutText(QTextLayout &layout, const QString &text,
                                    const QSize &constraints) const
 {
-    const QFontMetrics metrics(layout.font());
-    const int leading     = metrics.leading();
+    QFontMetrics metrics(layout.font());
+    int leading     = metrics.leading();
     int height      = 0;
-    const int maxWidth    = constraints.width();
+    int maxWidth    = constraints.width();
     int widthUsed   = 0;
-    const int lineSpacing = metrics.lineSpacing();
+    int lineSpacing = metrics.lineSpacing();
     QTextLine line;
 
     layout.setText(text);
 
     layout.beginLayout();
-    while ((line = layout.createLine()).isValid()) {
+    while ((line = layout.createLine()).isValid())
+    {
         height += leading;
 
         // Make the last line that will fit infinitely long.
@@ -314,42 +322,46 @@
     // Create the alpha gradient for the fade out effect
     QLinearGradient alphaGradient(0, 0, 1, 0);
     alphaGradient.setCoordinateMode(QGradient::ObjectBoundingMode);
-    if (layout.textOption().textDirection() == Qt::LeftToRight) {
+    if (layout.textOption().textDirection() == Qt::LeftToRight)
+    {
         alphaGradient.setColorAt(0, QColor(0, 0, 0, 255));
         alphaGradient.setColorAt(1, QColor(0, 0, 0, 0));
-    } else {
+    } else
+    {
         alphaGradient.setColorAt(0, QColor(0, 0, 0, 0));
         alphaGradient.setColorAt(1, QColor(0, 0, 0, 255));
     }
 
-    const QFontMetrics fm(layout.font());
-    const int textHeight = layout.lineCount() * fm.lineSpacing();
-    const QPointF position = textHeight < rect.height() ?
+    QFontMetrics fm(layout.font());
+    int textHeight = layout.lineCount() * fm.lineSpacing();
+    QPointF position = textHeight < rect.height() ?
             QPointF(0, (rect.height() - textHeight) / 2) : QPointF(0, 0);
     QList<QRect> fadeRects;
-    const int fadeWidth = 30;
+    int fadeWidth = 30;
 
     // Draw each line in the layout
-    for (int i = 0; i < layout.lineCount(); i++) {
-        const QTextLine line = layout.lineAt(i);
+    for (int i = 0; i < layout.lineCount(); i++)
+    {
+        QTextLine line = layout.lineAt(i);
         line.draw(&p, position);
 
         // Add a fade out rect to the list if the line is too long
-        if (line.naturalTextWidth() > rect.width()) {
-            const int x = int(qMin(line.naturalTextWidth(), (qreal)pixmap.width())) - fadeWidth;
-            const int y = int(line.position().y() + position.y());
-            const QRect r = QStyle::visualRect(layout.textOption().textDirection(), pixmap.rect(),
+        if (line.naturalTextWidth() > rect.width())
+        {
+            int x = int(qMin(line.naturalTextWidth(), (qreal)pixmap.width())) - fadeWidth;
+            int y = int(line.position().y() + position.y());
+            QRect r = QStyle::visualRect(layout.textOption().textDirection(), pixmap.rect(),
                                          QRect(x, y, fadeWidth, int(line.height())));
             fadeRects.append(r);
         }
     }
 
     // Reduce the alpha in each fade out rect using the alpha gradient
-    if (!fadeRects.isEmpty()) {
+    if (!fadeRects.isEmpty())
+    {
         p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
-        foreach (const QRect &rect, fadeRects) {
+        foreach (const QRect &rect, fadeRects)
             p.fillRect(rect, alphaGradient);
-        }
     }
 
     p.end();
@@ -359,8 +371,8 @@
 
 QTextOption AbstractTaskItem::textOption() const
 {
-    const Qt::LayoutDirection direction = QApplication::layoutDirection();
-    const Qt::Alignment alignment = QStyle::visualAlignment(direction, Qt::AlignLeft | Qt::AlignVCenter);
+    Qt::LayoutDirection direction = QApplication::layoutDirection();
+    Qt::Alignment alignment = QStyle::visualAlignment(direction, Qt::AlignLeft | Qt::AlignVCenter);
 
     QTextOption option;
     option.setTextDirection(direction);
@@ -374,7 +386,7 @@
     QSizeF bounds = boundingRect().size();
     //leave enough space for the text. usefull in vertical panel   
     bounds.setWidth(qMax(bounds.width() / 3, qMin(minimumSize().height(), bounds.width())));
-    const QSize iconSize = _icon.actualSize(bounds.toSize());
+    QSize iconSize = _icon.actualSize(bounds.toSize());
 
     return QStyle::alignedRect(QApplication::layoutDirection(), Qt::AlignLeft | Qt::AlignVCenter,
                                iconSize, boundingRect().toRect());
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/taskgroupitem.cpp #773305:773306
@@ -44,9 +44,11 @@
       m_geometryUpdateTimerId(-1)
 {
    //setAcceptDrops(true);
-   m_layout = new Plasma::FlowLayout(this);
+
+   m_layout = new Plasma::BoxLayout(Plasma::BoxLayout::LeftToRight, this);
    m_layout->setMargin(0);
    m_layout->setSpacing(5);
+   m_layout->setMultiRow(true);
 }
 
 QSizeF TaskGroupItem::maximumSize() const
@@ -155,7 +157,7 @@
         //if _activeTask < _tasks.count() the new _activeTask
         //will be _activeTask+1, else it will be 1
         _tasks[(_activeTask+1)%_tasks.count()].task->activate();
-    } else {
+    }else{
         //if _activeTask > 1 the new _activeTask
         //will be _activeTask-1, else it will be _tasks.count()
         _tasks[(_tasks.count() + _activeTask -1 )%_tasks.count()].task->activate();
@@ -208,6 +210,18 @@
     return _borderStyle;
 }
 
+void TaskGroupItem::setDirection(Plasma::BoxLayout::Direction dir)
+{
+    m_layout->setDirection(dir);
+
+    m_layout->setMultiRow(dir != Plasma::BoxLayout::TopToBottom);
+}
+
+Plasma::BoxLayout::Direction TaskGroupItem::direction()
+{
+    return m_layout->direction();
+}
+
 void TaskGroupItem::paint(QPainter *painter,
                           const QStyleOptionGraphicsItem *option,
                           QWidget *)
@@ -244,8 +258,8 @@
                                const QStyleOptionGraphicsItem *option,
                                const QRectF &area)
 {
-    const QFont smallFont = KGlobalSettings::smallestReadableFont();
-    const QFontMetrics smallFontMetrics(smallFont);
+    QFont smallFont = KGlobalSettings::smallestReadableFont();
+    QFontMetrics smallFontMetrics(smallFont);
 
     if (_color.isValid()) {
         painter->setPen(QPen(Qt::NoPen));
@@ -274,7 +288,7 @@
          // FIXME Check KColorScheme usage here
 
          QLinearGradient titleGradient(titleArea.topLeft(), titleArea.bottomLeft());
-         KColorScheme colorScheme(QPalette::Active, KColorScheme::View, Plasma::Theme::self()->colors());
+         KColorScheme colorScheme(QPalette::Active, KColorScheme::View, Plasma::Theme::self()->colors());        
          titleGradient.setColorAt(0, colorScheme.shade(_color,KColorScheme::DarkShade));
          titleGradient.setColorAt(1, colorScheme.shade(_color,KColorScheme::MidShade));
 
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/taskgroupitem.h #773305:773306
@@ -24,7 +24,7 @@
 #include "abstracttaskitem.h"
 
 // Plasma
-#include <plasma/layouts/flowlayout.h>
+#include <plasma/layouts/boxlayout.h>
 
 /**
  * A graphics item which holds a group of tasks.
@@ -102,6 +102,17 @@
     QColor color() const;
 
     /**
+    * Sets the direction in which tasks are laid out.
+    * @param dir direction
+    */
+    void setDirection(Plasma::BoxLayout::Direction dir);
+
+   /**
+    * @returns direction in which tasks are laid out, default RightToLeft
+    */
+    Plasma::BoxLayout::Direction direction();
+
+    /**
      * Sets whether the task group is collapsed.
      * TODO: Document me
      */
@@ -176,7 +187,7 @@
     int _caretIndex;
     bool _allowSubGroups;
     int m_geometryUpdateTimerId;
-    Plasma::FlowLayout *m_layout;
+    Plasma::BoxLayout *m_layout;
 
     static const int CaretWidth = 5;
     static const int GroupBorderWidth = 16;
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/tasks.cpp #773305:773306
@@ -127,9 +127,9 @@
 
 void Tasks::registerWindowTasks()
 {
-    const TaskManager::TaskManager *manager = TaskManager::TaskManager::self();
+    TaskManager::TaskManager *manager = TaskManager::TaskManager::self();
 
-    const TaskManager::TaskDict tasks = manager->tasks();
+    TaskManager::TaskDict tasks = manager->tasks();
     QMapIterator<WId,TaskPtr> iter(tasks);
 
     while (iter.hasNext()) {
@@ -201,6 +201,12 @@
 void Tasks::constraintsUpdated(Plasma::Constraints constraints)
 {
     if (constraints & Plasma::LocationConstraint) {
+        if (formFactor() == Plasma::Vertical) {
+            m_rootTaskGroup->setDirection(Plasma::BoxLayout::TopToBottom);
+        } else {
+            m_rootTaskGroup->setDirection(Plasma::BoxLayout::LeftToRight);
+        }
+
         foreach (AbstractTaskItem *taskItem, m_windowTaskItems) {
             WindowTaskItem *windowTaskItem = dynamic_cast<WindowTaskItem *>(taskItem);
             if (windowTaskItem) {
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/windowtaskitem.cpp #773305:773306
@@ -94,7 +94,7 @@
     }
 
     // basic title and icon
-    const QPixmap iconPixmap = _task->icon(preferredIconSize().width(),
+    QPixmap iconPixmap = _task->icon(preferredIconSize().width(),
                                      preferredIconSize().height(),
                                      true);
     if (_showTooltip) {


More information about the Panel-devel mailing list