BackupPlugin.cc 16.4 KB
Newer Older
Jan Möbius's avatar
Jan Möbius committed
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-2014 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/>.                                       *
*                                                                            *
Jan Möbius's avatar
Jan Möbius committed
33
34
35
\*===========================================================================*/

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

43
#include "BackupPlugin.hh"
Matthias Möller's avatar
Matthias Möller committed
44
45
46
47
48
49
#if QT_VERSION >= 0x050000 
  #include <QtWidgets>
#else
  #include <QtGui>
#endif

Jan Möbius's avatar
 
Jan Möbius committed
50
51
52
53
#include <iostream>
#include <OpenFlipper/BasePlugin/PluginFunctions.hh>
#include <OpenFlipper/common/GlobalOptions.hh>

Dirk Wilden's avatar
Dirk Wilden committed
54
#include "GroupBackup.hh"
Jan Möbius's avatar
 
Jan Möbius committed
55

56
57
58
59
60
61
62
63
64
65
66
67
68
69
//-----------------------------------------------------------------------------
BackupPlugin::BackupPlugin():
backupMenu_(0),
backupsEnabledAction_(0),
undoMenuAction_(0),
redoMenuAction_(0),
undoToolAction_(0),
redoToolAction_(0),
undoContextAction_(0),
redoContextAction_(0)
{

}

Dirk Wilden's avatar
Dirk Wilden committed
70
//-----------------------------------------------------------------------------
Jan Möbius's avatar
 
Jan Möbius committed
71

Matthias Möller's avatar
Matthias Möller committed
72
73
74
75
76
77
78
79
void BackupPlugin::initializePlugin()
{
  int maxBackups = OpenFlipperSettings().value("BackupPlugin/MaxBackups",static_cast<unsigned>(globalBackup_.maxBackups())).toInt();
  globalBackup_.setMaxBackups(maxBackups);
}

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

Jan Möbius's avatar
 
Jan Möbius committed
80
81
82
83
84
85
void BackupPlugin::pluginsInitialized() {

  // Create Backup menu
  emit getMenubarMenu(tr("&Backup"), backupMenu_, true );

  if ( OpenFlipper::Options::gui() ) {
Dirk Wilden's avatar
Dirk Wilden committed
86
    //construct the menu
Jan Möbius's avatar
 
Jan Möbius committed
87
88
89
    backupsEnabledAction_ = new QAction("Backups Enabled",0);
    backupsEnabledAction_->setCheckable(true);
    connect (backupsEnabledAction_, SIGNAL(triggered(bool)), this, SLOT(slotEnableDisableBackups()) );
90

Dirk Wilden's avatar
Dirk Wilden committed
91
92
93
94
    undoMenuAction_ = new QAction(tr("&Undo"), this);
    undoMenuAction_->setEnabled(false);
    undoMenuAction_->setStatusTip(tr("Undo the last action."));
    undoMenuAction_->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"edit-undo.png") );
95
    connect(undoMenuAction_, SIGNAL(triggered()), this, SIGNAL( undo() ) );
96

Dirk Wilden's avatar
Dirk Wilden committed
97
98
99
100
    redoMenuAction_ = new QAction(tr("&Redo"), this);
    redoMenuAction_->setEnabled(false);
    redoMenuAction_->setStatusTip(tr("Redo the last action"));
    redoMenuAction_->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"edit-redo.png") );
101
    connect(redoMenuAction_, SIGNAL(triggered()), this, SIGNAL( redo() ) );
Dirk Wilden's avatar
Dirk Wilden committed
102
103
104
105
106

    backupMenu_->addAction(undoMenuAction_);
    backupMenu_->addAction(redoMenuAction_);
    backupMenu_->addSeparator();
    backupMenu_->addAction(backupsEnabledAction_);
Jan Möbius's avatar
 
Jan Möbius committed
107
108
109

    // Add a backup Toolbar
    QToolBar* toolbar = new QToolBar("Backup Toolbar");
110

Jan Möbius's avatar
 
Jan Möbius committed
111
    //Undo
Dirk Wilden's avatar
Dirk Wilden committed
112
113
114
115
    undoToolAction_ = new QAction(tr("&Undo"), this);
    undoToolAction_->setEnabled(false);
    undoToolAction_->setStatusTip(tr("Undo the last action."));
    undoToolAction_->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"edit-undo.png") );
116
    connect(undoToolAction_, SIGNAL(triggered()), this, SIGNAL( undo() ) );
Dirk Wilden's avatar
Dirk Wilden committed
117
    toolbar->addAction(undoToolAction_);
118

Jan Möbius's avatar
 
Jan Möbius committed
119
    //Redo
Dirk Wilden's avatar
Dirk Wilden committed
120
121
122
123
    redoToolAction_ = new QAction(tr("&Redo"), this);
    redoToolAction_->setEnabled(false);
    redoToolAction_->setStatusTip(tr("Redo the last action"));
    redoToolAction_->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"edit-redo.png") );
124
    connect(redoToolAction_, SIGNAL(triggered()), this, SIGNAL( redo() ) );
Dirk Wilden's avatar
Dirk Wilden committed
125
    toolbar->addAction(redoToolAction_);
126

Jan Möbius's avatar
 
Jan Möbius committed
127
    emit addToolbar( toolbar );
128

Jan Möbius's avatar
 
Jan Möbius committed
129
130
131
    //the release event does not contain the modifier
    emit registerKey(Qt::Key_Z,  Qt::ControlModifier, tr("Undo Action"));
    emit registerKey(Qt::Key_Z, (Qt::ControlModifier | Qt::ShiftModifier),   tr("Redo Action"));
132

Dirk Wilden's avatar
Dirk Wilden committed
133
134
135
136
137
138
139
140
141
142
143
144
145
146
    //add actions for the context menu
    undoContextAction_ = new QAction(tr("&Undo"), this);
    undoContextAction_->setEnabled(false);
    undoContextAction_->setStatusTip(tr("Undo the last action."));
    undoContextAction_->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"edit-undo.png") );
    connect(undoContextAction_, SIGNAL(triggered()), this, SLOT(slotObjectUndo()) );
    emit addContextMenuItem(undoContextAction_, DATA_ALL, CONTEXTOBJECTMENU);

    redoContextAction_ = new QAction(tr("&Redo"), this);
    redoContextAction_->setEnabled(false);
    redoContextAction_->setStatusTip(tr("Redo the last action"));
    redoContextAction_->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"edit-redo.png") );
    connect(redoContextAction_, SIGNAL(triggered()), this, SLOT(slotObjectRedo()) );
    emit addContextMenuItem(redoContextAction_, DATA_ALL, CONTEXTOBJECTMENU);
Matthias Möller's avatar
Matthias Möller committed
147
148
149
150
151

    //update option widget since it is created earlier
    if (maxBackupSpinBox_)
      maxBackupSpinBox_->setValue(globalBackup_.maxBackups());

Jan Möbius's avatar
 
Jan Möbius committed
152
  }
153
154
155
156
157
158

//createBackup(int _objectId, QString _name, UpdateType _type= UPDATE_ALL)
  emit setSlotDescription("createBackup(int,QString)", tr("Creates a backup which can be restored via undo."),
                               QString("objectId,name").split(","), QString("Id of the object,name of the backup").split(","));
  emit setSlotDescription("createBackup(int,QString,UpdateType)", tr("Creates a backup which can be restored via undo."),
                             QString("objectId,name,type").split(","), QString("Id of the object,name of the backup,updatetypes which are changed").split(","));
Jan Möbius's avatar
 
Jan Möbius committed
159
160
}

Dirk Wilden's avatar
Dirk Wilden committed
161
162
//-----------------------------------------------------------------------------

Jan Möbius's avatar
 
Jan Möbius committed
163
void BackupPlugin::slotAllCleared(){
Dirk Wilden's avatar
Dirk Wilden committed
164
165
  globalBackup_.clear();
}
Jan Möbius's avatar
 
Jan Möbius committed
166

Dirk Wilden's avatar
Dirk Wilden committed
167
168
169
//-----------------------------------------------------------------------------

void BackupPlugin::updateButtons() {
170

Dirk Wilden's avatar
Dirk Wilden committed
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
  if ( globalBackup_.undoAvailable() ){
    undoMenuAction_->setText( tr("Undo '%1'").arg( globalBackup_.undoName() ) );
    undoMenuAction_->setEnabled(true);
    undoToolAction_->setText( tr("Undo '%1'").arg( globalBackup_.undoName() ) );
    undoToolAction_->setEnabled(true);
  } else {
    undoMenuAction_->setText( tr("Undo") );
    undoMenuAction_->setEnabled(false);
    undoToolAction_->setText( tr("Undo") );
    undoToolAction_->setEnabled(false);
  }

  if ( globalBackup_.redoAvailable() ){
    redoMenuAction_->setText( tr("Redo '%1'").arg( globalBackup_.redoName() ) );
    redoMenuAction_->setEnabled(true);
    redoToolAction_->setText( tr("Redo '%1'").arg( globalBackup_.redoName() ) );
    redoToolAction_->setEnabled(true);
  } else {
    redoMenuAction_->setText( tr("Redo") );
    redoMenuAction_->setEnabled(false);
    redoToolAction_->setText( tr("Redo") );
    redoToolAction_->setEnabled(false);
  }
Jan Möbius's avatar
 
Jan Möbius committed
194

Dirk Wilden's avatar
Dirk Wilden committed
195
  backupsEnabledAction_->setChecked( OpenFlipper::Options::backupEnabled() );
Jan Möbius's avatar
 
Jan Möbius committed
196
197
}

Dirk Wilden's avatar
Dirk Wilden committed
198
199
//-----------------------------------------------------------------------------

Jan Möbius's avatar
 
Jan Möbius committed
200
201
202
203
void BackupPlugin::slotEnableDisableBackups() {
  OpenFlipper::Options::enableBackup(backupsEnabledAction_->isChecked());
}

Dirk Wilden's avatar
Dirk Wilden committed
204
205
//-----------------------------------------------------------------------------

Jan Möbius's avatar
 
Jan Möbius committed
206
207
208
209
210
void BackupPlugin::slotKeyEvent( QKeyEvent* _event ){
   switch (_event->key())
   {
      case Qt::Key_Z :
         if ( _event->modifiers() == Qt::ControlModifier )
Dirk Wilden's avatar
Dirk Wilden committed
211
           emit undo();
Jan Möbius's avatar
 
Jan Möbius committed
212
         else if ( _event->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier) )
Dirk Wilden's avatar
Dirk Wilden committed
213
           emit redo();
Jan Möbius's avatar
 
Jan Möbius committed
214
215
216
217
218
219
         break;
      default:
         break;
  }
}

Dirk Wilden's avatar
Dirk Wilden committed
220
221
//-----------------------------------------------------------------------------

Jan Möbius's avatar
 
Jan Möbius committed
222
223
224
void BackupPlugin::objectDeleted(int _objectid) {
}

Dirk Wilden's avatar
Dirk Wilden committed
225
//-----------------------------------------------------------------------------
Jan Möbius's avatar
 
Jan Möbius committed
226

Dirk Wilden's avatar
Dirk Wilden committed
227
void BackupPlugin::slotUpdateContextMenu( int _objectId ){
Jan Möbius's avatar
 
Jan Möbius committed
228

Dirk Wilden's avatar
Dirk Wilden committed
229
230
231
232
233
  //disable everything
  undoContextAction_->setText( tr("Undo") );
  undoContextAction_->setEnabled(false);
  redoContextAction_->setText( tr("Redo") );
  redoContextAction_->setEnabled(false);
Jan Möbius's avatar
 
Jan Möbius committed
234

Dirk Wilden's avatar
Dirk Wilden committed
235
236
237
  //get backup data
  BaseObjectData* object = 0;
  PluginFunctions::getObject(_objectId, object);
Jan Möbius's avatar
 
Jan Möbius committed
238

Dirk Wilden's avatar
Dirk Wilden committed
239
  if ( object != 0 ){
Jan Möbius's avatar
 
Jan Möbius committed
240

Dirk Wilden's avatar
Dirk Wilden committed
241
    if ( object->hasObjectData( OBJECT_BACKUPS ) ){
Jan Möbius's avatar
Jan Möbius committed
242
243
244

      //get backup object data
      BackupData* backupData = dynamic_cast< BackupData* >(object->objectData(OBJECT_BACKUPS));
Jan Möbius's avatar
 
Jan Möbius committed
245

Dirk Wilden's avatar
Dirk Wilden committed
246
247
248
249
250
      if ( backupData->undoAvailable() ){
        undoContextAction_->setData(_objectId);
        undoContextAction_->setText( tr("Undo '%1'").arg( backupData->undoName() ) );
        undoContextAction_->setEnabled( !backupData->undoBlocked() );
      }
Jan Möbius's avatar
 
Jan Möbius committed
251

Dirk Wilden's avatar
Dirk Wilden committed
252
253
254
255
      if ( backupData->redoAvailable() ){
        redoContextAction_->setData(_objectId);
        redoContextAction_->setText( tr("Redo '%1'").arg( backupData->redoName() ) );
        redoContextAction_->setEnabled( !backupData->redoBlocked() );
Jan Möbius's avatar
 
Jan Möbius committed
256
257
258
      }
    }
  }
Dirk Wilden's avatar
Dirk Wilden committed
259

Jan Möbius's avatar
 
Jan Möbius committed
260
261
}

Dirk Wilden's avatar
Dirk Wilden committed
262
//-----------------------------------------------------------------------------
Jan Möbius's avatar
 
Jan Möbius committed
263

Dirk Wilden's avatar
Dirk Wilden committed
264
void BackupPlugin::slotObjectUndo(){
265

Dirk Wilden's avatar
Dirk Wilden committed
266
267
  int id = undoContextAction_->data().toInt();
  emit undo(id);
Jan Möbius's avatar
 
Jan Möbius committed
268
269
}

Dirk Wilden's avatar
Dirk Wilden committed
270
//-----------------------------------------------------------------------------
Jan Möbius's avatar
 
Jan Möbius committed
271

Dirk Wilden's avatar
Dirk Wilden committed
272
void BackupPlugin::slotObjectRedo(){
273

Dirk Wilden's avatar
Dirk Wilden committed
274
275
276
  int id = undoContextAction_->data().toInt();
  emit redo(id);
}
Jan Möbius's avatar
 
Jan Möbius committed
277

Dirk Wilden's avatar
Dirk Wilden committed
278
//-----------------------------------------------------------------------------
Jan Möbius's avatar
 
Jan Möbius committed
279

Dirk Wilden's avatar
Dirk Wilden committed
280
void BackupPlugin::slotCreateBackup( int _objectid, QString _name, UpdateType _type){
281

Dirk Wilden's avatar
Dirk Wilden committed
282
283
  if ( !OpenFlipper::Options::backupEnabled() )
    return;
Jan Möbius's avatar
 
Jan Möbius committed
284

Dirk Wilden's avatar
Dirk Wilden committed
285
  BaseObjectData* object;
Jan Möbius's avatar
 
Jan Möbius committed
286

Dirk Wilden's avatar
Dirk Wilden committed
287
288
289
290
  if ( !PluginFunctions::getObject(_objectid,object) ){
    emit log(LOGWARN,"Unable to find backup object with id " + QString::number(_objectid));
    return;
  }
Jan Möbius's avatar
 
Jan Möbius committed
291

Dirk Wilden's avatar
Dirk Wilden committed
292
293
  //tell TypePlugin to Backup
  emit generateBackup( _objectid, _name, _type );
Jan Möbius's avatar
 
Jan Möbius committed
294

Dirk Wilden's avatar
Dirk Wilden committed
295
296
297
  //add global backup
  IdList groupIds;
  groupIds.push_back( _objectid );
Jan Möbius's avatar
 
Jan Möbius committed
298

Dirk Wilden's avatar
Dirk Wilden committed
299
  bool skipBackup = false;
Jan Möbius's avatar
 
Jan Möbius committed
300

Dirk Wilden's avatar
Dirk Wilden committed
301
302
303
  if ( globalBackup_.undoAvailable() ){
    //skip 'Original Object' Backups in global view
    BackupData* backupData = dynamic_cast< BackupData* >(object->objectData(OBJECT_BACKUPS));
Jan Möbius's avatar
 
Jan Möbius committed
304

Dirk Wilden's avatar
Dirk Wilden committed
305
306
307
    if ( backupData != 0 )
      skipBackup = !backupData->undoAvailable();
  }
Jan Möbius's avatar
 
Jan Möbius committed
308

Dirk Wilden's avatar
Dirk Wilden committed
309
310
311
312
  if ( !skipBackup ){
    GroupBackup* backup = new GroupBackup(groupIds, _name);
    globalBackup_.storeBackup( backup );
  }
Jan Möbius's avatar
 
Jan Möbius committed
313

Dirk Wilden's avatar
Dirk Wilden committed
314
315
316
  updateButtons();
  emit log(LOGOUT,"Created backup for " + QString::number(_objectid)+ " , Name : '" + _name + "'" );
}
Jan Möbius's avatar
 
