Version: 8.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
QtxWorkstack Class Reference

Workstack widget. More...

#include <QtxWorkstack.h>

Inheritance diagram for QtxWorkstack:
Inheritance graph

Public Types

enum  {
  SplitVertical = 0x01, SplitHorizontal = 0x02, Close = 0x04, Rename = 0x08,
  All
}
 Workstack actions (context menu items) More...
 
enum  { VersionMarker = 0x01, SplitMarker = 0x02, AreaMarker = 0x04, WidgetMarker = 0x08 }
 
enum  { Horizontal = 0x01, Visible = 0x02 }
 
enum  SplitType { SplitStay, SplitAt, SplitMove }
 Workstack splitting type. More...
 

Public Slots

void splitVertical ()
 Split widgets vertically. More...
 
void splitHorizontal ()
 Split widgets horizontally. More...
 

Signals

void windowActivated (QWidget *)
 Emitted when the workstack's child widget is activated. More...
 

Public Member Functions

 QtxWorkstack (QWidget *=0)
 Constructor. More...
 
virtual ~QtxWorkstack ()
 Destructor. More...
 
QWidgetList windowList (QWidget *=0) const
 Get list of all widgets in all areas or in specified area which given widget belongs to. More...
 
QWidgetList splitWindowList () const
 Get all child widgets in the active workarea. More...
 
QWidgetactiveWindow () const
 Get active widget. More...
 
void setActiveWindow (QWidget *)
 Set active widget. More...
 
int accel (const int) const
 Get the action's accelerator key-combination. More...
 
void setAccel (const int, const int)
 Set accelerator key-combination for the action with specified id. More...
 
QIcon icon (const int) const
 Get icon for the specified action. More...
 
void setIcon (const int, const QIcon &)
 Set menu item icon for the specified action. More...
 
void setMenuActions (const int)
 Set actions to be visible in the context popup menu. More...
 
int menuActions () const
 Set actions to be visible in the context popup menu. More...
 
void stack ()
 Group all windows in one area. More...
 
void split (const int)
 Split workstack. More...
 
bool move (QWidget *wid, QWidget *wid_to, const bool before)
 Moves the first widget to the same area which the second widget belongs to. More...
 
QWidgetaddWindow (QWidget *, Qt::WindowFlags=0)
 Add child widget. More...
 
QByteArray saveState (int) const
 Dump workstack configuration to the state description array. More...
 
bool restoreState (const QByteArray &, int)
 Restore workstack configuration from the state description array. More...
 
void setOpaqueResize (bool=true)
 Set resize mode of all splitters opaque or transparent. More...
 
bool opaqueResize () const
 Get resize mode of all splitters: opaque (true) or transparent (false). More...
 
void splittersVisible (QWidget *, bool=true)
 Show/hide splitters state and area. More...
 
void Split (QWidget *wid, const Qt::Orientation o, const SplitType type)
 Split workarea of the given widget on two parts. More...
 
void Attract (QWidget *wid1, QWidget *wid2, const bool all)
 Move widget(s) from the source workarea into the target workarea or reorder widgets inside one workarea. More...
 
void SetRelativePosition (QWidget *wid, const Qt::Orientation o, const double pos)
 Set position of the widget relatively to the entire workstack. More...
 
void SetRelativePositionInSplitter (QWidget *wid, const double pos)
 Set position of the widget relatively to its parent splitter. More...
 
void updateState ()
 Update internal state. More...
 

Protected Member Functions

virtual void customEvent (QEvent *)
 Handle custom events. More...
 
QActionaction (const int) const
 
void saveState (QDataStream &) const
 
bool restoreState (QDataStream &)
 

Private Slots

void onRename ()
 Called when user activates "Rename" menu item. More...
 
void onCloseWindow ()
 Close active window. More...
 
void onDestroyed (QObject *)
 Called when workarea is destroyed. More...
 
void onWindowActivated (QWidget *)
 Called on window activating. More...
 
void onContextMenuRequested (QWidget *, QPoint)
 Create and show popup menu for workarea. More...
 
