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