~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to src/gui/widgets/qdockseparator.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-08-24 04:09:09 UTC
  • Revision ID: james.westby@ubuntu.com-20050824040909-xmxe9jfr4a0w5671
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
**
 
3
** Copyright (C) 1992-2005 Trolltech AS. All rights reserved.
 
4
**
 
5
** This file is part of the widgets module of the Qt Toolkit.
 
6
**
 
7
** This file may be distributed under the terms of the Q Public License
 
8
** as defined by Trolltech AS of Norway and appearing in the file
 
9
** LICENSE.QPL included in the packaging of this file.
 
10
**
 
11
** This file may be distributed and/or modified under the terms of the
 
12
** GNU General Public License version 2 as published by the Free Software
 
13
** Foundation and appearing in the file LICENSE.GPL included in the
 
14
** packaging of this file.
 
15
**
 
16
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
 
17
**   information about Qt Commercial License Agreements.
 
18
** See http://www.trolltech.com/qpl/ for QPL licensing information.
 
19
** See http://www.trolltech.com/gpl/ for GPL licensing information.
 
20
**
 
21
** Contact info@trolltech.com if any conditions of this licensing are
 
22
** not clear to you.
 
23
**
 
24
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 
25
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
26
**
 
27
****************************************************************************/
 
28
 
 
29
#include "qdockseparator_p.h"
 
30
 
 
31
#include "qdockwidgetlayout_p.h"
 
32
 
 
33
#include "qmainwindow.h"
 
34
#include "qmainwindowlayout_p.h"
 
35
 
 
36
#include <qapplication.h>
 
37
#include <qevent.h>
 
38
#include <qpainter.h>
 
39
#include <qstyle.h>
 
40
#include <qstyleoption.h>
 
41
 
 
42
 
 
43
QDockSeparator::QDockSeparator(QDockWidgetLayout *d, QWidget *parent)
 
44
    : QWidget(parent), hover(0), state(0)
 
45
{ setDock(d); }
 
46
 
 
47
void QDockSeparator::setDock(QDockWidgetLayout *d)
 
48
{
 
49
    Q_ASSERT(d != 0);
 
50
    dock = d;
 
51
    orientation = dock->orientation;
 
52
    setCursor((orientation == Qt::Horizontal) ? Qt::SplitVCursor : Qt::SplitHCursor);
 
53
}
 
54
 
 
55
bool QDockSeparator::event(QEvent *event)
 
56
{
 
57
    switch(event->type()) {
 
58
    case QEvent::HoverEnter:
 
59
        hover = true;
 
60
        update();
 
61
        break;
 
62
    case QEvent::HoverLeave:
 
63
        hover = false;
 
64
        update();
 
65
        break;
 
66
    default:
 
67
        break;
 
68
    }
 
69
    return QWidget::event(event);
 
70
}
 
71
 
 
72
void QDockSeparator::mousePressEvent(QMouseEvent *event)
 
73
{
 
74
    if (event->button() != Qt::LeftButton)
 
75
        return;
 
76
 
 
77
    Q_ASSERT(!state);
 
78
    state = new DragState;
 
79
 
 
80
    // we map from global coordinates to avoid nasty effects when
 
81
    // event compression kicks in
 
82
    state->origin = parentWidget()->mapFromGlobal(event->globalPos());
 
83
 
 
84
    // clear focus... it will be restored when the mouse button is released
 
85
    state->prevFocus = qApp->focusWidget();
 
86
    if (state->prevFocus)
 
87
        state->prevFocus->clearFocus();
 
88
 
 
89
    qobject_cast<QMainWindowLayout*>(parentWidget()->layout())->saveLayoutInfo();
 
90
}
 
91
 
 
92
void QDockSeparator::mouseMoveEvent(QMouseEvent *event)
 
93
{
 
94
    Q_ASSERT(state != 0);
 
95
 
 
96
    // we map from global coordinates to avoid nasty effects when
 
97
    // event compression kicks in
 
98
    QMainWindow *mw = qobject_cast<QMainWindow *>(parentWidget());
 
99
    QPoint p = mw->mapFromGlobal(event->globalPos());
 
100
    int delta = pick_perp(orientation, p - state->origin);
 
101
 
 
102
    // constrain the mouse move event
 
103
    if (qobject_cast<QMainWindowLayout *>(mw->layout())->constrain(dock, delta) != 0)
 
104
        qobject_cast<QMainWindowLayout *>(mw->layout())->relayout();
 
105
}
 
106
 
 
107
void QDockSeparator::mouseReleaseEvent(QMouseEvent *event)
 
108
{
 
109
    if (event->button() != Qt::LeftButton)
 
110
        return;
 
111
 
 
112
    QMainWindowLayout *l = qobject_cast<QMainWindowLayout*>(parentWidget()->layout());
 
113
    Q_ASSERT(l != 0);
 
114
    l->relayout();
 
115
    l->discardLayoutInfo();
 
116
 
 
117
    Q_ASSERT(state != 0);
 
118
 
 
119
    // restore focus
 
120
    if (state->prevFocus)
 
121
        state->prevFocus->setFocus();
 
122
 
 
123
    delete state;
 
124
    state = 0;
 
125
}
 
126
 
 
127
void QDockSeparator::paintEvent(QPaintEvent *)
 
128
{
 
129
    QPainter p(this);
 
130
    QStyleOption opt(0);
 
131
    opt.state = QStyle::State_None;
 
132
    if (isEnabled())
 
133
        opt.state |= QStyle::State_Enabled;
 
134
    if (orientation == Qt::Horizontal)
 
135
        opt.state |= QStyle::State_Horizontal;
 
136
    if (hover)
 
137
        opt.state |= QStyle::State_MouseOver;
 
138
    opt.rect = rect();
 
139
    opt.palette = palette();
 
140
    style()->drawPrimitive(QStyle::PE_IndicatorDockWidgetResizeHandle, &opt, &p, this);
 
141
}