void onDeactivated (QtxWorkstackArea *)
 Called on window deactivating. More...
 

Private Member Functions

QSplittersplitter (QtxWorkstackArea *) const
 Get splitter corresponding to the workarea. More...
 
void splitters (QSplitter *, QList< QSplitter * > &, const bool=false) const
 Get list of child splitters. More...
 
void areas (QSplitter *, QList< QtxWorkstackArea * > &, const bool=false) const
 Get list of child workareas. More...
 
QSplitterwrapSplitter (QtxWorkstackArea *)
 Wrap area into the new splitter. More...
 
void insertWidget (QWidget *, QWidget *, QWidget *)
 Reparent and add widget. More...
 
QtxWorkstackAreaareaAt (const QPoint &) const
 Get workarea covering point. More...
 
QtxWorkstackAreawgArea (QWidget *) const
 Gets area containing given widget. More...
 
QtxWorkstackAreatargetArea ()
 Get target area (for which the current operation should be done). More...
 
QtxWorkstackAreaactiveArea () const
 Get active workarea. More...
 
QtxWorkstackAreacurrentArea () const
 Get current workarea. More...
 
void setActiveArea (QtxWorkstackArea *)
 Set active workarea. More...
 
QtxWorkstackAreaneighbourArea (QtxWorkstackArea *) const
 Get workarea which is nearest to area. More...
 
QtxWorkstackAreacreateArea (QWidget *) const
 Create new workarea. More...
 
void updateState (QSplitter *)
 Update splitter state. More...
 
void splitterVisible (QWidget *, QList< QSplitter * > &, QSplitter *, bool)
 Show/hide splitter state and area. More...
 
void distributeSpace (QSplitter *) const
 Redistribute space among widgets equally. More...
 
int setPosition (QWidget *wid, QSplitter *split, const Qt::Orientation o, const int need_pos, const int splitter_pos)
 Set position of the widget. More...
 

Private Attributes

QPointer< QWidgetmyWin
 active widget More...
 
QPointer< QtxWorkstackAreamyArea
 active workarea More...
 
QtxWorkstackSplittermySplit
 tol-level splitter More...
 
QPointer< QWidgetmyWorkWin
 widget where popup menu is invoked (used internally) More...
 
QPointer< QtxWorkstackAreamyWorkArea
 workarea where popup menu is invoked (used internally) More...
 
QMap< int, QAction * > myActionsMap
 actions map More...
 

Friends

class QtxWorkstackArea
 
class QtxWorkstackDrag
 
class QtxWorkstackAction
 
class QtxWorkstackSplitter
 

Detailed Description

Organizes the child widgets in the tabbed space. Allows splitting the working area to arrange the child widgets in arbitrary way. Any widgets can be moved to another working area with drag-n-drop operation.

This widget can be used as workspace of the application main window, for example, as kind of implementation of multi-document interface.

Member Enumeration Documentation

anonymous enum
Enumerator
SplitVertical 

"Split vertically" menu item

SplitHorizontal 

"Split horizontally" menu item

Close 

"Close" menu item

Rename 

"Rename" menu item

All 

all menu items

anonymous enum
Enumerator
VersionMarker 
SplitMarker 
AreaMarker 
WidgetMarker 
anonymous enum
Enumerator
Horizontal 
Visible 
Enumerator
SplitStay 

selected widget stays in current workarea, others widgets are moved into a new workarea

SplitAt 

all widgets before selected widget stay in current workarea, other widgess are moved into a new workarea

SplitMove 

selected widget is moved into a new workarea, all other widgets stay in an old workarea

Constructor & Destructor Documentation

QtxWorkstack::QtxWorkstack ( QWidget parent = 0)
QtxWorkstack::~QtxWorkstack ( )
virtual

Member Function Documentation

int QtxWorkstack::accel ( const int  id) const
Parameters
idaction ID
Returns
action accelerator

References myActionsMap.

QAction * QtxWorkstack::action ( const int  id) const
protected

References myActionsMap.

QtxWorkstackArea * QtxWorkstack::activeArea ( ) const
private
Returns
active workarea

References myArea.

