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
|