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.
tdelibs/tdemdi/tdemdi/toolviewaccessor.cpp

222 lines
7.5 KiB

/* This file is part of the KDE libraries
Copyright (C) 2003 Joseph Wenninger <jowenn@kde.org>
This library 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.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <kdebug.h>
#include "toolviewaccessor_p.h"
#include "guiclient.h"
#include "mainwindow.h"
#include "toolviewaccessor.h"
#include "toolviewaccessor.moc"
#include "toolviewaccessor_p.h"
namespace KMDI
{
ToolViewAccessor::ToolViewAccessor( KMDI::MainWindow *parent, TQWidget *widgetToWrap, const TQString& tabToolTip, const TQString& tabCaption)
: TQObject(parent)
{
mdiMainFrm=parent;
d=new KMDIPrivate::ToolViewAccessorPrivate();
if (widgetToWrap->inherits("KDockWidget")) {
d->widgetContainer=dynamic_cast<KDockWidget*>(widgetToWrap);
d->widget=d->widgetContainer->getWidget();
} else {
d->widget=widgetToWrap;
TQString 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())):TQPixmap()),
0L, // parent
widgetToWrap->caption(),
finalTabCaption);
d->widgetContainer->setWidget(widgetToWrap);
if (tabToolTip!=0) {
d->widgetContainer->setToolTipString(tabToolTip);
}
}
//mdiMainFrm->m_toolViews.insert(d->widget,this);
mdiMainFrm->m_guiClient->addToolView(this);
d->widget->installEventFilter(this);
}
ToolViewAccessor::ToolViewAccessor( KMDI::MainWindow *parent) : TQObject(parent) {
mdiMainFrm=parent;
d=new KMDIPrivate::ToolViewAccessorPrivate();
}
ToolViewAccessor::~ToolViewAccessor() {
if (mdiMainFrm->m_toolViews)
mdiMainFrm->m_toolViews->remove(d->widget);
delete d;
}
TQWidget *ToolViewAccessor::wrapperWidget() {
if (!d->widgetContainer) {
d->widgetContainer=mdiMainFrm->createDockWidget( "ToolViewAccessor::null",TQPixmap());
connect(d->widgetContainer,TQ_SIGNAL(widgetSet(TQWidget*)),this,TQ_SLOT(setWidgetToWrap(TQWidget*)));
}
return d->widgetContainer;
}
TQWidget *ToolViewAccessor::wrappedWidget() {
return d->widget;
}
void ToolViewAccessor::setWidgetToWrap(TQWidget *widgetToWrap, const TQString& tabToolTip, const TQString& tabCaption)
{
Q_ASSERT(!(d->widget));
Q_ASSERT(!widgetToWrap->inherits("KDockWidget"));
disconnect(d->widgetContainer,TQ_SIGNAL(widgetSet(TQWidget*)),this,TQ_SLOT(setWidgetToWrap(TQWidget*)));
delete d->widget;
d->widget=widgetToWrap;
KDockWidget *tmp=d->widgetContainer;
TQString 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())):TQPixmap(),
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())):TQPixmap());
tmp->setName(widgetToWrap->name());
if (tabToolTip!=0) {
d->widgetContainer->setToolTipString(tabToolTip);
}
}
tmp->setWidget(widgetToWrap);
mdiMainFrm->m_toolViews->insert(widgetToWrap,this);
mdiMainFrm->m_guiClient->addToolView(this);
d->widget->installEventFilter(this);
}
bool ToolViewAccessor::eventFilter(TQObject *o, TQEvent *e) {
if (e->type()==TQEvent::IconChange) {
d->widgetContainer->setPixmap(d->widget->icon()?(*d->widget->icon()):TQPixmap());
}
return false;
}
void ToolViewAccessor::placeAndShow(KDockWidget::DockPosition pos, TQWidget* pTargetWnd ,int percent)
{
place(pos,pTargetWnd,percent);
show();
}
void ToolViewAccessor::place(KDockWidget::DockPosition pos, TQWidget* pTargetWnd ,int percent)
{
Q_ASSERT(d->widgetContainer);
if (!d->widgetContainer) return;
if (pos == KDockWidget::DockNone) {
d->widgetContainer->setEnableDocking(KDockWidget::DockNone);
d->widgetContainer->reparent(mdiMainFrm, (WFlags)(WType_TopLevel | WType_Dialog), TQPoint(0,0), mdiMainFrm->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->getMainDockWidget()) {
if (pTargetWnd == mdiMainFrm->getMainDockWidget()->getWidget()) {
DockToOurself = true;
pTargetDock = mdiMainFrm->getMainDockWidget();
}
else if (pTargetWnd == mdiMainFrm->getMainDockWidget()) {
DockToOurself = true;
pTargetDock = mdiMainFrm->getMainDockWidget();
}
}
// this is not inheriting TQWidget*, 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;
}
}*/ //TODO
pCover->manualDock( pTargetDock, pos, percent);
//check pCover->show();
}
}
void ToolViewAccessor::hide() {
Q_ASSERT(d->widgetContainer);
if (!d->widgetContainer) return;
d->widgetContainer->undock();
}
void ToolViewAccessor::show() {
Q_ASSERT(d->widgetContainer);
if (!d->widgetContainer) return;
d->widgetContainer->makeDockVisible();
}
}