예제 #1
0
파일: nodewidget.py 프로젝트: vertrex/DFF
class NodeWidget(QWidget):
    """
    This Widget provide a list model with various view
    """
    def __init__(self, selectionManager, tabmode=False, filtermode=False):
        QWidget.__init__(self)
        self.tabmode = tabmode
        self.filtermode = filtermode
        # setup model and views
        self.viewid = TABLEVIEW_ID
        self.setModel(selectionManager)
        self.__statuswidget = StatusBarWidget()
        QApplication.instance().mainWindow.status.addWidget(
            self.__statuswidget)
        self.__viewstatus = StatusWidget()
        self.viewStatusSetStatusModel(selectionManager)
        self.__linklabel = LinkLabel()
        self.__nodestatus = StatusWidget()
        self.__nodestatus.setStatusModel(NodeStatusModel(self))
        self.setStatusWidget()
        self.setListView()
        self.setTableView()
        self.tableview.setModel(self.model)
        self.tableview.setColumnWidth(0, 180)
        self.listview.setModel(self.model)
        # Keep track of model list in case of filtering
        self.initialist = []
        # setup graphic stuff
        self.createMainLayout()
        self.createViewLayout()
        self.createStack()
        self.createScrollbar()
        self.createConnections()
        self.menuManager(selectionManager)
        self.connect(self.model, SIGNAL("dataChanged"), self.dataChanged)

    def setStatusWidget(self):
        self.__statuswidget.addStatusWidget(self.__viewstatus, 20)
        self.__statuswidget.addStatusWidget(self.__linklabel, 60)
        self.__statuswidget.addStatusWidget(self.__nodestatus, 20)

    def linkLabel(self):
        return self.__linklabel

    def statusWidget(self):
        return self.__statuswidget

    def nodeStatus(self):
        return self.__nodestatus

    def viewStatusSetStatusModel(self, selectionmanager):
        self.__viewstatus.setStatusModel(
            ViewStatusModel(self.model, selectionmanager))

    def viewStatus(self):
        return self.__viewstatus

    def setListView(self):
        self.listview = NodeListView(self)

    def setTableView(self):
        self.tableview = NodeTableView(self)

    def setModel(self, selectionManager):
        self.model = NodeListModel(selectionManager)

    def updateStatus(self):
        visible = True
        node = self.model.currentNode() if self.model.currentNode(
        ) is not None else self.model.currentRoot()
        if node is not None:
            self.__linklabel.setLink(node)
            self.emit(SIGNAL("currentNode"), node)
        else:
            visible = False
        self.__statuswidget.setVisible(visible)
        QApplication.instance().mainWindow.status.setCurrentWidget(
            self.__statuswidget)

    def statusWidget(self):
        return self.__statuswidget

    def menuManager(self, selectionManager):
        self.menumanager = MenuManager(selectionManager, self.model)

    def refreshIconSize(self, factor):
        self.tableview.factor = factor
        self.tableview.configure()
        self.listview.factor = factor
        self.listview.configure()
        self.refreshVisible()

    def dataChanged(self, x, y):
        self.viewstack.currentWidget().dataChanged(x, y)

    def createMainLayout(self):
        self.vlayout = QVBoxLayout(self)
        self.vlayout.setSpacing(0)
        self.vlayout.setMargin(0)

    def createViewLayout(self):
        container = QWidget()
        self.hlayout = QHBoxLayout()
        self.hlayout.setSpacing(0)
        self.hlayout.setMargin(0)
        container.setLayout(self.hlayout)
        self.vlayout.addWidget(container)

    def createStack(self):
        self.viewstack = QStackedWidget()
        self.viewstack.addWidget(self.tableview)
        self.viewstack.addWidget(self.listview)
        self.hlayout.addWidget(self.viewstack, 99)

    def createScrollbar(self):
        self.scrollbar = ScrollBar(self)
        self.hlayout.addWidget(self.scrollbar, 1)
        self.scrollbar.lower()

    def refreshVisible(self):
        view = self.viewstack.currentWidget()
        view.refreshVisible()

    def createConnections(self):
        self.connect(self, SIGNAL("changeView"), self.changeView)
        self.connect(self.tableview, SIGNAL("nodeListClicked"),
                     self.nodelistclicked)
        self.connect(self.tableview, SIGNAL("nodeListDoubleClicked"),
                     self.nodelistDoubleclicked)
        self.connect(self.model, SIGNAL("nodeListClicked"),
                     self.nodelistclicked)
        self.connect(self.tableview, SIGNAL("enterDirectory"),
                     self.enterDirectory)
        self.connect(self.listview, SIGNAL("enterDirectory"),
                     self.enterDirectory)
        self.connect(self.listview, SIGNAL("nodeListClicked"),
                     self.nodelistclicked)
        self.connect(self.listview, SIGNAL("nodeListDoubleClicked"),
                     self.nodelistDoubleclicked)
        self.connect(self.model, SIGNAL("nodeAppended"), self.refreshVisible)

    def enterDirectory(self, sourcenode):
        if sourcenode != None:
            if (not self.tabmode) and (not self.filtermode):
                self.model.changeList(sourcenode)
                self.emit(SIGNAL("pathChanged"), sourcenode)
                if len(self.model.list()) > 0:
                    self.nodelistclicked(0)
            if self.filtermode:
                self.model.clearList()
                self.emit(SIGNAL("enterFilter"), sourcenode)
            if self.tabmode:
                self.openAsNewTab(sourcenode)
        self.refreshVisible()

    def nodelistclicked(self, button):
        if button == Qt.RightButton:
            self.menumanager.createMenu()
        else:
            node = self.model.currentNode()
            self.emit(SIGNAL("nodePressed"), node)

    def nodelistDoubleclicked(self, node):
        self.menumanager.openDefault(node)

    def changeView(self, index):
        self.viewid = index
        if index == TABLEVIEW_ID:
            self.menumanager.setIconView(False)
            self.viewstack.setCurrentWidget(self.tableview)
            self.model.refresh(self.model.currentRow())
            self.scrollbar.setMaximum(self.scrollbar.value() - 2)
        elif index == LISTVIEW_ID:
            self.menumanager.setIconView(True)
            self.viewstack.setCurrentWidget(self.listview)
            self.model.refresh(self.model.currentRow())
            self.scrollbar.setMaximum(self.scrollbar.value() + 2)
        self.refreshVisible()

    def openAsNewTab(self, rootnode):
        QApplication.instance().mainWindow.addNodeBrowser(rootpath=rootnode)
