[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