summaryrefslogtreecommitdiff
authorzecke <zecke>2003-09-04 12:51:49 (UTC)
committer zecke <zecke>2003-09-04 12:51:49 (UTC)
commitd11827ca5879b21488c189fb09f32ecf635644ae (patch) (unidiff)
tree55e050283d70b67d5546745bcece440245055a7e
parent2ec64be7f5250e851f44107552e89aff62922d44 (diff)
downloadopie-d11827ca5879b21488c189fb09f32ecf635644ae.zip
opie-d11827ca5879b21488c189fb09f32ecf635644ae.tar.gz
opie-d11827ca5879b21488c189fb09f32ecf635644ae.tar.bz2
Thanks to eilers for spotting this.
The second osplitter correctly adds it widgets to the tab but is visible as well so better hide it
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/big-screen/osplitter.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/libopie/big-screen/osplitter.cpp b/libopie/big-screen/osplitter.cpp
index 47f856d..b09bc94 100644
--- a/libopie/big-screen/osplitter.cpp
+++ b/libopie/big-screen/osplitter.cpp
@@ -1,581 +1,582 @@
1/* 1/*
2               =. This file is part of the OPIE Project 2               =. This file is part of the OPIE Project
3             .=l. Copyright (c) 2003 hOlgAr <zecke@handhelds.org> 3             .=l. Copyright (c) 2003 hOlgAr <zecke@handhelds.org>
4           .>+-= 4           .>+-=
5 _;:,     .>    :=|. This library is free software; you can 5 _;:,     .>    :=|. This library is free software; you can
6.> <`_,   >  .   <= redistribute it and/or modify it under 6.> <`_,   >  .   <= redistribute it and/or modify it under
7:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 7:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
8.="- .-=="i,     .._ License as published by the Free Software 8.="- .-=="i,     .._ License as published by the Free Software
9 - .   .-<_>     .<> Foundation; either version 2 of the License, 9 - .   .-<_>     .<> Foundation; either version 2 of the License,
10     ._= =}       : or (at your option) any later version. 10     ._= =}       : or (at your option) any later version.
11    .%`+i>       _;_. 11    .%`+i>       _;_.
12    .i_,=:_.      -<s. This library is distributed in the hope that 12    .i_,=:_.      -<s. This library is distributed in the hope that
13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
14    : ..    .:,     . . . without even the implied warranty of 14    : ..    .:,     . . . without even the implied warranty of
15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
17..}^=.=       =       ; Library General Public License for more 17..}^=.=       =       ; Library General Public License for more
18++=   -.     .`     .: details. 18++=   -.     .`     .: details.
19 :     =  ...= . :.=- 19 :     =  ...= . :.=-
20 -.   .:....=;==+<; You should have received a copy of the GNU 20 -.   .:....=;==+<; You should have received a copy of the GNU
21  -_. . .   )=.  = Library General Public License along with 21  -_. . .   )=.  = Library General Public License along with
22    --        :-=` this library; see the file COPYING.LIB. 22    --        :-=` this library; see the file COPYING.LIB.
23 If not, write to the Free Software Foundation, 23 If not, write to the Free Software Foundation,
24 Inc., 59 Temple Place - Suite 330, 24 Inc., 59 Temple Place - Suite 330,
25 Boston, MA 02111-1307, USA. 25 Boston, MA 02111-1307, USA.
26 26
27*/ 27*/
28 28
29#include <qvaluelist.h> 29#include <qvaluelist.h>
30#include <qvbox.h> 30#include <qvbox.h>
31 31
32#include <opie/otabwidget.h> 32#include <opie/otabwidget.h>
33 33
34#include "osplitter.h" 34#include "osplitter.h"
35 35
36 36
37/** 37/**
38 * 38 *
39 * This is the constructor of OSplitter 39 * This is the constructor of OSplitter
40 * You might want to call setSizeChange to tell 40 * You might want to call setSizeChange to tell
41 * OSplitter to change its layout when a specefic 41 * OSplitter to change its layout when a specefic
42 * mark was crossed. OSplitter sets a default value. 42 * mark was crossed. OSplitter sets a default value.
43 * 43 *
44 * You cann add widget with addWidget to the OSplitter. 44 * You cann add widget with addWidget to the OSplitter.
45 * OSplitter supports also grouping of Splitters where they 45 * OSplitter supports also grouping of Splitters where they
46 * can share one OTabBar in small screen mode. This can be used 46 * can share one OTabBar in small screen mode. This can be used
47 * for email clients like vies but see the example. 47 * for email clients like vies but see the example.
48 * 48 *
49 * @param orient The orientation wether to layout horizontal or vertical 49 * @param orient The orientation wether to layout horizontal or vertical
50 * @param parent The parent of this widget 50 * @param parent The parent of this widget
51 * @param name The name passed on to QObject 51 * @param name The name passed on to QObject
52 * @param fl Additional widgets flags passed to QWidget 52 * @param fl Additional widgets flags passed to QWidget
53 * 53 *
54 * @short single c'tor of the OSplitter 54 * @short single c'tor of the OSplitter
55 */ 55 */
56OSplitter::OSplitter( Orientation orient, QWidget* parent, const char* name, WFlags fl ) 56OSplitter::OSplitter( Orientation orient, QWidget* parent, const char* name, WFlags fl )
57 : QFrame( parent, name, fl ) 57 : QFrame( parent, name, fl )
58{ 58{
59 m_orient = orient; 59 m_orient = orient;
60 m_hbox = 0; 60 m_hbox = 0;
61 m_size_policy = 330; 61 m_size_policy = 330;
62 setFontPropagation( AllChildren ); 62 setFontPropagation( AllChildren );
63 setPalettePropagation( AllChildren ); 63 setPalettePropagation( AllChildren );
64 64
65 /* start by default with the tab widget */ 65 /* start by default with the tab widget */
66 m_tabWidget = 0; 66 m_tabWidget = 0;
67 m_parentTab = 0; 67 m_parentTab = 0;
68 changeTab(); 68 changeTab();
69 69
70} 70}
71 71
72 72
73/** 73/**
74 * Destructor destructs this object and cleans up. All child 74 * Destructor destructs this object and cleans up. All child
75 * widgets will be deleted 75 * widgets will be deleted
76 * @see addWidget 76 * @see addWidget
77 */ 77 */
78OSplitter::~OSplitter() { 78OSplitter::~OSplitter() {
79 qWarning("Deleted Splitter"); 79 qWarning("Deleted Splitter");
80 m_splitter.setAutoDelete( true ); 80 m_splitter.setAutoDelete( true );
81 m_splitter.clear(); 81 m_splitter.clear();
82 82
83 delete m_hbox; 83 delete m_hbox;
84 delete m_tabWidget; 84 delete m_tabWidget;
85} 85}
86 86
87 87
88/** 88/**
89 * Sets the label for the Splitter. This label will be used 89 * Sets the label for the Splitter. This label will be used
90 * if a parent splitter is arranged as TabWidget but 90 * if a parent splitter is arranged as TabWidget but
91 * this splitter is in fullscreen mode. Then a tab with OSplitter::label() 91 * this splitter is in fullscreen mode. Then a tab with OSplitter::label()
92 * and iconName() gets added. 92 * and iconName() gets added.
93 * 93 *
94 * @param name The name of the Label 94 * @param name The name of the Label
95 */ 95 */
96void OSplitter::setLabel( const QString& name ) { 96void OSplitter::setLabel( const QString& name ) {
97 m_name = name; 97 m_name = name;
98} 98}
99 99
100/** 100/**
101 * @see setLabel but this is for the icon retrieved by Resource 101 * @see setLabel but this is for the icon retrieved by Resource
102 * 102 *
103 * @param name The name of the icon in example ( "zoom" ) 103 * @param name The name of the icon in example ( "zoom" )
104 */ 104 */
105void OSplitter::setIconName( const QString& name ) { 105void OSplitter::setIconName( const QString& name ) {
106 m_icon = name; 106 m_icon = name;
107} 107}
108 108
109 109
110/** 110/**
111 * returns the iconName 111 * returns the iconName
112 * @see setIconName 112 * @see setIconName
113 */ 113 */
114QString OSplitter::iconName()const { 114QString OSplitter::iconName()const {
115 return m_icon; 115 return m_icon;
116} 116}
117 117
118/** 118/**
119 * returns the label set with setLabel 119 * returns the label set with setLabel
120 * @see setLabel 120 * @see setLabel
121 */ 121 */
122QString OSplitter::label()const { 122QString OSplitter::label()const {
123 return m_name; 123 return m_name;
124} 124}
125 125
126/** 126/**
127 * This function sets the size change policy of the splitter. 127 * This function sets the size change policy of the splitter.
128 * If this size marked is crossed the splitter will relayout. 128 * If this size marked is crossed the splitter will relayout.
129 * Note: that depending on the set Orientation it'll either look 129 * Note: that depending on the set Orientation it'll either look
130 * at the width or height. 130 * at the width or height.
131 * Note: If you want to from side to side view to tabbed view you need 131 * Note: If you want to from side to side view to tabbed view you need
132 * to make sure that the size you supply is not smaller than the minimum 132 * to make sure that the size you supply is not smaller than the minimum
133 * size of your added widgets. Note that if you use widgets like QComboBoxes 133 * size of your added widgets. Note that if you use widgets like QComboBoxes
134 * you need to teach them to accept smaller sizes as well @see QWidget::setSizePolicy 134 * you need to teach them to accept smaller sizes as well @see QWidget::setSizePolicy
135 * 135 *
136 * @param width_height The mark that will be watched. Interpreted depending on the Orientation of the Splitter. 136 * @param width_height The mark that will be watched. Interpreted depending on the Orientation of the Splitter.
137 * @return void 137 * @return void
138 */ 138 */
139void OSplitter::setSizeChange( int width_height ) { 139void OSplitter::setSizeChange( int width_height ) {
140 m_size_policy = width_height; 140 m_size_policy = width_height;
141 QSize sz(width(), height() ); 141 QSize sz(width(), height() );
142 QResizeEvent ev(sz, sz ); 142 QResizeEvent ev(sz, sz );
143 resizeEvent(&ev); 143 resizeEvent(&ev);
144} 144}
145 145
146/** 146/**
147 * This functions allows to add another OSplitter and to share 147 * This functions allows to add another OSplitter and to share
148 * the OTabBar in small screen mode. The ownerships gets transfered. 148 * the OTabBar in small screen mode. The ownerships gets transfered.
149 * OSplitters are always added after normal widget items 149 * OSplitters are always added after normal widget items
150 */ 150 */
151void OSplitter::addWidget( OSplitter* split ) { 151void OSplitter::addWidget( OSplitter* split ) {
152 m_splitter.append( split ); 152 m_splitter.append( split );
153 153
154 /* 154 /*
155 * set tab widget 155 * set tab widget
156 */ 156 */
157 if (m_tabWidget ) 157 if (m_tabWidget )
158 setTabWidget( m_parentTab ); 158 setTabWidget( m_parentTab );
159 else{ 159 else{
160 Opie::OSplitterContainer con; 160 Opie::OSplitterContainer con;
161 con.widget =split; 161 con.widget =split;
162 addToBox( con ); 162 addToBox( con );
163 } 163 }
164} 164}
165 165
166/* 166/*
167 * If in a tab it should be removed 167 * If in a tab it should be removed
168 * and if in a hbox the reparent kills it too 168 * and if in a hbox the reparent kills it too
169 */ 169 */
170/** 170/**
171 * This removes the splitter again. You currently need to call this 171 * This removes the splitter again. You currently need to call this
172 * before you delete or otherwise you can get mem corruption 172 * before you delete or otherwise you can get mem corruption
173 * or other weird behaviour. 173 * or other weird behaviour.
174 * Owner ship gets transfered back to you it's current parent 174 * Owner ship gets transfered back to you it's current parent
175 * is 0 175 * is 0
176 */ 176 */
177void OSplitter::removeWidget( OSplitter* split) { 177void OSplitter::removeWidget( OSplitter* split) {
178 split->setTabWidget( 0 ); 178 split->setTabWidget( 0 );
179 split->reparent( 0, 0, QPoint(0, 0) ); 179 split->reparent( 0, 0, QPoint(0, 0) );
180} 180}
181 181
182/** 182/**
183 * Adds a widget to the Splitter. The widgets gets inserted 183 * Adds a widget to the Splitter. The widgets gets inserted
184 * at the end of either the Box or TabWidget. 184 * at the end of either the Box or TabWidget.
185 * Ownership gets transfered and the widgets gets reparented. 185 * Ownership gets transfered and the widgets gets reparented.
186 * Note: icon and label is only available on small screensizes 186 * Note: icon and label is only available on small screensizes
187 * if size is smaller than the mark 187 * if size is smaller than the mark
188 * Warning: No null checking of the widget is done. Only on debug 188 * Warning: No null checking of the widget is done. Only on debug
189 * a message will be outputtet 189 * a message will be outputtet
190 * 190 *
191 * @param wid The widget which will be added 191 * @param wid The widget which will be added
192 * @param icon The icon of the possible Tab 192 * @param icon The icon of the possible Tab
193 * @param label The label of the possible Tab 193 * @param label The label of the possible Tab
194 */ 194 */
195void OSplitter::addWidget( QWidget* wid, const QString& icon, const QString& label ) { 195void OSplitter::addWidget( QWidget* wid, const QString& icon, const QString& label ) {
196#ifdef DEBUG 196#ifdef DEBUG
197 if (!wid ) { 197 if (!wid ) {
198 qWarning("Widget is not valid!"); 198 qWarning("Widget is not valid!");
199 return; 199 return;
200 } 200 }
201#endif 201#endif
202 Opie::OSplitterContainer cont; 202 Opie::OSplitterContainer cont;
203 cont.widget = wid; 203 cont.widget = wid;
204 cont.icon =icon; 204 cont.icon =icon;
205 cont.name = label; 205 cont.name = label;
206 206
207 m_container.append( cont ); 207 m_container.append( cont );
208 208
209 /* 209 /*
210 * 210 *
211 */ 211 */
212 if (!m_splitter.isEmpty() && (m_tabWidget || m_parentTab ) ) 212 if (!m_splitter.isEmpty() && (m_tabWidget || m_parentTab ) )
213 setTabWidget( m_parentTab ); 213 setTabWidget( m_parentTab );
214 else { 214 else {
215 if (m_hbox ) 215 if (m_hbox )
216 addToBox( cont ); 216 addToBox( cont );
217 else 217 else
218 addToTab( cont ); 218 addToTab( cont );
219 } 219 }
220} 220}
221 221
222 222
223/** 223/**
224 * Removes the widget from the tab widgets if necessary. 224 * Removes the widget from the tab widgets if necessary.
225 * OSplitter drops ownership of this widget and the widget 225 * OSplitter drops ownership of this widget and the widget
226 * will be reparented i tto 0. 226 * will be reparented i tto 0.
227 * The widget will not be deleted. 227 * The widget will not be deleted.
228 * 228 *
229 * @param w The widget to be removed 229 * @param w The widget to be removed
230 */ 230 */
231void OSplitter::removeWidget( QWidget* w) { 231void OSplitter::removeWidget( QWidget* w) {
232 ContainerList::Iterator it; 232 ContainerList::Iterator it;
233 for ( it = m_container.begin(); it != m_container.end(); ++it ) 233 for ( it = m_container.begin(); it != m_container.end(); ++it )
234 if ( (*it).widget == w ) 234 if ( (*it).widget == w )
235 break; 235 break;
236 236
237 if (it == m_container.end() ) 237 if (it == m_container.end() )
238 return; 238 return;
239 239
240 240
241 /* only tab needs to be removed.. box recognizes it */ 241 /* only tab needs to be removed.. box recognizes it */
242 if ( !m_hbox ) 242 if ( !m_hbox )
243 removeFromTab( w ); 243 removeFromTab( w );
244 244
245 245
246 /* Find reparent it and remove it from our list */ 246 /* Find reparent it and remove it from our list */
247 247
248 w->reparent( 0, 0, QPoint(0, 0)); 248 w->reparent( 0, 0, QPoint(0, 0));
249 it = m_container.remove( it ); 249 it = m_container.remove( it );
250 250
251} 251}
252 252
253 253
254/** 254/**
255 * This method will give focus to the widget. If in a tabwidget 255 * This method will give focus to the widget. If in a tabwidget
256 * the tabbar will be changed 256 * the tabbar will be changed
257 * 257 *
258 * @param w The widget which will be set the current one 258 * @param w The widget which will be set the current one
259 */ 259 */
260void OSplitter::setCurrentWidget( QWidget* w) { 260void OSplitter::setCurrentWidget( QWidget* w) {
261 if (m_tabWidget ) 261 if (m_tabWidget )
262 m_tabWidget->setCurrentTab( w ); 262 m_tabWidget->setCurrentTab( w );
263// else 263// else
264 // m_hbox->setFocus( w ); 264 // m_hbox->setFocus( w );
265 265
266} 266}
267 267
268/** 268/**
269 * This is an overloaded member function and only differs in the 269 * This is an overloaded member function and only differs in the
270 * argument it takes. 270 * argument it takes.
271 * Searches list of widgets for label. It'll pick the first label it finds 271 * Searches list of widgets for label. It'll pick the first label it finds
272 * 272 *
273 * @param label Label to look for. First match will be taken 273 * @param label Label to look for. First match will be taken
274 */ 274 */
275void OSplitter::setCurrentWidget( const QString& label ) { 275void OSplitter::setCurrentWidget( const QString& label ) {
276 ContainerList::Iterator it; 276 ContainerList::Iterator it;
277 for (it = m_container.begin(); it != m_container.end(); ++it ) { 277 for (it = m_container.begin(); it != m_container.end(); ++it ) {
278 if ( (*it).name == label ) { 278 if ( (*it).name == label ) {
279 setCurrentWidget( (*it).widget ); 279 setCurrentWidget( (*it).widget );
280 break; 280 break;
281 } 281 }
282 } 282 }
283} 283}
284 284
285/** 285/**
286 * This will only work when the TabWidget is active 286 * This will only work when the TabWidget is active
287 * If everything is visible this signal is kindly ignored 287 * If everything is visible this signal is kindly ignored
288 * @see OTabWidget::setCurrentTab(int) 288 * @see OTabWidget::setCurrentTab(int)
289 * 289 *
290 * @param tab The tab to make current 290 * @param tab The tab to make current
291 */ 291 */
292void OSplitter::setCurrentWidget( int tab ) { 292void OSplitter::setCurrentWidget( int tab ) {
293 if (m_tabWidget ) 293 if (m_tabWidget )
294 m_tabWidget->setCurrentTab( tab ); 294 m_tabWidget->setCurrentTab( tab );
295} 295}
296 296
297/** 297/**
298 * return the currently activated widget if in tab widget mode 298 * return the currently activated widget if in tab widget mode
299 * or null because all widgets are visible 299 * or null because all widgets are visible
300 */ 300 */
301QWidget* OSplitter::currentWidget() const{ 301QWidget* OSplitter::currentWidget() const{
302 if (m_tabWidget) 302 if (m_tabWidget)
303 return m_tabWidget->currentWidget(); 303 return m_tabWidget->currentWidget();
304 else if (m_parentTab ) 304 else if (m_parentTab )
305 return m_parentTab->currentWidget(); 305 return m_parentTab->currentWidget();
306 306
307 return 0l; 307 return 0l;
308} 308}
309 309
310 310
311/** 311/**
312 * @reimplented for internal reasons 312 * @reimplented for internal reasons
313 * returns the sizeHint of one of its sub widgets 313 * returns the sizeHint of one of its sub widgets
314 */ 314 */
315QSize OSplitter::sizeHint()const { 315QSize OSplitter::sizeHint()const {
316 if (m_parentTab ) 316 if (m_parentTab )
317 return QFrame::sizeHint(); 317 return QFrame::sizeHint();
318 318
319 if (m_hbox ) 319 if (m_hbox )
320 return m_hbox->sizeHint(); 320 return m_hbox->sizeHint();
321 else 321 else
322 return m_tabWidget->sizeHint(); 322 return m_tabWidget->sizeHint();
323} 323}
324 324
325QSize OSplitter::minimumSizeHint()const { 325QSize OSplitter::minimumSizeHint()const {
326 if (m_parentTab ) 326 if (m_parentTab )
327 return QFrame::minimumSizeHint(); 327 return QFrame::minimumSizeHint();
328 if (m_hbox) 328 if (m_hbox)
329 return m_hbox->sizeHint(); 329 return m_hbox->sizeHint();
330 else 330 else
331 return m_tabWidget->sizeHint(); 331 return m_tabWidget->sizeHint();
332} 332}
333 333
334 334
335/** 335/**
336 * @reimplemented for internal reasons 336 * @reimplemented for internal reasons
337 */ 337 */
338void OSplitter::resizeEvent( QResizeEvent* res ) { 338void OSplitter::resizeEvent( QResizeEvent* res ) {
339 QFrame::resizeEvent( res ); 339 QFrame::resizeEvent( res );
340 /* 340 /*
341 * 341 *
342 */ 342 */
343// qWarning("Old size was width = %d height = %d", res->oldSize().width(), res->oldSize().height() ); 343// qWarning("Old size was width = %d height = %d", res->oldSize().width(), res->oldSize().height() );
344 bool mode = true; 344 bool mode = true;
345 qWarning("New size is width = %d height = %d %s", res->size().width(), res->size().height(), name() ); 345 qWarning("New size is width = %d height = %d %s", res->size().width(), res->size().height(), name() );
346 if ( res->size().width() > m_size_policy && 346 if ( res->size().width() > m_size_policy &&
347 m_orient == Horizontal ) { 347 m_orient == Horizontal ) {
348 changeHBox(); 348 changeHBox();
349 mode = false; 349 mode = false;
350 }else if ( (res->size().width() <= m_size_policy && 350 }else if ( (res->size().width() <= m_size_policy &&
351 m_orient == Horizontal ) || 351 m_orient == Horizontal ) ||
352 (res->size().height() <= m_size_policy && 352 (res->size().height() <= m_size_policy &&
353 m_orient == Vertical ) ) { 353 m_orient == Vertical ) ) {
354 changeTab(); 354 changeTab();
355 }else if ( res->size().height() > m_size_policy && 355 }else if ( res->size().height() > m_size_policy &&
356 m_orient == Vertical ) { 356 m_orient == Vertical ) {
357 qWarning("Changng to vbox %s", name() ); 357 qWarning("Changng to vbox %s", name() );
358 changeVBox(); 358 changeVBox();
359 mode = false; 359 mode = false;
360 } 360 }
361 361
362 emit sizeChanged(mode, m_orient ); 362 emit sizeChanged(mode, m_orient );
363} 363}
364 364
365/* 365/*
366 * Adds a container to a tab either the parent tab 366 * Adds a container to a tab either the parent tab
367 * or our own 367 * or our own
368 */ 368 */
369void OSplitter::addToTab( const Opie::OSplitterContainer& con ) { 369void OSplitter::addToTab( const Opie::OSplitterContainer& con ) {
370 QWidget *wid = con.widget; 370 QWidget *wid = con.widget;
371// not needed widgetstack will reparent as well wid.reparent(m_tabWidget, wid->getWFlags(), QPoint(0, 0) ); 371// not needed widgetstack will reparent as well wid.reparent(m_tabWidget, wid->getWFlags(), QPoint(0, 0) );
372 if (m_parentTab ) 372 if (m_parentTab )
373 m_parentTab->addTab( wid, con.icon, con.name ); 373 m_parentTab->addTab( wid, con.icon, con.name );
374 else 374 else
375 m_tabWidget->addTab( wid, con.icon, con.name ); 375 m_tabWidget->addTab( wid, con.icon, con.name );
376} 376}
377 377
378 378
379/* 379/*
380 * adds a container to the box 380 * adds a container to the box
381 */ 381 */
382void OSplitter::addToBox( const Opie::OSplitterContainer& con ) { 382void OSplitter::addToBox( const Opie::OSplitterContainer& con ) {
383 QWidget* wid = con.widget; 383 QWidget* wid = con.widget;
384 wid->reparent(m_hbox, 0, QPoint(0, 0) ); 384 wid->reparent(m_hbox, 0, QPoint(0, 0) );
385} 385}
386 386
387 387
388/* 388/*
389 * Removes a widget from the tab 389 * Removes a widget from the tab
390 */ 390 */
391void OSplitter::removeFromTab( QWidget* wid ) { 391void OSplitter::removeFromTab( QWidget* wid ) {
392 if (m_parentTab ) 392 if (m_parentTab )
393 m_parentTab->removePage( wid ); 393 m_parentTab->removePage( wid );
394 else 394 else
395 m_tabWidget->removePage( wid ); 395 m_tabWidget->removePage( wid );
396} 396}
397 397
398/* 398/*
399 * switches over to a OTabWidget layout 399 * switches over to a OTabWidget layout
400 * it is recursive 400 * it is recursive
401 */ 401 */
402void OSplitter::changeTab() { 402void OSplitter::changeTab() {
403 /* if we're the owner of the tab widget */ 403 /* if we're the owner of the tab widget */
404 if (m_tabWidget ) { 404 if (m_tabWidget ) {
405 raise();
406 show();
405 m_tabWidget->setGeometry( frameRect() ); 407 m_tabWidget->setGeometry( frameRect() );
406 return; 408 return;
407 } 409 }
408 410
409 qWarning(" New Tab Widget %s", name() ); 411 qWarning(" New Tab Widget %s", name() );
410 /* 412 /*
411 * and add all widgets this will reparent them 413 * and add all widgets this will reparent them
412 * delete m_hbox set it to 0 414 * delete m_hbox set it to 0
413 * 415 *
414 */ 416 */
415 OTabWidget *tab; 417 OTabWidget *tab;
416 if ( m_parentTab ) { 418 if ( m_parentTab ) {
419 hide();
417 tab = m_parentTab; 420 tab = m_parentTab;
418 /* expensive but needed cause we're called from setTabWidget and resizeEvent*/ 421 /* expensive but needed cause we're called from setTabWidget and resizeEvent*/
419 if (!m_container.isEmpty() ) { 422 if (!m_container.isEmpty() ) {
420 ContainerList::Iterator it = m_container.begin(); 423 ContainerList::Iterator it = m_container.begin();
421 for (; it != m_container.end(); ++it ) 424 for (; it != m_container.end(); ++it )
422 m_parentTab->removePage( (*it).widget ); 425 m_parentTab->removePage( (*it).widget );
423 } 426 }
424 }else 427 }else
425 tab = m_tabWidget = new OTabWidget( this ); 428 tab = m_tabWidget = new OTabWidget( this );
426 429
427 connect(tab, SIGNAL(currentChanged(QWidget*) ), 430 connect(tab, SIGNAL(currentChanged(QWidget*) ),
428 this, SIGNAL(currentChanged(QWidget*) ) ); 431 this, SIGNAL(currentChanged(QWidget*) ) );
429 432
430 for ( ContainerList::Iterator it = m_container.begin(); it != m_container.end(); ++it ) { 433 for ( ContainerList::Iterator it = m_container.begin(); it != m_container.end(); ++it ) {
431 qWarning("Widget is %s", (*it).name.latin1() ); 434 qWarning("Widget is %s", (*it).name.latin1() );
432 addToTab( (*it) ); 435 addToTab( (*it) );
433 } 436 }
434 437
435 for ( OSplitter* split = m_splitter.first(); split; split = m_splitter.next() ) { 438 for ( OSplitter* split = m_splitter.first(); split; split = m_splitter.next() ) {
436 split->reparent(this, 0, QPoint(0, 0) ); 439 split->reparent(this, 0, QPoint(0, 0) );
437 split->setTabWidget( tab ); 440 split->setTabWidget( tab );
438 } 441 }
439 442
440 443
441 delete m_hbox; 444 delete m_hbox;
442 m_hbox = 0; 445 m_hbox = 0;
443 if (!m_tabWidget ) 446 if (!m_tabWidget )
444 return; 447 return;
445 448
446 m_tabWidget->setGeometry( frameRect() ); 449 m_tabWidget->setGeometry( frameRect() );
447 m_tabWidget->show(); 450 m_tabWidget->show();
448 451
449} 452}
450 453
451/* 454/*
452 * changes over to a box 455 * changes over to a box
453 * this is recursive as well 456 * this is recursive as well
454 */ 457 */
455void OSplitter::changeHBox() { 458void OSplitter::changeHBox() {
456 if (m_hbox ) { 459 if (m_hbox ) {
457 m_hbox->setGeometry( frameRect() ); 460 m_hbox->setGeometry( frameRect() );
458 return; 461 return;
459 } 462 }
460 463
461 qWarning("new HBox %s", name() ); 464 qWarning("new HBox %s", name() );
462 m_hbox = new QHBox( this ); 465 m_hbox = new QHBox( this );
463 commonChangeBox(); 466 commonChangeBox();
464} 467}
465 468
466void OSplitter::changeVBox() { 469void OSplitter::changeVBox() {
467 if (m_hbox ) { 470 if (m_hbox ) {
468 m_hbox->setGeometry( frameRect() ); 471 m_hbox->setGeometry( frameRect() );
469 return; 472 return;
470 } 473 }
471 474
472 qWarning("New VBOX %s", name() ); 475 qWarning("New VBOX %s", name() );
473 m_hbox = new QVBox( this ); 476 m_hbox = new QVBox( this );
474 477
475 commonChangeBox(); 478 commonChangeBox();
476 479
477} 480}
478 481
479/* 482/*
480 * common box code 483 * common box code
481 * first remove and add children 484 * first remove and add children
482 * the other splitters 485 * the other splitters
483 * it is recursive as well due the call to setTabWidget 486 * it is recursive as well due the call to setTabWidget
484 */ 487 */
485void OSplitter::commonChangeBox() { 488void OSplitter::commonChangeBox() {
486 qWarning(" Name of Splitters is %s", name() ); 489 qWarning(" Name of Splitters is %s", name() );
487 490
488 for (ContainerList::Iterator it = m_container.begin(); it != m_container.end(); ++it ) { 491 for (ContainerList::Iterator it = m_container.begin(); it != m_container.end(); ++it ) {
489 /* only if parent tab.. m_tabWidgets gets deleted and would do that as well */ 492 /* only if parent tab.. m_tabWidgets gets deleted and would do that as well */
490 if (m_parentTab ) 493 if (m_parentTab )
491 removeFromTab( (*it).widget ); 494 removeFromTab( (*it).widget );
492 qWarning("Adding to box %s", (*it).name.latin1() ); 495 qWarning("Adding to box %s", (*it).name.latin1() );
493 addToBox( (*it) ); 496 addToBox( (*it) );
494 } 497 }
495 for ( OSplitter* split = m_splitter.first(); split; split = m_splitter.next() ) { 498 for ( OSplitter* split = m_splitter.first(); split; split = m_splitter.next() ) {
496 /* tell them the world had changed */ 499 /* tell them the world had changed */
497 split->setTabWidget( 0 ); 500 split->setTabWidget( 0 );
498 Opie::OSplitterContainer con; 501 Opie::OSplitterContainer con;
499 con.widget = split; 502 con.widget = split;
500// con.widget = split->m_tabWidget ? static_cast<QWidget*>(split->m_tabWidget) 503// con.widget = split->m_tabWidget ? static_cast<QWidget*>(split->m_tabWidget)
501// : static_cast<QWidget*>(split->m_hbox); 504// : static_cast<QWidget*>(split->m_hbox);
502 addToBox( con ); 505 addToBox( con );
503 } 506 }
504 507
505 508
506 509
507 if (m_parentTab ) 510 if (m_parentTab )
508 m_parentTab->addTab(m_hbox, iconName(), label() ); 511 m_parentTab->addTab(m_hbox, iconName(), label() );
509 else { 512 else {
510 qWarning(" setting Box geometry for %s", name() ); 513 qWarning(" setting Box geometry for %s", name() );
511 m_hbox->setGeometry( frameRect() ); 514 m_hbox->setGeometry( frameRect() );
512 m_hbox->show(); 515 m_hbox->show();
513 delete m_tabWidget; 516 delete m_tabWidget;
514 m_tabWidget = 0; 517 m_tabWidget = 0;
515 } 518 }
516} 519}
517 520
518/* 521/*
519 * sets the tabwidget, removes tabs, and relayouts the widget 522 * sets the tabwidget, removes tabs, and relayouts the widget
520 */ 523 */
521void OSplitter::setTabWidget( OTabWidget* wid) { 524void OSplitter::setTabWidget( OTabWidget* wid) {
522 /* clean up cause m_parentTab will not be available for us */ 525 /* clean up cause m_parentTab will not be available for us */
523 if ( m_parentTab ) { 526 if ( m_parentTab ) {
524 if (m_hbox ) 527 if (m_hbox )
525 m_parentTab->removePage( m_hbox ); 528 m_parentTab->removePage( m_hbox );
526 else if (!m_container.isEmpty() ){ 529 else if (!m_container.isEmpty() ){
527 ContainerList::Iterator it = m_container.begin(); 530 ContainerList::Iterator it = m_container.begin();
528 for ( ; it != m_container.end(); ++it ) 531 for ( ; it != m_container.end(); ++it )
529 m_parentTab->removePage( (*it).widget ); 532 m_parentTab->removePage( (*it).widget );
530 } 533 }
531 } 534 }
532 /* the parent Splitter changed so either make us indepent or dep */ 535 /* the parent Splitter changed so either make us indepent or dep */
533 536
534 m_parentTab = wid; 537 m_parentTab = wid;
535 538
536 QWidget *tab = m_tabWidget; 539 QWidget *tab = m_tabWidget;
537 QWidget *box = m_hbox; 540 QWidget *box = m_hbox;
538 m_hbox = 0; m_tabWidget = 0; 541 m_hbox = 0; m_tabWidget = 0;
539 542
540 if ( layoutMode() ) 543 if ( layoutMode() )
541 changeTab(); 544 changeTab();
542 else if (m_orient == Horizontal ) 545 else if (m_orient == Horizontal )
543 changeHBox(); 546 changeHBox();
544 else 547 else
545 changeVBox(); 548 changeVBox();
546 549
547 /* our own crap is added and children from change* */ 550 /* our own crap is added and children from change* */
548 if (m_parentTab ) { 551 delete tab;
549 delete tab; 552 delete box;
550 delete box;
551 }
552} 553}
553 554
554 555
555#if 0 556#if 0
556void OSplitter::reparentAll() { 557void OSplitter::reparentAll() {
557 if (m_container.isEmpty() ) 558 if (m_container.isEmpty() )
558 return; 559 return;
559 560
560 ContainerList::Iterator it = m_container.begin(); 561 ContainerList::Iterator it = m_container.begin();
561 for ( ; it != m_container.end(); ++it ) 562 for ( ; it != m_container.end(); ++it )
562 (*it).wid->reparent(0, 0, QPoint(0, 0) ); 563 (*it).wid->reparent(0, 0, QPoint(0, 0) );
563 564
564 565
565} 566}
566#endif 567#endif
567 568
568/** 569/**
569 * @internal 570 * @internal
570 */ 571 */
571bool OSplitter::layoutMode()const { 572bool OSplitter::layoutMode()const {
572 if ( size().width() > m_size_policy && 573 if ( size().width() > m_size_policy &&
573 m_orient == Horizontal ) { 574 m_orient == Horizontal ) {
574 return false; 575 return false;
575 }else if ( size().height() > m_size_policy && 576 }else if ( size().height() > m_size_policy &&
576 m_orient == Vertical ) { 577 m_orient == Vertical ) {
577 return false; 578 return false;
578 } 579 }
579 580
580 return true; 581 return true;
581} 582}