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

List:       kde-commits
Subject:    playground/base/blazer
From:       Ian Reinhart Geiser <geiseri () kde ! org>
Date:       2009-02-10 13:41:52
Message-ID: 1234273312.147914.7171.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 924277 by geiseri:

try to help the status bar scale better, this still needs more work on size hints though.

 M  +51 -25    taskitembutton.cpp  
 M  +9 -12     taskitembutton.h  
 M  +15 -9     taskmanagerwidget.cpp  
 M  +2 -0      taskmanagerwidget.h  
 M  +1 -0      topbar.cpp  


--- trunk/playground/base/blazer/taskitembutton.cpp #924276:924277
@@ -20,7 +20,7 @@
 
 #include "taskitembutton.h"
 
-#include <KDE/KSqueezedTextLabel>
+#include <KDE/KGlobalSettings>
 #include <KDE/KIconLoader>
 //#include <taskmanager/taskrmbmenu.h>
 
@@ -28,39 +28,32 @@
 #include <QMouseEvent>
 #include <QApplication>
 #include <QFont>
+#include <QLabel>
+#include <QPainter>
+#include <QFontMetrics>
+#include <QStylePainter>
+#include <QStyleOptionButton>
 
 #include <kdebug.h>
 
 TaskItemButton::TaskItemButton( TaskManager::TaskPtr ptr, QWidget *parent )
-    : QFrame( parent ), m_ptr(ptr)
+    : KPushButton( parent ), m_ptr(ptr), m_suggestedMaxWidth(32)
 {
-    m_text = new KSqueezedTextLabel(this);
-    m_text->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);
-
-    m_icon = new QLabel(this);
-    m_icon->setAlignment(Qt::AlignVCenter|Qt::AlignHCenter);
-
-
-    QHBoxLayout *layout = new QHBoxLayout(this);
-    layout->addWidget( m_icon, 0, Qt::AlignVCenter|Qt::AlignHCenter  );
-    layout->addWidget( m_text, 1, Qt::AlignVCenter);
-    layout->setMargin(2);
-    layout->setSpacing(2);
-
-    setMinimumWidth( 32 );
-
+    setStyleSheet("text-align:right;");
     connect( ptr.data(), SIGNAL(changed(::TaskManager::TaskChanges)), this, SLOT(updateTask()));
     connect( ptr.data(), SIGNAL(activated()), this, SLOT(updateTask()));
     connect( ptr.data(), SIGNAL(deactivated()), this, SLOT(updateTask()));
 
+    setFont( KGlobalSettings::taskbarFont() );
+
     updateTask();
 
+
 }
 
 void TaskItemButton::setActive( bool act )
 {
-    m_icon->setEnabled( act );
-    m_text->setEnabled( act );
+    setDown(act);
 }
 
 void TaskItemButton::enterEvent ( QEvent * event )
@@ -93,17 +86,43 @@
     }
 }
 
+QSize TaskItemButton::sizeHint() const
+{
+    return KPushButton::sizeHint();
+}
+
+void TaskItemButton::paintEvent( QPaintEvent *event )
+{
+    KPushButton::paintEvent( event );
+/*
+    QStylePainter p(this);
+    QStyleOptionButton option;
+    option.initFrom(this);
+    option.text = text();
+    option.icon = icon();
+    option.iconSize = iconSize();
+
+    p.save();
+    p.drawControl(QStyle::CE_PushButtonBevel, option);
+    p.drawPrimitive (QStyle::PE_FrameFocusRect, option);
+    p.restore();
+    p.drawPixmap( 2,2, option.icon.pixmap(height() - 4) );
+    p.drawText( height() + 2, 2, option.text );
+*/
+}
+
+
 void TaskItemButton::updateTask()
 {
     kDebug() << "Update text" << m_ptr->name();
     bool gotStaticIcon = false;
-    QPixmap itemIcon = m_ptr->bestIcon(KIconLoader::SizeSmall, gotStaticIcon);
-    m_text->setText( m_ptr->name() );
-    m_icon->setPixmap( itemIcon );
-    m_icon->setFixedHeight( itemIcon.height() );
-    m_icon->setFixedWidth( itemIcon.width() );
+    QFontMetrics fm( font() );
+    QPixmap icn = m_ptr->bestIcon(KIconLoader::SizeSmall, gotStaticIcon);
+    setIcon( icn );
+    setText( fm.elidedText( m_ptr->name(), Qt::ElideMiddle, m_suggestedMaxWidth - icn.width() ) );
 
-    setActive( !m_ptr->isMinimized() );
+    setActive( m_ptr->isActive() );
+
     if( m_ptr->demandsAttention () )
     {
         kDebug() << m_ptr->name() << "demands attention";
@@ -112,5 +131,12 @@
     {
         kDebug() << m_ptr->name() << "iconified";
     }
+    update();
 }
 
+void TaskItemButton::suggestNewMaxWidth( int newWidth )
+{
+    m_suggestedMaxWidth = newWidth;
+    updateTask();
+}
+
--- trunk/playground/base/blazer/taskitembutton.h #924276:924277
@@ -21,24 +21,22 @@
 #ifndef TASKITEMBUTTON_H
 #define TASKITEMBUTTON_H
 
-#include <QFrame>
-#include <QLabel>
+#include <QAbstractButton>
+#include <QIcon>
 
+#include <KDE/KPushButton>
+
 #include <taskmanager/taskmanager.h>
 
-class KSqueezedTextLabel;
-
-class TaskItemButton : public QFrame
+class TaskItemButton : public KPushButton
 {
     Q_OBJECT
 public:
     TaskItemButton(TaskManager::TaskPtr ptr, QWidget *parent);
 
-    void setItemText( const QString &itemText );
-    QString itemText( ) const;
-
-    void setItemIcon( const QPixmap &itemIcon );
     void setActive( bool act );
+    QSize sizeHint() const;
+    void suggestNewMaxWidth( int newWidth );
 
 public slots:
     void updateTask();
@@ -47,11 +45,10 @@
     virtual void enterEvent ( QEvent * event );
     virtual void leaveEvent ( QEvent * event );
     virtual void mousePressEvent ( QMouseEvent * event );
-
+    virtual void paintEvent( QPaintEvent *event );
 private:
-    KSqueezedTextLabel *m_text;
-    QLabel *m_icon;
     TaskManager::TaskPtr m_ptr;
+    int m_suggestedMaxWidth;
 };
 
 #endif // TASKITEMBUTTON_H
--- trunk/playground/base/blazer/taskmanagerwidget.cpp #924276:924277
@@ -30,12 +30,15 @@
 
 #include <QHBoxLayout>
 #include <QLabel>
+#include <QButtonGroup>
 
 #include <kdebug.h>
 
 TaskManagerWidget::TaskManagerWidget( QWidget *parent ) : QFrame( parent )
 {
     setObjectName("TaskBar");
+    m_buttonGroup = new QButtonGroup(this);
+    m_buttonGroup->setExclusive(true);
 
     TaskManager::TaskManager* mgr = TaskManager::TaskManager::self();
     connect( mgr, SIGNAL(startupAdded(StartupPtr)),
@@ -95,6 +98,7 @@
         TaskItemButton *taskCell = new TaskItemButton(ptr, this);
         m_tasks[ ptr ] = taskCell;
         m_taskLayout->addWidget( taskCell , 1 );
+        m_buttonGroup->addButton( taskCell );
     }
     adjustTaskSizes();
 }
@@ -103,6 +107,7 @@
 {
     if( m_tasks.contains( ptr ) )
     {
+        m_buttonGroup->removeButton( m_tasks[ ptr ] );
         delete m_tasks[ ptr  ];
         m_tasks.remove( ptr );
     }
@@ -111,13 +116,14 @@
 
 void TaskManagerWidget::adjustTaskSizes()
 {
-//    qDebug() << "TaskManagerWidget::adjustTaskSizes" << maximumSize() << sizeHint() << size();
-//    int maxSize = sizeHint().width();
-//    if( m_tasks.count() )
-//        maxSize = width() / m_tasks.count();
-//
-//    foreach( TaskItemButton *cell, m_tasks )
-//    {
-//        cell->setMaximumWidth( maxSize );
-//    }
+
+    qDebug() << "TaskManagerWidget::adjustTaskSizes" << maximumSize() << sizeHint() << size();
+    int maxSize = maximumWidth();
+    if( m_tasks.count() )
+        maxSize = maximumWidth() / m_tasks.count();
+
+    foreach( TaskItemButton *cell, m_tasks )
+    {
+       cell->suggestNewMaxWidth( maxSize );
+    }
 }
--- trunk/playground/base/blazer/taskmanagerwidget.h #924276:924277
@@ -28,6 +28,7 @@
 
 class QHBoxLayout;
 class TaskItemButton;
+class QButtonGroup;
 
 class TaskManagerWidget : public QFrame
 {
@@ -50,6 +51,7 @@
     QMap<TaskPtr,TaskItemButton *> m_tasks;
     QMap<StartupPtr,TaskItemButton *> m_startingTasks;
     QHBoxLayout *m_taskLayout;
+    QButtonGroup *m_buttonGroup;
 };
 
 #endif // TASKMANAGERWIDGET_H
--- trunk/playground/base/blazer/topbar.cpp #924276:924277
@@ -123,5 +123,6 @@
                                                   0, 0, 0,
                                                   panelSize, x(), x() + screenWidth - 1 );
     }
+    m_tasks->setMaximumWidth( width() - m_pager->width() );
 }
 
[prev in list] [next in list] [prev in thread] [next in thread] 

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