You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
270 lines
7.9 KiB
270 lines
7.9 KiB
//----------------------------------------------------------------------------
|
|
// 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;
|
|
|