QWidget * QtxWorkstack::activeWindow ( ) const
Returns
active widget

References myWin.

QWidget * QtxWorkstack::addWindow ( QWidget w,
Qt::WindowFlags  f = 0 
)
Parameters
wwidget
fwidget flags
Returns
child widget container

References QtxWorkstackArea::insertWidget(), and targetArea().

QtxWorkstackArea * QtxWorkstack::areaAt ( const QPoint &  p) const
private
Returns
workarea
Parameters
ppoint

References areas(), and mySplit.

void QtxWorkstack::areas ( QSplitter split,
QList< QtxWorkstackArea * > &  areaList,
const bool  rec = false 
) const
private
Parameters
splitparent splitter
areaListlist to be filled with child workareas
recif true, perform recursive search of children
void QtxWorkstack::Attract ( QWidget wid1,
QWidget wid2,
const bool  all 
)

Move wid2 in target workarea. Put it right after wid1. If all parameter is true, all widgets from source workarea will be moved including wid2 and source workarea will be deleted then.

If wid1 and wid2 belongs to one workarea, widgets will be just reordered in that workarea.

Parameters
wid1widget from target workarea
wid2widget from source workarea
allif true, all widgets from source workarea will be moved into the target one, else only the wid2 will be moved

References QtxWorkstackArea::activeWidget(), areas(), distributeSpace(), QtxWorkstackArea::insertWidget(), mySplit, QtxWorkstackArea::removeWidget(), QtxWorkstackArea::setActiveWidget(), splitter(), and QtxWorkstackArea::widgetList().

QtxWorkstackArea * QtxWorkstack::createArea ( QWidget parent) const
private
Parameters
parentparent widget
Returns
created workarea

References onContextMenuRequested(), onDeactivated(), onDestroyed(), onWindowActivated(), and QtxWorkstackArea.

QtxWorkstackArea * QtxWorkstack::currentArea ( ) const
private

Current workarea is that one which has input focus.

Returns
current area
void QtxWorkstack::customEvent ( QEvent )
protectedvirtual
Parameters
ecustom event (not used)

References updateState().

void QtxWorkstack::distributeSpace ( QSplitter split) const
private
Parameters
splitsplitter

References Horizontal.

QIcon QtxWorkstack::icon ( const int  id) const

If id is invalid, null icon is returned.

Parameters
idmenu action ID
Returns
menu item icon

References myActionsMap.

void QtxWorkstack::insertWidget ( QWidget wid,
QWidget pWid,
QWidget after 
)
private
Parameters
widwidget
pWidparent widget
afterwidget after which wid should be added
int QtxWorkstack::menuActions ( ) const

Actions, which IDs are set in flags parameter, will be shown in the context popup menu. Other actions will not be shown.

Parameters
flagsORed together actions flags

References Close, myActionsMap, Rename, SplitHorizontal, and SplitVertical.

bool QtxWorkstack::move ( QWidget wid,
QWidget wid_to,
const bool  before 
)
Parameters
widwidget to be moved
wid_towidget specified the destination area
beforespecifies whether the first widget has to be moved before or after the second widget
Returns
true if operation is completed successfully, false otherwise

References QtxWorkstackArea::insertWidget(), QtxWorkstackArea::removeWidget(), wgArea(), and QtxWorkstackArea::widgetList().

QtxWorkstackArea * QtxWorkstack::neighbourArea ( QtxWorkstackArea area) const
private
Parameters
areaarea for which neighbour is searched
Returns
neighbour area (or 0 if not found)

References areas(), and mySplit.

void QtxWorkstack::onCloseWindow ( )
privateslot

References activeWindow(), and myWorkWin.

void QtxWorkstack::onContextMenuRequested ( QWidget w,
QPoint  p 
)
privateslot
void QtxWorkstack::onDeactivated ( QtxWorkstackArea area)
privateslot
Parameters
areaworkarea being deactivated

References QtxWorkstackArea::activeWidget(), areas(), myArea, mySplit, myWin, and neighbourArea().

void QtxWorkstack::onDestroyed ( QObject obj)
privateslot

