00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef NO_KDE
00023 # include <kdebug.h>
00024 #endif
00025 #include "kmditoolviewaccessor_p.h"
00026 #include "kmdiguiclient.h"
00027 #include "kmdimainfrm.h"
00028
00029 #include "kmditoolviewaccessor.h"
00030 #include "kmditoolviewaccessor_p.h"
00031
00032 KMdiToolViewAccessor::KMdiToolViewAccessor( KMdiMainFrm *parent, QWidget *widgetToWrap, const QString& tabToolTip, const QString& tabCaption )
00033 : QObject( parent )
00034 {
00035 mdiMainFrm = parent;
00036 d = new KMdiToolViewAccessorPrivate();
00037 if ( widgetToWrap->inherits( "KDockWidget" ) )
00038 {
00039 d->widgetContainer = dynamic_cast<KDockWidget*>( widgetToWrap );
00040 d->widget = d->widgetContainer->getWidget();
00041 }
00042 else
00043 {
00044 d->widget = widgetToWrap;
00045 QString finalTabCaption;
00046 if ( tabCaption == 0 )
00047 {
00048 finalTabCaption = widgetToWrap->caption();
00049 if ( finalTabCaption.isEmpty() && !widgetToWrap->icon() )
00050 {
00051 finalTabCaption = widgetToWrap->name();
00052 }
00053 }
00054 else
00055 {
00056 finalTabCaption = tabCaption;
00057 }
00058 d->widgetContainer = parent->createDockWidget( widgetToWrap->name(),
00059 ( widgetToWrap->icon() ? ( *( widgetToWrap->icon() ) ) : QPixmap() ),
00060 0L,
00061 widgetToWrap->caption(),
00062 finalTabCaption );
00063 d->widgetContainer->setWidget( widgetToWrap );
00064 if ( tabToolTip != 0 )
00065 {
00066 d->widgetContainer->setToolTipString( tabToolTip );
00067 }
00068 }
00069
00070 if ( mdiMainFrm->m_mdiGUIClient )
00071 mdiMainFrm->m_mdiGUIClient->addToolView( this );
00072 else
00073 kdDebug( 760 ) << "mdiMainFrm->m_mdiGUIClient == 0 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" << endl;
00074
00075 d->widget->installEventFilter( this );
00076 }
00077
00078 KMdiToolViewAccessor::KMdiToolViewAccessor( KMdiMainFrm *parent )
00079 {
00080 mdiMainFrm = parent;
00081 d = new KMdiToolViewAccessorPrivate();
00082 }
00083
00084 KMdiToolViewAccessor::~KMdiToolViewAccessor()
00085 {
00086 if ( mdiMainFrm->m_pToolViews )
00087 mdiMainFrm->m_pToolViews->remove
00088 ( d->widget );
00089 delete d;
00090
00091 }
00092
00093 QWidget *KMdiToolViewAccessor::wrapperWidget()
00094 {
00095 if ( !d->widgetContainer )
00096 {
00097 d->widgetContainer = mdiMainFrm->createDockWidget( "KMdiToolViewAccessor::null", QPixmap() );
00098 connect( d->widgetContainer, SIGNAL( widgetSet( QWidget* ) ), this, SLOT( setWidgetToWrap( QWidget* ) ) );
00099 }
00100 return d->widgetContainer;
00101 }
00102
00103 QWidget *KMdiToolViewAccessor::wrappedWidget()
00104 {
00105 return d->widget;
00106 }
00107
00108
00109 void KMdiToolViewAccessor::setWidgetToWrap( QWidget *widgetToWrap, const QString& tabToolTip, const QString& tabCaption )
00110 {
00111 Q_ASSERT( !( d->widget ) );
00112 Q_ASSERT( !widgetToWrap->inherits( "KDockWidget" ) );
00113 disconnect( d->widgetContainer, SIGNAL( widgetSet( QWidget* ) ), this, SLOT( setWidgetToWrap( QWidget* ) ) );
00114 delete d->widget;
00115 d->widget = widgetToWrap;
00116 KDockWidget *tmp = d->widgetContainer;
00117
00118 QString finalTabCaption;
00119 if ( tabCaption == 0 )
00120 {
00121 finalTabCaption = widgetToWrap->caption();
00122 if ( finalTabCaption.isEmpty() && !widgetToWrap->icon() )
00123 {
00124 finalTabCaption = widgetToWrap->name();
00125 }
00126 }
00127 else
00128 {
00129 finalTabCaption = tabCaption;
00130 }
00131
00132 if ( !tmp )
00133 {
00134 tmp = mdiMainFrm->createDockWidget( widgetToWrap->name(),
00135 widgetToWrap->icon() ? ( *( widgetToWrap->icon() ) ) : QPixmap(),
00136 0L,
00137 widgetToWrap->caption(),
00138 finalTabCaption );
00139 d->widgetContainer = tmp;
00140 if ( tabToolTip != 0 )
00141 {
00142 d->widgetContainer->setToolTipString( tabToolTip );
00143 }
00144 }
00145 else
00146 {
00147 tmp->setCaption( widgetToWrap->caption() );
00148 tmp->setTabPageLabel( finalTabCaption );
00149 tmp->setPixmap( widgetToWrap->icon() ? ( *( widgetToWrap->icon() ) ) : QPixmap() );
00150 tmp->setName( widgetToWrap->name() );
00151 if ( tabToolTip != 0 )
00152 {
00153 d->widgetContainer->setToolTipString( tabToolTip );
00154 }
00155 }
00156 tmp->setWidget( widgetToWrap );
00157 mdiMainFrm->m_pToolViews->insert( widgetToWrap, this );
00158 if ( mdiMainFrm->m_mdiGUIClient )
00159 mdiMainFrm->m_mdiGUIClient->addToolView( this );
00160 else
00161 kdDebug( 760 ) << "mdiMainFrm->m_mdiGUIClient == 0 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" << endl;
00162
00163 d->widget->installEventFilter( this );
00164 }
00165
00166
00167 bool KMdiToolViewAccessor::eventFilter( QObject *, QEvent *e )
00168 {
00169 if ( e->type() == QEvent::IconChange )
00170 {
00171 d->widgetContainer->setPixmap( d->widget->icon() ? ( *d->widget->icon() ) : QPixmap() );
00172 }
00173 return false;
00174 }
00175
00176 void KMdiToolViewAccessor::placeAndShow( KDockWidget::DockPosition pos, QWidget* pTargetWnd , int percent )
00177 {
00178 place( pos, pTargetWnd, percent );
00179 show();
00180 }
00181 void KMdiToolViewAccessor::place( KDockWidget::DockPosition pos, QWidget* pTargetWnd , int percent )
00182 {
00183 Q_ASSERT( d->widgetContainer );
00184 if ( !d->widgetContainer )
00185 return ;
00186 if ( pos == KDockWidget::DockNone )
00187 {
00188 d->widgetContainer->setEnableDocking( KDockWidget::DockNone );
00189 d->widgetContainer->reparent( mdiMainFrm, Qt::WType_TopLevel | Qt::WType_Dialog, QPoint( 0, 0 ), true );
00190 }
00191 else
00192 {
00193
00194 KDockWidget* pCover = d->widgetContainer;
00195
00196 KDockWidget* pTargetDock = 0L;
00197 if ( pTargetWnd->inherits( "KDockWidget" ) || pTargetWnd->inherits( "KDockWidget_Compat::KDockWidget" ) )
00198 {
00199 pTargetDock = ( KDockWidget* ) pTargetWnd;
00200 }
00201
00202
00203 bool DockToOurself = false;
00204 if ( mdiMainFrm->m_pDockbaseAreaOfDocumentViews )
00205 {
00206 if ( pTargetWnd == mdiMainFrm->m_pDockbaseAreaOfDocumentViews->getWidget() )
00207 {
00208 DockToOurself = true;
00209 pTargetDock = mdiMainFrm->m_pDockbaseAreaOfDocumentViews;
00210 }
00211 else if ( pTargetWnd == mdiMainFrm->m_pDockbaseAreaOfDocumentViews )
00212 {
00213 DockToOurself = true;
00214 pTargetDock = mdiMainFrm->m_pDockbaseAreaOfDocumentViews;
00215 }
00216 }
00217
00218
00219 if ( !DockToOurself )
00220 if ( pTargetWnd != 0L )
00221 {
00222 pTargetDock = mdiMainFrm->dockManager->findWidgetParentDock( pTargetWnd );
00223 if ( !pTargetDock )
00224 {
00225 if ( pTargetWnd->parentWidget() )
00226 {
00227 pTargetDock = mdiMainFrm->dockManager->findWidgetParentDock( pTargetWnd->parentWidget() );
00228 }
00229 }
00230 }
00231 if ( !pTargetDock || pTargetWnd == mdiMainFrm->getMainDockWidget() )
00232 {
00233 if ( mdiMainFrm->m_managedDockPositionMode && ( mdiMainFrm->m_pMdi || mdiMainFrm->m_documentTabWidget ) )
00234 {
00235 KDockWidget * dw1 = pTargetDock->findNearestDockWidget( pos );
00236 if ( dw1 )
00237 pCover->manualDock( dw1, KDockWidget::DockCenter, percent );
00238 else
00239 pCover->manualDock ( pTargetDock, pos, 20 );
00240 return ;
00241 }
00242 }
00243 pCover->manualDock( pTargetDock, pos, percent );
00244
00245 }
00246 }
00247
00248 void KMdiToolViewAccessor::hide()
00249 {
00250 Q_ASSERT( d->widgetContainer );
00251 if ( !d->widgetContainer )
00252 return ;
00253 d->widgetContainer->undock();
00254 }
00255
00256 void KMdiToolViewAccessor::show()
00257 {
00258 Q_ASSERT( d->widgetContainer );
00259 if ( !d->widgetContainer )
00260 return ;
00261 d->widgetContainer->makeDockVisible();
00262 }
00263
00264
00265 #ifndef NO_INCLUDE_MOCFILES
00266 #include "kmditoolviewaccessor.moc"
00267 #endif
00268
00269