History

running script window treeview fully works

Thijs Wenker committed 11 years ago

Commit 8feb5101 parent 5a8e00f6 files · +161 −62Browse files

Showing the changes to interface/src/ScriptsModel.cpp (1 of 6 files). Show all

Unified · Split

interface/src/ScriptsModel.cpp+66−40
@@ -11,7 +11,6 @@ · 10 unmodified lines
1111 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
1212 //
1313
14−#include <typeinfo>
1514 #include <QUrl>
1615 #include <QUrlQuery>
1716 #include <QXmlStreamReader>
@@ -32,22 +31,21 @@ static const QString IS_TRUNCATED_NAME = "IsTruncated"; · 14 unmodified lines
3231 static const QString CONTAINER_NAME = "Contents";
3332 static const QString KEY_NAME = "Key";
3433
35−TreeNodeBase::TreeNodeBase(TreeNodeFolder* parent, TreeNodeType type) :
34+TreeNodeBase::TreeNodeBase(TreeNodeFolder* parent, const QString& name, TreeNodeType type) :
3635 _parent(parent),
36+ _name(name),
3737 _type(type) {
3838 };
3939
40−TreeNodeScript::TreeNodeScript(const QString& filename, const QString& fullPath, ScriptOrigin origin) :
41− TreeNodeBase(NULL, TREE_NODE_TYPE_SCRIPT),
42− _filename(filename),
40+TreeNodeScript::TreeNodeScript(const QString& localPath, const QString& fullPath, ScriptOrigin origin) :
41+ TreeNodeBase(NULL, localPath.split("/").last(), TREE_NODE_TYPE_SCRIPT),
42+ _localPath(localPath),
4343 _fullPath(fullPath),
44− _origin(origin)
45−{
44+ _origin(origin) {
4645 };
4746
4847 TreeNodeFolder::TreeNodeFolder(const QString& foldername, TreeNodeFolder* parent) :
49− TreeNodeBase(parent, TREE_NODE_TYPE_FOLDER),
50− _foldername(foldername) {
48+ TreeNodeBase(parent, foldername, TREE_NODE_TYPE_FOLDER) {
5149 };
5250
5351 ScriptsModel::ScriptsModel(QObject* parent) :
@@ -57,7 +55,6 @@ ScriptsModel::ScriptsModel(QObject* parent) : · 3 unmodified lines
5755 _fsWatcher(),
5856 _treeNodes()
5957 {
60−
6158 _localDirectory.setFilter(QDir::Files | QDir::Readable);
6259 _localDirectory.setNameFilters(QStringList("*.js"));
6360
@@ -70,46 +67,56 @@ ScriptsModel::ScriptsModel(QObject* parent) : · 6 unmodified lines
7067 reloadRemoteFiles();
7168 }
7269
70+TreeNodeBase* ScriptsModel::getTreeNodeFromIndex(const QModelIndex& index) const {
71+ if (index.isValid()) {
72+ return static_cast<TreeNodeBase*>(index.internalPointer());
73+ }
74+ return NULL;
75+}
76+
7377 QModelIndex ScriptsModel::index(int row, int column, const QModelIndex& parent) const {
74− return QModelIndex();
78+ if (row < 0 || column < 0) {
79+ return QModelIndex();
80+ }
81+ return createIndex(row, column, getFolderNodes(static_cast<TreeNodeFolder*>(getTreeNodeFromIndex(parent))).at(row));
7582 }
7683
7784 QModelIndex ScriptsModel::parent(const QModelIndex& child) const {
78− return QModelIndex();
85+ TreeNodeFolder* parent = (static_cast<TreeNodeBase*>(child.internalPointer()))->getParent();
86+ if (!parent) {
87+ return QModelIndex();
88+ }
89+ TreeNodeFolder* grandParent = parent->getParent();
90+ int row = getFolderNodes(grandParent).indexOf(parent);
91+ return createIndex(row, 0, parent);
7992 }
8093
8194 QVariant ScriptsModel::data(const QModelIndex& index, int role) const {
82− /*const QList<TreeNodeScript*>* files = NULL;
83− int row = 0;
84− bool isLocal = index.row() < _localFiles.size();
85− if (isLocal) {
86− files = &_localFiles;
87− row = index.row();
88− } else {
89− files = &_remoteFiles;
90− row = index.row() - _localFiles.size();
95+ TreeNodeBase* node = getTreeNodeFromIndex(index);
96+ if (node->getType() == TREE_NODE_TYPE_SCRIPT) {
97+ TreeNodeScript* script = static_cast<TreeNodeScript*>(node);
98+ if (role == Qt::DisplayRole) {
99+ return QVariant(script->getName() + (script->getOrigin() == SCRIPT_ORIGIN_LOCAL ? " (local)" : ""));
100+ } else if (role == ScriptPath) {
101+ return QVariant(script->getFullPath());
102+ }
103+ } else if (node->getType() == TREE_NODE_TYPE_FOLDER) {
104+ TreeNodeFolder* folder = static_cast<TreeNodeFolder*>(node);
105+ if (role == Qt::DisplayRole) {
106+ return QVariant(folder->getName());
107+ }
91108 }
92−
93− if (role == Qt::DisplayRole) {
94− return QVariant((*files)[row]->getFilename() + (isLocal ? " (local)" : ""));
95− } else if (role == ScriptPath) {
96− return QVariant((*files)[row]->getFullPath());
97− }*/
98109 return QVariant();
99110 }
100111
101112 int ScriptsModel::rowCount(const QModelIndex& parent) const {
102− if (parent.isValid()) {
103− return 0;
104− }
105− return 0;// _localFiles.length() + _remoteFiles.length();
113+ return getFolderNodes(static_cast<TreeNodeFolder*>(getTreeNodeFromIndex(parent))).count();
106114 }
107115
108116 int ScriptsModel::columnCount(const QModelIndex& parent) const {
109117 return 1;
110118 }
111119
112−
113120 void ScriptsModel::updateScriptsLocation(const QString& newPath) {
114121 _fsWatcher.removePath(_localDirectory.absolutePath());
115122
@@ -129,7 +136,9 @@ void ScriptsModel::reloadRemoteFiles() { · 13 unmodified lines
129136 _loadingScripts = true;
130137 for (int i = _treeNodes.size() - 1; i >= 0; i--) {
131138 TreeNodeBase* node = _treeNodes.at(i);
132− if (typeid(*node) == typeid(TreeNodeScript) && static_cast<TreeNodeScript*>(node)->getOrigin() == SCRIPT_ORIGIN_REMOTE) {
139+ if (node->getType() == TREE_NODE_TYPE_SCRIPT &&
140+ static_cast<TreeNodeScript*>(node)->getOrigin() == SCRIPT_ORIGIN_REMOTE)
141+ {
133142 delete node;
134143 _treeNodes.removeAt(i);
135144 }
@@ -229,7 +238,6 @@ void ScriptsModel::reloadLocalFiles() { · 93 unmodified lines
229238
230239 for (int i = _treeNodes.size() - 1; i >= 0; i--) {
231240 TreeNodeBase* node = _treeNodes.at(i);
232− qDebug() << "deleting local " << i << " " << typeid(*node).name();
233241 if (node->getType() == TREE_NODE_TYPE_SCRIPT &&
234242 static_cast<TreeNodeScript*>(node)->getOrigin() == SCRIPT_ORIGIN_LOCAL)
235243 {
@@ -251,7 +259,6 @@ void ScriptsModel::reloadLocalFiles() { · 15 unmodified lines
251259
252260 void ScriptsModel::rebuildTree() {
253261 for (int i = _treeNodes.size() - 1; i >= 0; i--) {
254−
255262 if (_treeNodes.at(i)->getType() == TREE_NODE_TYPE_FOLDER) {
256263 delete _treeNodes.at(i);
257264 _treeNodes.removeAt(i);
@@ -260,18 +267,37 @@ void ScriptsModel::rebuildTree() { · 2 unmodified lines
260267 QHash<QString, TreeNodeFolder*> folders;
261268 for (int i = 0; i < _treeNodes.size(); i++) {
262269 TreeNodeBase* node = _treeNodes.at(i);
263− qDebug() << "blup" << i << typeid(*node).name();
264− if (typeid(*node) == typeid(TreeNodeScript)) {
270+ if (node->getType() == TREE_NODE_TYPE_SCRIPT) {
265271 TreeNodeScript* script = static_cast<TreeNodeScript*>(node);
266272 TreeNodeFolder* parent = NULL;
267273 QString hash;
268− QStringList pathList = script->getFilename().split(tr("/"));
274+ QStringList pathList = script->getLocalPath().split(tr("/"));
275+ pathList.removeLast();
269276 QStringList::const_iterator pathIterator;
270277 for (pathIterator = pathList.constBegin(); pathIterator != pathList.constEnd(); ++pathIterator) {
271− hash.append("/" + *pathIterator);
272− qDebug() << hash;
278+ hash.append(*pathIterator + "/");
279+ if (!folders.contains(hash)) {
280+ folders[hash] = new TreeNodeFolder(*pathIterator, parent);
281+ }
282+ parent = folders[hash];
273283 }
284+ script->setParent(parent);
274285 }
275286 }
287+ QHash<QString, TreeNodeFolder*>::const_iterator folderIterator;
288+ for (folderIterator = folders.constBegin(); folderIterator != folders.constEnd(); ++folderIterator) {
289+ _treeNodes.append(*folderIterator);
290+ }
276291 folders.clear();
277292 }
293+
294+QList<TreeNodeBase*> ScriptsModel::getFolderNodes(TreeNodeFolder* parent) const {
295+ QList<TreeNodeBase*> result;
296+ for (int i = 0; i < _treeNodes.size(); i++) {
297+ TreeNodeBase* node = _treeNodes.at(i);
298+ if (node->getParent() == parent) {
299+ result.append(node);
300+ }
301+ }
302+ return result;
303+}