SideArea.cc 7.35 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
34
35
\*===========================================================================*/

/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
36
37
38
39
40
*                                                                            *
*   $Revision$                                                       *
*   $LastChangedBy$                                                *
*   $Date$                     *
*                                                                            *
41
42
43
\*===========================================================================*/


Jan Möbius's avatar
Dennis:    
Jan Möbius committed
44
45
46
47
48
49
50

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

#include <QVBoxLayout>

#include "SideArea.hh"
#include "SideElement.hh"
Dirk Wilden's avatar
Dirk Wilden committed
51
#include <OpenFlipper/common/GlobalOptions.hh>
52
#include <iostream>
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
53
54
55
//== IMPLEMENTATION ==========================================================

SideArea::SideArea (QWidget *_parent) :
56
57
  QWidget (_parent),
  lastPos_(0)
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
58
59
60
61
62
63
64
65
66
67
68
69
70
71
{

  layout_ = new QVBoxLayout;
  layout_->setSpacing (0);

  QVBoxLayout *l = new QVBoxLayout;
  l->addLayout (layout_);
  l->addStretch(1);

  setLayout (l);
}

//-----------------------------------------------------------------------------

72
void SideArea::addItem (QObject const * const _plugin, QWidget *_w, QString _name, QIcon *_icon)
Dirk Wilden's avatar
Dirk Wilden committed
73
{
74
75
76
77
78
  SideElement *e = new SideElement (this, _w, _name, _icon);
  layout_->addWidget (e);
  items_.push_back (e);
  plugins_.push_back(_plugin);
  itemNames_.push_back(_name);
Dirk Wilden's avatar
Dirk Wilden committed
79
80
81
82
}

//-----------------------------------------------------------------------------

83
void SideArea::addItem (QObject const * const _plugin, QWidget *_w, QString _name)
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
84
{
85
86
87
88
89
  SideElement *e = new SideElement (this, _w, _name);
  layout_->addWidget (e);
  items_.push_back (e);
  plugins_.push_back(_plugin);
  itemNames_.push_back(_name);
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
90
91
92
93
}

//-----------------------------------------------------------------------------

94
void SideArea::moveItemToPosition(const QString& _name, int _position) {
95

96
97
98
    // Position is in valid range
    if(_position < 0 || _position >= items_.size())
        return;
99

100
101
102
    // Search item
    QVector<SideElement*>::iterator it = items_.begin();
    for(; it != items_.end(); ++it) {
103
        if( (*it)->name() == _name )
104
105
            break;
    }
106

107
108
109
110
111
112
113
114
    if(it != items_.end()) {
        layout_->removeWidget(*it);
        layout_->insertWidget(_position, (*it));
    }
}

//-----------------------------------------------------------------------------

115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
void SideArea::moveItemToPosition(QObject const * const _plugin, const QString& _name, int _position) {

    // Position is in valid range
    if(_position < 0 || _position >= items_.size())
        return;

    // Search item
    QVector<SideElement*>::iterator it = items_.begin();
    int i = 0;
    for(; it != items_.end(); ++it, ++i) {
        if(   ((*it)->name() == _name)
           && (plugins_[i] == _plugin)   )
            break;
    }

    bool active = (*it)->active();

    if(it != items_.end()) {
        layout_->removeWidget(*it);
        layout_->insertWidget(_position, (*it));
        if (active)
          (*it)->show();
    }
}

//-----------------------------------------------------------------------------

142
143
144
145
146
147
int SideArea::getNumberOfWidgets() const {
    return items_.size();
}

//-----------------------------------------------------------------------------

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
148
149
150
151
152
153
154
155
void SideArea::clear ()
{
  foreach (SideElement *e, items_)
  {
    layout_->removeWidget (e);
    delete e;
  }
  items_.clear ();
156
157
158
  plugins_.clear();
  itemNames_.clear();
  lastPos_ = 0;
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
159
160
161
162
}

//-----------------------------------------------------------------------------

163
164
165
166
167
168
169
170
171
void SideArea::expandAll()
{
  foreach (SideElement *e, items_)
  {
    e->setActive(true);
  }
}

//-----------------------------------------------------------------------------
172

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
173
174
175
176
177
178
179
180
181
182
183
void SideArea::saveState (QSettings &_settings)
{
  _settings.beginGroup ("SideArea");
  foreach (SideElement *e, items_)
  {
    e->saveState (_settings);
  }
  _settings.endGroup ();
}

//-----------------------------------------------------------------------------
Dirk Wilden's avatar
Dirk Wilden committed
184

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
185
186
187
188
189
190
191
192
193
194
void SideArea::restoreState (QSettings &_settings)
{
  _settings.beginGroup ("SideArea");
  foreach (SideElement *e, items_)
  {
    e->restoreState (_settings);
  }
  _settings.endGroup ();
}

Dirk Wilden's avatar
Dirk Wilden committed
195
196
197
198
199
200
201
//-----------------------------------------------------------------------------

void SideArea::setElementActive(QString _name, bool _active)
{
  for (int i=0; i < items_.count(); i++)
    if ( items_[i]->name() == _name ){
      items_[i]->setActive(_active);
202

Dirk Wilden's avatar
Dirk Wilden committed
203
204
205
206
      return;
    }
}

207
208
209
210
211
212
213
214
215
216
217
218
//-----------------------------------------------------------------------------

const QList<const QObject *>& SideArea::plugins() {
  return plugins_;
}

//-----------------------------------------------------------------------------

const QStringList& SideArea::names() {
  return itemNames_;
}

219

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
220
221
//=============================================================================
//=============================================================================