DataControlPlugin.cc 16.8 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
//=============================================================================
//
//                               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.
15
//
Jan Möbius's avatar
 
Jan Möbius committed
16
17
18
19
//  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.
20
//
Jan Möbius's avatar
 
Jan Möbius committed
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//  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$
//
//=============================================================================





#include <QtGui>

#include "DataControlPlugin.hh"

#include <QLayout>
41
#include <QGridLayout>
Jan Möbius's avatar
 
Jan Möbius committed
42
#include <QItemSelectionModel>
43

Jan Möbius's avatar
 
Jan Möbius committed
44
45
46
47
#include <iostream>
#include <ACG/GL/GLState.hh>
#include <QStringList>
#include <ACG/Scenegraph/BaseNode.hh>
Dirk Wilden's avatar
Dirk Wilden committed
48
#include <ACG/QtWidgets/QtMaterialDialog.hh>
Jan Möbius's avatar
 
Jan Möbius committed
49
50
51
52
53
54
55
#include <QModelIndexList>

#include <queue>

#include <OpenFlipper/BasePlugin/PluginFunctions.hh>


Dirk Wilden's avatar
Dirk Wilden committed
56
57
58
void DataControlPlugin::initializePlugin(){
}

Jan Möbius's avatar
 
Jan Möbius committed
59
void DataControlPlugin::pluginsInitialized() {
60

Jan Möbius's avatar
   
Jan Möbius committed
61
62
63
  //set the slot descriptions
  setDescriptions();

Jan Möbius's avatar
 
Jan Möbius committed
64
  QMenu* contextMenu = new QMenu("Object selection");
65

Jan Möbius's avatar
 
Jan Möbius committed
66
67
68
69
70
  //Target Objects
  QAction* hideAction = new QAction(tr("&Hide"), this);
  hideAction->setStatusTip(tr("Hide object"));
  connect(hideAction, SIGNAL(triggered()), this, SLOT(slotContextMenuHide()) );
  contextMenu->addAction(hideAction);
71

Jan Möbius's avatar
 
Jan Möbius committed
72
73
74
75
76
77
  //Target Objects
  targetAction_ = new QAction(tr("&target"), this);
  targetAction_->setCheckable(true);
  targetAction_->setStatusTip(tr("Set object as target"));
  connect(targetAction_, SIGNAL(triggered()), this, SLOT(slotContextMenuTarget()) );
  contextMenu->addAction(targetAction_);
78

Jan Möbius's avatar
 
Jan Möbius committed
79
80
81
82
83
  //Source Objects
  sourceAction_ = new QAction(tr("&source"), this);
  sourceAction_->setCheckable(true);
  sourceAction_->setStatusTip(tr("Set object as source"));
  connect(sourceAction_, SIGNAL(triggered()), this, SLOT(slotContextMenuSource()) );
84
85
86
  contextMenu->addAction(sourceAction_);

  emit addContextMenu(contextMenu , DATA_ALL , CONTEXTTOPLEVELMENU);
87

Jan Möbius's avatar
 
Jan Möbius committed
88
89
90
91
92
}

bool DataControlPlugin::initializeToolbox(QWidget*& _widget)
{
   locked = false;
93
94
95
   tool_ = new DatacontrolToolboxWidget();
   connect( tool_ , SIGNAL( keyEvent( QKeyEvent* ) ),
            this  , SLOT(slotKeyEvent ( QKeyEvent* ) ));
Jan Möbius's avatar
 
Jan Möbius committed
96
97
   _widget = tool_;
   QSize size(300, 300);
98
99
100
   tool_->resize(size);
   MeshDialogLayout_ = new QGridLayout( tool_);

Jan Möbius's avatar
 
Jan Möbius committed
101
   model_ = new TreeModel( );
102

Jan Möbius's avatar
 
Jan Möbius committed
103
104
   view_ = new QTreeView(0);
   view_->setModel(model_);
105

Jan Möbius's avatar
 
Jan Möbius committed
106
107
108
   view_->QTreeView::resizeColumnToContents(1);
   view_->QTreeView::resizeColumnToContents(2);
   view_->QTreeView::resizeColumnToContents(3);
109

Jan Möbius's avatar
 
Jan Möbius committed
110
   view_->setContextMenuPolicy(Qt::CustomContextMenu);
111

112
113
114
115
   view_->setDragEnabled(true);
   view_->setAcceptDrops(true);
   view_->setDropIndicatorShown(true);

Jan Möbius's avatar
 
Jan Möbius committed
116
117
   view_->setSelectionBehavior(QAbstractItemView::SelectRows);
   view_->setSelectionMode(QAbstractItemView::ExtendedSelection);
118

Jan Möbius's avatar
 
Jan Möbius committed
119
120
   connect( model_,SIGNAL(dataChanged( const QModelIndex&, const QModelIndex& ) ),
             this,SLOT(slotDataChanged( const QModelIndex&, const QModelIndex& )));
121

Jan Möbius's avatar
 
Jan Möbius committed
122
123
   connect( model_ , SIGNAL(rowsRemoved( const QModelIndex &, int , int ) ),
            this , SLOT(slotRowsRemoved ( const QModelIndex &, int , int ) ) );
124

Jan Möbius's avatar
 
Jan Möbius committed
125
126
   connect( view_,SIGNAL(customContextMenuRequested ( const QPoint &  )  ),
            this,SLOT(slotCustomContextMenuRequested ( const QPoint & ) ));
127

128

129
130
131
   MeshDialogLayout_->addWidget( view_ , 0,0  );

   viewHeader_ = view_->header();
Jan Möbius's avatar
 
Jan Möbius committed
132
   viewHeader_->setContextMenuPolicy(Qt::CustomContextMenu);
133

Jan Möbius's avatar
 
Jan Möbius committed
134
135
136
   // connect the slot for the context menu
   connect( viewHeader_, SIGNAL(customContextMenuRequested ( const QPoint &  )  ),
            this,        SLOT(slotHeaderCustomContextMenuRequested ( const QPoint & ) ));
137

Jan Möbius's avatar
 
Jan Möbius committed
138
139
140
141
142
143
144
   return true;
}

void DataControlPlugin::slotObjectUpdated( int _identifier ) {
  model_->updatedObject( _identifier );
}

Dirk Wilden's avatar
Dirk Wilden committed
145
void DataControlPlugin::slotCellClicked(int /*_row*/ , int /*_col*/) {
146

Jan Möbius's avatar
 
Jan Möbius committed
147
148
149
150
//    if ( _col == 0 ) {
//          QTableWidgetItem* target = objectList_->item(_row,_col);
//          if ( target->checkState() == Qt::Checked ) {
//             target->setCheckState(Qt::Unchecked);
151
152
//             (*data_)[_row]->target(false);
//          } else {
Jan Möbius's avatar
 
Jan Möbius committed
153
//             target->setCheckState(Qt::Checked);
154
//             (*data_)[_row]->target(true);
Jan Möbius's avatar
 
Jan Möbius committed
155
156
157
158
159
//          }
//         emit activeObjectChanged();
//    }
}

Dirk Wilden's avatar
Dirk Wilden committed
160
void DataControlPlugin::verticalHeaderClicked( int /*_row*/ ) {
Jan Möbius's avatar
 
Jan Möbius committed
161
162
163
164
//     (*data_)[_row]->target ( !(*data_)[_row]->target() );
//    QTableWidgetItem* target = objectList_->item(_row,3);
//    if ( target->checkState() == Qt::Checked ) {
//       target->setCheckState(Qt::Unchecked);
165
166
//       (*data_)[_row]->target(false);
//    } else {
Jan Möbius's avatar
 
Jan Möbius committed
167
//       target->setCheckState(Qt::Checked);
168
//       (*data_)[_row]->target(true);
Jan Möbius's avatar
 
Jan Möbius committed
169
170
171
172
173
174
//    }
//    emit activeObjectChanged();
// //    QTableWidgetSelectionRange range(5,0,5,3);
// //    objectList_->setRangeSelected(range,true);
}

Dirk Wilden's avatar
Dirk Wilden committed
175
void DataControlPlugin::verticalCountClicked( int  /*id*/ , int /*old*/ , int /*newc*/ ) {
Jan Möbius's avatar
 
Jan Möbius committed
176
177
178
179
//    emit log(LOGWARN,"VHeader : Count " + QString::number(id) + " " + QString::number(old) + " " + QString::number(newc));
}


180
void DataControlPlugin::slotActiveObjectChanged()
Jan Möbius's avatar
 
Jan Möbius committed
181
182
183
184
185
186
187
188
189
{
  ///@todo set all target checkboxes right
  // hint : dont call slotObjectUpdated -1 as this will do a redraw
//   slotObjectUpdated(-1);
  update_active();
}

void DataControlPlugin::update_active( ) {
  // find changed manipulator
190
  for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ;
Jan Möbius's avatar
 
Jan Möbius committed
191
192
193
194
195
196
197
198
199
200
201
202
                                        o_it != PluginFunctions::objects_end(); ++o_it)  {
      if ( o_it->target() ) {
               o_it->materialNode()->disable_blending();
               OpenMesh::Vec4f base_color = o_it->materialNode()->base_color();
               base_color[3] = 1.0;
               o_it->materialNode()->set_base_color(base_color);
               OpenMesh::Vec4f ambient_color = o_it->materialNode()->ambient_color();
               ambient_color[3] = 1.0;
               o_it->materialNode()->set_ambient_color(ambient_color);
               OpenMesh::Vec4f diffuse_color = o_it->materialNode()->diffuse_color();
               diffuse_color[3] = 1.0;
               o_it->materialNode()->set_diffuse_color(diffuse_color);
203
      }  else {
Jan Möbius's avatar
 
Jan Möbius committed
204
205
206
207
208
209
210
211
212
213
            o_it->materialNode()->enable_blending();
            OpenMesh::Vec4f base_color = o_it->materialNode()->base_color();
            base_color[3] = 0.4;
            o_it->materialNode()->set_base_color(base_color);
            OpenMesh::Vec4f ambient_color = o_it->materialNode()->ambient_color();
            ambient_color[3] = 0.4;
            o_it->materialNode()->set_ambient_color(ambient_color);
            OpenMesh::Vec4f diffuse_color = o_it->materialNode()->diffuse_color();
            diffuse_color[3] = 0.4;
            o_it->materialNode()->set_diffuse_color(diffuse_color);
214
      }
Jan Möbius's avatar
 
Jan Möbius committed
215
  }
216

Jan Möbius's avatar
 
Jan Möbius committed
217
218
219
220
221
222
223
224
  emit update_view();
}

void DataControlPlugin::slotKeyEvent( QKeyEvent* _event )
{

//    QList<QTableWidgetItem *> selected ;
//    QList<QTableWidgetSelectionRange> ranges;
225
//    switch (_event->key())
Jan Möbius's avatar
 
Jan Möbius committed
226
//    {
227
//      case Qt::Key_M :
Jan Möbius's avatar
 
Jan Möbius committed
228
229
230
231
//           for ( uint i = 0 ; i < data_->size() ; ++i ) {
//                QTableWidgetSelectionRange range(i,0,i,3);
//                objectList_->setRangeSelected(range,true);
//          }
232
233
234
//          return;
//
//       case Qt::Key_N :
Jan Möbius's avatar
 
Jan Möbius committed
235
236
237
//          std::cerr << "Checking : " << std::endl;
//          for ( uint i = 0 ; i < data_->size() ; ++i ) {
//             QTableWidgetItem * item = objectList_->verticalHeaderItem ( i );
238
//             if ( objectList_->isItemSelected(item)  )
Jan Möbius's avatar
 
Jan Möbius committed
239
240
241
242
243
//                std::cerr << i << item->text().toStdString() << " : yes" << std::endl;
//             else {
//                std::cerr << i << item->text().toStdString() << " : no" << std::endl;
//             }
//          }
244
//
Jan Möbius's avatar
 
Jan Möbius committed
245
246
//          selected = objectList_->selectedItems();
//          std::cerr << "Selected " << selected.size() << std::endl;
247
//
Jan Möbius's avatar
 
Jan Möbius committed
248
249
//          ranges = objectList_->selectedRanges();
//          std::cerr << "Ranges " << ranges.size() << std::endl;
250
//
Jan Möbius's avatar
 
Jan Möbius committed
251
//          for ( int i = 0 ; i < ranges.size(); ++i ) {
252
253
//            std::cerr << "Range " << i << " : " << ranges[i].topRow() << " .. " << ranges[i].bottomRow() << std::endl;
//            std::cerr << "Range " << i << " : " << ranges[i].leftColumn() << " .. " << ranges[i].rightColumn() << std::endl;
Jan Möbius's avatar
 
Jan Möbius committed
254
//          }
255
//
Jan Möbius's avatar
 
Jan Möbius committed
256
//          return;
257
//       case Qt::Key_C :
Jan Möbius's avatar
 
Jan Möbius committed
258
//           if ( _event->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier) ) {
259
//                for ( uint i = 0 ; i < data_->size() ; ++i ) {
Jan Möbius's avatar
 
Jan Möbius committed
260
261
262
263
//                   (*data_)[i]->source(false);
//                }
//                emit updated_objects(-1);
//               return;
264
265
//           }
//
Jan Möbius's avatar
 
Jan Möbius committed
266
//           if ( _event->modifiers() == (Qt::AltModifier | Qt::ShiftModifier) ) {
267
//              for ( uint i = 0 ; i < data_->size() ; ++i ) {
Jan Möbius's avatar
 
Jan Möbius committed
268
269
270
271
//                 (*data_)[i]->target(false);
//               }
//               emit updated_objects(-1);
//              return;
272
273
//           }
//
Jan Möbius's avatar
 
Jan Möbius committed
274
//           return;
275
276
//
//        case Qt::Key_A :
Jan Möbius's avatar
 
Jan Möbius committed
277
//           if ( _event->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier) ) {
278
//                for ( uint i = 0 ; i < data_->size() ; ++i ) {
Jan Möbius's avatar
 
Jan Möbius committed
279
280
281
282
//                   (*data_)[i]->source(true);
//                }
//                emit updated_objects(-1);
//               return;
283
284
//           }
//
Jan Möbius's avatar
 
Jan Möbius committed
285
//           if ( _event->modifiers() == (Qt::AltModifier | Qt::ShiftModifier) ) {
286
//              for ( uint i = 0 ; i < data_->size() ; ++i ) {
Jan Möbius's avatar
 
Jan Möbius committed
287
288
289
290
//                 (*data_)[i]->target(true);
//               }
//               emit updated_objects(-1);
//              return;
291
292
//           }
//
Jan Möbius's avatar
 
Jan Möbius committed
293
294
295
296
//           return;
//       default:
//       break;
//   }
297

Jan Möbius's avatar
 
Jan Möbius committed
298
299
  if ( _event->modifiers() == Qt::ControlModifier ) {
    switch (_event->key()) {
300
      case Qt::Key_A :
Jan Möbius's avatar
 
Jan Möbius committed
301
302
303
304
305
306
          setAllTarget();
        return;
      default:
        return;
    }
  }
307
308
309
310
311
312
313
314
315
316

    switch (_event->key()) {
      case Qt::Key_Delete :
          std::cerr << "Todo : Datacontrol Plugin: got delete key ..." << std::endl;
          slotPopupRemove();
        return;
      default:
        return;
    }

Jan Möbius's avatar
 
Jan Möbius committed
317
318
319
}

void DataControlPlugin::setAllTarget() {
320
321
322
  for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ;
                                    o_it != PluginFunctions::objects_end(); ++o_it)
  o_it->target(true);
Jan Möbius's avatar
 
Jan Möbius committed
323
  emit activeObjectChanged();
324
  emit updated_objects(-1);
Jan Möbius's avatar
 
Jan Möbius committed
325
326
327
}

void DataControlPlugin::setAllSource() {
328
329
330
331
  for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ;
                                    o_it != PluginFunctions::objects_end(); ++o_it)
  o_it->source(true);
  emit updated_objects(-1);
Jan Möbius's avatar
 
Jan Möbius committed
332
333
334
}

void DataControlPlugin::clearAllTarget() {
335
336
337
  for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ;
                                    o_it != PluginFunctions::objects_end(); ++o_it)
  o_it->target(false);
Jan Möbius's avatar
 
Jan Möbius committed
338
  emit activeObjectChanged();
339
  emit updated_objects(-1);
Jan Möbius's avatar
 
Jan Möbius committed
340
341
342
}

void DataControlPlugin::clearAllSource() {
343
344
345
346
  for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ;
                                    o_it != PluginFunctions::objects_end(); ++o_it)
  o_it->source(false);
  emit updated_objects(-1);
Jan Möbius's avatar
 
Jan Möbius committed
347
348
349
}

void DataControlPlugin::hideAll() {
350
351
352
  for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ;
                                    o_it != PluginFunctions::objects_end(); ++o_it)
    o_it->hide();
Jan Möbius's avatar
 
Jan Möbius committed
353
354
355
356
  emit update_view();
}

void DataControlPlugin::showAll() {
357
358
359
  for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ;
                                    o_it != PluginFunctions::objects_end(); ++o_it)
    o_it->show();
Jan Möbius's avatar
 
Jan Möbius committed
360
361
362
  emit update_view();
}

363
void DataControlPlugin::slotDataChanged ( const QModelIndex & topLeft,
Dirk Wilden's avatar
Dirk Wilden committed
364
                                          const QModelIndex & /*bottomRight*/ )
Jan Möbius's avatar
 
Jan Möbius committed
365
{
366

Jan Möbius's avatar
 
Jan Möbius committed
367
  switch (topLeft.column()) {
368
    // Name
Jan Möbius's avatar
 
Jan Möbius committed
369
    case 0:
Dirk Wilden's avatar
Dirk Wilden committed
370
      view_->expandToDepth(0);
Jan Möbius's avatar
 
Jan Möbius committed
371
      break;
372

Jan Möbius's avatar
 
Jan Möbius committed
373
374
    // show/hide
    case 1:
375
        emit update_view();
Jan Möbius's avatar
 
Jan Möbius committed
376
      break;
377

Jan Möbius's avatar
 
Jan Möbius committed
378
379
    // source
    case 2:
380
381
      break;

Jan Möbius's avatar
 
Jan Möbius committed
382
383
384
385
    // target
    case 3:
      emit activeObjectChanged();
      break;
386

Jan Möbius's avatar
 
Jan Möbius committed
387
388
389
390
391
    default:
      break;
  }
}

Dirk Wilden's avatar
Dirk Wilden committed
392
void DataControlPlugin::slotRowsRemoved ( const QModelIndex & /*_parent*/, int /*_start*/, int /*_end*/ ) {
Jan Möbius's avatar
 
Jan Möbius committed
393
394
395
396
397
  std::cerr << "Row removed! " << std::endl;
  emit update_view();
}

void DataControlPlugin::loadIniFileOptions( INIFile& _ini ) {
398
  if ( !_ini.section_exists( "Groups" ) )
Jan Möbius's avatar
 
Jan Möbius committed
399
    return;
400

Jan Möbius's avatar
 
Jan Möbius committed
401
402
  // Names of all groups
  QStringList groupNames;
403

Jan Möbius's avatar
 
Jan Möbius committed
404
405
  // names of the primary groups
  QStringList rootGroup;
406

Jan Möbius's avatar
 
Jan Möbius committed
407
408
  // Get the list of group names to the file
  _ini.get_entry(groupNames,"Groups","groups");
409

Jan Möbius's avatar
 
Jan Möbius committed
410
411
  // Get the primary group names to the file
  _ini.get_entry(rootGroup,"Groups","rootGroup");
412

Jan Möbius's avatar
 
Jan Möbius committed
413
414
415
416
  // Go over one level of the groups
  while ( rootGroup.size() > 0 ) {
    QString current = rootGroup[0];
    rootGroup.removeFirst();
417

Jan Möbius's avatar
 
Jan Möbius committed
418
419
    QStringList groupChildren;
    QStringList elementChildren;
420

Jan Möbius's avatar
 
Jan Möbius committed
421
422
    _ini.get_entry(elementChildren ,current,"children");
    _ini.get_entry(groupChildren ,current,"subgroups");
423

Jan Möbius's avatar
 
Jan Möbius committed
424
425
426
427
428
429
    // if we get a parent item, scan the tree for it or use the root node otherwise
    BaseObject* parentItem;
    QString parentName;
    if ( _ini.get_entry(parentName,current,"parent") ) {
      parentItem = PluginFunctions::objectRoot()->childExists(parentName);
      if ( parentItem == 0 )
430
431
432
433
434
435
        parentItem = PluginFunctions::objectRoot();
    } else
      parentItem = PluginFunctions::objectRoot();

    rootGroup << groupChildren;

Jan Möbius's avatar
 
Jan Möbius committed
436
437
    // check if this group already exists
    BaseObject* group =  PluginFunctions::objectRoot()->childExists( current );
438

Jan Möbius's avatar
 
Jan Möbius committed
439
440
    // group does not exist
    if ( !group ) {
441

Jan Möbius's avatar
 
Jan Möbius committed
442
      group = dynamic_cast< BaseObject* >( new GroupObject( current, dynamic_cast< GroupObject* >(parentItem ) ) );
443

Jan Möbius's avatar
 
Jan Möbius committed
444
445
446
      parentItem->appendChild(group);
      group->setParent(parentItem);
    }
447

Jan Möbius's avatar
 
Jan Möbius committed
448
449
450
451
452
453
454
455
456
457
    // process children
    for ( int i = 0 ; i < elementChildren.size() ; ++i ) {
      BaseObject* childItem =  PluginFunctions::objectRoot()->childExists( elementChildren[i] );
      if ( childItem ) {
        childItem->parent()->removeChild(childItem);
        childItem->setParent(group);
        group->appendChild(childItem);
      }
    }
  }
458
459

  emit updated_objects(-1);
Jan Möbius's avatar
 
Jan Möbius committed
460
461
462
}

void DataControlPlugin::saveIniFileOptions( INIFile& _ini ) {
463
464
465
  if ( !_ini.section_exists( "Groups" ) )
    _ini.add_section("Groups");

Jan Möbius's avatar
 
Jan Möbius committed
466
467
  std::queue< BaseObject* > children;
  children.push( PluginFunctions::objectRoot() );
468

Jan Möbius's avatar
 
Jan Möbius committed
469
  std::vector< BaseObject* > groups;
470

Jan Möbius's avatar
 
Jan Möbius committed
471
472
473
474
  // Get all groups from the tree
  while ( children.size() > 0 ) {
    BaseObject* item = children.front();
    children.pop();
475
476
477
478
479

    for ( int i = 0 ; i < item->childCount(); ++i )
      if ( item->child(i)->dataType(DATA_GROUP))
        children.push( item->child(i) );

Jan Möbius's avatar
 
Jan Möbius committed
480
481
482
    if ( item->dataType(DATA_GROUP) && (item != PluginFunctions::objectRoot() ) )
      groups.push_back(item);
  }
483

Jan Möbius's avatar
 
Jan Möbius committed
484
485
  // Names of all groups
  QStringList groupNames;
486

Jan Möbius's avatar
 
Jan Möbius committed
487
488
  // names of the primary groups
  QStringList rootGroup;
489

Jan Möbius's avatar
 
Jan Möbius committed
490
  for ( uint i = 0 ; i < groups.size() ; ++i ) {
491
492
493
494
495
    groupNames.push_back( groups[i]->name() );

    if ( !_ini.section_exists( groups[i]->name() ) )
      _ini.add_section(groups[i]->name());

Jan Möbius's avatar
 
Jan Möbius committed
496
    _ini.add_entry(groups[i]->name(),"groupname",groups[i]->name());
497
498

    // write the name of the parent
Jan Möbius's avatar
 
Jan Möbius committed
499
500
    if ( ( groups[i]->parent() != 0 ) && ( groups[i]->parent() != PluginFunctions::objectRoot() ) )
      _ini.add_entry(groups[i]->name(),"parent",groups[i]->parent()->name());
501

Jan Möbius's avatar
 
Jan Möbius committed
502
503
    if ( groups[i]->parent() == PluginFunctions::objectRoot() )
      rootGroup.push_back( groups[i]->name() );
504

Jan Möbius's avatar
 
Jan Möbius committed
505
506
507
508
509
510
511
512
513
    // Write a list of this groups children
    QStringList groupchildren;
    QStringList elementchildren;
    for ( int j = 0 ; j < groups[i]->childCount(); ++j ) {
      if  ( groups[i]->child(j)->dataType(DATA_GROUP) )
        groupchildren.push_back( groups[i]->child(j)->name() );
      else
        elementchildren.push_back( groups[i]->child(j)->name() );
    }
514

Jan Möbius's avatar
 
Jan Möbius committed
515
516
517
    _ini.add_entry(groups[i]->name(),"subgroups",groupchildren);
    _ini.add_entry(groups[i]->name(),"children",elementchildren);
  }
518

Jan Möbius's avatar
 
Jan Möbius committed
519
520
  // Write the list of group names to the file
  _ini.add_entry("Groups","groups",groupNames);
521

Jan Möbius's avatar
 
Jan Möbius committed
522
523
524
525
526
527
528
  // Write the primary group names to the file
  _ini.add_entry("Groups","rootGroup",rootGroup);
}


Q_EXPORT_PLUGIN2( datacontrolplugin , DataControlPlugin );