Jan Möbius committed
317

Dirk Wilden's avatar
Dirk Wilden committed
318
//-----------------------------------------------------------------------------
Jan Möbius's avatar
 
Jan Möbius committed
319

Dirk Wilden's avatar
Dirk Wilden committed
320
void BackupPlugin::slotCreateBackup( IdList _objectids , QString _name, std::vector<UpdateType> _types){
Jan Möbius's avatar
 
Jan Möbius committed
321

Dirk Wilden's avatar
Dirk Wilden committed
322
323
  if ( !OpenFlipper::Options::backupEnabled() )
    return;
Jan Möbius's avatar
 
Jan Möbius committed
324

Dirk Wilden's avatar
Dirk Wilden committed
325
  IdList groupIds;
326

Dirk Wilden's avatar
Dirk Wilden committed
327
328
  if ( _objectids.size() != _types.size() ){
    emit log(LOGWARN,"Unable to create backup sizes of ids and updateTypes do not match!");
Jan Möbius's avatar
 
Jan Möbius committed
329
330
331
    return;
  }

Dirk Wilden's avatar
Dirk Wilden committed
332
333
  //generate backups on all objects
  for (unsigned int i=0; i < _objectids.size(); ++i){
Jan Möbius's avatar
 
Jan Möbius committed
334

Dirk Wilden's avatar
Dirk Wilden committed
335
    BaseObjectData* object;
Jan Möbius's avatar
 
Jan Möbius committed
336

Dirk Wilden's avatar
Dirk Wilden committed
337
338
339
340
    if ( !PluginFunctions::getObject(_objectids[i],object) ){
      emit log(LOGWARN,"Unable to find backup object with id " + QString::number(_objectids[i]));
      continue;
    }
Jan Möbius's avatar
 
Jan Möbius committed
341

Dirk Wilden's avatar
Dirk Wilden committed
342
343
344
345
    //tell TypePlugin to generate a backup
    emit generateBackup( _objectids[i], _name, _types[i] );
    groupIds.push_back(  _objectids[i] );
  }
Jan Möbius's avatar
 
Jan Möbius committed
346

Dirk Wilden's avatar
Dirk Wilden committed
347
  //add global backup
Jan Möbius's avatar
Typo    
Jan Möbius committed
348
  if ( ! groupIds.empty() ){
349

Dirk Wilden's avatar
Dirk Wilden committed
350
351
    GroupBackup* backup = new GroupBackup(groupIds, _name);
    globalBackup_.storeBackup( backup );
Jan Möbius's avatar
 
Jan Möbius committed
352

Dirk Wilden's avatar
Dirk Wilden committed
353
354
    updateButtons();
    emit log(LOGOUT,"Created grouped backup, Name : '" + _name + "'" );
Jan Möbius's avatar
 
Jan Möbius committed
355
356
357
  }
}

Dirk Wilden's avatar
Dirk Wilden committed
358
//-----------------------------------------------------------------------------
359

Dirk Wilden's avatar
Dirk Wilden committed
360
void BackupPlugin::slotUndo(int _objectid){
361

362
  emit aboutToRestore(_objectid);
Dirk Wilden's avatar
Dirk Wilden committed
363
  globalBackup_.undo(_objectid);
364
  emit restored(_objectid);
Dirk Wilden's avatar
Dirk Wilden committed
365
  emit updatedObject(_objectid, UPDATE_ALL);
366

Dirk Wilden's avatar
Dirk Wilden committed
367
  updateButtons();
Jan Möbius's avatar
 
Jan Möbius committed
368
369
}

Dirk Wilden's avatar
Dirk Wilden committed
370
//-----------------------------------------------------------------------------
Jan Möbius's avatar
 
Jan Möbius committed
371

Dirk Wilden's avatar
Dirk Wilden committed
372
void BackupPlugin::slotUndo(){
373
374
  GroupBackup* group = dynamic_cast< GroupBackup* >( globalBackup_.currentState() );

Isaak Lim's avatar
Isaak Lim committed
375
376
377
378
379
  if (group) {
    IdList ids = group->objectIDs();
    IdList::const_iterator it, end;
    for (it = ids.begin(), end = ids.end(); it != end; ++it)
      emit aboutToRestore(*it);
380

Isaak Lim's avatar
Isaak Lim committed
381
    globalBackup_.undo();
Jan Möbius's avatar
 
Jan Möbius committed
382

Dirk Wilden's avatar
Dirk Wilden committed
383
384
    for (unsigned int i=0; i < group->objectIDs().size(); i++)
      emit updatedObject(group->objectIDs()[i], UPDATE_ALL);
Jan Möbius's avatar
 
Jan Möbius committed
385

Isaak Lim's avatar
Isaak Lim committed
386
387
388
    updateButtons();
  } else
    emit log(LOGWARN,"Unable to find the current GroupBackup");
Dirk Wilden's avatar
Dirk Wilden committed
389
}
Jan Möbius's avatar
 
