diff options
Diffstat (limited to 'kmdi/kmditoolviewaccessor.cpp')
-rw-r--r-- | kmdi/kmditoolviewaccessor.cpp | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/kmdi/kmditoolviewaccessor.cpp b/kmdi/kmditoolviewaccessor.cpp new file mode 100644 index 000000000..f9921e18c --- /dev/null +++ b/kmdi/kmditoolviewaccessor.cpp @@ -0,0 +1,269 @@ +//---------------------------------------------------------------------------- +// filename : kmditoolviewaccessor.h +//---------------------------------------------------------------------------- +// Project : KDE MDI extension +// +// begin : 08/2003 by Joseph Wenninger (jowenn@kde.org) +// changes : --- +// patches : --- +// +// copyright : (C) 2003 by Joseph Wenninger (jowenn@kde.org) +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU Library General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +//---------------------------------------------------------------------------- + +#ifndef NO_KDE +# include <kdebug.h> +#endif +#include "kmditoolviewaccessor_p.h" +#include "kmdiguiclient.h" +#include "kmdimainfrm.h" + +#include "kmditoolviewaccessor.h" +#include "kmditoolviewaccessor_p.h" + +KMdiToolViewAccessor::KMdiToolViewAccessor( KMdiMainFrm *parent, QWidget *widgetToWrap, const QString& tabToolTip, const QString& tabCaption ) + : QObject( parent ) +{ + mdiMainFrm = parent; + d = new KMdiToolViewAccessorPrivate(); + if ( widgetToWrap->inherits( "KDockWidget" ) ) + { + d->widgetContainer = dynamic_cast<KDockWidget*>( widgetToWrap ); + d->widget = d->widgetContainer->getWidget(); + } + else + { + d->widget = widgetToWrap; + QString finalTabCaption; + if ( tabCaption == 0 ) + { + finalTabCaption = widgetToWrap->caption(); + if ( finalTabCaption.isEmpty() && !widgetToWrap->icon() ) + { + finalTabCaption = widgetToWrap->name(); + } + } + else + { + finalTabCaption = tabCaption; + } + d->widgetContainer = parent->createDockWidget( widgetToWrap->name(), + ( widgetToWrap->icon() ? ( *( widgetToWrap->icon() ) ) : QPixmap() ), + 0L, // parent + widgetToWrap->caption(), + finalTabCaption ); + d->widgetContainer->setWidget( widgetToWrap ); + if ( tabToolTip != 0 ) + { + d->widgetContainer->setToolTipString( tabToolTip ); + } + } + //mdiMainFrm->m_pToolViews->insert(d->widget,this); + if ( mdiMainFrm->m_mdiGUIClient ) + mdiMainFrm->m_mdiGUIClient->addToolView( this ); + else + kdDebug( 760 ) << "mdiMainFrm->m_mdiGUIClient == 0 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" << endl; + + d->widget->installEventFilter( this ); +} + +KMdiToolViewAccessor::KMdiToolViewAccessor( KMdiMainFrm *parent ) +{ + mdiMainFrm = parent; + d = new KMdiToolViewAccessorPrivate(); +} + +KMdiToolViewAccessor::~KMdiToolViewAccessor() +{ + if ( mdiMainFrm->m_pToolViews ) + mdiMainFrm->m_pToolViews->remove + ( d->widget ); + delete d; + +} + +QWidget *KMdiToolViewAccessor::wrapperWidget() +{ + if ( !d->widgetContainer ) + { + d->widgetContainer = mdiMainFrm->createDockWidget( "KMdiToolViewAccessor::null", QPixmap() ); + connect( d->widgetContainer, SIGNAL( widgetSet( QWidget* ) ), this, SLOT( setWidgetToWrap( QWidget* ) ) ); + } + return d->widgetContainer; +} + +QWidget *KMdiToolViewAccessor::wrappedWidget() +{ + return d->widget; +} + + +void KMdiToolViewAccessor::setWidgetToWrap( QWidget *widgetToWrap, const QString& tabToolTip, const QString& tabCaption ) +{ + Q_ASSERT( !( d->widget ) ); + Q_ASSERT( !widgetToWrap->inherits( "KDockWidget" ) ); + disconnect( d->widgetContainer, SIGNAL( widgetSet( QWidget* ) ), this, SLOT( setWidgetToWrap( QWidget* ) ) ); + delete d->widget; + d->widget = widgetToWrap; + KDockWidget *tmp = d->widgetContainer; + + QString finalTabCaption; + if ( tabCaption == 0 ) + { + finalTabCaption = widgetToWrap->caption(); + if ( finalTabCaption.isEmpty() && !widgetToWrap->icon() ) + { + finalTabCaption = widgetToWrap->name(); + } + } + else + { + finalTabCaption = tabCaption; + } + + if ( !tmp ) + { + tmp = mdiMainFrm->createDockWidget( widgetToWrap->name(), + widgetToWrap->icon() ? ( *( widgetToWrap->icon() ) ) : QPixmap(), + 0L, // parent + widgetToWrap->caption(), + finalTabCaption ); + d->widgetContainer = tmp; + if ( tabToolTip != 0 ) + { + d->widgetContainer->setToolTipString( tabToolTip ); + } + } + else + { + tmp->setCaption( widgetToWrap->caption() ); + tmp->setTabPageLabel( finalTabCaption ); + tmp->setPixmap( widgetToWrap->icon() ? ( *( widgetToWrap->icon() ) ) : QPixmap() ); + tmp->setName( widgetToWrap->name() ); + if ( tabToolTip != 0 ) + { + d->widgetContainer->setToolTipString( tabToolTip ); + } + } + tmp->setWidget( widgetToWrap ); + mdiMainFrm->m_pToolViews->insert( widgetToWrap, this ); + if ( mdiMainFrm->m_mdiGUIClient ) + mdiMainFrm->m_mdiGUIClient->addToolView( this ); + else + kdDebug( 760 ) << "mdiMainFrm->m_mdiGUIClient == 0 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" << endl; + + d->widget->installEventFilter( this ); +} + + +bool KMdiToolViewAccessor::eventFilter( QObject *, QEvent *e ) +{ + if ( e->type() == QEvent::IconChange ) + { + d->widgetContainer->setPixmap( d->widget->icon() ? ( *d->widget->icon() ) : QPixmap() ); + } + return false; +} + +void KMdiToolViewAccessor::placeAndShow( KDockWidget::DockPosition pos, QWidget* pTargetWnd , int percent ) +{ + place( pos, pTargetWnd, percent ); + show(); +} +void KMdiToolViewAccessor::place( KDockWidget::DockPosition pos, QWidget* pTargetWnd , int percent ) +{ + Q_ASSERT( d->widgetContainer ); + if ( !d->widgetContainer ) + return ; + if ( pos == KDockWidget::DockNone ) + { + d->widgetContainer->setEnableDocking( KDockWidget::DockNone ); + d->widgetContainer->reparent( mdiMainFrm, Qt::WType_TopLevel | Qt::WType_Dialog, QPoint( 0, 0 ), true ); //pToolView->isVisible()); + } + else + { // add (and dock) the toolview as DockWidget view + + KDockWidget* pCover = d->widgetContainer; + + KDockWidget* pTargetDock = 0L; + if ( pTargetWnd->inherits( "KDockWidget" ) || pTargetWnd->inherits( "KDockWidget_Compat::KDockWidget" ) ) + { + pTargetDock = ( KDockWidget* ) pTargetWnd; + } + + // Should we dock to ourself? + bool DockToOurself = false; + if ( mdiMainFrm->m_pDockbaseAreaOfDocumentViews ) + { + if ( pTargetWnd == mdiMainFrm->m_pDockbaseAreaOfDocumentViews->getWidget() ) + { + DockToOurself = true; + pTargetDock = mdiMainFrm->m_pDockbaseAreaOfDocumentViews; + } + else if ( pTargetWnd == mdiMainFrm->m_pDockbaseAreaOfDocumentViews ) + { + DockToOurself = true; + pTargetDock = mdiMainFrm->m_pDockbaseAreaOfDocumentViews; + } + } + // this is not inheriting QWidget*, its plain impossible that this condition is true + //if (pTargetWnd == this) DockToOurself = true; + if ( !DockToOurself ) + if ( pTargetWnd != 0L ) + { + pTargetDock = mdiMainFrm->dockManager->findWidgetParentDock( pTargetWnd ); + if ( !pTargetDock ) + { + if ( pTargetWnd->parentWidget() ) + { + pTargetDock = mdiMainFrm->dockManager->findWidgetParentDock( pTargetWnd->parentWidget() ); + } + } + } + if ( !pTargetDock || pTargetWnd == mdiMainFrm->getMainDockWidget() ) + { + if ( mdiMainFrm->m_managedDockPositionMode && ( mdiMainFrm->m_pMdi || mdiMainFrm->m_documentTabWidget ) ) + { + KDockWidget * dw1 = pTargetDock->findNearestDockWidget( pos ); + if ( dw1 ) + pCover->manualDock( dw1, KDockWidget::DockCenter, percent ); + else + pCover->manualDock ( pTargetDock, pos, 20 ); + return ; + } + } + pCover->manualDock( pTargetDock, pos, percent ); + //check pCover->show(); + } +} + +void KMdiToolViewAccessor::hide() +{ + Q_ASSERT( d->widgetContainer ); + if ( !d->widgetContainer ) + return ; + d->widgetContainer->undock(); +} + +void KMdiToolViewAccessor::show() +{ + Q_ASSERT( d->widgetContainer ); + if ( !d->widgetContainer ) + return ; + d->widgetContainer->makeDockVisible(); +} + + +#ifndef NO_INCLUDE_MOCFILES +#include "kmditoolviewaccessor.moc" +#endif +// kate: space-indent off; tab-width 4; replace-tabs off; indent-mode csands; + |