summaryrefslogtreecommitdiff
path: root/src/frontEnd/ProjectExplorer.py
diff options
context:
space:
mode:
authorkomalsheth2362015-05-05 17:42:16 +0530
committerkomalsheth2362015-05-05 17:42:16 +0530
commita903ba510fca71c308c0268d3c99f98192dc95c0 (patch)
tree29cf1aefda7da653ce64d723b86b09b2dfd66c6e /src/frontEnd/ProjectExplorer.py
parent4140d1931e819f5a1ba71dbe306847a564b581e6 (diff)
downloadeSim-a903ba510fca71c308c0268d3c99f98192dc95c0.tar.gz
eSim-a903ba510fca71c308c0268d3c99f98192dc95c0.tar.bz2
eSim-a903ba510fca71c308c0268d3c99f98192dc95c0.zip
Project Explorer Completed
Diffstat (limited to 'src/frontEnd/ProjectExplorer.py')
-rw-r--r--[-rwxr-xr-x]src/frontEnd/ProjectExplorer.py304
1 files changed, 257 insertions, 47 deletions
diff --git a/src/frontEnd/ProjectExplorer.py b/src/frontEnd/ProjectExplorer.py
index 82c740fa..a95986b1 100755..100644
--- a/src/frontEnd/ProjectExplorer.py
+++ b/src/frontEnd/ProjectExplorer.py
@@ -1,68 +1,271 @@
-import sys
-from PyQt4 import QtGui,QtCore
+from PyQt4 import QtCore, QtGui
from configuration.Appconfig import Appconfig
+import os
+import json
+
+class Node(object):
+
+ def __init__(self, name, parent=None):
+
+ self._name = name
+ self._children = []
+ self._parent = parent
+
+ if parent is not None:
+ parent.addChild(self)
+
+ def typeInfo(self):
+ return self._typeInfo
+
+ def settypeInfo(self,typeInfo):
+ self._typeInfo = typeInfo
+
+ def addChild(self, child):
+ self._children.append(child)
+
+ def name(self):
+ return self._name
+
+ def setName(self, name):
+ self._name = name
+
+ def child(self, row):
+ return self._children[row]
+
+ def childCount(self):
+ return len(self._children)
+
+ def parent(self):
+ return self._parent
+
+ def row(self):
+ if self._parent is not None:
+ return self._parent._children.index(self)
+
+
+class SceneGraphModel(QtCore.QAbstractItemModel):
+
+ """INPUTS: Node, QObject"""
+ def __init__(self, root, parent=None):
+ super(SceneGraphModel, self).__init__(parent)
+ self._rootNode = root
+
+ """INPUTS: QModelIndex"""
+ """OUTPUT: int"""
+ def rowCount(self, parent):
+ if not parent.isValid():
+ parentNode = self._rootNode
+ else:
+ parentNode = parent.internalPointer()
+
+ return parentNode.childCount()
+
+ """INPUTS: QModelIndex"""
+ """OUTPUT: int"""
+ def columnCount(self, parent):
+ return 1
+
+ """INPUTS: QModelIndex, int"""
+ """OUTPUT: QVariant, strings are cast to QString which is a QVariant"""
+ def data(self, index, role):
+
+ if not index.isValid():
+ return None
+
+ node = index.internalPointer()
+
+ if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole:
+ if index.column() == 0:
+ return node.name()
+ else:
+ return node.typeInfo()
+
+ if role == QtCore.Qt.DecorationRole:
+ if index.column() == 0:
+ typeInfo = node.typeInfo()
+
+ if typeInfo == "DIRECTORY":
+ return QtGui.QIcon(QtGui.QPixmap("../images/default.png"))
+
+ if typeInfo == "FILE":
+ return QtGui.QIcon(QtGui.QPixmap("../images/default.png"))
+
+
+ """INPUTS: QModelIndex, QVariant, int (flag)"""
+ def setData(self, index, value, role=QtCore.Qt.EditRole):
+
+ if index.isValid():
+
+ if role == QtCore.Qt.EditRole:
+
+ node = index.internalPointer()
+ node.setName(value)
+
+ return True
+ return False
+
+
+ """INPUTS: int, Qt::Orientation, int"""
+ """OUTPUT: QVariant, strings are cast to QString which is a QVariant"""
+ def headerData(self, section, orientation, role):
+ if role == QtCore.Qt.DisplayRole:
+ if section == 0:
+ return "Project Explorer"
+ else:
+ return "FilePath"
+
+ """INPUTS: QModelIndex"""
+ """OUTPUT: int (flag)"""
+ def flags(self, index):
+ return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
+
+ """INPUTS: QModelIndex"""
+ """OUTPUT: QModelIndex"""
+ """Should return the parent of the node with the given QModelIndex"""
+ def parent(self, index):
+
+ node = self.getNode(index)
+ parentNode = node.parent()
+
+ if parentNode == self._rootNode:
+ return QtCore.QModelIndex()
+
+ return self.createIndex(parentNode.row(), 0, parentNode)
+
+ """INPUTS: int, int, QModelIndex"""
+ """OUTPUT: QModelIndex"""
+ """Should return a QModelIndex that corresponds to the given row, column and parent node"""
+ def index(self, row, column, parent):
+
+ parentNode = self.getNode(parent)
+
+ childItem = parentNode.child(row)
+
+
+ if childItem:
+ return self.createIndex(row, column, childItem)
+ else:
+ return QtCore.QModelIndex()
+
+
+ """CUSTOM"""
+ """INPUTS: QModelIndex"""
+ def getNode(self, index):
+ if index.isValid():
+ node = index.internalPointer()
+ if node:
+ return node
+
+ return self._rootNode
+
+
class ProjectExplorer(QtGui.QWidget):
- """
- This Class create the project explorer windows of eSim-Workspace
- """
def __init__(self,parent=None):
QtGui.QWidget.__init__(self)
- #Creating object of AppConfig
+
+ returnwidget = self.maketree()
+ returnwidget.setStyleSheet("""
+ .QWidget {
+ border: 3px solid gray;
+ border-radius: 40px;
+ background-color:white;
+ }
+ """)
+
+ def maketree(self):
self.obj_appconfig = Appconfig()
+ self.root = Node("Projects")
+ currentpath= self.obj_appconfig.current_project["ProjectName"]
+ if currentpath == None:
+ pass
+ else:
+ self.children =[]
+ for dirct, subdir, files in os.walk(currentpath):
+ dirlist = dirct.split(os.sep)
+ self.parentof = dirlist[-1]
+ self.obj_appconfig.project_explorer[dirct]= files
+ json.dump(self.obj_appconfig.project_explorer, open(self.obj_appconfig.dictPath,'w'))
- self.startpath = self.obj_appconfig.default_workspace["workspace"]
+ for item, value in self.obj_appconfig.project_explorer.items():
+ os.path.join(item)
+ pathlist= item.split(os.sep)
+ parentnode = Node(pathlist[-1], self.root)
+ parentnode.settypeInfo(item)
+ for projFiles in value:
+ childnode = Node(projFiles, parentnode)
+ childnode.settypeInfo (item+ '/' + projFiles)
- self.view = QtGui.QTreeView()
-
- self.grid= QtGui.QGridLayout()
- self.model = QtGui.QFileSystemModel()
+ self.model = SceneGraphModel(self.root)
- self.view.setModel(self.model)
- self.view.setRootIndex(self.model.setRootPath(self.startpath))
- self.view.setHeaderHidden(True)
- self.view.hideColumn(1)
- self.view.hideColumn(2)
- self.view.hideColumn(3)
-
- self.view.doubleClicked.connect(self.on_clicked)
- self.grid.addWidget(self.view)
+ self.treeView = QtGui.QTreeView()
+ self.treeView.doubleClicked.connect(self.openProject)
+
+ self.treeView.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
+ self.treeView.customContextMenuRequested.connect(self.openMenu)
+ self.treeView.show()
+
+ self.treeView.setModel(self.model)
+ self.treeView.setStyleSheet("""
+ .QWidget {
+ border: 3px solid gray;
+ border-radius: 40px;
+ background-color:white;
+ }
+ """)
+ return self.treeView
+
+ def openMenu(self, position):
+
+ indexes = self.treeView.selectedIndexes()
+ if len(indexes) > 0:
+ level = 0
+ index = indexes[0]
+ while index.parent().isValid():
+ index = index.parent()
+ level += 1
- self.setLayout(self.grid)
- self.show()
+ menu = QtGui.QMenu()
+ if level == 0:
+ deleteproject = menu.addAction(self.tr("Remove Project"))
+ deleteproject.triggered.connect(self.removeProject)
+ elif level == 1:
+ openfile = menu.addAction(self.tr("Open"))
+ openfile.triggered.connect(self.openProject)
- def on_clicked(self,index):
-
- self.indexItem = self.model.index(index.row(), 0, index.parent())
+ menu.exec_(self.treeView.viewport().mapToGlobal(position))
+
+ def openProject(self):
+ self.indexItem =self.treeView.currentIndex()
+ filename= self.indexItem.data().toString()
+ self.filePath= self.indexItem.sibling(self.indexItem.row(), 1).data().toString()
self.textwindow = QtGui.QWidget()
+ self.textwindow.setMinimumSize(600, 500)
self.text = QtGui.QTextEdit()
+ #self.text.setMaximumSize(580, 450)
self.save = QtGui.QPushButton('Save and Exit')
self.save.setDisabled(True)
self.windowgrid = QtGui.QGridLayout()
-
- self.filePath = self.model.filePath(self.indexItem)
-
-
- self.fopen = open(self.filePath, 'r')
- lines = self.fopen.readlines()
- for line in lines:
- self.text.append(line)
-
- QtCore.QObject.connect(self.text,QtCore.SIGNAL("textChanged()"), self.enable_save)
- splitter_filelist = QtGui.QSplitter()
- splitter_filelist.setOrientation(QtCore.Qt.Vertical)
-
- vbox_main = QtGui.QVBoxLayout(self.textwindow)
- vbox_main.addWidget(splitter_filelist)
- vbox_main.addWidget(self.text)
- vbox_main.addWidget(self.save)
- self.save.clicked.connect(self.save_data)
- #self.connect(exit,QtCore.SIGNAL('close()'), self.onQuit)
-
- self.textwindow.show()
+ if (os.path.isfile(str(self.filePath)))== True:
+ self.fopen = open(str(self.filePath), 'r')
+ lines = self.fopen.readlines()
+ for line in lines:
+ self.text.append(line)
+ QtCore.QObject.connect(self.text,QtCore.SIGNAL("textChanged()"), self.enable_save)
+
+ vbox_main = QtGui.QVBoxLayout(self.textwindow)
+ vbox_main.addWidget(self.text)
+ vbox_main.addWidget(self.save)
+ self.save.clicked.connect(self.save_data)
+ #self.connect(exit,QtCore.SIGNAL('close()'), self.onQuit)
+
+ self.textwindow.show()
+ else:
+ pass
+
def enable_save(self):
self.save.setEnabled(True)
@@ -70,4 +273,11 @@ class ProjectExplorer(QtGui.QWidget):
self.fopen=open(self.filePath, 'w')
self.fopen.write(self.text.toPlainText())
self.fopen.close()
- self.textwindow.close() \ No newline at end of file
+ self.textwindow.close()
+
+ def removeProject(self):
+ self.indexItem =self.treeView.currentIndex()
+ filename= self.indexItem.data().toString()
+ self.filePath= self.indexItem.sibling(self.indexItem.row(), 1).data().toString()
+ del self.obj_appconfig.project_explorer[str(self.filePath)]
+ json.dump(self.obj_appconfig.project_explorer, open(self.obj_appconfig.dictPath,'w'))