summaryrefslogtreecommitdiff
path: root/libopie
authorzecke <zecke>2003-09-04 12:51:49 (UTC)
committer zecke <zecke>2003-09-04 12:51:49 (UTC)
commitd11827ca5879b21488c189fb09f32ecf635644ae (patch) (side-by-side diff)
tree55e050283d70b67d5546745bcece440245055a7e /libopie
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 (limited to 'libopie') (more/less context) (show whitespace changes)
-rw-r--r--libopie/big-screen/osplitter.cpp5
1 files changed, 3 insertions, 2 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
@@ -213,369 +213,370 @@ void OSplitter::addWidget( QWidget* wid, const QString& icon, const QString& lab
setTabWidget( m_parentTab );
else {
if (m_hbox )
addToBox( cont );
else
addToTab( cont );
}
}
/**
* Removes the widget from the tab widgets if necessary.
* OSplitter drops ownership of this widget and the widget
* will be reparented i tto 0.
* The widget will not be deleted.
*
* @param w The widget to be removed
*/
void OSplitter::removeWidget( QWidget* w) {
ContainerList::Iterator it;
for ( it = m_container.begin(); it != m_container.end(); ++it )
if ( (*it).widget == w )
break;
if (it == m_container.end() )
return;
/* only tab needs to be removed.. box recognizes it */
if ( !m_hbox )
removeFromTab( w );
/* Find reparent it and remove it from our list */
w->reparent( 0, 0, QPoint(0, 0));
it = m_container.remove( it );
}
/**
* This method will give focus to the widget. If in a tabwidget
* the tabbar will be changed
*
* @param w The widget which will be set the current one
*/
void OSplitter::setCurrentWidget( QWidget* w) {
if (m_tabWidget )
m_tabWidget->setCurrentTab( w );
// else
// m_hbox->setFocus( w );
}
/**
* This is an overloaded member function and only differs in the
* argument it takes.
* Searches list of widgets for label. It'll pick the first label it finds
*
* @param label Label to look for. First match will be taken
*/
void OSplitter::setCurrentWidget( const QString& label ) {
ContainerList::Iterator it;
for (it = m_container.begin(); it != m_container.end(); ++it ) {
if ( (*it).name == label ) {
setCurrentWidget( (*it).widget );
break;
}
}
}
/**
* This will only work when the TabWidget is active
* If everything is visible this signal is kindly ignored
* @see OTabWidget::setCurrentTab(int)
*
* @param tab The tab to make current
*/
void OSplitter::setCurrentWidget( int tab ) {
if (m_tabWidget )
m_tabWidget->setCurrentTab( tab );
}
/**
* return the currently activated widget if in tab widget mode
* or null because all widgets are visible
*/
QWidget* OSplitter::currentWidget() const{
if (m_tabWidget)
return m_tabWidget->currentWidget();
else if (m_parentTab )
return m_parentTab->currentWidget();
return 0l;
}
/**
* @reimplented for internal reasons
* returns the sizeHint of one of its sub widgets
*/
QSize OSplitter::sizeHint()const {
if (m_parentTab )
return QFrame::sizeHint();
if (m_hbox )
return m_hbox->sizeHint();
else
return m_tabWidget->sizeHint();
}
QSize OSplitter::minimumSizeHint()const {
if (m_parentTab )
return QFrame::minimumSizeHint();
if (m_hbox)
return m_hbox->sizeHint();
else
return m_tabWidget->sizeHint();
}
/**
* @reimplemented for internal reasons
*/
void OSplitter::resizeEvent( QResizeEvent* res ) {
QFrame::resizeEvent( res );
/*
*
*/
// qWarning("Old size was width = %d height = %d", res->oldSize().width(), res->oldSize().height() );
bool mode = true;
qWarning("New size is width = %d height = %d %s", res->size().width(), res->size().height(), name() );
if ( res->size().width() > m_size_policy &&
m_orient == Horizontal ) {
changeHBox();
mode = false;
}else if ( (res->size().width() <= m_size_policy &&
m_orient == Horizontal ) ||
(res->size().height() <= m_size_policy &&
m_orient == Vertical ) ) {
changeTab();
}else if ( res->size().height() > m_size_policy &&
m_orient == Vertical ) {
qWarning("Changng to vbox %s", name() );
changeVBox();
mode = false;
}
emit sizeChanged(mode, m_orient );
}
/*
* Adds a container to a tab either the parent tab
* or our own
*/
void OSplitter::addToTab( const Opie::OSplitterContainer& con ) {
QWidget *wid = con.widget;
// not needed widgetstack will reparent as well wid.reparent(m_tabWidget, wid->getWFlags(), QPoint(0, 0) );
if (m_parentTab )
m_parentTab->addTab( wid, con.icon, con.name );
else
m_tabWidget->addTab( wid, con.icon, con.name );
}
/*
* adds a container to the box
*/
void OSplitter::addToBox( const Opie::OSplitterContainer& con ) {
QWidget* wid = con.widget;
wid->reparent(m_hbox, 0, QPoint(0, 0) );
}
/*
* Removes a widget from the tab
*/
void OSplitter::removeFromTab( QWidget* wid ) {
if (m_parentTab )
m_parentTab->removePage( wid );
else
m_tabWidget->removePage( wid );
}
/*
* switches over to a OTabWidget layout
* it is recursive
*/
void OSplitter::changeTab() {
/* if we're the owner of the tab widget */
if (m_tabWidget ) {
+ raise();
+ show();
m_tabWidget->setGeometry( frameRect() );
return;
}
qWarning(" New Tab Widget %s", name() );
/*
* and add all widgets this will reparent them
* delete m_hbox set it to 0
*
*/
OTabWidget *tab;
if ( m_parentTab ) {
+ hide();
tab = m_parentTab;
/* expensive but needed cause we're called from setTabWidget and resizeEvent*/
if (!m_container.isEmpty() ) {
ContainerList::Iterator it = m_container.begin();
for (; it != m_container.end(); ++it )
m_parentTab->removePage( (*it).widget );
}
}else
tab = m_tabWidget = new OTabWidget( this );
connect(tab, SIGNAL(currentChanged(QWidget*) ),
this, SIGNAL(currentChanged(QWidget*) ) );
for ( ContainerList::Iterator it = m_container.begin(); it != m_container.end(); ++it ) {
qWarning("Widget is %s", (*it).name.latin1() );
addToTab( (*it) );
}
for ( OSplitter* split = m_splitter.first(); split; split = m_splitter.next() ) {
split->reparent(this, 0, QPoint(0, 0) );
split->setTabWidget( tab );
}
delete m_hbox;
m_hbox = 0;
if (!m_tabWidget )
return;
m_tabWidget->setGeometry( frameRect() );
m_tabWidget->show();
}
/*
* changes over to a box
* this is recursive as well
*/
void OSplitter::changeHBox() {
if (m_hbox ) {
m_hbox->setGeometry( frameRect() );
return;
}
qWarning("new HBox %s", name() );
m_hbox = new QHBox( this );
commonChangeBox();
}
void OSplitter::changeVBox() {
if (m_hbox ) {
m_hbox->setGeometry( frameRect() );
return;
}
qWarning("New VBOX %s", name() );
m_hbox = new QVBox( this );
commonChangeBox();
}
/*
* common box code
* first remove and add children
* the other splitters
* it is recursive as well due the call to setTabWidget
*/
void OSplitter::commonChangeBox() {
qWarning(" Name of Splitters is %s", name() );
for (ContainerList::Iterator it = m_container.begin(); it != m_container.end(); ++it ) {
/* only if parent tab.. m_tabWidgets gets deleted and would do that as well */
if (m_parentTab )
removeFromTab( (*it).widget );
qWarning("Adding to box %s", (*it).name.latin1() );
addToBox( (*it) );
}
for ( OSplitter* split = m_splitter.first(); split; split = m_splitter.next() ) {
/* tell them the world had changed */
split->setTabWidget( 0 );
Opie::OSplitterContainer con;
con.widget = split;
// con.widget = split->m_tabWidget ? static_cast<QWidget*>(split->m_tabWidget)
// : static_cast<QWidget*>(split->m_hbox);
addToBox( con );
}
if (m_parentTab )
m_parentTab->addTab(m_hbox, iconName(), label() );
else {
qWarning(" setting Box geometry for %s", name() );
m_hbox->setGeometry( frameRect() );
m_hbox->show();
delete m_tabWidget;
m_tabWidget = 0;
}
}
/*
* sets the tabwidget, removes tabs, and relayouts the widget
*/
void OSplitter::setTabWidget( OTabWidget* wid) {
/* clean up cause m_parentTab will not be available for us */
if ( m_parentTab ) {
if (m_hbox )
m_parentTab->removePage( m_hbox );
else if (!m_container.isEmpty() ){
ContainerList::Iterator it = m_container.begin();
for ( ; it != m_container.end(); ++it )
m_parentTab->removePage( (*it).widget );
}
}
/* the parent Splitter changed so either make us indepent or dep */
m_parentTab = wid;
QWidget *tab = m_tabWidget;
QWidget *box = m_hbox;
m_hbox = 0; m_tabWidget = 0;
if ( layoutMode() )
changeTab();
else if (m_orient == Horizontal )
changeHBox();
else
changeVBox();
/* our own crap is added and children from change* */
- if (m_parentTab ) {
delete tab;
delete box;
}
-}
#if 0
void OSplitter::reparentAll() {
if (m_container.isEmpty() )
return;
ContainerList::Iterator it = m_container.begin();
for ( ; it != m_container.end(); ++it )
(*it).wid->reparent(0, 0, QPoint(0, 0) );
}
#endif
/**
* @internal
*/
bool OSplitter::layoutMode()const {
if ( size().width() > m_size_policy &&
m_orient == Horizontal ) {
return false;
}else if ( size().height() > m_size_policy &&
m_orient == Vertical ) {
return false;
}
return true;
}