NCL Composer  0.1.5
 All Classes Functions Variables Pages
PerspectiveManager.cpp
1 /* Copyright (c) 2011 Telemidia/PUC-Rio.
2  * All rights reserved. This program and the accompanying materials
3  * are made available under the terms of the Eclipse Public License v1.0
4  * which accompanies this distribution, and is available at
5  * http://www.eclipse.org/legal/epl-v10.html
6  *
7  * Contributors:
8  * Telemidia/PUC-Rio - initial API and implementation
9  */
10 #include "PerspectiveManager.h"
11 #include "ui_PerspectiveManager.h"
12 
13 #include <QDebug>
14 #include <QAbstractItemModel>
15 #include <QMessageBox>
16 
17 #include <core/util/ComposerSettings.h>
18 using namespace composer::core::util;
19 
20 namespace composer {
21 namespace gui {
22 
23 PerspectiveManager::PerspectiveManager(QWidget *parent):
24  QDialog(parent),
25  ui(new Ui::PerpectiveManager())
26 {
27  ui->setupUi(this);
28 
29  this->behavior = PERSPEC_SAVE; // default behavior
30 
31  connect (ui->deleteButton, SIGNAL(clicked()),
32  this, SLOT(deleteSelectedPerspective()));
33 
34  connect ( ui->treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)),
35  this, SLOT(itemChanged(QTreeWidgetItem*, int)));
36 
37  GlobalSettings settings;
38  defaultPerspective = settings.value("default_perspective").
39  toString();
40 }
41 
43 {
44  delete ui;
45 }
46 
47 void PerspectiveManager::setBehavior(PERSPEC_BEHAVIOR behavior)
48 {
49  this->behavior = behavior;
50 }
51 
52 void PerspectiveManager::updateContent()
53 {
54  GlobalSettings settings;
55  settings.beginGroup("pluginslayout");
56  QStringList keys = settings.allKeys();
57  settings.endGroup();
58 
59  ui->treeWidget->clear();
60 
61  int i;
62  QTreeWidgetItem *item;
63 
64  internalChange = true;
65  if(behavior == PERSPEC_SAVE) // If the widget is saving a new perspective
66  {
67  for(i = 0; i < keys.size(); i++)
68  {
69  item = new QTreeWidgetItem(ui->treeWidget);
70  if(keys.at(i) == defaultPerspective)
71  item->setCheckState(0, Qt::Checked);
72  else
73  item->setCheckState(0, Qt::Unchecked);
74 
75  item->setText(1, keys.at(i));
76  item->setFlags(item->flags() | Qt::ItemIsEditable);
77  }
78 
79  item = new QTreeWidgetItem(ui->treeWidget);
80  item->setFlags(item->flags() | Qt::ItemIsEditable);
81  item->setCheckState(0, Qt::Unchecked);
82  item->setText(1, "New perspective...");
83  ui->treeWidget->setCurrentItem(item, 1,
84  QItemSelectionModel::SelectCurrent);
85 
86  ui->treeWidget->setEditTriggers(QAbstractItemView::AnyKeyPressed |
87  QAbstractItemView::DoubleClicked);
88 
89  this->setWindowTitle(tr("Saving a perspective"));
90  ui->deleteButton->setVisible(false);
91  }
92  else // If it is loading an already saved perspective:
93  {
94  for(i = 0; i < keys.size(); i++)
95  {
96  item = new QTreeWidgetItem(ui->treeWidget);
97  if(keys.at(i) == defaultPerspective)
98  item->setCheckState(0, Qt::Checked);
99  else
100  item->setCheckState(0, Qt::Unchecked);
101 
102  item->setText(1, keys.at(i));
103  item->setFlags(item->flags());
104  }
105 
106  this->setWindowTitle(tr("Reloading a perspective"));
107  ui->deleteButton->setVisible(true);
108  }
109  internalChange = false;
110 }
111 
112 void PerspectiveManager::showEvent(QShowEvent *evt)
113 {
114  QDialog::showEvent(evt);
115  updateContent();
116 }
117 
119 {
120  QList<QTreeWidgetItem*> items = ui->treeWidget->selectedItems();
121  if(items.size())
122  {
123  selectedName = items.at(0)->text(1);
124  QDialog::accept();
125  }
126  else
127  selectedName = "";
128 }
129 
130 void PerspectiveManager::itemChanged(QTreeWidgetItem *item, int col)
131 {
132  if(internalChange) return;
133 
134  internalChange = true;
135  if(col == 0) //changed the default
136  {
137  for(int i = 0; i < ui->treeWidget->topLevelItemCount(); i++)
138  ui->treeWidget->topLevelItem(i)->setCheckState(0, Qt::Unchecked);
139 
140  item->setCheckState(0, Qt::Checked);
141  this->defaultPerspective = item->text(1);
142  }
143  else
144  {
145  if(item->checkState(0) == Qt::Checked)
146  this->defaultPerspective = item->text(1);
147 
148  if(item->text(1) == "")
149  item->setText(1, "empty");
150  }
151  internalChange = false;
152 }
153 
155 {
156  return selectedName;
157 }
158 
160 {
161  return defaultPerspective;
162 }
163 
165 {
166  GlobalSettings settings;
167  settings.beginGroup("pluginslayout");
168  //TODO: When the name is empty ("") this remove all the perspectives.
169  settings.remove(name);
170  settings.endGroup();
171 }
172 
173 void PerspectiveManager::deleteSelectedPerspective()
174 {
175  QList<QTreeWidgetItem*> items = ui->treeWidget->selectedItems();
176  selectedName = items.at(0)->text(1);
177 
178  QMessageBox::StandardButton ret;
179  ret = QMessageBox::warning(this, tr("Deleting perspective"),
180  tr("Are you sure you want to delete the.\n"
181  "\"%1\" perspective ?").arg(selectedName),
182  QMessageBox::Yes | QMessageBox::No);
183 
184  if (ret == QMessageBox::Yes)
185  {
186  deletePerspective(selectedName);
187  updateContent();
188  }
189  else if (ret == QMessageBox::Cancel)
190  return;
191 }
192 
193 } } //end namespace