annotate widgets/ExpandWidget.cpp @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents 00cf9a7faa4d
children
rev   line source
lbajardsilogic@7 1
lbajardsilogic@7 2 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@7 3
lbajardsilogic@7 4 /*
lbajardsilogic@7 5 Sound Access
lbajardsilogic@7 6 EASAIER client application.
lbajardsilogic@7 7 Silogic 2007. Benoit Rigolleau.
lbajardsilogic@7 8
lbajardsilogic@7 9 This program is free software; you can redistribute it and/or
lbajardsilogic@7 10 modify it under the terms of the GNU General Public License as
lbajardsilogic@7 11 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@7 12 License, or (at your option) any later version. See the file
lbajardsilogic@7 13 COPYING included with this distribution for more information.
lbajardsilogic@7 14 */
lbajardsilogic@7 15
lbajardsilogic@7 16 #include <QSizePolicy>
lbajardsilogic@7 17 #include <QIcon>
lbajardsilogic@7 18
lbajardsilogic@7 19 #include "ExpandWidget.h"
lbajardsilogic@7 20
lbajardsilogic@7 21
lbajardsilogic@7 22
lbajardsilogic@7 23 ExpandWidget::ExpandWidget(QWidget *parent) : QSplitter(parent){
lbajardsilogic@7 24 m_paneClosed = 0;
lbajardsilogic@7 25 m_button = new QPushButton();
lbajardsilogic@7 26 m_button->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
lbajardsilogic@7 27 m_paneClosed = false;
lbajardsilogic@7 28
lbajardsilogic@7 29 setWidgetLocation(ExpandWidget::Location_Left);
lbajardsilogic@7 30
lbajardsilogic@205 31 connect(m_button,SIGNAL(clicked()),this,SLOT(changePaneState()));
lbajardsilogic@7 32 }
lbajardsilogic@7 33
lbajardsilogic@7 34 void ExpandWidget::refreshButtonIcone(){
lbajardsilogic@7 35 switch(m_widgetLocation){
lbajardsilogic@7 36 case ExpandWidget::Location_Bottom:
lbajardsilogic@7 37 if(m_paneClosed){
lbajardsilogic@7 38 m_button->setIcon(QIcon(":icons/top.png"));
lbajardsilogic@7 39 }else{
lbajardsilogic@7 40 m_button->setIcon(QIcon(":icons/bottom.png"));
lbajardsilogic@7 41 }
lbajardsilogic@7 42 break;
lbajardsilogic@7 43 case ExpandWidget::Location_Top:
lbajardsilogic@7 44 if(m_paneClosed){
lbajardsilogic@7 45 m_button->setIcon(QIcon(":icons/bottom.png"));
lbajardsilogic@7 46 }else{
lbajardsilogic@7 47 m_button->setIcon(QIcon(":icons/top.png"));
lbajardsilogic@7 48 }
lbajardsilogic@7 49 break;
lbajardsilogic@7 50 case ExpandWidget::Location_Left:
lbajardsilogic@7 51 if(m_paneClosed){
lbajardsilogic@7 52 m_button->setIcon(QIcon(":icons/right.png"));
lbajardsilogic@7 53 }else{
lbajardsilogic@7 54 m_button->setIcon(QIcon(":icons/left.png"));
lbajardsilogic@7 55 }
lbajardsilogic@7 56
lbajardsilogic@7 57 break;
lbajardsilogic@7 58 case ExpandWidget::Location_Right:
lbajardsilogic@7 59 default :
lbajardsilogic@7 60 if(m_paneClosed){
lbajardsilogic@7 61 m_button->setIcon(QIcon(":icons/left.png"));
lbajardsilogic@7 62 }else{
lbajardsilogic@7 63 m_button->setIcon(QIcon(":icons/right.png"));
lbajardsilogic@7 64 }
lbajardsilogic@7 65 break;
lbajardsilogic@7 66 }
lbajardsilogic@7 67 }
lbajardsilogic@7 68
lbajardsilogic@7 69
lbajardsilogic@7 70 void ExpandWidget::setWidgetLocation(ExpandWidget::Location newWidgetLocation){
lbajardsilogic@7 71
lbajardsilogic@7 72 m_widgetLocation = newWidgetLocation;
lbajardsilogic@7 73
lbajardsilogic@7 74 switch(m_widgetLocation){
lbajardsilogic@7 75 case ExpandWidget::Location_Bottom:
lbajardsilogic@7 76 case ExpandWidget::Location_Top:
lbajardsilogic@7 77 this->setOrientation(Qt::Vertical);
lbajardsilogic@7 78 m_button->setFixedSize(50,8);
lbajardsilogic@7 79 break;
lbajardsilogic@7 80 case ExpandWidget::Location_Left:
lbajardsilogic@7 81 case ExpandWidget::Location_Right:
lbajardsilogic@7 82 default :
lbajardsilogic@7 83 this->setOrientation(Qt::Horizontal);
lbajardsilogic@7 84 m_button->setFixedSize(8,50);
lbajardsilogic@7 85 break;
lbajardsilogic@7 86 }
lbajardsilogic@7 87 refreshButtonIcone();
lbajardsilogic@7 88 }
lbajardsilogic@7 89
lbajardsilogic@7 90 void ExpandWidget::setPanes(QWidget *newCenterPane, QWidget *newOtherPane){
lbajardsilogic@7 91
lbajardsilogic@98 92 QList<int> sizes;
lbajardsilogic@7 93 m_centerPane = newCenterPane;
lbajardsilogic@7 94 m_otherPane = newOtherPane;
lbajardsilogic@7 95
lbajardsilogic@7 96
lbajardsilogic@7 97 newCenterPane->setParent(this);
lbajardsilogic@7 98 newOtherPane->setParent(this);
lbajardsilogic@7 99
lbajardsilogic@7 100 QWidget *widgetAux = new QWidget;
lbajardsilogic@7 101 QLayout *lay;
lbajardsilogic@7 102 // only to center the button
lbajardsilogic@7 103 QWidget *widgetForBtn = new QWidget;
lbajardsilogic@7 104 QHBoxLayout *layForBtn = new QHBoxLayout();
lbajardsilogic@7 105 layForBtn->setMargin(0);
lbajardsilogic@7 106 layForBtn->setSpacing(0);
lbajardsilogic@7 107 widgetForBtn->setMaximumHeight(8);
lbajardsilogic@7 108
lbajardsilogic@7 109
lbajardsilogic@7 110 switch(m_widgetLocation){
lbajardsilogic@7 111 case ExpandWidget::Location_Bottom:
lbajardsilogic@7 112 lay = new QVBoxLayout();
lbajardsilogic@7 113 lay->setMargin(0);
lbajardsilogic@7 114 lay->setSpacing(0);
lbajardsilogic@7 115 lay->addWidget(m_centerPane);
lbajardsilogic@7 116
lbajardsilogic@7 117 // this code is only to center the button.
lbajardsilogic@7 118 layForBtn->addStretch();
lbajardsilogic@7 119 layForBtn->addWidget(m_button);
lbajardsilogic@7 120 layForBtn->addStretch();
lbajardsilogic@7 121 widgetForBtn->setLayout(layForBtn);
lbajardsilogic@7 122 lay->addWidget(widgetForBtn);
lbajardsilogic@7 123
lbajardsilogic@7 124 widgetAux->setLayout(lay);
lbajardsilogic@7 125 this->addWidget(widgetAux);
lbajardsilogic@7 126 this->addWidget(m_otherPane);
lbajardsilogic@101 127 sizes.push_back(widgetAux->height());
lbajardsilogic@101 128 sizes.push_back(m_otherPane->height());
lbajardsilogic@98 129 this->setSizes(sizes);
lbajardsilogic@7 130 break;
lbajardsilogic@7 131 case ExpandWidget::Location_Top:
lbajardsilogic@7 132 lay = new QVBoxLayout();
lbajardsilogic@7 133 lay->setMargin(0);
lbajardsilogic@7 134 lay->setSpacing(0);
lbajardsilogic@7 135
lbajardsilogic@7 136 // this code is only for center the button.
lbajardsilogic@7 137 layForBtn->addStretch();
lbajardsilogic@7 138 layForBtn->addWidget(m_button);
lbajardsilogic@7 139 layForBtn->addStretch();
lbajardsilogic@7 140 widgetForBtn->setLayout(layForBtn);
lbajardsilogic@7 141
lbajardsilogic@7 142 lay->addWidget(widgetForBtn);
lbajardsilogic@7 143 lay->addWidget(m_centerPane);
lbajardsilogic@7 144 widgetAux->setLayout(lay);
lbajardsilogic@7 145 this->addWidget(m_otherPane);
lbajardsilogic@7 146 this->addWidget(widgetAux);
lbajardsilogic@101 147 sizes.push_back(m_otherPane->height());
lbajardsilogic@101 148 sizes.push_back(widgetAux->height());
lbajardsilogic@101 149 this->setSizes(sizes);
lbajardsilogic@7 150 break;
lbajardsilogic@7 151 case ExpandWidget::Location_Left:
lbajardsilogic@7 152 lay = new QHBoxLayout();
lbajardsilogic@7 153 lay->setMargin(0);
lbajardsilogic@7 154 lay->setSpacing(0);
lbajardsilogic@7 155 lay->addWidget(m_button);
lbajardsilogic@7 156 lay->addWidget(m_centerPane);
lbajardsilogic@7 157 widgetAux->setLayout(lay);
lbajardsilogic@7 158 this->addWidget(m_otherPane);
lbajardsilogic@7 159 this->addWidget(widgetAux);
lbajardsilogic@101 160 sizes.push_back(m_otherPane->width());
lbajardsilogic@101 161 sizes.push_back(widgetAux->width());
lbajardsilogic@98 162 this->setSizes(sizes);
lbajardsilogic@7 163 break;
lbajardsilogic@7 164 case ExpandWidget::Location_Right:
lbajardsilogic@7 165 default :
lbajardsilogic@7 166 lay = new QHBoxLayout();
lbajardsilogic@7 167 lay->setMargin(0);
lbajardsilogic@7 168 lay->setSpacing(0);
lbajardsilogic@7 169 lay->addWidget(m_centerPane);
lbajardsilogic@7 170 lay->addWidget(m_button);
lbajardsilogic@7 171 widgetAux->setLayout(lay);
lbajardsilogic@7 172 this->addWidget(widgetAux);
lbajardsilogic@7 173 this->addWidget(m_otherPane);
lbajardsilogic@101 174 sizes.push_back(widgetAux->width());
lbajardsilogic@101 175 sizes.push_back(m_otherPane->width());
lbajardsilogic@98 176 this->setSizes(sizes);
lbajardsilogic@7 177 break;
lbajardsilogic@7 178 }
lbajardsilogic@7 179 }
lbajardsilogic@7 180
lbajardsilogic@7 181
lbajardsilogic@205 182 void ExpandWidget::changePaneState(){
lbajardsilogic@7 183 if(&m_paneClosed!=0 ){
lbajardsilogic@7 184 m_otherPane->setVisible(m_paneClosed);
lbajardsilogic@7 185 }
lbajardsilogic@7 186 m_paneClosed = !m_paneClosed;
lbajardsilogic@7 187 refreshButtonIcone();
lbajardsilogic@205 188 emit paneStateChanged(!m_paneClosed);
lbajardsilogic@7 189 }
lbajardsilogic@7 190
lbajardsilogic@101 191 void ExpandWidget::setPercentage(int a, int b)
lbajardsilogic@101 192 {
lbajardsilogic@101 193 int percent = a + b;
lbajardsilogic@101 194
lbajardsilogic@101 195 if (percent == 0)
lbajardsilogic@101 196 return;
lbajardsilogic@7 197
lbajardsilogic@101 198 QList<int> newSizes;
lbajardsilogic@101 199 int totalSize = 0;
lbajardsilogic@101 200
lbajardsilogic@101 201 QList<int> sizes = this->sizes();
lbajardsilogic@101 202 QList<int>::iterator iter = sizes.begin();
lbajardsilogic@101 203
lbajardsilogic@101 204 QListIterator<int> it(this->sizes());
lbajardsilogic@101 205 while (it.hasNext())
lbajardsilogic@101 206 {
lbajardsilogic@101 207 totalSize += it.next();
lbajardsilogic@101 208 }
lbajardsilogic@101 209
lbajardsilogic@101 210 newSizes.push_back(totalSize*a/percent);
lbajardsilogic@101 211 newSizes.push_back(totalSize*b/percent);
lbajardsilogic@101 212 this->setSizes(newSizes);
lbajardsilogic@101 213 }
lbajardsilogic@101 214
lbajardsilogic@101 215