lbajardsilogic@7: lbajardsilogic@7: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@7: lbajardsilogic@7: /* lbajardsilogic@7: Sound Access lbajardsilogic@7: EASAIER client application. lbajardsilogic@7: Silogic 2007. Benoit Rigolleau. lbajardsilogic@7: lbajardsilogic@7: This program is free software; you can redistribute it and/or lbajardsilogic@7: modify it under the terms of the GNU General Public License as lbajardsilogic@7: published by the Free Software Foundation; either version 2 of the lbajardsilogic@7: License, or (at your option) any later version. See the file lbajardsilogic@7: COPYING included with this distribution for more information. lbajardsilogic@7: */ lbajardsilogic@7: lbajardsilogic@7: #include lbajardsilogic@7: #include lbajardsilogic@7: lbajardsilogic@7: #include "ExpandWidget.h" lbajardsilogic@7: lbajardsilogic@7: lbajardsilogic@7: lbajardsilogic@7: ExpandWidget::ExpandWidget(QWidget *parent) : QSplitter(parent){ lbajardsilogic@7: m_paneClosed = 0; lbajardsilogic@7: m_button = new QPushButton(); lbajardsilogic@7: m_button->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); lbajardsilogic@7: m_paneClosed = false; lbajardsilogic@7: lbajardsilogic@7: setWidgetLocation(ExpandWidget::Location_Left); lbajardsilogic@7: lbajardsilogic@205: connect(m_button,SIGNAL(clicked()),this,SLOT(changePaneState())); lbajardsilogic@7: } lbajardsilogic@7: lbajardsilogic@7: void ExpandWidget::refreshButtonIcone(){ lbajardsilogic@7: switch(m_widgetLocation){ lbajardsilogic@7: case ExpandWidget::Location_Bottom: lbajardsilogic@7: if(m_paneClosed){ lbajardsilogic@7: m_button->setIcon(QIcon(":icons/top.png")); lbajardsilogic@7: }else{ lbajardsilogic@7: m_button->setIcon(QIcon(":icons/bottom.png")); lbajardsilogic@7: } lbajardsilogic@7: break; lbajardsilogic@7: case ExpandWidget::Location_Top: lbajardsilogic@7: if(m_paneClosed){ lbajardsilogic@7: m_button->setIcon(QIcon(":icons/bottom.png")); lbajardsilogic@7: }else{ lbajardsilogic@7: m_button->setIcon(QIcon(":icons/top.png")); lbajardsilogic@7: } lbajardsilogic@7: break; lbajardsilogic@7: case ExpandWidget::Location_Left: lbajardsilogic@7: if(m_paneClosed){ lbajardsilogic@7: m_button->setIcon(QIcon(":icons/right.png")); lbajardsilogic@7: }else{ lbajardsilogic@7: m_button->setIcon(QIcon(":icons/left.png")); lbajardsilogic@7: } lbajardsilogic@7: lbajardsilogic@7: break; lbajardsilogic@7: case ExpandWidget::Location_Right: lbajardsilogic@7: default : lbajardsilogic@7: if(m_paneClosed){ lbajardsilogic@7: m_button->setIcon(QIcon(":icons/left.png")); lbajardsilogic@7: }else{ lbajardsilogic@7: m_button->setIcon(QIcon(":icons/right.png")); lbajardsilogic@7: } lbajardsilogic@7: break; lbajardsilogic@7: } lbajardsilogic@7: } lbajardsilogic@7: lbajardsilogic@7: lbajardsilogic@7: void ExpandWidget::setWidgetLocation(ExpandWidget::Location newWidgetLocation){ lbajardsilogic@7: lbajardsilogic@7: m_widgetLocation = newWidgetLocation; lbajardsilogic@7: lbajardsilogic@7: switch(m_widgetLocation){ lbajardsilogic@7: case ExpandWidget::Location_Bottom: lbajardsilogic@7: case ExpandWidget::Location_Top: lbajardsilogic@7: this->setOrientation(Qt::Vertical); lbajardsilogic@7: m_button->setFixedSize(50,8); lbajardsilogic@7: break; lbajardsilogic@7: case ExpandWidget::Location_Left: lbajardsilogic@7: case ExpandWidget::Location_Right: lbajardsilogic@7: default : lbajardsilogic@7: this->setOrientation(Qt::Horizontal); lbajardsilogic@7: m_button->setFixedSize(8,50); lbajardsilogic@7: break; lbajardsilogic@7: } lbajardsilogic@7: refreshButtonIcone(); lbajardsilogic@7: } lbajardsilogic@7: lbajardsilogic@7: void ExpandWidget::setPanes(QWidget *newCenterPane, QWidget *newOtherPane){ lbajardsilogic@7: lbajardsilogic@98: QList sizes; lbajardsilogic@7: m_centerPane = newCenterPane; lbajardsilogic@7: m_otherPane = newOtherPane; lbajardsilogic@7: lbajardsilogic@7: lbajardsilogic@7: newCenterPane->setParent(this); lbajardsilogic@7: newOtherPane->setParent(this); lbajardsilogic@7: lbajardsilogic@7: QWidget *widgetAux = new QWidget; lbajardsilogic@7: QLayout *lay; lbajardsilogic@7: // only to center the button lbajardsilogic@7: QWidget *widgetForBtn = new QWidget; lbajardsilogic@7: QHBoxLayout *layForBtn = new QHBoxLayout(); lbajardsilogic@7: layForBtn->setMargin(0); lbajardsilogic@7: layForBtn->setSpacing(0); lbajardsilogic@7: widgetForBtn->setMaximumHeight(8); lbajardsilogic@7: lbajardsilogic@7: lbajardsilogic@7: switch(m_widgetLocation){ lbajardsilogic@7: case ExpandWidget::Location_Bottom: lbajardsilogic@7: lay = new QVBoxLayout(); lbajardsilogic@7: lay->setMargin(0); lbajardsilogic@7: lay->setSpacing(0); lbajardsilogic@7: lay->addWidget(m_centerPane); lbajardsilogic@7: lbajardsilogic@7: // this code is only to center the button. lbajardsilogic@7: layForBtn->addStretch(); lbajardsilogic@7: layForBtn->addWidget(m_button); lbajardsilogic@7: layForBtn->addStretch(); lbajardsilogic@7: widgetForBtn->setLayout(layForBtn); lbajardsilogic@7: lay->addWidget(widgetForBtn); lbajardsilogic@7: lbajardsilogic@7: widgetAux->setLayout(lay); lbajardsilogic@7: this->addWidget(widgetAux); lbajardsilogic@7: this->addWidget(m_otherPane); lbajardsilogic@101: sizes.push_back(widgetAux->height()); lbajardsilogic@101: sizes.push_back(m_otherPane->height()); lbajardsilogic@98: this->setSizes(sizes); lbajardsilogic@7: break; lbajardsilogic@7: case ExpandWidget::Location_Top: lbajardsilogic@7: lay = new QVBoxLayout(); lbajardsilogic@7: lay->setMargin(0); lbajardsilogic@7: lay->setSpacing(0); lbajardsilogic@7: lbajardsilogic@7: // this code is only for center the button. lbajardsilogic@7: layForBtn->addStretch(); lbajardsilogic@7: layForBtn->addWidget(m_button); lbajardsilogic@7: layForBtn->addStretch(); lbajardsilogic@7: widgetForBtn->setLayout(layForBtn); lbajardsilogic@7: lbajardsilogic@7: lay->addWidget(widgetForBtn); lbajardsilogic@7: lay->addWidget(m_centerPane); lbajardsilogic@7: widgetAux->setLayout(lay); lbajardsilogic@7: this->addWidget(m_otherPane); lbajardsilogic@7: this->addWidget(widgetAux); lbajardsilogic@101: sizes.push_back(m_otherPane->height()); lbajardsilogic@101: sizes.push_back(widgetAux->height()); lbajardsilogic@101: this->setSizes(sizes); lbajardsilogic@7: break; lbajardsilogic@7: case ExpandWidget::Location_Left: lbajardsilogic@7: lay = new QHBoxLayout(); lbajardsilogic@7: lay->setMargin(0); lbajardsilogic@7: lay->setSpacing(0); lbajardsilogic@7: lay->addWidget(m_button); lbajardsilogic@7: lay->addWidget(m_centerPane); lbajardsilogic@7: widgetAux->setLayout(lay); lbajardsilogic@7: this->addWidget(m_otherPane); lbajardsilogic@7: this->addWidget(widgetAux); lbajardsilogic@101: sizes.push_back(m_otherPane->width()); lbajardsilogic@101: sizes.push_back(widgetAux->width()); lbajardsilogic@98: this->setSizes(sizes); lbajardsilogic@7: break; lbajardsilogic@7: case ExpandWidget::Location_Right: lbajardsilogic@7: default : lbajardsilogic@7: lay = new QHBoxLayout(); lbajardsilogic@7: lay->setMargin(0); lbajardsilogic@7: lay->setSpacing(0); lbajardsilogic@7: lay->addWidget(m_centerPane); lbajardsilogic@7: lay->addWidget(m_button); lbajardsilogic@7: widgetAux->setLayout(lay); lbajardsilogic@7: this->addWidget(widgetAux); lbajardsilogic@7: this->addWidget(m_otherPane); lbajardsilogic@101: sizes.push_back(widgetAux->width()); lbajardsilogic@101: sizes.push_back(m_otherPane->width()); lbajardsilogic@98: this->setSizes(sizes); lbajardsilogic@7: break; lbajardsilogic@7: } lbajardsilogic@7: } lbajardsilogic@7: lbajardsilogic@7: lbajardsilogic@205: void ExpandWidget::changePaneState(){ lbajardsilogic@7: if(&m_paneClosed!=0 ){ lbajardsilogic@7: m_otherPane->setVisible(m_paneClosed); lbajardsilogic@7: } lbajardsilogic@7: m_paneClosed = !m_paneClosed; lbajardsilogic@7: refreshButtonIcone(); lbajardsilogic@205: emit paneStateChanged(!m_paneClosed); lbajardsilogic@7: } lbajardsilogic@7: lbajardsilogic@101: void ExpandWidget::setPercentage(int a, int b) lbajardsilogic@101: { lbajardsilogic@101: int percent = a + b; lbajardsilogic@101: lbajardsilogic@101: if (percent == 0) lbajardsilogic@101: return; lbajardsilogic@7: lbajardsilogic@101: QList newSizes; lbajardsilogic@101: int totalSize = 0; lbajardsilogic@101: lbajardsilogic@101: QList sizes = this->sizes(); lbajardsilogic@101: QList::iterator iter = sizes.begin(); lbajardsilogic@101: lbajardsilogic@101: QListIterator it(this->sizes()); lbajardsilogic@101: while (it.hasNext()) lbajardsilogic@101: { lbajardsilogic@101: totalSize += it.next(); lbajardsilogic@101: } lbajardsilogic@101: lbajardsilogic@101: newSizes.push_back(totalSize*a/percent); lbajardsilogic@101: newSizes.push_back(totalSize*b/percent); lbajardsilogic@101: this->setSizes(newSizes); lbajardsilogic@101: } lbajardsilogic@101: lbajardsilogic@101: