示例#1
0
    def __init__(self, projectPathDict, library, busyWidget, colorScheme,
                 useData, app, parent):
        QtGui.QWidget.__init__(self, parent)

        self.app = app
        self.useData = useData
        self.library = library
        self.projects = parent
        self.colorScheme = colorScheme

        self.projectPathDict = projectPathDict
        self.loadProjectData()

        self.busyWidget = busyWidget
        self.buildStatusWidget = BuildStatusWidget(self.app, self.useData)

        mainLayout = QtGui.QVBoxLayout()
        mainLayout.setMargin(0)
        mainLayout.setSpacing(0)
        self.setLayout(mainLayout)

        self.standardToolbar = QtGui.QToolBar("Standard")
        self.standardToolbar.setMovable(False)
        self.standardToolbar.setIconSize(QtCore.QSize(36, 36))
        self.standardToolbar.setToolButtonStyle(3)
        self.standardToolbar.setContextMenuPolicy(QtCore.Qt.PreventContextMenu)
        self.standardToolbar.setObjectName("StandardToolBar")
        mainLayout.addWidget(self.standardToolbar)

        widget = QtGui.QWidget()
        vbox = QtGui.QVBoxLayout()
        vbox.setMargin(0)
        vbox.setSpacing(0)
        widget.setLayout(vbox)

        self.vSplitter = VerticalSplitter()
        mainLayout.addWidget(self.vSplitter)

        self.hSplitter = QtGui.QSplitter()
        self.hSplitter.setObjectName("hSplitter")

        self.vSplitter.addWidget(self.hSplitter)

        self.bottomStack = QtGui.QStackedWidget()
        self.vSplitter.addWidget(self.bottomStack)

        self.navigator = QtGui.QTabWidget()
        self.navigator.setObjectName("navigator")
        self.hSplitter.addWidget(self.navigator)
        self.hSplitter.addWidget(widget)

        self.bottomStackSwitcher = StackSwitcher(self.bottomStack)
        self.bottomStackSwitcher.setStyleSheet(StyleSheet.bottomSwitcherStyle)

        self.messagesWidget = MessagesWidget(self.bottomStackSwitcher,
                                             self.vSplitter)

        self.createActions()

        self.manageFavourites = Favourites(self.projectData['favourites'],
                                           self.messagesWidget, self)

        self.externalLauncher = ExternalLauncher(self.projectData["launchers"],
                                                 self)

        self.writePad = WritePad(self.projectPathDict["notes"],
                                 self.projectPathDict["name"], self)

        self.bookmarkToolbar = QtGui.QToolBar("Bookmarks")
        self.bookmarkToolbar.setMovable(False)
        self.bookmarkToolbar.setFloatable(False)
        self.bookmarkToolbar.setContextMenuPolicy(QtCore.Qt.PreventContextMenu)
        self.bookmarkToolbar.setObjectName("Bookmarks")
        self.bookmarkToolbar.addSeparator()

        self.editorTabWidget = EditorTabWidget(
            self.useData, self.projectPathDict, self.projectData["settings"],
            self.messagesWidget, self.colorScheme, self.busyWidget,
            self.bookmarkToolbar, self.app, self.manageFavourites,
            self.externalLauncher, self)
        vbox.addWidget(self.editorTabWidget)

        self.manageFavourites.openFile.connect(self.editorTabWidget.loadfile)

        self.editorTabWidget.updateRecentFilesList.connect(
            self.updateRecentFiles)
        self.editorTabWidget.updateLinesCount.connect(self.updateLineCount)
        self.editorTabWidget.updateEncodingLabel.connect(
            self.updateEncodingLabel)
        self.editorTabWidget.cursorPositionChanged.connect(
            self.showCursorPosition)

        self.searchWidget = SearchWidget(self.useData, self.editorTabWidget)
        vbox.addWidget(self.searchWidget)

        self.findInFiles = FindInFiles(self.useData, self.editorTabWidget,
                                       projectPathDict,
                                       self.bottomStackSwitcher)
        vbox.addWidget(self.findInFiles.dashboard)
        self.findInFiles.dashboard.hide()

        self.projectManager = ProjectManager(
            self.editorTabWidget, self.messagesWidget, projectPathDict,
            self.projectData["settings"], self.useData, app, self.busyWidget,
            self.buildStatusWidget, self.projects)
        self.projectManager.projectView.fileActivated.connect(
            self.editorTabWidget.loadfile)

        self.outline = Outline(self.useData, self.editorTabWidget)

        self.navigator.addTab(self.outline, "Outline")
        self.navigator.addTab(self.projectManager.projectView, "Project")

        #        self.sideSplitter = QtGui.QSplitter()
        #        self.sideSplitter.setObjectName("sidebarItem")
        #        self.sideSplitter.setOrientation(0)
        #
        #        self.sideSplitter.addWidget(self.outline)

        #        self.sideBottomTab = QtGui.QTabWidget()
        #        self.sideBottomTab.setObjectName("sideBottomTab")
        #        self.sideSplitter.addWidget(self.sideBottomTab)

        #        self.sideBottomTab.addTab(self.projectManager.projectView, QtGui.QIcon(
        #            os.path.join("Resources", "images", "tree")), "Project")
        #        self.sideSplitter.addWidget(self.projectManager.projectView)

        #        self.fileExplorer = FileExplorer(
        #            self.useData, self.projectData['shortcuts'], self.messagesWidget, self.editorTabWidget)
        #        self.fileExplorer.fileActivated.connect(self.editorTabWidget.loadfile)
        #        self.sideBottomTab.addTab(self.fileExplorer, QtGui.QIcon(
        #            os.path.join("Resources", "images", "tree")), "File System")

        # create menus
        self.mainMenu = QtGui.QMenu()
        self.mainMenu.addMenu(self.editorTabWidget.newFileMenu)
        self.mainMenu.addAction(self.editorTabWidget.openFileAct)
        self.mainMenu.addAction(self.editorTabWidget.saveAct)
        self.mainMenu.addAction(self.editorTabWidget.saveAllAct)
        self.mainMenu.addAction(self.editorTabWidget.saveAsAct)
        self.mainMenu.addAction(self.editorTabWidget.saveCopyAsAct)
        self.mainMenu.addAction(self.editorTabWidget.printAct)

        editMenu = self.mainMenu.addMenu('Edit')

        editMenu.addAction(self.editorTabWidget.undoAct)
        self.editorTabWidget.undoAct.setDisabled(True)
        editMenu.addAction(self.editorTabWidget.redoAct)
        self.editorTabWidget.redoAct.setDisabled(True)
        editMenu.addSeparator()
        editMenu.addAction(self.editorTabWidget.cutAct)
        self.editorTabWidget.cutAct.setDisabled(True)
        editMenu.addAction(self.editorTabWidget.copyAct)
        self.editorTabWidget.copyAct.setDisabled(True)
        editMenu.addAction(self.editorTabWidget.pasteAct)
        editMenu.addSeparator()
        editMenu.addAction(self.editorTabWidget.dedentAct)
        editMenu.addAction(self.editorTabWidget.indentAct)
        editMenu.addSeparator()
        editMenu.addAction(self.finderAct)
        editMenu.addAction(self.replaceAct)
        editMenu.addAction(self.findInFilesAct)

        self.projectMenu = QtGui.QMenu("Project")
        if projectPathDict["type"] == "Desktop Application":
            self.projectMenu.addAction(self.buildAct)
            self.projectMenu.addAction(self.openBuildAct)
        self.projectMenu.addAction(self.configureAct)
        self.projectMenu.addSeparator()
        self.projectMenu.addAction(self.exportProjectAct)
        self.projectMenu.addAction(self.closeProjectAct)
        self.mainMenu.addMenu(self.projectMenu)

        self.mainMenu.addSeparator()
        self.mainMenu.addAction(self.gotoLineAct)
        self.mainMenu.addAction(self.viewSwitcherAct)
        helpMenu = self.mainMenu.addMenu("Help")
        helpMenu.addAction(self.userGuideAct)
        helpMenu.addAction(self.pythonManualsAct)
        helpMenu.addSeparator()
        helpMenu.addAction(self.feedbackAct)
        helpMenu.addAction(self.checkUpdatesAct)
        self.mainMenu.addSeparator()
        self.mainMenu.addMenu(self.manageFavourites.favouritesMenu)
        self.recentFilesMenu = self.mainMenu.addMenu("Recent Files")
        self.recentFilesMenu.setIcon(
            QtGui.QIcon(os.path.join("Resources", "images", "history")))
        self.loadRecentFiles()
        self.mainMenu.addMenu(self.externalLauncher.launcherMenu)
        self.mainMenu.addSeparator()
        self.mainMenu.addAction(self.exitAct)

        self.createToolbars()

        # create StatusBar
        self.statusbar = QtGui.QStatusBar()

        self.statusbar.addPermanentWidget(self.buildStatusWidget)

        #*** Position
        self.cursorPositionButton = QtGui.QToolButton()
        self.cursorPositionButton.setAutoRaise(True)
        self.cursorPositionButton.clicked.connect(
            self.editorTabWidget.goToCursorPosition)
        self.statusbar.addPermanentWidget(self.cursorPositionButton)
        #*** lines
        self.linesLabel = QtGui.QLabel("Lines: 0")
        self.linesLabel.setMinimumWidth(50)
        self.statusbar.addPermanentWidget(self.linesLabel)
        #*** encoding
        self.encodingLabel = QtGui.QLabel("Coding: utf-8")
        self.statusbar.addPermanentWidget(self.encodingLabel)

        self.runWidget = RunWidget(self.bottomStackSwitcher,
                                   self.projectData["settings"], self.useData,
                                   self.editorTabWidget, self.vSplitter,
                                   self.runProjectAct, self.stopRunAct,
                                   self.runFileAct)
        self.addBottomWidget(
            self.runWidget,
            QtGui.QIcon(os.path.join("Resources", "images", "graphic-design")),
            "Output")

        self.assistantWidget = Assistant(self.editorTabWidget,
                                         self.bottomStackSwitcher)
        self.addBottomWidget(
            self.assistantWidget,
            QtGui.QIcon(os.path.join("Resources", "images", "flag")), "Alerts")

        bookmarkWidget = BookmarkWidget(self.editorTabWidget,
                                        self.bottomStackSwitcher)
        #        self.addBottomWidget(bookmarkWidget,
        #                             QtGui.QIcon(os.path.join("Resources", "images", "tag")), "Bookmarks")

        tasksWidget = Tasks(self.editorTabWidget, self.bottomStackSwitcher)
        #        self.addBottomWidget(tasksWidget,
        #                             QtGui.QIcon(os.path.join("Resources", "images", "issue")), "Tasks")
        #
        #        self.addBottomWidget(self.messagesWidget,
        #                             QtGui.QIcon(os.path.join("Resources", "images", "speech_bubble")), "Messages")

        self.profiler = Profiler(self.useData, self.bottomStackSwitcher)
        #        self.addBottomWidget(self.profiler,
        #                             QtGui.QIcon(os.path.join("Resources", "images", "settings")), "Profiler")
        self.runWidget.loadProfile.connect(self.profiler.viewProfile)

        #        self.addBottomWidget(self.findInFiles,
        #                             QtGui.QIcon(os.path.join("Resources", "images", "attibutes")), "Find-in-Files")

        self.bottomStackSwitcher.setDefault()

        hbox = QtGui.QHBoxLayout()
        hbox.setMargin(0)
        hbox.setSpacing(0)
        hbox.addWidget(self.bottomStackSwitcher)
        hbox.addStretch(1)
        hbox.addWidget(self.statusbar)
        mainLayout.addLayout(hbox)

        # remember layout
        if projectPathDict['root'] in self.useData.OPENED_PROJECTS:
            settings = QtCore.QSettings("Clean Code Inc.", "Pcode")
            settings.beginGroup(projectPathDict['root'])
            self.hSplitter.restoreState(settings.value('hsplitter'))
            self.vSplitter.restoreState(settings.value('vsplitter'))
            #            self.sideSplitter.restoreState(
            #                settings.value('sidesplitter'))
            self.vSplitter.updateStatus()
            self.writePad.setGeometry(settings.value('writepad'))
            settings.endGroup()

        self.setKeymap()