Jan Möbius committed
390

Dirk Wilden's avatar
Dirk Wilden committed
391
//-----------------------------------------------------------------------------
Jan Möbius's avatar
 
Jan Möbius committed
392

Dirk Wilden's avatar
Dirk Wilden committed
393
void BackupPlugin::slotRedo(int _objectid){
Jan Möbius's avatar
 
Jan Möbius committed
394

395
  emit aboutToRestore(_objectid);
Dirk Wilden's avatar
Dirk Wilden committed
396
  globalBackup_.redo(_objectid);
397
  emit restored(_objectid);
Dirk Wilden's avatar
Dirk Wilden committed
398
  emit updatedObject(_objectid, UPDATE_ALL);
Jan Möbius's avatar
 
Jan Möbius committed
399

Dirk Wilden's avatar
Dirk Wilden committed
400
  updateButtons();
Jan Möbius's avatar
 
Jan Möbius committed
401
402
}

Dirk Wilden's avatar
Dirk Wilden committed
403
//-----------------------------------------------------------------------------
Jan Möbius's avatar
 
Jan Möbius committed
404

Dirk Wilden's avatar
Dirk Wilden committed
405
406
void BackupPlugin::slotRedo(){
  globalBackup_.redo();
Jan Möbius's avatar
 
Jan Möbius committed
407

Dirk Wilden's avatar
Dirk Wilden committed
408
  GroupBackup* group = dynamic_cast< GroupBackup* >( globalBackup_.currentState() );
Jan Möbius's avatar
 
Jan Möbius committed
409

Dirk Wilden's avatar
Dirk Wilden committed
410
411
412
  if ( group != 0)
    for (unsigned int i=0; i < group->objectIDs().size(); i++)
      emit updatedObject(group->objectIDs()[i], UPDATE_ALL);
Jan Möbius's avatar
 
Jan Möbius committed
413

Dirk Wilden's avatar
Dirk Wilden committed
414
  updateButtons();
Jan Möbius's avatar
 
Jan Möbius committed
415
416
}

Dirk Wilden's avatar
Dirk Wilden committed
417
//-----------------------------------------------------------------------------
Jan Möbius's avatar
 
Jan Möbius committed
418

419
420
421
422
423
424
425
void BackupPlugin::createBackup(int _objectId, QString _name, UpdateType _type)
{
  slotCreateBackup(_objectId,_name,_type);
}

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

Matthias Möller's avatar
Matthias Möller committed
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
bool BackupPlugin::initializeOptionsWidget(QWidget*& _widget)
{
  QLabel* maxBackupLabel = new QLabel();
  maxBackupLabel->setText(tr("Max. saved backups: "));
  maxBackupSpinBox_ = new QSpinBox();
  maxBackupSpinBox_->setValue(globalBackup_.maxBackups());
  maxBackupSpinBox_->setRange(0,100);

  QHBoxLayout* layout = new QHBoxLayout();
  layout->addWidget(maxBackupLabel);
  layout->addWidget(maxBackupSpinBox_);

  QWidget* baseWidget = new QWidget();
  baseWidget->setLayout(layout);
  _widget = baseWidget;

  return true;
}

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

void BackupPlugin::applyOptions()
{
  int maxBackups = maxBackupSpinBox_->value();
  globalBackup_.setMaxBackups(maxBackups);
  OpenFlipperSettings().setValue("BackupPlugin/MaxBackups", maxBackups);
}

Matthias Möller's avatar
Matthias Möller committed
454
#if QT_VERSION < 0x050000
Jan Möbius's avatar
 
Jan Möbius committed
455
Q_EXPORT_PLUGIN2( backupplugin , BackupPlugin );
Matthias Möller's avatar
Matthias Möller committed
456
#endif
Jan Möbius's avatar
 
Jan Möbius committed
457