Set input focus to the neighbour area.

Parameters
objworkarea being destroyed

References myArea, and neighbourArea().

void QtxWorkstack::onRename ( )
privateslot

Changes widget title.

References myWorkWin.

void QtxWorkstack::onWindowActivated ( QWidget )
privateslot
Parameters
areaworkarea being activated (not used)

References obj, and setActiveArea().

bool QtxWorkstack::opaqueResize ( ) const
Returns
current opaque mode

References mySplit.

bool QtxWorkstack::restoreState ( const QByteArray &  state,
int  version 
)
Parameters
versionnumber
Returns
restore performing state

References VersionMarker.

QByteArray QtxWorkstack::saveState ( int  version) const
Parameters
versionnumber
Returns
state byte array.

References VersionMarker.

void QtxWorkstack::saveState ( QDataStream &  stream) const
protected
void QtxWorkstack::setAccel ( const int  id,
const int  accel 
)
Parameters
idaction ID
accelaction accelerator

References myActionsMap.

void QtxWorkstack::setActiveArea ( QtxWorkstackArea area)
private
Parameters
workarea

References myArea, myWin, QtxWorkstackArea::updateActiveState(), and windowActivated().

void QtxWorkstack::setActiveWindow ( QWidget wid)
Parameters
widwidget to activate

References activeArea(), and QtxWorkstackArea::setActiveWidget().

void QtxWorkstack::setIcon ( const int  id,
const QIcon &  icon 
)
Parameters
idmenu action ID
iconew menu item icon

References myActionsMap.

void QtxWorkstack::setMenuActions ( const int  flags)

Actions, which IDs are set in flags parameter, will be shown in the context popup menu. Other actions will not be shown.

Parameters
flagsORed together actions flags

References Close, myActionsMap, Rename, SplitHorizontal, and SplitVertical.

void QtxWorkstack::setOpaqueResize ( bool  opaque = true)
Parameters
opaqueopaque mode

References mySplit, split(), and splitters().

int QtxWorkstack::setPosition ( QWidget wid,
QSplitter split,
const Qt::Orientation  o,
const int  need_pos,
const int  splitter_pos 
)
private

Called from SetRelativePosition() public method.

Parameters
widwidget to be moved
splitcurrently processed splitter (goes from more common to more particular splitter in recursion calls)
oorientation of positioning
need_posrequired position of the given widget in pixels (from top/left side of workstack area)
splitter_posposition of the splitter split (from top/left side of workstack area)
Returns
difference between a required and a distinguished position

References areas(), QtxWorkstackArea::contains(), Horizontal, isFound(), positionSimple(), and setSizes().

void QtxWorkstack::SetRelativePosition ( QWidget wid,
const Qt::Orientation  o,
const double  position 
)

If o is Qt::Horizontal, the horizontal position of wid will be changed. If o is Qt::Vertical, the vertical position of wid will be changed.

Parameters
widwidget
oorientation of positioning (Qt::Horizontal or Qt::Vertical)
posposition relatively to the workstack; value in range [0..1]

References Horizontal, mySplit, and setPosition().

void QtxWorkstack::SetRelativePositionInSplitter ( QWidget wid,
const double  position 
)

Orientation of positioning will correspond to the splitter orientation.

Parameters
widwidget
posposition relatively to the splitter; value in the range [0..1]

References areas(), Horizontal, isFound(), mySplit, setSizes(), split(), and splitter().

void QtxWorkstack::split ( const int  o)

Splitting is possible only if there are two or more widgets in the workarea. This function splits current workarea to two new ones.

Parameters
osplitting orientation (Qt::Orientation)

References activeArea(), QtxWorkstackArea::activeWidget(), areas(), createArea(), distributeSpace(), QtxWorkstackArea::insertWidget(), myWorkArea, QtxWorkstackArea::removeWidget(), s, splitter(), splitters(), QtxWorkstackArea::widgetList(), and wrapSplitter().

void QtxWorkstack::Split ( QWidget wid,
const Qt::Orientation  o,
const SplitType  type 
)

