25 #include <QApplication> 26 #include <QHBoxLayout> 27 #include <QVBoxLayout> 31 #include <QPushButton> 33 #include <QStackedWidget> 42 m_showAccessories(true),
43 m_splitter(new QSplitter),
44 m_propertyStackStack(new QStackedWidget),
45 m_viewManager(viewManager),
46 m_propertyStackMinWidth(100),
47 m_layoutStyle(PropertyStackPerPaneLayout)
49 QHBoxLayout *layout =
new QHBoxLayout;
51 layout->setSpacing(0);
79 QFrame *frame =
new QFrame;
81 QGridLayout *layout =
new QGridLayout;
83 layout->setSpacing(2);
85 QPushButton *xButton =
new QPushButton(frame);
87 xButton->setFixedSize(QSize(16, 16));
88 xButton->setFlat(
true);
90 layout->addWidget(xButton, 0, 0);
94 connect(currentIndicator, SIGNAL(clicked()),
this, SLOT(
indicatorClicked()));
95 layout->addWidget(currentIndicator, 1, 0);
96 layout->setRowStretch(1, 20);
97 currentIndicator->setMinimumWidth(8);
98 currentIndicator->setScaledContents(
true);
101 int initialCentreFrame = -1;
103 initialCentreFrame =
m_panes[0].pane->getCentreFrame();
107 if (initialCentreFrame >= 0) {
112 layout->addWidget(pane, 0, 1, 2, 1);
113 layout->setColumnStretch(1, 20);
115 QWidget *properties = 0;
116 if (suppressPropertyBox) {
117 properties =
new QFrame();
128 layout->addWidget(properties, 0, 2, 2, 1);
133 layout->setColumnStretch(2, 0);
144 frame->setLayout(layout);
177 for (std::vector<PaneRec>::iterator i =
m_panes.begin();
179 i->propertyStack->setMinimumWidth(mw);
190 std::vector<PaneRec>::iterator i;
198 i->layout->removeWidget(i->propertyStack);
209 i->propertyStack->setParent(i->frame);
210 i->layout->addWidget(i->propertyStack, 0, 2, 2, 1);
211 i->propertyStack->show();
248 cerr <<
"PaneStack::deletePane(" << pane <<
")" << endl;
250 std::vector<PaneRec>::iterator i;
256 if (i->pane == pane) {
257 stack = i->propertyStack;
267 if (i->pane == pane) {
268 stack = i->propertyStack;
276 cerr <<
"WARNING: PaneStack::deletePane(" << pane <<
"): Pane not found in visible or hidden panes, not deleting" << endl;
283 cerr <<
"PaneStack::deletePane: about to delete parent " << pane->parent() <<
" of pane " << pane << endl;
295 delete pane->parent();
313 cerr <<
"PaneStack::showOrHidePaneAccessories: count == " <<
getPaneCount() << endl;
316 for (std::vector<PaneRec>::iterator i =
m_panes.begin();
338 std::vector<PaneRec>::iterator i =
m_panes.begin();
341 if (i->pane == pane) {
346 QWidget *pw = dynamic_cast<QWidget *>(pane->parent());
365 cerr <<
"WARNING: PaneStack::hidePane(" << pane <<
"): Pane not found in visible panes" << endl;
374 if (i->pane == pane) {
377 QWidget *pw = dynamic_cast<QWidget *>(pane->parent());
389 cerr <<
"WARNING: PaneStack::showPane(" << pane <<
"): Pane not found in hidden panes" << endl;
397 std::vector<PaneRec>::iterator i =
m_panes.begin();
403 QPixmap selectedMap(1, 1);
404 selectedMap.fill(QApplication::palette().color(QPalette::Foreground));
406 QPixmap unselectedMap(1, 1);
407 unselectedMap.fill(QApplication::palette().color(QPalette::Background));
412 if (i->pane == pane) {
413 i->currentIndicator->setPixmap(selectedMap);
419 i->currentIndicator->setPixmap(unselectedMap);
424 if (found || pane == 0) {
428 cerr <<
"WARNING: PaneStack::setCurrentPane(" << pane <<
"): pane is not a visible pane in this stack" << endl;
439 std::vector<PaneRec>::iterator i =
m_panes.begin();
443 if (i->pane == pane) {
451 stack->setCurrentIndex
485 std::vector<PaneRec>::iterator i =
m_panes.begin();
488 PropertyStack *stack = dynamic_cast<PropertyStack *>(i->propertyStack);
498 Layer *layer = dynamic_cast<Layer *>(pc);
506 Pane *p = dynamic_cast<Pane *>(v);
513 Pane *pane = dynamic_cast<Pane *>(sender());
521 Pane *pane = dynamic_cast<Pane *>(sender());
533 for (
int i = 0; i < (int)
m_panes.size(); ++i) {
534 if (!
m_panes[i].propertyStack)
continue;
535 #ifdef DEBUG_PANE_STACK 536 SVDEBUG <<
"PaneStack::sizePropertyStacks: " << i <<
": min " 537 <<
m_panes[i].propertyStack->minimumSizeHint().width() <<
", hint " 538 <<
m_panes[i].propertyStack->sizeHint().width() <<
", current " 539 <<
m_panes[i].propertyStack->width() << endl;
542 if (
m_panes[i].propertyStack->sizeHint().width() > maxMinWidth) {
543 maxMinWidth =
m_panes[i].propertyStack->sizeHint().width();
547 #ifdef DEBUG_PANE_STACK 548 SVDEBUG <<
"PaneStack::sizePropertyStacks: max min width " << maxMinWidth << endl;
551 int setWidth = maxMinWidth;
555 for (
int i = 0; i < (int)
m_panes.size(); ++i) {
556 if (!
m_panes[i].propertyStack)
continue;
557 m_panes[i].propertyStack->setMinimumWidth(setWidth);
567 Pane *pane = dynamic_cast<Pane *>(sender());
574 Pane *pane = dynamic_cast<Pane *>(sender());
581 QObject *s = sender();
582 for (
int i = 0; i < (int)
m_panes.size(); ++i) {
592 QObject *s = sender();
594 for (
int i = 0; i < (int)
m_panes.size(); ++i) {
595 if (
m_panes[i].currentIndicator == s) {
606 if (sizes.empty())
return;
608 int count = sizes.size();
610 int fixed = 0, variable = 0, total = 0;
613 for (
int i = 0; i < count; ++i) {
619 for (
int i = 0; i < count; ++i) {
620 int minh =
m_panes[i].pane->minimumSize().height();
621 if (minh ==
m_panes[i].pane->maximumSize().height()) {
629 if (total == 0)
return;
633 int each = (varicount > 0 ? (variable / varicount) : 0);
634 int remaining = total;
636 for (
int i = 0; i < count; ++i) {
637 if (i == count - 1) {
638 sizes.push_back(remaining);
640 int minh =
m_panes[i].pane->minimumSize().height();
641 if (minh ==
m_panes[i].pane->maximumSize().height()) {
642 sizes.push_back(minh);
645 sizes.push_back(each);
Pane * getHiddenPane(int n)
virtual const PropertyContainer * getPropertyContainer(int i) const
The base class for visual representations of the data found in a Model.
void setShowPaneAccessories(bool show)
void hidePane(Pane *pane)
void propertyStacksResized()
PaneStack(QWidget *parent, ViewManager *viewManager)
int m_propertyStackMinWidth
void dropAccepted(Pane *pane, QStringList uriList)
ViewManager * m_viewManager
void paneDeleteButtonClicked()
std::vector< PaneRec > m_panes
QLabel * currentIndicator
void doubleClickSelectInvoked(int frame)
int getHiddenPaneCount() const
void paneAboutToBeDeleted(Pane *pane)
void propertyContainerAdded(PropertyContainer *)
virtual void setViewManager(ViewManager *m)
LayoutStyle m_layoutStyle
void propertyContainerRemoved(PropertyContainer *)
int getPaneIndex(Pane *pane)
void showOrHidePaneAccessories()
void propertyContainerSelected(View *client, PropertyContainer *)
void deletePane(Pane *pane)
void setLayoutStyle(LayoutStyle style)
void contextHelpChanged(const QString &)
void setCurrentLayer(Pane *pane, Layer *layer)
int getContainerIndex(PropertyContainer *container) const
void setPropertyStackMinWidth(int mw)
void currentPaneChanged(Pane *pane)
QStackedWidget * m_propertyStackStack
bool containsContainer(PropertyContainer *container) const
View is the base class of widgets that display one or more overlaid views of data against a horizonta...
void setCurrentPane(Pane *pane)
The ViewManager manages properties that may need to be synchronised between separate Views.
void showPane(Pane *pane)
Pane * addPane(bool suppressPropertyBox=false)
void viewSelected(View *v)
void sizePropertyStacks()
void rightButtonMenuRequested(Pane *pane, QPoint position)
void paneInteractedWith()
std::vector< PaneRec > m_hiddenPanes
void paneDropAccepted(QStringList)
void currentLayerChanged(Pane *pane, Layer *layer)
Pane * insertPane(int index, bool suppressPropertyBox=false)