diff options
Diffstat (limited to 'kdeui/kdockwidget.cpp')
-rw-r--r-- | kdeui/kdockwidget.cpp | 3331 |
1 files changed, 0 insertions, 3331 deletions
diff --git a/kdeui/kdockwidget.cpp b/kdeui/kdockwidget.cpp deleted file mode 100644 index e9cd24014..000000000 --- a/kdeui/kdockwidget.cpp +++ /dev/null @@ -1,3331 +0,0 @@ - -/* This file is part of the KDE libraries - Copyright (C) 2000 Max Judin <novaprint@mtu-net.ru> - Copyright (C) 2002,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 version 2 as published by the Free Software Foundation. - - 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 "kdockwidget.h" -#include "kdockwidget_private.h" -#include "kdockwidget_p.h" - -#include <tqapplication.h> -#include <tqlayout.h> -#include <tqpainter.h> -#include <tqobjectlist.h> -#include <tqstrlist.h> -#include <tqcursor.h> -#include <tqwidgetlist.h> -#include <tqtabwidget.h> -#include <tqtooltip.h> -#include <tqstyle.h> - -#ifndef NO_KDE2 -#include <kconfig.h> -#include <kglobal.h> -#include <klocale.h> -#include <ktoolbar.h> -#include <kpopupmenu.h> -#include <kwin.h> -#include <kdebug.h> -#include <kglobalsettings.h> - -#include "config.h" -#ifdef Q_WS_X11 -#include <X11/X.h> -#include <X11/Xlib.h> -#endif - -#else -#include <tqtoolbar.h> -#include <tqpopupmenu.h> -#endif - -#include <stdlib.h> - -#undef BORDERLESS_WINDOWS - -#define DOCK_CONFIG_VERSION "0.0.5" - -static const char* const dockback_xpm[]={ -"6 6 2 1", -"# c black", -". c None", -"......", -".#....", -"..#..#", -"...#.#", -"....##", -"..####"}; - -static const char* const todesktop_xpm[]={ -"5 5 2 1", -"# c black", -". c None", -"####.", -"##...", -"#.#..", -"#..#.", -"....#"}; - -static const char* const not_close_xpm[]={ -"5 5 2 1", -"# c black", -". c None", -"#####", -"#...#", -"#...#", -"#...#", -"#####"}; - -/** - * A special kind of KMainWindow that is able to have dockwidget child widgets. - * - * The main widget should be a dockwidget where other dockwidgets can be docked to - * the left, right, top, bottom or to the middle. - * Furthermore, the KDockMainWindow has got the KDocManager and some data about the dock states. - * - * @author Max Judin. -*/ -KDockMainWindow::KDockMainWindow( TQWidget* parent, const char *name, WFlags f) -:KMainWindow( parent, name, f ) -{ - TQString new_name = TQString(name) + TQString("_DockManager"); - dockManager = new KDockManager( this, new_name.latin1() ); - mainDockWidget = 0L; -} - -KDockMainWindow::~KDockMainWindow() -{ - delete dockManager; -} - -void KDockMainWindow::setMainDockWidget( KDockWidget* mdw ) -{ - if ( mainDockWidget == mdw ) return; - mainDockWidget = mdw; - dockManager->setMainDockWidget2(mdw); -} - -void KDockMainWindow::setView( TQWidget *view ) -{ - if ( view->isA("KDockWidget") ){ - if ( TQT_BASE_OBJECT(view->parent()) != TQT_BASE_OBJECT(this) ) ((KDockWidget*)view)->applyToWidget( this ); - } - -#ifndef NO_KDE2 - KMainWindow::setCentralWidget(view); -#else - TQMainWindow::setCentralWidget(view); -#endif -} - -KDockWidget* KDockMainWindow::createDockWidget( const TQString& name, const TQPixmap &pixmap, TQWidget* parent, const TQString& strCaption, const TQString& strTabPageLabel) -{ - return new KDockWidget( dockManager, name.latin1(), pixmap, parent, strCaption, strTabPageLabel ); -} - -void KDockMainWindow::makeDockVisible( KDockWidget* dock ) -{ - if ( dock ) - dock->makeDockVisible(); -} - -void KDockMainWindow::makeDockInvisible( KDockWidget* dock ) -{ - if ( dock ) - dock->undock(); -} - -void KDockMainWindow::makeWidgetDockVisible( TQWidget* widget ) -{ - makeDockVisible( dockManager->findWidgetParentDock(widget) ); -} - -void KDockMainWindow::writeDockConfig(TQDomElement &base) -{ - dockManager->writeConfig(base); -} - -void KDockMainWindow::readDockConfig(TQDomElement &base) -{ - dockManager->readConfig(base); -} - -#ifndef NO_KDE2 -void KDockMainWindow::writeDockConfig( KConfig* c, TQString group ) -{ - dockManager->writeConfig( c, group ); -} - -void KDockMainWindow::readDockConfig( KConfig* c, TQString group ) -{ - dockManager->readConfig( c, group ); -} -#endif - -void KDockMainWindow::slotDockWidgetUndocked() -{ - TQObject* pSender = (TQObject*) sender(); - if (!pSender->inherits("KDockWidget")) return; - KDockWidget* pDW = (KDockWidget*) pSender; - emit dockWidgetHasUndocked( pDW); -} - -/*************************************************************************/ -KDockWidgetAbstractHeaderDrag::KDockWidgetAbstractHeaderDrag( KDockWidgetAbstractHeader* parent, KDockWidget* dock, const char* name ) -:TQFrame( parent, name ) -{ - dw = dock; - installEventFilter( dock->dockManager() ); -} -/*************************************************************************/ -KDockWidgetHeaderDrag::KDockWidgetHeaderDrag( KDockWidgetAbstractHeader* parent, KDockWidget* dock, const char* name ) -:KDockWidgetAbstractHeaderDrag( parent, dock, name ) -{ -} - -void KDockWidgetHeaderDrag::paintEvent( TQPaintEvent* ) -{ - TQPainter paint; - - paint.begin( this ); - - tqstyle().tqdrawPrimitive (TQStyle::PE_DockWindowHandle, &paint, TQRect(0,0,width(), height()), tqcolorGroup()); - - paint.end(); -} -/*************************************************************************/ -KDockWidgetAbstractHeader::KDockWidgetAbstractHeader( KDockWidget* parent, const char* name ) -:TQFrame( parent, name ) -{ -} -/*************************************************************************/ -KDockWidgetHeader::KDockWidgetHeader( KDockWidget* parent, const char* name ) -:KDockWidgetAbstractHeader( parent, name ) -{ -#ifdef BORDERLESS_WINDOWS - setCursor(TQCursor(ArrowCursor)); -#endif - d = new KDockWidgetHeaderPrivate( TQT_TQOBJECT(this) ); - - layout = new TQHBoxLayout( this ); - layout->setResizeMode( TQLayout::Minimum ); - - drag = new KDockWidgetHeaderDrag( this, parent ); - - closeButton = new KDockButton_Private( this, "DockCloseButton" ); - TQToolTip::add( closeButton, i18n("Close") ); - closeButton->setPixmap( tqstyle().stylePixmap (TQStyle::SP_TitleBarCloseButton , this)); - closeButton->setFixedSize(closeButton->pixmap()->width(),closeButton->pixmap()->height()); - connect( closeButton, TQT_SIGNAL(clicked()), parent, TQT_SIGNAL(headerCloseButtonClicked())); - connect( closeButton, TQT_SIGNAL(clicked()), parent, TQT_SLOT(undock())); - - stayButton = new KDockButton_Private( this, "DockStayButton" ); - TQToolTip::add( stayButton, i18n("Freeze the window geometry", "Freeze") ); - stayButton->setToggleButton( true ); - stayButton->setPixmap( const_cast< const char** >(not_close_xpm) ); - stayButton->setFixedSize(closeButton->pixmap()->width(),closeButton->pixmap()->height()); - connect( stayButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotStayClicked())); - - dockbackButton = new KDockButton_Private( this, "DockbackButton" ); - TQToolTip::add( dockbackButton, i18n("Dock this window", "Dock") ); - dockbackButton->setPixmap( const_cast< const char** >(dockback_xpm)); - dockbackButton->setFixedSize(closeButton->pixmap()->width(),closeButton->pixmap()->height()); - connect( dockbackButton, TQT_SIGNAL(clicked()), parent, TQT_SIGNAL(headerDockbackButtonClicked())); - connect( dockbackButton, TQT_SIGNAL(clicked()), parent, TQT_SLOT(dockBack())); - - d->toDesktopButton = new KDockButton_Private( this, "ToDesktopButton" ); - TQToolTip::add( d->toDesktopButton, i18n("Detach") ); - d->toDesktopButton->setPixmap( const_cast< const char** >(todesktop_xpm)); - d->toDesktopButton->setFixedSize(closeButton->pixmap()->width(),closeButton->pixmap()->height()); - connect( d->toDesktopButton, TQT_SIGNAL(clicked()), parent, TQT_SLOT(toDesktop())); - stayButton->hide(); - - d->dummy = new TQWidget( this ); - d->dummy->setFixedSize( 1,closeButton->pixmap()->height() ); - - - layout->addWidget( drag ); - layout->addWidget( dockbackButton ); - layout->addWidget( d->toDesktopButton ); - layout->addWidget( d->dummy); - layout->addWidget( stayButton ); - layout->addWidget( closeButton ); - layout->activate(); - d->dummy->hide(); - drag->setFixedHeight( layout->tqminimumSize().height() ); -} - -void KDockWidgetHeader::setTopLevel( bool isTopLevel ) -{ - d->topLevel = isTopLevel; - if ( isTopLevel ){ - KDockWidget* par = (KDockWidget*)parent(); - if( par && par->isDockBackPossible() ) - dockbackButton->show(); - else - dockbackButton->hide(); - - stayButton->hide(); - closeButton->hide(); - d->toDesktopButton->hide(); - drag->setEnabled( true ); - } else { - dockbackButton->hide(); - stayButton->hide(); - if (!d->forceCloseButtonHidden) closeButton->show(); - if( d->showToDesktopButton ) - d->toDesktopButton->show(); - } - layout->activate(); - - bool dontShowDummy=drag->isVisibleTo(this) || dockbackButton->isVisibleTo(this) || - d->toDesktopButton->isVisibleTo(this) || stayButton->isVisibleTo(this) || - closeButton->isVisibleTo(this); - for (TQPtrListIterator<KDockButton_Private> it( d->btns );it.current();++it) { - dontShowDummy=dontShowDummy || (it.current()->isVisibleTo(this)); - } - if (dontShowDummy) d->dummy->hide(); else d->dummy->show(); - - updateGeometry(); -} - -void KDockWidgetHeader::forceCloseButtonHidden(bool hidden) { - d->forceCloseButtonHidden=hidden; - if (hidden) closeButton->hide(); - else closeButton->show(); -} - -KDockWidgetHeaderDrag *KDockWidgetHeader::dragPanel() { - return drag; -} - -void KDockWidgetHeader::setDragPanel( KDockWidgetHeaderDrag* nd ) -{ - if ( !nd ) return; - - delete layout; - layout = new TQHBoxLayout( this ); - layout->setResizeMode( TQLayout::Minimum ); - - delete drag; - drag = nd; - if (drag->parentWidget()!=this) { - drag->reparent(this,TQPoint(0,0)); - } - - - layout->addWidget( drag ); - layout->addWidget( dockbackButton ); - layout->addWidget( d->dummy ); - layout->addWidget( d->toDesktopButton ); - layout->addWidget( stayButton ); - bool dontShowDummy=drag->isVisibleTo(this) || dockbackButton->isVisibleTo(this) || - d->toDesktopButton->isVisibleTo(this) || stayButton->isVisibleTo(this) || - closeButton->isVisibleTo(this); - for (TQPtrListIterator<KDockButton_Private> it( d->btns );it.current();++it) { - layout->addWidget(it.current()); - dontShowDummy=dontShowDummy || (it.current()->isVisibleTo(this)); - } - if (dontShowDummy) d->dummy->hide(); else d->dummy->show(); - layout->addWidget( closeButton ); - layout->activate(); - kdDebug(282)<<"KdockWidgetHeader::setDragPanel:minimum height="<<layout->tqminimumSize().height()<<endl; - //FIXME somebody left this here, but we don't know what the hell it's for. - drag->setFixedHeight( closeButton->height()); // /*layout->minimumS*/tqsizeHint().height() ); -} - -void KDockWidgetHeader::addButton(KDockButton_Private* btn) { - if (!btn) return; - - if (btn->parentWidget()!=this) { - btn->reparent(this,TQPoint(0,0)); - } - btn->setFixedSize(closeButton->pixmap()->width(),closeButton->pixmap()->height()); - if (!d->btns.containsRef(btn)) d->btns.append(btn); - - btn->show(); - - delete layout; - layout = new TQHBoxLayout( this ); - layout->setResizeMode( TQLayout::Minimum ); - - layout->addWidget( drag ); - layout->addWidget( dockbackButton ); - layout->addWidget( d->toDesktopButton ); - layout->addWidget( d->dummy); - layout->addWidget( stayButton ); - bool dontShowDummy=drag->isVisibleTo(this) || dockbackButton->isVisibleTo(this) || - d->toDesktopButton->isVisibleTo(this) || stayButton->isVisibleTo(this) || - closeButton->isVisibleTo(this); - for (TQPtrListIterator<KDockButton_Private> it( d->btns );it.current();++it) { - layout->addWidget(it.current()); - dontShowDummy=dontShowDummy || (it.current()->isVisibleTo(this)); - } - if (dontShowDummy) d->dummy->hide(); else d->dummy->show(); - layout->addWidget( closeButton ); - layout->activate(); - drag->setFixedHeight( layout->tqminimumSize().height() ); -} - -void KDockWidgetHeader::removeButton(KDockButton_Private* btn) { - if (btn->parentWidget()==this) { - if (d->btns.containsRef(btn)) d->btns.removeRef(btn); - delete btn; - } -} - - -void KDockWidgetHeader::slotStayClicked() -{ - setDragEnabled(!stayButton->isOn()); -} - -bool KDockWidgetHeader::dragEnabled() const -{ - return drag->isEnabled(); -} - -void KDockWidgetHeader::showUndockButton(bool show) -{ - kdDebug(282)<<"KDockWidgetHeader::showUndockButton("<<show<<")"<<endl; - if( d->showToDesktopButton == show ) - return; - - d->showToDesktopButton = show; - if( !show || d->topLevel ) - d->toDesktopButton->hide( ); - else - d->toDesktopButton->show( ); -} - -void KDockWidgetHeader::setDragEnabled(bool b) -{ - stayButton->setOn(!b); - closeButton->setEnabled(b); - drag->setEnabled(b); -} - -#ifndef NO_KDE2 -void KDockWidgetHeader::saveConfig( KConfig* c ) -{ - c->writeEntry( TQString("%1%2").arg(parent()->name()).arg(":stayButton"), stayButton->isOn() ); -} - -void KDockWidgetHeader::loadConfig( KConfig* c ) -{ - setDragEnabled( !c->readBoolEntry( TQString("%1%2").arg(parent()->name()).arg(":stayButton"), false ) ); -} -#endif - -/*************************************************************************/ - -class KDockManager::KDockManagerPrivate -{ -public: - /** - * This rectangle is used to highlight the current dockposition. It stores global screen coordinates. - */ - TQRect dragRect; - - /** - * This rectangle is used to erase the previously highlighted dockposition. It stores global screen coordinates. - */ - TQRect oldDragRect; - - /** - * This flag stores the information if dragging is ready to start. Used between mousePress and mouseMove event. - */ - bool readyToDrag; - - /** - * This variable stores the offset of the mouse cursor to the upper left edge of the current drag widget. - */ - TQPoint dragOffset; - - /** - * These flags store information about the splitter behavior - */ - bool splitterOpaqueResize; - bool splitterKeepSize; - bool splitterHighResolution; - - TQGuardedPtr<KDockWidget> mainDockWidget; - - TQObjectList containerDocks; - - TQGuardedPtr<KDockWidget> leftContainer; - TQGuardedPtr<KDockWidget> topContainer; - TQGuardedPtr<KDockWidget> rightContainer; - TQGuardedPtr<KDockWidget> bottomContainer; - int m_readDockConfigMode; -}; - - -/*************************************************************************/ -KDockWidget::KDockWidget( KDockManager* dockManager, const char* name, const TQPixmap &pixmap, TQWidget* parent, const TQString& strCaption, const TQString& strTabPageLabel, WFlags f) -#ifdef BORDERLESS_WINDOWS -: TQWidget( parent, name, f )//| WType_Dialog | WStyle_Customize | WStyle_NoBorder ) -#else -: TQWidget( parent, name, f ) -#endif - ,formerBrotherDockWidget(0L) - ,currentDockPos(DockNone) - ,formerDockPos(DockNone) - ,widget(0L) - ,pix(new TQPixmap(pixmap)) - ,prevSideDockPosBeforeDrag(DockNone) - ,isGroup(false) -{ - d = new KDockWidgetPrivate(); // create private data - - d->_parent = parent; - - layout = new TQVBoxLayout( this ); - layout->setResizeMode( TQLayout::Minimum ); - - manager = dockManager; - manager->childDock->append( TQT_TQOBJECT(this) ); - installEventFilter( manager ); - - eDocking = DockFullDocking; - sDocking = DockFullSite; - - header = 0L; - setHeader( new KDockWidgetHeader( this, "AutoCreatedDockHeader" ) ); - - if( strCaption.isNull() ) - setCaption( name ); - else - setCaption( strCaption); - - if( strTabPageLabel == " ") - setTabPageLabel( caption()); - else - setTabPageLabel( strTabPageLabel); - - isTabGroup = false; - d->isContainer =false; - setIcon( pixmap); - widget = 0L; - - TQObject::connect(this, TQT_SIGNAL(hasUndocked()), manager->main, TQT_SLOT(slotDockWidgetUndocked()) ); - applyToWidget( parent, TQPoint(0,0) ); -} - -void KDockWidget::setPixmap(const TQPixmap& pixmap) { - delete pix; - pix=new TQPixmap(pixmap); - setIcon(*pix); - KDockTabGroup *dtg=parentDockTabGroup(); - if (dtg) - dtg->changeTab(this,pixmap,dtg->tabLabel(this)); - TQWidget *contWid=parentDockContainer(); - if (contWid) { - KDockContainer *x = tqt_dynamic_cast<KDockContainer*>(contWid); - if (x) { - x->setPixmap(this,pixmap); - } - } -} - -const TQPixmap& KDockWidget::pixmap() const { - return *pix; -} - -KDockWidget::~KDockWidget() -{ - d->pendingDtor = true; - if ( !manager->undockProcess ){ - d->blockHasUndockedSignal = true; - undock(); - d->blockHasUndockedSignal = false; - } - - if (latestKDockContainer()) { - KDockContainer *x = tqt_dynamic_cast<KDockContainer*>(latestKDockContainer()); - if (x) { - x->removeWidget(this); - } - } - emit iMBeingClosed(); - if (manager->d) manager->d->containerDocks.remove(TQT_TQOBJECT(this)); - manager->childDock->remove(TQT_TQOBJECT(this)); - delete pix; - delete d; // destroy private data - d=0; -} - -void KDockWidget::paintEvent(TQPaintEvent* pe) -{ - TQWidget::paintEvent(pe); - TQPainter paint; - paint.begin( this ); - tqstyle().tqdrawPrimitive (TQStyle::PE_Panel, &paint, TQRect(0,0,width(), height()), tqcolorGroup()); - paint.end(); -} - -void KDockWidget::leaveEvent(TQEvent *e) -{ - TQWidget::leaveEvent(e); -#ifdef BORDERLESS_WINDOWS - if (parent()) return; -// setCursor(TQCursor(ArrowCursor)); -#endif -} - -void KDockWidget::mousePressEvent(TQMouseEvent* mme) -{ -#ifdef BORDERLESS_WINDOWS - if (!parent()) - { - kdDebug(282)<<"KDockWidget::mousePressEvent"<<endl; - - bool bbottom; - bool bleft; - bool bright; - bool btop; - int styleheight; - TQPoint mp; - mp=mme->pos(); - styleheight=2*tqstyle().tqpixelMetric(TQStyle::PM_DefaultFrameWidth,this); - bbottom=mp.y()>=height()-styleheight; - btop=mp.y()<=styleheight; - bleft=mp.x()<=styleheight; - bright=mp.x()>=width()-styleheight; - kdDebug(282)<<"mousemovevent"<<endl; - d->resizing=true; - if (bright) - { - if (btop) - { - d->resizeMode=KDockWidgetPrivate::ResizeTopRight; - d->resizePos=TQPoint(width(),0)-mme->pos(); - - } - else - { - d->resizePos=TQPoint(width(),height())-mme->pos(); - if (bbottom) d->resizeMode=KDockWidgetPrivate::ResizeBottomRight; - else d->resizeMode=KDockWidgetPrivate::ResizeRight; - } - } - else if (bleft) - { - if (btop) setCursor(TQCursor(SizeFDiagCursor)); - else - if (bbottom) setCursor(TQCursor(SizeBDiagCursor)); - else setCursor(TQCursor(SizeHorCursor)); - } - else - if (bbottom) - { - d->resizeMode=KDockWidgetPrivate::ResizeBottom; - d->resizePos=TQPoint(0,height())-mme->pos(); - } - else - if (btop) setCursor(TQCursor(SizeVerCursor)); - else d->resizing=false; - - if (d->resizing) grabMouse(cursor()); - - } -#endif - TQWidget::mousePressEvent(mme); -} - -void KDockWidget::mouseReleaseEvent(TQMouseEvent* ev) -{ -#ifdef BORDERLESS_WINDOWS - d->resizing=false; - releaseMouse(); -#endif - TQWidget::mouseReleaseEvent(ev); -} - -void KDockWidget::mouseMoveEvent(TQMouseEvent* mme) -{ - TQWidget::mouseMoveEvent(mme); -#ifdef BORDERLESS_WINDOWS - if (parent()) return; - - if (d->resizing) - { - switch (d->resizeMode) - { - case KDockWidgetPrivate::ResizeRight: - resize(mme->pos().x()+d->resizePos.x(),height()); - break; - case KDockWidgetPrivate::ResizeBottomRight: - resize(mme->pos().x()+d->resizePos.x(),mme->pos().y()+d->resizePos.y()); - break; - case KDockWidgetPrivate::ResizeBottom: - resize(width(),mme->pos().y()+d->resizePos.y()); - break; - default: - break; - } - return; - } - - - bool bbottom; - bool bleft; - bool bright; - bool btop; - int styleheight; - TQPoint mp; - mp=mme->pos(); - styleheight=2*tqstyle().tqpixelMetric(TQStyle::PM_DefaultFrameWidth,this); - bbottom=mp.y()>=height()-styleheight; - btop=mp.y()<=styleheight; - bleft=mp.x()<=styleheight; - bright=mp.x()>=width()-styleheight; - kdDebug(282)<<"mousemovevent"<<endl; - if (bright) - { - if (btop) setCursor(TQCursor(SizeBDiagCursor)); - else - if (bbottom) setCursor(TQCursor(SizeFDiagCursor)); - else setCursor(TQCursor(SizeHorCursor)); - } - else if (bleft) - { - if (btop) setCursor(TQCursor(SizeFDiagCursor)); - else - if (bbottom) setCursor(TQCursor(SizeBDiagCursor)); - else setCursor(TQCursor(SizeHorCursor)); - } - else - if (bbottom || btop) setCursor(TQCursor(SizeVerCursor)); - else setCursor(TQCursor(ArrowCursor)); -#endif -} - -void KDockWidget::setLatestKDockContainer(TQWidget* container) -{ - if (container) - { - if (tqt_dynamic_cast<KDockContainer*>(container)) - d->container=container; - else - d->container=0; - } -} - -TQWidget* KDockWidget::latestKDockContainer() -{ - if (!(d->container)) return 0; - if (tqt_dynamic_cast<KDockContainer*>(d->container.operator->())) return d->container; - return 0; -} - - - -KDockWidgetAbstractHeader *KDockWidget::getHeader() { - return header; -} - -void KDockWidget::setHeader( KDockWidgetAbstractHeader* h ) -{ - if ( !h ) return; - - if ( header ){ - delete header; - delete layout; - header = h; - layout = new TQVBoxLayout( this ); - layout->setResizeMode( TQLayout::Minimum ); - layout->addWidget( header ); - setWidget( widget ); - } else { - header = h; - layout->addWidget( header ); - } - kdDebug(282)<<caption()<<": KDockWidget::setHeader"<<endl; - setEnableDocking(eDocking); -} - -void KDockWidget::setEnableDocking( int pos ) -{ - eDocking = pos; - if( header ) { - if (header->inherits( "KDockWidgetHeader" ) ) - ( ( KDockWidgetHeader* ) header )->showUndockButton( pos & DockDesktop ); - updateHeader(); - } -} - -void KDockWidget::updateHeader() -{ - if ( parent() ){ -#ifdef BORDERLESS_WINDOWS - layout->setMargin(0); - setMouseTracking(false); - setCursor(TQCursor(ArrowCursor)); -#endif - - if ( (TQT_BASE_OBJECT(parent()) == TQT_BASE_OBJECT(manager->main)) || isGroup || (eDocking == KDockWidget::DockNone) ){ - header->hide(); - } else { - header->setTopLevel( false ); - if (widget && tqt_dynamic_cast<KDockContainer*>(widget)) - header->hide(); - else - header->show(); - } - } else { - header->setTopLevel( true ); - header->show(); -#ifdef BORDERLESS_WINDOWS - layout->setMargin(2*tqstyle().tqpixelMetric(TQStyle::PM_DefaultFrameWidth,this)); - setMouseTracking(true); -#endif - } -} - -void KDockWidget::applyToWidget( TQWidget* s, const TQPoint& p ) -{ - if ( TQT_BASE_OBJECT(parent()) != TQT_BASE_OBJECT(s) ) - { - hide(); - reparent(s, 0, TQPoint(0,0), false); - } - - if ( s && s->inherits("KDockMainWindow") ){ - ((KDockMainWindow*)s)->setView( this ); - } - - if ( manager && s == manager->main ){ - setGeometry( TQRect(TQPoint(0,0), manager->main->geometry().size()) ); - } - - if ( !s ) - { - move(p); - -#ifndef NO_KDE2 -#ifdef Q_WS_X11 - if (d->transient && d->_parent) - XSetTransientForHint( qt_xdisplay(), winId(), d->_parent->winId() ); - -#ifdef BORDERLESS_WINDOWS - KWin::setType( winId(), NET::Override); //d->windowType ); -// setWFlags(WStyle_Customize | WStyle_NoBorder | WStyle_Tool); -#else - KWin::setType( winId(), d->windowType ); -#endif // BORDERLESS_WINDOW -#endif // Q_WS_X11 -#endif - - } - updateHeader(); - - setIcon(*pix); -} - -void KDockWidget::show() -{ - if ( parent() || manager->main->isVisible() ) - if ( !parent() ){ - emit manager->setDockDefaultPos( this ); - emit setDockDefaultPos(); - if ( parent() ){ - makeDockVisible(); - } else { - TQWidget::show(); - } - } else { - TQWidget::show(); - } -} - -#ifndef NO_KDE2 - -void KDockWidget::setDockWindowType (NET::WindowType windowType) -{ - d->windowType = windowType; - applyToWidget( parentWidget(), TQPoint(0,0) ); -} - -#endif - -void KDockWidget::setDockWindowTransient (TQWidget *parent, bool transientEnabled) -{ - d->_parent = parent; - d->transient = transientEnabled; - applyToWidget( parentWidget(), TQPoint(0,0) ); -} - -TQWidget *KDockWidget::transientTo() { - if (d->transient && d->_parent) return d->_parent; else return 0; -} - -bool KDockWidget::event( TQEvent *event ) -{ - switch ( event->type() ) - { - #undef FocusIn - case TQEvent::FocusIn: - if (widget && !d->pendingFocusInEvent) { - d->pendingFocusInEvent = true; - widget->setFocus(); - } - d->pendingFocusInEvent = false; - break; - case TQEvent::ChildRemoved: - if ( widget == ((TQChildEvent*)event)->child() ) widget = 0L; - break; - case TQEvent::Show: - if ( widget ) widget->show(); - emit manager->change(); - break; - case TQEvent::Hide: - if ( widget ) widget->hide(); - emit manager->change(); - break; - case TQEvent::CaptionChange: - if ( parentWidget() ){ - if ( parent()->inherits("KDockSplitter") ){ - ((KDockSplitter*)(parent()))->updateName(); - } - if ( parentDockTabGroup() ){ - setDockTabName( parentDockTabGroup() ); - parentDockTabGroup()->setTabLabel( this, tabPageLabel() ); - } - } - break; - case TQEvent::Close: - emit iMBeingClosed(); - break; - default: - break; - } - return TQWidget::event( event ); -} - -KDockWidget *KDockWidget::findNearestDockWidget(DockPosition pos) -{ - if (!parent()) return 0; - if (!parent()->inherits("KDockSplitter")) return 0; - Orientation orientation=((pos==DockLeft) || (pos==DockRight)) ? Qt::Vertical:Qt::Horizontal; - if (((KDockSplitter*)(parent()))->orientation()==orientation) - { - KDockWidget *neighbor= - ((pos==DockLeft)||(pos==DockTop))? - static_cast<KDockWidget*>(((KDockSplitter*)(parent()))->getFirst()): - static_cast<KDockWidget*>(((KDockSplitter*)(parent()))->getLast()); - - if (neighbor==this) - return (static_cast<KDockWidget*>(TQT_TQWIDGET(parent()->parent()))->findNearestDockWidget(pos)); - else - if (neighbor->getWidget() && (::tqqt_cast<KDockTabGroup*>(neighbor->getWidget()))) - return (KDockWidget*)(((KDockTabGroup*)neighbor->getWidget())->page(0)); - else - return neighbor; - } - else - return (static_cast<KDockWidget*>(TQT_TQWIDGET(parent()->parent()))->findNearestDockWidget(pos)); - - return 0; -} - - -KDockWidget* KDockWidget::manualDock( KDockWidget* target, DockPosition dockPos, int spliPos, TQPoint pos, bool check, int tabIndex ) -{ - if (this == target) - return 0L; // docking to itself not possible - -// kdDebug(282)<<"manualDock called "<<endl; - bool success = true; // tested flag - - // Check to make sure that we can dock in to the position wee - // were told to dock in to - if ( !(eDocking & (int)dockPos) ){ - success = false; -// kdDebug(282)<<"KDockWidget::manualDock(): success = false (1)"<<endl; - } - - // fix for apps which use a value > 100%. The splitter position must be between 0..100 - // The old behavior on high resolution was 0..10000. So likely the value is >100. - if (spliPos > 100) { - spliPos = spliPos / 100; - kdDebug(282) << "KDockWidget::manualDock(): fix splitter position: " << spliPos << endl; - } - - KDockWidget *tmpTarget = 0; - switch (dockPos) { - case DockLeft: - tmpTarget=dockManager()->d->leftContainer; - break; - case DockRight: - tmpTarget=dockManager()->d->rightContainer; - break; - case DockBottom: - tmpTarget=dockManager()->d->bottomContainer; - break; - case DockTop: - tmpTarget=dockManager()->d->topContainer; - break; - default: - tmpTarget = 0; - } - - //If we're not the target, and the target is our dock manager's main window - //dock into the temp target as chosen above - if ( tmpTarget && target && this != tmpTarget && target == dockManager()->d->mainDockWidget ) - return manualDock(tmpTarget,DockCenter,spliPos,pos,check,tabIndex); - - // check if the target allows us to oock into the requested position - if ( target && !(target->sDocking & (int)dockPos) ){ - success = false; -// kdDebug(282)<<"KDockWidget::manualDock(): success = false (2)"<<endl; - } - - /* if we have a parent, and it's not a KDockSplitter, and we don't have a parent - * dock tab group, and our parent isn't a KDockContainer, and we have no explicit - * parent dock container...we can't do much yet */ - if ( parent() && !parent()->inherits("KDockSplitter") && !parentDockTabGroup() && - !(tqt_dynamic_cast<KDockContainer*>(parent())) && !parentDockContainer()){ -// kdDebug(282)<<"KDockWidget::manualDock(): success = false (3)"<<endl; -// kdDebug(282)<<parent()->name()<<endl; - success = false; - } - - /* If all of our attempts to dock back so far have failed and we have a target - * and we're not being called recursively (i guess that's what check is for) - * then attempt to dock back to ourselves. */ - if ( !success ){ - // try to make another manualDock - KDockWidget* dock_result = 0L; - if ( target && !check ){ - KDockWidget::DockPosition another__dockPos = KDockWidget::DockNone; - switch ( dockPos ){ - case KDockWidget::DockLeft : another__dockPos = KDockWidget::DockRight ; break; - case KDockWidget::DockRight : another__dockPos = KDockWidget::DockLeft ; break; - case KDockWidget::DockTop : another__dockPos = KDockWidget::DockBottom; break; - case KDockWidget::DockBottom: another__dockPos = KDockWidget::DockTop ; break; - default: break; - } - dock_result = target->manualDock( this, another__dockPos, spliPos, pos, true, tabIndex ); - } - return dock_result; - } - // end check block - - d->blockHasUndockedSignal = true; - undock(); - d->blockHasUndockedSignal = false; - - //we have no docking target, so we're undocking - if ( !target ){ - move( pos ); - show(); - emit manager->change(); - return this; - } - -// kdDebug(282)<<"Looking for KDockTabGroup"<<endl; - KDockTabGroup* parentTab = target->parentDockTabGroup(); - if ( parentTab ){ - // add to existing TabGroup - applyToWidget( parentTab ); - parentTab->insertTab( this, icon() ? *icon() : TQPixmap(), - tabPageLabel(), tabIndex ); - - TQWidget *wantTransient=parentTab->transientTo(); - target->setDockWindowTransient(wantTransient,wantTransient); - - setDockTabName( parentTab ); - if( !toolTipStr.isEmpty()) - parentTab->setTabToolTip( this, toolTipStr); - - currentDockPos = KDockWidget::DockCenter; - emit manager->change(); - return (KDockWidget*)parentTab->parent(); - } - else - { -// kdDebug(282)<<"Looking for KDockContainer"<<endl; - TQWidget *contWid=target->parentDockContainer(); - if (!contWid) contWid=target->widget; - if (contWid) - { - KDockContainer *cont=tqt_dynamic_cast<KDockContainer*>(contWid); - if (cont) - { - if (latestKDockContainer() && (latestKDockContainer()!=contWid)) { - KDockContainer* dc = tqt_dynamic_cast<KDockContainer*>(latestKDockContainer()); - if (dc) { - dc->removeWidget(this); - } - } -// kdDebug(282)<<"KDockContainerFound"<<endl; - applyToWidget( contWid ); - cont->insertWidget( this, icon() ? *icon() : TQPixmap(), - tabPageLabel(), tabIndex ); - setLatestKDockContainer(contWid); -// setDockTabName( parentTab ); - if( !toolTipStr.isEmpty()) - cont->setToolTip( this, toolTipStr); - - currentDockPos = KDockWidget::DockCenter; - emit manager->change(); - return (KDockWidget*)(cont->parentDockWidget()); - - } - } - } - - // create a new dockwidget that will contain the target and this - TQWidget* parentDock = target->parentWidget(); - KDockWidget* newDock = new KDockWidget( manager, "tempName", TQPixmap(TQString("")), parentDock ); - newDock->currentDockPos = target->currentDockPos; - - if ( dockPos == KDockWidget::DockCenter ){ - newDock->isTabGroup = true; - } else { - newDock->isGroup = true; - } - newDock->eDocking = (target->eDocking & eDocking) & (~(int)KDockWidget::DockCenter); - - newDock->applyToWidget( parentDock ); - - if ( !parentDock ){ - // dock to a toplevel dockwidget means newDock is toplevel now - newDock->move( target->frameGeometry().topLeft() ); - newDock->resize( target->geometry().size() ); - if ( target->isVisibleToTLW() ) newDock->show(); - } - - // redirect the dockback button to the new dockwidget - if( target->formerBrotherDockWidget ) { - newDock->setFormerBrotherDockWidget(target->formerBrotherDockWidget); - if( formerBrotherDockWidget ) - target->loseFormerBrotherDockWidget(); - } - newDock->formerDockPos = target->formerDockPos; - - - // HERE SOMETING CREATING CONTAINERS SHOULD BE ADDED !!!!! - if ( dockPos == KDockWidget::DockCenter ) - { - KDockTabGroup* tab = new KDockTabGroup( newDock, "_dock_tab"); - TQObject::connect(tab, TQT_SIGNAL(currentChanged(TQWidget*)), d, TQT_SLOT(slotFocusEmbeddedWidget(TQWidget*))); - newDock->setWidget( tab ); - - target->applyToWidget( tab ); - applyToWidget( tab ); - - - tab->insertTab( target, target->icon() ? *(target->icon()) : TQPixmap(), - target->tabPageLabel() ); - - - - if( !target->toolTipString().isEmpty()) - tab->setTabToolTip( target, target->toolTipString()); - - tab->insertTab( this, icon() ? *icon() : TQPixmap(), - tabPageLabel(), tabIndex ); - - TQRect geom=newDock->geometry(); - TQWidget *wantTransient=tab->transientTo(); - newDock->setDockWindowTransient(wantTransient,wantTransient); - newDock->setGeometry(geom); - - if( !toolTipString().isEmpty()) - tab->setTabToolTip( this, toolTipString()); - - setDockTabName( tab ); - tab->show(); - - currentDockPos = DockCenter; - target->formerDockPos = target->currentDockPos; - target->currentDockPos = DockCenter; - } - else { - // if to dock not to the center of the target dockwidget, - // dock to newDock - KDockSplitter* panner = 0L; - if ( dockPos == KDockWidget::DockTop || dockPos == KDockWidget::DockBottom ) panner = new KDockSplitter( newDock, "_dock_split_", Qt::Horizontal, spliPos ); - if ( dockPos == KDockWidget::DockLeft || dockPos == KDockWidget::DockRight ) panner = new KDockSplitter( newDock, "_dock_split_", Qt::Vertical , spliPos ); - newDock->setWidget( panner ); - - panner->setOpaqueResize(manager->splitterOpaqueResize()); - panner->setKeepSize(manager->splitterKeepSize()); - panner->setFocusPolicy( TQ_NoFocus ); - target->applyToWidget( panner ); - applyToWidget( panner ); - target->formerDockPos = target->currentDockPos; - if ( dockPos == KDockWidget::DockRight) { - panner->activate( target, this ); - currentDockPos = KDockWidget::DockRight; - target->currentDockPos = KDockWidget::DockLeft; - } - else if( dockPos == KDockWidget::DockBottom) { - panner->activate( target, this ); - currentDockPos = KDockWidget::DockBottom; - target->currentDockPos = KDockWidget::DockTop; - } - else if( dockPos == KDockWidget::DockTop) { - panner->activate( this, target ); - currentDockPos = KDockWidget::DockTop; - target->currentDockPos = KDockWidget::DockBottom; - } - else if( dockPos == KDockWidget::DockLeft) { - panner->activate( this, target ); - currentDockPos = KDockWidget::DockLeft; - target->currentDockPos = KDockWidget::DockRight; - } - target->show(); - show(); - panner->show(); - } - - if ( parentDock ){ - if ( parentDock->inherits("KDockSplitter") ){ - KDockSplitter* sp = (KDockSplitter*)parentDock; - sp->deactivate(); - if ( sp->getFirst() == target ) - sp->activate( newDock, 0L ); - else - sp->activate( 0L, newDock ); - } - } - - newDock->show(); - emit target->docking( this, dockPos ); - emit manager->replaceDock( target, newDock ); - emit manager->change(); - - return newDock; -} - -KDockTabGroup* KDockWidget::parentDockTabGroup() const -{ - if ( !parent() ) return 0L; - TQWidget* candidate = parentWidget()->parentWidget(); - if ( candidate && candidate->inherits("KDockTabGroup") ) return (KDockTabGroup*)candidate; - return 0L; -} - -TQWidget *KDockWidget::parentDockContainer() const -{ - if (!parent()) return 0L; - TQWidget* candidate = parentWidget()->parentWidget(); - if (candidate && tqt_dynamic_cast<KDockContainer*>(candidate)) return candidate; - return 0L; -} - - -void KDockWidget::setForcedFixedWidth(int w) -{ - d->forcedWidth=w; - setFixedWidth(w); - if (!parent()) return; - if (parent()->inherits("KDockSplitter")) - ::tqqt_cast<KDockSplitter*>(parent())->setForcedFixedWidth(this,w); -} - -void KDockWidget::setForcedFixedHeight(int h) -{ - d->forcedHeight=h; - setFixedHeight(h); - if (!parent()) return; - if (parent()->inherits("KDockSplitter")) - ::tqqt_cast<KDockSplitter*>(parent())->setForcedFixedHeight(this,h); -} - -int KDockWidget::forcedFixedWidth() -{ - return d->forcedWidth; -} - -int KDockWidget::forcedFixedHeight() -{ - return d->forcedHeight; -} - -void KDockWidget::restoreFromForcedFixedSize() -{ - d->forcedWidth=-1; - d->forcedHeight=-1; - setMinimumWidth(0); - setMaximumWidth(32000); - setMinimumHeight(0); - setMaximumHeight(32000); - if (!parent()) return; - if (parent()->inherits("KDockSplitter")) - ::tqqt_cast<KDockSplitter*>(parent())->restoreFromForcedFixedSize(this); -} - -void KDockWidget::toDesktop() -{ - TQPoint p = mapToGlobal( TQPoint( -30, -30 ) ); - if( p.x( ) < 0 ) - p.setX( 0 ); - if( p.y( ) < 0 ) - p.setY( 0 ); - manualDock( 0, DockDesktop, 50, p ); -} - -KDockWidget::DockPosition KDockWidget::currentDockPosition() const -{ - return currentDockPos; -} - -void KDockWidget::undock() -{ -// kdDebug(282)<<"KDockWidget::undock()"<<endl; - - manager->d->dragRect = TQRect (); - manager->drawDragRectangle (); - - TQWidget* parentW = parentWidget(); - if ( !parentW ){ - hide(); - if (!d->blockHasUndockedSignal) - emit hasUndocked(); - return; - } - - formerDockPos = currentDockPos; - currentDockPos = KDockWidget::DockDesktop; - - manager->blockSignals(true); - manager->undockProcess = true; - - bool isV = parentW->isVisibleToTLW(); - - //UNDOCK HAS TO BE IMPLEMENTED CORRECTLY :) - KDockTabGroup* parentTab = parentDockTabGroup(); - if ( parentTab ){ - d->index = parentTab->indexOf( this); // memorize the page position in the tab widget - parentTab->removePage( this ); -/* - TQWidget *wantTransient=parentTab->transientTo(); - target->setDockWindowTransient(wantTransient,wantTransient); - */ - setFormerBrotherDockWidget((KDockWidget*)parentTab->page(0)); - applyToWidget( 0L ); - if ( parentTab->count() == 1 ){ - - // last subdock widget in the tab control - KDockWidget* lastTab = (KDockWidget*)parentTab->page(0); - parentTab->removePage( lastTab ); -/* TQWidget *wantTransient=parentTab->transientTo(); - target->setDockWindowTransient(wantTransient,wantTransient);*/ - - lastTab->applyToWidget( 0L ); - lastTab->move( parentTab->mapToGlobal(parentTab->frameGeometry().topLeft()) ); - - // KDockTabGroup always have a parent that is a KDockWidget - KDockWidget* parentOfTab = (KDockWidget*)parentTab->parent(); - delete parentTab; // KDockTabGroup - - TQWidget* parentOfDockWidget = parentOfTab->parentWidget(); - if ( !parentOfDockWidget ){ - if ( isV ) lastTab->show(); - } else { - if ( parentOfDockWidget->inherits("KDockSplitter") ){ - KDockSplitter* split = (KDockSplitter*)parentOfDockWidget; - lastTab->applyToWidget( split ); - split->deactivate(); - if ( split->getFirst() == parentOfTab ){ - split->activate( lastTab ); - if ( ((KDockWidget*)split->parent())->splitterOrientation == Qt::Vertical ) - emit ((KDockWidget*)split->getAnother(parentOfTab))->docking( parentOfTab, KDockWidget::DockLeft ); - else - emit ((KDockWidget*)split->getAnother(parentOfTab))->docking( parentOfTab, KDockWidget::DockTop ); - } else { - split->activate( 0L, lastTab ); - if ( ((KDockWidget*)split->parent())->splitterOrientation == Qt::Vertical ) - emit ((KDockWidget*)split->getAnother(parentOfTab))->docking( parentOfTab, KDockWidget::DockRight ); - else - emit ((KDockWidget*)split->getAnother(parentOfTab))->docking( parentOfTab, KDockWidget::DockBottom ); - } - split->show(); - } else { - lastTab->applyToWidget( parentOfDockWidget ); - } - lastTab->show(); - } - manager->blockSignals(false); - emit manager->replaceDock( parentOfTab, lastTab ); - lastTab->currentDockPos = parentOfTab->currentDockPos; - emit parentOfTab->iMBeingClosed(); - manager->blockSignals(true); - delete parentOfTab; - - } else { - setDockTabName( parentTab ); - } - } else { - /*********************************************************************************************/ - //TQWidget* containerWidget = (TQWidget*)parent(); - bool undockedFromContainer=false; - if (d->container) - { -// kdDebug(282)<<"undocked from dockcontainer"<<endl; - undockedFromContainer=true; - KDockContainer* dc = tqt_dynamic_cast<KDockContainer*>(d->container.operator->()); - if (dc) { - dc->undockWidget(this); - setFormerBrotherDockWidget(dc->parentDockWidget()); - } - applyToWidget( 0L ); - } - if (!undockedFromContainer) { -/*********************************************************************************************/ - if ( parentW->inherits("KDockSplitter") ){ - KDockSplitter* parentSplitterOfDockWidget = (KDockSplitter*)parentW; - d->splitPosInPercent = parentSplitterOfDockWidget->separatorPosInPercent(); - - KDockWidget* secondWidget = (KDockWidget*)parentSplitterOfDockWidget->getAnother( this ); - KDockWidget* group = (KDockWidget*)parentSplitterOfDockWidget->parentWidget(); - setFormerBrotherDockWidget(secondWidget); - applyToWidget( 0L ); - group->hide(); - - if ( !group->parentWidget() ){ - secondWidget->applyToWidget( 0L, group->frameGeometry().topLeft() ); - secondWidget->resize( group->width(), group->height() ); - } else { - TQWidget* obj = group->parentWidget(); - secondWidget->applyToWidget( obj ); - if ( obj->inherits("KDockSplitter") ){ - KDockSplitter* parentOfGroup = (KDockSplitter*)obj; - parentOfGroup->deactivate(); - - if ( parentOfGroup->getFirst() == group ) - parentOfGroup->activate( secondWidget ); - else - parentOfGroup->activate( 0L, secondWidget ); - } - } - secondWidget->currentDockPos = group->currentDockPos; - secondWidget->formerDockPos = group->formerDockPos; - delete parentSplitterOfDockWidget; - manager->blockSignals(false); - emit manager->replaceDock( group, secondWidget ); - emit group->iMBeingClosed(); - manager->blockSignals(true); - delete group; - - if ( isV ) secondWidget->show(); - } else { - if (!d->pendingDtor) { - // don't reparent in the dtor of this - applyToWidget( 0L ); - } - } -/*********************************************************************************************/ - } - } - manager->blockSignals(false); - if (!d->blockHasUndockedSignal) - emit manager->change(); - manager->undockProcess = false; - - if (!d->blockHasUndockedSignal) - emit hasUndocked(); -} - -void KDockWidget::setWidget( TQWidget* mw ) -{ - if ( !mw ) return; - - if ( TQT_BASE_OBJECT(mw->parent()) != TQT_BASE_OBJECT(this) ){ - mw->reparent(this, 0, TQPoint(0,0), false); - } - -#ifdef BORDERLESS_WINDOWS - if (!mw->ownCursor()) mw->setCursor(TQCursor(ArrowCursor)); -#endif - widget = mw; - delete layout; - - layout = new TQVBoxLayout( this ); - layout->setResizeMode( TQLayout::Minimum ); - - KDockContainer* dc = tqt_dynamic_cast<KDockContainer*>(widget); - if (dc) - { - d->isContainer=true; - manager->d->containerDocks.append(TQT_TQOBJECT(this)); - } - else - { - d->isContainer=false; - } - - { - header->show(); - layout->addWidget( header ); - layout->addWidget( widget,1 ); - } - updateHeader(); - emit widgetSet(mw); -} - -void KDockWidget::setDockTabName( KDockTabGroup* tab ) -{ - TQString listOfName; - TQString listOfCaption; - for ( int i = 0; i < tab->count(); ++i ) { - TQWidget *w = tab->page( i ); - listOfCaption.append( w->caption() ).append(","); - listOfName.append( w->name() ).append(","); - } - listOfCaption.remove( listOfCaption.length()-1, 1 ); - listOfName.remove( listOfName.length()-1, 1 ); - - tab->parentWidget()->setName( listOfName.utf8() ); - tab->parentWidget()->setCaption( listOfCaption ); - - tab->parentWidget()->tqrepaint( false ); // KDockWidget->tqrepaint - if ( tab->parentWidget()->parent() ) - if ( tab->parentWidget()->parent()->inherits("KDockSplitter") ) - ((KDockSplitter*)(tab->parentWidget()->parent()))->updateName(); -} - -bool KDockWidget::mayBeHide() const -{ - bool f = (TQT_BASE_OBJECT(parent()) != TQT_BASE_OBJECT(manager->main)); - return ( !isGroup && !isTabGroup && f && isVisible() && ( eDocking != (int)KDockWidget::DockNone ) ); -} - -bool KDockWidget::mayBeShow() const -{ - bool f = (TQT_BASE_OBJECT(parent()) != TQT_BASE_OBJECT(manager->main)); - return ( !isGroup && !isTabGroup && f && !isVisible() ); -} - -void KDockWidget::changeHideShowState() -{ - if ( mayBeHide() ){ - undock(); - return; - } - - if ( mayBeShow() ){ - if ( manager->main->inherits("KDockMainWindow") ){ - ((KDockMainWindow*)manager->main)->makeDockVisible(this); - } else { - makeDockVisible(); - } - } -} - -void KDockWidget::makeDockVisible() -{ - if ( parentDockTabGroup() ){ - parentDockTabGroup()->showPage( this ); - } - if (parentDockContainer()) { - TQWidget *contWid=parentDockContainer(); - KDockContainer *x = tqt_dynamic_cast<KDockContainer*>(contWid); - if (x) { - x->showWidget(this); - } - } - if ( isVisible() ) return; - - TQWidget* p = parentWidget(); - while ( p ){ - if ( !p->isVisible() ) - p->show(); - p = p->parentWidget(); - } - if( !parent() ) // is undocked - dockBack(); - show(); -} - -void KDockWidget::setFormerBrotherDockWidget(KDockWidget *dockWidget) -{ - formerBrotherDockWidget = dockWidget; - if( formerBrotherDockWidget ) - TQObject::connect( formerBrotherDockWidget, TQT_SIGNAL(iMBeingClosed()), - this, TQT_SLOT(loseFormerBrotherDockWidget()) ); -} - -void KDockWidget::loseFormerBrotherDockWidget() -{ - if( formerBrotherDockWidget ) - TQObject::disconnect( formerBrotherDockWidget, TQT_SIGNAL(iMBeingClosed()), - this, TQT_SLOT(loseFormerBrotherDockWidget()) ); - formerBrotherDockWidget = 0L; - tqrepaint(); -} - -void KDockWidget::dockBack() -{ - if( formerBrotherDockWidget) { - // search all children if it tries to dock back to a child - bool found = false; - TQObjectList* cl = queryList("KDockWidget"); - TQObjectListIt it( *cl ); - TQObject * obj; - while ( !found && (obj=it.current()) != 0 ) { - ++it; - TQWidget* widg = (TQWidget*)obj; - if( widg == formerBrotherDockWidget) - found = true; - } - delete cl; - - if( !found) { - // can dock back to the former brother dockwidget - manualDock( formerBrotherDockWidget, formerDockPos, d->splitPosInPercent, TQPoint(0,0), false, d->index); - formerBrotherDockWidget = 0L; - makeDockVisible(); - return; - } - } - - // else dockback to the dockmainwindow (default behavior) - manualDock( ((KDockMainWindow*)manager->main)->getMainDockWidget(), formerDockPos, d->splitPosInPercent, TQPoint(0,0), false, d->index); - formerBrotherDockWidget = 0L; - if (parent()) - makeDockVisible(); -} - -bool KDockWidget::isDockBackPossible() const -{ - if( !(formerBrotherDockWidget) || !(formerBrotherDockWidget->dockSite() & formerDockPos)) - return false; - else - return true; -} - -/**************************************************************************************/ - - -KDockManager::KDockManager( TQWidget* mainWindow , const char* name ) -:TQObject( mainWindow, name ) - ,main(mainWindow) - ,currentDragWidget(0L) - ,currentMoveWidget(0L) - ,childDockWidgetList(0L) - ,autoCreateDock(0L) - ,storeW(0) - ,storeH(0) - ,dragging(false) - ,undockProcess(false) - ,dropCancel(true) -{ - d = new KDockManagerPrivate; - - d->readyToDrag = false; - d->mainDockWidget=0; - -#ifndef NO_KDE2 - d->splitterOpaqueResize = KGlobalSettings::opaqueResize(); -#else - d->splitterOpaqueResize = false; -#endif - - d->splitterKeepSize = false; - d->splitterHighResolution = false; - d->m_readDockConfigMode = WrapExistingWidgetsOnly; // default as before - - main->installEventFilter( this ); - - undockProcess = false; - - menuData = new TQPtrList<MenuDockData>; - menuData->setAutoDelete( true ); - menuData->setAutoDelete( true ); - -#ifndef NO_KDE2 - menu = new KPopupMenu(); -#else - menu = new TQPopupMenu(); -#endif - - connect( menu, TQT_SIGNAL(aboutToShow()), TQT_SLOT(slotMenuPopup()) ); - connect( menu, TQT_SIGNAL(activated(int)), TQT_SLOT(slotMenuActivated(int)) ); - - childDock = new TQObjectList(); - childDock->setAutoDelete( false ); -} - - -void KDockManager::setMainDockWidget2(KDockWidget *w) -{ - d->mainDockWidget=w; -} - -KDockManager::~KDockManager() -{ - delete menuData; - delete menu; - - TQObjectListIt it( *childDock ); - KDockWidget * obj; - - while ( (obj=(KDockWidget*)it.current()) ) { - delete obj; - } - delete childDock; - delete d; - d=0; -} - -void KDockManager::activate() -{ - TQObjectListIt it( *childDock ); - KDockWidget * obj; - - while ( (obj=(KDockWidget*)it.current()) ) { - ++it; - if ( obj->widget ) obj->widget->show(); - if ( !obj->parentDockTabGroup() ){ - obj->show(); - } - } - if ( !main->inherits(TQDIALOG_OBJECT_NAME_STRING) ) main->show(); -} - -bool KDockManager::eventFilter( TQObject *obj, TQEvent *event ) -{ - - if ( obj->inherits("KDockWidgetAbstractHeaderDrag") ){ - KDockWidget* pDockWdgAtCursor = 0L; - KDockWidget* curdw = ((KDockWidgetAbstractHeaderDrag*)obj)->dockWidget(); - switch ( event->type() ){ - case TQEvent::MouseButtonDblClick: - if (curdw->currentDockPos == KDockWidget::DockDesktop) curdw->dockBack(); - else - { - curdw->toDesktop(); - // curdw->manualDock (0, KDockWidget::DockDesktop); - } - break; - - case TQEvent::MouseButtonPress: - if ( ((TQMouseEvent*)event)->button() == Qt::LeftButton ){ - if ( curdw->eDocking != (int)KDockWidget::DockNone ){ - dropCancel = true; - curdw->setFocus(); - tqApp->processOneEvent(); - - currentDragWidget = curdw; - currentMoveWidget = 0L; - childDockWidgetList = new TQWidgetList(); - childDockWidgetList->append( curdw ); - findChildDockWidget( curdw, childDockWidgetList ); - - //d->oldDragRect = TQRect(); should fix rectangle not erased problem - d->dragRect = TQRect(curdw->geometry()); - TQPoint p = curdw->mapToGlobal(TQPoint(0,0)); - d->dragRect.moveTopLeft(p); - drawDragRectangle(); - d->readyToDrag = true; - - d->dragOffset = TQCursor::pos()-currentDragWidget->mapToGlobal(TQPoint(0,0)); - } - - } - break; - case TQEvent::MouseButtonRelease: - if ( ((TQMouseEvent*)event)->button() == Qt::LeftButton ){ - if ( dragging ){ - if ( !dropCancel ) - drop(); - else - cancelDrop(); - } - if (d->readyToDrag) { - d->readyToDrag = false; - //d->oldDragRect = TQRect(); should fix rectangle not erased problem - d->dragRect = TQRect(curdw->geometry()); - TQPoint p = curdw->mapToGlobal(TQPoint(0,0)); - d->dragRect.moveTopLeft(p); - drawDragRectangle(); - currentDragWidget = 0L; - delete childDockWidgetList; - childDockWidgetList = 0L; - } - dragging = false; - dropCancel = true; - } - break; - case TQEvent::MouseMove: - if ( dragging ) { - -#ifdef BORDERLESS_WINDOWS -//BEGIN TEST - KDockWidget *oldMoveWidget; - if (!curdw->parent()) - { - curdw->move(TQCursor::pos()-d->dragOffset); - pDockWdgAtCursor = findDockWidgetAt( TQCursor::pos()-TQPoint(0,d->dragOffset.y()+3) ); - oldMoveWidget = currentMoveWidget; - } - else - { - pDockWdgAtCursor = findDockWidgetAt( TQCursor::pos() ); - oldMoveWidget = currentMoveWidget; - } -//END TEST -#else - pDockWdgAtCursor = findDockWidgetAt( TQCursor::pos() ); - KDockWidget* oldMoveWidget = currentMoveWidget; -#endif - - if ( currentMoveWidget && pDockWdgAtCursor == currentMoveWidget ) { //move - dragMove( currentMoveWidget, currentMoveWidget->mapFromGlobal( TQCursor::pos() ) ); - break; - } else { - if (dropCancel && curdw) { - d->dragRect = TQRect(curdw->geometry()); - TQPoint p = curdw->mapToGlobal(TQPoint(0,0)); - d->dragRect.moveTopLeft(p); - }else - d->dragRect = TQRect(); - - drawDragRectangle(); - } - - if ( !pDockWdgAtCursor && !(curdw->eDocking & (int)KDockWidget::DockDesktop) ){ - // just moving at the desktop - currentMoveWidget = pDockWdgAtCursor; - curPos = KDockWidget::DockDesktop; - } else { - if ( oldMoveWidget && pDockWdgAtCursor != currentMoveWidget ) { //leave - currentMoveWidget = pDockWdgAtCursor; - curPos = KDockWidget::DockDesktop; - } - } - - if ( oldMoveWidget != pDockWdgAtCursor && pDockWdgAtCursor ) { //enter pDockWdgAtCursor - currentMoveWidget = pDockWdgAtCursor; - curPos = KDockWidget::DockDesktop; - } - } else { - if (d->readyToDrag) { - d->readyToDrag = false; - } - if ( (((TQMouseEvent*)event)->state() == Qt::LeftButton) && - (curdw->eDocking != (int)KDockWidget::DockNone) ) { - startDrag( curdw); - } - } - break; - default: - break; - } - } - return TQObject::eventFilter( obj, event ); -} - -KDockWidget* KDockManager::findDockWidgetAt( const TQPoint& pos ) -{ - dropCancel = true; - - if (!currentDragWidget) - return 0L; // pointer access safety - - if (currentDragWidget->eDocking == (int)KDockWidget::DockNone ) return 0L; - - TQWidget* p = TQApplication::widgetAt( pos ); - if ( !p ) { - dropCancel = false; - return 0L; - } -#if defined(_OS_WIN32_) || defined(Q_OS_WIN32) - p = p->tqtopLevelWidget(); -#endif - TQWidget* w = 0L; - findChildDockWidget( w, p, p->mapFromGlobal(pos) ); - if ( !w ){ - if ( !p->inherits("KDockWidget") ) { - return 0L; - } - w = p; - } - if ( qt_find_obj_child( TQT_TQOBJECT(w), "KDockSplitter", "_dock_split_" ) ) return 0L; - if ( qt_find_obj_child( TQT_TQOBJECT(w), "KDockTabGroup", "_dock_tab" ) ) return 0L; - if (tqt_dynamic_cast<KDockContainer*>(w)) return 0L; - - if (!childDockWidgetList) return 0L; - if ( childDockWidgetList->find(w) != -1 ) return 0L; - if ( currentDragWidget->isGroup && ((KDockWidget*)w)->parentDockTabGroup() ) return 0L; - - KDockWidget* www = (KDockWidget*)w; - if ( www->sDocking == (int)KDockWidget::DockNone ) return 0L; - if( !www->widget ) - return 0L; - - KDockWidget::DockPosition curPos = KDockWidget::DockDesktop; - TQPoint cpos = www->mapFromGlobal( pos ); - - int ww = www->widget->width() / 3; - int hh = www->widget->height() / 3; - - if ( cpos.y() <= hh ){ - curPos = KDockWidget::DockTop; - } else - if ( cpos.y() >= 2*hh ){ - curPos = KDockWidget::DockBottom; - } else - if ( cpos.x() <= ww ){ - curPos = KDockWidget::DockLeft; - } else - if ( cpos.x() >= 2*ww ){ - curPos = KDockWidget::DockRight; - } else - curPos = KDockWidget::DockCenter; - - if ( !(www->sDocking & (int)curPos) ) return 0L; - if ( !(currentDragWidget->eDocking & (int)curPos) ) return 0L; - if ( www->manager != this ) return 0L; - - dropCancel = false; - return www; -} - -void KDockManager::findChildDockWidget( TQWidget*& ww, const TQWidget* p, const TQPoint& pos ) -{ - if ( !p->childrenListObject().isEmpty() ) { - TQWidget *w; - TQObjectListIt it( p->childrenListObject() ); - it.toLast(); - while ( it.current() ) { - if ( it.current()->isWidgetType() ) { - w = (TQWidget*)it.current(); - if ( w->isVisible() && w->tqgeometry().contains(pos) ) { - if ( w->inherits("KDockWidget") ) ww = w; - findChildDockWidget( ww, w, w->mapFromParent(pos) ); - return; - } - } - --it; - } - } - return; -} - -void KDockManager::findChildDockWidget( const TQWidget* p, TQWidgetList*& list ) -{ - if ( !p->childrenListObject().isEmpty() ) { - TQWidget *w; - TQObjectListIt it( p->childrenListObject() ); - it.toLast(); - while ( it.current() ) { - if ( it.current()->isWidgetType() ) { - w = (TQWidget*)it.current(); - if ( w->isVisible() ) { - if ( w->inherits("KDockWidget") ) list->append( w ); - findChildDockWidget( w, list ); - } - } - --it; - } - } - return; -} - -void KDockManager::startDrag( KDockWidget* w ) -{ - if(( w->currentDockPos == KDockWidget::DockLeft) || ( w->currentDockPos == KDockWidget::DockRight) - || ( w->currentDockPos == KDockWidget::DockTop) || ( w->currentDockPos == KDockWidget::DockBottom)) { - w->prevSideDockPosBeforeDrag = w->currentDockPos; - - if ( w->parentWidget()->inherits("KDockSplitter") ){ - KDockSplitter* parentSplitterOfDockWidget = (KDockSplitter*)(w->parentWidget()); - w->d->splitPosInPercent = parentSplitterOfDockWidget->separatorPosInPercent(); - } - } - - curPos = KDockWidget::DockDesktop; - dragging = true; - - TQApplication::setOverrideCursor(TQCursor(tqsizeAllCursor)); -} - -void KDockManager::dragMove( KDockWidget* dw, TQPoint pos ) -{ - TQPoint p = dw->mapToGlobal( dw->widget->pos() ); - KDockWidget::DockPosition oldPos = curPos; - - TQSize r = dw->widget->size(); - if ( dw->parentDockTabGroup() ){ - curPos = KDockWidget::DockCenter; - if ( oldPos != curPos ) { - d->dragRect.setRect( p.x()+2, p.y()+2, r.width()-4, r.height()-4 ); - } - return; - } - - int w = r.width() / 3; - int h = r.height() / 3; - - if ( pos.y() <= h ){ - curPos = KDockWidget::DockTop; - w = r.width(); - } else - if ( pos.y() >= 2*h ){ - curPos = KDockWidget::DockBottom; - p.setY( p.y() + 2*h ); - w = r.width(); - } else - if ( pos.x() <= w ){ - curPos = KDockWidget::DockLeft; - h = r.height(); - } else - if ( pos.x() >= 2*w ){ - curPos = KDockWidget::DockRight; - p.setX( p.x() + 2*w ); - h = r.height(); - } else - { - curPos = KDockWidget::DockCenter; - p.setX( p.x() + w ); - p.setY( p.y() + h ); - } - - if ( oldPos != curPos ) { - d->dragRect.setRect( p.x(), p.y(), w, h ); - drawDragRectangle(); - } -} - - -void KDockManager::cancelDrop() -{ - TQApplication::restoreOverrideCursor(); - - delete childDockWidgetList; - childDockWidgetList = 0L; - - d->dragRect = TQRect(); // cancel drawing - drawDragRectangle(); // only the old rect will be deleted -} - - -void KDockManager::drop() -{ - d->dragRect = TQRect(); // cancel drawing - drawDragRectangle(); // only the old rect will be deleted - - TQApplication::restoreOverrideCursor(); - - delete childDockWidgetList; - childDockWidgetList = 0L; - - if ( dropCancel ) return; - if ( !currentMoveWidget && (!(currentDragWidget->eDocking & (int)KDockWidget::DockDesktop)) ) { - d->dragRect = TQRect(); // cancel drawing - drawDragRectangle(); // only the old rect will be deleted - return; - } - if ( !currentMoveWidget && !currentDragWidget->parent() ) { - currentDragWidget->move( TQCursor::pos() - d->dragOffset ); - } - else { - // curPos is the current target DockPosition. - // currentDragWidget->prevSideDockPosBeforeDrag is where the dockwidget comes from. - // currentDragWidget->formerDockPos is the position *before* the dockwidget was in - // position currentDragWidget->prevSideDockPosBeforeDrag. - int splitPos = currentDragWidget->d->splitPosInPercent; - KDockWidget::DockPosition previousPosition = currentDragWidget->prevSideDockPosBeforeDrag; - -// kdDebug() << splitPos << endl; -// kdDebug() << "curPos: " << curPos << endl; -// kdDebug() << "formerDockPos: " << currentDragWidget->formerDockPos<< endl; -// kdDebug() << "prevSideDockPosBeforeDrag: " << currentDragWidget->prevSideDockPosBeforeDrag<< endl; - - // Now we *need* to "invert" the procentual value, if the dockwidget moves from top/left - // to bottom/right or vice versa. This keeps the dockwidget's size on its new position. - // A special case is, when the dock position was DockNone, then we have to look for the - // formerDockPos to get things right. - if( (curPos != previousPosition) - && (curPos != KDockWidget::DockCenter) && (curPos != KDockWidget::DockDesktop)) { - - if (previousPosition == KDockWidget::DockNone) - previousPosition = currentDragWidget->formerDockPos; - - switch( previousPosition ) { - case KDockWidget::DockLeft: - if(curPos != KDockWidget::DockTop && curPos != KDockWidget::DockLeft) - splitPos = 100 - splitPos; - break; - - case KDockWidget::DockRight: - if(curPos != KDockWidget::DockBottom && curPos != KDockWidget::DockRight) - splitPos = 100 - splitPos; - break; - - case KDockWidget::DockTop: - if(curPos != KDockWidget::DockLeft && curPos != KDockWidget::DockTop ) - splitPos = 100 - splitPos; - break; - - case KDockWidget::DockBottom: - if(curPos != KDockWidget::DockRight && curPos != KDockWidget::DockBottom ) - splitPos = 100 - splitPos; - break; - - default: break; - } - } - // set new prevSideDockPosBeforeDrag - currentDragWidget->prevSideDockPosBeforeDrag = curPos; - currentDragWidget->manualDock( currentMoveWidget, curPos , splitPos, TQCursor::pos() - d->dragOffset ); - currentDragWidget->makeDockVisible(); - } -} - - -static TQDomElement createStringEntry(TQDomDocument &doc, const TQString &tagName, const TQString &str) -{ - TQDomElement el = doc.createElement(tagName); - - el.appendChild(doc.createTextNode(str)); - return el; -} - - -static TQDomElement createBoolEntry(TQDomDocument &doc, const TQString &tagName, bool b) -{ - return createStringEntry(doc, tagName, TQString::tqfromLatin1(b? "true" : "false")); -} - - -static TQDomElement createNumberEntry(TQDomDocument &doc, const TQString &tagName, int n) -{ - return createStringEntry(doc, tagName, TQString::number(n)); -} - - -static TQDomElement createRectEntry(TQDomDocument &doc, const TQString &tagName, const TQRect &rect) -{ - TQDomElement el = doc.createElement(tagName); - - TQDomElement xel = doc.createElement("x"); - xel.appendChild(doc.createTextNode(TQString::number(rect.x()))); - el.appendChild(xel); - TQDomElement yel = doc.createElement("y"); - yel.appendChild(doc.createTextNode(TQString::number(rect.y()))); - el.appendChild(yel); - TQDomElement wel = doc.createElement("width"); - wel.appendChild(doc.createTextNode(TQString::number(rect.width()))); - el.appendChild(wel); - TQDomElement hel = doc.createElement("height"); - hel.appendChild(doc.createTextNode(TQString::number(rect.height()))); - el.appendChild(hel); - - return el; -} - - -static TQDomElement createListEntry(TQDomDocument &doc, const TQString &tagName, - const TQString &subTagName, const TQStrList &list) -{ - TQDomElement el = doc.createElement(tagName); - - TQStrListIterator it(list); - for (; it.current(); ++it) { - TQDomElement subel = doc.createElement(subTagName); - subel.appendChild(doc.createTextNode(TQString::tqfromLatin1(it.current()))); - el.appendChild(subel); - } - - return el; -} - - -static TQString stringEntry(TQDomElement &base, const TQString &tagName) -{ - return base.namedItem(tagName).firstChild().toText().data(); -} - - -static bool boolEntry(TQDomElement &base, const TQString &tagName) -{ - return base.namedItem(tagName).firstChild().toText().data() == "true"; -} - - -static int numberEntry(TQDomElement &base, const TQString &tagName) -{ - return stringEntry(base, tagName).toInt(); -} - - -static TQRect rectEntry(TQDomElement &base, const TQString &tagName) -{ - TQDomElement el = base.namedItem(tagName).toElement(); - - int x = numberEntry(el, "x"); - int y = numberEntry(el, "y"); - int width = numberEntry(el, "width"); - int height = numberEntry(el, "height"); - - return TQRect(x, y, width, height); -} - - -static TQStrList listEntry(TQDomElement &base, const TQString &tagName, const TQString &subTagName) -{ - TQStrList list; - - for( TQDomNode n = base.namedItem(tagName).firstChild(); !n.isNull(); n = n.nextSibling() ) - { - TQDomElement subel = n.toElement(); - if (subel.tagName() == subTagName) - list.append(subel.firstChild().toText().data().latin1()); - } - - return list; -} - - -void KDockManager::writeConfig(TQDomElement &base) -{ - // First of all, clear the tree under base - while (!base.firstChild().isNull()) - base.removeChild(base.firstChild()); - TQDomDocument doc = base.ownerDocument(); - - TQStrList nameList; - TQString mainWidgetStr; - - // collect widget names - TQStringList nList; - TQObjectListIt it(*childDock); - KDockWidget *obj1; - while ( (obj1=(KDockWidget*)it.current()) ) { - if ( TQT_BASE_OBJECT(obj1->parent()) == TQT_BASE_OBJECT(main) ) - mainWidgetStr = TQString::tqfromLatin1(obj1->name()); - nList.append(obj1->name()); - ++it; - } - - for (TQObjectListIt it(d->containerDocks);it.current();++it) - { - KDockContainer* dc = tqt_dynamic_cast<KDockContainer*>(((KDockWidget*)it.current())->widget); - if (dc) { - dc->prepareSave(nList); - } - } - - TQStringList::Iterator nListIt=nList.begin(); - while ( nListIt!=nList.end() ) { - KDockWidget *obj = getDockWidgetFromName( *nListIt); - if ((obj->isGroup && (!obj->d->isContainer)) && (nameList.find( obj->firstName.latin1() ) == -1 - || nameList.find(obj->lastName.latin1()) == -1)) { - // Skip until children are saved (why?) - ++nListIt; -// nList.next(); -//falk? if ( !nList.current() ) nList.first(); - continue; - } - - TQDomElement groupEl; - if (obj->d->isContainer) { - KDockContainer* x = tqt_dynamic_cast<KDockContainer*>(obj->widget); - if (x) { - groupEl=doc.createElement("dockContainer"); - x->save(groupEl); - } - } else - if (obj->isGroup) { - //// Save a group - groupEl = doc.createElement("splitGroup"); - - groupEl.appendChild(createStringEntry(doc, "firstName", obj->firstName)); - groupEl.appendChild(createStringEntry(doc, "secondName", obj->lastName)); - groupEl.appendChild(createNumberEntry(doc, "orientation", (int)obj->splitterOrientation)); - groupEl.appendChild(createNumberEntry(doc, "separatorPos", ((KDockSplitter*)obj->widget)->separatorPosInPercent())); - } else if (obj->isTabGroup) { - //// Save a tab group - groupEl = doc.createElement("tabGroup"); - - TQStrList list; - for ( int i = 0; i < ((KDockTabGroup*)obj->widget)->count(); ++i ) - list.append( ((KDockTabGroup*)obj->widget)->page( i )->name() ); - groupEl.appendChild(createListEntry(doc, "tabs", "tab", list)); - groupEl.appendChild(createNumberEntry(doc, "currentTab", ((KDockTabGroup*)obj->widget)->currentPageIndex())); - if (!obj->parent()) { - groupEl.appendChild(createStringEntry(doc, "dockBackTo", obj->formerBrotherDockWidget ? obj->formerBrotherDockWidget->name() : "")); - groupEl.appendChild(createNumberEntry(doc, "dockBackToPos", obj->formerDockPos)); - } - } else { - //// Save an ordinary dock widget - groupEl = doc.createElement("dock"); - groupEl.appendChild(createStringEntry(doc, "tabCaption", obj->tabPageLabel())); - groupEl.appendChild(createStringEntry(doc, "tabToolTip", obj->toolTipString())); - if (!obj->parent()) { - groupEl.appendChild(createStringEntry(doc, "dockBackTo", obj->formerBrotherDockWidget ? obj->formerBrotherDockWidget->name() : "")); - groupEl.appendChild(createNumberEntry(doc, "dockBackToPos", obj->formerDockPos)); - } - } - - groupEl.appendChild(createStringEntry(doc, "name", TQString::tqfromLatin1(obj->name()))); - groupEl.appendChild(createBoolEntry(doc, "hasParent", obj->parent())); - if ( !obj->parent() ) { - groupEl.appendChild(createRectEntry(doc, "geometry", TQRect(main->frameGeometry().topLeft(), main->size()))); - groupEl.appendChild(createBoolEntry(doc, "visible", obj->isVisible())); - } - if (obj->header && obj->header->inherits("KDockWidgetHeader")) { - KDockWidgetHeader *h = static_cast<KDockWidgetHeader*>(obj->header); - groupEl.appendChild(createBoolEntry(doc, "dragEnabled", h->dragEnabled())); - } - - base.appendChild(groupEl); - nameList.append(obj->name()); - nList.remove(nListIt); - nListIt=nList.begin(); - } - - if (main->inherits("KDockMainWindow")) { - KDockMainWindow *dmain = (KDockMainWindow*)main; - TQString centralWidgetStr = TQString(dmain->centralWidget()? dmain->centralWidget()->name() : ""); - base.appendChild(createStringEntry(doc, "centralWidget", centralWidgetStr)); - TQString mainDockWidgetStr = TQString(dmain->getMainDockWidget()? dmain->getMainDockWidget()->name() : ""); - base.appendChild(createStringEntry(doc, "mainDockWidget", mainDockWidgetStr)); - } else { - base.appendChild(createStringEntry(doc, "mainWidget", mainWidgetStr)); - } - - base.appendChild(createRectEntry(doc, "geometry", TQRect(main->frameGeometry().topLeft(), main->size()))); -} - - -void KDockManager::readConfig(TQDomElement &base) -{ - if (base.namedItem("group").isNull() - && base.namedItem("tabgroup").isNull() - && base.namedItem("dock").isNull() - && base.namedItem("dockContainer").isNull()) { - activate(); - return; - } - - autoCreateDock = new TQObjectList(); - autoCreateDock->setAutoDelete( true ); - - bool isMainVisible = main->isVisible(); - main->hide(); - - TQObjectListIt it(*childDock); - KDockWidget *obj1; - while ( (obj1=(KDockWidget*)it.current()) ) { - if ( !obj1->isGroup && !obj1->isTabGroup ) { - if ( obj1->parent() ) - obj1->undock(); - else - obj1->hide(); - } - ++it; - } - - // firstly, recreate all common dockwidgets - for( TQDomNode n = base.firstChild(); !n.isNull(); n = n.nextSibling() ) - { - TQDomElement childEl = n.toElement(); - if (childEl.tagName() != "dock") continue; - - // Read an ordinary dock widget - KDockWidget *obj = getDockWidgetFromName(stringEntry(childEl, "name")); - obj->setTabPageLabel(stringEntry(childEl, "tabCaption")); - obj->setToolTipString(stringEntry(childEl, "tabToolTip")); - - if (!boolEntry(childEl, "hasParent")) { - TQRect r = rectEntry(childEl, "geometry"); - obj = getDockWidgetFromName(stringEntry(childEl, "name")); - obj->applyToWidget(0); - obj->setGeometry(r); - if (boolEntry(childEl, "visible")) - obj->TQWidget::show(); - } - - if (obj && obj->header && obj->header->inherits("KDockWidgetHeader")) { - KDockWidgetHeader *h = static_cast<KDockWidgetHeader*>(obj->header); - h->setDragEnabled(boolEntry(childEl, "dragEnabled")); - } - } - - // secondly, now iterate again and create the groups and tabwidgets, apply the dockwidgets to them - for( TQDomNode n = base.firstChild(); !n.isNull(); n = n.nextSibling() ) - { - TQDomElement childEl = n.toElement(); - if (childEl.isNull()) continue; - - KDockWidget *obj = 0; - - if (childEl.tagName() == "dockContainer") { - - KDockWidget *cont=getDockWidgetFromName(stringEntry(childEl, "name")); - kdDebug(282)<<"dockContainer: "<<stringEntry(childEl,"name")<<endl; - if (!(cont->d->isContainer)) { - kdDebug(282)<<"restoration of dockContainer is only supported for already existing dock containers"<<endl; - } else { - KDockContainer *dc=tqt_dynamic_cast<KDockContainer*>(cont->getWidget()); - if (!dc) kdDebug(282)<<"Error while trying to handle dockcontainer configuration restoration"<<endl; - else { - dc->load(childEl); - removeFromAutoCreateList(cont); - } - - } - } - else - if (childEl.tagName() == "splitGroup") { - // Read a group - TQString name = stringEntry(childEl, "name"); - TQString firstName = stringEntry(childEl, "firstName"); - TQString secondName = stringEntry(childEl, "secondName"); - int orientation = numberEntry(childEl, "orientation"); - int separatorPos = numberEntry(childEl, "separatorPos"); - - KDockWidget *first = getDockWidgetFromName(firstName); - KDockWidget *second = getDockWidgetFromName(secondName); - if (first && second) { - obj = first->manualDock(second, - (orientation == (int)Qt::Vertical)? KDockWidget::DockLeft : KDockWidget::DockTop, - separatorPos); - if (obj) - obj->setName(name.latin1()); - } - } else if (childEl.tagName() == "tabGroup") { - // Read a tab group - TQString name = stringEntry(childEl, "name"); - TQStrList list = listEntry(childEl, "tabs", "tab"); - - KDockWidget *d1 = getDockWidgetFromName( list.first() ); - list.next(); - KDockWidget *d2 = getDockWidgetFromName( list.current() ); - - KDockWidget *obj = d2->manualDock( d1, KDockWidget::DockCenter ); - if (obj) { - KDockTabGroup *tab = (KDockTabGroup*)obj->widget; - list.next(); - while (list.current() && obj) { - KDockWidget *tabDock = getDockWidgetFromName(list.current()); - obj = tabDock->manualDock(d1, KDockWidget::DockCenter); - list.next(); - } - if (obj) { - obj->setName(name.latin1()); - tab->showPage(tab->page(numberEntry(childEl, "currentTab"))); - } - } - } else { - continue; - } - - if (!boolEntry(childEl, "hasParent")) { - TQRect r = rectEntry(childEl, "geometry"); - obj = getDockWidgetFromName(stringEntry(childEl, "name")); - obj->applyToWidget(0); - obj->setGeometry(r); - if (boolEntry(childEl, "visible")) - obj->TQWidget::show(); - } - - if (obj && obj->header && obj->header->inherits("KDockWidgetHeader")) { - KDockWidgetHeader *h = static_cast<KDockWidgetHeader*>(obj->header); - h->setDragEnabled(boolEntry(childEl, "dragEnabled")); - } - } - - // thirdly, now that all ordinary dockwidgets are created, - // iterate them again and link them with their corresponding dockwidget for the dockback action - for( TQDomNode n = base.firstChild(); !n.isNull(); n = n.nextSibling() ) - { - TQDomElement childEl = n.toElement(); - - if (childEl.tagName() != "dock" && childEl.tagName() != "tabGroup") - continue; - - KDockWidget *obj = 0; - - if (!boolEntry(childEl, "hasParent")) { - // Read a common toplevel dock widget - obj = getDockWidgetFromName(stringEntry(childEl, "name")); - TQString name = stringEntry(childEl, "dockBackTo"); - if (!name.isEmpty()) { - obj->setFormerBrotherDockWidget(getDockWidgetFromName(name)); - } - obj->formerDockPos = KDockWidget::DockPosition(numberEntry(childEl, "dockBackToPos")); - obj->updateHeader(); - } - } - - if (main->inherits("KDockMainWindow")) { - KDockMainWindow *dmain = (KDockMainWindow*)main; - - TQString mv = stringEntry(base, "centralWidget"); - if (!mv.isEmpty() && getDockWidgetFromName(mv) ) { - KDockWidget *mvd = getDockWidgetFromName(mv); - mvd->applyToWidget(dmain); - mvd->show(); - dmain->setCentralWidget(mvd); - } - TQString md = stringEntry(base, "mainDockWidget"); - if (!md.isEmpty() && getDockWidgetFromName(md)) { - KDockWidget *mvd = getDockWidgetFromName(md); - dmain->setMainDockWidget(mvd); - } - } else { - TQString mv = stringEntry(base, "mainWidget"); - if (!mv.isEmpty() && getDockWidgetFromName(mv)) { - KDockWidget *mvd = getDockWidgetFromName(mv); - mvd->applyToWidget(main); - mvd->show(); - } - - // only resize + move non-mainwindows - TQRect mr = rectEntry(base, "geometry"); - main->move(mr.topLeft()); - main->resize(mr.size()); - } - - if (isMainVisible) - main->show(); - - if (d->m_readDockConfigMode == WrapExistingWidgetsOnly) { - finishReadDockConfig(); // remove empty dockwidgets - } -} - -void KDockManager::removeFromAutoCreateList(KDockWidget* pDockWidget) -{ - if (!autoCreateDock) return; - autoCreateDock->setAutoDelete(false); - autoCreateDock->removeRef(TQT_TQOBJECT(pDockWidget)); - autoCreateDock->setAutoDelete(true); -} - -void KDockManager::finishReadDockConfig() -{ - delete autoCreateDock; - autoCreateDock = 0; -} - -void KDockManager::setReadDockConfigMode(int mode) -{ - d->m_readDockConfigMode = mode; -} - -#ifndef NO_KDE2 -void KDockManager::writeConfig( KConfig* c, TQString group ) -{ - //debug("BEGIN Write Config"); - if ( !c ) c = KGlobal::config(); - if ( group.isEmpty() ) group = "dock_setting_default"; - - c->setGroup( group ); - c->writeEntry( "Version", DOCK_CONFIG_VERSION ); - - TQStringList nameList; - TQStringList findList; - TQObjectListIt it( *childDock ); - KDockWidget * obj; - - // collect KDockWidget's name - TQStringList nList; - while ( (obj=(KDockWidget*)it.current()) ) { - ++it; - //debug(" +Add subdock %s", obj->name()); - nList.append( obj->name() ); - if ( TQT_BASE_OBJECT(obj->parent()) == TQT_BASE_OBJECT(main) ) - c->writeEntry( "Main:view", obj->name() ); - } - -// kdDebug(282)<<TQString("list size: %1").arg(nList.count())<<endl; - for (TQObjectListIt it(d->containerDocks);it.current();++it) - { - KDockContainer* dc = tqt_dynamic_cast<KDockContainer*>(((KDockWidget*)it.current())->widget); - if (dc) { - dc->prepareSave(nList); - } - } -// kdDebug(282)<<TQString("new list size: %1").arg(nList.count())<<endl; - - TQStringList::Iterator nListIt=nList.begin(); - while ( nListIt!=nList.end() ){ - //debug(" -Try to save %s", nList.current()); - obj = getDockWidgetFromName( *nListIt ); - TQString cname = obj->name(); - if ( obj->header ){ - obj->header->saveConfig( c ); - } - if (obj->d->isContainer) { - KDockContainer* x = tqt_dynamic_cast<KDockContainer*>(obj->widget); - if (x) { - x->save(c,group); - } - } -/*************************************************************************************************/ - if ( obj->isGroup ){ - if ( (findList.find( obj->firstName ) != findList.end()) && (findList.find( obj->lastName ) != findList.end() )){ - - c->writeEntry( cname+":type", "GROUP"); - if ( !obj->parent() ){ - c->writeEntry( cname+":parent", "___null___"); - c->writeEntry( cname+":geometry", TQRect(obj->frameGeometry().topLeft(), obj->size()) ); - c->writeEntry( cname+":visible", obj->isVisible()); - } else { - c->writeEntry( cname+":parent", "yes"); - } - c->writeEntry( cname+":first_name", obj->firstName ); - c->writeEntry( cname+":last_name", obj->lastName ); - c->writeEntry( cname+":orientation", (int)obj->splitterOrientation ); - c->writeEntry( cname+":sepPos", ((KDockSplitter*)obj->widget)->separatorPosInPercent() ); - - nameList.append( obj->name() ); - findList.append( obj->name() ); - //debug(" Save %s", nList.current()); - nList.remove(nListIt); - nListIt=nList.begin(); //nList.first(); - } else { -/*************************************************************************************************/ - //debug(" Skip %s", nList.current()); - //if ( findList.find( obj->firstName ) == -1 ) - // debug(" ? Not found %s", obj->firstName); - //if ( findList.find( obj->lastName ) == -1 ) - // debug(" ? Not found %s", obj->lastName); - ++nListIt; - // if ( !nList.current() ) nList.first(); - if (nListIt==nList.end()) nListIt=nList.begin(); - } - } else { -/*************************************************************************************************/ - if ( obj->isTabGroup){ - c->writeEntry( cname+":type", "TAB_GROUP"); - if ( !obj->parent() ){ - c->writeEntry( cname+":parent", "___null___"); - c->writeEntry( cname+":geometry", TQRect(obj->frameGeometry().topLeft(), obj->size()) ); - c->writeEntry( cname+":visible", obj->isVisible()); - c->writeEntry( cname+":dockBackTo", obj->formerBrotherDockWidget ? obj->formerBrotherDockWidget->name() : ""); - c->writeEntry( cname+":dockBackToPos", obj->formerDockPos); - } else { - c->writeEntry( cname+":parent", "yes"); - } - TQStrList list; - for ( int i = 0; i < ((KDockTabGroup*)obj->widget)->count(); ++i ) - list.append( ((KDockTabGroup*)obj->widget)->page( i )->name() ); - c->writeEntry( cname+":tabNames", list ); - c->writeEntry( cname+":curTab", ((KDockTabGroup*)obj->widget)->currentPageIndex() ); - - nameList.append( obj->name() ); - findList.append( obj->name() ); // not really need !!! - //debug(" Save %s", nList.current()); - nList.remove(nListIt); - nListIt=nList.begin(); - } else { -/*************************************************************************************************/ - c->writeEntry( cname+":tabCaption", obj->tabPageLabel()); - c->writeEntry( cname+":tabToolTip", obj->toolTipString()); - if ( !obj->parent() ){ - c->writeEntry( cname+":type", "NULL_DOCK"); - c->writeEntry( cname+":geometry", TQRect(obj->frameGeometry().topLeft(), obj->size()) ); - c->writeEntry( cname+":visible", obj->isVisible()); - c->writeEntry( cname+":dockBackTo", obj->formerBrotherDockWidget ? obj->formerBrotherDockWidget->name() : ""); - c->writeEntry( cname+":dockBackToPos", obj->formerDockPos); - } else { - c->writeEntry( cname+":type", "DOCK"); - } - nameList.append( cname.latin1() ); - //debug(" Save %s", nList.current()); - findList.append( obj->name() ); - nList.remove(nListIt); - nListIt=nList.begin(); - } - } - } - c->writeEntry( "NameList", nameList ); - - c->writeEntry( "Main:Geometry", TQRect(main->frameGeometry().topLeft(), main->size()) ); - c->writeEntry( "Main:visible", main->isVisible()); // curently nou use - - if ( main->inherits("KDockMainWindow") ){ - KDockMainWindow* dmain = (KDockMainWindow*)main; - // for KDockMainWindow->setView() in readConfig() - c->writeEntry( "Main:view", dmain->centralWidget() ? dmain->centralWidget()->name():"" ); - c->writeEntry( "Main:dock", dmain->getMainDockWidget() ? dmain->getMainDockWidget()->name() :"" ); - } - - c->sync(); - //debug("END Write Config"); -} -#include <tqmessagebox.h> -void KDockManager::readConfig( KConfig* c, TQString group ) -{ - if ( !c ) c = KGlobal::config(); - if ( group.isEmpty() ) group = "dock_setting_default"; - - c->setGroup( group ); - TQStrList nameList; - c->readListEntry( "NameList", nameList ); - TQString ver = c->readEntry( "Version", "0.0.1" ); - nameList.first(); - if ( !nameList.current() || ver != DOCK_CONFIG_VERSION ){ - activate(); - return; - } - - autoCreateDock = new TQObjectList(); - autoCreateDock->setAutoDelete( true ); - - bool isMainVisible = main->isVisible(); - // if (isMainVisible) // CCC - //TQMessageBox::information(0,"","hallo"); -//COMMENTED4TESTING main->hide(); - - TQObjectListIt it( *childDock ); - KDockWidget * obj; - - while ( (obj=(KDockWidget*)it.current()) ){ - ++it; - if ( !obj->isGroup && !obj->isTabGroup ) - { - if ( obj->parent() ) obj->undock(); else obj->hide(); - } - } - - // firstly, only the common dockwidgets, - // they must be restored before e.g. tabgroups are restored - nameList.first(); - while ( nameList.current() ){ - TQString oname = nameList.current(); - c->setGroup( group ); - TQString type = c->readEntry( oname + ":type" ); - obj = 0L; - - if ( type == "NULL_DOCK" || c->readEntry( oname + ":parent") == "___null___" ){ - TQRect r = c->readRectEntry( oname + ":geometry" ); - obj = getDockWidgetFromName( oname ); - obj->applyToWidget( 0L ); - obj->setGeometry(r); - - c->setGroup( group ); - obj->setTabPageLabel(c->readEntry( oname + ":tabCaption" )); - obj->setToolTipString(c->readEntry( oname + ":tabToolTip" )); - if ( c->readBoolEntry( oname + ":visible" ) ){ - obj->TQWidget::show(); - } - } - - if ( type == "DOCK" ){ - obj = getDockWidgetFromName( oname ); - obj->setTabPageLabel(c->readEntry( oname + ":tabCaption" )); - obj->setToolTipString(c->readEntry( oname + ":tabToolTip" )); - } - - if (obj && obj->d->isContainer) { - tqt_dynamic_cast<KDockContainer*>(obj->widget)->load(c,group); - removeFromAutoCreateList(obj); - } - if ( obj && obj->header){ - obj->header->loadConfig( c ); - } - nameList.next(); - } - - // secondly, after the common dockwidgets, restore the groups and tabgroups - nameList.first(); - while ( nameList.current() ){ - TQString oname = nameList.current(); - c->setGroup( group ); - TQString type = c->readEntry( oname + ":type" ); - obj = 0L; - - if ( type == "GROUP" ){ - KDockWidget* first = getDockWidgetFromName( c->readEntry( oname + ":first_name" ) ); - KDockWidget* last = getDockWidgetFromName( c->readEntry( oname + ":last_name" ) ); - int sepPos = c->readNumEntry( oname + ":sepPos" ); - - Orientation p = (Orientation)c->readNumEntry( oname + ":orientation" ); - if ( first && last ){ - obj = first->manualDock( last, ( p == Qt::Vertical ) ? KDockWidget::DockLeft : KDockWidget::DockTop, sepPos ); - if (obj){ - obj->setName( oname.latin1() ); - } - } - } - - if ( type == "TAB_GROUP" ){ - TQStrList list; - KDockWidget* tabDockGroup = 0L; - c->readListEntry( oname+":tabNames", list ); - KDockWidget* d1 = getDockWidgetFromName( list.first() ); - list.next(); - KDockWidget* d2 = getDockWidgetFromName( list.current() ); - tabDockGroup = d2->manualDock( d1, KDockWidget::DockCenter ); - if ( tabDockGroup ){ - KDockTabGroup* tab = tqt_dynamic_cast<KDockTabGroup*>(tabDockGroup->widget); - list.next(); - while ( list.current() && tabDockGroup ){ - KDockWidget* tabDock = getDockWidgetFromName( list.current() ); - tabDockGroup = tabDock->manualDock( d1, KDockWidget::DockCenter ); - list.next(); - } - if ( tabDockGroup ){ - tabDockGroup->setName( oname.latin1() ); - c->setGroup( group ); - if (tab) - tab->showPage( tab->page( c->readNumEntry( oname+":curTab" ) ) ); - } - } - obj = tabDockGroup; - } - - if (obj && obj->d->isContainer) tqt_dynamic_cast<KDockContainer*>(obj->widget)->load(c,group); - if ( obj && obj->header){ - obj->header->loadConfig( c ); - } - nameList.next(); - } - - // thirdly, now that all ordinary dockwidgets are created, - // iterate them again and link the toplevel ones of them with their corresponding dockwidget for the dockback action - nameList.first(); - while ( nameList.current() ){ - TQString oname = nameList.current(); - c->setGroup( group ); - TQString type = c->readEntry( oname + ":type" ); - obj = 0L; - - if ( type == "NULL_DOCK" || c->readEntry( oname + ":parent") == "___null___" ){ - obj = getDockWidgetFromName( oname ); - c->setGroup( group ); - TQString name = c->readEntry( oname + ":dockBackTo" ); - if (!name.isEmpty()) { - obj->setFormerBrotherDockWidget(getDockWidgetFromName( name )); - } - obj->formerDockPos = KDockWidget::DockPosition(c->readNumEntry( oname + ":dockBackToPos" )); - } - - nameList.next(); - } - - if ( main->inherits("KDockMainWindow") ){ - KDockMainWindow* dmain = (KDockMainWindow*)main; - - c->setGroup( group ); - TQString mv = c->readEntry( "Main:view" ); - if ( !mv.isEmpty() && getDockWidgetFromName( mv ) ){ - KDockWidget* mvd = getDockWidgetFromName( mv ); - mvd->applyToWidget( dmain ); - mvd->show(); - dmain->setView( mvd ); - } - c->setGroup( group ); - TQString md = c->readEntry( "Main:dock" ); - if ( !md.isEmpty() && getDockWidgetFromName( md ) ){ - KDockWidget* mvd = getDockWidgetFromName( md ); - dmain->setMainDockWidget( mvd ); - } - } else { - c->setGroup( group ); - TQString mv = c->readEntry( "Main:view" ); - if ( !mv.isEmpty() && getDockWidgetFromName( mv ) ){ - KDockWidget* mvd = getDockWidgetFromName( mv ); - mvd->applyToWidget( main ); - mvd->show(); - } - - } - - // delete all autocreate dock - if (d->m_readDockConfigMode == WrapExistingWidgetsOnly) { - finishReadDockConfig(); // remove empty dockwidgets - } - - c->setGroup( group ); - - TQRect mr = c->readRectEntry("Main:Geometry"); - - if (!main->inherits("KDockMainWindow")) - main->move(mr.topLeft()); - - main->resize(mr.size()); - - if ( isMainVisible ) main->show(); -} -#endif - - -void KDockManager::dumpDockWidgets() { - TQObjectListIt it( *childDock ); - KDockWidget * obj; - while ( (obj=(KDockWidget*)it.current()) ) { - ++it; - kdDebug(282)<<"KDockManager::dumpDockWidgets:"<<obj->name()<<endl; - } - -} - -KDockWidget* KDockManager::getDockWidgetFromName( const TQString& dockName ) -{ - TQObjectListIt it( *childDock ); - KDockWidget * obj; - while ( (obj=(KDockWidget*)it.current()) ) { - ++it; - if ( TQString(obj->name()) == dockName ) return obj; - } - - KDockWidget* autoCreate = 0L; - if ( autoCreateDock ){ - kdDebug(282)<<"Autocreating dock: "<<dockName<<endl; - autoCreate = new KDockWidget( this, dockName.latin1(), TQPixmap(TQString("")) ); - autoCreateDock->append( TQT_TQOBJECT(autoCreate) ); - } - return autoCreate; -} -void KDockManager::setSplitterOpaqueResize(bool b) -{ - d->splitterOpaqueResize = b; -} - -bool KDockManager::splitterOpaqueResize() const -{ - return d->splitterOpaqueResize; -} - -void KDockManager::setSplitterKeepSize(bool b) -{ - d->splitterKeepSize = b; -} - -bool KDockManager::splitterKeepSize() const -{ - return d->splitterKeepSize; -} - -void KDockManager::setSplitterHighResolution(bool b) -{ - d->splitterHighResolution = b; -} - -bool KDockManager::splitterHighResolution() const -{ - return d->splitterHighResolution; -} - -void KDockManager::slotMenuPopup() -{ - menu->clear(); - menuData->clear(); - - TQObjectListIt it( *childDock ); - KDockWidget * obj; - int numerator = 0; - while ( (obj=(KDockWidget*)it.current()) ) { - ++it; - if ( obj->mayBeHide() ) - { - menu->insertItem( obj->icon() ? *(obj->icon()) : TQPixmap(), TQString(i18n("Hide %1").arg(obj->caption())), numerator++ ); - menuData->append( new MenuDockData( obj, true ) ); - } - - if ( obj->mayBeShow() ) - { - menu->insertItem( obj->icon() ? *(obj->icon()) : TQPixmap(), TQString(i18n("Show %1").arg(obj->caption())), numerator++ ); - menuData->append( new MenuDockData( obj, false ) ); - } - } -} - -void KDockManager::slotMenuActivated( int id ) -{ - MenuDockData* data = menuData->tqat( id ); - data->dock->changeHideShowState(); -} - -KDockWidget* KDockManager::findWidgetParentDock( TQWidget* w ) const -{ - TQObjectListIt it( *childDock ); - KDockWidget * dock; - KDockWidget * found = 0L; - - while ( (dock=(KDockWidget*)it.current()) ) { - ++it; - if ( dock->widget == w ){ found = dock; break; } - } - return found; -} - -void KDockManager::drawDragRectangle() -{ -#ifdef BORDERLESS_WINDOWS - return -#endif - if (d->oldDragRect == d->dragRect) - return; - - int i; - TQRect oldAndNewDragRect[2]; - oldAndNewDragRect[0] = d->oldDragRect; - oldAndNewDragRect[1] = d->dragRect; - - // 2 calls, one for the old and one for the new drag rectangle - for (i = 0; i <= 1; i++) { - if (oldAndNewDragRect[i].isEmpty()) - continue; - - KDockWidget* pDockWdgAtRect = (KDockWidget*) TQApplication::widgetAt( oldAndNewDragRect[i].topLeft(), true ); - if (!pDockWdgAtRect) - continue; - - bool isOverMainWdg = false; - bool unclipped; - KDockMainWindow* pMain = 0L; - KDockWidget* pTLDockWdg = 0L; - TQWidget* topWdg; - if (pDockWdgAtRect->tqtopLevelWidget() == main) { - isOverMainWdg = true; - topWdg = pMain = (KDockMainWindow*) main; - unclipped = pMain->testWFlags( WPaintUnclipped ); - pMain->setWFlags( WPaintUnclipped ); - } - else { - topWdg = pTLDockWdg = (KDockWidget*) pDockWdgAtRect->tqtopLevelWidget(); - unclipped = pTLDockWdg->testWFlags( WPaintUnclipped ); - pTLDockWdg->setWFlags( WPaintUnclipped ); - } - - // draw the rectangle unclipped over the main dock window - TQPainter p; - p.begin( topWdg ); - if ( !unclipped ) { - if (isOverMainWdg) - pMain->clearWFlags(WPaintUnclipped); - else - pTLDockWdg->clearWFlags(WPaintUnclipped); - } - // draw the rectangle - p.setRasterOp(TQt::NotXorROP); - TQRect r = oldAndNewDragRect[i]; - r.moveTopLeft( r.topLeft() - topWdg->mapToGlobal(TQPoint(0,0)) ); - p.drawRect(r.x(), r.y(), r.width(), r.height()); - p.end(); - } - - // memorize the current rectangle for later removing - d->oldDragRect = d->dragRect; -} - -void KDockManager::setSpecialLeftDockContainer(KDockWidget* container) { - d->leftContainer=container; -} - -void KDockManager::setSpecialTopDockContainer(KDockWidget* container) { - d->topContainer=container; -} - -void KDockManager::setSpecialRightDockContainer(KDockWidget* container) { - d->rightContainer=container; - -} - -void KDockManager::setSpecialBottomDockContainer(KDockWidget* container) { - d->bottomContainer=container; -} - - -KDockArea::KDockArea( TQWidget* parent, const char *name) -:TQWidget( parent, name) -{ - TQString new_name = TQString(name) + TQString("_DockManager"); - dockManager = new KDockManager( this, new_name.latin1() ); - mainDockWidget = 0L; -} - -KDockArea::~KDockArea() -{ - delete dockManager; -} - -KDockWidget* KDockArea::createDockWidget( const TQString& name, const TQPixmap &pixmap, TQWidget* parent, const TQString& strCaption, const TQString& strTabPageLabel) -{ - return new KDockWidget( dockManager, name.latin1(), pixmap, parent, strCaption, strTabPageLabel ); -} - -void KDockArea::makeDockVisible( KDockWidget* dock ) -{ - if ( dock ) - dock->makeDockVisible(); -} - -void KDockArea::makeDockInvisible( KDockWidget* dock ) -{ - if ( dock ) - dock->undock(); -} - -void KDockArea::makeWidgetDockVisible( TQWidget* widget ) -{ - makeDockVisible( dockManager->findWidgetParentDock(widget) ); -} - -void KDockArea::writeDockConfig(TQDomElement &base) -{ - dockManager->writeConfig(base); -} - -void KDockArea::readDockConfig(TQDomElement &base) -{ - dockManager->readConfig(base); -} - -void KDockArea::slotDockWidgetUndocked() -{ - TQObject* pSender = (TQObject*) sender(); - if (!pSender->inherits("KDockWidget")) return; - KDockWidget* pDW = (KDockWidget*) pSender; - emit dockWidgetHasUndocked( pDW); -} - -void KDockArea::resizeEvent(TQResizeEvent *rsize) -{ - TQWidget::resizeEvent(rsize); - if (!childrenListObject().isEmpty()){ -#ifndef NO_KDE2 -// kdDebug(282)<<"KDockArea::resize"<<endl; -#endif - TQObjectList *list=queryList(TQWIDGET_OBJECT_NAME_STRING,0,false); - - TQObjectListIt it( *list ); // iterate over the buttons - TQObject *obj; - - while ( (obj = it.current()) != 0 ) { - // for each found object... - ((TQWidget*)obj)->setGeometry(TQRect(TQPoint(0,0),size())); - break; - } - delete list; -#if 0 - KDockSplitter *split; -// for (unsigned int i=0;i<children()->count();i++) - { -// TQPtrList<TQObject> list(children()); -// TQObject *obj=((TQPtrList<TQObject*>)children())->tqat(i); - TQObject *obj=children()->getFirst(); - if (split = tqt_dynamic_cast<KDockSplitter*>(obj)) - { - split->setGeometry( TQRect(TQPoint(0,0), size() )); -// break; - } - } -#endif - } -} - -#ifndef NO_KDE2 -void KDockArea::writeDockConfig( KConfig* c, TQString group ) -{ - dockManager->writeConfig( c, group ); -} - -void KDockArea::readDockConfig( KConfig* c, TQString group ) -{ - dockManager->readConfig( c, group ); -} - -void KDockArea::setMainDockWidget( KDockWidget* mdw ) -{ - if ( mainDockWidget == mdw ) return; - mainDockWidget = mdw; - mdw->applyToWidget(this); -} -#endif - - - -// KDOCKCONTAINER - AN ABSTRACTION OF THE KDOCKTABWIDGET -KDockContainer::KDockContainer(){m_overlapMode=false; m_childrenListBegin=0; m_childrenListEnd=0;} -KDockContainer::~KDockContainer(){ - - if (m_childrenListBegin) - { - struct ListItem *tmp=m_childrenListBegin; - while (tmp) - { - struct ListItem *tmp2=tmp->next; - free(tmp->data); - delete tmp; - tmp=tmp2; - } - m_childrenListBegin=0; - m_childrenListEnd=0; - } - -} - -void KDockContainer::activateOverlapMode(int nonOverlapSize) { - m_nonOverlapSize=nonOverlapSize; - m_overlapMode=true; - if (parentDockWidget() && parentDockWidget()->parent()) { - kdDebug(282)<<"KDockContainer::activateOverlapMode: recalculating sizes"<<endl; - KDockSplitter *sp= ::tqqt_cast<KDockSplitter*>(parentDockWidget()-> - parent()); - if (sp) - sp->resizeEvent(0); - } -} - -void KDockContainer::deactivateOverlapMode() { - if (!m_overlapMode) return; - m_overlapMode=false; - if (parentDockWidget() && parentDockWidget()->parent()) { - kdDebug(282)<<"KDockContainer::deactivateOverlapMode: recalculating sizes"<<endl; - KDockSplitter *sp= ::tqqt_cast<KDockSplitter*>(parentDockWidget()-> - parent()); - if (sp) - sp->resizeEvent(0); - } -} - -bool KDockContainer::isOverlapMode() { - return m_overlapMode; -} - - -bool KDockContainer::dockDragEnter(KDockWidget*, TQMouseEvent *) { return false;} -bool KDockContainer::dockDragMove(KDockWidget*, TQMouseEvent *) { return false;} -bool KDockContainer::dockDragLeave(KDockWidget*, TQMouseEvent *) { return false;} - - -KDockWidget *KDockContainer::parentDockWidget(){return 0;} - -TQStringList KDockContainer::containedWidgets() const { - TQStringList tmp; - for (struct ListItem *it=m_childrenListBegin;it;it=it->next) { - tmp<<TQString(it->data); - } - - return tmp; -} - -void KDockContainer::showWidget(KDockWidget *) { -} - -void KDockContainer::insertWidget (KDockWidget *dw, TQPixmap, const TQString &, int &) - { - struct ListItem *it=new struct ListItem; - it->data=strdup(dw->name()); - it->next=0; - - if (m_childrenListEnd) - { - m_childrenListEnd->next=it; - it->prev=m_childrenListEnd; - m_childrenListEnd=it; - } - else - { - it->prev=0; - m_childrenListEnd=it; - m_childrenListBegin=it; - } - } -void KDockContainer::removeWidget (KDockWidget *dw){ - for (struct ListItem *tmp=m_childrenListBegin;tmp;tmp=tmp->next) - { - if (!strcmp(tmp->data,dw->name())) - { - free(tmp->data); - if (tmp->next) tmp->next->prev=tmp->prev; - if (tmp->prev) tmp->prev->next=tmp->next; - if (tmp==m_childrenListBegin) m_childrenListBegin=tmp->next; - if (tmp==m_childrenListEnd) m_childrenListEnd=tmp->prev; - delete tmp; - break; - } - } -} - -//m_children.remove(dw->name());} -void KDockContainer::undockWidget (KDockWidget *){;} -void KDockContainer::setToolTip(KDockWidget *, TQString &){;} -void KDockContainer::setPixmap(KDockWidget*,const TQPixmap&){;} -void KDockContainer::load (KConfig*, const TQString&){;} -void KDockContainer::save (KConfig*, const TQString&){;} -void KDockContainer::load (TQDomElement&){;} -void KDockContainer::save (TQDomElement&){;} -void KDockContainer::prepareSave(TQStringList &names) -{ - - for (struct ListItem *tmp=m_childrenListBegin;tmp; tmp=tmp->next) - names.remove(tmp->data); -// for (uint i=0;i<m_children.count();i++) -// { -// names.remove(m_children.tqat(i)); -// } -} - - -TQWidget *KDockTabGroup::transientTo() { - TQWidget *tT=0; - for (int i=0;i<count();i++) { - KDockWidget *dw=::tqqt_cast<KDockWidget*>(page(i)); - TQWidget *tmp; - if ((tmp=dw->transientTo())) { - if (!tT) tT=tmp; - else { - if (tT!=tmp) { - kdDebug(282)<<"KDockTabGroup::transientTo: widget mismatch"<<endl; - return 0; - } - } - } - } - - kdDebug(282)<<"KDockTabGroup::transientTo: "<<(tT?"YES":"NO")<<endl; - - return tT; -} - -void KDockWidgetAbstractHeader::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -void KDockWidgetAbstractHeaderDrag::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -void KDockWidgetHeaderDrag::virtual_hook( int id, void* data ) -{ KDockWidgetAbstractHeaderDrag::virtual_hook( id, data ); } - -void KDockWidgetHeader::virtual_hook( int id, void* data ) -{ KDockWidgetAbstractHeader::virtual_hook( id, data ); } - -void KDockTabGroup::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -void KDockWidget::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -void KDockManager::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -void KDockMainWindow::virtual_hook( int id, void* data ) -{ KMainWindow::virtual_hook( id, data ); } - -void KDockArea::virtual_hook( int, void* ) -{ /*KMainWindow::virtual_hook( id, data );*/ } - - -#ifndef NO_INCLUDE_TQMOCFILES // for Qt-only projects, because tmake doesn't take this name -#include "kdockwidget.moc" -#endif |