changeset 500:666cdcae5f0d

* Make it possible to switch panes by clicking on the current-pane indicator area at left (#1935591)
author Chris Cannam
date Tue, 24 Feb 2009 12:02:19 +0000
parents c5c478ee37b1
children 08e1ccfe289c
files view/PaneStack.cpp view/PaneStack.h widgets/ClickableLabel.h widgets/widgets.pro
diffstat 4 files changed, 57 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/view/PaneStack.cpp	Mon Feb 23 22:28:24 2009 +0000
+++ b/view/PaneStack.cpp	Tue Feb 24 12:02:19 2009 +0000
@@ -18,6 +18,7 @@
 #include "Pane.h"
 #include "widgets/PropertyStack.h"
 #include "widgets/IconLoader.h"
+#include "widgets/ClickableLabel.h"
 #include "layer/Layer.h"
 #include "ViewManager.h"
 
@@ -67,23 +68,15 @@
     layout->setMargin(0);
     layout->setSpacing(2);
 
-
-//    QHBoxLayout *layout = new QHBoxLayout;
-
-//    QVBoxLayout *vlayout = new QVBoxLayout;
-//    layout->addLayout(vlayout);
-//    layout->setStretchFactor(vlayout, 0);
-
     QPushButton *xButton = new QPushButton(frame);
     xButton->setIcon(IconLoader().load("cross"));
     xButton->setFixedSize(QSize(16, 16));
     xButton->setFlat(true);
     layout->addWidget(xButton, 0, 0);
-//    vlayout->setStretchFactor(xButton, 0);
     connect(xButton, SIGNAL(clicked()), this, SLOT(paneDeleteButtonClicked()));
 
-    QLabel *currentIndicator = new QLabel(frame);
-//    currentIndicator->setFixedWidth(QPainter(this).fontMetrics().width("x"));
+    ClickableLabel *currentIndicator = new ClickableLabel(frame);
+    connect(currentIndicator, SIGNAL(clicked()), this, SLOT(indicatorClicked()));
     layout->addWidget(currentIndicator, 1, 0);
     layout->setRowStretch(1, 20);
     currentIndicator->setMinimumWidth(8);
@@ -541,6 +534,19 @@
 }
 
 void
+PaneStack::indicatorClicked()
+{
+    QObject *s = sender();
+
+    for (size_t i = 0; i < m_panes.size(); ++i) {
+	if (m_panes[i].currentIndicator == s) {
+            setCurrentPane(m_panes[i].pane);
+            return;
+        }
+    }
+}
+
+void
 PaneStack::sizePanesEqually()
 {
     QList<int> sizes = m_splitter->sizes();
--- a/view/PaneStack.h	Mon Feb 23 22:28:24 2009 +0000
+++ b/view/PaneStack.h	Tue Feb 24 12:02:19 2009 +0000
@@ -100,6 +100,7 @@
     void paneDropAccepted(QStringList);
     void paneDropAccepted(QString);
     void paneDeleteButtonClicked();
+    void indicatorClicked();
 
 protected:
     Pane *m_currentPane;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/widgets/ClickableLabel.h	Tue Feb 24 12:02:19 2009 +0000
@@ -0,0 +1,39 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    Sonic Visualiser
+    An audio file viewer and annotation editor.
+    Centre for Digital Music, Queen Mary, University of London.
+    
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License as
+    published by the Free Software Foundation; either version 2 of the
+    License, or (at your option) any later version.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#ifndef _CLICKABLE_LABEL_H_
+#define _CLICKABLE_LABEL_H_
+
+#include <QLabel>
+
+class ClickableLabel : public QLabel
+{
+    Q_OBJECT
+
+public:
+    ClickableLabel(const QString &text, QWidget *parent = 0) :
+        QLabel(text, parent) { }
+    ClickableLabel(QWidget *parent = 0) : QLabel(parent) { }
+    ~ClickableLabel() { }
+
+signals:
+    void clicked();
+
+protected:
+    virtual void mousePressEvent(QMouseEvent *) {
+        emit clicked();
+    }
+};
+
+#endif
--- a/widgets/widgets.pro	Mon Feb 23 22:28:24 2009 +0000
+++ b/widgets/widgets.pro	Tue Feb 24 12:02:19 2009 +0000
@@ -15,6 +15,7 @@
 
 # Input
 HEADERS += AudioDial.h \
+           ClickableLabel.h \
            ColourNameDialog.h \
            CommandHistory.h \
            CSVFormatDialog.h \