[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: extragear/sysadmin/muon/installer
From: Jonathan Michael Thomas <echidnaman () kubuntu ! org>
Date: 2010-11-15 4:46:06
Message-ID: 20101115044606.E5DD6AC8A0 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1197229 by jmthomas:
Add forward/back buttons to the breadcrumb. Doing this required some crumb management \
code to be moved from AbstractViewContainer to BreadcrumbWidget, but it needed to be \
moved there anyways.
M +1 -11 AbstractViewContainer.cpp
M +61 -5 BreadcrumbWidget/BreadcrumbWidget.cpp
M +9 -1 BreadcrumbWidget/BreadcrumbWidget.h
--- trunk/extragear/sysadmin/muon/installer/AbstractViewContainer.cpp \
#1197228:1197229 @@ -51,15 +51,6 @@
void AbstractViewContainer::registerNewSubView(AbstractViewBase *subView)
{
- AbstractViewBase *currentView = static_cast<AbstractViewBase \
*>(m_viewStack->currentWidget());
- BreadcrumbItem *currentItem = \
m_breadcrumbWidget->breadcrumbForView(currentView);
-
- // If we are activating a new subView from a view that already has
- // children, the old ones must go
- if (currentItem->hasChildren()) {
- m_breadcrumbWidget->removeItem(currentItem->childItem());
- }
-
m_viewStack->addWidget(subView);
m_viewStack->setCurrentWidget(subView);
m_breadcrumbWidget->addLevel(subView->breadcrumbItem());
@@ -68,7 +59,7 @@
void AbstractViewContainer::switchToSubView(AbstractViewBase *subView)
{
m_viewStack->setCurrentWidget(subView);
- m_breadcrumbWidget->setItemBolded(m_breadcrumbWidget->breadcrumbForView(subView));
+ m_breadcrumbWidget->setCurrentItem(m_breadcrumbWidget->breadcrumbForView(subView));
}
void AbstractViewContainer::activateBreadcrumbItem(BreadcrumbItem *item)
@@ -80,7 +71,6 @@
}
m_viewStack->setCurrentWidget(toActivate);
- m_breadcrumbWidget->setItemBolded(item);
}
#include "AbstractViewContainer.moc"
--- trunk/extragear/sysadmin/muon/installer/BreadcrumbWidget/BreadcrumbWidget.cpp \
#1197228:1197229 @@ -20,18 +20,38 @@
#include "BreadcrumbWidget.h"
+#include <QtGui/QPushButton>
+
+#include <KStandardGuiItem>
+
#include "../AbstractViewBase.h"
#include "BreadcrumbItem.h"
BreadcrumbWidget::BreadcrumbWidget(QWidget *parent)
: KHBox(parent)
{
- m_items.clear();
+ setSpacing(2);
+ KGuiItem backButton = KStandardGuiItem::back();
+ KGuiItem forwardButton = KStandardGuiItem::forward();
+
+ m_backButton = new QPushButton(this);
+ m_backButton->setToolTip(backButton.toolTip());
+ m_backButton->setIcon(backButton.icon());
+ m_backButton->setEnabled(false);
+
+ m_forwardButton = new QPushButton(this);
+ m_forwardButton->setToolTip(forwardButton.toolTip());
+ m_forwardButton->setIcon(forwardButton.icon());
+ m_forwardButton->setEnabled(false);
+
m_breadcrumbArea = new KHBox(this);
m_breadcrumbArea->setSpacing(2);
QWidget *spacer = new QWidget(this);
spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ connect(m_backButton, SIGNAL(clicked()), this, SLOT(goBack()));
+ connect(m_forwardButton, SIGNAL(clicked()), this, SLOT(goForward()));
}
BreadcrumbWidget::~BreadcrumbWidget()
@@ -42,6 +62,9 @@
{
clearCrumbs();
addLevel(root);
+
+ m_forwardButton->setEnabled(false);
+ m_backButton->setEnabled(false);
}
void BreadcrumbWidget::clearCrumbs()
@@ -53,11 +76,18 @@
}
}
+ m_currentItem = 0;
m_items.clear();
}
void BreadcrumbWidget::addLevel(BreadcrumbItem *item)
{
+ // If we are activating a new subView from a view that already has
+ // children, the old ones must go
+ if (m_currentItem && m_currentItem->hasChildren()) {
+ removeItem(m_currentItem->childItem());
+ }
+
if (!m_items.isEmpty()) {
m_items.last()->setChildItem(item);
}
@@ -66,9 +96,13 @@
item->show();
m_items.append(item);
- setItemBolded(item);
- connect(item, SIGNAL(activated(BreadcrumbItem *)), this, \
SIGNAL(itemActivated(BreadcrumbItem *)));
- connect(item, SIGNAL(activated(BreadcrumbItem *)), this, \
SLOT(setItemBolded(BreadcrumbItem *))); + setCurrentItem(item);
+
+ m_forwardButton->setEnabled(false);
+ m_backButton->setEnabled(true);
+
+ connect(item, SIGNAL(activated(BreadcrumbItem *)), this, \
SLOT(onItemActivated(BreadcrumbItem *))); + connect(item, \
SIGNAL(activated(BreadcrumbItem *)), this, SLOT(setCurrentItem(BreadcrumbItem *))); \
}
void BreadcrumbWidget::removeItem(BreadcrumbItem *item)
@@ -84,13 +118,35 @@
m_items.removeLast();
}
-void BreadcrumbWidget::setItemBolded(BreadcrumbItem *itemToBold)
+void BreadcrumbWidget::goForward()
{
+ setCurrentItem(m_items.at(m_items.indexOf(m_currentItem) + 1));
+ onItemActivated(m_currentItem);
+}
+
+void BreadcrumbWidget::goBack()
+{
+ setCurrentItem(m_items.at(m_items.indexOf(m_currentItem) - 1));
+ onItemActivated(m_currentItem);
+}
+
+void BreadcrumbWidget::setCurrentItem(BreadcrumbItem *itemToBold)
+{
foreach(BreadcrumbItem *item, m_items) {
item->setActive(item == itemToBold);
}
+
+ m_currentItem = itemToBold;
}
+void BreadcrumbWidget::onItemActivated(BreadcrumbItem *item)
+{
+ m_backButton->setEnabled(m_items.indexOf(item) > 0);
+ m_forwardButton->setEnabled(item != m_items.last());
+
+ emit itemActivated(item);
+}
+
BreadcrumbItem *BreadcrumbWidget::breadcrumbForView(AbstractViewBase *view)
{
BreadcrumbItem *itemForView = 0;
--- trunk/extragear/sysadmin/muon/installer/BreadcrumbWidget/BreadcrumbWidget.h \
#1197228:1197229 @@ -25,6 +25,8 @@
#include <KHBox>
+class QPushButton;
+
class AbstractViewBase;
class BreadcrumbItem;
@@ -49,13 +51,19 @@
private:
QList<BreadcrumbItem *> m_items;
+ BreadcrumbItem *m_currentItem;
+ QPushButton *m_backButton;
+ QPushButton *m_forwardButton;
KHBox *m_breadcrumbArea;
public Q_SLOTS:
- void setItemBolded(BreadcrumbItem *crumb);
+ void setCurrentItem(BreadcrumbItem *crumb);
private Q_SLOTS:
+ void goBack();
+ void goForward();
+ void onItemActivated(BreadcrumbItem *item);
void clearCrumbs();
Q_SIGNALS:
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic