SideElement.hh 5.86 KB
Newer Older
1
/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
2
3
*                                                                            *
*                              OpenFlipper                                   *
Jan Möbius's avatar
Jan Möbius committed
4
*      Copyright (C) 2001-2011 by Computer Graphics Group, RWTH Aachen       *
Jan Möbius's avatar
Jan Möbius committed
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
*                           www.openflipper.org                              *
*                                                                            *
*--------------------------------------------------------------------------- *
*  This file is part of OpenFlipper.                                         *
*                                                                            *
*  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 with the               *
*  following exceptions:                                                     *
*                                                                            *
*  If other files instantiate templates or use macros                        *
*  or inline functions from this file, or you compile this file and          *
*  link it with other files to produce an executable, this file does         *
*  not by itself cause the resulting executable to be covered by the         *
*  GNU Lesser General Public License. This exception does not however        *
*  invalidate any other reasons why the executable file might be             *
*  covered by the GNU Lesser General Public License.                         *
*                                                                            *
*  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 LesserGeneral Public           *
*  License along with OpenFlipper. If not,                                   *
*  see <http://www.gnu.org/licenses/>.                                       *
*                                                                            *
33
\*===========================================================================*/
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
34

35
/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
36
37
38
39
40
*                                                                            *
*   $Revision$                                                       *
*   $LastChangedBy$                                                *
*   $Date$                     *
*                                                                            *
41
\*===========================================================================*/
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
42
43
44
45
46
47
48
49
50
51
52
53

#ifndef SIDE_ELEMENT_
#define SIDE_ELEMENT_

//=============================================================================
//
//  CLASS SideElement
//
//=============================================================================

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

54
#include <QWidget>
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
55
56
57
58
#include <QSettings>

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

Dirk Wilden's avatar
Dirk Wilden committed
59
class QIcon;
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
class QLabel;
class QToolButton;
class QAction;
class QDialog;
class QVBoxLayout;

class SideArea;


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


/** \class SideElement SideElement.hh <OpenFlipper/widgets/coreWidget/SideElement.hh>

  A widget that holds the plugin side area widget
 **/


class SideElement : public QWidget
{
  Q_OBJECT

  public:
    /** Create a SideElement
Jan Möbius's avatar
Jan Möbius committed
84
85
86
87
88
      @param _parent   SideArea widget that holds this widget
      @param _w        Plugin tool widget
      @param _name     Plugin name
      @param _icon     An icon that should be shown in the title bar of the side element

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
89
    */
Dirk Wilden's avatar
Dirk Wilden committed
90
    SideElement (SideArea *_parent, QWidget *_w, QString _name, QIcon* _icon = 0);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
91
92
93
94

    /// Destructor
    ~SideElement ();

95
96
    /// Set the element as active
    void setActive(bool _active);
97

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
98
99
100
101
102
    /// saves the current state
    void saveState (QSettings &_settings);

    /// restores the state
    void restoreState (QSettings &_settings);
103

Dirk Wilden's avatar
Dirk Wilden committed
104
105
    /// return the name
    const QString& name();
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
106

107
108
109
    /// returns if the SideElement is active
    bool active();

110
111
112
    /// returns the pointer to the plugin tool widget
    QWidget const * widget();

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
  private:

    /// Clickable area inside of the side element.
    class TopArea : public QWidget
    {
      public:
        TopArea (SideElement *_e);

        virtual void mousePressEvent (QMouseEvent *_event);
      private:
        SideElement *e_;
    };

    /// Called on mouse press
    void labelPress ();
128

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
  private slots:

    /// Called if the detach button was pressed
    void detachPressed (bool _checked);

    /// Called if a detached dialog was closed
    void dialogClosed ();

  private:

    // parent
    SideArea *parent_;

    // plugin widget
    QWidget *widget_;

    // plugin name
    QString name_;

Dirk Wilden's avatar
Dirk Wilden committed
148
149
150
    // Icon
    QIcon* icon_;

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
151
152
153
154
155
156
157
158
    // main layout
    QVBoxLayout *mainLayout_;

    // status
    bool active_;

    // label that display the plugin name
    QLabel *label_;
Dirk Wilden's avatar
Dirk Wilden committed
159
    QLabel *iconHolder_;
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
160
161
162
163

    // detach button & action
    QToolButton *detachButton_;
    QAction *detachAction_;
164

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
165
166
167
168
169
170
171
    // dialog for detached widget
    QDialog *dialog_;
};

//=============================================================================
//=============================================================================
#endif // SIDE_ELEMENT_ defined
Jan Möbius's avatar
Jan Möbius committed
172
//=============================================================================