annotate view/PaneStack.cpp @ 102:033a39bff919

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