Source Code (Use browser search to find items of interest.)
Class Index
qt'QHideDock (./qt-2.1.0/src/widgets/qmainwindow.cpp:780)
class QHideDock : public QWidget
{
public:
QHideDock( QMainWindow *parent, QMainWindowPrivate *p ) : QWidget( parent ) {
hide();
setFixedHeight( style().toolBarHandleExtend() );
d = p;
pressedHandle = -1;
pressed = FALSE;
setMouseTracking( TRUE );
win = parent;
tip = new QHideToolTip( this );
}
~QHideDock() { delete tip; }
protected:
void paintEvent( QPaintEvent *e ) {
if ( !d->hidden || d->hidden->isEmpty() )
return;
QPainter p( this );
p.setClipRegion( e->rect() );
p.fillRect( e->rect(), colorGroup().brush( QColorGroup::Background ) );
QMainWindowPrivate::ToolBar *tb;
int x = 0;
int i = 0;
for ( tb = d->hidden->first(); tb; tb = d->hidden->next(), ++i ) {
if ( !tb->t->isVisible() )
continue;
style().drawToolBarHandle( &p, QRect( x, 0, 30, 10 ), Qt::Vertical,
i == pressedHandle, colorGroup(), TRUE );
x += 30;
}
}
void mousePressEvent( QMouseEvent *e ) {
pressed = TRUE;
if ( !d->hidden || d->hidden->isEmpty() )
return;
mouseMoveEvent( e );
if ( e->button() == RightButton && win->isDockMenuEnabled() ) {
if ( pressedHandle != -1 ) {
QMainWindowPrivate::ToolBar *tb = d->hidden->at( pressedHandle );
QPopupMenu menu( this );
int left = menu.insertItem( QMainWindow::tr( "&Left" ) );
menu.setItemEnabled( left, win->isDockEnabled( QMainWindow::Left )
&& win->isDockEnabled( tb->t, QMainWindow::Left ) );
int right = menu.insertItem( QMainWindow::tr( "&Right" ) );
menu.setItemEnabled( left, win->isDockEnabled( QMainWindow::Right )
&& win->isDockEnabled( tb->t, QMainWindow::Right ) );
int top = menu.insertItem( QMainWindow::tr( "&Top" ) );
menu.setItemEnabled( left, win->isDockEnabled( QMainWindow::Top )
&& win->isDockEnabled( tb->t, QMainWindow::Top ) );
int bottom = menu.insertItem( QMainWindow::tr( "&Bottom" ) );
menu.setItemEnabled( left, win->isDockEnabled( QMainWindow::Bottom )
&& win->isDockEnabled( tb->t, QMainWindow::Bottom ) );
menu.insertSeparator();
int hide = menu.insertItem( QMainWindow::tr( "R&estore" ) );
QMainWindow::ToolBarDock dock = tb->oldDock;
menu.setItemEnabled( left, win->isDockEnabled( dock )
&& win->isDockEnabled( tb->t, dock ) );
int res = menu.exec( e->globalPos() );
pressed = FALSE;
pressedHandle = -1;
repaint( TRUE );
if ( res == left )
win->moveToolBar( tb->t, QMainWindow::Left );
else if ( res == right )
win->moveToolBar( tb->t, QMainWindow::Right );
else if ( res == top )
win->moveToolBar( tb->t, QMainWindow::Top );
else if ( res == bottom )
win->moveToolBar( tb->t, QMainWindow::Bottom );
else if ( res == hide )
win->moveToolBar( tb->t, tb->oldDock, tb->nl, tb->oldIndex, tb->extraOffset );
else
return;
tb->t->show();
} else {
win->rightMouseButtonMenu( e->globalPos() );
}
}
}
void mouseMoveEvent( QMouseEvent *e ) {
if ( !d->hidden || d->hidden->isEmpty() )
return;
if ( !pressed )
return;
QMainWindowPrivate::ToolBar *tb;
int x = 0;
int i = 0;
if ( e->y() >= 0 && e->y() <= height() ) {
for ( tb = d->hidden->first(); tb; tb = d->hidden->next(), ++i ) {
if ( !tb->t->isVisible() )
continue;
if ( e->x() >= x && e->x() <= x + 30 ) {
int old = pressedHandle;
pressedHandle = i;
if ( pressedHandle != old )
repaint( TRUE );
return;
}
x += 30;
}
}
int old = pressedHandle;
pressedHandle = -1;
if ( old != -1 )
repaint( TRUE );
}
void mouseReleaseEvent( QMouseEvent *e ) {
pressed = FALSE;
if ( pressedHandle == -1 )
return;
if ( !d->hidden || d->hidden->isEmpty() )
return;
if ( e->button() == LeftButton ) {
if ( e->y() >= 0 && e->y() <= height() ) {
QMainWindowPrivate::ToolBar *tb = d->hidden->at( pressedHandle );
tb->t->show();
win->moveToolBar( tb->t, tb->oldDock, tb->nl, tb->oldIndex, tb->extraOffset );
}
}
pressedHandle = -1;
repaint( TRUE );
}
private:
QMainWindowPrivate *d;
QMainWindow *win;
int pressedHandle;
bool pressed;
QHideToolTip *tip;
friend class QHideToolTip;
};