QtSlideWindow.hh 4.07 KB
Newer Older
Jan Möbius's avatar
Jan Möbius committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//=============================================================================
//
//                               OpenFlipper
//        Copyright (C) 2008 by Computer Graphics Group, RWTH Aachen
//                           www.openflipper.org
//
//-----------------------------------------------------------------------------
//
//                                License
//
//  OpenFlipper is free software: you can redistribute it and/or modify
//  it under the terms of the GNU Lesser General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  OpenFlipper is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU Lesser General Public License for more details.
//
//  You should have received a copy of the GNU Lesser General Public License
//  along with OpenFlipper.  If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
//
//   $Revision: $
//   $Author: $
//   $Date: $
//
//=============================================================================

#ifndef QT_SLIDE_WINDOW_
#define QT_SLIDE_WINDOW_

//=============================================================================
//
//  CLASS QtSlideWindow
//
//=============================================================================

//== INCLUDES =================================================================

#include <QGraphicsProxyWidget>
#include <OpenFlipper/common/GlobalDefines.hh>

//== FORWARDDECLARATIONS ======================================================

class QtGraphicsButton;
class QTimeLine;
class QGraphicsItemAnimation;

//== CLASS DEFINITION =========================================================


/** \class QtSlideWindow QtSlideWindow.hh <OpenFlipper/widgets/glWidget/QtSlideWindow.hh>

   A graphics scene widget that has a hover slide effect and detach functionality
   for a child widget
 **/

class DLLEXPORT QtSlideWindow : public QGraphicsProxyWidget
{
    Q_OBJECT

  public:
    /** Create a glViewer.
    \param _name displayed titlebar name
    \param _parent parent graphics item
    */
    QtSlideWindow (QString _name = 0, QGraphicsItem *_parent = 0);

    /// recalculate geometry
    void updateGeometry ();

    /// attach a child widget
    void attachWidget (QWidget *_m);

    /// detach child widget
    void detachWidget ();

  private:

    /// paints decoration
    virtual void paintWindowFrame(QPainter *_painter, const QStyleOptionGraphicsItem *_option, QWidget *_widget = 0);

    /// track frame events
    virtual bool windowFrameEvent(QEvent *_e);

    /// categorize frame area
    virtual Qt::WindowFrameSection windowFrameSectionAt(const QPointF &_pos) const;

    /// hove event tracking
    virtual void hoverEnterEvent (QGraphicsSceneHoverEvent *_event);
    virtual void hoverLeaveEvent (QGraphicsSceneHoverEvent *_event);

    /// size & position event tracking
    virtual void resizeEvent (QGraphicsSceneResizeEvent *_event);
    virtual void moveEvent (QGraphicsSceneMoveEvent *_event);

  private slots:
    /// detach button pressed
    void detachPressed ();

    /// detached dialog closed
    void dialogClosed ();

    /// autohide button presed
    void autohidePressed ();

  private:

    // name
    QString name_;

    // child widget
    QWidget *mainWidget_;

    // buttons
    QtGraphicsButton *autohideButton_;
    QtGraphicsButton *detachButton_;

    // animation
    QTimeLine *hideTimeLine_;
    QGraphicsItemAnimation *hideAnimation_;

    // detached dialog
    QDialog *dialog_;
};

//=============================================================================
//=============================================================================
#endif // QT_SLIDE_WINDOW_ defined
133
//=============================================================================