예제 #2
0
 def menuManager(self, selectionManager):
     self.menumanager = MenuManager(selectionManager, self.model)
예제 #3
0
파일: nodewidget.py 프로젝트: vertrex/DFF
 def menuManager(self, selectionManager):
     self.menumanager = MenuManager(selectionManager, self.model)
예제 #4
0
class NodeWidget(QWidget):
    """
    This Widget provide a list model with various view
    """
    def __init__(self, selectionManager, tabmode=False, filtermode=False):
        QWidget.__init__(self)
        self.tabmode = tabmode
        self.filtermode = filtermode
        # setup model and views
        self.viewid = TABLEVIEW_ID
        self.model = NodeListModel(selection=selectionManager)
        self.tableview = NodeTableView(self)
        self.listview = NodeListView(self)
        self.tableview.setModel(self.model)
        self.tableview.setColumnWidth(0, 180)
        self.listview.setModel(self.model)
        # Keep track of model list in case of filtering
        self.initialist = []
        # setup graphic stuff
        self.createMainLayout()
        self.createViewLayout()
        self.createStack()
        self.createScrollbar()
        self.createConnections()
        self.menuManager(selectionManager)
        self.connect(self.model, SIGNAL("dataChanged"), self.dataChanged)

    def menuManager(self, selectionManager):
        self.menumanager = MenuManager(selectionManager, self.model)

    def refreshIconSize(self, factor):
        self.tableview.factor = factor
        self.tableview.configure()
        self.listview.factor = factor
        self.listview.configure()
        self.refreshVisible()

    def dataChanged(self, x, y):
        self.viewstack.currentWidget().dataChanged(x, y)

    def createMainLayout(self):
        self.vlayout = QVBoxLayout(self)
        self.vlayout.setSpacing(0)
        self.vlayout.setMargin(0)
        
    def createViewLayout(self):
        container = QWidget()
        self.hlayout = QHBoxLayout()
        self.hlayout.setSpacing(0)
        self.hlayout.setMargin(0)
        container.setLayout(self.hlayout)
        self.vlayout.addWidget(container)

    def createStack(self):
        self.viewstack = QStackedWidget()
        self.viewstack.addWidget(self.tableview)
        self.viewstack.addWidget(self.listview)
        self.hlayout.addWidget(self.viewstack, 99)

    def createScrollbar(self):
        self.scrollbar = ScrollBar(self)
        self.hlayout.addWidget(self.scrollbar, 1)
        self.scrollbar.lower()

    def refreshVisible(self):
        view = self.viewstack.currentWidget()
        view.refreshVisible()

    def createConnections(self):
        self.connect(self, SIGNAL("changeView"), self.changeView)
        self.connect(self.tableview, SIGNAL("nodeListClicked"), self.nodelistclicked)
        self.connect(self.tableview, SIGNAL("nodeListDoubleClicked"), self.nodelistDoubleclicked)
        self.connect(self.model, SIGNAL("nodeListClicked"), self.nodelistclicked)
        self.connect(self.tableview, SIGNAL("enterDirectory"), self.enterDirectory)
        self.connect(self.listview, SIGNAL("enterDirectory"), self.enterDirectory)
        self.connect(self.listview, SIGNAL("nodeListClicked"), self.nodelistclicked)
        self.connect(self.listview, SIGNAL("nodeListDoubleClicked"), self.nodelistDoubleclicked)
        self.connect(self.model, SIGNAL("nodeAppended"), self.refreshVisible)

    def enterDirectory(self, sourcenode):
        if sourcenode != None:
            if (not self.tabmode) and (not self.filtermode):
                self.model.emit(SIGNAL("changeList"), sourcenode.children())
                self.emit(SIGNAL("pathChanged"), sourcenode)
                if len(self.model.list()) > 0:
                    self.nodelistclicked(0)
            if self.filtermode:
                self.emit(SIGNAL("enterFilter"), sourcenode)
            if self.tabmode:
                self.openAsNewTab(sourcenode)
                
        self.refreshVisible()

    def nodelistclicked(self, button):
        if button == Qt.RightButton:
            self.menumanager.createMenu()
        else:
            node = self.model.currentNode()
            self.emit(SIGNAL("nodePressed"), node)

    def nodelistDoubleclicked(self, node):
        self.menumanager.openDefault(node)

    def changeView(self, index):
        self.viewid = index
        if index == TABLEVIEW_ID:
            self.viewstack.setCurrentWidget(self.tableview)
            self.model.refresh(self.model.currentRow())
            self.scrollbar.setMaximum(self.scrollbar.value() - 2)
        elif index == LISTVIEW_ID:
            self.viewstack.setCurrentWidget(self.listview)
            self.model.refresh(self.model.currentRow())
            self.scrollbar.setMaximum(self.scrollbar.value() + 2)
        self.refreshVisible()

    def openAsNewTab(self, rootnode):
        QApplication.instance().mainWindow.addNodeBrowser(rootpath=rootnode)