Splitting is possible only if there are two or more widgets in the workarea. This function splits current workarea to two new ones.

Parameters
widwidget belonging to the workstack
osplitting orientation type (Qt::Orientation)
typesplitting type (QtxWorkstack::SplitType)

References QtxWorkstackArea::activeWidget(), areas(), createArea(), distributeSpace(), insertWidget(), QtxWorkstackArea::insertWidget(), mySplit, QtxWorkstackArea::removeWidget(), s, SplitAt, SplitMove, SplitStay, splitter(), splitters(), QtxWorkstackArea::widgetList(), and wrapSplitter().

void QtxWorkstack::splitHorizontal ( )
slot

References split(), and Vertical.

QSplitter * QtxWorkstack::splitter ( QtxWorkstackArea area) const
private
Parameters
workarea
Returns
splitter corresponding to the workarea

References split().

void QtxWorkstack::splitters ( QSplitter split,
QList< QSplitter * > &  splitList,
const bool  rec = false 
) const
private
Parameters
splitparent splitter
splitListlist to be filled with child splitters
recif true, perform recursive search of children
void QtxWorkstack::splittersVisible ( QWidget wid,
bool  visible = true 
)
Parameters
widwidget (and parent area) will be shown/hidden
visiblesplitters

References mySplit, and splitterVisible().

void QtxWorkstack::splitterVisible ( QWidget wid,
QList< QSplitter * > &  parent_list,
QSplitter split,
bool  visible 
)
private
Parameters
widwidget (and parent area) will be shown/hidden
parent_listparent splitters list
splitsplitter will be shown/hidden
visiblesplitter

References areas(), QtxWorkstackArea::childList(), mySplit, QtxWorkstackArea::showTabBar(), splitter(), and splitters().

void QtxWorkstack::splitVertical ( )
slot

References Horizontal, and split().

QWidgetList QtxWorkstack::splitWindowList ( ) const
Returns
list of widgets in active workarea

References myArea.

void QtxWorkstack::stack ( )
Returns
true if operation is completed successfully, false otherwise

References QtxWorkstackArea::insertWidget(), QtxWorkstackArea::removeWidget(), wgArea(), and windowList().

QtxWorkstackArea * QtxWorkstack::targetArea ( )
private

Returns active workarea or current area (if there is no active workarea). If there are no workareas, create new workarea and return it.

Returns
workarea

References activeArea(), areas(), createArea(), currentArea(), and mySplit.

void QtxWorkstack::updateState ( )

References mySplit.

void QtxWorkstack::updateState ( QSplitter split)
private
Parameters
splitsplitter to be updated

References areas(), mySplit, splitters(), and updateState().

QtxWorkstackArea * QtxWorkstack::wgArea ( QWidget wid) const
private
Parameters
widwidget
Returns
pointer to QtxWorkstackArea* object

References areas(), and mySplit.

void QtxWorkstack::windowActivated ( QWidget w)
signal
Parameters
wwidget being activated
QWidgetList QtxWorkstack::windowList ( QWidget wid = 0) const
Parameters
widwidget specifying area if it is equal to null when widgets of all areas are retuned
Returns
list of widgets

References areas(), mySplit, and wgArea().

QSplitter * QtxWorkstack::wrapSplitter ( QtxWorkstackArea area)
private
Parameters
workarea
Returns
new splitter

References QtxWorkstackSplitter, and splitter().

Friends And Related Function Documentation

friend class QtxWorkstackAction
friend
friend class QtxWorkstackArea
friend
friend class QtxWorkstackDrag
friend
friend class QtxWorkstackSplitter
friend

Member Data Documentation

QMap<int, QAction*> QtxWorkstack::myActionsMap
private
QPointer<QtxWorkstackArea> QtxWorkstack::myArea
private
QtxWorkstackSplitter* QtxWorkstack::mySplit
private
QPointer<QWidget> QtxWorkstack::myWin
private
QPointer<QtxWorkstackArea> QtxWorkstack::myWorkArea
private
QPointer<QWidget> QtxWorkstack::myWorkWin
private

The documentation for this class was generated from the following files: