[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