summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/workspace/tqworkspace.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/workspace/tqworkspace.cpp')
-rw-r--r--tqtinterface/qt4/src/workspace/tqworkspace.cpp3033
1 files changed, 0 insertions, 3033 deletions
diff --git a/tqtinterface/qt4/src/workspace/tqworkspace.cpp b/tqtinterface/qt4/src/workspace/tqworkspace.cpp
deleted file mode 100644
index 531a78e..0000000
--- a/tqtinterface/qt4/src/workspace/tqworkspace.cpp
+++ /dev/null
@@ -1,3033 +0,0 @@
-/****************************************************************************
-**
-** Implementation of the TQWorkspace class
-**
-** Created : 931107
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** This file is part of the workspace module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-#include "tqworkspace.h"
-#ifndef TQT_NO_WORKSPACE
-#include "tqapplication.h"
-#include "../widgets/tqtitlebar_p.h"
-#include "tqobjectlist.h"
-#include "tqlayout.h"
-#include "tqtoolbutton.h"
-#include "tqlabel.h"
-#include "tqvbox.h"
-#include "tqaccel.h"
-#include "tqcursor.h"
-#include "tqpopupmenu.h"
-#include "tqmenubar.h"
-#include "tqguardedptr.h"
-#include "tqiconset.h"
-#include "../widgets/tqwidgetresizehandler_p.h"
-#include "tqfocusdata.h"
-#include "tqdatetime.h"
-#include "tqtooltip.h"
-#include "tqwmatrix.h"
-#include "tqimage.h"
-#include "tqscrollbar.h"
-#include "tqstyle.h"
-#include "tqbitmap.h"
-
-// magic non-mdi things
-#include "tqtimer.h"
-#include "tqdockarea.h"
-#include "tqstatusbar.h"
-#include "tqmainwindow.h"
-#include "tqdockwindow.h"
-#include "tqtoolbar.h"
-
-#define BUTTON_WIDTH 16
-#define BUTTON_HEIGHT 14
-
-/*!
- \class TQWorkspace tqworkspace.h
- \brief The TQWorkspace widget provides a workspace window that can
- contain decorated windows, e.g. for MDI.
-
- \module workspace
-
- \ingroup application
- \ingroup organizers
- \mainclass
-
- MDI (multiple document interface) applications typically have one
- main window with a menu bar and toolbar, and a central widget that
- is a TQWorkspace. The workspace itself contains zero, one or more
- document windows, each of which is a widget.
-
- The workspace itself is an ordinary TQt widget. It has a standard
- constructor that takes a parent widget and an object name. The
- parent window is usually a TQMainWindow, but it need not be.
-
- Document windows (i.e. MDI windows) are also ordinary TQt widgets
- which have the workspace as their parent widget. When you call
- show(), hide(), showMaximized(), setCaption(), etc. on a document
- window, it is shown, hidden, etc. with a frame, caption, icon and
- icon text, just as you'd expect. You can provide widget flags
- which will be used for the tqlayout of the decoration or the
- behaviour of the widget itself.
-
- To change or retrieve the tqgeometry of MDI windows you must operate
- on the MDI widget's parentWidget(). (The parentWidget() provides
- access to the decorated window in which the MDI window's widget is
- shown.)
-
- A document window becomes active when it gets the keyboard focus.
- You can also activate a window in code using setFocus(). The user
- can activate a window by moving focus in the usual ways, for
- example by clicking a window or by pressing Tab. The workspace
- emits a signal windowActivated() when it detects the activation
- change, and the function activeWindow() always returns a pointer
- to the active document window.
-
- The convenience function windowList() returns a list of all
- document windows. This is useful to create a popup menu
- "<u>W</u>indows" on the fly, for example.
-
- TQWorkspace provides two built-in tqlayout strategies for child
- windows: cascade() and tile(). Both are Q_SLOTS so you can easily
- connect menu entries to them.
-
- If you want your users to be able to work with document windows
- larger than the actual workspace, set the scrollBarsEnabled
- property to TRUE.
-
- If the top-level window contains a menu bar and a document window
- is maximised, TQWorkspace moves the document window's minimize,
- restore and close buttons from the document window's frame to the
- workspace window's menu bar. It then inserts a window operations
- menu at the far left of the menu bar.
-*/
-
-static bool inCaptionChange = FALSE;
-
-class TQWorkspaceChild : public TQFrame
-{
- Q_OBJECT
- TQ_OBJECT
-
- friend class TQWorkspace;
- friend class TQTitleBar;
-
-public:
- TQWorkspaceChild( TQWidget* window,
- TQWorkspace* parent=0, const char* name=0 );
- ~TQWorkspaceChild();
-
- void setActive( bool );
- bool isActive() const;
-
- void adjustToFullscreen();
-
- void setqStatusBar(TQStatusBar *);
- TQWidget* windowWidget() const;
- TQWidget* iconWidget() const;
-
- void doResize();
- void doMove();
-
- TQSize tqsizeHint() const;
- TQSize tqminimumSizeHint() const;
-
- TQSize baseSize() const;
-
-Q_SIGNALS:
- void showOperationMenu();
- void popupOperationMenu( const TQPoint& );
-
-public Q_SLOTS:
- void activate();
- void showMinimized();
- void showMaximized();
- void showNormal();
- void showShaded();
- void setCaption( const TQString& );
- void internalRaise();
- void titleBarDoubleClicked();
-
- void move( int x, int y );
-
-protected:
- bool event(TQEvent * );
- void enterEvent( TQEvent * );
- void leaveEvent( TQEvent * );
- void childEvent( TQChildEvent* );
- void resizeEvent( TQResizeEvent * );
- void moveEvent( TQMoveEvent * );
- bool eventFilter( TQObject *, TQEvent * );
-
- bool focusNextPrevChild( bool );
-
- void drawFrame( TQPainter * );
- void styleChange( TQStyle & );
-
-private:
- TQWidget* childWidget;
- TQGuardedPtr<TQWidget> lastfocusw;
- TQWidgetResizeHandler *widgetResizeHandler;
- TQTitleBar* titlebar;
- TQGuardedPtr<TQStatusBar> statusbar;
- TQGuardedPtr<TQTitleBar> iconw;
- TQSize windowSize;
- TQSize shadeRestore;
- TQSize shadeRestoreMin;
- bool act :1;
- bool shademode :1;
- bool snappedRight :1;
- bool snappedDown :1;
-#if defined(TQ_DISABLE_COPY) // Disabled copy constructor and operator=
- TQWorkspaceChild( const TQWorkspaceChild & );
- TQWorkspaceChild &operator=( const TQWorkspaceChild & );
-#endif
-};
-
-class TQMainWindow;
-
-class TQWorkspacePrivate {
-public:
- TQWorkspaceChild* active;
- TQPtrList<TQWorkspaceChild> windows;
- TQPtrList<TQWorkspaceChild> focus;
- TQPtrList<TQWidget> icons;
- TQWorkspaceChild* maxWindow;
- TQRect maxRestore;
- TQGuardedPtr<TQFrame> maxcontrols;
- TQGuardedPtr<TQMenuBar> maxmenubar;
-
- int px;
- int py;
- TQWidget *becomeActive;
- TQGuardedPtr<TQLabel> maxtools;
- TQPopupMenu* popup;
- TQPopupMenu* toolPopup;
- int menuId;
- int controlId;
- TQString topCaption;
-
- TQScrollBar *vbar, *hbar;
- TQWidget *corner;
- int yoffset, xoffset;
-
- // toplevel mdi fu
- TQWorkspace::WindowMode wmode;
- TQGuardedPtr<TQMainWindow> mainwindow;
- TQPtrList<TQDockWindow> dockwindows, newdocks;
-};
-
-static bool isChildOf( TQWidget * child, TQWidget * parent )
-{
- if ( !parent || !child )
- return FALSE;
- TQWidget * w = child;
- while( w && w != parent )
- w = w->parentWidget();
- return w != 0;
-}
-
-/*!
- Constructs a workspace with a \a parent and a \a name.
-*/
-TQWorkspace::TQWorkspace( TQWidget *parent, const char *name )
- : TQWidget( parent, name )
-{
- init();
-}
-
-#ifdef TQT_WORKSPACE_WINDOWMODE
-/*!
- Constructs a workspace with a \a parent and a \a name. This
- constructor will also set the WindowMode to \a mode.
-
- \sa windowMode()
-*/
-TQWorkspace::TQWorkspace( TQWorkspace::WindowMode mode, TQWidget *parent, const char *name )
- : TQWidget( parent, name )
-{
- init();
- d->wmode = mode;
-}
-#endif
-
-
-/*!
- \internal
-*/
-void
-TQWorkspace::init()
-{
- d = new TQWorkspacePrivate;
- d->maxcontrols = 0;
- d->active = 0;
- d->maxWindow = 0;
- d->maxtools = 0;
- d->px = 0;
- d->py = 0;
- d->becomeActive = 0;
-#if defined( TQT_WORKSPACE_WINDOWMODE ) && defined( TQ_WS_MAC )
- d->wmode = AutoDetect;
-#else
- d->wmode = MDI;
-#endif
- d->mainwindow = 0;
-#if defined(TQ_WS_WIN)
- d->popup = new TQPopupMenu( this, "qt_internal_mdi_popup" );
- d->toolPopup = new TQPopupMenu( this, "qt_internal_mdi_popup" );
-#else
- d->popup = new TQPopupMenu( parentWidget(), "qt_internal_mdi_popup" );
- d->toolPopup = new TQPopupMenu( parentWidget(), "qt_internal_mdi_popup" );
-#endif
-
- d->menuId = -1;
- d->controlId = -1;
- connect( d->popup, TQT_SIGNAL( aboutToShow() ), this, TQT_SLOT(operationMenuAboutToShow() ));
- connect( d->popup, TQT_SIGNAL( activated(int) ), this, TQT_SLOT( operationMenuActivated(int) ) );
- d->popup->insertItem(TQIconSet(tqstyle().stylePixmap(TQStyle::SP_TitleBarNormalButton)), tqtr("&Restore"), 1);
- d->popup->insertItem(tqtr("&Move"), 2);
- d->popup->insertItem(tqtr("&Size"), 3);
- d->popup->insertItem(TQIconSet(tqstyle().stylePixmap(TQStyle::SP_TitleBarMinButton)), tqtr("Mi&nimize"), 4);
- d->popup->insertItem(TQIconSet(tqstyle().stylePixmap(TQStyle::SP_TitleBarMaxButton)), tqtr("Ma&ximize"), 5);
- d->popup->insertSeparator();
- d->popup->insertItem(TQIconSet(tqstyle().stylePixmap(TQStyle::SP_TitleBarCloseButton)),
- TQT_TQSTRING(tqtr("&Close")
-#ifndef TQT_NO_ACCEL
- +"\t"+TQAccel::keyToString(TQt::CTRL+Qt::Key_F4)
-#endif
- ), TQT_TQOBJECT(this), TQT_SLOT( closeActiveWindow() ) );
-
- connect( d->toolPopup, TQT_SIGNAL( aboutToShow() ), this, TQT_SLOT(toolMenuAboutToShow() ));
- connect( d->toolPopup, TQT_SIGNAL( activated(int) ), this, TQT_SLOT( operationMenuActivated(int) ) );
- d->toolPopup->insertItem(tqtr("&Move"), 2);
- d->toolPopup->insertItem(tqtr("&Size"), 3);
- d->toolPopup->insertItem(tqtr("Stay on &Top"), 7);
- d->toolPopup->setItemChecked( 7, TRUE );
- d->toolPopup->setCheckable( TRUE );
- d->toolPopup->insertSeparator();
- d->toolPopup->insertItem(TQIconSet(tqstyle().stylePixmap(TQStyle::SP_TitleBarShadeButton)), tqtr("Sh&ade"), 6);
- d->toolPopup->insertItem(TQIconSet(tqstyle().stylePixmap(TQStyle::SP_TitleBarCloseButton)),
- TQT_TQSTRING(tqtr("&Close")
-#ifndef TQT_NO_ACCEL
- +"\t"+TQAccel::keyToString( TQt::CTRL+Qt::Key_F4)
-#endif
- ), TQT_TQOBJECT(this), TQT_SLOT( closeActiveWindow() ) );
-
-#ifndef TQT_NO_ACCEL
- TQAccel* a = new TQAccel( this );
- a->connectItem( a->insertItem( TQt::ALT + Qt::Key_Minus),
- this, TQT_SLOT( showOperationMenu() ) );
-
- a->connectItem( a->insertItem( TQt::CTRL + Qt::Key_F6),
- this, TQT_SLOT( activateNextWindow() ) );
- a->connectItem( a->insertItem( TQt::CTRL + Qt::Key_Tab),
- this, TQT_SLOT( activateNextWindow() ) );
- a->connectItem( a->insertItem( Qt::Key_Forward ),
- this, TQT_SLOT( activateNextWindow() ) );
-
- a->connectItem( a->insertItem( TQt::CTRL + TQt::SHIFT + Qt::Key_F6),
- this, TQT_SLOT( activatePreviousWindow() ) );
- a->connectItem( a->insertItem( TQt::CTRL + TQt::SHIFT + Qt::Key_Tab),
- this, TQT_SLOT( activatePreviousWindow() ) );
- a->connectItem( a->insertItem( Qt::Key_Back ),
- this, TQT_SLOT( activatePreviousWindow() ) );
-
- a->connectItem( a->insertItem( TQt::CTRL + Qt::Key_F4 ),
- this, TQT_SLOT( closeActiveWindow() ) );
-#endif
-
- setBackgroundMode( TQt::PaletteDark );
- tqsetSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Expanding ) );
-
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- d->topCaption = tqtopLevelWidget()->caption();
-#endif
-
- d->hbar = d->vbar = 0;
- d->corner = 0;
- d->xoffset = d->yoffset = 0;
-
- updateWorkspace();
-
- tqtopLevelWidget()->installEventFilter( this );
-}
-
-/*! Destroys the workspace and frees any allocated resources. */
-
-TQWorkspace::~TQWorkspace()
-{
- delete d;
- d = 0;
-}
-
-/*!\reimp */
-TQSize TQWorkspace::tqsizeHint() const
-{
- TQSize s( TQApplication::desktop()->size() );
- return TQSize( s.width()*2/3, s.height()*2/3);
-}
-
-/*! \reimp */
-void TQWorkspace::setPaletteBackgroundColor( const TQColor & c )
-{
- setEraseColor( c );
-}
-
-
-/*! \reimp */
-void TQWorkspace::setPaletteBackgroundPixmap( const TQPixmap & pm )
-{
- setErasePixmap( pm );
-}
-
-/*! \reimp */
-void TQWorkspace::childEvent( TQChildEvent * e)
-{
- if (e->inserted() && e->child()->isWidgetType()) {
- TQWidget* w = static_cast<TQWidget*>(static_cast<QWidget*>(e->child()));
- if ( !w || !w->testWFlags( (WFlags)(TQt::WStyle_Title | TQt::WStyle_NormalBorder | TQt::WStyle_DialogBorder) ) || w->testWFlags(TQt::WType_Dialog)
- || d->icons.contains( w ) || w == d->vbar || w == d->hbar || w == d->corner )
- return; // nothing to do
-
- bool wasMaximized = w->isMaximized();
- bool wasMinimized = w->isMinimized();
- bool hasBeenHidden = w->isHidden();
- bool hasSize = w->testWState( TQt::WState_Resized );
- int x = w->x();
- int y = w->y();
- bool hasPos = x != 0 || y != 0;
- TQSize s = w->size().expandedTo( w->minimumSizeHint() );
- if ( !hasSize && w->sizeHint().isValid() ) {
- w->adjustSize();
- }
-
- TQWorkspaceChild* child = new TQWorkspaceChild( w, this, "qt_workspacechild" );
- child->installEventFilter( this );
-
- connect( child, TQT_SIGNAL( popupOperationMenu(const TQPoint&) ),
- this, TQT_SLOT( popupOperationMenu(const TQPoint&) ) );
- connect( child, TQT_SIGNAL( showOperationMenu() ),
- this, TQT_SLOT( showOperationMenu() ) );
- d->windows.append( child );
- if ( child->isVisibleTo( this ) ) {
- d->focus.append( child );
- }
- child->internalRaise();
-
- if ( !hasPos )
- place( child );
- if ( hasSize )
- child->resize( s + child->baseSize() );
- else
- child->adjustSize();
- if ( hasPos )
- child->move( x, y );
-
- if ( hasBeenHidden )
- w->hide();
- else if ( !isVisible() ) // that's a case were we don't receive a showEvent in time. Tricky.
- child->show();
-
- if ( wasMaximized )
- w->showMaximized();
- else if ( wasMinimized )
- w->showMinimized();
- else if (!hasBeenHidden)
- activateWindow( w );
-
- updateWorkspace();
- } else if (e->removed() ) {
- if ( d->windows.contains( (TQWorkspaceChild*)e->child() ) ) {
- d->windows.removeRef( (TQWorkspaceChild*)e->child() );
- d->focus.removeRef( (TQWorkspaceChild*)e->child() );
- if (d->maxWindow == e->child())
- d->maxWindow = 0;
- updateWorkspace();
- }
- }
-}
-
-/*! \reimp
-*/
-#ifndef TQT_NO_WHEELEVENT
-void TQWorkspace::wheelEvent( TQWheelEvent *e )
-{
- if ( !scrollBarsEnabled() )
- return;
- if ( d->vbar && d->vbar->isVisible() && !( e->state() & TQt::AltButton ) )
- TQApplication::sendEvent( d->vbar, e );
- else if ( d->hbar && d->hbar->isVisible() )
- TQApplication::sendEvent( d->hbar, e );
-}
-#endif
-
-void TQWorkspace::activateWindow( TQWidget* w, bool change_focus )
-{
- if ( !w ) {
- d->active = 0;
- emit windowActivated( 0 );
- return;
- }
- if ( d->wmode == MDI && !isVisibleTo( 0 ) ) {
- d->becomeActive = w;
- return;
- }
-
- if ( d->active && d->active->windowWidget() == w ) {
- if ( !isChildOf( tqfocusWidget(), w ) ) // child window does not have focus
- d->active->setActive( TRUE );
- return;
- }
-
- d->active = 0;
- // First deactivate all other workspace clients
- TQPtrListIterator<TQWorkspaceChild> it( d->windows );
- while ( it.current () ) {
- TQWorkspaceChild* c = it.current();
- ++it;
- if(windowMode() == TQWorkspace::TopLevel && c->isTopLevel() &&
- c->windowWidget() == w && !c->isActive())
- c->setActiveWindow();
- if (c->windowWidget() == w)
- d->active = c;
- else
- c->setActive( FALSE );
- }
-
- if (!d->active)
- return;
-
- // Then activate the new one, so the focus is stored correctly
- d->active->setActive( TRUE );
-
- if (!d->active)
- return;
-
- if ( d->maxWindow && d->maxWindow != d->active && d->active->windowWidget() &&
- d->active->windowWidget()->testWFlags( TQt::WStyle_MinMax ) &&
- !d->active->windowWidget()->testWFlags( TQt::WStyle_Tool ) ) {
- d->active->showMaximized();
- if ( d->maxtools ) {
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- if ( w->icon() ) {
- TQPixmap pm(*w->icon());
- int iconSize = d->maxtools->size().height();
- if(pm.width() > iconSize || pm.height() > iconSize) {
- TQImage im;
- im = pm;
- pm = im.smoothScale( TQMIN(iconSize, pm.width()), TQMIN(iconSize, pm.height()) );
- }
- d->maxtools->setPixmap( pm );
- } else
-#endif
- {
- TQPixmap pm(14,14);
- pm.fill( Qt::color1 );
- pm.setMask(pm.createHeuristicMask());
- d->maxtools->setPixmap( pm );
- }
- }
- } else { // done implicitly in maximizeWindow otherwise
- d->active->internalRaise();
- }
-
- if ( change_focus ) {
- if ( d->focus.find( d->active ) >=0 ) {
- d->focus.removeRef( d->active );
- d->focus.append( d->active );
- }
- }
-
- updateWorkspace();
- emit windowActivated( w );
-}
-
-
-/*!
- Returns the active window, or 0 if no window is active.
-*/
-TQWidget* TQWorkspace::activeWindow() const
-{
- return d->active?d->active->windowWidget():0;
-}
-
-
-void TQWorkspace::place( TQWidget* w)
-{
- TQPtrList<TQWidget> widgets;
- for(TQPtrListIterator<TQWorkspaceChild> it( d->windows ); it.current(); ++it)
- if ((*it) != w)
- widgets.append((*it));
-
- if(d->wmode == TopLevel) {
- for(TQPtrListIterator<TQDockWindow> it( d->dockwindows ); it.current(); ++it)
- if ((*it) != w)
- widgets.append((*it));
- }
-
- int overlap, minOverlap = 0;
- int possible;
-
- TQRect r1(0, 0, 0, 0);
- TQRect r2(0, 0, 0, 0);
- TQRect maxRect = rect();
- if(d->wmode == TopLevel) {
- const TQDesktopWidget *dw = tqApp->desktop();
- maxRect = dw->availableGeometry(dw->screenNumber(tqtopLevelWidget()));
- }
- int x = maxRect.left(), y = maxRect.top();
- TQPoint wpos(maxRect.left(), maxRect.top());
-
- bool firstPass = TRUE;
-
- do {
- if ( y + w->height() > maxRect.bottom() ) {
- overlap = -1;
- } else if( x + w->width() > maxRect.right() ) {
- overlap = -2;
- } else {
- overlap = 0;
-
- r1.setRect(x, y, w->width(), w->height());
-
- TQWidget *l;
- TQPtrListIterator<TQWidget> it( widgets );
- while ( it.current () ) {
- l = it.current();
- ++it;
-
- if ( d->maxWindow == l )
- r2 = d->maxRestore;
- else
- r2.setRect(l->x(), l->y(), l->width(), l->height());
-
- if (r2.intersects(r1)) {
- r2.setCoords(TQMAX(r1.left(), r2.left()),
- TQMAX(r1.top(), r2.top()),
- TQMIN(r1.right(), r2.right()),
- TQMIN(r1.bottom(), r2.bottom())
- );
-
- overlap += (r2.right() - r2.left()) *
- (r2.bottom() - r2.top());
- }
- }
- }
-
- if (overlap == 0) {
- wpos = TQPoint(x, y);
- break;
- }
-
- if (firstPass) {
- firstPass = FALSE;
- minOverlap = overlap;
- } else if ( overlap >= 0 && overlap < minOverlap) {
- minOverlap = overlap;
- wpos = TQPoint(x, y);
- }
-
- if ( overlap > 0 ) {
- possible = maxRect.right();
- if ( possible - w->width() > x) possible -= w->width();
-
- TQWidget *l;
- TQPtrListIterator<TQWidget> it( widgets );
- while ( it.current () ) {
- l = it.current();
- ++it;
- if ( d->maxWindow == l )
- r2 = d->maxRestore;
- else
- r2.setRect(l->x(), l->y(), l->width(), l->height());
-
- if( ( y < r2.bottom() ) && ( r2.top() < w->height() + y ) ) {
- if( r2.right() > x )
- possible = possible < r2.right() ?
- possible : r2.right();
-
- if( r2.left() - w->width() > x )
- possible = possible < r2.left() - w->width() ?
- possible : r2.left() - w->width();
- }
- }
-
- x = possible;
- } else if ( overlap == -2 ) {
- x = maxRect.left();
- possible = maxRect.bottom();
-
- if ( possible - w->height() > y ) possible -= w->height();
-
- TQWidget *l;
- TQPtrListIterator<TQWidget> it( widgets );
- while ( it.current () ) {
- l = it.current();
- ++it;
- if ( d->maxWindow == l )
- r2 = d->maxRestore;
- else
- r2.setRect(l->x(), l->y(), l->width(), l->height());
-
- if( r2.bottom() > y)
- possible = possible < r2.bottom() ?
- possible : r2.bottom();
-
- if( r2.top() - w->height() > y )
- possible = possible < r2.top() - w->height() ?
- possible : r2.top() - w->height();
- }
-
- y = possible;
- }
- }
- while( overlap != 0 && overlap != -1 );
-
-#if 0
- if(windowMode() == TQWorkspace::TopLevel && wpos.y()) {
- TQPoint fr = w->tqtopLevelWidget()->frameGeometry().topLeft(),
- r = w->tqtopLevelWidget()->tqgeometry().topLeft();
- wpos += TQPoint(r.x() - fr.x(), r.y() - fr.y());
- }
-#endif
- w->move(wpos);
- updateWorkspace();
-}
-
-
-void TQWorkspace::insertIcon( TQWidget* w )
-{
- if ( !w || d->icons.contains( w ) )
- return;
- d->icons.append( w );
- if (w->parentWidget() != this )
- w->reparent( this, 0, TQPoint(0,0), FALSE);
- TQRect cr = updateWorkspace();
- int x = 0;
- int y = cr.height() - w->height();
-
- TQPtrListIterator<TQWidget> it( d->icons );
- while ( it.current () ) {
- TQWidget* i = it.current();
- ++it;
- if ( x > 0 && x + i->width() > cr.width() ){
- x = 0;
- y -= i->height();
- }
-
- if ( i != w &&
- i->tqgeometry().intersects( TQRect( x, y, w->width(), w->height() ) ) )
- x += i->width();
- }
- w->move( x, y );
-
- if ( isVisibleTo( parentWidget() ) ) {
- w->show();
- w->lower();
- }
- updateWorkspace();
-}
-
-
-void TQWorkspace::removeIcon( TQWidget* w)
-{
- if ( !d->icons.contains( w ) )
- return;
- d->icons.remove( w );
- w->hide();
-}
-
-
-/*! \reimp */
-void TQWorkspace::resizeEvent( TQResizeEvent * )
-{
- if ( d->maxWindow ) {
- d->maxWindow->adjustToFullscreen();
- if (d->maxWindow->windowWidget())
- ((TQWorkspace*)d->maxWindow->windowWidget())->setWState( TQt::WState_Maximized );
- }
-
- TQRect cr = updateWorkspace();
-
- TQPtrListIterator<TQWorkspaceChild> it( d->windows );
- while ( it.current () ) {
- TQWorkspaceChild* c = it.current();
- ++it;
- if ( c->windowWidget() && !c->windowWidget()->testWFlags( TQt::WStyle_Tool ) )
- continue;
-
- int x = c->x();
- int y = c->y();
- if ( c->snappedDown )
- y = cr.height() - c->height();
- if ( c->snappedRight )
- x = cr.width() - c->width();
-
- if ( x != c->x() || y != c->y() )
- c->move( x, y );
- }
-
-}
-
-void TQWorkspace::handleUndock(TQDockWindow *w)
-{
- const TQDesktopWidget *dw = tqApp->desktop();
- TQRect maxRect = dw->availableGeometry(dw->screenNumber(d->mainwindow));
- TQPoint wpos(maxRect.left(), maxRect.top());
- int possible = 0;
- if(!::tqqt_cast<TQToolBar*>(w)) {
- struct place_score { int o, x, y; } score = {0, 0, 0};
- int left = 1, x = wpos.x(), y = wpos.y();
- TQPtrListIterator<TQDockWindow> it( d->dockwindows );
- while(1) {
- if(y + w->height() > maxRect.bottom()) {
- if(left) {
- x = maxRect.right() - w->width();
- y = maxRect.top();
- left = 0;
- } else {
- break;
- }
- }
-
- TQDockWindow *l, *nearest = NULL, *furthest;
- for ( it.toFirst(); it.current(); ++it ) {
- l = it.current();
- if ( l != w && y == l->y() ) {
- if(!nearest) {
- nearest = l;
- } else if(l->x() == x) {
- nearest = l;
- break;
- } else if(left && (l->x() - x) < (nearest->x() - x)) {
- nearest = l;
- } else if(!left && (x - l->x()) < (x - nearest->x())) {
- nearest = l;
- }
- }
- }
- TQRect r2(x, y, w->width(), w->height());
- if(!nearest || !nearest->tqgeometry().intersects(r2)) {
- wpos = TQPoint(x, y); //best possible outcome
- possible = 2;
- break;
- }
-
- TQDockWindow *o = NULL;
- int overlap = 0;
- for( it.toFirst(); it.current(); ++it ) {
- l = it.current();
- if ( l != w && l->tqgeometry().intersects(TQRect(TQPoint(x, y), w->size()))) {
- overlap++;
- o = l;
- }
- }
- if(o && overlap == 1 && w->isVisible() && !o->isVisible()) {
- wpos = TQPoint(x, y);
- possible = 2;
- while(d->dockwindows.remove(o));
- d->newdocks.append(o);
- if(d->newdocks.count() == 1)
- TQTimer::singleShot(0, this, TQT_SLOT(dockWindowsShow()));
- break;
- }
-
- for ( furthest = nearest, it.toFirst(); it.current(); ++it ) {
- l = it.current();
- if ( l != w && l->y() == nearest->y() &&
- ((left && (l->x() == nearest->x() + nearest->width())) ||
- (!left && (l->x() + l->width() == nearest->x()) )))
- furthest = l;
- }
- if(left)
- x = furthest->x() + furthest->width();
- else
- x = furthest->x() - w->width();
-
- TQPoint sc_pt(x, y);
- place_score sc;
- if(left)
- sc.x = (x + w->width()) * 2;
- else
- sc.x = ((maxRect.width() - x) * 2) + 1;
- sc.y = sc_pt.y();
- for( sc.o = 0, it.toFirst(); it.current(); ++it ) {
- l = it.current();
- if ( l != w && l->tqgeometry().intersects(TQRect(sc_pt, w->size())))
- sc.o++;
- }
- if(maxRect.contains(TQRect(sc_pt, w->size())) &&
- (!possible || (sc.o < score.o) ||
- ((score.o || sc.o == score.o) && score.x < sc.x))) {
- wpos = sc_pt;
- score = sc;
- possible = 1;
- }
- y += nearest->height();
- if(left)
- x = maxRect.x();
- else
- x = maxRect.right() - w->width();
- }
- if(!possible || (possible == 1 && score.o)) { //fallback to less knowledgeable function
- place(w);
- wpos = w->pos();
- }
- }
-
- bool ishidden = w->isHidden();
- TQSize olds(w->size());
- if(w->place() == TQDockWindow::InDock)
- w->undock();
- w->move(wpos);
- w->resize(olds);
- if(!ishidden)
- w->show();
- else
- w->hide();
-}
-
-void TQWorkspace::dockWindowsShow()
-{
- TQPtrList<TQDockWindow> lst = d->newdocks;
- d->newdocks.clear();
- for(TQPtrListIterator<TQDockWindow> dw_it(lst); (*dw_it); ++dw_it) {
- if(d->dockwindows.find((*dw_it)) != -1)
- continue;
- handleUndock((*dw_it));
- d->dockwindows.append((*dw_it));
- }
-}
-
-/*! \reimp */
-void TQWorkspace::showEvent( TQShowEvent *e )
-{
- /* This is all magic, be carefull when playing with this code - this tries to allow people to
- use TQWorkspace as a high level abstraction for window management, but removes enforcement that
- TQWorkspace be used as an MDI. */
- if(d->wmode == AutoDetect) {
- d->wmode = MDI;
- TQWidget *o = tqtopLevelWidget();
- if(::tqqt_cast<TQMainWindow*>(o)) {
- d->wmode = TopLevel;
- for(TQObjectListIt it(o->childrenListObject()); it; ++it) {
- if((*it)->isWidgetType() && !((TQWidget *)(*it))->isTopLevel() &&
- !::tqqt_cast<TQHBox*>(*it) && !::tqqt_cast<TQVBox*>(*it) &&
- !::tqqt_cast<TQWorkspaceChild*>(*it) && !(*it)->inherits("TQHideDock") &&
- !::tqqt_cast<TQDockArea*>(*it) && !::tqqt_cast<TQWorkspace*>(*it) &&
- !::tqqt_cast<TQMenuBar*>(*it) && !::tqqt_cast<TQStatusBar*>(*it)) {
- d->wmode = MDI;
- break;
- }
- }
- }
- }
- if(d->wmode == TopLevel) {
- TQWidget *o = tqtopLevelWidget();
- d->mainwindow = ::tqqt_cast<TQMainWindow*>(o);
- const TQObjectList tqchildren = o->childrenListObject();
- for(TQObjectListIt it(tqchildren); it; ++it) {
- if(!(*it)->isWidgetType())
- continue;
- TQWidget *w = (TQWidget *)(*it);
- if(w->isTopLevel())
- continue;
- if(::tqqt_cast<TQDockArea*>(w)) {
- if(!w->childrenListObject().isEmpty()) {
- TQPtrList<TQToolBar> tb_list;
- for(TQObjectListIt dock_it(w->childrenListObject()); dock_it; ++dock_it) {
- if(!(*dock_it)->isWidgetType())
- continue;
- if(::tqqt_cast<TQToolBar*>(*dock_it)) {
- tb_list.append((TQToolBar *)(*dock_it));
- } else if (::tqqt_cast<TQDockWindow*>(*dock_it)) {
- TQDockWindow *dw = (TQDockWindow*)(*dock_it);
- dw->move(dw->mapToGlobal(TQPoint(0, 0)));
- d->newdocks.append(dw);
- } else {
- qDebug("not sure what to do with %s %s", (*dock_it)->className(),
- (*dock_it)->name());
- }
- }
- if(tb_list.count() == 1) {
- TQToolBar *tb = tb_list.first();
- tb->move(0, 0);
- d->newdocks.prepend(tb);
- } else if(tb_list.count()) {
- TQDockWindow *dw = new TQDockWindow(TQDockWindow::OutsideDock,
- w->parentWidget(),
- (TQString("TQMagicDock_") + w->name()).ascii());
- dw->installEventFilter(this);
- dw->setResizeEnabled(TRUE);
- dw->setCloseMode( TQDockWindow::Always );
- dw->setResizeEnabled(FALSE);
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- dw->setCaption(o->caption());
-#endif
- TQSize os(w->size());
- if(w->tqlayout() && w->tqlayout()->hasHeightForWidth()) {
- w->tqlayout()->tqinvalidate();
- os.setHeight(w->tqlayout()->heightForWidth(os.width()));
- }
- if(!w->isHidden())
- dw->show();
- w->reparent(dw, TQPoint(0, 0));
- dw->setWidget(w);
- dw->tqsetSizePolicy(TQSizePolicy(TQSizePolicy::Minimum, TQSizePolicy::Minimum));
- dw->setGeometry(0, 0, os.width(), os.height() + dw->sizeHint().height());
- d->newdocks.prepend(dw);
- ((TQDockArea*)w)->setAcceptDockWindow(dw, FALSE);
- w->show();
- }
- }
- w->installEventFilter(this);
- } else if(::tqqt_cast<TQStatusBar*>(w)) {
- if(activeWindow()) {
- TQWorkspaceChild *c;
- if ( ( c = findChild(activeWindow()) ) )
- c->setqStatusBar((TQStatusBar*)w);
- }
- } else if(::tqqt_cast<TQWorkspaceChild*>(w)) {
- w->reparent(this, w->testWFlags((WFlags)((WFlags)(~(0))) | (WFlags)TQt::WType_TopLevel), w->pos());
- }
- }
- dockWindowsShow(); //now place and undock windows discovered
-
- TQWidget *w = new TQWidget(NULL, "TQDoesNotExist",
- (WFlags)(TQt::WType_Dialog | WStyle_Customize | TQt::WStyle_NoBorder));
-// if(tqApp->mainWidget() == o)
-// TQObject::connect(tqApp, TQT_SIGNAL(lastWindowClosed()), tqApp, TQT_SLOT(quit()));
- TQDesktopWidget *dw = TQApplication::desktop();
- w->setGeometry(dw->availableGeometry(dw->screenNumber(o)));
- o->reparent(w, TQPoint(0, 0), TRUE);
- {
- TQMenuBar *mb = 0;
- if(::tqqt_cast<TQMainWindow*>(o))
- mb = ((TQMainWindow *)o)->menuBar();
- if(!mb)
- mb = (TQMenuBar*)o->child(NULL, "TQMenuBar");
- if(mb)
- mb->reparent(w, TQPoint(0, 0));
- }
- reparent(w, TQPoint(0,0));
- setGeometry(0, 0, w->width(), w->height());
-#if 0
- /* Hide really isn't acceptable because I need to make the rest of TQt
- think it is visible, so instead I set it to an empty mask. I'm not
- sure what problems this is going to create, hopefully everything will
- be happy (or not even notice since this is mostly intended for TQt/Mac) */
-// w->setMask(TQRegion());
-// w->show();
-#else
- w->hide();
-#endif
- }
-
- //done with that nastiness, on with your regularly scheduled programming..
- if ( d->maxWindow && !tqstyle().tqstyleHint(TQStyle::SH_Workspace_FillSpaceOnMaximize, this))
- showMaximizeControls();
- TQWidget::showEvent( e );
- if ( d->becomeActive ) {
- activateWindow( d->becomeActive );
- d->becomeActive = 0;
- } else if ( d->windows.count() > 0 && !d->active ) {
- activateWindow( d->windows.first()->windowWidget() );
- }
-
- // force a frame tqrepaint - this is a workaround for what seems to be a bug
- // introduced when changing the TQWidget::show() implementation. Might be
- // a windows bug as well though.
- for (TQPtrListIterator<TQWorkspaceChild> it( d->windows ); it.current(); ++it ) {
- TQWorkspaceChild* c = it.current();
- TQApplication::postEvent(c, new TQPaintEvent(c->rect(), TRUE));
- }
-
- updateWorkspace();
-}
-
-/*! \reimp */
-void TQWorkspace::hideEvent( TQHideEvent * )
-{
- if ( !isVisibleTo(0) && !tqstyle().tqstyleHint(TQStyle::SH_Workspace_FillSpaceOnMaximize, this))
- hideMaximizeControls();
-}
-
-void TQWorkspace::minimizeWindow( TQWidget* w)
-{
- TQWorkspaceChild* c = findChild( w );
-
- if ( !w || (w && (!w->testWFlags( TQt::WStyle_Minimize ) || w->testWFlags( TQt::WStyle_Tool) )) )
- return;
-
- if ( c ) {
- TQWorkspace *fake = (TQWorkspace*)w;
-
- setUpdatesEnabled( FALSE );
- bool wasMax = FALSE;
- if ( c == d->maxWindow ) {
- wasMax = TRUE;
- d->maxWindow = 0;
- inCaptionChange = TRUE;
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- if ( !!d->topCaption )
- tqtopLevelWidget()->setCaption( d->topCaption );
-#endif
- inCaptionChange = FALSE;
- if ( !tqstyle().tqstyleHint(TQStyle::SH_Workspace_FillSpaceOnMaximize, this) )
- hideMaximizeControls();
- for (TQPtrListIterator<TQWorkspaceChild> it( d->windows ); it.current(); ++it ) {
- TQWorkspaceChild* c = it.current();
- if ( c->titlebar )
- c->titlebar->setMovable( TRUE );
- c->widgetResizeHandler->setActive( TRUE );
- }
- }
-
- insertIcon( c->iconWidget() );
- c->hide();
- if ( wasMax )
- c->setGeometry( d->maxRestore );
- d->focus.append( c );
-
- activateWindow(w);
-
- setUpdatesEnabled( TRUE );
- updateWorkspace();
-
- fake->clearWState( TQt::WState_Maximized );
- fake->setWState( TQt::WState_Minimized );
- c->clearWState( TQt::WState_Maximized );
- c->setWState( TQt::WState_Minimized );
- }
-}
-
-void TQWorkspace::normalizeWindow( TQWidget* w)
-{
- TQWorkspaceChild* c = findChild( w );
- if ( !w )
- return;
- if ( c ) {
- TQWorkspace *fake = (TQWorkspace*)w;
- fake->clearWState( TQt::WState_Minimized | TQt::WState_Maximized );
- if ( !tqstyle().tqstyleHint(TQStyle::SH_Workspace_FillSpaceOnMaximize, this) && d->maxWindow ) {
- hideMaximizeControls();
- } else {
- if ( w->tqminimumSize() != w->tqmaximumSize() )
- c->widgetResizeHandler->setActive( TRUE );
- if ( c->titlebar )
- c->titlebar->setMovable(TRUE);
- }
- fake->clearWState( TQt::WState_Minimized | TQt::WState_Maximized );
- c->clearWState( TQt::WState_Minimized | TQt::WState_Maximized );
-
- if ( c == d->maxWindow ) {
- c->setGeometry( d->maxRestore );
- d->maxWindow = 0;
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- inCaptionChange = TRUE;
- if ( !!d->topCaption )
- tqtopLevelWidget()->setCaption( d->topCaption );
- inCaptionChange = FALSE;
-#endif
- } else {
- if ( c->iconw )
- removeIcon( c->iconw->parentWidget() );
- c->show();
- }
-
- if ( !tqstyle().tqstyleHint(TQStyle::SH_Workspace_FillSpaceOnMaximize, this))
- hideMaximizeControls();
- for (TQPtrListIterator<TQWorkspaceChild> it( d->windows ); it.current(); ++it ) {
- TQWorkspaceChild* c = it.current();
- if ( c->titlebar )
- c->titlebar->setMovable( TRUE );
- if ( c->childWidget && c->childWidget->tqminimumSize() != c->childWidget->tqmaximumSize() )
- c->widgetResizeHandler->setActive( TRUE );
- }
- activateWindow( w, TRUE );
- updateWorkspace();
- }
-}
-
-void TQWorkspace::maximizeWindow( TQWidget* w)
-{
- TQWorkspaceChild* c = findChild( w );
-
- if ( !w || (w && (!w->testWFlags( TQt::WStyle_Maximize ) || w->testWFlags( TQt::WStyle_Tool) )) )
- return;
-
- if ( c ) {
- setUpdatesEnabled( FALSE );
- if (c->iconw && d->icons.contains( c->iconw->parentWidget() ) )
- normalizeWindow( w );
- TQWorkspace *fake = (TQWorkspace*)w;
-
- TQRect r( c->tqgeometry() );
- c->adjustToFullscreen();
- c->show();
- c->internalRaise();
- tqApp->sendPostedEvents( c, TQEvent::Resize );
- tqApp->sendPostedEvents( c, TQEvent::Move );
- tqApp->sendPostedEvents( c, TQEvent::ShowWindowRequest );
- if ( d->maxWindow != c ) {
- if ( d->maxWindow )
- d->maxWindow->setGeometry( d->maxRestore );
- d->maxWindow = c;
- d->maxRestore = r;
- }
-
- activateWindow( w );
- if(!tqstyle().tqstyleHint(TQStyle::SH_Workspace_FillSpaceOnMaximize, this)) {
- showMaximizeControls();
- } else {
- c->widgetResizeHandler->setActive( FALSE );
- if ( c->titlebar )
- c->titlebar->setMovable( FALSE );
- }
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- inCaptionChange = TRUE;
- if ( !!d->topCaption )
- tqtopLevelWidget()->setCaption( tqtr("%1 - [%2]")
- .arg(d->topCaption).arg(c->caption()) );
- inCaptionChange = FALSE;
-#endif
- setUpdatesEnabled( TRUE );
-
- updateWorkspace();
-
- fake->clearWState( TQt::WState_Minimized );
- fake->setWState( TQt::WState_Maximized );
- c->clearWState( TQt::WState_Minimized );
- c->setWState( TQt::WState_Maximized );
- }
-}
-
-void TQWorkspace::showWindow( TQWidget* w)
-{
- if ( d->maxWindow && w->testWFlags( TQt::WStyle_Maximize ) && !w->testWFlags( TQt::WStyle_Tool) )
- maximizeWindow(w);
- else if (w->isMinimized() && !w->testWFlags(TQt::WStyle_Tool))
- minimizeWindow(w);
- else if ( !w->testWFlags( TQt::WStyle_Tool ) )
- normalizeWindow(w);
- else
- w->parentWidget()->show();
- if ( d->maxWindow )
- d->maxWindow->internalRaise();
- updateWorkspace();
-}
-
-
-TQWorkspaceChild* TQWorkspace::findChild( TQWidget* w)
-{
- TQPtrListIterator<TQWorkspaceChild> it( d->windows );
- while ( it.current () ) {
- TQWorkspaceChild* c = it.current();
- ++it;
- if (c->windowWidget() == w)
- return c;
- }
- return 0;
-}
-
-/*!
- \obsolete
- \overload
- */
-TQWidgetList TQWorkspace::windowList() const
-{
- return windowList( CreationOrder );
-}
-
-/*!
- Returns a list of all windows. If \a order is CreationOrder
- (the default) the windows are listed in the order in which they
- had been inserted into the workspace. If \a order is StackingOrder
- the windows are listed in their stacking order, with the topmost window
- being the last window in the list.
-
- TQWidgetList is the same as TQPtrList<TQWidget>.
-
- \sa TQPtrList
-*/
-TQWidgetList TQWorkspace::windowList( WindowOrder order ) const
-{
- TQWidgetList windows;
- if ( order == StackingOrder ) {
- if ( !childrenListObject().isEmpty() ) {
- TQObjectListIt it( childrenListObject() );
- while (it.current()) {
- TQObject *o = it.current();
- ++it;
- TQWorkspaceChild *c = ::tqqt_cast<TQWorkspaceChild*>(o);
- if (c && c->windowWidget())
- windows.append(c->windowWidget());
- }
- }
- } else {
- TQPtrListIterator<TQWorkspaceChild> it( d->windows );
- while (it.current()) {
- TQWorkspaceChild* c = it.current();
- ++it;
- if ( c->windowWidget() )
- windows.append( c->windowWidget() );
- }
- }
- return windows;
-}
-
-/*!\reimp*/
-bool TQWorkspace::eventFilter( TQObject *o, TQEvent * e)
-{
- if(d->wmode == TopLevel && d->mainwindow && TQT_BASE_OBJECT(TQT_TQOBJECT(o)->parent()) == TQT_BASE_OBJECT(d->mainwindow)) {
- if((e->type() == TQEvent::ChildInserted || e->type() == TQEvent::Reparent) &&
- ::tqqt_cast<TQDockArea*>(o) && !((TQWidget*)o)->isVisible()) {
- TQChildEvent *ce = (TQChildEvent*)e;
- if(!::tqqt_cast<TQDockWindow*>(ce->child())) {
- qDebug("No idea what to do..");
- return FALSE;
- }
- TQDockWindow *w = (TQDockWindow*)ce->child();
- if(d->newdocks.find(w) == -1 && d->dockwindows.find(w) == -1) {
- if(::tqqt_cast<TQToolBar*>(w))
- d->newdocks.prepend(w);
- else
- d->newdocks.append(w);
- if(d->newdocks.count() == 1)
- TQTimer::singleShot(0, this, TQT_SLOT(dockWindowsShow()));
- }
- } else if(e->type() == TQEvent::Hide && !e->spontaneous() && !tqstrncmp(o->name(), "TQMagicDock_", 11)) {
-// d->mainwindow->close();
- }
- return TQWidget::eventFilter(o, e);
- }
-
- static TQTime* t = 0;
- static TQWorkspace* tc = 0;
-#ifndef TQT_NO_MENUBAR
- if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(d->maxtools) && d->menuId != -1 ) {
- switch ( e->type() ) {
- case TQEvent::MouseButtonPress:
- {
- TQMenuBar* b = (TQMenuBar*)o->parent();
- if ( !t )
- t = new TQTime;
- if ( tc != this || t->elapsed() > TQApplication::doubleClickInterval() ) {
- if ( TQApplication::reverseLayout() ) {
- TQPoint p = b->mapToGlobal( TQPoint( b->x() + b->width(), b->y() + b->height() ) );
- p.rx() -= d->popup->sizeHint().width();
- popupOperationMenu( p );
- } else {
- popupOperationMenu( b->mapToGlobal( TQPoint( b->x(), b->y() + b->height() ) ) );
- }
- t->start();
- tc = this;
- } else {
- tc = 0;
- closeActiveWindow();
- }
- return TRUE;
- }
- default:
- break;
- }
- return TQWidget::eventFilter( o, e );
- }
-#endif
- switch ( e->type() ) {
- case TQEvent::Hide:
- case TQEvent::HideToParent:
- if ( !o->isA( "TQWorkspaceChild" ) || !isVisible() || e->spontaneous() )
- break;
- if ( TQT_BASE_OBJECT(d->active) == TQT_BASE_OBJECT(o) ) {
- int a = d->focus.find( d->active );
- if (a < 0) {
- printf("[WARNING] In TQWorkspace TQEvent::HideToParent handler: Expected active window to be present in focus list but this was not the case! Avoiding infinite loop but the root cause of this problem should be repaired. d->focus.count(): %d\n\r", d->focus.count());
- break;
- }
- for ( ;; ) {
- if ( --a < 0 )
- a = d->focus.count()-1;
- TQWorkspaceChild* c = d->focus.at( a );
- if ( !c || TQT_BASE_OBJECT(c) == TQT_BASE_OBJECT(o) ) {
- if ( c && c->iconw && d->icons.contains( c->iconw->parentWidget() ) )
- break;
- activateWindow( 0 );
- break;
- }
- if ( c->isShown() ) {
- activateWindow( c->windowWidget(), FALSE );
- break;
- }
- }
- }
- d->focus.removeRef( (TQWorkspaceChild*)o );
- if ( TQT_BASE_OBJECT(d->maxWindow) == TQT_BASE_OBJECT(o) && d->maxWindow->isHidden() ) {
- d->maxWindow->setGeometry( d->maxRestore );
- d->maxWindow = 0;
- if ( d->active )
- maximizeWindow( d->active );
-
- if ( !d->maxWindow ) {
-
- if ( tqstyle().tqstyleHint(TQStyle::SH_Workspace_FillSpaceOnMaximize, this)) {
- TQWorkspaceChild *wc = (TQWorkspaceChild *)o;
- wc->widgetResizeHandler->setActive( TRUE );
- if ( wc->titlebar )
- wc->titlebar->setMovable( TRUE );
- } else {
- hideMaximizeControls();
- }
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- inCaptionChange = TRUE;
- if ( !!d->topCaption )
- tqtopLevelWidget()->setCaption( d->topCaption );
- inCaptionChange = FALSE;
-#endif
- }
- }
- updateWorkspace();
- break;
- case TQEvent::Show:
- if ( o->isA("TQWorkspaceChild") && !d->focus.containsRef( (TQWorkspaceChild*)o ) ) {
- d->focus.append( (TQWorkspaceChild*)o );
- }
- updateWorkspace();
- break;
- case TQEvent::CaptionChange:
- if ( inCaptionChange )
- break;
-
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- inCaptionChange = TRUE;
- if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(tqtopLevelWidget()) ) {
- TQWidget *tlw = (TQWidget*)o;
- if ( !d->maxWindow
- || tlw->caption() != tqtr("%1 - [%2]").arg(d->topCaption).arg(d->maxWindow->caption()) )
- d->topCaption = tlw->caption();
- }
-
- if ( d->maxWindow && !!d->topCaption )
- tqtopLevelWidget()->setCaption( tqtr("%1 - [%2]")
- .arg(d->topCaption).arg(d->maxWindow->caption()));
- inCaptionChange = FALSE;
-#endif
-
- break;
- case TQEvent::Close:
- if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(tqtopLevelWidget()) )
- {
- TQPtrListIterator<TQWorkspaceChild> it( d->windows );
- while ( it.current () ) {
- TQWorkspaceChild* c = it.current();
- ++it;
- if ( c->shademode )
- c->showShaded();
- }
- } else if ( ::tqqt_cast<TQWorkspaceChild*>(o) ) {
- d->popup->hide();
- }
- updateWorkspace();
- break;
- default:
- break;
- }
- return TQWidget::eventFilter( o, e);
-}
-
-void TQWorkspace::showMaximizeControls()
-{
-#ifndef TQT_NO_MENUBAR
- TQ_ASSERT(d->maxWindow);
- TQMenuBar* b = 0;
-
- // Do a breadth-first search first on every parent,
- TQWidget* w = parentWidget();
- TQObjectList * l = 0;
- while ( !l && w ) {
- l = w->queryList( "TQMenuBar", 0, FALSE, FALSE );
- w = w->parentWidget();
- if ( l && !l->count() ) {
- delete l;
- l = 0;
- }
- }
-
- // and query recursively if nothing is found.
- if ( !l || !l->count() ) {
- if ( l )
- delete l;
- l = tqtopLevelWidget()->queryList( "TQMenuBar", 0, 0, TRUE );
- }
- if ( l && l->count() )
- b = (TQMenuBar *)l->first();
- delete l;
-
- if ( !b )
- return;
-
- if ( !d->maxcontrols ) {
- d->maxmenubar = b;
- d->maxcontrols = new TQFrame( tqtopLevelWidget(), "qt_maxcontrols" );
- TQHBoxLayout* l = new TQHBoxLayout( d->maxcontrols,
- d->maxcontrols->frameWidth(), 0 );
- if ( d->maxWindow->windowWidget() &&
- d->maxWindow->windowWidget()->testWFlags(TQt::WStyle_Minimize) ) {
- TQToolButton* iconB = new TQToolButton( d->maxcontrols, "iconify" );
-#ifndef TQT_NO_TOOLTIP
- TQToolTip::add( iconB, tqtr( "Minimize" ) );
-#endif
- l->addWidget( iconB );
- iconB->setFocusPolicy( Qt::NoFocus );
- iconB->setIconSet(tqstyle().stylePixmap(TQStyle::SP_TitleBarMinButton));
- iconB->setFixedSize(BUTTON_WIDTH, BUTTON_HEIGHT);
- connect( iconB, TQT_SIGNAL( clicked() ),
- this, TQT_SLOT( minimizeActiveWindow() ) );
- }
-
- TQToolButton* restoreB = new TQToolButton( d->maxcontrols, "restore" );
-#ifndef TQT_NO_TOOLTIP
- TQToolTip::add( restoreB, tqtr( "Restore Down" ) );
-#endif
- l->addWidget( restoreB );
- restoreB->setFocusPolicy( Qt::NoFocus );
- restoreB->setIconSet( tqstyle().stylePixmap(TQStyle::SP_TitleBarNormalButton));
- restoreB->setFixedSize(BUTTON_WIDTH, BUTTON_HEIGHT);
- connect( restoreB, TQT_SIGNAL( clicked() ),
- this, TQT_SLOT( normalizeActiveWindow() ) );
-
- l->addSpacing( 2 );
- TQToolButton* closeB = new TQToolButton( d->maxcontrols, "close" );
-#ifndef TQT_NO_TOOLTIP
- TQToolTip::add( closeB, tqtr( "Close" ) );
-#endif
- l->addWidget( closeB );
- closeB->setFocusPolicy( Qt::NoFocus );
- closeB->setIconSet( tqstyle().stylePixmap(TQStyle::SP_TitleBarCloseButton) );
- closeB->setFixedSize(BUTTON_WIDTH, BUTTON_HEIGHT);
- connect( closeB, TQT_SIGNAL( clicked() ),
- this, TQT_SLOT( closeActiveWindow() ) );
-
- d->maxcontrols->setFixedSize( d->maxcontrols->minimumSizeHint() );
- }
-
- if ( d->controlId == -1 || b->indexOf( d->controlId ) == -1 ) {
- TQFrame* dmaxcontrols = d->maxcontrols;
- d->controlId = b->insertItem( dmaxcontrols, -1, b->count() );
- }
- if ( !d->active && d->becomeActive ) {
- d->active = (TQWorkspaceChild*)d->becomeActive->parentWidget();
- d->active->setActive( TRUE );
- d->becomeActive = 0;
- emit windowActivated( d->active->windowWidget() );
- }
- if ( d->active && ( d->menuId == -1 || b->indexOf( d->menuId ) == -1 ) ) {
- if ( !d->maxtools ) {
- d->maxtools = new TQLabel( tqtopLevelWidget(), "qt_maxtools" );
- d->maxtools->installEventFilter( this );
- }
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- if ( d->active->windowWidget() && d->active->windowWidget()->icon() ) {
-// TQPixmap pm(*d->active->windowWidget()->icon());
- TQPixmap pm(d->active->windowWidget()->windowIcon().pixmap(14,14)); // [FIXME] Is there any way around hardcoding this value???
- int iconSize = d->maxcontrols->size().height();
- if(pm.width() > iconSize || pm.height() > iconSize) {
- TQImage im;
- im = pm;
- pm = im.smoothScale( TQMIN(iconSize, pm.width()), TQMIN(iconSize, pm.height()) );
- }
- d->maxtools->setPixmap( pm );
- } else
-#endif
- {
- TQPixmap pm(14,14);
- pm.fill( Qt::color1 );
- pm.setMask(pm.createHeuristicMask());
- d->maxtools->setPixmap( pm );
- }
- d->menuId = b->insertItem( d->maxtools, -1, 0 );
- }
-#endif
-}
-
-
-void TQWorkspace::hideMaximizeControls()
-{
-#ifndef TQT_NO_MENUBAR
- if ( d->maxmenubar ) {
- int mi = d->menuId;
- if ( mi != -1 ) {
- if ( d->maxmenubar->indexOf( mi ) != -1 )
- d->maxmenubar->removeItem( mi );
- d->maxtools = 0;
- }
- int ci = d->controlId;
- if ( ci != -1 && d->maxmenubar->indexOf( ci ) != -1 )
- d->maxmenubar->removeItem( ci );
- }
- d->maxcontrols = 0;
- d->menuId = -1;
- d->controlId = -1;
-#endif
-}
-
-/*!
- Closes the child window that is currently active.
-
- \sa closeAllWindows()
-*/
-void TQWorkspace::closeActiveWindow()
-{
- setUpdatesEnabled( FALSE );
- if ( d->maxWindow && d->maxWindow->windowWidget() )
- d->maxWindow->windowWidget()->close();
- else if ( d->active && d->active->windowWidget() )
- d->active->windowWidget()->close();
- setUpdatesEnabled( TRUE );
- updateWorkspace();
-}
-
-/*!
- Closes all child windows.
-
- The windows are closed in random order. The operation stops if a
- window does not accept the close event.
-
- \sa closeActiveWindow()
-*/
-void TQWorkspace::closeAllWindows()
-{
- bool did_close = TRUE;
- TQPtrListIterator<TQWorkspaceChild> it( d->windows );
- TQWorkspaceChild *c = 0;
- while ( ( c = it.current() ) && did_close ) {
- ++it;
- if ( c->windowWidget() )
- did_close = c->windowWidget()->close();
- }
-}
-
-void TQWorkspace::normalizeActiveWindow()
-{
- if ( d->maxWindow )
- d->maxWindow->showNormal();
- else if ( d->active )
- d->active->showNormal();
-}
-
-void TQWorkspace::minimizeActiveWindow()
-{
- if ( d->maxWindow )
- d->maxWindow->showMinimized();
- else if ( d->active )
- d->active->showMinimized();
-}
-
-void TQWorkspace::showOperationMenu()
-{
- if ( !d->active || !d->active->windowWidget() )
- return;
- TQ_ASSERT( d->active->windowWidget()->testWFlags( TQt::WStyle_SysMenu ) );
- TQPoint p;
- TQPopupMenu *popup = d->active->windowWidget()->testWFlags( TQt::WStyle_Tool ) ? d->toolPopup : d->popup;
- if ( TQApplication::reverseLayout() ) {
- p = TQPoint( d->active->windowWidget()->mapToGlobal( TQPoint(d->active->windowWidget()->width(),0) ) );
- p.rx() -= popup->sizeHint().width();
- } else {
- p = TQPoint( d->active->windowWidget()->mapToGlobal( TQPoint(0,0) ) );
- }
- if ( !d->active->isVisible() ) {
- p = d->active->iconWidget()->mapToGlobal( TQPoint(0,0) );
- p.ry() -= popup->sizeHint().height();
- }
- popupOperationMenu( p );
-}
-
-void TQWorkspace::popupOperationMenu( const TQPoint& p)
-{
- if ( !d->active || !d->active->windowWidget() || !d->active->windowWidget()->testWFlags( TQt::WStyle_SysMenu ) )
- return;
- if ( d->active->windowWidget()->testWFlags( TQt::WStyle_Tool ))
- d->toolPopup->popup( p );
- else
- d->popup->popup( p );
-}
-
-void TQWorkspace::operationMenuAboutToShow()
-{
- for ( int i = 1; i < 6; i++ ) {
- bool enable = d->active != 0;
- d->popup->setItemEnabled( i, enable );
- }
-
- if ( !d->active || !d->active->windowWidget() )
- return;
-
- TQWidget *windowWidget = d->active->windowWidget();
- bool canResize = windowWidget->tqmaximumSize() != windowWidget->tqminimumSize();
- d->popup->setItemEnabled( 3, canResize );
- d->popup->setItemEnabled( 4, windowWidget->testWFlags( TQt::WStyle_Minimize ) );
- d->popup->setItemEnabled( 5, windowWidget->testWFlags( TQt::WStyle_Maximize ) && canResize );
-
- if ( d->active == d->maxWindow ) {
- d->popup->setItemEnabled( 2, FALSE );
- d->popup->setItemEnabled( 3, FALSE );
- d->popup->setItemEnabled( 5, FALSE );
- } else if ( d->active->isVisible() ){
- d->popup->setItemEnabled( 1, FALSE );
- } else {
- d->popup->setItemEnabled( 2, FALSE );
- d->popup->setItemEnabled( 3, FALSE );
- d->popup->setItemEnabled( 4, FALSE );
- }
-}
-
-void TQWorkspace::toolMenuAboutToShow()
-{
- if ( !d->active || !d->active->windowWidget() )
- return;
-
- TQWidget *windowWidget = d->active->windowWidget();
- bool canResize = windowWidget->tqmaximumSize() != windowWidget->tqminimumSize();
-
- d->toolPopup->setItemEnabled( 3, !d->active->shademode && canResize );
- if ( d->active->shademode )
- d->toolPopup->changeItem( 6,
- TQIconSet(tqstyle().stylePixmap(TQStyle::SP_TitleBarUnshadeButton)), tqtr("&Unshade") );
- else
- d->toolPopup->changeItem( 6, TQIconSet(tqstyle().stylePixmap(TQStyle::SP_TitleBarShadeButton)), tqtr("Sh&ade") );
- d->toolPopup->setItemEnabled( 6, d->active->windowWidget()->testWFlags( TQt::WStyle_MinMax ) );
- d->toolPopup->setItemChecked( 7, d->active->windowWidget()->testWFlags( TQt::WStyle_StaysOnTop ) );
-}
-
-void TQWorkspace::operationMenuActivated( int a )
-{
- if ( !d->active )
- return;
- switch ( a ) {
- case 1:
- d->active->showNormal();
- break;
- case 2:
- d->active->doMove();
- break;
- case 3:
- if ( d->active->shademode )
- d->active->showShaded();
- d->active->doResize();
- break;
- case 4:
- d->active->showMinimized();
- break;
- case 5:
- d->active->showMaximized();
- break;
- case 6:
- d->active->showShaded();
- break;
- case 7:
- {
- TQWorkspace* w = (TQWorkspace*)d->active->windowWidget();
- if ( !w )
- break;
- if ( w->testWFlags( TQt::WStyle_StaysOnTop ) ) {
- w->clearWFlags( TQt::WStyle_StaysOnTop );
- } else {
- w->setWFlags( TQt::WStyle_StaysOnTop );
- w->parentWidget()->raise();
- }
- }
- break;
- default:
- break;
- }
-}
-
-/*!
- Activates the next window in the child window chain.
-
- \sa activatePrevWindow()
-*/
-void TQWorkspace::activateNextWindow()
-{
- if ( d->focus.isEmpty() )
- return;
- if ( !d->active ) {
- if ( d->focus.first() ) {
- activateWindow( d->focus.first()->windowWidget(), FALSE );
- }
- return;
- }
-
- int a = d->focus.find( d->active ) + 1;
-
- a = a % d->focus.count();
-
- if ( d->focus.at( a ) )
- activateWindow( d->focus.at( a )->windowWidget(), FALSE );
- else
- activateWindow(0);
-}
-
-void TQWorkspace::activatePreviousWindow()
-{
- activatePrevWindow();
-}
-
-/*!
- Activates the previous window in the child window chain.
-
- \sa activateNextWindow()
-*/
-void TQWorkspace::activatePrevWindow()
-{
- if ( d->focus.isEmpty() )
- return;
- if ( !d->active ) {
- if ( d->focus.last() )
- activateWindow( d->focus.first()->windowWidget(), FALSE );
- else
- activateWindow( 0 );
-
- return;
- }
-
- int a = d->focus.find( d->active ) - 1;
- if ( a < 0 )
- a = d->focus.count()-1;
-
- if ( d->focus.at( a ) )
- activateWindow( d->focus.at( a )->windowWidget(), FALSE );
- else
- activateWindow( 0 );
-}
-
-
-/*!
- \fn void TQWorkspace::windowActivated( TQWidget* w )
-
- This signal is emitted when the window widget \a w becomes active.
- Note that \a w can be null, and that more than one signal may be
- emitted for a single activation event.
-
- \sa activeWindow(), windowList()
-*/
-
-
-
-/*!
- Arranges all the child windows in a cascade pattern.
-
- \sa tile()
-*/
-void TQWorkspace::cascade()
-{
- blockSignals(TRUE);
- if ( d->maxWindow )
- d->maxWindow->showNormal();
-
- if ( d->vbar ) {
- d->vbar->blockSignals( TRUE );
- d->vbar->setValue( 0 );
- d->vbar->blockSignals( FALSE );
- d->hbar->blockSignals( TRUE );
- d->hbar->setValue( 0 );
- d->hbar->blockSignals( FALSE );
- scrollBarChanged();
- }
-
- const int xoffset = 13;
- const int yoffset = 20;
-
- // make a list of all relevant mdi clients
- TQPtrList<TQWorkspaceChild> widgets;
- TQWorkspaceChild* wc = 0;
- for ( wc = d->focus.first(); wc; wc = d->focus.next() )
- if ( wc->windowWidget()->isVisibleTo( this ) && !wc->windowWidget()->testWFlags( TQt::WStyle_Tool ) && !wc->iconw )
- widgets.append( wc );
-
- int x = 0;
- int y = 0;
-
- setUpdatesEnabled( FALSE );
- TQPtrListIterator<TQWorkspaceChild> it( widgets );
- while ( it.current () ) {
- TQWorkspaceChild *child = it.current();
- ++it;
- child->setUpdatesEnabled( FALSE );
- TQSize prefSize = child->windowWidget()->sizeHint().expandedTo( child->windowWidget()->minimumSizeHint() );
-
- if ( !prefSize.isValid() )
- prefSize = child->windowWidget()->size();
- prefSize = prefSize.expandedTo( child->windowWidget()->tqminimumSize() ).boundedTo( child->windowWidget()->tqmaximumSize() );
- if (prefSize.isValid())
- prefSize += TQSize( child->baseSize().width(), child->baseSize().height() );
-
- int w = prefSize.width();
- int h = prefSize.height();
-
- child->showNormal();
- tqApp->sendPostedEvents( 0, TQEvent::ShowNormal );
- if ( y + h > height() )
- y = 0;
- if ( x + w > width() )
- x = 0;
- child->setGeometry( x, y, w, h );
- x += xoffset;
- y += yoffset;
- child->internalRaise();
- child->setUpdatesEnabled( TRUE );
- }
- setUpdatesEnabled( TRUE );
- updateWorkspace();
- blockSignals(FALSE);
-}
-
-/*!
- Arranges all child windows in a tile pattern.
-
- \sa cascade()
-*/
-void TQWorkspace::tile()
-{
- blockSignals(TRUE);
- TQWidget *oldActive = d->active ? d->active->windowWidget() : 0;
- if ( d->maxWindow )
- d->maxWindow->showNormal();
-
- if ( d->vbar ) {
- d->vbar->blockSignals( TRUE );
- d->vbar->setValue( 0 );
- d->vbar->blockSignals( FALSE );
- d->hbar->blockSignals( TRUE );
- d->hbar->setValue( 0 );
- d->hbar->blockSignals( FALSE );
- scrollBarChanged();
- }
-
- int rows = 1;
- int cols = 1;
- int n = 0;
- TQWorkspaceChild* c;
-
- TQPtrListIterator<TQWorkspaceChild> it( d->windows );
- while ( it.current () ) {
- c = it.current();
- ++it;
- if ( !c->windowWidget()->isHidden() &&
- !c->windowWidget()->testWFlags( TQt::WStyle_StaysOnTop ) &&
- !c->windowWidget()->testWFlags( TQt::WStyle_Tool ) &&
- !c->iconw )
- n++;
- }
-
- while ( rows * cols < n ) {
- if ( cols <= rows )
- cols++;
- else
- rows++;
- }
- int add = cols * rows - n;
- bool* used = new bool[ cols*rows ];
- for ( int i = 0; i < rows*cols; i++ )
- used[i] = FALSE;
-
- int row = 0;
- int col = 0;
- int w = width() / cols;
- int h = height() / rows;
-
- it.toFirst();
- while ( it.current () ) {
- c = it.current();
- ++it;
- if ( c->iconw || c->windowWidget()->isHidden() || c->windowWidget()->testWFlags( TQt::WStyle_Tool ) )
- continue;
- if (!row && !col) {
- w -= c->baseSize().width();
- h -= c->baseSize().height();
- }
- if ( c->windowWidget()->testWFlags( TQt::WStyle_StaysOnTop ) ) {
- TQPoint p = c->pos();
- if ( p.x()+c->width() < 0 )
- p.setX( 0 );
- if ( p.x() > width() )
- p.setX( width() - c->width() );
- if ( p.y() + 10 < 0 )
- p.setY( 0 );
- if ( p.y() > height() )
- p.setY( height() - c->height() );
-
- if ( p != c->pos() )
- c->TQFrame::move( p );
- } else {
- c->showNormal();
- tqApp->sendPostedEvents( 0, TQEvent::ShowNormal );
- used[row*cols+col] = TRUE;
- TQSize sz(w, h);
- TQSize bsize(c->baseSize());
- sz = sz.expandedTo(c->windowWidget()->tqminimumSize()).boundedTo(c->windowWidget()->tqmaximumSize());
- sz += bsize;
-
- if ( add ) {
- if (sz.height() == h + bsize.height()) // no relevant constrains
- sz.rheight() *= 2;
- c->setGeometry(col*w + col*bsize.width(), row*h + row*bsize.height(), sz.width(), sz.height());
- used[(row+1)*cols+col] = TRUE;
- add--;
- } else {
- c->setGeometry(col*w + col*bsize.width(), row*h + row*bsize.height(), sz.width(), sz.height());
- }
- while( row < rows && col < cols && used[row*cols+col] ) {
- col++;
- if ( col == cols ) {
- col = 0;
- row++;
- }
- }
- }
- }
- delete [] used;
-
- activateWindow( oldActive );
- updateWorkspace();
- blockSignals(FALSE);
-}
-
-TQWorkspaceChild::TQWorkspaceChild( TQWidget* window, TQWorkspace *parent,
- const char *name )
- : TQFrame( parent, name,
- (WFlags)((parent->windowMode() == TQWorkspace::TopLevel ? (TQt::WStyle_MinMax | TQt::WStyle_SysMenu | TQt::WType_TopLevel) :
- TQt::WStyle_NoBorder ) | WStyle_Customize | TQt::WDestructiveClose | TQt::WNoMousePropagation | TQt::WSubWindow) )
-{
- statusbar = 0;
- setMouseTracking( TRUE );
- act = FALSE;
- iconw = 0;
- lastfocusw = 0;
- shademode = FALSE;
- titlebar = 0;
- snappedRight = FALSE;
- snappedDown = FALSE;
-
- if (window) {
- switch (window->focusPolicy()) {
- case Qt::NoFocus:
- window->setFocusPolicy(Qt::ClickFocus);
- break;
- case Qt::TabFocus:
- window->setFocusPolicy(Qt::StrongFocus);
- break;
- default:
- break;
- }
- }
-
- if ( window && window->testWFlags( TQt::WStyle_Title ) && parent->windowMode() != TQWorkspace::TopLevel ) {
- titlebar = new TQTitleBar( window, this, "qt_ws_titlebar" );
- connect( titlebar, TQT_SIGNAL( doActivate() ),
- this, TQT_SLOT( activate() ) );
- connect( titlebar, TQT_SIGNAL( doClose() ),
- window, TQT_SLOT( close() ) );
- connect( titlebar, TQT_SIGNAL( doMinimize() ),
- this, TQT_SLOT( showMinimized() ) );
- connect( titlebar, TQT_SIGNAL( doNormal() ),
- this, TQT_SLOT( showNormal() ) );
- connect( titlebar, TQT_SIGNAL( doMaximize() ),
- this, TQT_SLOT( showMaximized() ) );
- connect( titlebar, TQT_SIGNAL( popupOperationMenu(const TQPoint&) ),
- this, TQT_SIGNAL( popupOperationMenu(const TQPoint&) ) );
- connect( titlebar, TQT_SIGNAL( showOperationMenu() ),
- this, TQT_SIGNAL( showOperationMenu() ) );
- connect( titlebar, TQT_SIGNAL( doShade() ),
- this, TQT_SLOT( showShaded() ) );
- connect( titlebar, TQT_SIGNAL( doubleClicked() ),
- this, TQT_SLOT( titleBarDoubleClicked() ) );
- }
-
- setFrameStyle( TQFrame::StyledPanel | TQFrame::Raised );
- setLineWidth( tqstyle().tqpixelMetric(TQStyle::PM_MDIFrameWidth, this) );
- setMinimumSize( 128, 0 );
-
- childWidget = window;
- if (!childWidget)
- return;
-
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- setCaption( childWidget->caption() );
-#endif
-
- TQPoint p;
- TQSize s;
- TQSize cs;
-
- bool hasBeenResized = childWidget->testWState( TQt::WState_Resized );
-
- if ( !hasBeenResized )
- cs = childWidget->sizeHint().expandedTo( childWidget->minimumSizeHint() );
- else
- cs = childWidget->size();
-
- int th = titlebar ? titlebar->sizeHint().height() : 0;
- if ( titlebar ) {
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- int iconSize = th;
- if( childWidget->icon() ) {
- TQPixmap pm(childWidget->iconPixmap());
- if(pm.width() > iconSize || pm.height() > iconSize) {
- TQImage im;
- im = pm;
- pm = im.smoothScale( TQMIN(iconSize, pm.width()), TQMIN(iconSize, pm.height()) );
- }
- titlebar->setIcon( pm );
- }
-#endif
- if ( !tqstyle().tqstyleHint( TQStyle::SH_TitleBar_NoBorder, titlebar ) )
- th += frameWidth();
- else
- th -= contentsRect().y();
-
- p = TQPoint( contentsRect().x(),
- th + contentsRect().y() );
- s = TQSize( cs.width() + 2*frameWidth(),
- cs.height() + 2*frameWidth() + th );
- } else {
- p = TQPoint( contentsRect().x(), contentsRect().y() );
- s = TQSize( cs.width() + 2*frameWidth(),
- cs.height() + 2*frameWidth() );
- }
-
- childWidget->reparent( this, p);
- resize( s );
-
- childWidget->installEventFilter( this );
-
- widgetResizeHandler = new TQWidgetResizeHandler( this, window );
- widgetResizeHandler->setSizeProtection( !parent->scrollBarsEnabled() );
- connect( widgetResizeHandler, TQT_SIGNAL( activate() ),
- this, TQT_SLOT( activate() ) );
- if ( !tqstyle().tqstyleHint( TQStyle::SH_TitleBar_NoBorder, titlebar ) )
- widgetResizeHandler->setExtraHeight( th + contentsRect().y() - 2*frameWidth() );
- else
- widgetResizeHandler->setExtraHeight( th + contentsRect().y() - frameWidth() );
- if(parent->windowMode() == TQWorkspace::TopLevel && isTopLevel()) {
- move(0, 0);
- widgetResizeHandler->setActive( FALSE );
- }
- if ( childWidget->tqminimumSize() == childWidget->tqmaximumSize() )
- widgetResizeHandler->setActive( TQWidgetResizeHandler::Resize, FALSE );
- setBaseSize( baseSize() );
-}
-
-TQWorkspaceChild::~TQWorkspaceChild()
-{
- if ( iconw )
- delete iconw->parentWidget();
- TQWorkspace *workspace = ::tqqt_cast<TQWorkspace*>(parentWidget());
- if ( workspace ) {
- workspace->d->focus.removeRef(this);
- if ( workspace->d->active == this ) {
- workspace->activatePrevWindow();
- if (workspace->d->active == this) {
- workspace->activateWindow(0);
- }
- }
- if ( workspace->d->maxWindow == this ) {
- workspace->hideMaximizeControls();
- workspace->d->maxWindow = 0;
- }
- }
-}
-
-bool TQWorkspaceChild::event( TQEvent *e )
-{
- if(((TQWorkspace*)parentWidget())->windowMode() == TQWorkspace::TopLevel) {
- switch(e->type()) {
- case TQEvent::Close:
- if(windowWidget()) {
- if(!windowWidget()->close()) {
- if(((TQWorkspace*) parentWidget() )->d->active == this)
- ((TQWorkspace*) parentWidget() )->activatePrevWindow();
- return TRUE;
- }
- }
- break;
-#if 0
- case TQEvent::WindowDeactivate:
- if(statusbar) {
- TQSize newsize(width(), height() - statusbar->height());
- if(statusbar->parentWidget() == this)
- statusbar->hide();
- statusbar = 0;
- resize(newsize);
- }
- break;
-#endif
- case TQEvent::WindowActivate:
- if(((TQWorkspace*)parentWidget())->activeWindow() == windowWidget())
- activate();
- if(statusbar)
- statusbar->show();
- else if(((TQWorkspace*) parentWidget() )->d->mainwindow)
- setqStatusBar(((TQWorkspace*) parentWidget() )->d->mainwindow->statusBar());
- break;
- default:
- break;
- }
- }
- return TQWidget::event(e);
-}
-
-void TQWorkspaceChild::setqStatusBar( TQStatusBar *sb )
-{
- if(((TQWorkspace*) parentWidget() )->windowMode() == TQWorkspace::TopLevel) {
- TQSize newsize;
- if(sb) {
- sb->show();
- if(sb != statusbar) {
- sb->reparent(this, TQPoint(0, height()), TRUE);
- newsize = TQSize(width(), height() + sb->height());
- }
- }
- statusbar = sb;
- if(!newsize.isNull())
- resize(newsize);
- }
-}
-
-void TQWorkspaceChild::moveEvent( TQMoveEvent *e )
-{
- if(((TQWorkspace*) parentWidget() )->windowMode() == TQWorkspace::TopLevel && !e->spontaneous()) {
- TQPoint p = parentWidget()->tqtopLevelWidget()->pos();
- if(x() < p.x() || y() < p.y())
- move(TQMAX(x(), p.x()), TQMAX(y(), p.y()));
- }
- ((TQWorkspace*) parentWidget() )->updateWorkspace();
-}
-
-void TQWorkspaceChild::resizeEvent( TQResizeEvent * )
-{
- TQRect r = contentsRect();
- TQRect cr;
-
- if ( titlebar ) {
- int th = titlebar->sizeHint().height();
- TQRect tbrect( 0, 0, width(), th );
- if ( !tqstyle().tqstyleHint( TQStyle::SH_TitleBar_NoBorder ) )
- tbrect = TQRect( r.x(), r.y(), r.width(), th );
- titlebar->setGeometry( tbrect );
-
- if ( tqstyle().tqstyleHint( TQStyle::SH_TitleBar_NoBorder, titlebar ) )
- th -= frameWidth();
- cr = TQRect( r.x(), r.y() + th + (shademode ? (frameWidth() * 3) : 0),
- r.width(), r.height() - th );
- } else {
- cr = r;
- }
-
- if(statusbar && statusbar->isVisible()) {
- int sh = statusbar->height();
- statusbar->setGeometry(r.x(), r.bottom() - sh, r.width(), sh);
- cr.setBottom(cr.bottom() - sh);
- }
-
- if (!childWidget)
- return;
-
- windowSize = cr.size();
- childWidget->setGeometry( cr );
- ((TQWorkspace*) parentWidget() )->updateWorkspace();
-}
-
-TQSize TQWorkspaceChild::baseSize() const
-{
- int th = titlebar ? titlebar->sizeHint().height() : 0;
- if ( tqstyle().tqstyleHint( TQStyle::SH_TitleBar_NoBorder, titlebar ) )
- th -= frameWidth();
- return TQSize( 2*frameWidth(), 2*frameWidth() + th );
-}
-
-TQSize TQWorkspaceChild::tqsizeHint() const
-{
- if ( !childWidget )
- return TQFrame::tqsizeHint() + baseSize();
-
- TQSize prefSize = windowWidget()->sizeHint().expandedTo( windowWidget()->minimumSizeHint() );
- prefSize = prefSize.expandedTo( windowWidget()->tqminimumSize() ).boundedTo( windowWidget()->tqmaximumSize() );
- prefSize += baseSize();
-
- return prefSize;
-}
-
-TQSize TQWorkspaceChild::tqminimumSizeHint() const
-{
- if ( !childWidget )
- return TQFrame::tqminimumSizeHint() + baseSize();
- TQSize s = childWidget->tqminimumSize();
- if ( s.isEmpty() )
- s = childWidget->minimumSizeHint();
- return s + baseSize();
-}
-
-void TQWorkspaceChild::activate()
-{
- ((TQWorkspace*)parentWidget())->activateWindow( windowWidget() );
-}
-
-bool TQWorkspaceChild::eventFilter( TQObject * o, TQEvent * e)
-{
- if ( !isActive() && ( e->type() == TQEvent::MouseButtonPress ||
- e->type() == TQEvent::FocusIn ) ) {
- if ( iconw ) {
- ((TQWorkspace*)parentWidget())->normalizeWindow( windowWidget() );
- if ( iconw ) {
- ((TQWorkspace*)parentWidget())->removeIcon( iconw->parentWidget() );
- delete iconw->parentWidget();
- iconw = 0;
- }
- }
- activate();
- }
-
- // for all widgets except the window, that's the only thing we
- // process, and if we have no childWidget we skip totally
- if ( TQT_BASE_OBJECT(o) != TQT_BASE_OBJECT(childWidget) || childWidget == 0 )
- return FALSE;
-
- switch ( e->type() ) {
- case TQEvent::Show:
- if ( ((TQWorkspace*)parentWidget())->d->focus.find( this ) < 0 )
- ((TQWorkspace*)parentWidget())->d->focus.append( this );
- if ( isVisibleTo( parentWidget() ) )
- break;
- if (( (TQShowEvent*)e)->spontaneous() )
- break;
- // fall through
- case TQEvent::ShowToParent:
- if ( windowWidget() && windowWidget()->testWFlags( TQt::WStyle_StaysOnTop ) ) {
- internalRaise();
- show();
- }
- ((TQWorkspace*)parentWidget())->showWindow( windowWidget() );
- break;
- case TQEvent::ShowMaximized:
- if ( windowWidget()->tqmaximumSize().isValid() &&
- ( windowWidget()->maximumWidth() < parentWidget()->width() ||
- windowWidget()->maximumHeight() < parentWidget()->height() ) ) {
- windowWidget()->resize( windowWidget()->tqmaximumSize() );
- ((TQWorkspace*)windowWidget())->clearWState(TQt::WState_Maximized);
- if (titlebar)
- titlebar->tqrepaint(FALSE);
- break;
- }
- if ( windowWidget()->testWFlags( TQt::WStyle_Maximize ) && !windowWidget()->testWFlags( TQt::WStyle_Tool ) )
- ((TQWorkspace*)parentWidget())->maximizeWindow( windowWidget() );
- else
- ((TQWorkspace*)parentWidget())->normalizeWindow( windowWidget() );
- break;
- case TQEvent::ShowMinimized:
- ((TQWorkspace*)parentWidget())->minimizeWindow( windowWidget() );
- break;
- case TQEvent::ShowNormal:
- ((TQWorkspace*)parentWidget())->normalizeWindow( windowWidget() );
- if (iconw) {
- ((TQWorkspace*)parentWidget())->removeIcon( iconw->parentWidget() );
- delete iconw->parentWidget();
- }
- break;
- case TQEvent::Hide:
- case TQEvent::HideToParent:
- if ( !childWidget->isVisibleTo( this ) ) {
- TQWidget * w = iconw;
- if ( w && ( w = w->parentWidget() ) ) {
- ((TQWorkspace*)parentWidget())->removeIcon( w );
- delete w;
- }
- hide();
- }
- break;
- case TQEvent::CaptionChange:
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- setCaption( childWidget->caption() );
- if ( iconw )
- iconw->setCaption( childWidget->caption() );
-#endif
- break;
- case TQEvent::IconChange:
- {
- TQWorkspace* ws = (TQWorkspace*)parentWidget();
- if ( !titlebar )
- break;
-
- TQPixmap pm;
- int iconSize = titlebar->size().height();
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- if ( childWidget->icon() ) {
- pm = *childWidget->icon();
- if(pm.width() > iconSize || pm.height() > iconSize) {
- TQImage im;
- im = pm;
- pm = im.smoothScale( TQMIN(iconSize, pm.width()), TQMIN(iconSize, pm.height()) );
- }
- } else
-#endif
- {
- pm.resize( iconSize, iconSize );
- pm.fill( Qt::color1 );
- pm.setMask(pm.createHeuristicMask());
- }
- titlebar->setIcon( pm );
- if ( iconw )
- iconw->setIcon( pm );
-
- if ( ws->d->maxWindow != this )
- break;
-
- if ( ws->d->maxtools )
- ws->d->maxtools->setPixmap( pm );
- }
- break;
- case TQEvent::Resize:
- {
- TQResizeEvent* re = (TQResizeEvent*)e;
- if ( re->size() != windowSize && !shademode )
- resize( re->size() + baseSize() );
- }
- break;
-
- case TQEvent::WindowDeactivate:
- if ( titlebar )
- titlebar->setActive( FALSE );
- tqrepaint( FALSE );
- break;
-
- case TQEvent::WindowActivate:
- if ( titlebar )
- titlebar->setActive( act );
- tqrepaint( FALSE );
- break;
-
- default:
- break;
- }
-
- return TQFrame::eventFilter(o, e);
-}
-
-bool TQWorkspaceChild::focusNextPrevChild( bool next )
-{
- TQFocusData *f = focusData();
-
- TQWidget *startingPoint = f->home();
- TQWidget *candidate = 0;
- TQWidget *w = next ? f->next() : f->prev();
- while( !candidate && w != startingPoint ) {
- if ( w != startingPoint &&
- (w->focusPolicy() & Qt::TabFocus) == Qt::TabFocus
- && w->isEnabled() &&!w->focusProxy() && w->isVisible() )
- candidate = w;
- w = next ? f->next() : f->prev();
- }
-
- if ( candidate ) {
- TQObjectList *ol = queryList();
- bool ischild = ol->findRef( TQT_TQOBJECT(candidate) ) != -1;
- delete ol;
- if ( !ischild ) {
- startingPoint = f->home();
- TQWidget *nw = next ? f->prev() : f->next();
- TQObjectList *ol2 = queryList();
- TQWidget *lastValid = 0;
- candidate = startingPoint;
- while ( nw != startingPoint ) {
- if ( ( candidate->focusPolicy() & Qt::TabFocus ) == Qt::TabFocus
- && candidate->isEnabled() &&!candidate->focusProxy() && candidate->isVisible() )
- lastValid = candidate;
- if ( ol2->findRef( TQT_TQOBJECT(nw) ) == -1 ) {
- candidate = lastValid;
- break;
- }
- candidate = nw;
- nw = next ? f->prev() : f->next();
- }
- delete ol2;
- }
- }
-
- if ( !candidate )
- return FALSE;
-
- candidate->setFocus();
- return TRUE;
-}
-
-void TQWorkspaceChild::childEvent( TQChildEvent* e)
-{
- if ( e->type() == TQEvent::ChildRemoved && e->child() == childWidget ) {
- childWidget = 0;
- if ( iconw ) {
- ((TQWorkspace*)parentWidget())->removeIcon( iconw->parentWidget() );
- delete iconw->parentWidget();
- }
- close();
- }
-}
-
-
-void TQWorkspaceChild::doResize()
-{
- widgetResizeHandler->doResize();
-}
-
-void TQWorkspaceChild::doMove()
-{
- widgetResizeHandler->doMove();
-}
-
-void TQWorkspaceChild::enterEvent( TQEvent * )
-{
-}
-
-void TQWorkspaceChild::leaveEvent( TQEvent * )
-{
-#ifndef TQT_NO_CURSOR
- if ( !widgetResizeHandler->isButtonDown() )
- setCursor( Qt::ArrowCursor );
-#endif
-}
-
-void TQWorkspaceChild::drawFrame( TQPainter *p )
-{
- TQStyle::SFlags flags = TQStyle::Style_Default;
- TQStyleOption opt(lineWidth(),midLineWidth());
-
- if ( titlebar && titlebar->isActive() )
- flags |= TQStyle::Style_Active;
-
- tqstyle().tqdrawPrimitive( TQStyle::PE_WindowFrame, p, rect(), tqcolorGroup(), flags, opt );
-}
-
-void TQWorkspaceChild::styleChange( TQStyle & )
-{
- resizeEvent( 0 );
- if ( iconw ) {
- TQVBox *vbox = (TQVBox*)iconw->parentWidget()->tqqt_cast( "TQVBox" );
- TQ_ASSERT(vbox);
- if ( !tqstyle().tqstyleHint( TQStyle::SH_TitleBar_NoBorder ) ) {
- vbox->setFrameStyle( TQFrame::WinPanel | TQFrame::Raised );
- vbox->resize( 196+2*vbox->frameWidth(), 20 + 2*vbox->frameWidth() );
- } else {
- vbox->resize( 196, 20 );
- }
- }
-}
-
-void TQWorkspaceChild::setActive( bool b )
-{
- if ( !childWidget )
- return;
-
- bool hasFocus = isChildOf( tqfocusWidget(), childWidget );
- if ( act == b && hasFocus )
- return;
-
- act = b;
-
- if ( titlebar )
- titlebar->setActive( act );
- if ( iconw )
- iconw->setActive( act );
- tqrepaint( FALSE );
-
- TQObjectList* ol = childWidget->queryList( "TQWidget" );
- if ( act ) {
- TQObject *o;
- for ( o = ol->first(); o; o = ol->next() )
- o->removeEventFilter( this );
- if ( !hasFocus ) {
- if ( lastfocusw && ol->contains( TQT_TQOBJECT(lastfocusw) ) &&
- lastfocusw->focusPolicy() != Qt::NoFocus ) {
- // this is a bug if lastfocusw has been deleted, a new
- // widget has been created, and the new one is a child
- // of the same window as the old one. but even though
- // it's a bug the behaviour is reasonable
- lastfocusw->setFocus();
- } else if ( childWidget->focusPolicy() != Qt::NoFocus ) {
- childWidget->setFocus();
- } else {
- // find something, anything, that accepts focus, and use that.
- o = ol->first();
- while( o && ((TQWidget*)o)->focusPolicy() == Qt::NoFocus )
- o = ol->next();
- if ( o )
- ((TQWidget*)o)->setFocus();
- }
- }
- } else {
- if ( isChildOf( tqfocusWidget(), childWidget ) )
- lastfocusw = tqfocusWidget();
- TQObject * o;
- for ( o = ol->first(); o; o = ol->next() ) {
- o->removeEventFilter( this );
- o->installEventFilter( this );
- }
- }
- delete ol;
-}
-
-bool TQWorkspaceChild::isActive() const
-{
- return act;
-}
-
-TQWidget* TQWorkspaceChild::windowWidget() const
-{
- return childWidget;
-}
-
-
-TQWidget* TQWorkspaceChild::iconWidget() const
-{
- if ( !iconw ) {
- TQWorkspaceChild* that = (TQWorkspaceChild*) this;
-
- // ### why do we even need the vbox? -Brad
- TQVBox* vbox = new TQVBox(that, "qt_vbox", (WFlags)TQt::WType_TopLevel );
- TQTitleBar *tb = new TQTitleBar( windowWidget(), vbox, "_workspacechild_icon_");
- int th = tqstyle().tqpixelMetric( TQStyle::PM_TitleBarHeight, tb );
- int iconSize = tqstyle().tqpixelMetric( TQStyle::PM_MDIMinimizedWidth, this );
- if ( !tqstyle().tqstyleHint( TQStyle::SH_TitleBar_NoBorder ) ) {
- vbox->setFrameStyle( TQFrame::WinPanel | TQFrame::Raised );
- vbox->resize( iconSize+2*vbox->frameWidth(), th+2*vbox->frameWidth() );
- } else {
- vbox->resize( iconSize, th );
- }
- that->iconw = tb;
- iconw->setActive( isActive() );
-
- connect( iconw, TQT_SIGNAL( doActivate() ),
- this, TQT_SLOT( activate() ) );
- connect( iconw, TQT_SIGNAL( doClose() ),
- windowWidget(), TQT_SLOT( close() ) );
- connect( iconw, TQT_SIGNAL( doNormal() ),
- this, TQT_SLOT( showNormal() ) );
- connect( iconw, TQT_SIGNAL( doMaximize() ),
- this, TQT_SLOT( showMaximized() ) );
- connect( iconw, TQT_SIGNAL( popupOperationMenu(const TQPoint&) ),
- this, TQT_SIGNAL( popupOperationMenu(const TQPoint&) ) );
- connect( iconw, TQT_SIGNAL( showOperationMenu() ),
- this, TQT_SIGNAL( showOperationMenu() ) );
- connect( iconw, TQT_SIGNAL( doubleClicked() ),
- this, TQT_SLOT( titleBarDoubleClicked() ) );
- }
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- if ( windowWidget() ) {
- iconw->setCaption( windowWidget()->caption() );
- if ( windowWidget()->icon() ) {
- int iconSize = iconw->sizeHint().height();
-
- TQPixmap pm(*childWidget->icon());
- if(pm.width() > iconSize || pm.height() > iconSize) {
- TQImage im;
- im = pm;
- pm = im.smoothScale( TQMIN(iconSize, pm.width()), TQMIN(iconSize, pm.height()) );
- }
- iconw->setIcon( pm );
- }
- }
-#endif
- return iconw->parentWidget();
-}
-
-void TQWorkspaceChild::showMinimized()
-{
- windowWidget()->setWindowState((WState)(TQt::WindowMinimized | windowWidget()->windowState()));
-}
-
-void TQWorkspaceChild::showMaximized()
-{
- windowWidget()->setWindowState((WState)(TQt::WindowMaximized | (windowWidget()->windowState() & ~TQt::WindowMinimized)));
-}
-
-void TQWorkspaceChild::showNormal()
-{
- windowWidget()->setWindowState((WState)(windowWidget()->windowState() & ~(TQt::WindowMinimized|TQt::WindowMaximized)));
-}
-
-void TQWorkspaceChild::showShaded()
-{
- if ( !titlebar)
- return;
- TQ_ASSERT( windowWidget()->testWFlags( TQt::WStyle_MinMax ) && windowWidget()->testWFlags( TQt::WStyle_Tool ) );
- ((TQWorkspace*)parentWidget())->activateWindow( windowWidget() );
- if ( shademode ) {
- TQWorkspaceChild* fake = (TQWorkspaceChild*)windowWidget();
- fake->clearWState( TQt::WState_Minimized );
- clearWState( TQt::WState_Minimized );
-
- shademode = FALSE;
- resize( shadeRestore );
- setMinimumSize( shadeRestoreMin );
- tqstyle().polish(this);
- } else {
- shadeRestore = size();
- shadeRestoreMin = tqminimumSize();
- setMinimumHeight(0);
- shademode = TRUE;
- TQWorkspaceChild* fake = (TQWorkspaceChild*)windowWidget();
- fake->setWState( TQt::WState_Minimized );
- setWState( TQt::WState_Minimized );
-
- if ( tqstyle().tqstyleHint( TQStyle::SH_TitleBar_NoBorder ) )
- resize( width(), titlebar->height() );
- else
- resize( width(), titlebar->height() + 2*lineWidth() + 1 );
- tqstyle().polish(this);
- }
- titlebar->update();
-}
-
-void TQWorkspaceChild::titleBarDoubleClicked()
-{
- if ( !windowWidget() )
- return;
- if ( windowWidget()->testWFlags( TQt::WStyle_MinMax ) ) {
- if ( windowWidget()->testWFlags( TQt::WStyle_Tool ) )
- showShaded();
- else if ( iconw )
- showNormal();
- else if ( windowWidget()->testWFlags( TQt::WStyle_Maximize ) )
- showMaximized();
- }
-}
-
-void TQWorkspaceChild::adjustToFullscreen()
-{
- if ( !childWidget )
- return;
-
- tqApp->sendPostedEvents( this, TQEvent::Resize );
- tqApp->sendPostedEvents( childWidget, TQEvent::Resize );
- tqApp->sendPostedEvents( childWidget, TQEvent::Move );
- if( tqstyle().tqstyleHint(TQStyle::SH_Workspace_FillSpaceOnMaximize, this) ) {
- setGeometry( 0, 0, parentWidget()->width(), parentWidget()->height());
- } else {
- int w = parentWidget()->width() + width() - childWidget->width();
- int h = parentWidget()->height() + height() - childWidget->height();
- w = TQMAX( w, childWidget->minimumWidth() );
- h = TQMAX( h, childWidget->minimumHeight() );
- setGeometry( -childWidget->x(), -childWidget->y(), w, h );
- }
- setWState( TQt::WState_Maximized );
- ((TQWorkspaceChild*)childWidget)->setWState( TQt::WState_Maximized );
-}
-
-void TQWorkspaceChild::setCaption( const TQString& cap )
-{
- if ( titlebar )
- titlebar->setCaption( cap );
-#ifndef TQT_NO_WIDGET_TOPEXTRA
- TQWidget::setCaption( cap );
-#endif
-}
-
-void TQWorkspaceChild::internalRaise()
-{
- setUpdatesEnabled( FALSE );
- if ( iconw )
- iconw->parentWidget()->raise();
- raise();
-
- if ( !windowWidget() || windowWidget()->testWFlags( TQt::WStyle_StaysOnTop ) ) {
- setUpdatesEnabled( TRUE );
- return;
- }
-
- TQPtrListIterator<TQWorkspaceChild> it( ((TQWorkspace*)parent())->d->windows );
- while ( it.current () ) {
- TQWorkspaceChild* c = it.current();
- ++it;
- if ( c->windowWidget() &&
- !c->windowWidget()->isHidden() &&
- c->windowWidget()->testWFlags( TQt::WStyle_StaysOnTop ) )
- c->raise();
- }
- setUpdatesEnabled( TRUE );
-}
-
-void TQWorkspaceChild::move( int x, int y )
-{
- int nx = x;
- int ny = y;
-
- if ( windowWidget() && windowWidget()->testWFlags( TQt::WStyle_Tool ) ) {
- int dx = 10;
- int dy = 10;
-
- if ( TQABS( x ) < dx )
- nx = 0;
- if ( TQABS( y ) < dy )
- ny = 0;
- if ( TQABS( x + width() - parentWidget()->width() ) < dx ) {
- nx = parentWidget()->width() - width();
- snappedRight = TRUE;
- } else
- snappedRight = FALSE;
-
- if ( TQABS( y + height() - parentWidget()->height() ) < dy ) {
- ny = parentWidget()->height() - height();
- snappedDown = TRUE;
- } else
- snappedDown = FALSE;
- }
- TQFrame::move( nx, ny );
-}
-
-bool TQWorkspace::scrollBarsEnabled() const
-{
- return d->vbar != 0;
-}
-
-/*!
- \property TQWorkspace::scrollBarsEnabled
- \brief whether the workspace provides scrollbars
-
- If this property is set to TRUE, it is possible to resize child
- windows over the right or the bottom edge out of the visible area
- of the workspace. The workspace shows scrollbars to make it
- possible for the user to access those windows. If this property is
- set to FALSE (the default), resizing windows out of the visible
- area of the workspace is not permitted.
-*/
-void TQWorkspace::setScrollBarsEnabled( bool enable )
-{
- if ( (d->vbar != 0) == enable )
- return;
-
- d->xoffset = d->yoffset = 0;
- if ( enable ) {
- d->vbar = new TQScrollBar( Qt::Vertical, this, "vertical scrollbar" );
- connect( d->vbar, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT( scrollBarChanged() ) );
- d->hbar = new TQScrollBar( Qt::Horizontal, this, "horizontal scrollbar" );
- connect( d->hbar, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT( scrollBarChanged() ) );
- d->corner = new TQWidget( this, "qt_corner" );
- updateWorkspace();
- } else {
- delete d->vbar;
- delete d->hbar;
- delete d->corner;
- d->vbar = d->hbar = 0;
- d->corner = 0;
- }
-
- TQPtrListIterator<TQWorkspaceChild> it( d->windows );
- while ( it.current () ) {
- TQWorkspaceChild *child = it.current();
- ++it;
- child->widgetResizeHandler->setSizeProtection( !enable );
- }
-}
-
-TQRect TQWorkspace::updateWorkspace()
-{
- if ( !isUpdatesEnabled() )
- return rect();
-
- TQRect cr( rect() );
-
- if ( scrollBarsEnabled() && !d->maxWindow ) {
- d->corner->raise();
- d->vbar->raise();
- d->hbar->raise();
- if ( d->maxWindow )
- d->maxWindow->internalRaise();
-
- TQRect r( 0, 0, 0, 0 );
- TQPtrListIterator<TQWorkspaceChild> it( d->windows );
- while ( it.current () ) {
- TQWorkspaceChild *child = it.current();
- ++it;
- if ( !child->isHidden() )
- r = r.unite( child->tqgeometry() );
- }
- d->vbar->blockSignals( TRUE );
- d->hbar->blockSignals( TRUE );
-
- int hsbExt = d->hbar->sizeHint().height();
- int vsbExt = d->vbar->sizeHint().width();
-
-
- bool showv = d->yoffset || d->yoffset + r.bottom() - height() + 1 > 0 || d->yoffset + r.top() < 0;
- bool showh = d->xoffset || d->xoffset + r.right() - width() + 1 > 0 || d->xoffset + r.left() < 0;
-
- if ( showh && !showv)
- showv = d->yoffset + r.bottom() - height() + hsbExt + 1 > 0;
- if ( showv && !showh )
- showh = d->xoffset + r.right() - width() + vsbExt + 1 > 0;
-
- if ( !showh )
- hsbExt = 0;
- if ( !showv )
- vsbExt = 0;
-
- if ( showv ) {
- d->vbar->setSteps( TQMAX( height() / 12, 30 ), height() - hsbExt );
- d->vbar->setRange( TQMIN( 0, d->yoffset + TQMIN( 0, r.top() ) ), TQMAX( 0, d->yoffset + TQMAX( 0, r.bottom() - height() + hsbExt + 1) ) );
- d->vbar->setGeometry( width() - vsbExt, 0, vsbExt, height() - hsbExt );
- d->vbar->setValue( d->yoffset );
- d->vbar->show();
- } else {
- d->vbar->hide();
- }
-
- if ( showh ) {
- d->hbar->setSteps( TQMAX( width() / 12, 30 ), width() - vsbExt );
- d->hbar->setRange( TQMIN( 0, d->xoffset + TQMIN( 0, r.left() ) ), TQMAX( 0, d->xoffset + TQMAX( 0, r.right() - width() + vsbExt + 1) ) );
- d->hbar->setGeometry( 0, height() - hsbExt, width() - vsbExt, hsbExt );
- d->hbar->setValue( d->xoffset );
- d->hbar->show();
- } else {
- d->hbar->hide();
- }
-
- if ( showh && showv ) {
- d->corner->setGeometry( width() - vsbExt, height() - hsbExt, vsbExt, hsbExt );
- d->corner->show();
- } else {
- d->corner->hide();
- }
-
- d->vbar->blockSignals( FALSE );
- d->hbar->blockSignals( FALSE );
-
- cr.setRect( 0, 0, width() - vsbExt, height() - hsbExt );
- }
-
- TQPtrListIterator<TQWidget> ii( d->icons );
- while ( ii.current() ) {
- TQWorkspaceChild* w = (TQWorkspaceChild*)ii.current();
- ++ii;
- int x = w->x();
- int y = w->y();
- bool m = FALSE;
- if ( x+w->width() > cr.width() ) {
- m = TRUE;
- x = cr.width() - w->width();
- }
- if ( y+w->height() > cr.height() ) {
- y = cr.height() - w->height();
- m = TRUE;
- }
- if ( m )
- w->move( x, y );
- }
-
- return cr;
-
-}
-
-void TQWorkspace::scrollBarChanged()
-{
- int ver = d->yoffset - d->vbar->value();
- int hor = d->xoffset - d->hbar->value();
- d->yoffset = d->vbar->value();
- d->xoffset = d->hbar->value();
-
- TQPtrListIterator<TQWorkspaceChild> it( d->windows );
- while ( it.current () ) {
- TQWorkspaceChild *child = it.current();
- ++it;
- // we do not use move() due to the reimplementation in TQWorkspaceChild
- child->setGeometry( child->x() + hor, child->y() + ver, child->width(), child->height() );
- }
- updateWorkspace();
-}
-
-/*!
- \enum TQWorkspace::WindowOrder
-
- Specifies the order in which windows are returned from windowList().
-
- \value CreationOrder The windows are returned in the order of their creation
- \value StackingOrder The windows are returned in the order of their stacking
-*/
-
-#ifdef TQT_WORKSPACE_WINDOWMODE
-/*!
- \enum TQWorkspace::WindowMode
-
- Determines the Windowing Model TQWorkspace will use for sub-windows.
-
- \value TopLevel Subwindows are treated as toplevel windows
- \value MDI Subwindows are organized in an MDI interface
- \value AutoDetect TQWorkspace will detect whether TopLevel or MDI
- is appropriate
-*/
-
-/*!
- The windowing model influences how the subwindows are actually
- created. For most platforms the default behavior of a workspace is
- to operate in MDI mode, with TQt/Mac the default mode is
- AutoDetect.
-*/
-#else
-/*! \internal */
-#endif
-TQWorkspace::WindowMode TQWorkspace::windowMode() const
-{
- return d->wmode;
-}
-
-#ifndef TQT_NO_STYLE
-/*!\reimp */
-void TQWorkspace::styleChange( TQStyle &olds )
-{
- int fs = tqstyle().tqstyleHint(TQStyle::SH_Workspace_FillSpaceOnMaximize, this);
- if ( isVisibleTo(0) && d->maxWindow &&
- fs != olds.tqstyleHint(TQStyle::SH_Workspace_FillSpaceOnMaximize, this)) {
- if( fs )
- hideMaximizeControls();
- else
- showMaximizeControls();
- }
- TQWidget::styleChange(olds);
-}
-#endif
-
-
-
-
-#include "tqworkspace.tqmoc"
-#endif // TQT_NO_WORKSPACE