annotate view/PaneStack.cpp @ 144:f3dce7a985cf

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