annotate view/PaneStack.cpp @ 101:bc5b79e7b1d8

when adding a new pane, the pane stack is divided in equals parts
author lbajardsilogic
date Thu, 12 Jul 2007 07:25:32 +0000
parents 429cfea499ad
children 033a39bff919
rev   line source
lbajardsilogic@0 1
lbajardsilogic@0 2 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@0 3
lbajardsilogic@0 4 /*
lbajardsilogic@0 5 Sonic Visualiser
lbajardsilogic@0 6 An audio file viewer and annotation editor.
lbajardsilogic@0 7 Centre for Digital Music, Queen Mary, University of London.
lbajardsilogic@0 8 This file copyright 2006 Chris Cannam and QMUL.
lbajardsilogic@0 9
lbajardsilogic@0 10 This program is free software; you can redistribute it and/or
lbajardsilogic@0 11 modify it under the terms of the GNU General Public License as
lbajardsilogic@0 12 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 13 License, or (at your option) any later version. See the file
lbajardsilogic@0 14 COPYING included with this distribution for more information.
lbajardsilogic@0 15 */
lbajardsilogic@0 16
lbajardsilogic@0 17 #include "PaneStack.h"
lbajardsilogic@0 18
lbajardsilogic@0 19 #include "Pane.h"
lbajardsilogic@0 20 #include "widgets/PropertyStack.h"
lbajardsilogic@0 21 #include "layer/Layer.h"
lbajardsilogic@0 22 #include "ViewManager.h"
lbajardsilogic@0 23
lbajardsilogic@0 24 #include <QApplication>
lbajardsilogic@0 25 #include <QHBoxLayout>
lbajardsilogic@0 26 #include <QPainter>
lbajardsilogic@0 27 #include <QPalette>
lbajardsilogic@0 28 #include <QLabel>
lbajardsilogic@0 29 #include <QSplitter>
lbajardsilogic@0 30 #include <QStackedWidget>
lbajardsilogic@0 31
lbajardsilogic@0 32 #include <iostream>
lbajardsilogic@0 33
lbajardsilogic@0 34 //#define DEBUG_PANE_STACK 1
lbajardsilogic@0 35
lbajardsilogic@0 36 PaneStack::PaneStack(QWidget *parent, ViewManager *viewManager) :
lbajardsilogic@0 37 QFrame(parent),
lbajardsilogic@0 38 m_currentPane(0),
lbajardsilogic@0 39 m_splitter(new QSplitter),
lbajardsilogic@0 40 m_propertyStackStack(new QStackedWidget),
lbajardsilogic@0 41 m_viewManager(viewManager),
lbajardsilogic@0 42 m_layoutStyle(PropertyStackPerPaneLayout)
lbajardsilogic@0 43 {
lbajardsilogic@0 44 QHBoxLayout *layout = new QHBoxLayout;
lbajardsilogic@0 45 layout->setMargin(0);
lbajardsilogic@0 46 layout->setSpacing(0);
lbajardsilogic@0 47
lbajardsilogic@0 48 m_splitter->setOrientation(Qt::Vertical);
lbajardsilogic@0 49 m_splitter->setOpaqueResize(false);
lbajardsilogic@0 50
lbajardsilogic@0 51 layout->addWidget(m_splitter);
lbajardsilogic@0 52 layout->setStretchFactor(m_splitter, 1);
lbajardsilogic@0 53 layout->addWidget(m_propertyStackStack);
lbajardsilogic@0 54 m_propertyStackStack->hide();
lbajardsilogic@0 55
lbajardsilogic@0 56 setLayout(layout);
lbajardsilogic@0 57 }
lbajardsilogic@0 58
lbajardsilogic@0 59 Pane *
lbajardsilogic@0 60 PaneStack::addPane(bool suppressPropertyBox)
lbajardsilogic@0 61 {
lbajardsilogic@0 62 QFrame *frame = new QFrame;
lbajardsilogic@0 63 QHBoxLayout *layout = new QHBoxLayout;
lbajardsilogic@0 64 layout->setMargin(0);
lbajardsilogic@0 65 layout->setSpacing(2);
lbajardsilogic@0 66
lbajardsilogic@0 67 QLabel *currentIndicator = new QLabel(frame);
lbajardsilogic@0 68 currentIndicator->setFixedWidth(QPainter(this).fontMetrics().width("x"));
lbajardsilogic@0 69 layout->addWidget(currentIndicator);
lbajardsilogic@0 70 layout->setStretchFactor(currentIndicator, 1);
lbajardsilogic@0 71 currentIndicator->setScaledContents(true);
lbajardsilogic@0 72
lbajardsilogic@0 73 Pane *pane = new Pane(frame);
lbajardsilogic@0 74 pane->setViewManager(m_viewManager);
lbajardsilogic@0 75 layout->addWidget(pane);
lbajardsilogic@0 76 layout->setStretchFactor(pane, 10);
lbajardsilogic@0 77
lbajardsilogic@0 78 PaneRec rec;
lbajardsilogic@0 79 rec.pane = pane;
lbajardsilogic@13 80 rec.propertyStack = 0;
lbajardsilogic@0 81 rec.currentIndicator = currentIndicator;
lbajardsilogic@0 82 rec.frame = frame;
lbajardsilogic@0 83 rec.layout = layout;
lbajardsilogic@0 84 m_panes.push_back(rec);
lbajardsilogic@0 85
lbajardsilogic@0 86 frame->setLayout(layout);
lbajardsilogic@0 87 m_splitter->addWidget(frame);
lbajardsilogic@0 88
lbajardsilogic@101 89 resizePane();
lbajardsilogic@101 90
lbajardsilogic@0 91 connect(pane, SIGNAL(propertyContainerAdded(PropertyContainer *)),
lbajardsilogic@0 92 this, SLOT(propertyContainerAdded(PropertyContainer *)));
lbajardsilogic@0 93 connect(pane, SIGNAL(propertyContainerRemoved(PropertyContainer *)),
lbajardsilogic@0 94 this, SLOT(propertyContainerRemoved(PropertyContainer *)));
lbajardsilogic@0 95 connect(pane, SIGNAL(paneInteractedWith()),
lbajardsilogic@0 96 this, SLOT(paneInteractedWith()));
lbajardsilogic@0 97 connect(pane, SIGNAL(rightButtonMenuRequested(QPoint)),
lbajardsilogic@0 98 this, SLOT(rightButtonMenuRequested(QPoint)));
lbajardsilogic@0 99
lbajardsilogic@0 100 if (!m_currentPane) {
lbajardsilogic@0 101 setCurrentPane(pane);
lbajardsilogic@0 102 }
benoitrigolleau@66 103 emit newPaneAdded(pane);
lbajardsilogic@0 104 return pane;
lbajardsilogic@0 105 }
lbajardsilogic@0 106
lbajardsilogic@0 107 void
lbajardsilogic@0 108 PaneStack::setPropertyStackMinWidth(int mw)
lbajardsilogic@0 109 {
lbajardsilogic@0 110 for (std::vector<PaneRec>::iterator i = m_panes.begin();
lbajardsilogic@0 111 i != m_panes.end(); ++i) {
lbajardsilogic@0 112 i->propertyStack->setMinimumWidth(mw);
lbajardsilogic@0 113 }
lbajardsilogic@0 114 m_propertyStackMinWidth = mw;
lbajardsilogic@0 115 }
lbajardsilogic@0 116
lbajardsilogic@0 117 void
lbajardsilogic@0 118 PaneStack::setLayoutStyle(LayoutStyle style)
lbajardsilogic@0 119 {
lbajardsilogic@0 120 if (style == m_layoutStyle) return;
lbajardsilogic@0 121 m_layoutStyle = style;
lbajardsilogic@0 122
lbajardsilogic@0 123 std::vector<PaneRec>::iterator i;
lbajardsilogic@0 124
lbajardsilogic@0 125 switch (style) {
lbajardsilogic@0 126
lbajardsilogic@0 127 case NoPropertyStacks:
lbajardsilogic@0 128 case SinglePropertyStackLayout:
lbajardsilogic@0 129
lbajardsilogic@0 130 for (i = m_panes.begin(); i != m_panes.end(); ++i) {
lbajardsilogic@0 131 i->layout->removeWidget(i->propertyStack);
lbajardsilogic@0 132 i->propertyStack->setParent(m_propertyStackStack);
lbajardsilogic@0 133 m_propertyStackStack->addWidget(i->propertyStack);
lbajardsilogic@0 134 }
lbajardsilogic@0 135 m_propertyStackStack->setVisible(style != NoPropertyStacks);
lbajardsilogic@0 136 break;
lbajardsilogic@0 137
lbajardsilogic@0 138 case PropertyStackPerPaneLayout:
lbajardsilogic@0 139
lbajardsilogic@0 140 for (i = m_panes.begin(); i != m_panes.end(); ++i) {
lbajardsilogic@0 141 m_propertyStackStack->removeWidget(i->propertyStack);
lbajardsilogic@0 142 i->propertyStack->setParent(i->frame);
lbajardsilogic@0 143 i->layout->addWidget(i->propertyStack);
lbajardsilogic@0 144 i->propertyStack->show();
lbajardsilogic@0 145 }
lbajardsilogic@0 146 m_propertyStackStack->hide();
lbajardsilogic@0 147 break;
lbajardsilogic@0 148 }
lbajardsilogic@0 149 }
lbajardsilogic@0 150
lbajardsilogic@0 151 Pane *
lbajardsilogic@0 152 PaneStack::getPane(int n)
lbajardsilogic@0 153 {
lbajardsilogic@0 154 return m_panes[n].pane;
lbajardsilogic@0 155 }
lbajardsilogic@0 156
lbajardsilogic@0 157 Pane *
lbajardsilogic@0 158 PaneStack::getHiddenPane(int n)
lbajardsilogic@0 159 {
lbajardsilogic@0 160 return m_hiddenPanes[n].pane;
lbajardsilogic@0 161 }
lbajardsilogic@0 162
lbajardsilogic@0 163 void
lbajardsilogic@0 164 PaneStack::deletePane(Pane *pane)
lbajardsilogic@0 165 {
lbajardsilogic@0 166 std::vector<PaneRec>::iterator i;
lbajardsilogic@0 167 bool found = false;
lbajardsilogic@0 168
lbajardsilogic@0 169 for (i = m_panes.begin(); i != m_panes.end(); ++i) {
lbajardsilogic@0 170 if (i->pane == pane) {
lbajardsilogic@0 171 m_panes.erase(i);
lbajardsilogic@0 172 found = true;
lbajardsilogic@0 173 break;
lbajardsilogic@0 174 }
lbajardsilogic@0 175 }
lbajardsilogic@0 176
lbajardsilogic@0 177 if (!found) {
lbajardsilogic@0 178
lbajardsilogic@0 179 for (i = m_hiddenPanes.begin(); i != m_hiddenPanes.end(); ++i) {
lbajardsilogic@0 180 if (i->pane == pane) {
lbajardsilogic@0 181 m_hiddenPanes.erase(i);
lbajardsilogic@0 182 found = true;
lbajardsilogic@0 183 break;
lbajardsilogic@0 184 }
lbajardsilogic@0 185 }
lbajardsilogic@0 186
lbajardsilogic@0 187 if (!found) {
lbajardsilogic@0 188 std::cerr << "WARNING: PaneStack::deletePane(" << pane << "): Pane not found in visible or hidden panes, not deleting" << std::endl;
lbajardsilogic@0 189 return;
lbajardsilogic@0 190 }
lbajardsilogic@0 191 }
lbajardsilogic@0 192
lbajardsilogic@0 193 delete pane->parent();
lbajardsilogic@0 194
lbajardsilogic@0 195 if (m_currentPane == pane) {
lbajardsilogic@0 196 if (m_panes.size() > 0) {
lbajardsilogic@0 197 setCurrentPane(m_panes[0].pane);
lbajardsilogic@0 198 } else {
lbajardsilogic@0 199 setCurrentPane(0);
lbajardsilogic@0 200 }
lbajardsilogic@0 201 }
benoitrigolleau@66 202 emit paneDeleted(pane);
lbajardsilogic@0 203 }
lbajardsilogic@0 204
lbajardsilogic@0 205 int
lbajardsilogic@0 206 PaneStack::getPaneCount() const
lbajardsilogic@0 207 {
lbajardsilogic@0 208 return m_panes.size();
lbajardsilogic@0 209 }
lbajardsilogic@0 210
lbajardsilogic@0 211 int
lbajardsilogic@0 212 PaneStack::getHiddenPaneCount() const
lbajardsilogic@0 213 {
lbajardsilogic@0 214 return m_hiddenPanes.size();
lbajardsilogic@0 215 }
lbajardsilogic@0 216
lbajardsilogic@0 217 void
lbajardsilogic@0 218 PaneStack::hidePane(Pane *pane)
lbajardsilogic@0 219 {
lbajardsilogic@0 220 std::vector<PaneRec>::iterator i = m_panes.begin();
lbajardsilogic@0 221
lbajardsilogic@0 222 while (i != m_panes.end()) {
lbajardsilogic@0 223 if (i->pane == pane) {
lbajardsilogic@0 224
lbajardsilogic@0 225 m_hiddenPanes.push_back(*i);
lbajardsilogic@0 226 m_panes.erase(i);
lbajardsilogic@0 227
lbajardsilogic@0 228 QWidget *pw = dynamic_cast<QWidget *>(pane->parent());
lbajardsilogic@0 229 if (pw) pw->hide();
lbajardsilogic@0 230
lbajardsilogic@0 231 if (m_currentPane == pane) {
lbajardsilogic@0 232 if (m_panes.size() > 0) {
lbajardsilogic@0 233 setCurrentPane(m_panes[0].pane);
lbajardsilogic@0 234 } else {
lbajardsilogic@0 235 setCurrentPane(0);
lbajardsilogic@0 236 }
lbajardsilogic@0 237 }
lbajardsilogic@0 238
lbajardsilogic@0 239 return;
lbajardsilogic@0 240 }
lbajardsilogic@0 241 ++i;
lbajardsilogic@0 242 }
lbajardsilogic@0 243
lbajardsilogic@0 244 std::cerr << "WARNING: PaneStack::hidePane(" << pane << "): Pane not found in visible panes" << std::endl;
lbajardsilogic@0 245 }
lbajardsilogic@0 246
lbajardsilogic@0 247 void
lbajardsilogic@0 248 PaneStack::showPane(Pane *pane)
lbajardsilogic@0 249 {
lbajardsilogic@0 250 std::vector<PaneRec>::iterator i = m_hiddenPanes.begin();
lbajardsilogic@0 251
lbajardsilogic@0 252 while (i != m_hiddenPanes.end()) {
lbajardsilogic@0 253 if (i->pane == pane) {
lbajardsilogic@0 254 m_panes.push_back(*i);
lbajardsilogic@0 255 m_hiddenPanes.erase(i);
lbajardsilogic@0 256 QWidget *pw = dynamic_cast<QWidget *>(pane->parent());
lbajardsilogic@0 257 if (pw) pw->show();
lbajardsilogic@0 258
lbajardsilogic@0 259 //!!! update current pane
lbajardsilogic@0 260
lbajardsilogic@0 261 return;
lbajardsilogic@0 262 }
lbajardsilogic@0 263 ++i;
lbajardsilogic@0 264 }
lbajardsilogic@0 265
lbajardsilogic@0 266 std::cerr << "WARNING: PaneStack::showPane(" << pane << "): Pane not found in hidden panes" << std::endl;
lbajardsilogic@0 267 }
lbajardsilogic@0 268
lbajardsilogic@0 269 void
lbajardsilogic@0 270 PaneStack::setCurrentPane(Pane *pane) // may be null
lbajardsilogic@0 271 {
lbajardsilogic@0 272 if (m_currentPane == pane) return;
lbajardsilogic@0 273
lbajardsilogic@0 274 std::vector<PaneRec>::iterator i = m_panes.begin();
lbajardsilogic@0 275
lbajardsilogic@0 276 // We used to do this by setting the foreground and background
lbajardsilogic@0 277 // role, but it seems the background role is ignored and the
lbajardsilogic@0 278 // background drawn transparent in Qt 4.1 -- I can't quite see why
lbajardsilogic@0 279
lbajardsilogic@0 280 QPixmap selectedMap(1, 1);
lbajardsilogic@0 281 selectedMap.fill(QApplication::palette().color(QPalette::Foreground));
lbajardsilogic@0 282
lbajardsilogic@0 283 QPixmap unselectedMap(1, 1);
lbajardsilogic@0 284 unselectedMap.fill(QApplication::palette().color(QPalette::Background));
lbajardsilogic@0 285
lbajardsilogic@0 286 bool found = false;
lbajardsilogic@0 287
lbajardsilogic@0 288 while (i != m_panes.end()) {
lbajardsilogic@0 289 if (i->pane == pane) {
lbajardsilogic@0 290 i->currentIndicator->setPixmap(selectedMap);
lbajardsilogic@0 291 if (m_layoutStyle != PropertyStackPerPaneLayout) {
lbajardsilogic@0 292 m_propertyStackStack->setCurrentWidget(i->propertyStack);
lbajardsilogic@0 293 }
lbajardsilogic@0 294 found = true;
lbajardsilogic@0 295 } else {
lbajardsilogic@0 296 i->currentIndicator->setPixmap(unselectedMap);
lbajardsilogic@0 297 }
lbajardsilogic@0 298 ++i;
lbajardsilogic@0 299 }
lbajardsilogic@0 300
lbajardsilogic@0 301 if (found || pane == 0) {
lbajardsilogic@0 302 m_currentPane = pane;
lbajardsilogic@0 303 emit currentPaneChanged(m_currentPane);
lbajardsilogic@0 304 } else {
lbajardsilogic@0 305 std::cerr << "WARNING: PaneStack::setCurrentPane(" << pane << "): pane is not a visible pane in this stack" << std::endl;
lbajardsilogic@0 306 }
lbajardsilogic@0 307 }
lbajardsilogic@0 308
lbajardsilogic@0 309 void
lbajardsilogic@0 310 PaneStack::setCurrentLayer(Pane *pane, Layer *layer) // may be null
lbajardsilogic@0 311 {
lbajardsilogic@0 312 setCurrentPane(pane);
lbajardsilogic@0 313
lbajardsilogic@0 314 if (m_currentPane) {
lbajardsilogic@0 315
lbajardsilogic@0 316 std::vector<PaneRec>::iterator i = m_panes.begin();
lbajardsilogic@0 317
lbajardsilogic@0 318 while (i != m_panes.end()) {
lbajardsilogic@0 319
lbajardsilogic@0 320 if (i->pane == pane) {
lbajardsilogic@0 321 PropertyStack *stack = dynamic_cast<PropertyStack *>
lbajardsilogic@0 322 (i->propertyStack);
lbajardsilogic@0 323 if (stack) {
lbajardsilogic@0 324 if (stack->containsContainer(layer)) {
lbajardsilogic@0 325 stack->setCurrentIndex(stack->getContainerIndex(layer));
lbajardsilogic@0 326 emit currentLayerChanged(pane, layer);
lbajardsilogic@0 327 } else {
lbajardsilogic@0 328 stack->setCurrentIndex
lbajardsilogic@0 329 (stack->getContainerIndex
lbajardsilogic@0 330 (pane->getPropertyContainer(0)));
lbajardsilogic@0 331 emit currentLayerChanged(pane, 0);
lbajardsilogic@0 332 }
lbajardsilogic@0 333 }
lbajardsilogic@0 334 break;
lbajardsilogic@0 335 }
lbajardsilogic@0 336 ++i;
lbajardsilogic@0 337 }
lbajardsilogic@0 338 }
lbajardsilogic@0 339 }
lbajardsilogic@0 340
lbajardsilogic@0 341 Pane *
lbajardsilogic@0 342 PaneStack::getCurrentPane()
lbajardsilogic@0 343 {
lbajardsilogic@0 344 return m_currentPane;
lbajardsilogic@0 345 }
lbajardsilogic@0 346
lbajardsilogic@0 347 void
lbajardsilogic@0 348 PaneStack::propertyContainerAdded(PropertyContainer *)
lbajardsilogic@0 349 {
lbajardsilogic@0 350 sizePropertyStacks();
lbajardsilogic@0 351 }
lbajardsilogic@0 352
lbajardsilogic@0 353 void
lbajardsilogic@0 354 PaneStack::propertyContainerRemoved(PropertyContainer *)
lbajardsilogic@0 355 {
lbajardsilogic@0 356 sizePropertyStacks();
lbajardsilogic@0 357 }
lbajardsilogic@0 358
lbajardsilogic@0 359 void
lbajardsilogic@0 360 PaneStack::propertyContainerSelected(View *client, PropertyContainer *pc)
lbajardsilogic@0 361 {
lbajardsilogic@0 362 std::vector<PaneRec>::iterator i = m_panes.begin();
lbajardsilogic@0 363
lbajardsilogic@0 364 while (i != m_panes.end()) {
lbajardsilogic@0 365 PropertyStack *stack = dynamic_cast<PropertyStack *>(i->propertyStack);
lbajardsilogic@0 366 if (stack &&
lbajardsilogic@0 367 stack->getClient() == client &&
lbajardsilogic@0 368 stack->containsContainer(pc)) {
lbajardsilogic@0 369 setCurrentPane(i->pane);
lbajardsilogic@0 370 break;
lbajardsilogic@0 371 }
lbajardsilogic@0 372 ++i;
lbajardsilogic@0 373 }
lbajardsilogic@0 374
lbajardsilogic@0 375 Layer *layer = dynamic_cast<Layer *>(pc);
lbajardsilogic@0 376 if (layer) emit currentLayerChanged(m_currentPane, layer);
lbajardsilogic@0 377 else emit currentLayerChanged(m_currentPane, 0);
lbajardsilogic@0 378 }
lbajardsilogic@0 379
lbajardsilogic@0 380 void
lbajardsilogic@0 381 PaneStack::viewSelected(View *v)
lbajardsilogic@0 382 {
lbajardsilogic@0 383 Pane *p = dynamic_cast<Pane *>(v);
lbajardsilogic@0 384 if (p) setCurrentPane(p);
lbajardsilogic@0 385 }
lbajardsilogic@0 386
lbajardsilogic@0 387 void
lbajardsilogic@0 388 PaneStack::paneInteractedWith()
lbajardsilogic@0 389 {
lbajardsilogic@0 390 Pane *pane = dynamic_cast<Pane *>(sender());
lbajardsilogic@0 391 if (!pane) return;
lbajardsilogic@0 392 setCurrentPane(pane);
lbajardsilogic@0 393 }
lbajardsilogic@0 394
lbajardsilogic@0 395 void
lbajardsilogic@0 396 PaneStack::rightButtonMenuRequested(QPoint position)
lbajardsilogic@0 397 {
lbajardsilogic@0 398 Pane *pane = dynamic_cast<Pane *>(sender());
lbajardsilogic@0 399 if (!pane) return;
lbajardsilogic@0 400 emit rightButtonMenuRequested(pane, position);
lbajardsilogic@0 401 }
lbajardsilogic@0 402
lbajardsilogic@0 403 void
lbajardsilogic@0 404 PaneStack::sizePropertyStacks()
lbajardsilogic@0 405 {
lbajardsilogic@0 406 int maxMinWidth = 0;
lbajardsilogic@0 407
lbajardsilogic@0 408 if (m_propertyStackMinWidth > 0) maxMinWidth = m_propertyStackMinWidth;
lbajardsilogic@0 409
lbajardsilogic@0 410 for (size_t i = 0; i < m_panes.size(); ++i) {
lbajardsilogic@0 411 if (!m_panes[i].propertyStack) continue;
lbajardsilogic@0 412 #ifdef DEBUG_PANE_STACK
lbajardsilogic@0 413 std::cerr << "PaneStack::sizePropertyStacks: " << i << ": min "
lbajardsilogic@0 414 << m_panes[i].propertyStack->minimumSizeHint().width() << ", hint "
lbajardsilogic@0 415 << m_panes[i].propertyStack->sizeHint().width() << ", current "
lbajardsilogic@0 416 << m_panes[i].propertyStack->width() << std::endl;
lbajardsilogic@0 417 #endif
lbajardsilogic@0 418
lbajardsilogic@0 419 if (m_panes[i].propertyStack->sizeHint().width() > maxMinWidth) {
lbajardsilogic@0 420 maxMinWidth = m_panes[i].propertyStack->sizeHint().width();
lbajardsilogic@0 421 }
lbajardsilogic@0 422 }
lbajardsilogic@0 423
lbajardsilogic@0 424 #ifdef DEBUG_PANE_STACK
lbajardsilogic@0 425 std::cerr << "PaneStack::sizePropertyStacks: max min width " << maxMinWidth << std::endl;
lbajardsilogic@0 426 #endif
lbajardsilogic@0 427
lbajardsilogic@0 428 //#ifdef Q_WS_MAC
lbajardsilogic@0 429 // This is necessary to compensate for cb->setMinimumSize(10, 10)
lbajardsilogic@0 430 // in PropertyBox in the Mac version (to avoid a mysterious crash)
lbajardsilogic@0 431 // ... no longer necessary with qt4.2
lbajardsilogic@0 432 // int setWidth = maxMinWidth * 3 / 2;
lbajardsilogic@0 433 //#else
lbajardsilogic@0 434 int setWidth = maxMinWidth;
lbajardsilogic@0 435 //#endif
lbajardsilogic@0 436
lbajardsilogic@0 437 m_propertyStackStack->setMaximumWidth(setWidth + 10);
lbajardsilogic@0 438
lbajardsilogic@0 439 for (size_t i = 0; i < m_panes.size(); ++i) {
lbajardsilogic@0 440 if (!m_panes[i].propertyStack) continue;
lbajardsilogic@0 441 m_panes[i].propertyStack->setMinimumWidth(setWidth);
lbajardsilogic@0 442 }
lbajardsilogic@0 443
lbajardsilogic@0 444 emit propertyStacksResized();
lbajardsilogic@0 445 }
lbajardsilogic@0 446
lbajardsilogic@101 447 void PaneStack::resizePane()
lbajardsilogic@101 448 {
lbajardsilogic@101 449 int totalSize = m_splitter->size().height();
lbajardsilogic@101 450 int nbPane = getPaneCount();
lbajardsilogic@0 451
lbajardsilogic@101 452 if (nbPane == 0)
lbajardsilogic@101 453 return;
lbajardsilogic@101 454
lbajardsilogic@101 455 QList<int> newSizes;
lbajardsilogic@101 456
lbajardsilogic@101 457 for (int i = 0; i< nbPane; i++)
lbajardsilogic@101 458 {
lbajardsilogic@101 459 newSizes.push_back(totalSize/nbPane);
lbajardsilogic@101 460 }
lbajardsilogic@101 461
lbajardsilogic@101 462 m_splitter->setSizes(newSizes);
lbajardsilogic@101 463 }