annotate widgets/PropertyStack.cpp @ 197:8b41bf9a7c65

Static_Release link with qt static
author lbajardsilogic
date Wed, 19 Dec 2007 16:52:53 +0000
parents be6d31baecb9
children fa034c6ae8bf
rev   line source
lbajardsilogic@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@0 2
lbajardsilogic@0 3 /*
lbajardsilogic@0 4 Sonic Visualiser
lbajardsilogic@0 5 An audio file viewer and annotation editor.
lbajardsilogic@0 6 Centre for Digital Music, Queen Mary, University of London.
lbajardsilogic@0 7 This file copyright 2006 Chris Cannam.
lbajardsilogic@0 8
lbajardsilogic@0 9 This program is free software; you can redistribute it and/or
lbajardsilogic@0 10 modify it under the terms of the GNU General Public License as
lbajardsilogic@0 11 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 12 License, or (at your option) any later version. See the file
lbajardsilogic@0 13 COPYING included with this distribution for more information.
lbajardsilogic@0 14 */
lbajardsilogic@0 15
lbajardsilogic@0 16 #include "PropertyStack.h"
lbajardsilogic@0 17 #include "PropertyBox.h"
lbajardsilogic@0 18 #include "base/PropertyContainer.h"
lbajardsilogic@0 19 #include "view/View.h"
lbajardsilogic@0 20 #include "layer/Layer.h"
lbajardsilogic@0 21 #include "layer/LayerFactory.h"
lbajardsilogic@0 22 #include "widgets/NotifyingTabBar.h"
benoitrigolleau@56 23 #include "ItemLayerList.h"
lbajardsilogic@0 24
lbajardsilogic@0 25 #include <QIcon>
lbajardsilogic@0 26 #include <QTabWidget>
lbajardsilogic@0 27
lbajardsilogic@0 28 #include <iostream>
lbajardsilogic@0 29
lbajardsilogic@0 30 //#define DEBUG_PROPERTY_STACK 1
lbajardsilogic@0 31
lbajardsilogic@0 32 PropertyStack::PropertyStack(QWidget *parent, View *client) :
benoitrigolleau@56 33 LayerViewerWidget(parent),
lbajardsilogic@0 34 m_client(client)
lbajardsilogic@0 35 {
lbajardsilogic@0 36 NotifyingTabBar *bar = new NotifyingTabBar();
lbajardsilogic@0 37 bar->setDrawBase(false);
lbajardsilogic@0 38
lbajardsilogic@0 39 connect(bar, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredTabBar()));
lbajardsilogic@0 40 connect(bar, SIGNAL(mouseLeft()), this, SLOT(mouseLeftTabBar()));
lbajardsilogic@0 41 connect(bar, SIGNAL(activeTabClicked()), this, SLOT(activeTabClicked()));
lbajardsilogic@0 42
benoitrigolleau@56 43 //setTabBar(bar);
lbajardsilogic@0 44
benoitrigolleau@56 45 /*#if (QT_VERSION >= 0x0402)
lbajardsilogic@0 46 setElideMode(Qt::ElideNone);
lbajardsilogic@0 47 tabBar()->setUsesScrollButtons(true);
lbajardsilogic@0 48 tabBar()->setIconSize(QSize(16, 16));
benoitrigolleau@56 49 #endif*/
lbajardsilogic@0 50
lbajardsilogic@0 51 repopulate();
lbajardsilogic@0 52
lbajardsilogic@0 53 connect(this, SIGNAL(currentChanged(int)),
lbajardsilogic@0 54 this, SLOT(selectedContainerChanged(int)));
lbajardsilogic@0 55
lbajardsilogic@0 56 connect(m_client, SIGNAL(propertyContainerAdded(PropertyContainer *)),
lbajardsilogic@0 57 this, SLOT(propertyContainerAdded(PropertyContainer *)));
lbajardsilogic@0 58
lbajardsilogic@0 59 connect(m_client, SIGNAL(propertyContainerRemoved(PropertyContainer *)),
lbajardsilogic@0 60 this, SLOT(propertyContainerRemoved(PropertyContainer *)));
lbajardsilogic@0 61
lbajardsilogic@0 62 connect(m_client, SIGNAL(propertyContainerPropertyChanged(PropertyContainer *)),
lbajardsilogic@0 63 this, SLOT(propertyContainerPropertyChanged(PropertyContainer *)));
lbajardsilogic@0 64
lbajardsilogic@0 65 connect(m_client, SIGNAL(propertyContainerPropertyRangeChanged(PropertyContainer *)),
lbajardsilogic@0 66 this, SLOT(propertyContainerPropertyRangeChanged(PropertyContainer *)));
lbajardsilogic@0 67
lbajardsilogic@0 68 connect(m_client, SIGNAL(propertyContainerNameChanged(PropertyContainer *)),
lbajardsilogic@0 69 this, SLOT(propertyContainerNameChanged(PropertyContainer *)));
lbajardsilogic@0 70
lbajardsilogic@0 71 connect(this, SIGNAL(propertyContainerSelected(View *, PropertyContainer *)),
lbajardsilogic@0 72 m_client, SLOT(propertyContainerSelected(View *, PropertyContainer *)));
lbajardsilogic@0 73 }
lbajardsilogic@0 74
lbajardsilogic@51 75 PropertyStack::~PropertyStack()
lbajardsilogic@51 76 {
lbajardsilogic@51 77 blockSignals(true);
lbajardsilogic@51 78
benoitrigolleau@56 79 /*while (count() > 0)
lbajardsilogic@51 80 {
lbajardsilogic@51 81 removeTab(0);
benoitrigolleau@56 82 }*/
benoitrigolleau@56 83 removeAllItems();
lbajardsilogic@51 84
lbajardsilogic@51 85 for (size_t i = 0; i < m_boxes.size(); ++i)
lbajardsilogic@51 86 {
lbajardsilogic@51 87 delete m_boxes[i];
lbajardsilogic@51 88 }
lbajardsilogic@51 89 m_boxes.clear();
lbajardsilogic@51 90 m_client = 0;
lbajardsilogic@51 91 }
lbajardsilogic@51 92
lbajardsilogic@0 93 void
lbajardsilogic@0 94 PropertyStack::repopulate()
lbajardsilogic@0 95 {
lbajardsilogic@0 96 blockSignals(true);
lbajardsilogic@0 97
lbajardsilogic@0 98 #ifdef DEBUG_PROPERTY_STACK
lbajardsilogic@0 99 std::cerr << "PropertyStack::repopulate" << std::endl;
lbajardsilogic@0 100 #endif
lbajardsilogic@0 101
benoitrigolleau@56 102 /*while (count() > 0) {
lbajardsilogic@0 103 removeTab(0);
benoitrigolleau@56 104 }*/
benoitrigolleau@56 105 removeAllItems();
benoitrigolleau@56 106
lbajardsilogic@0 107 for (size_t i = 0; i < m_boxes.size(); ++i) {
benoitrigolleau@56 108 delete m_boxes[i];
lbajardsilogic@0 109 }
lbajardsilogic@0 110 m_boxes.clear();
lbajardsilogic@0 111
lbajardsilogic@0 112 for (size_t i = 0; i < m_client->getPropertyContainerCount(); ++i) {
lbajardsilogic@0 113
lbajardsilogic@0 114 PropertyContainer *container = m_client->getPropertyContainer(i);
lbajardsilogic@0 115 QString name = container->getPropertyContainerName();
lbajardsilogic@0 116
lbajardsilogic@0 117 PropertyBox *box = new PropertyBox(container);
lbajardsilogic@0 118 connect(box, SIGNAL(showLayer(bool)), this, SLOT(showLayer(bool)));
lbajardsilogic@0 119 connect(box, SIGNAL(contextHelpChanged(const QString &)),
lbajardsilogic@0 120 this, SIGNAL(contextHelpChanged(const QString &)));
lbajardsilogic@0 121
lbajardsilogic@0 122 Layer *layer = dynamic_cast<Layer *>(container);
lbajardsilogic@0 123 if (layer) {
lbajardsilogic@0 124 box->layerVisibilityChanged(!layer->isLayerDormant(m_client));
lbajardsilogic@0 125 }
lbajardsilogic@0 126
lbajardsilogic@0 127 QString shortName = name;
lbajardsilogic@0 128
lbajardsilogic@0 129 if (layer) {
lbajardsilogic@0 130 shortName = LayerFactory::getInstance()->getLayerPresentationName
lbajardsilogic@0 131 (LayerFactory::getInstance()->getLayerType(layer));
lbajardsilogic@0 132 }
lbajardsilogic@0 133
lbajardsilogic@0 134 shortName = QString("&%1 %2").arg(i + 1).arg(shortName);
lbajardsilogic@0 135
benoitrigolleau@56 136 /*#ifdef Q_WS_MAC
lbajardsilogic@0 137
lbajardsilogic@0 138 // Qt 4.2 on OS/X doesn't show the icons in the tab bar, and
lbajardsilogic@0 139 // I'm not sure why -- use labels instead
lbajardsilogic@0 140
lbajardsilogic@0 141 addTab(box, shortName);
lbajardsilogic@0 142
benoitrigolleau@56 143 #else*/
lbajardsilogic@0 144
lbajardsilogic@0 145 // Icons on other platforms
lbajardsilogic@0 146
lbajardsilogic@0 147 QString iconName = container->getPropertyContainerIconName();
lbajardsilogic@0 148
lbajardsilogic@0 149 QIcon icon(QString(":/icons/%1.png").arg(iconName));
benoitrigolleau@56 150
benoitrigolleau@56 151 ItemLayerList *item = new ItemLayerList();
lbajardsilogic@0 152
benoitrigolleau@56 153 //if (icon.isNull()) {
benoitrigolleau@56 154 //addTab(box, shortName);
benoitrigolleau@56 155 //} else {
benoitrigolleau@56 156
benoitrigolleau@56 157 //item->setColor(QColor ( 100, 60, 20));
benoitrigolleau@56 158 //addTab(box, icon, QString("&%1").arg(i + 1));
benoitrigolleau@56 159 //setTabToolTip(i, name);
benoitrigolleau@56 160 //}
benoitrigolleau@56 161
benoitrigolleau@56 162 item->setToolTip(name);
lbajardsilogic@191 163 QString iconDir = ":/icons/" + iconName + ".png";
lbajardsilogic@191 164 item->setIcon(iconDir);
benoitrigolleau@56 165 item->setName(name);
benoitrigolleau@56 166 item->setPropertyBox(box);
benoitrigolleau@56 167 addItem(item);
benoitrigolleau@56 168
benoitrigolleau@56 169 //#endif
lbajardsilogic@0 170
lbajardsilogic@0 171 m_boxes.push_back(box);
lbajardsilogic@0 172 }
lbajardsilogic@0 173
lbajardsilogic@0 174 blockSignals(false);
lbajardsilogic@0 175 }
lbajardsilogic@0 176
lbajardsilogic@0 177 bool
lbajardsilogic@0 178 PropertyStack::containsContainer(PropertyContainer *pc) const
lbajardsilogic@0 179 {
lbajardsilogic@0 180 for (size_t i = 0; i < m_client->getPropertyContainerCount(); ++i) {
lbajardsilogic@0 181 PropertyContainer *container = m_client->getPropertyContainer(i);
lbajardsilogic@0 182 if (pc == container) return true;
lbajardsilogic@0 183 }
lbajardsilogic@0 184
lbajardsilogic@0 185 return false;
lbajardsilogic@0 186 }
lbajardsilogic@0 187
lbajardsilogic@0 188 int
lbajardsilogic@0 189 PropertyStack::getContainerIndex(PropertyContainer *pc) const
lbajardsilogic@0 190 {
lbajardsilogic@0 191 for (size_t i = 0; i < m_client->getPropertyContainerCount(); ++i) {
lbajardsilogic@0 192 PropertyContainer *container = m_client->getPropertyContainer(i);
lbajardsilogic@0 193 if (pc == container) return i;
lbajardsilogic@0 194 }
lbajardsilogic@0 195
lbajardsilogic@0 196 return false;
lbajardsilogic@0 197 }
lbajardsilogic@0 198
benoitrigolleau@56 199
benoitrigolleau@56 200 /*** SLOTs ************/
lbajardsilogic@0 201 void
lbajardsilogic@0 202 PropertyStack::propertyContainerAdded(PropertyContainer *)
lbajardsilogic@0 203 {
lbajardsilogic@0 204 if (sender() != m_client) return;
lbajardsilogic@0 205 repopulate();
lbajardsilogic@0 206 }
lbajardsilogic@0 207
lbajardsilogic@0 208 void
lbajardsilogic@0 209 PropertyStack::propertyContainerRemoved(PropertyContainer *)
lbajardsilogic@0 210 {
lbajardsilogic@0 211 if (sender() != m_client) return;
lbajardsilogic@0 212 repopulate();
lbajardsilogic@0 213 }
lbajardsilogic@0 214
lbajardsilogic@0 215 void
lbajardsilogic@0 216 PropertyStack::propertyContainerPropertyChanged(PropertyContainer *pc)
lbajardsilogic@0 217 {
lbajardsilogic@0 218 for (unsigned int i = 0; i < m_boxes.size(); ++i) {
lbajardsilogic@0 219 if (pc == m_boxes[i]->getContainer()) {
lbajardsilogic@0 220 m_boxes[i]->propertyContainerPropertyChanged(pc);
lbajardsilogic@0 221 }
lbajardsilogic@0 222 }
lbajardsilogic@0 223 }
lbajardsilogic@0 224
lbajardsilogic@0 225 void
lbajardsilogic@0 226 PropertyStack::propertyContainerPropertyRangeChanged(PropertyContainer *pc)
lbajardsilogic@0 227 {
lbajardsilogic@0 228 for (unsigned int i = 0; i < m_boxes.size(); ++i) {
lbajardsilogic@0 229 if (pc == m_boxes[i]->getContainer()) {
lbajardsilogic@0 230 m_boxes[i]->propertyContainerPropertyRangeChanged(pc);
lbajardsilogic@0 231 }
lbajardsilogic@0 232 }
lbajardsilogic@0 233 }
lbajardsilogic@0 234
lbajardsilogic@0 235 void
lbajardsilogic@0 236 PropertyStack::propertyContainerNameChanged(PropertyContainer *)
lbajardsilogic@0 237 {
lbajardsilogic@0 238 if (sender() != m_client) return;
lbajardsilogic@0 239 repopulate();
lbajardsilogic@0 240 }
lbajardsilogic@0 241
lbajardsilogic@0 242 void
lbajardsilogic@0 243 PropertyStack::showLayer(bool show)
lbajardsilogic@0 244 {
lbajardsilogic@0 245 QObject *obj = sender();
lbajardsilogic@0 246
lbajardsilogic@0 247 for (unsigned int i = 0; i < m_boxes.size(); ++i) {
lbajardsilogic@0 248 if (obj == m_boxes[i]) {
lbajardsilogic@0 249 Layer *layer = dynamic_cast<Layer *>(m_boxes[i]->getContainer());
lbajardsilogic@0 250 if (layer) {
lbajardsilogic@0 251 layer->showLayer(m_client, show);
lbajardsilogic@0 252 return;
lbajardsilogic@0 253 }
lbajardsilogic@0 254 }
lbajardsilogic@0 255 }
lbajardsilogic@0 256 }
lbajardsilogic@0 257
lbajardsilogic@0 258 void
lbajardsilogic@0 259 PropertyStack::selectedContainerChanged(int n)
lbajardsilogic@0 260 {
lbajardsilogic@0 261 if (n >= int(m_boxes.size())) return;
lbajardsilogic@0 262 emit propertyContainerSelected(m_client, m_boxes[n]->getContainer());
lbajardsilogic@0 263 }
lbajardsilogic@0 264
lbajardsilogic@0 265 void
lbajardsilogic@0 266 PropertyStack::mouseEnteredTabBar()
lbajardsilogic@0 267 {
lbajardsilogic@0 268 emit contextHelpChanged(tr("Click to change the current active layer"));
lbajardsilogic@0 269 }
lbajardsilogic@0 270
lbajardsilogic@0 271 void
lbajardsilogic@0 272 PropertyStack::mouseLeftTabBar()
lbajardsilogic@0 273 {
lbajardsilogic@0 274 emit contextHelpChanged("");
lbajardsilogic@0 275 }
lbajardsilogic@0 276
lbajardsilogic@0 277 void
lbajardsilogic@0 278 PropertyStack::activeTabClicked()
lbajardsilogic@0 279 {
lbajardsilogic@0 280 emit viewSelected(m_client);
lbajardsilogic@0 281 }
lbajardsilogic@0 282
benoitrigolleau@56 283 void PropertyStack::removeSelectedItemRequested(){
benoitrigolleau@65 284 emit removeSelectedItem();
benoitrigolleau@56 285 }