示例#1
0
    def __setupMenu_(self):
        """Used to create the default menu"""
        # Create the menu bar
        self.__menu_ = QMenuBar(self)
        self.setMenuBar(self.__menu_)

        # File
        self.menuFile = QMenu(self.__menu_)
        self.menuFile.setTitle(_("&File"))
        self.actionQuit = QAction(self)
        self.actionQuit.setText(_("&Quit"))
        self.actionQuit.setShortcut(_("Ctrl+Q"))
        self.menuFile.addAction(self.actionQuit)

        # Settings
        self.menuSettings = QMenu(self.__menu_)
        self.menuSettings.setTitle(_("&Settings"))
        self.actionConfigure = QAction(self)
        self.actionConfigure.setText(_("&Configure xc2424scan"))
        self.menuSettings.addAction(self.actionConfigure)

        # Add the menus to the menu
        self.__menu_.addAction(self.menuFile.menuAction())
        self.__menu_.addAction(self.menuSettings.menuAction())

        self.connect(self.actionQuit, SIGNAL("triggered(bool)"), self.close)
        self.connect(self.actionConfigure, SIGNAL("triggered(bool)"),
                     self.__change_config_)
示例#2
0
class Ui_SLim(object):
    def setupUi(self, SLim):
        SLim.setObjectName(_fromUtf8("SLim"))
        SLim.resize(800, 601)
        self.centralwidget = QWidget(SLim)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        SLim.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(SLim)
        self.menubar.setGeometry(QRect(0, 0, 800, 20))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        SLim.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(SLim)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        SLim.setStatusBar(self.statusbar)

        ui_settings = slimUISettings()

        QMetaObject.connectSlotsByName(SLim)

        self.loopers = []
        self.loopers.append(LooperWidget(self.centralwidget, 0, ui_settings.looper))
        self.loopers.append(LooperWidget(self.centralwidget, 1, ui_settings.looper))
        for looper in self.loopers:
            self.verticalLayout.addWidget(looper)

        self.retranslateUi(SLim)

    def retranslateUi(self, SLim):
        for looper in SLim.ui.loopers:
            looper.retranslateUi()
        SLim.setWindowTitle(QApplication.translate("SLim", "MainWindow", None, QApplication.UnicodeUTF8))
class BaseFenetrePrinc(QMainWindow):
    """ Classe BaseFenetrePrinc

    Cette classe définit les widgets contenus dans la fenetre principale de
    PyFt. Elle est héritée par fen.FenetrePrinc.
    """

    def __init__(self, parent=None):
        """ Fait des initialisations """
        super(BaseFenetrePrinc, self).__init__(parent)
        self.resize(800, 600)
        self.setWindowTitle('PyFt - 0.1')

        # barre de menu
        self.menuBar = QMenuBar()
        self.mFic = QMenu('Fichier')

        self.a_quit = QAction('Quitter', self)

        self.menuBar.addMenu(self.mFic)
        self.setMenuBar(self.menuBar)

        # zone centrale
        self.mdi = QMdiArea()
        self.setCentralWidget(self.mdi)
示例#4
0
文件: qmpcapp.py 项目: jmechnich/qmpc
 def initStartScreen(self):
     self.startscreen = StartScreen(self)
     self.startscreen.clicked.connect(self.connectActivated)
     if have_maemo:
         menu = QMenuBar(self.startscreen)
         menu.addAction(self.actionConnect)
         menu.addAction(self.actionPrefs)
示例#5
0
    def __init__(self, parent, actionManager):
        QMenuBar.__init__(self, parent)
        self._manager = actionManager

        for action in self._manager.allActions():
            self._onActionInserted( action )

        self._manager.actionInserted.connect(self._onActionInserted)
        self._manager.actionRemoved.connect(self._onActionRemoved)
示例#6
0
    def __init__(self, parent, actionManager):
        QMenuBar.__init__(self, parent)
        self._manager = actionManager

        for action in self._manager.allActions():
            self._onActionInserted( action )
            
        self._manager.actionInserted.connect(self._onActionInserted)
        self._manager.actionRemoved.connect(self._onActionRemoved)
示例#7
0
def menubar():
    """Return a newly created parent-less menu bar that's used when there is no main window."""
    m = QMenuBar()
    m.addMenu(menu_file(m))
    m.addMenu(menu_edit(m))
    m.addMenu(menu_window(m))
    m.addMenu(menu_sessions(m))
    m.addMenu(menu_help(m))
    return m
示例#8
0
    def __init__(self, config):
        # Initialize the object as a QWidget and
        # set its title and minimum width

        QWidget.__init__(self)

        self.config = config
        self.peerList = config.peerList
        self.setWindowTitle('BlastShare')
        self.setMinimumSize(320, 480)
        self.setMaximumWidth(320)
        self.prefw = None
        
        # connects the signals!
        self.connect(self.peerList,
                     SIGNAL("initTransfer"), self.sendFileToPeer)

        ''' Will add feature in future version '''
        '''
        shareFilesAction = QAction(QIcon('exit.png'), '&Share File(s)', self)
        shareFilesAction.setShortcut('Ctrl+O')
        shareFilesAction.setStatusTip('Share File(s)')
        shareFilesAction.triggered.connect(quitApp)
        '''
        
        preferencesAction = QAction(QIcon('exit.png'), '&Preferences', self)
        preferencesAction.setShortcut('Ctrl+P')
        preferencesAction.setStatusTip('Preferences')
        preferencesAction.triggered.connect(self.editPreferences)

        exitAction = QAction(QIcon('exit.png'), '&Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(quitApp)

        menubar = QMenuBar()
        fileMenu = menubar.addMenu('&File')
        
        ''' Will enable in future versions '''
        # fileMenu.addAction(shareFilesAction)
        
        fileMenu.addAction(preferencesAction)
        fileMenu.addAction(exitAction)

        layout = QVBoxLayout()
        layout.setContentsMargins(QMargins(0, 0, 0, 0))
        self.setLayout(layout)
        
        statusBar = QStatusBar()
        statusBar.showMessage('Ready')
        
        layout.addWidget(menubar)
        layout.addWidget(self.peerList)
        layout.addWidget(statusBar)
示例#9
0
def menubar():
    """Return a newly created parent-less menu bar that's used when there is no main window."""
    m = QMenuBar()
    m.addMenu(menu_file(m))
    m.addMenu(menu_edit(m))
    m.addMenu(menu_window(m))
    m.addMenu(menu_sessions(m))
    m.addMenu(menu_help(m))
    return m
示例#10
0
    def menuUi(self):
        extractQuit = QAction(self) 
        extractQuit.setStatusTip('File')
          
        mainMenu = QMenuBar()
        
        fileMenu = mainMenu.addMenu('&File')
        exitMenu = QAction('&Exit', self)
        exitMenu.setShortcut('CTRL+Q')
        exitMenu.setStatusTip('Close Dialog')
        #exitMenu.triggered.connect(self.lunchUnitForm)
        fileMenu.addAction(exitMenu)
    
        printMenu = mainMenu.addMenu('&Print')
        printPrevMenu = QAction('&Print Preview', self)
        printPrevMenu.setShortcut('CTRL+P')
        printPrevMenu.setStatusTip('Print Preview')
        printPrevMenu.triggered.connect(self.lunchPrintForm)
        printMenu.addAction(printPrevMenu)
    
        printPDF = QAction('&Print PDF', self)
        printPDF.setShortcut('CTRL+D')
        printPDF.setStatusTip('PDF')
        printPDF.triggered.connect(self.lunchPrintPdf)
        printMenu.addAction(printPDF)

        printEXCEL = QAction('&Print EXCEL', self)
        printEXCEL.setShortcut('CTRL+E')
        printEXCEL.setStatusTip('EXCEL')
        printEXCEL.triggered.connect(self.lunchPrintExcel)
        printMenu.addAction(printEXCEL)
        
        printCSV = QAction('&Print CSV', self)
        printCSV.setShortcut('CTRL+C')
        printCSV.setStatusTip('PDF')
        printCSV.triggered.connect(self.lunchPrintCsv)
        printMenu.addAction(printCSV)
        
        selMenu = mainMenu.addMenu('Column Visibility')
        self.hold = {}
        for a in self.header:
            d =  QAction(self.header[a], self, checkable = True)
            d.changed.connect(lambda:self.loadPage())
            self.hold[a] = d
            if a in self.columns:
               d.setChecked(True)
            selMenu.addAction(d)
            
        return mainMenu
示例#11
0
    def setupUi(self, SLim):
        SLim.setObjectName(_fromUtf8("SLim"))
        SLim.resize(800, 601)
        self.centralwidget = QWidget(SLim)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        SLim.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(SLim)
        self.menubar.setGeometry(QRect(0, 0, 800, 20))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        SLim.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(SLim)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        SLim.setStatusBar(self.statusbar)

        ui_settings = slimUISettings()

        QMetaObject.connectSlotsByName(SLim)

        self.loopers = []
        self.loopers.append(LooperWidget(self.centralwidget, 0, ui_settings.looper))
        self.loopers.append(LooperWidget(self.centralwidget, 1, ui_settings.looper))
        for looper in self.loopers:
            self.verticalLayout.addWidget(looper)

        self.retranslateUi(SLim)
示例#12
0
        def setupUi(self, MainWindow):
            """
            """

            MainWindow.resize(100,200)

            # Create the "Central Widget" and add a "Layout"
            self.centralwidget = QWidget(MainWindow)
            MainWindow.setCentralWidget(self.centralwidget)
            self.verticalLayout= QVBoxLayout(self.centralwidget)

            # Add a Temperature sensor and Label Widgets
            self.t1 = QFellesThermocouple(self.centralwidget)
            self.label = QLabel(self.centralwidget)
            self.label.setText("[C]")

            # Add Widgets to Layout
            self.verticalLayout.addWidget(self.t1)
            self.verticalLayout.addWidget(self.label)

            # Add connections
            self.t1.measurement_updated.connect(self.label.setText)

            # Create the Menu bar
            self.menubar = QMenuBar(MainWindow)
            MainWindow.setMenuBar(self.menubar)
            # Create the Status Bar
            self.statusbar = QStatusBar(MainWindow)
            MainWindow.setStatusBar(self.statusbar)

            self.retranslateUi(MainWindow)
示例#13
0
 def initMenuBar(self):
     menuBar = QMenuBar()
     file = menuBar.addMenu("&File")
     quit = file.addAction("&Quit", QApplication.instance().quit)
     quit.setShortcutContext(Qt.ApplicationShortcut)
     quit.setShortcut(QKeySequence.Quit)
     self.changeName = QAction("Change Name", self, triggered=self.__changeName)
     self.changeColor = QAction("Change Color", self, triggered=self.__changeColor)
     self.cashCards = QAction("Cash in Cards", self, enabled=False, triggered=self.__cashCards)
     self.endAttack = QAction("End Attack", self, enabled=False, triggered=self.endAttackReleased)
     self.endTurn = QAction("End Turn", self, enabled=False, triggered=self.endTurnReleased)
     menuBar.addAction(self.changeName)
     menuBar.addAction(self.changeColor)
     menuBar.addAction(self.cashCards)
     menuBar.addAction(self.endAttack)
     menuBar.addAction(self.endTurn)
     self.setMenuBar(menuBar)
	def __init__(self, parent):
		QMenuBar.__init__(self, parent)

		file = self.addMenu("&Archivo")
		n = file.addAction("&Nuevo Modelo")
		n.triggered.connect(self.trigger_new)
		n = file.addAction("Nueva &Pagina")
		n.triggered.connect(self.trigger_newpage)
		n = file.addAction("A&brir Modelo")
		n.triggered.connect(self.load_dialog)
		n = file.addAction("&Guardar Modelo")
		n.triggered.connect(self.save_as_dialog)

		n = file.addAction("&Importar Modulo")
		n.triggered.connect(self.get_from_fich)
		n = file.addAction("E&xportar Modulo")
		n.triggered.connect(self.put_to_fich)

		n = file.addAction("&Cerrar Modelo")
		n.triggered.connect(self.trigger_reset)
		file.addSeparator()
		n = file.addAction("&Salir")
		n.triggered.connect(self.exit.emit)
		

		edit = self.addMenu("&Editar")

		ex = self.addMenu("Ejecuc&ion")
		n = ex.addAction("E&jecutar")
		n.triggered.connect(self.play.emit)
		n = ex.addAction("&Construir")
		n.triggered.connect(self.build.emit)

		#view = self.addMenu("V&istas")

		opt = self.addMenu("&Opciones")

		help = self.addMenu("Ay&uda")
		help.addAction("&Tutorial")
		help.addAction("Sobre el autor")
		help.addAction("Sobre la aplicacion")

		self.parent().say("Menu creado")
示例#15
0
    def _setupMenu(self):
        self.menubar = QMenuBar(self)
        self.menubar.setGeometry(QRect(0, 0, 42, 22))
        self.menuFile = QMenu(self.menubar)
        self.menuFile.setTitle(tr("File"))
        self.menuHelp = QMenu(self.menubar)
        self.menuHelp.setTitle(tr("Help"))
        self.setMenuBar(self.menubar)

        self.menuFile.addAction(self.actionLoadPDF)
        self.menuFile.addAction(self.app.actionLoadProject)
        self.menuFile.addAction(self.app.actionSaveProject)
        self.menuFile.addAction(self.app.actionQuit)
        self.menuHelp.addAction(self.app.actionShowHelp)
        self.menuHelp.addAction(self.app.actionCheckForUpdate)
        self.menuHelp.addAction(self.app.actionOpenDebugLog)
        self.menuHelp.addAction(self.app.actionAbout)

        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuHelp.menuAction())
示例#16
0
class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        
        self.menubar = QMenuBar()
        file_ = self.menubar.addMenu(u"&Fichier")
        exit = QAction(u"Quitter", self)
        exit.setShortcut("Ctrl+Q")
        exit.setToolTip("Quitter l'application")
        self.menubar.connect(exit, SIGNAL("triggered()"), \
                                         self, \
                                         SLOT("close()"))

        file_.addAction(exit)
        self.setMenuBar(self.menubar)
        self.web = QWebView()
        self.web.load(QUrl(APP_URL))
        self.setCentralWidget(self.web)
    
    def goto(self, url):
        self.web.load(QUrl(url))
示例#17
0
    def __init__(self,
                 tree_main,
                 tree_second,
                 configuration,
                 right_window,
                 main_window,
                 signal_wrapper):
        """ Creates menu elements.
            @param tree_main: Tree object of main file / tree
                (left side)
            @param tree_second: Tree object of second file / tree
                (right side)
            @param text_output_instance: QTextEdit object which should be
                used / bind with the tree wiget.
            @param configuration: Current Configuration object.
            @param right_window: QWidget object of the second (right) file/tree
            @param main_window: QMainWindow object to change the title
            @param signal_wrapper: SignalWrapper object which wraps signals

        """
        QMenuBar.__init__(self, main_window.centralWidget())
        logging.info("menu foo")
        self.tree_main = tree_main
        self.tree_second = tree_second
        self._conf = configuration
        self.widget_right_window = right_window
        self.main_window = main_window
        self.signal_wrapper = signal_wrapper

        self.two_windows_action = QAction("Two Windows", self)
        self._importer = TextImporter(self._conf)

        self._init_gui_menu_view()
        self._init_gui_menu_main_file()
        self.menu_second_file = QMenu("SecondFile",
                                      self.main_window.centralWidget())
        self._init_gui_menu_second_file()

        gui_helper.change_window_title("", self.main_window)
示例#18
0
    def create_menu_bar ( self, parent, controller = None ):
        """ Creates a menu bar representation of the manager.
        """
        # If a controller is required it can either be set as a facet on the
        # menu bar manager (the facet is part of the 'ActionManager' API), or
        # passed in here (if one is passed in here it takes precedence over the
        # facet).
        if controller is None:
            controller = self.controller

        menu_bar = QMenuBar( parent )

        # Every item in every group must be a menu manager:
        for group in self.groups:
            for item in group.items:
                menu = item.create_menu( parent, controller )
                menu.menuAction().setText( item.name )
                menu_bar.addMenu( menu )

        return menu_bar

#-- EOF ------------------------------------------------------------------------
示例#19
0
    def _setupMenu(self):
        self.menubar = QMenuBar(self)
        self.menubar.setGeometry(QRect(0, 0, 42, 22))
        self.menuFile = QMenu(self.menubar)
        self.menuFile.setTitle(tr("File"))
        self.menuView = QMenu(self.menubar)
        self.menuView.setTitle(tr("View"))
        self.menuHelp = QMenu(self.menubar)
        self.menuHelp.setTitle(tr("Help"))
        self.menuLoadRecent = QMenu(self.menuFile)
        self.menuLoadRecent.setTitle(tr("Load Recent Results"))
        self.setMenuBar(self.menubar)

        self.menuFile.addAction(self.actionLoadResults)
        self.menuFile.addAction(self.menuLoadRecent.menuAction())
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.app.actionQuit)
        self.menuView.addAction(self.app.actionPreferences)
        self.menuView.addAction(self.actionShowResultsWindow)
        self.menuView.addAction(self.app.actionIgnoreList)
        self.menuHelp.addAction(self.app.actionShowHelp)
        self.menuHelp.addAction(self.app.actionRegister)
        self.menuHelp.addAction(self.app.actionCheckForUpdate)
        self.menuHelp.addAction(self.app.actionOpenDebugLog)
        self.menuHelp.addAction(self.app.actionAbout)

        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuView.menuAction())
        self.menubar.addAction(self.menuHelp.menuAction())

        # Recent folders menu
        self.menuRecentFolders = QMenu()
        self.menuRecentFolders.addAction(self.actionAddFolder)
        self.menuRecentFolders.addSeparator()

        # Recent results menu
        self.menuRecentResults = QMenu()
        self.menuRecentResults.addAction(self.actionLoadResults)
        self.menuRecentResults.addSeparator()
示例#20
0
    def setupUi(self):

        if self.prop.isPortraitMode():
            self.setAttributeAndCatch(self.WA_Maemo5PortraitOrientation, True)
            self.changeOrientationText = self.switchToLandscapeText
        else:
            self.setAttributeAndCatch(self.WA_Maemo5LandscapeOrientation, True)
            self.changeOrientationText = self.switchToPortraitText

        self.setWindowTitle(self.tr("MaeMoney"))
        self.setMinimumSize(QtCore.QSize(400, 400))
        self.gridLayout = QGridLayout()
        widget = QWidget(self)
        widget.setLayout(self.gridLayout)
        self.setCentralWidget(widget)

        self.btnLoadPortfolio = QtGui.QPushButton(self.tr("Sign in to Google Finance"))
        self.gridLayout.addWidget(self.btnLoadPortfolio, 0, 0, 1, 1)

        # List of portfolios
        self.portfolioListView = QComboBox()
        self.portfolioListView.setStyleSheet("QComboBox, QListView { font: 28px; } ")
        self.portfolioListView.setProperty(self.PROP_FINGER_SCROLLABLE, True)

        # Positions within the selected portfolio
        self.positionsListView = PortfolioListView(self)
        self.positionsListView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.positionsListView.setProperty(self.PROP_FINGER_SCROLLABLE, True)

        menuBar = QMenuBar()
        self.setMenuBar(menuBar)

        self.changeAppLocaleAction = QAction(self.tr("Change language"), self)
        menuBar.addAction(self.changeAppLocaleAction)

        self.changeUrlAction = QAction(self.tr("Change Google Finance URL"), self)
        menuBar.addAction(self.changeUrlAction)

        self.changeOrientationAction = QAction(self.changeOrientationText, self)
        menuBar.addAction(self.changeOrientationAction)

        self.changeUpdateIntervalAction = QAction(self.tr("Change update interval"), self)
        menuBar.addAction(self.changeUpdateIntervalAction)
示例#21
0
    def __init__(self, iface, plugin_dir, with_ramp):
        """
        Initial setup of toolbar (pre-login)
        """
        self.iface = iface
        self.plugin_dir = plugin_dir
        self.with_ramp = with_ramp
        self.canvas = self.iface.mapCanvas()
        # Create toolbar
        self.toolbar = self.iface.addToolBar(u'Roadnet')
        self.toolbar.setObjectName(u'Roadnet')

        # Create menubar
        self.menubar = QMenuBar()
        self.define_button_icons_and_actions()
        self.populate_menubar()

        # Add menubar to toolbar
        self.toolbar.addWidget(self.menubar)
        self.toolbar.setIconSize(QSize(100, 100))

        # Set initial state
        self.set_state('init')
示例#22
0
    def setup_menu_bar(self):
        self.menu_bar = QMenuBar(self)
        menu = QMenu("Peakmap Explorer", self.menu_bar)
        self.menu_bar.addMenu(menu)
        if not self.dual_mode:
            self.load_action = QAction("Load Peakmap", self)
            self.load_action.setShortcut(QKeySequence("Ctrl+L"))
            self.load_action2 = None
            menu.addAction(self.load_action)
        else:
            self.load_action = QAction("Load Yellow Peakmap", self)
            self.load_action2 = QAction("Load Blue Peakmap", self)
            menu.addAction(self.load_action)
            menu.addAction(self.load_action2)

        self.save_action = QAction("Save selected range as image", self)
        self.save_action.setShortcut(QKeySequence("Ctrl+S"))
        menu.addAction(self.save_action)

        menu = QMenu("Help", self.menu_bar)
        self.help_action = QAction("Help", self)
        self.help_action.setShortcut(QKeySequence("F1"))
        menu.addAction(self.help_action)
        self.menu_bar.addMenu(menu)
示例#23
0
	def createMenubar(self):
		self._menuBar_ = QMenuBar(None)
		
		#Create File Menu
		self._fileMenu_ = QMenu(self)
		am = ActionManager.getInstance()
        #todo add actions from ActionManager
		for action in am.getBloopFileMenuActions():
		    print "MainView.createMenuBar() adding action to file menu", action
		    print self._fileMenu_.addAction(action)
        
		#Create Help Menu
		self._menuBar_.addMenu(self._fileMenu_)
		
		#self.setMenuWidget(self._menuBar_)
		#self._menuBar_.setVisible(True)
    def __init__(self, parent=None):
        """ Fait des initialisations """
        super(BaseFenetrePrinc, self).__init__(parent)
        self.resize(800, 600)
        self.setWindowTitle('PyFt - 0.1')

        # barre de menu
        self.menuBar = QMenuBar()
        self.mFic = QMenu('Fichier')

        self.a_quit = QAction('Quitter', self)

        self.menuBar.addMenu(self.mFic)
        self.setMenuBar(self.menuBar)

        # zone centrale
        self.mdi = QMdiArea()
        self.setCentralWidget(self.mdi)
示例#25
0
 def _setupMenu(self):
     self.menubar = QMenuBar(self)
     self.menubar.setGeometry(QRect(0, 0, 42, 22))
     self.menuFile = QMenu(self.menubar)
     self.menuFile.setTitle(tr("File"))
     self.menuHelp = QMenu(self.menubar)
     self.menuHelp.setTitle(tr("Help"))
     self.setMenuBar(self.menubar)
     
     self.menuFile.addAction(self.actionLoadPDF)
     self.menuFile.addAction(self.app.actionLoadProject)
     self.menuFile.addAction(self.app.actionSaveProject)
     self.menuFile.addAction(self.app.actionQuit)
     self.menuHelp.addAction(self.app.actionShowHelp)
     self.menuHelp.addAction(self.app.actionCheckForUpdate)
     self.menuHelp.addAction(self.app.actionOpenDebugLog)
     self.menuHelp.addAction(self.app.actionAbout)
     
     self.menubar.addAction(self.menuFile.menuAction())
     self.menubar.addAction(self.menuHelp.menuAction())
    def _setupMenu(self):
        self.menubar = QMenuBar(self)
        self.menubar.setGeometry(QRect(0, 0, 42, 22))
        self.menuFile = QMenu(self.menubar)
        self.menuFile.setTitle(tr("File"))
        self.menuView = QMenu(self.menubar)
        self.menuView.setTitle(tr("View"))
        self.menuHelp = QMenu(self.menubar)
        self.menuHelp.setTitle(tr("Help"))
        self.menuLoadRecent = QMenu(self.menuFile)
        self.menuLoadRecent.setTitle(tr("Load Recent Results"))
        self.setMenuBar(self.menubar)

        self.menuFile.addAction(self.actionLoadResults)
        self.menuFile.addAction(self.menuLoadRecent.menuAction())
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.app.actionQuit)
        self.menuView.addAction(self.app.actionPreferences)
        self.menuView.addAction(self.actionShowResultsWindow)
        self.menuView.addAction(self.app.actionIgnoreList)
        self.menuHelp.addAction(self.app.actionShowHelp)
        self.menuHelp.addAction(self.app.actionRegister)
        self.menuHelp.addAction(self.app.actionCheckForUpdate)
        self.menuHelp.addAction(self.app.actionOpenDebugLog)
        self.menuHelp.addAction(self.app.actionAbout)

        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuView.menuAction())
        self.menubar.addAction(self.menuHelp.menuAction())

        # Recent folders menu
        self.menuRecentFolders = QMenu()
        self.menuRecentFolders.addAction(self.actionAddFolder)
        self.menuRecentFolders.addSeparator()

        # Recent results menu
        self.menuRecentResults = QMenu()
        self.menuRecentResults.addAction(self.actionLoadResults)
        self.menuRecentResults.addSeparator()
示例#27
0
        def setupUi(self, MainWindow):
            """
            """
            MainWindow.resize(100, 200)
            #Create central widget and add a Layout
            self.centralwidget = QWidget(MainWindow)
            MainWindow.setCentralWidget(self.centralwidget)
            self.verticalLayout = QVBoxLayout(self.centralwidget)

            # Add a Temperature sensor and Label Widgets
            self.t1 = QFellesController(self.centralwidget)

            # Add Widgets to Layout
            self.verticalLayout.addWidget(self.t1)

            # Create the Menu bar
            self.menubar = QMenuBar(MainWindow)
            MainWindow.setMenuBar(self.menubar)
            # Create the Status Bar
            self.statusbar = QStatusBar(MainWindow)
            MainWindow.setStatusBar(self.statusbar)

            self.retranslateUi(MainWindow)
示例#28
0
    def setup_menu_bar(self):
        self.menu_bar = QMenuBar(self)
        menu = QMenu("Peakmap Explorer", self.menu_bar)
        self.menu_bar.addMenu(menu)
        if not self.dual_mode:
            self.load_action = QAction("Load Peakmap", self)
            self.load_action.setShortcut(QKeySequence("Ctrl+L"))
            self.load_action2 = None
            menu.addAction(self.load_action)
        else:
            self.load_action = QAction("Load Yellow Peakmap", self)
            self.load_action2 = QAction("Load Blue Peakmap", self)
            menu.addAction(self.load_action)
            menu.addAction(self.load_action2)

        self.save_action = QAction("Save selected range as image", self)
        self.save_action.setShortcut(QKeySequence("Ctrl+S"))
        menu.addAction(self.save_action)

        menu = QMenu("Help", self.menu_bar)
        self.help_action = QAction("Help", self)
        self.help_action.setShortcut(QKeySequence("F1"))
        menu.addAction(self.help_action)
        self.menu_bar.addMenu(menu)
示例#29
0
class ResultWindow(QMainWindow):
    def __init__(self, app):
        QMainWindow.__init__(self, None)
        self.app = app
        self._setupUi()
        self.resultsModel = app.RESULT_MODEL_CLASS(self.app, self.resultsView)
        self.stats = StatsLabel(app.model.stats_label, self.statusLabel)
        self._update_column_actions_status()
        
        self.menuColumns.triggered[QAction].connect(self.columnToggled)
        self.resultsView.doubleClicked.connect(self.resultsDoubleClicked)
        self.resultsView.spacePressed.connect(self.resultsSpacePressed)
        self.detailsButton.clicked.connect(self.actionDetails.triggered)
        self.dupesOnlyCheckBox.stateChanged.connect(self.powerMarkerTriggered)
        self.deltaValuesCheckBox.stateChanged.connect(self.deltaTriggered)
        self.searchEdit.searchChanged.connect(self.searchChanged)
        self.app.willSavePrefs.connect(self.appWillSavePrefs)
    
    def _setupActions(self):
        # (name, shortcut, icon, desc, func)
        ACTIONS = [
            ('actionDetails', 'Ctrl+I', '', tr("Details"), self.detailsTriggered),
            ('actionActions', '', '', tr("Actions"), self.actionsTriggered),
            ('actionPowerMarker', 'Ctrl+1', '', tr("Show Dupes Only"), self.powerMarkerTriggered),
            ('actionDelta', 'Ctrl+2', '', tr("Show Delta Values"), self.deltaTriggered),
            ('actionDeleteMarked', 'Ctrl+D', '', tr("Send Marked to Recycle Bin..."), self.deleteTriggered),
            ('actionMoveMarked', 'Ctrl+M', '', tr("Move Marked to..."), self.moveTriggered),
            ('actionCopyMarked', 'Ctrl+Shift+M', '', tr("Copy Marked to..."), self.copyTriggered),
            ('actionRemoveMarked', 'Ctrl+R', '', tr("Remove Marked from Results"), self.removeMarkedTriggered),
            ('actionReprioritize', '', '', tr("Re-Prioritize Results..."), self.reprioritizeTriggered),
            ('actionRemoveSelected', 'Ctrl+Del', '', tr("Remove Selected from Results"), self.removeSelectedTriggered),
            ('actionIgnoreSelected', 'Ctrl+Shift+Del', '', tr("Add Selected to Ignore List"), self.addToIgnoreListTriggered),
            ('actionMakeSelectedReference', 'Ctrl+Space', '', tr("Make Selected into Reference"), self.app.model.make_selected_reference),
            ('actionOpenSelected', 'Ctrl+O', '', tr("Open Selected with Default Application"), self.openTriggered),
            ('actionRevealSelected', 'Ctrl+Shift+O', '', tr("Open Containing Folder of Selected"), self.revealTriggered),
            ('actionRenameSelected', 'F2', '', tr("Rename Selected"), self.renameTriggered),
            ('actionMarkAll', 'Ctrl+A', '', tr("Mark All"), self.markAllTriggered),
            ('actionMarkNone', 'Ctrl+Shift+A', '', tr("Mark None"), self.markNoneTriggered),
            ('actionInvertMarking', 'Ctrl+Alt+A', '', tr("Invert Marking"), self.markInvertTriggered),
            ('actionMarkSelected', '', '', tr("Mark Selected"), self.markSelectedTriggered),
            ('actionExportToHTML', '', '', tr("Export To HTML"), self.app.model.export_to_xhtml),
            ('actionExportToCSV', '', '', tr("Export To CSV"), self.app.model.export_to_csv),
            ('actionSaveResults', 'Ctrl+S', '', tr("Save Results..."), self.saveResultsTriggered),
            ('actionInvokeCustomCommand', 'Ctrl+Alt+I', '', tr("Invoke Custom Command"), self.app.invokeCustomCommand),
        ]
        createActions(ACTIONS, self)
        self.actionDelta.setCheckable(True)
        self.actionPowerMarker.setCheckable(True)
        
    def _setupMenu(self):
        self.menubar = QMenuBar(self)
        self.menubar.setGeometry(QRect(0, 0, 630, 22))
        self.menuFile = QMenu(self.menubar)
        self.menuFile.setTitle(tr("File"))
        self.menuMark = QMenu(self.menubar)
        self.menuMark.setTitle(tr("Mark"))
        self.menuActions = QMenu(self.menubar)
        self.menuActions.setTitle(tr("Actions"))
        self.menuColumns = QMenu(self.menubar)
        self.menuColumns.setTitle(tr("Columns"))
        self.menuView = QMenu(self.menubar)
        self.menuView.setTitle(tr("View"))
        self.menuHelp = QMenu(self.menubar)
        self.menuHelp.setTitle(tr("Help"))
        self.setMenuBar(self.menubar)
        
        self.menuActions.addAction(self.actionDeleteMarked)
        self.menuActions.addAction(self.actionMoveMarked)
        self.menuActions.addAction(self.actionCopyMarked)
        self.menuActions.addAction(self.actionRemoveMarked)
        self.menuActions.addAction(self.actionReprioritize)
        self.menuActions.addSeparator()
        self.menuActions.addAction(self.actionRemoveSelected)
        self.menuActions.addAction(self.actionIgnoreSelected)
        self.menuActions.addAction(self.actionMakeSelectedReference)
        self.menuActions.addSeparator()
        self.menuActions.addAction(self.actionOpenSelected)
        self.menuActions.addAction(self.actionRevealSelected)
        self.menuActions.addAction(self.actionInvokeCustomCommand)
        self.menuActions.addAction(self.actionRenameSelected)
        self.menuMark.addAction(self.actionMarkAll)
        self.menuMark.addAction(self.actionMarkNone)
        self.menuMark.addAction(self.actionInvertMarking)
        self.menuMark.addAction(self.actionMarkSelected)
        self.menuView.addAction(self.actionPowerMarker)
        self.menuView.addAction(self.actionDelta)
        self.menuView.addSeparator()
        self.menuView.addAction(self.actionDetails)
        self.menuView.addAction(self.app.actionIgnoreList)
        self.menuView.addAction(self.app.actionPreferences)
        self.menuHelp.addAction(self.app.actionShowHelp)
        self.menuHelp.addAction(self.app.actionCheckForUpdate)
        self.menuHelp.addAction(self.app.actionOpenDebugLog)
        self.menuHelp.addAction(self.app.actionAbout)
        self.menuFile.addAction(self.actionSaveResults)
        self.menuFile.addAction(self.actionExportToHTML)
        self.menuFile.addAction(self.actionExportToCSV)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.app.actionQuit)
        
        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuMark.menuAction())
        self.menubar.addAction(self.menuActions.menuAction())
        self.menubar.addAction(self.menuColumns.menuAction())
        self.menubar.addAction(self.menuView.menuAction())
        self.menubar.addAction(self.menuHelp.menuAction())
        
        # Columns menu
        menu = self.menuColumns
        self._column_actions = []
        for index, (display, visible) in enumerate(self.app.model.result_table.columns.menu_items()):
            action = menu.addAction(display)
            action.setCheckable(True)
            action.setChecked(visible)
            action.item_index = index
            self._column_actions.append(action)
        menu.addSeparator()
        action = menu.addAction(tr("Reset to Defaults"))
        action.item_index = -1
        
        # Action menu
        actionMenu = QMenu(tr("Actions"), self.menubar)
        actionMenu.addAction(self.actionDeleteMarked)
        actionMenu.addAction(self.actionMoveMarked)
        actionMenu.addAction(self.actionCopyMarked)
        actionMenu.addAction(self.actionRemoveMarked)
        actionMenu.addSeparator()
        actionMenu.addAction(self.actionRemoveSelected)
        actionMenu.addAction(self.actionIgnoreSelected)
        actionMenu.addAction(self.actionMakeSelectedReference)
        actionMenu.addSeparator()
        actionMenu.addAction(self.actionOpenSelected)
        actionMenu.addAction(self.actionRevealSelected)
        actionMenu.addAction(self.actionInvokeCustomCommand)
        actionMenu.addAction(self.actionRenameSelected)
        self.actionActions.setMenu(actionMenu)
        self.actionsButton.setMenu(self.actionActions.menu())
    
    def _setupUi(self):
        self.setWindowTitle(tr("{} Results").format(self.app.NAME))
        self.resize(630, 514)
        self.centralwidget = QWidget(self)
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.verticalLayout.setMargin(0)
        self.verticalLayout.setSpacing(0)
        self.actionsButton = QPushButton(tr("Actions"))
        self.detailsButton = QPushButton(tr("Details"))
        self.dupesOnlyCheckBox = QCheckBox(tr("Dupes Only"))
        self.deltaValuesCheckBox = QCheckBox(tr("Delta Values"))
        self.searchEdit = SearchEdit()
        self.searchEdit.setMaximumWidth(300)
        self.horizontalLayout = horizontalWrap([self.actionsButton, self.detailsButton,
            self.dupesOnlyCheckBox, self.deltaValuesCheckBox, None, self.searchEdit, 8])
        self.horizontalLayout.setSpacing(8)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.resultsView = ResultsView(self.centralwidget)
        self.resultsView.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.resultsView.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.resultsView.setSortingEnabled(True)
        self.resultsView.verticalHeader().setVisible(False)
        h = self.resultsView.horizontalHeader()
        h.setHighlightSections(False)
        h.setMovable(True)
        h.setStretchLastSection(False)
        h.setDefaultAlignment(Qt.AlignLeft)
        self.verticalLayout.addWidget(self.resultsView)
        self.setCentralWidget(self.centralwidget)
        self._setupActions()
        self._setupMenu()
        self.statusbar = QStatusBar(self)
        self.statusbar.setSizeGripEnabled(True)
        self.setStatusBar(self.statusbar)
        self.statusLabel = QLabel(self)
        self.statusbar.addPermanentWidget(self.statusLabel, 1)
        
        if self.app.prefs.resultWindowIsMaximized:
            self.setWindowState(self.windowState() | Qt.WindowMaximized)
        else:
            if self.app.prefs.resultWindowRect is not None:
                self.setGeometry(self.app.prefs.resultWindowRect)
            else:
                moveToScreenCenter(self)
    
    #--- Private
    def _update_column_actions_status(self):
        # Update menu checked state
        menu_items = self.app.model.result_table.columns.menu_items()
        for action, (display, visible) in zip(self._column_actions, menu_items):
            action.setChecked(visible)
    
    #--- Actions
    def actionsTriggered(self):
        self.actionsButton.showMenu()
    
    def addToIgnoreListTriggered(self):
        self.app.model.add_selected_to_ignore_list()
    
    def copyTriggered(self):
        self.app.model.copy_or_move_marked(True)
    
    def deleteTriggered(self):
        self.app.model.delete_marked()
    
    def deltaTriggered(self, state=None):
        # The sender can be either the action or the checkbox, but both have a isChecked() method.
        self.resultsModel.delta_values = self.sender().isChecked()
        self.actionDelta.setChecked(self.resultsModel.delta_values)
        self.deltaValuesCheckBox.setChecked(self.resultsModel.delta_values)
    
    def detailsTriggered(self):
        self.app.show_details()
    
    def markAllTriggered(self):
        self.app.model.mark_all()
    
    def markInvertTriggered(self):
        self.app.model.mark_invert()
    
    def markNoneTriggered(self):
        self.app.model.mark_none()
    
    def markSelectedTriggered(self):
        self.app.model.toggle_selected_mark_state()
    
    def moveTriggered(self):
        self.app.model.copy_or_move_marked(False)
    
    def openTriggered(self):
        self.app.model.open_selected()
    
    def powerMarkerTriggered(self, state=None):
        # see deltaTriggered
        self.resultsModel.power_marker = self.sender().isChecked()
        self.actionPowerMarker.setChecked(self.resultsModel.power_marker)
        self.dupesOnlyCheckBox.setChecked(self.resultsModel.power_marker)
    
    def preferencesTriggered(self):
        self.app.show_preferences()
    
    def removeMarkedTriggered(self):
        self.app.model.remove_marked()
    
    def removeSelectedTriggered(self):
        self.app.model.remove_selected()
    
    def renameTriggered(self):
        index = self.resultsView.selectionModel().currentIndex()
        # Our index is the current row, with column set to 0. Our filename column is 1 and that's
        # what we want.
        index = index.sibling(index.row(), 1)
        self.resultsView.edit(index)
    
    def reprioritizeTriggered(self):
        dlg = PrioritizeDialog(self, self.app)
        result = dlg.exec()
        if result == QDialog.Accepted:
            dlg.model.perform_reprioritization()
    
    def revealTriggered(self):
        self.app.model.reveal_selected()
    
    def saveResultsTriggered(self):
        title = tr("Select a file to save your results to")
        files = tr("dupeGuru Results (*.dupeguru)")
        destination = QFileDialog.getSaveFileName(self, title, '', files)
        if destination:
            if not destination.endswith('.dupeguru'):
                destination = '{}.dupeguru'.format(destination)
            self.app.model.save_as(destination)
            self.app.recentResults.insertItem(destination)
    
    #--- Events
    def appWillSavePrefs(self):
        prefs = self.app.prefs
        prefs.resultWindowIsMaximized = self.isMaximized()
        prefs.resultWindowRect = self.geometry()
    
    def columnToggled(self, action):
        index = action.item_index
        if index == -1:
            self.app.model.result_table.columns.reset_to_defaults()
            self._update_column_actions_status()
        else:
            visible = self.app.model.result_table.columns.toggle_menu_item(index)
            action.setChecked(visible)
    
    def contextMenuEvent(self, event):
        self.actionActions.menu().exec_(event.globalPos())
    
    def resultsDoubleClicked(self, modelIndex):
        self.app.model.open_selected()
    
    def resultsSpacePressed(self):
        self.app.model.toggle_selected_mark_state()
    
    def searchChanged(self):
        self.app.model.apply_filter(self.searchEdit.text())
示例#30
0
class DirectoriesDialog(QMainWindow):
    def __init__(self, parent, app):
        QMainWindow.__init__(self, None)
        self.app = app
        self.lastAddedFolder = platform.INITIAL_FOLDER_IN_DIALOGS
        self.recentFolders = Recent(self.app, 'recentFolders')
        self._setupUi()
        self.directoriesModel = DirectoriesModel(self.app.model.directory_tree,
                                                 view=self.treeView)
        self.directoriesDelegate = DirectoriesDelegate()
        self.treeView.setItemDelegate(self.directoriesDelegate)
        self._setupColumns()
        self.app.recentResults.addMenu(self.menuLoadRecent)
        self.app.recentResults.addMenu(self.menuRecentResults)
        self.recentFolders.addMenu(self.menuRecentFolders)
        self._updateAddButton()
        self._updateRemoveButton()
        self._updateLoadResultsButton()
        self._setupBindings()

    def _setupBindings(self):
        self.scanButton.clicked.connect(self.scanButtonClicked)
        self.loadResultsButton.clicked.connect(self.actionLoadResults.trigger)
        self.addFolderButton.clicked.connect(self.actionAddFolder.trigger)
        self.removeFolderButton.clicked.connect(self.removeFolderButtonClicked)
        self.treeView.selectionModel().selectionChanged.connect(
            self.selectionChanged)
        self.app.recentResults.itemsChanged.connect(
            self._updateLoadResultsButton)
        self.recentFolders.itemsChanged.connect(self._updateAddButton)
        self.recentFolders.mustOpenItem.connect(self.app.model.add_directory)
        self.directoriesModel.foldersAdded.connect(
            self.directoriesModelAddedFolders)
        self.app.willSavePrefs.connect(self.appWillSavePrefs)

    def _setupActions(self):
        # (name, shortcut, icon, desc, func)
        ACTIONS = [
            ('actionLoadResults', 'Ctrl+L', '', tr("Load Results..."),
             self.loadResultsTriggered),
            ('actionShowResultsWindow', '', '', tr("Results Window"),
             self.app.showResultsWindow),
            ('actionAddFolder', '', '', tr("Add Folder..."),
             self.addFolderTriggered),
        ]
        createActions(ACTIONS, self)

    def _setupMenu(self):
        self.menubar = QMenuBar(self)
        self.menubar.setGeometry(QRect(0, 0, 42, 22))
        self.menuFile = QMenu(self.menubar)
        self.menuFile.setTitle(tr("File"))
        self.menuView = QMenu(self.menubar)
        self.menuView.setTitle(tr("View"))
        self.menuHelp = QMenu(self.menubar)
        self.menuHelp.setTitle(tr("Help"))
        self.menuLoadRecent = QMenu(self.menuFile)
        self.menuLoadRecent.setTitle(tr("Load Recent Results"))
        self.setMenuBar(self.menubar)

        self.menuFile.addAction(self.actionLoadResults)
        self.menuFile.addAction(self.menuLoadRecent.menuAction())
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.app.actionQuit)
        self.menuView.addAction(self.app.actionPreferences)
        self.menuView.addAction(self.actionShowResultsWindow)
        self.menuView.addAction(self.app.actionIgnoreList)
        self.menuHelp.addAction(self.app.actionShowHelp)
        self.menuHelp.addAction(self.app.actionRegister)
        self.menuHelp.addAction(self.app.actionCheckForUpdate)
        self.menuHelp.addAction(self.app.actionOpenDebugLog)
        self.menuHelp.addAction(self.app.actionAbout)

        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuView.menuAction())
        self.menubar.addAction(self.menuHelp.menuAction())

        # Recent folders menu
        self.menuRecentFolders = QMenu()
        self.menuRecentFolders.addAction(self.actionAddFolder)
        self.menuRecentFolders.addSeparator()

        # Recent results menu
        self.menuRecentResults = QMenu()
        self.menuRecentResults.addAction(self.actionLoadResults)
        self.menuRecentResults.addSeparator()

    def _setupUi(self):
        self.setWindowTitle(self.app.NAME)
        self.resize(420, 338)
        self.centralwidget = QWidget(self)
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.promptLabel = QLabel(
            tr("Select folders to scan and press \"Scan\"."),
            self.centralwidget)
        self.verticalLayout.addWidget(self.promptLabel)
        self.treeView = QTreeView(self.centralwidget)
        self.treeView.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.treeView.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.treeView.setAcceptDrops(True)
        triggers = QAbstractItemView.DoubleClicked|QAbstractItemView.EditKeyPressed\
            |QAbstractItemView.SelectedClicked
        self.treeView.setEditTriggers(triggers)
        self.treeView.setDragDropOverwriteMode(True)
        self.treeView.setDragDropMode(QAbstractItemView.DropOnly)
        self.treeView.setUniformRowHeights(True)
        self.verticalLayout.addWidget(self.treeView)
        self.horizontalLayout = QHBoxLayout()
        self.removeFolderButton = QPushButton(self.centralwidget)
        self.removeFolderButton.setIcon(QIcon(QPixmap(":/minus")))
        self.removeFolderButton.setShortcut("Del")
        self.horizontalLayout.addWidget(self.removeFolderButton)
        self.addFolderButton = QPushButton(self.centralwidget)
        self.addFolderButton.setIcon(QIcon(QPixmap(":/plus")))
        self.horizontalLayout.addWidget(self.addFolderButton)
        spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Expanding,
                                  QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem1)
        self.loadResultsButton = QPushButton(self.centralwidget)
        self.loadResultsButton.setText(tr("Load Results"))
        self.horizontalLayout.addWidget(self.loadResultsButton)
        self.scanButton = QPushButton(self.centralwidget)
        self.scanButton.setText(tr("Scan"))
        self.scanButton.setDefault(True)
        self.horizontalLayout.addWidget(self.scanButton)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.setCentralWidget(self.centralwidget)

        self._setupActions()
        self._setupMenu()

        if self.app.prefs.directoriesWindowRect is not None:
            self.setGeometry(self.app.prefs.directoriesWindowRect)
        else:
            moveToScreenCenter(self)

    def _setupColumns(self):
        header = self.treeView.header()
        header.setStretchLastSection(False)
        header.setResizeMode(0, QHeaderView.Stretch)
        header.setResizeMode(1, QHeaderView.Fixed)
        header.resizeSection(1, 100)

    def _updateAddButton(self):
        if self.recentFolders.isEmpty():
            self.addFolderButton.setMenu(None)
        else:
            self.addFolderButton.setMenu(self.menuRecentFolders)

    def _updateRemoveButton(self):
        indexes = self.treeView.selectedIndexes()
        if not indexes:
            self.removeFolderButton.setEnabled(False)
            return
        self.removeFolderButton.setEnabled(True)

    def _updateLoadResultsButton(self):
        if self.app.recentResults.isEmpty():
            self.loadResultsButton.setMenu(None)
        else:
            self.loadResultsButton.setMenu(self.menuRecentResults)

    #--- QWidget overrides
    def closeEvent(self, event):
        event.accept()
        if self.app.model.results.is_modified:
            title = tr("Unsaved results")
            msg = tr("You have unsaved results, do you really want to quit?")
            if not self.app.confirm(title, msg):
                event.ignore()
        if event.isAccepted():
            QApplication.quit()

    #--- Events
    def addFolderTriggered(self):
        title = tr("Select a folder to add to the scanning list")
        flags = QFileDialog.ShowDirsOnly
        dirpath = str(
            QFileDialog.getExistingDirectory(self, title, self.lastAddedFolder,
                                             flags))
        if not dirpath:
            return
        self.lastAddedFolder = dirpath
        self.app.model.add_directory(dirpath)
        self.recentFolders.insertItem(dirpath)

    def appWillSavePrefs(self):
        self.app.prefs.directoriesWindowRect = self.geometry()

    def directoriesModelAddedFolders(self, folders):
        for folder in folders:
            self.recentFolders.insertItem(folder)

    def loadResultsTriggered(self):
        title = tr("Select a results file to load")
        files = ';;'.join(
            [tr("dupeGuru Results (*.dupeguru)"),
             tr("All Files (*.*)")])
        destination = QFileDialog.getOpenFileName(self, title, '', files)
        if destination:
            self.app.model.load_from(destination)
            self.app.recentResults.insertItem(destination)

    def removeFolderButtonClicked(self):
        self.directoriesModel.model.remove_selected()

    def scanButtonClicked(self):
        if self.app.model.results.is_modified:
            title = tr("Start a new scan")
            msg = tr(
                "You have unsaved results, do you really want to continue?")
            if not self.app.confirm(title, msg):
                return
        self.app.model.start_scanning()

    def selectionChanged(self, selected, deselected):
        self._updateRemoveButton()
示例#31
0
文件: main.py 项目: eblot/ezsphinx
 def __init__(self, parent):
     QMenuBar.__init__(self, parent)
     # TBD: manage the size
     # self.setGeometry(QRect(0, 0, 929, 22))
     self.setObjectName("menubar")
     self.setNativeMenuBar(True)
示例#32
0
class FScan(QMainWindow):
    """This is the main windown of the xc2424scan software"""
    def __init__(self, parent=None):
        """Create a new main window
        
        @param parent: Parent widget
        @type parent: QWidget
        """
        QMainWindow.__init__(self, parent)
        self.setWindowTitle(
            _("Xerox WorkCentre C2424 Scanner Utility v%s") %
            version.__version__)

        # Get the software configuration (~/.xc2424scan) or show the config
        # dialog if there is no configuration file
        self.__config_ = Config()
        if self.__config_.address is None:
            if self.__show_config_() is False:
                sys.exit()
            self.__config_.reload()

        # Set the main widget
        self.__scanWidget_ = ScanWidget(self)
        self.setCentralWidget(self.__scanWidget_)

        self.__scanWidget_.connectToScanner(self.__config_.address,
                                            self.__config_.port)

        # Create the menu
        self.__setupMenu_()

    def __setupMenu_(self):
        """Used to create the default menu"""
        # Create the menu bar
        self.__menu_ = QMenuBar(self)
        self.setMenuBar(self.__menu_)

        # File
        self.menuFile = QMenu(self.__menu_)
        self.menuFile.setTitle(_("&File"))
        self.actionQuit = QAction(self)
        self.actionQuit.setText(_("&Quit"))
        self.actionQuit.setShortcut(_("Ctrl+Q"))
        self.menuFile.addAction(self.actionQuit)

        # Settings
        self.menuSettings = QMenu(self.__menu_)
        self.menuSettings.setTitle(_("&Settings"))
        self.actionConfigure = QAction(self)
        self.actionConfigure.setText(_("&Configure xc2424scan"))
        self.menuSettings.addAction(self.actionConfigure)

        # Add the menus to the menu
        self.__menu_.addAction(self.menuFile.menuAction())
        self.__menu_.addAction(self.menuSettings.menuAction())

        self.connect(self.actionQuit, SIGNAL("triggered(bool)"), self.close)
        self.connect(self.actionConfigure, SIGNAL("triggered(bool)"),
                     self.__change_config_)

    def __change_config_(self):
        """Called when the configuration has changed and we need to reconnect
        to the scanner"""
        if self.__show_config_():
            self.__scanWidget_.connectToScanner(self.__config_.address,
                                                self.__config_.port)

    def __show_config_(self):
        """Called when we need to show the config dialog
        
        @return: True if the config has changed, False otherwise
        @rtype: bool
        """
        fconfig = FScanConfig(self)
        fconfig.config.setAddress(self.__config_.address)
        fconfig.config.setPort(self.__config_.port)

        if fconfig.exec_() == QDialog.Accepted:
            self.__config_.address = fconfig.config.getAddress()
            self.__config_.port = fconfig.config.getPort()
            return True
        else:
            return False
示例#33
0
文件: db_manager.py 项目: jarped/QGIS
class DBManager(QMainWindow):

    def __init__(self, iface, parent=None):
        QMainWindow.__init__(self, parent)
        self.setAttribute(Qt.WA_DeleteOnClose)
        self.setupUi()
        self.iface = iface

        # restore the window state
        settings = QSettings()
        self.restoreGeometry(settings.value("/DB_Manager/mainWindow/geometry", QByteArray(), type=QByteArray))
        self.restoreState(settings.value("/DB_Manager/mainWindow/windowState", QByteArray(), type=QByteArray))

        self.connect(self.tabs, SIGNAL("currentChanged(int)"), self.tabChanged)
        self.connect(self.tree, SIGNAL("selectedItemChanged"), self.itemChanged)
        self.itemChanged(None)

    def closeEvent(self, e):
        self.unregisterAllActions()

        # save the window state
        settings = QSettings()
        settings.setValue("/DB_Manager/mainWindow/windowState", self.saveState())
        settings.setValue("/DB_Manager/mainWindow/geometry", self.saveGeometry())

        QMainWindow.closeEvent(self, e)

    def refreshItem(self, item=None):
        QApplication.setOverrideCursor(Qt.WaitCursor)
        try:
            if item is None:
                item = self.tree.currentItem()
            self.tree.refreshItem(item)  # refresh item children in the db tree
        except BaseError as e:
            DlgDbError.showError(e, self)
            return
        finally:
            QApplication.restoreOverrideCursor()

    def itemChanged(self, item):
        QApplication.setOverrideCursor(Qt.WaitCursor)
        try:
            self.reloadButtons()
            self.refreshTabs()
        except BaseError as e:
            DlgDbError.showError(e, self)
            return
        finally:
            QApplication.restoreOverrideCursor()

    def reloadButtons(self):
        db = self.tree.currentDatabase()
        if not hasattr(self, '_lastDb'):
            self._lastDb = db

        elif db == self._lastDb:
            return

        # remove old actions
        if self._lastDb is not None:
            self.unregisterAllActions()

        # add actions of the selected database
        self._lastDb = db
        if self._lastDb is not None:
            self._lastDb.registerAllActions(self)

    def tabChanged(self, index):
        QApplication.setOverrideCursor(Qt.WaitCursor)
        try:
            self.refreshTabs()
        except BaseError as e:
            DlgDbError.showError(e, self)
            return
        finally:
            QApplication.restoreOverrideCursor()

    def refreshTabs(self):
        index = self.tabs.currentIndex()
        item = self.tree.currentItem()
        table = self.tree.currentTable()

        # enable/disable tabs
        self.tabs.setTabEnabled(self.tabs.indexOf(self.table), table is not None)
        self.tabs.setTabEnabled(self.tabs.indexOf(self.preview), table is not None and table.type in [table.VectorType,
                                                                                                      table.RasterType] and table.geomColumn is not None)
        # show the info tab if the current tab is disabled
        if not self.tabs.isTabEnabled(index):
            self.tabs.setCurrentWidget(self.info)

        current_tab = self.tabs.currentWidget()
        if current_tab == self.info:
            self.info.showInfo(item)
        elif current_tab == self.table:
            self.table.loadData(item)
        elif current_tab == self.preview:
            self.preview.loadPreview(item)

    def refreshActionSlot(self):
        self.info.setDirty()
        self.table.setDirty()
        self.preview.setDirty()
        self.refreshItem()

    def importActionSlot(self):
        db = self.tree.currentDatabase()
        if db is None:
            self.infoBar.pushMessage(self.tr("No database selected or you are not connected to it."),
                                     QgsMessageBar.INFO, self.iface.messageTimeout())
            return

        outUri = db.uri()
        schema = self.tree.currentSchema()
        if schema:
            outUri.setDataSource(schema.name, "", "", "")

        from .dlg_import_vector import DlgImportVector

        dlg = DlgImportVector(None, db, outUri, self)
        dlg.exec_()

    def exportActionSlot(self):
        table = self.tree.currentTable()
        if table is None:
            self.infoBar.pushMessage(self.tr("Select the table you want export to file."), QgsMessageBar.INFO,
                                     self.iface.messageTimeout())
            return

        inLayer = table.toMapLayer()

        from .dlg_export_vector import DlgExportVector

        dlg = DlgExportVector(inLayer, table.database(), self)
        dlg.exec_()

        inLayer.deleteLater()

    def runSqlWindow(self):
        db = self.tree.currentDatabase()
        if db is None:
            self.infoBar.pushMessage(self.tr("No database selected or you are not connected to it."),
                                     QgsMessageBar.INFO, self.iface.messageTimeout())
            # force displaying of the message, it appears on the first tab (i.e. Info)
            self.tabs.setCurrentIndex(0)
            return

        from dlg_sql_window import DlgSqlWindow

        query = DlgSqlWindow(self.iface, db, self)
        dbname = db.connection().connectionName()
        tabname = self.tr("Query") + u" (%s)" % dbname
        index = self.tabs.addTab(query, tabname)
        self.tabs.setTabIcon(index, db.connection().icon())
        self.tabs.setCurrentIndex(index)
        query.nameChanged.connect(functools.partial(self.update_query_tab_name, index, dbname))

    def update_query_tab_name(self, index, dbname, queryname):
        if not queryname:
            queryname = self.tr("Query")
        tabname = u"%s (%s)" % (queryname, dbname)
        self.tabs.setTabText(index, tabname)

    def showSystemTables(self):
        self.tree.showSystemTables(self.actionShowSystemTables.isChecked())

    def registerAction(self, action, menuName, callback=None):
        """ register an action to the manager's main menu """
        if not hasattr(self, '_registeredDbActions'):
            self._registeredDbActions = {}

        if callback is not None:
            invoke_callback = lambda x: self.invokeCallback(callback)

        if menuName is None or menuName == "":
            self.addAction(action)

            if menuName not in self._registeredDbActions:
                self._registeredDbActions[menuName] = list()
            self._registeredDbActions[menuName].append(action)

            if callback is not None:
                QObject.connect(action, SIGNAL("triggered(bool)"), invoke_callback)
            return True

        # search for the menu
        actionMenu = None
        helpMenuAction = None
        for a in self.menuBar.actions():
            if not a.menu() or a.menu().title() != menuName:
                continue
            if a.menu() != self.menuHelp:
                helpMenuAction = a

            actionMenu = a
            break

        # not found, add a new menu before the help menu
        if actionMenu is None:
            menu = QMenu(menuName, self)
            if helpMenuAction is not None:
                actionMenu = self.menuBar.insertMenu(helpMenuAction, menu)
            else:
                actionMenu = self.menuBar.addMenu(menu)

        menu = actionMenu.menu()
        menuActions = menu.actions()

        # get the placeholder's position to insert before it
        pos = 0
        for pos in range(len(menuActions)):
            if menuActions[pos].isSeparator() and menuActions[pos].objectName().endswith("_placeholder"):
                menuActions[pos].setVisible(True)
                break

        if pos < len(menuActions):
            before = menuActions[pos]
            menu.insertAction(before, action)
        else:
            menu.addAction(action)

        actionMenu.setVisible(True)  # show the menu

        if menuName not in self._registeredDbActions:
            self._registeredDbActions[menuName] = list()
        self._registeredDbActions[menuName].append(action)

        if callback is not None:
            QObject.connect(action, SIGNAL("triggered(bool)"), invoke_callback)

        return True

    def invokeCallback(self, callback, *params):
        """ Call a method passing the selected item in the database tree,
                the sender (usually a QAction), the plugin mainWindow and
                optionally additional parameters.

                This method takes care to override and restore the cursor,
                but also catches exceptions and displays the error dialog.
        """
        QApplication.setOverrideCursor(Qt.WaitCursor)
        try:
            callback(self.tree.currentItem(), self.sender(), self, *params)

        except BaseError as e:
            # catch database errors and display the error dialog
            DlgDbError.showError(e, self)
            return

        finally:
            QApplication.restoreOverrideCursor()

    def unregisterAction(self, action, menuName):
        if not hasattr(self, '_registeredDbActions'):
            return

        if menuName is None or menuName == "":
            self.removeAction(action)

            if menuName in self._registeredDbActions:
                if self._registeredDbActions[menuName].count(action) > 0:
                    self._registeredDbActions[menuName].remove(action)

            action.deleteLater()
            return True

        for a in self.menuBar.actions():
            if not a.menu() or a.menu().title() != menuName:
                continue

            menu = a.menu()
            menuActions = menu.actions()

            menu.removeAction(action)
            if menu.isEmpty():  # hide the menu
                a.setVisible(False)

            if menuName in self._registeredDbActions:
                if self._registeredDbActions[menuName].count(action) > 0:
                    self._registeredDbActions[menuName].remove(action)

                # hide the placeholder if there're no other registered actions
                if len(self._registeredDbActions[menuName]) <= 0:
                    for i in range(len(menuActions)):
                        if menuActions[i].isSeparator() and menuActions[i].objectName().endswith("_placeholder"):
                            menuActions[i].setVisible(False)
                            break

            action.deleteLater()
            return True

        return False

    def unregisterAllActions(self):
        if not hasattr(self, '_registeredDbActions'):
            return

        for menuName in self._registeredDbActions:
            for action in list(self._registeredDbActions[menuName]):
                self.unregisterAction(action, menuName)
        del self._registeredDbActions

    def close_tab(self, index):
        widget = self.tabs.widget(index)
        if widget not in [self.info, self.table, self.preview]:
            self.tabs.removeTab(index)
            widget.deleteLater()

    def setupUi(self):
        self.setWindowTitle(self.tr("DB Manager"))
        self.setWindowIcon(QIcon(":/db_manager/icon"))
        self.resize(QSize(700, 500).expandedTo(self.minimumSizeHint()))

        # create central tab widget and add the first 3 tabs: info, table and preview
        self.tabs = QTabWidget()
        self.info = InfoViewer(self)
        self.tabs.addTab(self.info, self.tr("Info"))
        self.table = TableViewer(self)
        self.tabs.addTab(self.table, self.tr("Table"))
        self.preview = LayerPreview(self)
        self.tabs.addTab(self.preview, self.tr("Preview"))
        self.setCentralWidget(self.tabs)

        # display close button for all tabs but the first 3 ones, i.e.
        # HACK: just hide the close button where not needed (GS)
        self.tabs.setTabsClosable(True)
        self.tabs.tabCloseRequested.connect(self.close_tab)
        tabbar = self.tabs.tabBar()
        for i in range(3):
            btn = tabbar.tabButton(i, QTabBar.RightSide) if tabbar.tabButton(i, QTabBar.RightSide) else tabbar.tabButton(i, QTabBar.LeftSide)
            btn.resize(0, 0)
            btn.hide()

        # Creates layout for message bar
        self.layout = QGridLayout(self.info)
        self.layout.setContentsMargins(0, 0, 0, 0)
        spacerItem = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
        self.layout.addItem(spacerItem, 1, 0, 1, 1)
        # init messageBar instance
        self.infoBar = QgsMessageBar(self.info)
        sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
        self.infoBar.setSizePolicy(sizePolicy)
        self.layout.addWidget(self.infoBar, 0, 0, 1, 1)

        # create database tree
        self.dock = QDockWidget("Tree", self)
        self.dock.setObjectName("DB_Manager_DBView")
        self.dock.setFeatures(QDockWidget.DockWidgetMovable)
        self.tree = DBTree(self)
        self.dock.setWidget(self.tree)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock)

        # create status bar
        self.statusBar = QStatusBar(self)
        self.setStatusBar(self.statusBar)

        # create menus
        self.menuBar = QMenuBar(self)
        self.menuDb = QMenu(self.tr("&Database"), self)
        self.menuBar.addMenu(self.menuDb)
        self.menuSchema = QMenu(self.tr("&Schema"), self)
        actionMenuSchema = self.menuBar.addMenu(self.menuSchema)
        self.menuTable = QMenu(self.tr("&Table"), self)
        actionMenuTable = self.menuBar.addMenu(self.menuTable)
        self.menuHelp = None  # QMenu(self.tr("&Help"), self)
        # actionMenuHelp = self.menuBar.addMenu(self.menuHelp)

        self.setMenuBar(self.menuBar)

        # create toolbar
        self.toolBar = QToolBar("Default", self)
        self.toolBar.setObjectName("DB_Manager_ToolBar")
        self.addToolBar(self.toolBar)

        # create menus' actions

        # menu DATABASE
        sep = self.menuDb.addSeparator()
        sep.setObjectName("DB_Manager_DbMenu_placeholder")
        sep.setVisible(False)

        self.actionRefresh = self.menuDb.addAction(QIcon(":/db_manager/actions/refresh"), self.tr("&Refresh"),
                                                   self.refreshActionSlot, QKeySequence("F5"))
        self.actionSqlWindow = self.menuDb.addAction(QIcon(":/db_manager/actions/sql_window"), self.tr("&SQL window"),
                                                     self.runSqlWindow, QKeySequence("F2"))
        self.menuDb.addSeparator()
        self.actionClose = self.menuDb.addAction(QIcon(), self.tr("&Exit"), self.close, QKeySequence("CTRL+Q"))

        # menu SCHEMA
        sep = self.menuSchema.addSeparator()
        sep.setObjectName("DB_Manager_SchemaMenu_placeholder")
        sep.setVisible(False)

        actionMenuSchema.setVisible(False)

        # menu TABLE
        sep = self.menuTable.addSeparator()
        sep.setObjectName("DB_Manager_TableMenu_placeholder")
        sep.setVisible(False)

        self.actionImport = self.menuTable.addAction(QIcon(":/db_manager/actions/import"),
                                                     self.tr("&Import layer/file"), self.importActionSlot)
        self.actionExport = self.menuTable.addAction(QIcon(":/db_manager/actions/export"), self.tr("&Export to file"),
                                                     self.exportActionSlot)
        self.menuTable.addSeparator()
        #self.actionShowSystemTables = self.menuTable.addAction(self.tr("Show system tables/views"), self.showSystemTables)
        #self.actionShowSystemTables.setCheckable(True)
        #self.actionShowSystemTables.setChecked(True)
        actionMenuTable.setVisible(False)

        # add actions to the toolbar
        self.toolBar.addAction(self.actionRefresh)
        self.toolBar.addAction(self.actionSqlWindow)
        self.toolBar.addAction(self.actionImport)
        self.toolBar.addAction(self.actionExport)
示例#34
0
    def create_widget(self):
        """ Create the underlying menu bar widget.

        """
        # Qt behaves better when creating the menu bar without a parent.
        self.widget = QMenuBar()
示例#35
0
    def __init__(self, appid, base, name):
        super(BrowserWindow, self).__init__()

        self.appid = appid
        self.name = name
        self.original_name = name
        self.base = base

        # Main widgets
        self.centralwidget = QWidget(self)
        self.gridLayout_2 = QGridLayout(self.centralwidget)
        self.setCentralWidget(self.centralwidget)
        self.urlLineEdit = QLineEdit(self)
        self.progressBar = QProgressBar(self)

        # Custom webview
        self.page = LocalWebPage()
        self.page.setFeaturePermission(self.page.mainFrame(),
                                       LocalWebPage.Notifications,
                                       LocalWebPage.PermissionGrantedByUser)
        self.webkitNotifications = WebkitNotifications(self)

        self.webViewMain = LocalWebView(self.centralwidget)
        self.webViewMain.setPage(self.page)
        self.gridLayout_2.addWidget(self.webViewMain, 0, 0, 1, 1)

        self.webViewMain.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_2.setContentsMargins(0, 0, 0, 0)

        self.menubar = QMenuBar(self)
        self.menuFile = QMenu(self.menubar)
        self.menuView = QMenu(self.menubar)
        self.menuEdit = QMenu(self.menubar)
        self.menuHelp = QMenu(self.menubar)
        self.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(self)
        self.setStatusBar(self.statusbar)
        self.toolBar = QToolBar(self)
        self.toolBar.setMovable(False)
        self.toolBar.setFloatable(False)
        self.addToolBar(Qt.TopToolBarArea, self.toolBar)

        # Create actions
        self.actionOpenLinkInNewWindow = self.page.action(
            self.page.OpenLinkInNewWindow)
        self.actionOpenLinkInNewWindow.setText(
            tr('BrowserWindow', 'Open in &Browser'))
        self.actionBack = self.page.action(self.page.Back)
        self.actionForward = self.page.action(self.page.Forward)
        self.actionStop = self.page.action(self.page.Stop)
        self.actionReload = self.page.action(self.page.Reload)
        self.actionHome = QAction(self)
        self.actionShowMenu = QAction(self)
        self.actionShowMenu.setCheckable(True)
        self.actionShowToolbar = QAction(self)
        self.actionShowToolbar.setCheckable(True)
        self.actionClose = QAction(self)
        self.actionModifyWebapp = QAction(self)
        self.actionEditPreferences = QAction(self)
        self.actionPrint = QAction(self)
        self.actionSaveLink = self.page.action(self.page.DownloadLinkToDisk)
        self.actionSaveLink.setEnabled(False)
        self.actionAbout = QAction(self)

        # Populate menu and toolbars
        self.menuFile.addAction(self.actionHome)
        self.menuFile.addAction(self.actionBack)
        self.menuFile.addAction(self.actionForward)
        self.menuFile.addAction(self.actionStop)
        self.menuFile.addAction(self.actionReload)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.actionPrint)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.actionClose)
        self.menuView.addAction(self.actionShowMenu)
        self.menuView.addAction(self.actionShowToolbar)
        self.menuView.addSeparator()
        self.menuEdit.addAction(self.actionModifyWebapp)
        #self.menuEdit.addAction(self.actionEditPreferences)
        self.menuHelp.addAction(self.actionAbout)
        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuEdit.menuAction())
        self.menubar.addAction(self.menuView.menuAction())
        self.menubar.addAction(self.menuHelp.menuAction())
        self.toolBar.addAction(self.actionHome)
        self.toolBar.addAction(self.actionBack)
        self.toolBar.addAction(self.actionForward)
        self.toolBar.addWidget(self.urlLineEdit)

        self.toolBar.addAction(self.actionStop)
        self.toolBar.addAction(self.actionReload)

        self.retranslateUi()
        QMetaObject.connectSlotsByName(self)

        self.setWindowTitle(self.name)

        # Set up cookie jar that persists sessions
        self.cookieJar = PersistableCookieJar(self, identifier=self.appid)
        self.cookieJar.load()
        self.webViewMain.page().networkAccessManager().setCookieJar(
            self.cookieJar)

        # Set up link delegation so that external links open in web browser.
        self.webViewMain.page().setLinkDelegationPolicy(
            QWebPage.DelegateExternalLinks)

        self.desktopEntry = desktop.getEntry(self.appid)

        # Set icons for actions; this can't be done in the designer, AFAICT
        self.actionHome.setIcon(QIcon.fromTheme('go-home'))
        self.actionAbout.setIcon(QIcon.fromTheme('help-about'))

        # Set up shortcuts
        self.actionStop.setShortcut(Qt.Key_Escape)
        self.actionBack.setShortcut(QKeySequence.Back)
        self.actionForward.setShortcut(QKeySequence.Forward)
        self.actionReload.setShortcut(QKeySequence.Refresh)
        self.actionHome.setShortcut('Ctrl+Home')
        self.actionShowMenu.setShortcut('Ctrl+m')
        self.actionShowToolbar.setShortcut('Ctrl+t')
        self.actionPrint.setShortcut(QKeySequence.Print)

        self.backShortcut = QShortcut(self)
        self.backShortcut.setKey(Qt.Key_Back)
        self.backShortcut.activated.connect(self.webViewMain.back)

        self.forwardShortcut = QShortcut(self)
        self.forwardShortcut.setKey(Qt.Key_Forward)
        self.forwardShortcut.activated.connect(self.webViewMain.forward)

        # Set up context menu
        self.webViewMain.setContextMenuPolicy(Qt.CustomContextMenu)
        self.webViewMain.customContextMenuRequested.connect(self.showMenu)

        # Setup statusbar and toolbar
        for c in self.statusBar().children()[0].children():
            c.removeWidget(c)
        self.statusBar().addPermanentWidget(self.progressBar, 1)

        self.actionShowToolbar.setChecked(True)
        self.actionShowMenu.setChecked(True)

        # Icon
        if self.desktopEntry.hasKey('Icon'):
            self.icon = QIcon(self.desktopEntry.get('Icon'))
            self.setWindowIcon(self.icon)
        else:
            self.webViewMain.iconChanged.connect(self.setWindowIcon)

        # Set up events
        if self.desktopEntry.get('X-%s-menu-enabled' % APP_NAME) == '0':
            self.actionShowMenu.setChecked(False)
        else:
            self.actionShowMenu.setChecked(True)
        if self.desktopEntry.get('X-%s-toolbar-enabled' % APP_NAME) == '0':
            self.actionShowToolbar.setChecked(False)
        else:
            self.actionShowToolbar.setChecked(True)

        self.webViewMain.linkClicked.connect(self._onLinkClick)
        self.webViewMain.titleChanged.connect(self.setWindowTitle)
        self.webViewMain.loadProgress.connect(self._setLoadingStatus)
        self.webViewMain.urlChanged.connect(
            lambda x: self.urlLineEdit.setText(x.toString()))
        self.page.printRequested.connect(self._onPrint)
        self.page.loadFinished.connect(self._loadingFinished)
        self.actionHome.triggered.connect(
            lambda x: self.webViewMain.load(QUrl(self.base)))
        self.actionClose.triggered.connect(self.close)
        self.actionPrint.triggered.connect(self._onPrint)
        self.urlLineEdit.returnPressed.connect(self._onUrlEdit)
        self.actionShowToolbar.triggered.connect(self._onShowToolbar)
        self.actionShowMenu.triggered.connect(self._onShowMenu)
        self.actionAbout.triggered.connect(lambda x: about.show(self))
        self.actionModifyWebapp.triggered.connect(self._onModify)

        self._onShowMenu()
        self._onShowToolbar()

        try:
            self.resize(int(self.desktopEntry.getWindowWidth()),
                        int(self.desktopEntry.getWindowHeight()))
        except (ValueError, TypeError):
            self.resize(800, 600)

        # Load first page
        self.webViewMain.load(QUrl(base))

        self.editor = SiteEditorWindow(self.desktopEntry, isNew=False)
示例#36
0
    def __init__(self, panel = None, *contenu): # parent : wxgeometrie (Frame principal)
        QMenuBar.__init__(self)
        self.panel = panel
        self.parent = panel.parent
        self.canvas = panel.canvas
        self.fenetre = self.parent.parent
##        self.historique = panel.historique
##        self.commande = panel.commande

        def canparam(parametre):
            return partial(attrgetter(parametre), self.canvas)
        IDEM = True
        # Menus predefinis:
        self.menus = {

"nouveau":  [u"Nouveau", u"Créer un nouveau fichier.", u"Ctrl+N", self.parent.NewFile],
"ouvrir":   [u"Ouvrir", u"Ouvrir un fichier.", u"Ctrl+O", self.parent.OpenFile],
"ouvrir ici":   [u"Ouvrir ici", u"Essayer d'ouvrir le fichier dans le module courant.", u"Alt+Ctrl+O", self.parent.OpenFileHere],
"enregistrer":  [u"Enregistrer", u"Enregistrer le document.", u"Ctrl+S", self.parent.SaveFile],
"enregistrer_sous":  [u"Enregistrer sous...", u"Enregistrer le document sous un nouveau nom.", u"Alt+Ctrl+S", self.parent.SaveFileAs],
"exporter": [u"Exporter...", u"Exporter l'image.", u"Ctrl+E", self.parent.ExportFile],
"exporter&sauver": [u"Exporter et sauver", u"Exporter l'image, et sauvegarder le document.", u"Alt+Ctrl+E", self.parent.ExportAndSaveFile],
##"mise en page": [u"Paramètres d'impression", u"Régler les paramètres d'impression.", None, self.parent.PageSetup],
"session":  [u"Sessions",
                [u'Nouvelle session', u'Réinitialiser la session.', None, self.parent.NouvelleSession],
                [u'Session précédente', u'Recharger la session précédente.', None, self.parent.ChargerSessionPrecedente],
                [u'Ouvrir la session...', u'Charger une autre session.', None, self.parent.ChargerSession],
                [u'Enregistrer sous...', u'Enregistrer la session actuelle.', None, self.parent.SauverSession],
            ],
"imprimer": [u"Imprimer", u"Imprimer la figure géométrique courante.", u"Ctrl+P", self.parent.Printout],
"proprietes": [u"Propriétés", u"Modifier les informations relatives au document", None, self.parent.Proprietes],
"fermer":   [u"Fermer", u"Fermer la feuille courante.", u"Ctrl+W", self.parent.CloseFile],
"quitter":  [u"Quitter", u"Fermer le programme.", u"Alt+F4", self.parent.parent.close],



"onglet":   [u"Onglet suivant", u"Changer d'onglet.", u"Ctrl+TAB", self.parent.onglet_suivant],
"plein_ecran": [u"Plein écran", u"Passer en mode plein écran ou revenir en mode normal.", u"F11", self.parent.parent.plein_ecran],
"debug":    [u"Déboguer", u"Déboguer le programme (afficher les erreurs, ...).", None, self.fenetre.mode_debug, self.fenetre.mode_debug],
"ligne_commande":    [u"Afficher la ligne de commande", u"Afficher la ligne de commande.", None, self.fenetre.afficher_ligne_commande, self.fenetre.afficher_ligne_commande],
"options":  [u"Options", u"Paramètres du programme.", None, self.parent.Options],

"aide":     [u"Aide", u"Obtenir de l'aide sur le programme.", None, self.parent.Aide],
"infos":    [u"Configuration", u"Visualiser la configuration actuelle du système.", None, self.parent.Informations],
"contact":  [u"Signaler un problème", u"Envoyer un rapport de bug.", None, self.parent.Contacter],
"versions":    [u"Rechercher des mises à jour", u"Vérifier si une nouvelle version est disponible.", None, self.parent.gestionnaire_de_mises_a_jour.verifier_version],
"about":    [u"A propos...", u"WxGeometrie (c) 2005-2007 Nicolas Pourcelot - License : GPL version 2", None, self.parent.About],

        }


        self.menus["fichier"] = ["Fichier", ["nouveau"], ["ouvrir"], ["ouvrir ici"],
                                None, ["enregistrer"], ["enregistrer_sous"],
                                ["exporter"], ["exporter&sauver"], None, ['session'],
                                None, ["imprimer"], None, ["fermer"], ["quitter"]]


        self.menus["avance1"] = [u"Avancé", [u"historique"], [u"ligne_commande"], [u"debug"]]
        self.menus["avance2"] = [u"Avancé", [u"ligne_commande"], ["debug"]]

        self.menus["?"] = ["?", ["aide"], ["infos"], ["contact"], None, ["versions"], None, ["about"]]



        if self.canvas:
            self.menus.update({
"annuler":  [u"Annuler", u"Annuler la dernière action.", u"Ctrl+Z", self.panel.annuler],
"refaire":  [u"Refaire", u"Refait la dernière action annulée.", u"Ctrl+Y", self.panel.retablir],
"historique":   [u"Contenu interne de la feuille", u"Édition du contenu interne de la feuille.", u"Ctrl+H", self.parent.Histo],
"presse-papier": [u"Copier dans le presse-papier", u"Copier l'image dans le presse-papier.", None, self.canvas.Copy_to_Clipboard],
"barre_outils": [u"Afficher la barre d'outils", u"Afficher la barre d'outils de dessin en haut de la fenêtre.", None, self.panel.afficher_barre_outils, IDEM],
"console_geolib": [u"Afficher la ligne de commande", u"Afficher la ligne de commande en bas de la fenêtre.", None, self.panel.afficher_console_geolib, IDEM],
"repere":   [u"Afficher le repère", u"Afficher le repère et les axes.", None, self.canvas.gerer_parametre_afficher_axes, canparam("afficher_axes")],
"quadrillage":      [u"Afficher le quadrillage", u"Afficher le quadrillage.", None, self.canvas.gerer_parametre_afficher_quadrillage, canparam('afficher_quadrillage')],
"orthonorme":      [u"Repère orthonormé", u"Garder un repère toujours orthonormé.", None, self.canvas.gerer_parametre_orthonorme, canparam('orthonorme')],
"aimanter":      [u"Aimanter la grille", u"Forcer les points à se placer sur la grille.", None, self.canvas.gerer_parametre_grille_aimantee, canparam('grille_aimantee')],

"reperage": [u"Repérage",
                [u"par des points", u"Repérage par l'origine et 2 points.", None, self.canvas.repere_OIJ],
                [u"par des vecteurs", u"Repérage par l'origine et les 2 vecteurs de base.", None, self.canvas.repere_Oij],
                [u"par des valeurs numériques", u"Graduation numérique des axes", None, self.canvas.repere_011],
                [u"Personnaliser le repère", u"Personnaliser l'affichage du repère, et les graduations", "Ctrl+Alt+R", self.canvas.regler_repere],
            ],

"quadrillages":  [u"Quadrillage",
                    [u"Par défaut", u"Rétablir le quadrillage par défaut.", None, self.canvas.quadrillage_defaut],
                    [u"Graduations intermédiaires", u"Ajouter un quadrillage intermédiaire entre deux graduations.", None, self.canvas.quadrillage_demigraduation],
                    [u"Graduations intermédiaires (coloré)", u"jouter un quadrillage intermédiaire entre deux graduations (version colorée).", None, self.canvas.quadrillage_demigraduation_colore],
                    [u"Papier millimétré", u"Créer un papier millimétré.", None, self.canvas.quadrillage_millimetre],
                    [u"Papier millimétré coloré", u"Créer un papier millimétré coloré.", None, self.canvas.quadrillage_millimetre_colore],
                ],

"zoom_texte": [u"Zoom texte",
                    [u"100 %", u"Afficher les textes à leur taille par défaut.", None, partial(self.canvas.zoom_text, valeur=100)],
                    None,
                    [u"50 %", u"Réduire les textes à 50 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=50)],
                    [u"60 %", u"Réduire les textes à 60 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=60)],
                    [u"70 %", u"Réduire les textes à 70 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=70)],
                    [u"80 %", u"Réduire les textes à 80 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=80)],
                    [u"90 %", u"Réduire les textes à 90 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=90)],
                    None,
                    [u"120 %", u"Agrandir les textes à 120 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=120)],
                    [u"140 %", u"Agrandir les textes à 140 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=140)],
                    [u"160 %", u"Agrandir les textes à 160 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=160)],
                    [u"180 %", u"Agrandir les textes à 180 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=180)],
                    [u"200 %", u"Agrandir les textes à 200 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=200)],
               ],

"zoom_ligne": [u"Zoom ligne",
                    [u"100 %", u"Afficher les lignes à leur taille par défaut.", None, partial(self.canvas.zoom_line, valeur=100)],
                    None,
                    [u"50 %", u"Réduire les lignes à 50 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=50)],
                    [u"60 %", u"Réduire les lignes à 60 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=60)],
                    [u"70 %", u"Réduire les lignes à 70 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=70)],
                    [u"80 %", u"Réduire les lignes à 80 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=80)],
                    [u"90 %", u"Réduire les lignes à 90 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=90)],
                    None,
                    [u"120 %", u"Agrandir les lignes à 120 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=120)],
                    [u"140 %", u"Agrandir les lignes à 140 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=140)],
                    [u"160 %", u"Agrandir les lignes à 160 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=160)],
                    [u"180 %", u"Agrandir les lignes à 180 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=180)],
                    [u"200 %", u"Agrandir les lignes à 200 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=200)],
               ],

"zoom_general": [u"Zoom général",
                    [u"Mode normal", u"Affichage par défaut.", None, self.canvas.zoom_normal],
                    [u"Léger grossissement", u"Textes et lignes (un peu) grossis.", None, self.canvas.zoom_large],
                    None,
                    [u"Mode vidéoprojecteur (grossissement)", u"Réglage adapté à la vidéoprojection (textes et lignes grossis).", None, self.canvas. zoom_videoprojecteur],
                    [u"Mode vidéoprojecteur accentué", u"Grossissement très important des objets.", None, self.canvas. zoom_videoprojecteur_large],
               ],

"fenetre":  [u"Réglage de la fenêtre", u"Réglage de la fenêtre d'affichage.", u"Alt+Ctrl+F", self.parent.creer["Fenetre"]],
"zoomer":   [u"Zoomer", u"Se rapprocher de la figure.", u"Ctrl+PGUP", self.canvas.zoom_in],
"dezoomer": [u"Dézoomer", u"S'éloigner de la figure.", u"Ctrl+PGDOWN", self.canvas.zoom_out],
"orthonormaliser":  [u"Orthonormaliser", u"Obtenir un repère orthonormal.", u"Alt+Ctrl+O", self.canvas.orthonormer],
"zoom_auto":  [u"Zoom intelligent", u"Réglage automatique de la fenêtre d'affichage.", u"Alt+Ctrl+A", self.canvas.zoom_auto],

"modifier": [u"Modifier", u"Editer les propriétes d'un ou plusieurs objets géométriques.", u"Ctrl+M", self.parent.editer],
"supprimer":[u"Supprimer", u"Supprime un ou plusieurs objets géométriques.", u"Ctrl+DEL", self.parent.supprimer],

"coder":    [u"Codage automatique", u"Codage automatique de la figure.", u"Alt+Ctrl+C", self.canvas.coder],
"decoder":  [u"Effacer le codage", u"Supprimer le codage de la figure.", u"Alt+Ctrl+D", self.canvas.decoder],
"traces":   [u"Effacer les traces", u"Supprimer toutes les traces de la figure (laisse les objets en mode Trace).", None, self.canvas.effacer_traces],
##"detecter": [u"Détecter les objets cachés", u"Signaler la présence des objets cachés au passage du pointeur.", None, self.canvas.detecter_caches, self.canvas.detecter_caches],
"detecter": [u"Afficher les objets cachés", u"Afficher en semi-transparent les objets cachés.", None, self.canvas.gerer_parametre_afficher_objets_caches, canparam('afficher_objets_caches')],
"nettoyer": [u"Supprimer les objets inutiles", u"Supprimer les objets cachés qui ne servent pas pour la construction.", None, self.canvas.nettoyer_feuille],
"animer":   [u"Créer une animation", u"Faire varier automatiquement une valeur.", None, self.parent.Animer],




"affichage": [u"Affichage", ["onglet"], ["plein_ecran"], None, ["barre_outils"], ["console_geolib"], None, ["repere"], ["quadrillage"], ["orthonorme"], ["reperage"], ["quadrillages"], None, ["zoom_texte"], ["zoom_ligne"], ["zoom_general"], None, ["fenetre"], ["zoomer"], ["dezoomer"], ["orthonormaliser"], [u"zoom_auto"]],

"autres":    [u"Autres actions", [u"coder"], [u"decoder"], [u"traces"], None, [u"detecter"], [u"nettoyer"], None, [u"animer"], [u"aimanter"]],


"creer":    [u"Créer",
                [u"Points",
                    [u"Point libre", u"Point quelconque.", u"Ctrl+L", self.parent.creer["Point"]],
                    [u"Milieu", u"Milieu d'un segment.", None, self.parent.creer["Milieu"]],
                    [u"Barycentre", u"Barycentre de n points.", u"Ctrl+B", self.parent.creer["Barycentre"]],
                    [u"Point final", u"Point défini par une relation vectorielle.", u"Ctrl+F", self.parent.creer["PointFinal"]],
                    [u"Point sur droite", u"Point appartenant à une droite.", None, self.parent.creer["GlisseurDroite"]],
                    [u"Point sur segment", u"Point appartenant à un segment.", None, self.parent.creer["GlisseurSegment"]],
                    [u"Point sur cercle", u"Point appartenant à un cercle.", None, self.parent.creer["GlisseurCercle"]],
                ],
                [u"Intersections",
                    [u"Intersection de deux droites", u"Point défini par l'intersection de deux droites (ou demi-droites, ou segments).", u"Ctrl+I", self.parent.creer["InterDroites"]],
                    [u"Intersection d'une droite et d'un cercle", u"Point défini par l'intersection d'une droite et d'un cercle.", u"Alt+Ctrl+I", self.parent.creer["InterDroiteCercle"]],
                    [u"Intersection de deux cercles", u"Point défini par l'intersection de deux cercles (ou arcs de cercles).", None,  self.parent.creer["InterCercles"]],
                ],
                [u"Centres",
                    [u"Centre d'un cercle", u"Centre d'un cercle.", None, self.parent.creer["Centre"]],
                    [u"Centre de gravité", u"Centre de gravite d'un triangle (intersection des médianes).", None, self.parent.creer["CentreGravite"]],
                    [u"Orthocentre", u"Orthocentre d'un triangle (intersection des hauteurs).", None, self.parent.creer["Orthocentre"]],
                    [u"Centre du cercle circonscrit", u"Centre du cercle circonscrit d'un triangle (intersection des médiatrices).", None, self.parent.creer["CentreCercleCirconscrit"]],
                    [u"Centre du cercle inscrit", u"Centre du cercle inscrit d'un triangle (intersection des bissectrices).", None, self.parent.creer["CentreCercleInscrit"]],
                ],
                [u"Lignes",
                    [u"Segment", u"Segment défini par deux points.", u"Ctrl+G", self.parent.creer["Segment"]],
                    None,
                    [u"Droite", u"Droite définie par deux points.", u"Ctrl+D", self.parent.creer["Droite"]],
                    [u"Demi-droite", u"Demi-droite définie par son origine et un autre point.", None, self.parent.creer["Demidroite"]],
                    None,
                    [u"Vecteur", u"Vecteur défini par deux points.", u"Ctrl+U", self.parent.creer["Vecteur"]],
                    [u"Vecteur libre", u"Vecteur défini par ses coordonnées.", None, self.parent.creer["VecteurLibre"]],
                    [u"Representant", u"Représentant d'origine donnée d'un vecteur.", None, self.parent.creer["Representant"]],
                    None,
                    [u"Parallèle", u"Parallèle à une droite passant par un point.", None, self.parent.creer["Parallele"]],
                    [u"Perpendiculaire", u"Perpendiculaire à une droite passant par un point.", None, self.parent.creer["Perpendiculaire"]],
                    [u"Médiatrice", u"Médiatrice d'un segment.", None, self.parent.creer["Mediatrice"]],
                    [u"Bissectrice", u"Bissectrice d'un angle.", None, self.parent.creer["Bissectrice"]],
                    [u"Tangente", u"Tangente à un cercle.", None, self.parent.creer["Tangente"]],
                ],
                [u"Cercles",
                    [u"Cercle défini par son centre et un point", u"Cercle défini par son centre et un autre point.", u"Ctrl+K", self.parent.creer["Cercle"]],
                    [u"Cercle défini par son centre et son rayon", u"Cercle défini par son centre et la valeur de son rayon.", u"Ctrl+R", self.parent.creer["CercleRayon"]],
                    [u"Cercle défini par un diamètre", u"Cercle défini par deux points diamétralement opposés.", None, self.parent.creer["CercleDiametre"]],
                    [u"Cercle défini par 3 points", u"Cercle défini par trois points.", None, self.parent.creer["CerclePoints"]],
                    None,
                    [u"Arc de centre donné", u"Arc de sens direct, défini par son centre, son origine, et un autre point.", None, self.parent.creer["ArcCercle"]],
                    [u"Arc défini par 3 points", u"Arc défini par ses extrémités, et un point intermédiaire.", None, self.parent.creer["ArcPoints"]],
                    [u"Arc orienté", u"Arc orienté, défini par ses extrémités, et un point intermédiaire.", None, self.parent.creer["ArcOriente"]],
                    [u"Demi-cercle", u"Demi-cercle de diamètre donné, de sens direct.", None, self.parent.creer["DemiCercle"]],
                    None,
                    [u"Disque", u"Disque circonscrit par un cercle donné.", None, self.parent.creer["Disque"]],
                ],
                [u"Polygones",
                    [u"Triangle", u"Triangle défini par ses sommets.", None, self.parent.creer["Triangle"]],
                    [u"Polygone quelconque", u"Polygone quelconque, défini par ses sommets.", None, self.parent.creer["Polygone"]],
                    [u"Parallélogramme", u"Parallélogramme de sens direct défini par 3 sommets.", None, self.parent.creer["Parallelogramme"]],
                    [u"Polygone régulier", u"Polygone régulier de sens direct défini par 2 sommets consécutifs.", None, self.parent.creer["PolygoneRegulier"]],
                    [u"Polygone régulier de centre donné", u"Polygone régulier défini son centre et un sommet.", None, self.parent.creer["PolygoneRegulierCentre"]],
                ],
                [u"Interpolation",
                    [u"Interpolation linéaire", u"Ligné brisée reliant les points désignés.", None, self.parent.creer["InterpolationLineaire"]],
                    [u"Interpolation quadratique", u"Courbe lisse (ie. de classe C1) reliant les points désignés.", None, self.parent.creer["InterpolationQuadratique"]],
                ],
                [u"Angles",
                    [u"Angle", u"Angle non orienté défini par trois points.", None, self.parent.creer["Angle"]],
                    [u"Angle orienté", u"Angle orienté défini par trois points.", None, self.parent.creer["AngleOriente"]],
                    [u"Angle orienté (non affiché)", u"Angle orienté (non affiché) défini par 2 vecteurs.", None, self.parent.creer["AngleVectoriel"]],
                    [u"Angle libre (non affiché)", u"Angle orienté (non affiché) défini par 2 vecteurs.", None, self.parent.creer["AngleLibre"]],

                ],
                [u"Transformations",
                    [u"Translation", u"Translation de vecteur donné.", None, self.parent.creer["Translation"]],
                    [u"Symétrie centrale", u"Symétrie par rapport à un point.", None, self.parent.creer["SymetrieCentrale"]],
                    [u"Symétrie axiale", u"Symétrie par rapport à une droite.", None, self.parent.creer["Reflexion"]],
                    [u"Rotation", u"Rotation de centre et d'angle donnés.", None, self.parent.creer["Rotation"]],
                    [u"Homothétie", u"Translation de vecteur donné.", None, self.parent.creer["Homothetie"]],
                    None,
                    [u"Image par transformation", u"Créer l'image d'un objet par une transformation géométrique.", None, self.parent.creer["Image"]],
                ],
                [u"Divers",
                    [u"Texte", u"Champ de texte.", None, self.parent.creer["Texte"]],
                    [u"Variable", u"Variable liée ou non.", None, self.parent.creer["Variable"]],
                ],
            ]

            })


        for item in contenu:
            self.ajouter(*item)
示例#37
0
class MainWindow(QMainWindow, object):
    """
    QMainWindow displays pipeline
    Parameters
    ----------
    port : str
        used port to communicate with pipeline
        Note: The firewall must be configure to accept input/output on this port
    """
    def __init__(self, port):
        super(MainWindow, self).__init__()
        self.setupUi(port)

    def setupUi(self, port):
        self.setObjectName("MainWindow")
        self.resize(600, 600)
        self.centralwidget = QWidget(self)
        p = self.centralwidget.palette()
        self.centralwidget.setAutoFillBackground(True)
        p.setColor(self.centralwidget.backgroundRole(), QColor(126, 135, 152))
        self.centralwidget.setPalette(p)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(self)
        self.menubar.setGeometry(QRect(0, 0, 808, 25))
        self.menubar.setObjectName("menubar")
        self.menuFile = QMenu(self.menubar)
        self.menuFile.setObjectName("menuFile")
        self.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(self)
        self.statusbar.setObjectName("statusbar")
        self.setStatusBar(self.statusbar)
        self.actionQuit = QAction(self)
        self.actionQuit.setObjectName("actionQuit")
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.actionQuit)
        self.menubar.addAction(self.menuFile.menuAction())
        self.actionReset = QAction(self)
        self.actionReset.setObjectName("reset")
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.actionReset)
        self.menubar.addAction(self.menuFile.menuAction())
        # add other GUI objects
        self.graph_widget = GraphWidget(self.statusbar)
        self.gridLayout.addWidget(self.graph_widget, 1, 11, 10, 10)
        pixmap = QPixmap(':/images/cta-logo-mini.png')
        lbl = QLabel()
        lbl.setPixmap(pixmap)
        self.gridLayout.addWidget(lbl, 0, 0)
        p = self.graph_widget.palette()
        self.graph_widget.setAutoFillBackground(True)
        p.setColor(self.graph_widget.backgroundRole(),
                   QColor(255, 255, 255))  # QColor(226, 235, 252))
        self.graph_widget.setPalette(p)
        self.quitButton = QPushButton()  # self.centralwidget)
        self.quitButton.setObjectName("quitButton")
        self.quitButton.setText(
            QApplication.translate("MainWindow", "Quit", None,
                                   QApplication.UnicodeUTF8))
        self.gridLayout.addWidget(self.quitButton, 12, 0, 1, 1)
        self.info_label = InfoLabel(0, 4)
        self.info_label.setAutoFillBackground(True)
        self.gridLayout.addWidget(self.info_label, 1, 0, 1, 5)
        #self.info_label.setAlignment(PyQt4.Qt.AlignCenter);
        palette = QPalette()
        palette.setColor(self.info_label.backgroundRole(), Qt.lightGray)
        self.info_label.setPalette(palette)
        QObject.connect(self.quitButton, SIGNAL("clicked()"), self.stop)
        QObject.connect(self.actionQuit, SIGNAL("triggered()"), self.stop)
        QMetaObject.connectSlotsByName(self)
        self.retranslateUi()
        QObject.connect(self.actionQuit, SIGNAL("triggered()"), self.close)
        QMetaObject.connectSlotsByName(self)
        # Create GuiConnexion for ZMQ comminucation with pipeline
        self.guiconnection = GuiConnexion(gui_port=port,
                                          statusBar=self.statusbar)
        self.guiconnection.message.connect(self.graph_widget.pipechange)
        self.guiconnection.message.connect(self.info_label.pipechange)
        self.guiconnection.reset_message.connect(self.graph_widget.reset)
        self.guiconnection.reset_message.connect(self.info_label.reset)
        self.guiconnection.mode_message.connect(self.info_label.mode_receive)
        QObject.connect(self.actionReset, SIGNAL("triggered()"),
                        self.guiconnection.reset)
        QMetaObject.connectSlotsByName(self)
        # start the process
        self.guiconnection.start()

    def retranslateUi(self):
        self.setWindowTitle(
            QApplication.translate("ctapipe flow based GUI",
                                   "ctapipe flow based GUI", None,
                                   QApplication.UnicodeUTF8))
        self.menuFile.setTitle(
            QApplication.translate("MainWindow", "File", None,
                                   QApplication.UnicodeUTF8))
        self.actionQuit.setText(
            QApplication.translate("MainWindow", "Quit", None,
                                   QApplication.UnicodeUTF8))
        self.actionReset.setText(
            QApplication.translate("MainWindow", "Reset", None,
                                   QApplication.UnicodeUTF8))

    def stop(self):
        """Method connect (via Qt slot) to exit button
        Stops self.guiconnection (for ZMQ communication) process.
        Close main_windows
        """
        self.guiconnection.finish()
        self.guiconnection.join()
        self.close()

    def closeEvent(self, event):
        self.guiconnection.finish()
        self.guiconnection.join()
        event.accept()  # let the window close
示例#38
0
文件: db_manager.py 项目: jarped/QGIS
    def setupUi(self):
        self.setWindowTitle(self.tr("DB Manager"))
        self.setWindowIcon(QIcon(":/db_manager/icon"))
        self.resize(QSize(700, 500).expandedTo(self.minimumSizeHint()))

        # create central tab widget and add the first 3 tabs: info, table and preview
        self.tabs = QTabWidget()
        self.info = InfoViewer(self)
        self.tabs.addTab(self.info, self.tr("Info"))
        self.table = TableViewer(self)
        self.tabs.addTab(self.table, self.tr("Table"))
        self.preview = LayerPreview(self)
        self.tabs.addTab(self.preview, self.tr("Preview"))
        self.setCentralWidget(self.tabs)

        # display close button for all tabs but the first 3 ones, i.e.
        # HACK: just hide the close button where not needed (GS)
        self.tabs.setTabsClosable(True)
        self.tabs.tabCloseRequested.connect(self.close_tab)
        tabbar = self.tabs.tabBar()
        for i in range(3):
            btn = tabbar.tabButton(i, QTabBar.RightSide) if tabbar.tabButton(
                i, QTabBar.RightSide) else tabbar.tabButton(
                    i, QTabBar.LeftSide)
            btn.resize(0, 0)
            btn.hide()

        # Creates layout for message bar
        self.layout = QGridLayout(self.info)
        self.layout.setContentsMargins(0, 0, 0, 0)
        spacerItem = QSpacerItem(20, 40, QSizePolicy.Minimum,
                                 QSizePolicy.Expanding)
        self.layout.addItem(spacerItem, 1, 0, 1, 1)
        # init messageBar instance
        self.infoBar = QgsMessageBar(self.info)
        sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
        self.infoBar.setSizePolicy(sizePolicy)
        self.layout.addWidget(self.infoBar, 0, 0, 1, 1)

        # create database tree
        self.dock = QDockWidget("Tree", self)
        self.dock.setObjectName("DB_Manager_DBView")
        self.dock.setFeatures(QDockWidget.DockWidgetMovable)
        self.tree = DBTree(self)
        self.dock.setWidget(self.tree)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock)

        # create status bar
        self.statusBar = QStatusBar(self)
        self.setStatusBar(self.statusBar)

        # create menus
        self.menuBar = QMenuBar(self)
        self.menuDb = QMenu(self.tr("&Database"), self)
        self.menuBar.addMenu(self.menuDb)
        self.menuSchema = QMenu(self.tr("&Schema"), self)
        actionMenuSchema = self.menuBar.addMenu(self.menuSchema)
        self.menuTable = QMenu(self.tr("&Table"), self)
        actionMenuTable = self.menuBar.addMenu(self.menuTable)
        self.menuHelp = None  # QMenu(self.tr("&Help"), self)
        # actionMenuHelp = self.menuBar.addMenu(self.menuHelp)

        self.setMenuBar(self.menuBar)

        # create toolbar
        self.toolBar = QToolBar("Default", self)
        self.toolBar.setObjectName("DB_Manager_ToolBar")
        self.addToolBar(self.toolBar)

        # create menus' actions

        # menu DATABASE
        sep = self.menuDb.addSeparator()
        sep.setObjectName("DB_Manager_DbMenu_placeholder")
        sep.setVisible(False)

        self.actionRefresh = self.menuDb.addAction(
            QIcon(":/db_manager/actions/refresh"), self.tr("&Refresh"),
            self.refreshActionSlot, QKeySequence("F5"))
        self.actionSqlWindow = self.menuDb.addAction(
            QIcon(":/db_manager/actions/sql_window"), self.tr("&SQL window"),
            self.runSqlWindow, QKeySequence("F2"))
        self.menuDb.addSeparator()
        self.actionClose = self.menuDb.addAction(QIcon(), self.tr("&Exit"),
                                                 self.close,
                                                 QKeySequence("CTRL+Q"))

        # menu SCHEMA
        sep = self.menuSchema.addSeparator()
        sep.setObjectName("DB_Manager_SchemaMenu_placeholder")
        sep.setVisible(False)

        actionMenuSchema.setVisible(False)

        # menu TABLE
        sep = self.menuTable.addSeparator()
        sep.setObjectName("DB_Manager_TableMenu_placeholder")
        sep.setVisible(False)

        self.actionImport = self.menuTable.addAction(
            QIcon(":/db_manager/actions/import"),
            self.tr("&Import layer/file"), self.importActionSlot)
        self.actionExport = self.menuTable.addAction(
            QIcon(":/db_manager/actions/export"), self.tr("&Export to file"),
            self.exportActionSlot)
        self.menuTable.addSeparator()
        #self.actionShowSystemTables = self.menuTable.addAction(self.tr("Show system tables/views"), self.showSystemTables)
        #self.actionShowSystemTables.setCheckable(True)
        #self.actionShowSystemTables.setChecked(True)
        actionMenuTable.setVisible(False)

        # add actions to the toolbar
        self.toolBar.addAction(self.actionRefresh)
        self.toolBar.addAction(self.actionSqlWindow)
        self.toolBar.addAction(self.actionImport)
        self.toolBar.addAction(self.actionExport)
示例#39
0
文件: db_manager.py 项目: jarped/QGIS
class DBManager(QMainWindow):
    def __init__(self, iface, parent=None):
        QMainWindow.__init__(self, parent)
        self.setAttribute(Qt.WA_DeleteOnClose)
        self.setupUi()
        self.iface = iface

        # restore the window state
        settings = QSettings()
        self.restoreGeometry(
            settings.value("/DB_Manager/mainWindow/geometry",
                           QByteArray(),
                           type=QByteArray))
        self.restoreState(
            settings.value("/DB_Manager/mainWindow/windowState",
                           QByteArray(),
                           type=QByteArray))

        self.connect(self.tabs, SIGNAL("currentChanged(int)"), self.tabChanged)
        self.connect(self.tree, SIGNAL("selectedItemChanged"),
                     self.itemChanged)
        self.itemChanged(None)

    def closeEvent(self, e):
        self.unregisterAllActions()

        # save the window state
        settings = QSettings()
        settings.setValue("/DB_Manager/mainWindow/windowState",
                          self.saveState())
        settings.setValue("/DB_Manager/mainWindow/geometry",
                          self.saveGeometry())

        QMainWindow.closeEvent(self, e)

    def refreshItem(self, item=None):
        QApplication.setOverrideCursor(Qt.WaitCursor)
        try:
            if item is None:
                item = self.tree.currentItem()
            self.tree.refreshItem(item)  # refresh item children in the db tree
        except BaseError as e:
            DlgDbError.showError(e, self)
            return
        finally:
            QApplication.restoreOverrideCursor()

    def itemChanged(self, item):
        QApplication.setOverrideCursor(Qt.WaitCursor)
        try:
            self.reloadButtons()
            self.refreshTabs()
        except BaseError as e:
            DlgDbError.showError(e, self)
            return
        finally:
            QApplication.restoreOverrideCursor()

    def reloadButtons(self):
        db = self.tree.currentDatabase()
        if not hasattr(self, '_lastDb'):
            self._lastDb = db

        elif db == self._lastDb:
            return

        # remove old actions
        if self._lastDb is not None:
            self.unregisterAllActions()

        # add actions of the selected database
        self._lastDb = db
        if self._lastDb is not None:
            self._lastDb.registerAllActions(self)

    def tabChanged(self, index):
        QApplication.setOverrideCursor(Qt.WaitCursor)
        try:
            self.refreshTabs()
        except BaseError as e:
            DlgDbError.showError(e, self)
            return
        finally:
            QApplication.restoreOverrideCursor()

    def refreshTabs(self):
        index = self.tabs.currentIndex()
        item = self.tree.currentItem()
        table = self.tree.currentTable()

        # enable/disable tabs
        self.tabs.setTabEnabled(self.tabs.indexOf(self.table), table
                                is not None)
        self.tabs.setTabEnabled(
            self.tabs.indexOf(self.preview), table is not None
            and table.type in [table.VectorType, table.RasterType]
            and table.geomColumn is not None)
        # show the info tab if the current tab is disabled
        if not self.tabs.isTabEnabled(index):
            self.tabs.setCurrentWidget(self.info)

        current_tab = self.tabs.currentWidget()
        if current_tab == self.info:
            self.info.showInfo(item)
        elif current_tab == self.table:
            self.table.loadData(item)
        elif current_tab == self.preview:
            self.preview.loadPreview(item)

    def refreshActionSlot(self):
        self.info.setDirty()
        self.table.setDirty()
        self.preview.setDirty()
        self.refreshItem()

    def importActionSlot(self):
        db = self.tree.currentDatabase()
        if db is None:
            self.infoBar.pushMessage(
                self.tr(
                    "No database selected or you are not connected to it."),
                QgsMessageBar.INFO, self.iface.messageTimeout())
            return

        outUri = db.uri()
        schema = self.tree.currentSchema()
        if schema:
            outUri.setDataSource(schema.name, "", "", "")

        from .dlg_import_vector import DlgImportVector

        dlg = DlgImportVector(None, db, outUri, self)
        dlg.exec_()

    def exportActionSlot(self):
        table = self.tree.currentTable()
        if table is None:
            self.infoBar.pushMessage(
                self.tr("Select the table you want export to file."),
                QgsMessageBar.INFO, self.iface.messageTimeout())
            return

        inLayer = table.toMapLayer()

        from .dlg_export_vector import DlgExportVector

        dlg = DlgExportVector(inLayer, table.database(), self)
        dlg.exec_()

        inLayer.deleteLater()

    def runSqlWindow(self):
        db = self.tree.currentDatabase()
        if db is None:
            self.infoBar.pushMessage(
                self.tr(
                    "No database selected or you are not connected to it."),
                QgsMessageBar.INFO, self.iface.messageTimeout())
            # force displaying of the message, it appears on the first tab (i.e. Info)
            self.tabs.setCurrentIndex(0)
            return

        from dlg_sql_window import DlgSqlWindow

        query = DlgSqlWindow(self.iface, db, self)
        dbname = db.connection().connectionName()
        tabname = self.tr("Query") + u" (%s)" % dbname
        index = self.tabs.addTab(query, tabname)
        self.tabs.setTabIcon(index, db.connection().icon())
        self.tabs.setCurrentIndex(index)
        query.nameChanged.connect(
            functools.partial(self.update_query_tab_name, index, dbname))

    def update_query_tab_name(self, index, dbname, queryname):
        if not queryname:
            queryname = self.tr("Query")
        tabname = u"%s (%s)" % (queryname, dbname)
        self.tabs.setTabText(index, tabname)

    def showSystemTables(self):
        self.tree.showSystemTables(self.actionShowSystemTables.isChecked())

    def registerAction(self, action, menuName, callback=None):
        """ register an action to the manager's main menu """
        if not hasattr(self, '_registeredDbActions'):
            self._registeredDbActions = {}

        if callback is not None:
            invoke_callback = lambda x: self.invokeCallback(callback)

        if menuName is None or menuName == "":
            self.addAction(action)

            if menuName not in self._registeredDbActions:
                self._registeredDbActions[menuName] = list()
            self._registeredDbActions[menuName].append(action)

            if callback is not None:
                QObject.connect(action, SIGNAL("triggered(bool)"),
                                invoke_callback)
            return True

        # search for the menu
        actionMenu = None
        helpMenuAction = None
        for a in self.menuBar.actions():
            if not a.menu() or a.menu().title() != menuName:
                continue
            if a.menu() != self.menuHelp:
                helpMenuAction = a

            actionMenu = a
            break

        # not found, add a new menu before the help menu
        if actionMenu is None:
            menu = QMenu(menuName, self)
            if helpMenuAction is not None:
                actionMenu = self.menuBar.insertMenu(helpMenuAction, menu)
            else:
                actionMenu = self.menuBar.addMenu(menu)

        menu = actionMenu.menu()
        menuActions = menu.actions()

        # get the placeholder's position to insert before it
        pos = 0
        for pos in range(len(menuActions)):
            if menuActions[pos].isSeparator() and menuActions[pos].objectName(
            ).endswith("_placeholder"):
                menuActions[pos].setVisible(True)
                break

        if pos < len(menuActions):
            before = menuActions[pos]
            menu.insertAction(before, action)
        else:
            menu.addAction(action)

        actionMenu.setVisible(True)  # show the menu

        if menuName not in self._registeredDbActions:
            self._registeredDbActions[menuName] = list()
        self._registeredDbActions[menuName].append(action)

        if callback is not None:
            QObject.connect(action, SIGNAL("triggered(bool)"), invoke_callback)

        return True

    def invokeCallback(self, callback, *params):
        """ Call a method passing the selected item in the database tree,
                the sender (usually a QAction), the plugin mainWindow and
                optionally additional parameters.

                This method takes care to override and restore the cursor,
                but also catches exceptions and displays the error dialog.
        """
        QApplication.setOverrideCursor(Qt.WaitCursor)
        try:
            callback(self.tree.currentItem(), self.sender(), self, *params)

        except BaseError as e:
            # catch database errors and display the error dialog
            DlgDbError.showError(e, self)
            return

        finally:
            QApplication.restoreOverrideCursor()

    def unregisterAction(self, action, menuName):
        if not hasattr(self, '_registeredDbActions'):
            return

        if menuName is None or menuName == "":
            self.removeAction(action)

            if menuName in self._registeredDbActions:
                if self._registeredDbActions[menuName].count(action) > 0:
                    self._registeredDbActions[menuName].remove(action)

            action.deleteLater()
            return True

        for a in self.menuBar.actions():
            if not a.menu() or a.menu().title() != menuName:
                continue

            menu = a.menu()
            menuActions = menu.actions()

            menu.removeAction(action)
            if menu.isEmpty():  # hide the menu
                a.setVisible(False)

            if menuName in self._registeredDbActions:
                if self._registeredDbActions[menuName].count(action) > 0:
                    self._registeredDbActions[menuName].remove(action)

                # hide the placeholder if there're no other registered actions
                if len(self._registeredDbActions[menuName]) <= 0:
                    for i in range(len(menuActions)):
                        if menuActions[i].isSeparator() and menuActions[
                                i].objectName().endswith("_placeholder"):
                            menuActions[i].setVisible(False)
                            break

            action.deleteLater()
            return True

        return False

    def unregisterAllActions(self):
        if not hasattr(self, '_registeredDbActions'):
            return

        for menuName in self._registeredDbActions:
            for action in list(self._registeredDbActions[menuName]):
                self.unregisterAction(action, menuName)
        del self._registeredDbActions

    def close_tab(self, index):
        widget = self.tabs.widget(index)
        if widget not in [self.info, self.table, self.preview]:
            self.tabs.removeTab(index)
            widget.deleteLater()

    def setupUi(self):
        self.setWindowTitle(self.tr("DB Manager"))
        self.setWindowIcon(QIcon(":/db_manager/icon"))
        self.resize(QSize(700, 500).expandedTo(self.minimumSizeHint()))

        # create central tab widget and add the first 3 tabs: info, table and preview
        self.tabs = QTabWidget()
        self.info = InfoViewer(self)
        self.tabs.addTab(self.info, self.tr("Info"))
        self.table = TableViewer(self)
        self.tabs.addTab(self.table, self.tr("Table"))
        self.preview = LayerPreview(self)
        self.tabs.addTab(self.preview, self.tr("Preview"))
        self.setCentralWidget(self.tabs)

        # display close button for all tabs but the first 3 ones, i.e.
        # HACK: just hide the close button where not needed (GS)
        self.tabs.setTabsClosable(True)
        self.tabs.tabCloseRequested.connect(self.close_tab)
        tabbar = self.tabs.tabBar()
        for i in range(3):
            btn = tabbar.tabButton(i, QTabBar.RightSide) if tabbar.tabButton(
                i, QTabBar.RightSide) else tabbar.tabButton(
                    i, QTabBar.LeftSide)
            btn.resize(0, 0)
            btn.hide()

        # Creates layout for message bar
        self.layout = QGridLayout(self.info)
        self.layout.setContentsMargins(0, 0, 0, 0)
        spacerItem = QSpacerItem(20, 40, QSizePolicy.Minimum,
                                 QSizePolicy.Expanding)
        self.layout.addItem(spacerItem, 1, 0, 1, 1)
        # init messageBar instance
        self.infoBar = QgsMessageBar(self.info)
        sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
        self.infoBar.setSizePolicy(sizePolicy)
        self.layout.addWidget(self.infoBar, 0, 0, 1, 1)

        # create database tree
        self.dock = QDockWidget("Tree", self)
        self.dock.setObjectName("DB_Manager_DBView")
        self.dock.setFeatures(QDockWidget.DockWidgetMovable)
        self.tree = DBTree(self)
        self.dock.setWidget(self.tree)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock)

        # create status bar
        self.statusBar = QStatusBar(self)
        self.setStatusBar(self.statusBar)

        # create menus
        self.menuBar = QMenuBar(self)
        self.menuDb = QMenu(self.tr("&Database"), self)
        self.menuBar.addMenu(self.menuDb)
        self.menuSchema = QMenu(self.tr("&Schema"), self)
        actionMenuSchema = self.menuBar.addMenu(self.menuSchema)
        self.menuTable = QMenu(self.tr("&Table"), self)
        actionMenuTable = self.menuBar.addMenu(self.menuTable)
        self.menuHelp = None  # QMenu(self.tr("&Help"), self)
        # actionMenuHelp = self.menuBar.addMenu(self.menuHelp)

        self.setMenuBar(self.menuBar)

        # create toolbar
        self.toolBar = QToolBar("Default", self)
        self.toolBar.setObjectName("DB_Manager_ToolBar")
        self.addToolBar(self.toolBar)

        # create menus' actions

        # menu DATABASE
        sep = self.menuDb.addSeparator()
        sep.setObjectName("DB_Manager_DbMenu_placeholder")
        sep.setVisible(False)

        self.actionRefresh = self.menuDb.addAction(
            QIcon(":/db_manager/actions/refresh"), self.tr("&Refresh"),
            self.refreshActionSlot, QKeySequence("F5"))
        self.actionSqlWindow = self.menuDb.addAction(
            QIcon(":/db_manager/actions/sql_window"), self.tr("&SQL window"),
            self.runSqlWindow, QKeySequence("F2"))
        self.menuDb.addSeparator()
        self.actionClose = self.menuDb.addAction(QIcon(), self.tr("&Exit"),
                                                 self.close,
                                                 QKeySequence("CTRL+Q"))

        # menu SCHEMA
        sep = self.menuSchema.addSeparator()
        sep.setObjectName("DB_Manager_SchemaMenu_placeholder")
        sep.setVisible(False)

        actionMenuSchema.setVisible(False)

        # menu TABLE
        sep = self.menuTable.addSeparator()
        sep.setObjectName("DB_Manager_TableMenu_placeholder")
        sep.setVisible(False)

        self.actionImport = self.menuTable.addAction(
            QIcon(":/db_manager/actions/import"),
            self.tr("&Import layer/file"), self.importActionSlot)
        self.actionExport = self.menuTable.addAction(
            QIcon(":/db_manager/actions/export"), self.tr("&Export to file"),
            self.exportActionSlot)
        self.menuTable.addSeparator()
        #self.actionShowSystemTables = self.menuTable.addAction(self.tr("Show system tables/views"), self.showSystemTables)
        #self.actionShowSystemTables.setCheckable(True)
        #self.actionShowSystemTables.setChecked(True)
        actionMenuTable.setVisible(False)

        # add actions to the toolbar
        self.toolBar.addAction(self.actionRefresh)
        self.toolBar.addAction(self.actionSqlWindow)
        self.toolBar.addAction(self.actionImport)
        self.toolBar.addAction(self.actionExport)
# coding: utf-8
from PyQt4.QtGui import QDialog, QMenu, QMenuBar, QVBoxLayout
from qgis.core import QgsColorSchemeRegistry, QgsCustomColorScheme
from qgis.gui import QgsColorSwatchGridAction

new_dialog = QDialog()
main_layout = QVBoxLayout()
menu_bar = QMenuBar()
menu = QMenu(u"Test")

color_scheme_registry = QgsColorSchemeRegistry.instance()
schemes = color_scheme_registry.schemes()
project_scheme = [s for s in schemes if isinstance(s, QgsCustomColorScheme)][0]

color_swatch_grid_action = QgsColorSwatchGridAction(project_scheme, menu)

menu.addAction(color_swatch_grid_action)

menu_bar.addMenu(menu)
main_layout.setMenuBar(menu_bar)
new_dialog.setLayout(main_layout)

new_dialog.show()
示例#41
0
 def _setupMenu(self):
     self.menubar = QMenuBar(self)
     self.menubar.setGeometry(QRect(0, 0, 630, 22))
     self.menuFile = QMenu(self.menubar)
     self.menuFile.setTitle(tr("File"))
     self.menuMark = QMenu(self.menubar)
     self.menuMark.setTitle(tr("Mark"))
     self.menuActions = QMenu(self.menubar)
     self.menuActions.setTitle(tr("Actions"))
     self.menuColumns = QMenu(self.menubar)
     self.menuColumns.setTitle(tr("Columns"))
     self.menuView = QMenu(self.menubar)
     self.menuView.setTitle(tr("View"))
     self.menuHelp = QMenu(self.menubar)
     self.menuHelp.setTitle(tr("Help"))
     self.setMenuBar(self.menubar)
     
     self.menuActions.addAction(self.actionDeleteMarked)
     self.menuActions.addAction(self.actionMoveMarked)
     self.menuActions.addAction(self.actionCopyMarked)
     self.menuActions.addAction(self.actionRemoveMarked)
     self.menuActions.addAction(self.actionReprioritize)
     self.menuActions.addSeparator()
     self.menuActions.addAction(self.actionRemoveSelected)
     self.menuActions.addAction(self.actionIgnoreSelected)
     self.menuActions.addAction(self.actionMakeSelectedReference)
     self.menuActions.addSeparator()
     self.menuActions.addAction(self.actionOpenSelected)
     self.menuActions.addAction(self.actionRevealSelected)
     self.menuActions.addAction(self.actionInvokeCustomCommand)
     self.menuActions.addAction(self.actionRenameSelected)
     self.menuMark.addAction(self.actionMarkAll)
     self.menuMark.addAction(self.actionMarkNone)
     self.menuMark.addAction(self.actionInvertMarking)
     self.menuMark.addAction(self.actionMarkSelected)
     self.menuView.addAction(self.actionPowerMarker)
     self.menuView.addAction(self.actionDelta)
     self.menuView.addSeparator()
     self.menuView.addAction(self.actionDetails)
     self.menuView.addAction(self.app.actionIgnoreList)
     self.menuView.addAction(self.app.actionPreferences)
     self.menuHelp.addAction(self.app.actionShowHelp)
     self.menuHelp.addAction(self.app.actionCheckForUpdate)
     self.menuHelp.addAction(self.app.actionOpenDebugLog)
     self.menuHelp.addAction(self.app.actionAbout)
     self.menuFile.addAction(self.actionSaveResults)
     self.menuFile.addAction(self.actionExportToHTML)
     self.menuFile.addAction(self.actionExportToCSV)
     self.menuFile.addSeparator()
     self.menuFile.addAction(self.app.actionQuit)
     
     self.menubar.addAction(self.menuFile.menuAction())
     self.menubar.addAction(self.menuMark.menuAction())
     self.menubar.addAction(self.menuActions.menuAction())
     self.menubar.addAction(self.menuColumns.menuAction())
     self.menubar.addAction(self.menuView.menuAction())
     self.menubar.addAction(self.menuHelp.menuAction())
     
     # Columns menu
     menu = self.menuColumns
     self._column_actions = []
     for index, (display, visible) in enumerate(self.app.model.result_table.columns.menu_items()):
         action = menu.addAction(display)
         action.setCheckable(True)
         action.setChecked(visible)
         action.item_index = index
         self._column_actions.append(action)
     menu.addSeparator()
     action = menu.addAction(tr("Reset to Defaults"))
     action.item_index = -1
     
     # Action menu
     actionMenu = QMenu(tr("Actions"), self.menubar)
     actionMenu.addAction(self.actionDeleteMarked)
     actionMenu.addAction(self.actionMoveMarked)
     actionMenu.addAction(self.actionCopyMarked)
     actionMenu.addAction(self.actionRemoveMarked)
     actionMenu.addSeparator()
     actionMenu.addAction(self.actionRemoveSelected)
     actionMenu.addAction(self.actionIgnoreSelected)
     actionMenu.addAction(self.actionMakeSelectedReference)
     actionMenu.addSeparator()
     actionMenu.addAction(self.actionOpenSelected)
     actionMenu.addAction(self.actionRevealSelected)
     actionMenu.addAction(self.actionInvokeCustomCommand)
     actionMenu.addAction(self.actionRenameSelected)
     self.actionActions.setMenu(actionMenu)
     self.actionsButton.setMenu(self.actionActions.menu())
示例#42
0
 def _setupUi(self): # has to take place *before* base elements creation
     self.setWindowTitle("moneyGuru")
     self.resize(700, 580)
     self.centralwidget = QtGui.QWidget(self)
     self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
     self.verticalLayout.setSpacing(0)
     self.verticalLayout.setMargin(0)
     self.topBar = QtGui.QWidget(self.centralwidget)
     self.horizontalLayout_2 = QHBoxLayout(self.topBar)
     self.horizontalLayout_2.setContentsMargins(2, 0, 2, 0)
     spacerItem = QtGui.QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
     self.horizontalLayout_2.addItem(spacerItem)
     self.dateRangeSelectorView = DateRangeSelectorView(self.topBar)
     self.dateRangeSelectorView.setMinimumSize(QSize(220, 0))
     self.horizontalLayout_2.addWidget(self.dateRangeSelectorView)
     spacerItem1 = QtGui.QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
     self.horizontalLayout_2.addItem(spacerItem1)
     self.searchLineEdit = SearchEdit(self.topBar)
     self.searchLineEdit.setMaximumSize(QSize(240, 16777215))
     self.horizontalLayout_2.addWidget(self.searchLineEdit)
     self.verticalLayout.addWidget(self.topBar)
     self.tabBar = QTabBar(self.centralwidget)
     self.tabBar.setMinimumSize(QSize(0, 20))
     self.verticalLayout.addWidget(self.tabBar)
     self.mainView = QtGui.QStackedWidget(self.centralwidget)
     self.verticalLayout.addWidget(self.mainView)
     
     # Bottom buttons & status label
     self.bottomBar = QtGui.QWidget(self.centralwidget)
     self.horizontalLayout = QHBoxLayout(self.bottomBar)
     self.horizontalLayout.setMargin(2)
     self.horizontalLayout.setMargin(0)
     self.newItemButton = QPushButton(self.bottomBar)
     buttonSizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
     buttonSizePolicy.setHorizontalStretch(0)
     buttonSizePolicy.setVerticalStretch(0)
     buttonSizePolicy.setHeightForWidth(self.newItemButton.sizePolicy().hasHeightForWidth())
     self.newItemButton.setSizePolicy(buttonSizePolicy)
     self.newItemButton.setIcon(QIcon(QPixmap(':/plus_8')))
     self.horizontalLayout.addWidget(self.newItemButton)
     self.deleteItemButton = QPushButton(self.bottomBar)
     self.deleteItemButton.setSizePolicy(buttonSizePolicy)
     self.deleteItemButton.setIcon(QIcon(QPixmap(':/minus_8')))
     self.horizontalLayout.addWidget(self.deleteItemButton)
     self.editItemButton = QPushButton(self.bottomBar)
     self.editItemButton.setSizePolicy(buttonSizePolicy)
     self.editItemButton.setIcon(QIcon(QPixmap(':/info_gray_12')))
     self.horizontalLayout.addWidget(self.editItemButton)
     self.horizontalLayout.addItem(horizontalSpacer(size=20))
     self.graphVisibilityButton = QPushButton()
     self.graphVisibilityButton.setSizePolicy(buttonSizePolicy)
     self.graphVisibilityButton.setIcon(QIcon(QPixmap(':/graph_visibility_on_16')))
     self.horizontalLayout.addWidget(self.graphVisibilityButton)
     self.piechartVisibilityButton = QPushButton()
     self.piechartVisibilityButton.setSizePolicy(buttonSizePolicy)
     self.piechartVisibilityButton.setIcon(QIcon(QPixmap(':/piechart_visibility_on_16')))
     self.horizontalLayout.addWidget(self.piechartVisibilityButton)
     self.columnsVisibilityButton = QPushButton()
     self.columnsVisibilityButton.setSizePolicy(buttonSizePolicy)
     self.columnsVisibilityButton.setIcon(QIcon(QPixmap(':/columns_16')))
     self.horizontalLayout.addWidget(self.columnsVisibilityButton)
     
     self.statusLabel = QtGui.QLabel(tr("Status"))
     self.statusLabel.setAlignment(Qt.AlignCenter)
     self.horizontalLayout.addWidget(self.statusLabel)
     self.verticalLayout.addWidget(self.bottomBar)
     
     
     self.setCentralWidget(self.centralwidget)
     self.menubar = QMenuBar(self)
     self.menubar.setGeometry(QRect(0, 0, 700, 20))
     self.menuFile = QMenu(tr("File"))
     self.menuOpenRecent = QMenu(tr("Open Recent"))
     self.menuView = QMenu(tr("View"))
     self.menuDateRange = QMenu(tr("Date Range"))
     self.menuEdit = QMenu(tr("Edit"))
     self.menuHelp = QMenu(tr("Help"))
     self.setMenuBar(self.menubar)
     self.actionOpenDocument = QAction(tr("Open..."), self)
     self.actionOpenDocument.setShortcut("Ctrl+O")
     self.actionShowNetWorth = QAction(tr("Net Worth"), self)
     self.actionShowNetWorth.setShortcut("Ctrl+1")
     self.actionShowNetWorth.setIcon(QIcon(QPixmap(':/balance_sheet_48')))
     self.actionShowProfitLoss = QAction(escapeamp(tr("Profit & Loss")), self)
     self.actionShowProfitLoss.setShortcut("Ctrl+2")
     self.actionShowProfitLoss.setIcon(QIcon(QPixmap(':/income_statement_48')))
     self.actionShowTransactions = QAction(tr("Transactions"), self)
     self.actionShowTransactions.setShortcut("Ctrl+3")
     self.actionShowTransactions.setIcon(QIcon(QPixmap(':/transaction_table_48')))
     self.actionShowSelectedAccount = QAction(tr("Show Account"), self)
     self.actionShowSelectedAccount.setShortcut("Ctrl+]")
     self.actionNewItem = QAction(tr("New Item"), self)
     self.actionNewItem.setShortcut("Ctrl+N")
     self.actionDeleteItem = QAction(tr("Remove Selected"), self)
     self.actionEditItem = QAction(tr("Show Info"), self)
     self.actionEditItem.setShortcut("Ctrl+I")
     self.actionToggleGraph = QAction(tr("Toggle Graph"), self)
     self.actionToggleGraph.setShortcut("Ctrl+Alt+G")
     self.actionTogglePieChart = QAction(tr("Toggle Pie Chart"), self)
     self.actionTogglePieChart.setShortcut("Ctrl+Alt+P")
     self.actionMoveUp = QAction(tr("Move Up"), self)
     self.actionMoveUp.setShortcut("Ctrl++")
     self.actionMoveDown = QAction(tr("Move Down"), self)
     self.actionMoveDown.setShortcut("Ctrl+-")
     self.actionNavigateBack = QAction(tr("Go Back"), self)
     self.actionNavigateBack.setShortcut("Ctrl+[")
     self.actionNewAccountGroup = QAction(tr("New Account Group"), self)
     self.actionNewAccountGroup.setShortcut("Ctrl+Shift+N")
     self.actionShowNextView = QAction(tr("Next View"), self)
     self.actionShowNextView.setShortcut("Ctrl+Shift+]")
     self.actionShowPreviousView = QAction(tr("Previous View"), self)
     self.actionShowPreviousView.setShortcut("Ctrl+Shift+[")
     self.actionNewDocument = QAction(tr("New Document"), self)
     self.actionOpenExampleDocument = QAction(tr("Open Example Document"), self)
     self.actionOpenPluginFolder = QAction(tr("Open Plugin Folder"), self)
     self.actionImport = QAction(tr("Import..."), self)
     self.actionImport.setShortcut("Ctrl+Alt+I")
     self.actionExport = QAction(tr("Export..."), self)
     self.actionExport.setShortcut("Ctrl+Alt+E")
     self.actionSave = QAction(tr("Save"), self)
     self.actionSave.setShortcut("Ctrl+S")
     self.actionSaveAs = QAction(tr("Save As..."), self)
     self.actionSaveAs.setShortcut("Ctrl+Shift+S")
     self.actionAbout = QAction(tr("About moneyGuru"), self)
     self.actionToggleReconciliationMode = QAction(tr("Toggle Reconciliation Mode"), self)
     self.actionToggleReconciliationMode.setShortcut("Ctrl+Shift+R")
     self.actionToggleAccountExclusion = QAction(tr("Toggle Exclusion Status of Account"), self)
     self.actionToggleAccountExclusion.setShortcut("Ctrl+Shift+X")
     self.actionShowSchedules = QAction(tr("Schedules"), self)
     self.actionShowSchedules.setShortcut("Ctrl+4")
     self.actionShowSchedules.setIcon(QIcon(QPixmap(':/schedules_48')))
     self.actionShowBudgets = QAction(tr("Budgets"), self)
     self.actionShowBudgets.setShortcut("Ctrl+5")
     self.actionShowBudgets.setIcon(QIcon(QPixmap(':/budget_48')))
     self.actionReconcileSelected = QAction(tr("Reconcile Selection"), self)
     self.actionReconcileSelected.setShortcut("Ctrl+R")
     self.actionMakeScheduleFromSelected = QAction(tr("Make Schedule from Selected"), self)
     self.actionMakeScheduleFromSelected.setShortcut("Ctrl+M")
     self.actionShowPreferences = QAction(tr("Preferences..."), self)
     self.actionPrint = QAction(tr("Print..."), self)
     self.actionPrint.setShortcut("Ctrl+P")
     self.actionQuit = QAction(tr("Quit moneyGuru"), self)
     self.actionQuit.setShortcut("Ctrl+Q")
     self.actionUndo = QAction(tr("Undo"), self)
     self.actionUndo.setShortcut("Ctrl+Z")
     self.actionRedo = QAction(tr("Redo"), self)
     self.actionRedo.setShortcut("Ctrl+Y")
     self.actionShowHelp = QAction(tr("moneyGuru Help"), self)
     self.actionShowHelp.setShortcut("F1")
     self.actionCheckForUpdate = QAction(tr("Check for update"), self)
     self.actionOpenDebugLog = QAction(tr("Open Debug Log"), self)
     self.actionDuplicateTransaction = QAction(tr("Duplicate Transaction"), self)
     self.actionDuplicateTransaction.setShortcut("Ctrl+D")
     self.actionJumpToAccount = QAction(tr("Jump to Account..."), self)
     self.actionJumpToAccount.setShortcut("Ctrl+Shift+A")
     self.actionNewTab = QAction(tr("New Tab"), self)
     self.actionNewTab.setShortcut("Ctrl+T")
     self.actionCloseTab = QAction(tr("Close Tab"), self)
     self.actionCloseTab.setShortcut("Ctrl+W")
     
     self.menuFile.addAction(self.actionNewDocument)
     self.menuFile.addAction(self.actionNewTab)
     self.menuFile.addAction(self.actionOpenDocument)
     self.menuFile.addAction(self.menuOpenRecent.menuAction())
     self.menuFile.addAction(self.actionOpenExampleDocument)
     self.menuFile.addAction(self.actionOpenPluginFolder)
     self.menuFile.addAction(self.actionImport)
     self.menuFile.addSeparator()
     self.menuFile.addAction(self.actionCloseTab)
     self.menuFile.addAction(self.actionSave)
     self.menuFile.addAction(self.actionSaveAs)
     self.menuFile.addAction(self.actionExport)
     self.menuFile.addAction(self.actionPrint)
     self.menuFile.addAction(self.actionQuit)
     self.menuView.addAction(self.actionShowNetWorth)
     self.menuView.addAction(self.actionShowProfitLoss)
     self.menuView.addAction(self.actionShowTransactions)
     self.menuView.addAction(self.actionShowSchedules)
     self.menuView.addAction(self.actionShowBudgets)
     self.menuView.addAction(self.actionShowPreviousView)
     self.menuView.addAction(self.actionShowNextView)
     self.menuView.addAction(self.menuDateRange.menuAction())
     self.menuView.addAction(self.actionShowPreferences)
     self.menuView.addAction(self.actionToggleGraph)
     self.menuView.addAction(self.actionTogglePieChart)
     self.menuEdit.addAction(self.actionNewItem)
     self.menuEdit.addAction(self.actionNewAccountGroup)
     self.menuEdit.addAction(self.actionDeleteItem)
     self.menuEdit.addAction(self.actionEditItem)
     self.menuEdit.addSeparator()
     self.menuEdit.addAction(self.actionMoveUp)
     self.menuEdit.addAction(self.actionMoveDown)
     self.menuEdit.addAction(self.actionDuplicateTransaction)
     self.menuEdit.addAction(self.actionMakeScheduleFromSelected)
     self.menuEdit.addAction(self.actionReconcileSelected)
     self.menuEdit.addAction(self.actionToggleReconciliationMode)
     self.menuEdit.addAction(self.actionToggleAccountExclusion)
     self.menuEdit.addSeparator()
     self.menuEdit.addAction(self.actionShowSelectedAccount)
     self.menuEdit.addAction(self.actionNavigateBack)
     self.menuEdit.addAction(self.actionJumpToAccount)
     self.menuEdit.addSeparator()
     self.menuEdit.addAction(self.actionUndo)
     self.menuEdit.addAction(self.actionRedo)
     self.menuHelp.addAction(self.actionShowHelp)
     self.menuHelp.addAction(self.actionCheckForUpdate)
     self.menuHelp.addAction(self.actionOpenDebugLog)
     self.menuHelp.addAction(self.actionAbout)
     mainmenus = [self.menuFile, self.menuEdit, self.menuView, self.menuHelp]
     for menu in mainmenus:
         self.menubar.addAction(menu.menuAction())
         setAccelKeys(menu)
     setAccelKeys(self.menubar)
     self.tabBar.setMovable(True)
     self.tabBar.setTabsClosable(True)
     
     seq = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_Right)
     self._shortcutNextTab = QShortcut(seq, self)
     seq = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_Left)
     self._shortcutPrevTab = QShortcut(seq, self)
     
     # Linux setup
     if ISLINUX:
         self.actionCheckForUpdate.setVisible(False) # This only works on Windows
示例#43
0
class RoadnetToolbar(object):
    """
    Toolbar for roadnet
    """
    sb_btn = None
    street_sel_btn = None
    sb_icon = None
    ss_off_icon = None
    ss_on_icon = None

    rn_menu = None
    exp_menu = None
    admin_menu = None
    ramp_menu = None

    mcl_auto_number_btn = None
    mcl_auto_number_on_icon = None
    mcl_auto_number_off_icon = None
    mcl_select_btn = None
    mcl_select_on_icon = None
    mcl_select_off_icon = None
    rdpoly_select_btn = None
    rdpoly_select_on_icon = None
    rdpoly_select_off_icon = None

    start_rn = None
    stop_rn = None
    change_db_path = None
    settings = None
    create_restore = None
    change_pwd = None
    help = None
    exp_lgs = None
    exp_srwr = None
    exp_lsg_shp = None
    exp_maintain_poly = None
    exp_list_roads = None
    meta_menu = None
    edit_lsg_lu = None
    edit_srwr_lu = None
    validation_rpt = None
    street_rpt = None
    clean_rdpoly = None

    load_layers = None
    road_length = None
    export_wdm = None
    ramp_validation = None
    about = None

    def __init__(self, iface, plugin_dir, with_ramp):
        """
        Initial setup of toolbar (pre-login)
        """
        self.iface = iface
        self.plugin_dir = plugin_dir
        self.with_ramp = with_ramp
        self.canvas = self.iface.mapCanvas()
        # Create toolbar
        self.toolbar = self.iface.addToolBar(u'Roadnet')
        self.toolbar.setObjectName(u'Roadnet')

        # Create menubar
        self.menubar = QMenuBar()
        self.define_button_icons_and_actions()
        self.populate_menubar()

        # Add menubar to toolbar
        self.toolbar.addWidget(self.menubar)
        self.toolbar.setIconSize(QSize(100, 100))

        # Set initial state
        self.set_state('init')

    def define_button_icons_and_actions(self):
        # Top level buttons
        # Street Browser button
        self.sb_icon = QIcon(os.path.join(self.plugin_dir, "image", "sb_icon.png"))
        self.sb_btn = QAction(self.sb_icon, "w", self.iface.mainWindow())
        self.sb_btn.setToolTip("Street Browser")
        self.sb_btn.hovered.connect(lambda: self._actionHovered(self.sb_btn))
        # Street selector button
        self.ss_off_icon = QIcon(
                os.path.join(self.plugin_dir, "image", "ss_off_icon.png"))
        self.ss_on_icon = QIcon(
                os.path.join(self.plugin_dir, "image", "ss_on_icon.png"))
        self.street_sel_btn = QAction(self.ss_off_icon, "OFF", self.menubar)
        self.street_sel_btn.setToolTip("Street Selector")
        self.street_sel_btn.hovered.connect(lambda: self._actionHovered(self.street_sel_btn))

        # Setup RAMP buttons if required
        if self.with_ramp:
            self.define_ramp_button_icons_and_actions()

    def define_ramp_button_icons_and_actions(self):
        # Select MCL section button
        self.mcl_select_on_icon = QIcon(os.path.join(self.plugin_dir,
                                                     "image", "edit_mcl_on_icon.png"))
        self.mcl_select_off_icon = QIcon(os.path.join(self.plugin_dir,
                                                      "image", "edit_mcl_off_icon.png"))
        self.mcl_select_btn = QAction(self.mcl_select_off_icon, "",
                                      self.iface.mainWindow())
        self.mcl_select_btn.setToolTip("Select MCL section")
        self.mcl_select_btn.hovered.connect(
            lambda: self._actionHovered(self.mcl_select_btn))

        # MCL auto numbering tool button
        self.mcl_auto_number_on_icon = QIcon(os.path.join(self.plugin_dir,
                                                          "image", "number_mcls_on_icon.png"))
        self.mcl_auto_number_off_icon = QIcon(os.path.join(self.plugin_dir,
                                                           "image", "number_mcls_off_icon.png"))
        self.mcl_auto_number_btn = QAction(self.mcl_auto_number_off_icon, "",
                                           self.iface.mainWindow())
        self.mcl_auto_number_btn.setToolTip("Auto number MCL sections")
        self.mcl_auto_number_btn.hovered.connect(
            lambda: self._actionHovered(self.mcl_auto_number_btn))

        # Select feature button
        self.rdpoly_select_on_icon = QIcon(os.path.join(self.plugin_dir,
                                                   "image", "edit_poly_on_icon.png"))
        self.rdpoly_select_off_icon = QIcon(os.path.join(self.plugin_dir,
                                                      "image", "edit_poly_off_icon.png"))
        self.rdpoly_select_btn = QAction(self.rdpoly_select_off_icon, "",
                                       self.iface.mainWindow())
        self.rdpoly_select_btn.setToolTip("Select RAMP polygon")
        self.rdpoly_select_btn.hovered.connect(
            lambda: self._actionHovered(self.rdpoly_select_btn))

    def populate_menubar(self):
        # Top level menu items + add buttons
        self.rn_menu = self.menubar.addMenu("roadNet")
        self.add_roadnet_menu_items()
        self.menubar.addActions([self.street_sel_btn, self.sb_btn])
        self.exp_menu = self.menubar.addMenu("Export")
        self.add_export_menu_items()
        self.admin_menu = self.menubar.addMenu("Admin")
        self.add_admin_menu_items()
        if self.with_ramp:
            self.ramp_menu = self.menubar.addMenu("RAMP")
            self.add_ramp_menu_items()
            self.menubar.addActions([self.mcl_select_btn,
                                     self.mcl_auto_number_btn,
                                     self.rdpoly_select_btn])

    def add_roadnet_menu_items(self):
        # Add actions to Roadnet menu
        self.start_rn = self.rn_menu.addAction("Start roadNet")
        self.stop_rn = self.rn_menu.addAction("Stop roadNet")
        self.rn_menu.addSeparator()
        self.change_db_path = self.rn_menu.addAction("Change Database Location")
        self.settings = self.rn_menu.addAction("Settings")
        self.rn_menu.addSeparator()
        self.create_restore = self.rn_menu.addAction("Create Restore Point")
        self.change_pwd = self.rn_menu.addAction("Change Password")
        self.rn_menu.addSeparator()
        self.help = self.rn_menu.addAction("Help")
        self.about = self.rn_menu.addAction("About")

    def add_export_menu_items(self):
        # Add actions to Export menu
        self.exp_lgs = self.exp_menu.addAction("Export LSG")
        self.exp_srwr = self.exp_menu.addAction("Export SRWR")
        self.exp_menu.addSeparator()
        self.exp_lsg_shp = self.exp_menu.addAction("Export LSG Shapes")
        self.exp_maintain_poly = self.exp_menu.addAction(
            "Export Maintenance Polygons")
        self.exp_menu.addSeparator()
        self.exp_list_roads = self.exp_menu.addAction("List of Roads")

    def add_admin_menu_items(self):
        """
        Add actions to the admin menu.
        """
        self.meta_menu = self.admin_menu.addAction("Metadata")
        self.admin_menu.addSeparator()
        self.edit_lsg_lu = self.admin_menu.addAction("Edit LSG Lookups")
        self.edit_srwr_lu = self.admin_menu.addAction("Edit SRWR Lookups")
        self.admin_menu.addSeparator()
        self.validation_rpt = self.admin_menu.addAction("Validation Report")
        self.street_rpt = self.admin_menu.addAction("Street Reports")
        self.admin_menu.addSeparator()
        self.clean_rdpoly = self.admin_menu.addAction("Update Symbology")
        self.sb_btn.setEnabled(True)

    def add_ramp_menu_items(self):
        """
        Create actions that appear as items in RAMP menu
        """
        self.load_layers = self.ramp_menu.addAction("Load RAMP/MCL layers")
        self.ramp_menu.addSeparator()
        self.road_length = self.ramp_menu.addAction("Road length report")
        self.export_wdm = self.ramp_menu.addAction("Export for WDM")

    def set_state(self, role):
        """
        Set toolbar state, i.e. which buttons are enabled, based on user
        role.

        :param role: String from ['init', 'editor', 'readonly']
        """
        # Define buttons used in each mode
        roadnet_buttons = [self.start_rn, self.stop_rn, self.create_restore,
                           self.change_db_path, self.change_pwd, self.settings,
                           self.street_sel_btn, self.sb_btn, self.exp_menu,
                           self.admin_menu, self.meta_menu, self.edit_lsg_lu,
                           self.edit_srwr_lu, self.validation_rpt,
                           self.street_rpt, self.help, self.about]
        ramp_buttons = [self.ramp_menu, self.mcl_select_btn,
                        self.mcl_auto_number_btn, self.rdpoly_select_btn]

        init = [self.start_rn, self.change_db_path, self.about, self.help]
        readonly = [self.stop_rn, self.street_sel_btn, self.sb_btn,
                    self.exp_menu, self.admin_menu, self.meta_menu,
                    self.validation_rpt, self.street_rpt, self.settings,
                    self.create_restore, self.help, self.about]

        if self.with_ramp:
            roadnet_buttons += ramp_buttons
            readonly += ramp_buttons

        editor = readonly + [self.create_restore, self.change_pwd,
                             self.edit_lsg_lu, self.edit_srwr_lu]

        # Disable all buttons
        for button in roadnet_buttons:
            button.setEnabled(False)
        # Enable required buttons
        if role == 'init':
            for button in init:
                button.setEnabled(True)
        if role == 'readonly':
            for button in readonly:
                button.setEnabled(True)
        if role == 'editor':
            for button in editor:
                button.setEnabled(True)

    def street_sel_icon_state(self, state):
        """
        Change the text/icon of the street selector button to reflect state
        """
        if state == 'on':
            self.street_sel_btn.setText('on')
            self.street_sel_btn.setIcon(self.ss_on_icon)
        if state == 'off':
            self.street_sel_btn.setText('off')
            self.street_sel_btn.setIcon(self.ss_off_icon)

    def mcl_selector_icon_state(self, state):
        """
        Change the text/icon of the street selector button to reflect state
        """
        if state == 'on':
            self.mcl_select_btn.setText('on')
            self.mcl_select_btn.setIcon(self.mcl_select_on_icon)
        if state == 'off':
            self.mcl_select_btn.setText('off')
            self.mcl_select_btn.setIcon(self.mcl_select_off_icon)

    def rdpoly_selector_icon_state(self, state):
        """
        Change the text/icon of the street selector button to reflect state
        """
        if state == 'on':
            self.rdpoly_select_btn.setText('on')
            self.rdpoly_select_btn.setIcon(self.rdpoly_select_on_icon)
        if state == 'off':
            self.rdpoly_select_btn.setText('off')
            self.rdpoly_select_btn.setIcon(self.rdpoly_select_off_icon)

    def _actionHovered(self, action):
        tip = action.toolTip()
        QToolTip.showText(QCursor.pos(), tip)
示例#44
0
class MainWindow(QMainWindow):
    def __init__(self, doc):
        QMainWindow.__init__(self, None)
        self.doc = doc
        self.app = doc.app
        
        self._setupUi()
        
        # Create base elements
        self.model = MainWindowModel(document=doc.model)
        self.model2view = {}
        self.apanel = AccountPanel(mainwindow=self)
        self.tpanel = TransactionPanel(mainwindow=self)
        self.mepanel = MassEditionPanel(mainwindow=self)
        self.scpanel = SchedulePanel(mainwindow=self)
        self.bpanel = BudgetPanel(mainwindow=self)
        self.cdrpanel = CustomDateRangePanel(mainwindow=self)
        self.arpanel = AccountReassignPanel(mainwindow=self)
        self.expanel = ExportPanel(mainwindow=self)
        self.alookup = Lookup(self, model=self.model.account_lookup)
        self.clookup = Lookup(self, model=self.model.completion_lookup)
        self.drsel = DateRangeSelector(mainwindow=self, view=self.dateRangeSelectorView)
        self.sfield = SearchField(model=self.model.search_field, view=self.searchLineEdit)
        self.recentDocuments = Recent(self.app, 'recentDocuments')
        self.recentDocuments.addMenu(self.menuOpenRecent)
        
        self.model.view = self
        self.model.connect()
        
        self._updateUndoActions()
        self._bindSignals()
    
    def _setupUi(self): # has to take place *before* base elements creation
        self.setWindowTitle("moneyGuru")
        self.resize(700, 580)
        self.centralwidget = QtGui.QWidget(self)
        self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setMargin(0)
        self.topBar = QtGui.QWidget(self.centralwidget)
        self.horizontalLayout_2 = QHBoxLayout(self.topBar)
        self.horizontalLayout_2.setContentsMargins(2, 0, 2, 0)
        spacerItem = QtGui.QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem)
        self.dateRangeSelectorView = DateRangeSelectorView(self.topBar)
        self.dateRangeSelectorView.setMinimumSize(QSize(220, 0))
        self.horizontalLayout_2.addWidget(self.dateRangeSelectorView)
        spacerItem1 = QtGui.QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem1)
        self.searchLineEdit = SearchEdit(self.topBar)
        self.searchLineEdit.setMaximumSize(QSize(240, 16777215))
        self.horizontalLayout_2.addWidget(self.searchLineEdit)
        self.verticalLayout.addWidget(self.topBar)
        self.tabBar = QTabBar(self.centralwidget)
        self.tabBar.setMinimumSize(QSize(0, 20))
        self.verticalLayout.addWidget(self.tabBar)
        self.mainView = QtGui.QStackedWidget(self.centralwidget)
        self.verticalLayout.addWidget(self.mainView)
        
        # Bottom buttons & status label
        self.bottomBar = QtGui.QWidget(self.centralwidget)
        self.horizontalLayout = QHBoxLayout(self.bottomBar)
        self.horizontalLayout.setMargin(2)
        self.horizontalLayout.setMargin(0)
        self.newItemButton = QPushButton(self.bottomBar)
        buttonSizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
        buttonSizePolicy.setHorizontalStretch(0)
        buttonSizePolicy.setVerticalStretch(0)
        buttonSizePolicy.setHeightForWidth(self.newItemButton.sizePolicy().hasHeightForWidth())
        self.newItemButton.setSizePolicy(buttonSizePolicy)
        self.newItemButton.setIcon(QIcon(QPixmap(':/plus_8')))
        self.horizontalLayout.addWidget(self.newItemButton)
        self.deleteItemButton = QPushButton(self.bottomBar)
        self.deleteItemButton.setSizePolicy(buttonSizePolicy)
        self.deleteItemButton.setIcon(QIcon(QPixmap(':/minus_8')))
        self.horizontalLayout.addWidget(self.deleteItemButton)
        self.editItemButton = QPushButton(self.bottomBar)
        self.editItemButton.setSizePolicy(buttonSizePolicy)
        self.editItemButton.setIcon(QIcon(QPixmap(':/info_gray_12')))
        self.horizontalLayout.addWidget(self.editItemButton)
        self.horizontalLayout.addItem(horizontalSpacer(size=20))
        self.graphVisibilityButton = QPushButton()
        self.graphVisibilityButton.setSizePolicy(buttonSizePolicy)
        self.graphVisibilityButton.setIcon(QIcon(QPixmap(':/graph_visibility_on_16')))
        self.horizontalLayout.addWidget(self.graphVisibilityButton)
        self.piechartVisibilityButton = QPushButton()
        self.piechartVisibilityButton.setSizePolicy(buttonSizePolicy)
        self.piechartVisibilityButton.setIcon(QIcon(QPixmap(':/piechart_visibility_on_16')))
        self.horizontalLayout.addWidget(self.piechartVisibilityButton)
        self.columnsVisibilityButton = QPushButton()
        self.columnsVisibilityButton.setSizePolicy(buttonSizePolicy)
        self.columnsVisibilityButton.setIcon(QIcon(QPixmap(':/columns_16')))
        self.horizontalLayout.addWidget(self.columnsVisibilityButton)
        
        self.statusLabel = QtGui.QLabel(tr("Status"))
        self.statusLabel.setAlignment(Qt.AlignCenter)
        self.horizontalLayout.addWidget(self.statusLabel)
        self.verticalLayout.addWidget(self.bottomBar)
        
        
        self.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(self)
        self.menubar.setGeometry(QRect(0, 0, 700, 20))
        self.menuFile = QMenu(tr("File"))
        self.menuOpenRecent = QMenu(tr("Open Recent"))
        self.menuView = QMenu(tr("View"))
        self.menuDateRange = QMenu(tr("Date Range"))
        self.menuEdit = QMenu(tr("Edit"))
        self.menuHelp = QMenu(tr("Help"))
        self.setMenuBar(self.menubar)
        self.actionOpenDocument = QAction(tr("Open..."), self)
        self.actionOpenDocument.setShortcut("Ctrl+O")
        self.actionShowNetWorth = QAction(tr("Net Worth"), self)
        self.actionShowNetWorth.setShortcut("Ctrl+1")
        self.actionShowNetWorth.setIcon(QIcon(QPixmap(':/balance_sheet_48')))
        self.actionShowProfitLoss = QAction(escapeamp(tr("Profit & Loss")), self)
        self.actionShowProfitLoss.setShortcut("Ctrl+2")
        self.actionShowProfitLoss.setIcon(QIcon(QPixmap(':/income_statement_48')))
        self.actionShowTransactions = QAction(tr("Transactions"), self)
        self.actionShowTransactions.setShortcut("Ctrl+3")
        self.actionShowTransactions.setIcon(QIcon(QPixmap(':/transaction_table_48')))
        self.actionShowSelectedAccount = QAction(tr("Show Account"), self)
        self.actionShowSelectedAccount.setShortcut("Ctrl+]")
        self.actionNewItem = QAction(tr("New Item"), self)
        self.actionNewItem.setShortcut("Ctrl+N")
        self.actionDeleteItem = QAction(tr("Remove Selected"), self)
        self.actionEditItem = QAction(tr("Show Info"), self)
        self.actionEditItem.setShortcut("Ctrl+I")
        self.actionToggleGraph = QAction(tr("Toggle Graph"), self)
        self.actionToggleGraph.setShortcut("Ctrl+Alt+G")
        self.actionTogglePieChart = QAction(tr("Toggle Pie Chart"), self)
        self.actionTogglePieChart.setShortcut("Ctrl+Alt+P")
        self.actionMoveUp = QAction(tr("Move Up"), self)
        self.actionMoveUp.setShortcut("Ctrl++")
        self.actionMoveDown = QAction(tr("Move Down"), self)
        self.actionMoveDown.setShortcut("Ctrl+-")
        self.actionNavigateBack = QAction(tr("Go Back"), self)
        self.actionNavigateBack.setShortcut("Ctrl+[")
        self.actionNewAccountGroup = QAction(tr("New Account Group"), self)
        self.actionNewAccountGroup.setShortcut("Ctrl+Shift+N")
        self.actionShowNextView = QAction(tr("Next View"), self)
        self.actionShowNextView.setShortcut("Ctrl+Shift+]")
        self.actionShowPreviousView = QAction(tr("Previous View"), self)
        self.actionShowPreviousView.setShortcut("Ctrl+Shift+[")
        self.actionNewDocument = QAction(tr("New Document"), self)
        self.actionOpenExampleDocument = QAction(tr("Open Example Document"), self)
        self.actionOpenPluginFolder = QAction(tr("Open Plugin Folder"), self)
        self.actionImport = QAction(tr("Import..."), self)
        self.actionImport.setShortcut("Ctrl+Alt+I")
        self.actionExport = QAction(tr("Export..."), self)
        self.actionExport.setShortcut("Ctrl+Alt+E")
        self.actionSave = QAction(tr("Save"), self)
        self.actionSave.setShortcut("Ctrl+S")
        self.actionSaveAs = QAction(tr("Save As..."), self)
        self.actionSaveAs.setShortcut("Ctrl+Shift+S")
        self.actionAbout = QAction(tr("About moneyGuru"), self)
        self.actionToggleReconciliationMode = QAction(tr("Toggle Reconciliation Mode"), self)
        self.actionToggleReconciliationMode.setShortcut("Ctrl+Shift+R")
        self.actionToggleAccountExclusion = QAction(tr("Toggle Exclusion Status of Account"), self)
        self.actionToggleAccountExclusion.setShortcut("Ctrl+Shift+X")
        self.actionShowSchedules = QAction(tr("Schedules"), self)
        self.actionShowSchedules.setShortcut("Ctrl+4")
        self.actionShowSchedules.setIcon(QIcon(QPixmap(':/schedules_48')))
        self.actionShowBudgets = QAction(tr("Budgets"), self)
        self.actionShowBudgets.setShortcut("Ctrl+5")
        self.actionShowBudgets.setIcon(QIcon(QPixmap(':/budget_48')))
        self.actionReconcileSelected = QAction(tr("Reconcile Selection"), self)
        self.actionReconcileSelected.setShortcut("Ctrl+R")
        self.actionMakeScheduleFromSelected = QAction(tr("Make Schedule from Selected"), self)
        self.actionMakeScheduleFromSelected.setShortcut("Ctrl+M")
        self.actionShowPreferences = QAction(tr("Preferences..."), self)
        self.actionPrint = QAction(tr("Print..."), self)
        self.actionPrint.setShortcut("Ctrl+P")
        self.actionQuit = QAction(tr("Quit moneyGuru"), self)
        self.actionQuit.setShortcut("Ctrl+Q")
        self.actionUndo = QAction(tr("Undo"), self)
        self.actionUndo.setShortcut("Ctrl+Z")
        self.actionRedo = QAction(tr("Redo"), self)
        self.actionRedo.setShortcut("Ctrl+Y")
        self.actionShowHelp = QAction(tr("moneyGuru Help"), self)
        self.actionShowHelp.setShortcut("F1")
        self.actionCheckForUpdate = QAction(tr("Check for update"), self)
        self.actionOpenDebugLog = QAction(tr("Open Debug Log"), self)
        self.actionDuplicateTransaction = QAction(tr("Duplicate Transaction"), self)
        self.actionDuplicateTransaction.setShortcut("Ctrl+D")
        self.actionJumpToAccount = QAction(tr("Jump to Account..."), self)
        self.actionJumpToAccount.setShortcut("Ctrl+Shift+A")
        self.actionNewTab = QAction(tr("New Tab"), self)
        self.actionNewTab.setShortcut("Ctrl+T")
        self.actionCloseTab = QAction(tr("Close Tab"), self)
        self.actionCloseTab.setShortcut("Ctrl+W")
        
        self.menuFile.addAction(self.actionNewDocument)
        self.menuFile.addAction(self.actionNewTab)
        self.menuFile.addAction(self.actionOpenDocument)
        self.menuFile.addAction(self.menuOpenRecent.menuAction())
        self.menuFile.addAction(self.actionOpenExampleDocument)
        self.menuFile.addAction(self.actionOpenPluginFolder)
        self.menuFile.addAction(self.actionImport)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.actionCloseTab)
        self.menuFile.addAction(self.actionSave)
        self.menuFile.addAction(self.actionSaveAs)
        self.menuFile.addAction(self.actionExport)
        self.menuFile.addAction(self.actionPrint)
        self.menuFile.addAction(self.actionQuit)
        self.menuView.addAction(self.actionShowNetWorth)
        self.menuView.addAction(self.actionShowProfitLoss)
        self.menuView.addAction(self.actionShowTransactions)
        self.menuView.addAction(self.actionShowSchedules)
        self.menuView.addAction(self.actionShowBudgets)
        self.menuView.addAction(self.actionShowPreviousView)
        self.menuView.addAction(self.actionShowNextView)
        self.menuView.addAction(self.menuDateRange.menuAction())
        self.menuView.addAction(self.actionShowPreferences)
        self.menuView.addAction(self.actionToggleGraph)
        self.menuView.addAction(self.actionTogglePieChart)
        self.menuEdit.addAction(self.actionNewItem)
        self.menuEdit.addAction(self.actionNewAccountGroup)
        self.menuEdit.addAction(self.actionDeleteItem)
        self.menuEdit.addAction(self.actionEditItem)
        self.menuEdit.addSeparator()
        self.menuEdit.addAction(self.actionMoveUp)
        self.menuEdit.addAction(self.actionMoveDown)
        self.menuEdit.addAction(self.actionDuplicateTransaction)
        self.menuEdit.addAction(self.actionMakeScheduleFromSelected)
        self.menuEdit.addAction(self.actionReconcileSelected)
        self.menuEdit.addAction(self.actionToggleReconciliationMode)
        self.menuEdit.addAction(self.actionToggleAccountExclusion)
        self.menuEdit.addSeparator()
        self.menuEdit.addAction(self.actionShowSelectedAccount)
        self.menuEdit.addAction(self.actionNavigateBack)
        self.menuEdit.addAction(self.actionJumpToAccount)
        self.menuEdit.addSeparator()
        self.menuEdit.addAction(self.actionUndo)
        self.menuEdit.addAction(self.actionRedo)
        self.menuHelp.addAction(self.actionShowHelp)
        self.menuHelp.addAction(self.actionCheckForUpdate)
        self.menuHelp.addAction(self.actionOpenDebugLog)
        self.menuHelp.addAction(self.actionAbout)
        mainmenus = [self.menuFile, self.menuEdit, self.menuView, self.menuHelp]
        for menu in mainmenus:
            self.menubar.addAction(menu.menuAction())
            setAccelKeys(menu)
        setAccelKeys(self.menubar)
        self.tabBar.setMovable(True)
        self.tabBar.setTabsClosable(True)
        
        seq = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_Right)
        self._shortcutNextTab = QShortcut(seq, self)
        seq = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_Left)
        self._shortcutPrevTab = QShortcut(seq, self)
        
        # Linux setup
        if ISLINUX:
            self.actionCheckForUpdate.setVisible(False) # This only works on Windows
    
    def _bindSignals(self):
        self.newItemButton.clicked.connect(self.actionNewItem.trigger)
        self.deleteItemButton.clicked.connect(self.actionDeleteItem.trigger)
        self.editItemButton.clicked.connect(self.actionEditItem.trigger)
        self.graphVisibilityButton.clicked.connect(self.actionToggleGraph.trigger)
        self.piechartVisibilityButton.clicked.connect(self.actionTogglePieChart.trigger)
        self.columnsVisibilityButton.clicked.connect(self.columnsVisibilityButtonClicked)
        self.recentDocuments.mustOpenItem.connect(self.doc.open)
        self.doc.documentOpened.connect(self.recentDocuments.insertItem)
        self.doc.documentSavedAs.connect(self.recentDocuments.insertItem)
        self.doc.documentPathChanged.connect(self.documentPathChanged)
        self.tabBar.currentChanged.connect(self.currentTabChanged)
        self.tabBar.tabCloseRequested.connect(self.tabCloseRequested)
        self.tabBar.tabMoved.connect(self.tabMoved)
        
        # Views
        self.actionShowNetWorth.triggered.connect(self.showNetWorthTriggered)        
        self.actionShowProfitLoss.triggered.connect(self.showProfitLossTriggered)        
        self.actionShowTransactions.triggered.connect(self.showTransactionsTriggered)        
        self.actionShowSchedules.triggered.connect(self.showSchedulesTriggered)        
        self.actionShowBudgets.triggered.connect(self.showBudgetsTriggered)        
        self.actionShowPreviousView.triggered.connect(self.showPreviousViewTriggered)        
        self.actionShowNextView.triggered.connect(self.showNextViewTriggered)        
        self.actionShowPreferences.triggered.connect(self.app.showPreferences)
        self.actionToggleGraph.triggered.connect(self.toggleGraphTriggered)
        self.actionTogglePieChart.triggered.connect(self.togglePieChartTriggered)
        
        # Document Edition
        self.actionNewItem.triggered.connect(self.newItemTriggered)
        self.actionNewAccountGroup.triggered.connect(self.newAccountGroupTriggered)
        self.actionDeleteItem.triggered.connect(self.deleteItemTriggered)
        self.actionEditItem.triggered.connect(self.editItemTriggered)
        self.actionMoveUp.triggered.connect(self.moveUpTriggered)
        self.actionMoveDown.triggered.connect(self.moveDownTriggered)
        self.actionDuplicateTransaction.triggered.connect(self.model.duplicate_item)
        self.actionUndo.triggered.connect(self.doc.model.undo)
        self.actionRedo.triggered.connect(self.doc.model.redo)
        
        # Open / Save / Import / Export / New
        self.actionNewDocument.triggered.connect(self.doc.new)
        self.actionOpenDocument.triggered.connect(self.doc.openDocument)
        self.actionOpenExampleDocument.triggered.connect(self.doc.openExampleDocument)
        self.actionOpenPluginFolder.triggered.connect(self.model.app.open_plugin_folder)
        self.actionImport.triggered.connect(self.doc.importDocument)
        self.actionSave.triggered.connect(self.doc.save)
        self.actionSaveAs.triggered.connect(self.doc.saveAs)
        self.actionExport.triggered.connect(self.model.export)
        
        # Misc
        self.actionNewTab.triggered.connect(self.model.new_tab)
        self.actionCloseTab.triggered.connect(self.closeTabTriggered)
        self.actionShowSelectedAccount.triggered.connect(self.model.show_account)
        self.actionNavigateBack.triggered.connect(self.navigateBackTriggered)
        self.actionJumpToAccount.triggered.connect(self.jumpToAccountTriggered)
        self.actionMakeScheduleFromSelected.triggered.connect(self.makeScheduleFromSelectedTriggered)
        self.actionReconcileSelected.triggered.connect(self.reconcileSelectedTriggered)
        self.actionToggleReconciliationMode.triggered.connect(self.toggleReconciliationModeTriggered)
        self.actionToggleAccountExclusion.triggered.connect(self.toggleAccountExclusionTriggered)
        self.actionPrint.triggered.connect(self._print)
        self.actionShowHelp.triggered.connect(self.app.showHelp)
        self.actionCheckForUpdate.triggered.connect(self.checkForUpdateTriggered)
        self.actionAbout.triggered.connect(self.aboutTriggered)
        self.actionOpenDebugLog.triggered.connect(self.openDebugLogTriggered)
        self.actionQuit.triggered.connect(self.close)
        
        # Extra Shortcuts
        self._shortcutNextTab.activated.connect(self.showNextViewTriggered)
        self._shortcutPrevTab.activated.connect(self.showPreviousViewTriggered)
    
    #--- QWidget overrides
    def closeEvent(self, event):
        if self.doc.confirmDestructiveAction():
            event.accept()
        else:
            event.ignore()
    
    #--- Private
    def _print(self):
        dialog = QPrintDialog(self)
        if dialog.exec_() != QPrintDialog.Accepted:
            return
        printer = dialog.printer()
        currentView = self.mainView.currentWidget()
        viewPrinter = ViewPrinter(printer, currentView)
        currentView.fitViewsForPrint(viewPrinter)
        viewPrinter.render()
    
    def _getViewforPane(self, pane_type, pane_view):
        if pane_view in self.model2view:
            view = self.model2view[pane_view]
        else:
            view = PANETYPE2VIEWCLASS[pane_type](model=pane_view)
            self.model2view[pane_view] = view
            self.mainView.addWidget(view)
            view.restoreSubviewsSize()
        return view
    
    def _setTabIndex(self, index):
        if not self.tabBar.count():
            return
        self.tabBar.setCurrentIndex(index)
        self._updateActionsState()
        pane_type = self.model.pane_type(index)
        pane_view = self.model.pane_view(index)
        view = self._getViewforPane(pane_type, pane_view)
        self.mainView.setCurrentWidget(view)
        view.setFocus()
    
    def _activeView(self):
        paneIndex = self.model.current_pane_index
        return self.model.pane_view(paneIndex)
    
    def _updateActionsState(self):
        # Updates enable/disable checked/unchecked state of all actions. These state can change
        # under various conditions: main view change, date range type change and when reconciliation
        # mode is toggled
        
        # Determine what actions are enabled
        view = self._activeView()
        viewType = view.VIEW_TYPE
        isSheet = viewType in {PaneType.NetWorth, PaneType.Profit}
        isTransactionOrEntryTable = viewType in {PaneType.Transaction, PaneType.Account}
        canToggleReconciliation = viewType == PaneType.Account and view.can_toggle_reconciliation_mode
        
        newItemLabel = {
            PaneType.NetWorth: tr("New Account"),
            PaneType.Profit: tr("New Account"),
            PaneType.Transaction: tr("New Transaction"),
            PaneType.Account: tr("New Transaction"),
            PaneType.Schedule: tr("New Schedule"),
            PaneType.Budget: tr("New Budget"),
            PaneType.GeneralLedger: tr("New Transaction"),
        }.get(viewType, tr("New Item")) #XXX make "New Item" disabled
        self.actionNewItem.setText(newItemLabel)
        self.actionNewAccountGroup.setEnabled(isSheet)
        self.actionMoveDown.setEnabled(isTransactionOrEntryTable)
        self.actionMoveUp.setEnabled(isTransactionOrEntryTable)
        self.actionDuplicateTransaction.setEnabled(isTransactionOrEntryTable)
        self.actionMakeScheduleFromSelected.setEnabled(isTransactionOrEntryTable)
        self.actionReconcileSelected.setEnabled(viewType == PaneType.Account and view.reconciliation_mode)
        self.actionShowNextView.setEnabled(self.model.current_pane_index < self.model.pane_count-1)
        self.actionShowPreviousView.setEnabled(self.model.current_pane_index > 0)
        self.actionShowSelectedAccount.setEnabled(isSheet or isTransactionOrEntryTable)
        self.actionNavigateBack.setEnabled(viewType == PaneType.Account)
        self.actionToggleReconciliationMode.setEnabled(canToggleReconciliation)
        self.actionToggleAccountExclusion.setEnabled(isSheet)
    
    def _updateUndoActions(self):
        if self.doc.model.can_undo():
            self.actionUndo.setEnabled(True)
            self.actionUndo.setText(tr("Undo {0}").format(self.doc.model.undo_description()))
        else:
            self.actionUndo.setEnabled(False)
            self.actionUndo.setText(tr("Undo"))
        if self.doc.model.can_redo():
            self.actionRedo.setEnabled(True)
            self.actionRedo.setText(tr("Redo {0}").format(self.doc.model.redo_description()))
        else:
            self.actionRedo.setEnabled(False)
            self.actionRedo.setText(tr("Redo"))
    
    #--- Actions
    # Views
    def showNetWorthTriggered(self):
        self.model.select_pane_of_type(PaneType.NetWorth)
    
    def showProfitLossTriggered(self):
        self.model.select_pane_of_type(PaneType.Profit)
    
    def showTransactionsTriggered(self):
        self.model.select_pane_of_type(PaneType.Transaction)
    
    def showSchedulesTriggered(self):
        self.model.select_pane_of_type(PaneType.Schedule)
    
    def showBudgetsTriggered(self):
        self.model.select_pane_of_type(PaneType.Budget)
    
    def showPreviousViewTriggered(self):
        self.model.select_previous_view()
    
    def showNextViewTriggered(self):
        self.model.select_next_view()
    
    # Document Edition
    def newItemTriggered(self):
        self.model.new_item()
    
    def newAccountGroupTriggered(self):
        self.model.new_group()
    
    def deleteItemTriggered(self):
        self.model.delete_item()
    
    def editItemTriggered(self):
        self.model.edit_item()
    
    def moveUpTriggered(self):
        self.model.move_up()
    
    def moveDownTriggered(self):
        self.model.move_down()
    
    # Misc
    def closeTabTriggered(self):
        self.model.close_pane(self.model.current_pane_index)
    
    def navigateBackTriggered(self):
        self.model.navigate_back()
    
    def jumpToAccountTriggered(self):
        self.model.jump_to_account()
    
    def makeScheduleFromSelectedTriggered(self):
        self.model.make_schedule_from_selected()
    
    def reconcileSelectedTriggered(self):
        self._activeView().etable.toggle_reconciled()
    
    def toggleReconciliationModeTriggered(self):
        self._activeView().toggle_reconciliation_mode()
        self._updateActionsState()
    
    def toggleAccountExclusionTriggered(self):
        viewType = self.model.pane_type(self.model.current_pane_index)
        if viewType in {PaneType.NetWorth, PaneType.Profit}:
            self._activeView().sheet.toggle_excluded()
    
    def toggleGraphTriggered(self):
        self.model.toggle_area_visibility(PaneArea.BottomGraph)
    
    def togglePieChartTriggered(self):
        self.model.toggle_area_visibility(PaneArea.RightChart)
    
    def columnsVisibilityButtonClicked(self):
        items = self.model.column_menu_items()
        if not items:
            return
        menu = QMenu()
        for i, (display, marked) in enumerate(items):
            action = menu.addAction(display)
            action.setCheckable(True)
            action.setChecked(marked)
            action.setData(i)
            action.triggered.connect(self.columnsMenuItemWasClicked)
        self._columnMenuHolder = menu # we need to hold a reference to it while it popups
        button = self.columnsVisibilityButton
        menu.popup(button.parentWidget().mapToGlobal(button.geometry().topLeft()))
    
    def columnsMenuItemWasClicked(self):
        action = self.sender()
        if action is not None:
            index = action.data()
            self.model.toggle_column_menu_item(index)
    
    def checkForUpdateTriggered(self):
        QProcess.execute('updater.exe', ['/checknow'])
    
    def aboutTriggered(self):
        self.app.showAboutBox()
    
    def openDebugLogTriggered(self):
        debugLogPath = op.join(getAppData(), 'debug.log')
        url = QUrl.fromLocalFile(debugLogPath)
        QDesktopServices.openUrl(url)
    
    #--- Other Signals
    def currentTabChanged(self, index):
        self.model.current_pane_index = index
        self._setTabIndex(index)
    
    def documentPathChanged(self):
        if self.doc.documentPath:
            title = "moneyGuru ({})".format(self.doc.documentPath)
        else:
            title = "moneyGuru"
        self.setWindowTitle(title)
    
    def tabCloseRequested(self, index):
        self.model.close_pane(index)
    
    def tabMoved(self, fromIndex, toIndex):
        self.model.move_pane(fromIndex, toIndex)
    
    #--- model --> view
    def change_current_pane(self):
        self._setTabIndex(self.model.current_pane_index)
    
    def refresh_panes(self):
        while self.tabBar.count() < self.model.pane_count:
            self.tabBar.addTab('')
        for i in range(self.model.pane_count):
            pane_label = self.model.pane_label(i)
            pane_label = escapeamp(pane_label)
            self.tabBar.setTabText(i, pane_label)
            pane_type = self.model.pane_type(i)
            pane_view = self.model.pane_view(i)
            # Ensure that the view's "view" has been created and bound
            self._getViewforPane(pane_type, pane_view)
            iconname = PANETYPE2ICON.get(pane_type)
            icon = QIcon(QPixmap(':/{0}'.format(iconname))) if iconname else QIcon()
            self.tabBar.setTabIcon(i, icon)
        # It's important that we proceed with tab removal *after* we've completed tab initialization.
        # We're walking on eggshells here. refresh_panes() can be called in multiple situations, one
        # of them is during the opening of a document. When that happens when another document was
        # previously opened, all views' model are uninitalized and don't have their "view" attribute
        # set yet. If we proceed with the setCurrentIndex() call below before _getViewforPane()
        # could be called above, we get a crash.
        if self.tabBar.currentIndex() < self.model.pane_count:
            # Normally, we don't touch the tabBar index here and wait for change_current_pane,
            # but when we remove tabs, it's possible that currentTabChanged end up being called and
            # then the tab selection is bugged. I tried disconnecting/reconnecting the signal, but
            # this is buggy. So when a selected tab is about to be removed, we change the selection
            # to the model's one immediately.
            self.tabBar.setCurrentIndex(self.model.current_pane_index)
        while self.tabBar.count() > self.model.pane_count:
            self.tabBar.removeTab(self.tabBar.count()-1)
        self.tabBar.setTabsClosable(self.model.pane_count > 1)
    
    def refresh_status_line(self):
        self.statusLabel.setText(self.model.status_line)
    
    def refresh_undo_actions(self):
        self._updateUndoActions()
    
    def restore_window_frame(self, frame):
        self.setGeometry(*frame)
    
    def save_window_frame(self):
        r = self.geometry()
        return (r.x(), r.y(), r.width(), r.height())
    
    def show_message(self, msg):
        title = tr("Warning")
        QMessageBox.warning(self, title, msg)
    
    def update_area_visibility(self):
        hidden = self.model.hidden_areas
        graphimg = ':/graph_visibility_{}_16'.format('off' if PaneArea.BottomGraph in hidden else 'on')
        pieimg = ':/piechart_visibility_{}_16'.format('off' if PaneArea.RightChart in hidden else 'on')
        self.graphVisibilityButton.setIcon(QIcon(QPixmap(graphimg)))
        self.piechartVisibilityButton.setIcon(QIcon(QPixmap(pieimg)))
    
    def view_closed(self, index):
        self.tabBar.removeTab(index)
        self.tabBar.setTabsClosable(self.model.pane_count > 1)
示例#45
0
文件: db_manager.py 项目: jarped/QGIS
    def setupUi(self):
        self.setWindowTitle(self.tr("DB Manager"))
        self.setWindowIcon(QIcon(":/db_manager/icon"))
        self.resize(QSize(700, 500).expandedTo(self.minimumSizeHint()))

        # create central tab widget and add the first 3 tabs: info, table and preview
        self.tabs = QTabWidget()
        self.info = InfoViewer(self)
        self.tabs.addTab(self.info, self.tr("Info"))
        self.table = TableViewer(self)
        self.tabs.addTab(self.table, self.tr("Table"))
        self.preview = LayerPreview(self)
        self.tabs.addTab(self.preview, self.tr("Preview"))
        self.setCentralWidget(self.tabs)

        # display close button for all tabs but the first 3 ones, i.e.
        # HACK: just hide the close button where not needed (GS)
        self.tabs.setTabsClosable(True)
        self.tabs.tabCloseRequested.connect(self.close_tab)
        tabbar = self.tabs.tabBar()
        for i in range(3):
            btn = tabbar.tabButton(i, QTabBar.RightSide) if tabbar.tabButton(i, QTabBar.RightSide) else tabbar.tabButton(i, QTabBar.LeftSide)
            btn.resize(0, 0)
            btn.hide()

        # Creates layout for message bar
        self.layout = QGridLayout(self.info)
        self.layout.setContentsMargins(0, 0, 0, 0)
        spacerItem = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
        self.layout.addItem(spacerItem, 1, 0, 1, 1)
        # init messageBar instance
        self.infoBar = QgsMessageBar(self.info)
        sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
        self.infoBar.setSizePolicy(sizePolicy)
        self.layout.addWidget(self.infoBar, 0, 0, 1, 1)

        # create database tree
        self.dock = QDockWidget("Tree", self)
        self.dock.setObjectName("DB_Manager_DBView")
        self.dock.setFeatures(QDockWidget.DockWidgetMovable)
        self.tree = DBTree(self)
        self.dock.setWidget(self.tree)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock)

        # create status bar
        self.statusBar = QStatusBar(self)
        self.setStatusBar(self.statusBar)

        # create menus
        self.menuBar = QMenuBar(self)
        self.menuDb = QMenu(self.tr("&Database"), self)
        self.menuBar.addMenu(self.menuDb)
        self.menuSchema = QMenu(self.tr("&Schema"), self)
        actionMenuSchema = self.menuBar.addMenu(self.menuSchema)
        self.menuTable = QMenu(self.tr("&Table"), self)
        actionMenuTable = self.menuBar.addMenu(self.menuTable)
        self.menuHelp = None  # QMenu(self.tr("&Help"), self)
        # actionMenuHelp = self.menuBar.addMenu(self.menuHelp)

        self.setMenuBar(self.menuBar)

        # create toolbar
        self.toolBar = QToolBar("Default", self)
        self.toolBar.setObjectName("DB_Manager_ToolBar")
        self.addToolBar(self.toolBar)

        # create menus' actions

        # menu DATABASE
        sep = self.menuDb.addSeparator()
        sep.setObjectName("DB_Manager_DbMenu_placeholder")
        sep.setVisible(False)

        self.actionRefresh = self.menuDb.addAction(QIcon(":/db_manager/actions/refresh"), self.tr("&Refresh"),
                                                   self.refreshActionSlot, QKeySequence("F5"))
        self.actionSqlWindow = self.menuDb.addAction(QIcon(":/db_manager/actions/sql_window"), self.tr("&SQL window"),
                                                     self.runSqlWindow, QKeySequence("F2"))
        self.menuDb.addSeparator()
        self.actionClose = self.menuDb.addAction(QIcon(), self.tr("&Exit"), self.close, QKeySequence("CTRL+Q"))

        # menu SCHEMA
        sep = self.menuSchema.addSeparator()
        sep.setObjectName("DB_Manager_SchemaMenu_placeholder")
        sep.setVisible(False)

        actionMenuSchema.setVisible(False)

        # menu TABLE
        sep = self.menuTable.addSeparator()
        sep.setObjectName("DB_Manager_TableMenu_placeholder")
        sep.setVisible(False)

        self.actionImport = self.menuTable.addAction(QIcon(":/db_manager/actions/import"),
                                                     self.tr("&Import layer/file"), self.importActionSlot)
        self.actionExport = self.menuTable.addAction(QIcon(":/db_manager/actions/export"), self.tr("&Export to file"),
                                                     self.exportActionSlot)
        self.menuTable.addSeparator()
        #self.actionShowSystemTables = self.menuTable.addAction(self.tr("Show system tables/views"), self.showSystemTables)
        #self.actionShowSystemTables.setCheckable(True)
        #self.actionShowSystemTables.setChecked(True)
        actionMenuTable.setVisible(False)

        # add actions to the toolbar
        self.toolBar.addAction(self.actionRefresh)
        self.toolBar.addAction(self.actionSqlWindow)
        self.toolBar.addAction(self.actionImport)
        self.toolBar.addAction(self.actionExport)
示例#46
0
class MainWindow(QMainWindow):
    def __init__(self, app):
        QMainWindow.__init__(self, None)
        self.app = app
        self._setupUi()
        self.elementTable = ElementTable(self.app.model.element_table,
                                         self.elementTableView)
        self.openedFileLabel = TextField(self.app.model.opened_file_label,
                                         self.openedFileLabelView)

        self.openButton.clicked.connect(self.actionLoadPDF.trigger)

    def _setupActions(self):
        ACTIONS = [
            ('actionLoadPDF', 'Ctrl+O', '', tr("Load PDF"),
             self.app.model.load_pdf),
        ]
        createActions(ACTIONS, self)

    def _setupMenu(self):
        self.menubar = QMenuBar(self)
        self.menubar.setGeometry(QRect(0, 0, 42, 22))
        self.menuFile = QMenu(self.menubar)
        self.menuFile.setTitle(tr("File"))
        self.menuHelp = QMenu(self.menubar)
        self.menuHelp.setTitle(tr("Help"))
        self.setMenuBar(self.menubar)

        self.menuFile.addAction(self.actionLoadPDF)
        self.menuFile.addAction(self.app.actionLoadProject)
        self.menuFile.addAction(self.app.actionSaveProject)
        self.menuFile.addAction(self.app.actionQuit)
        self.menuHelp.addAction(self.app.actionShowHelp)
        self.menuHelp.addAction(self.app.actionCheckForUpdate)
        self.menuHelp.addAction(self.app.actionOpenDebugLog)
        self.menuHelp.addAction(self.app.actionAbout)

        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuHelp.menuAction())

    def _setupUi(self):
        self.setWindowTitle(QCoreApplication.instance().applicationName())
        self.resize(900, 600)
        self.mainWidget = QWidget(self)
        self.verticalLayout = QVBoxLayout(self.mainWidget)
        self.fileLayout = QHBoxLayout()
        self.openButton = QPushButton("Open File")
        # We want to leave the space to the label
        sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
        self.openButton.setSizePolicy(sizePolicy)
        self.fileLayout.addWidget(self.openButton)
        self.openedFileLabelView = QLabel()
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
        self.openedFileLabelView.setSizePolicy(sizePolicy)
        self.fileLayout.addWidget(self.openedFileLabelView)
        self.verticalLayout.addLayout(self.fileLayout)
        self.tabViewsLayout = QHBoxLayout()
        self.topTabWidget = QTabWidget()
        self.elementTableView = ElementTableView()
        self.topTabWidget.addTab(self.elementTableView, "Table")
        self.pageController = PageController(self.app.model.page_controller)
        self.topTabWidget.addTab(self.pageController, "Page")
        self.tabViewsLayout.addWidget(self.topTabWidget)
        self.bottomTabWidget = QTabWidget()
        # We want to leave the most screen estate possible to the table.
        sizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Expanding)
        self.bottomTabWidget.setSizePolicy(sizePolicy)
        self.editTab = EditPane(self.app.model.edit_pane)
        self.bottomTabWidget.addTab(self.editTab, "Edit")
        self.buildTab = BuildPane(self.app.model.build_pane)
        self.bottomTabWidget.addTab(self.buildTab, "Build")
        self.tabViewsLayout.addWidget(self.bottomTabWidget)
        self.verticalLayout.addLayout(self.tabViewsLayout)
        self.setCentralWidget(self.mainWidget)

        self._setupActions()
        self._setupMenu()
        moveToScreenCenter(self)
示例#47
0
class BrowserWindow(QMainWindow):
    def retranslateUi(self):
        self.setWindowTitle(
            QApplication.translate("self", "self", None,
                                   QApplication.UnicodeUTF8))
        self.menuFile.setTitle(
            QApplication.translate("self", "&File", None,
                                   QApplication.UnicodeUTF8))
        self.menuView.setTitle(
            QApplication.translate("self", "&View", None,
                                   QApplication.UnicodeUTF8))
        self.menuEdit.setTitle(
            QApplication.translate("self", "&Edit", None,
                                   QApplication.UnicodeUTF8))
        self.menuHelp.setTitle(
            QApplication.translate("self", "&Help", None,
                                   QApplication.UnicodeUTF8))
        self.toolBar.setWindowTitle(
            QApplication.translate("self", "toolBar", None,
                                   QApplication.UnicodeUTF8))
        self.actionHome.setText(
            QApplication.translate("self", "&Home", None,
                                   QApplication.UnicodeUTF8))
        self.actionHome.setToolTip(
            QApplication.translate("self", "Go Home", None,
                                   QApplication.UnicodeUTF8))
        self.actionShowMenu.setText(
            QApplication.translate("self", "Show &Menu", None,
                                   QApplication.UnicodeUTF8))
        self.actionShowToolbar.setText(
            QApplication.translate("self", "Show &Toolbar", None,
                                   QApplication.UnicodeUTF8))
        self.actionClose.setText(
            QApplication.translate("self", "&Close", None,
                                   QApplication.UnicodeUTF8))
        self.actionModifyWebapp.setText(
            QApplication.translate("self", "Modify &Webapp", None,
                                   QApplication.UnicodeUTF8))
        self.actionEditPreferences.setText(
            QApplication.translate("self", "Edit &Preferences", None,
                                   QApplication.UnicodeUTF8))
        self.actionPrint.setText(
            QApplication.translate("self", "&Print", None,
                                   QApplication.UnicodeUTF8))
        self.actionAbout.setText(
            QApplication.translate("self", "&About", None,
                                   QApplication.UnicodeUTF8))

    def __init__(self, appid, base, name):
        super(BrowserWindow, self).__init__()

        self.appid = appid
        self.name = name
        self.original_name = name
        self.base = base

        # Main widgets
        self.centralwidget = QWidget(self)
        self.gridLayout_2 = QGridLayout(self.centralwidget)
        self.setCentralWidget(self.centralwidget)
        self.urlLineEdit = QLineEdit(self)
        self.progressBar = QProgressBar(self)

        # Custom webview
        self.page = LocalWebPage()
        self.page.setFeaturePermission(self.page.mainFrame(),
                                       LocalWebPage.Notifications,
                                       LocalWebPage.PermissionGrantedByUser)
        self.webkitNotifications = WebkitNotifications(self)

        self.webViewMain = LocalWebView(self.centralwidget)
        self.webViewMain.setPage(self.page)
        self.gridLayout_2.addWidget(self.webViewMain, 0, 0, 1, 1)

        self.webViewMain.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_2.setContentsMargins(0, 0, 0, 0)

        self.menubar = QMenuBar(self)
        self.menuFile = QMenu(self.menubar)
        self.menuView = QMenu(self.menubar)
        self.menuEdit = QMenu(self.menubar)
        self.menuHelp = QMenu(self.menubar)
        self.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(self)
        self.setStatusBar(self.statusbar)
        self.toolBar = QToolBar(self)
        self.toolBar.setMovable(False)
        self.toolBar.setFloatable(False)
        self.addToolBar(Qt.TopToolBarArea, self.toolBar)

        # Create actions
        self.actionOpenLinkInNewWindow = self.page.action(
            self.page.OpenLinkInNewWindow)
        self.actionOpenLinkInNewWindow.setText(
            tr('BrowserWindow', 'Open in &Browser'))
        self.actionBack = self.page.action(self.page.Back)
        self.actionForward = self.page.action(self.page.Forward)
        self.actionStop = self.page.action(self.page.Stop)
        self.actionReload = self.page.action(self.page.Reload)
        self.actionHome = QAction(self)
        self.actionShowMenu = QAction(self)
        self.actionShowMenu.setCheckable(True)
        self.actionShowToolbar = QAction(self)
        self.actionShowToolbar.setCheckable(True)
        self.actionClose = QAction(self)
        self.actionModifyWebapp = QAction(self)
        self.actionEditPreferences = QAction(self)
        self.actionPrint = QAction(self)
        self.actionSaveLink = self.page.action(self.page.DownloadLinkToDisk)
        self.actionSaveLink.setEnabled(False)
        self.actionAbout = QAction(self)

        # Populate menu and toolbars
        self.menuFile.addAction(self.actionHome)
        self.menuFile.addAction(self.actionBack)
        self.menuFile.addAction(self.actionForward)
        self.menuFile.addAction(self.actionStop)
        self.menuFile.addAction(self.actionReload)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.actionPrint)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.actionClose)
        self.menuView.addAction(self.actionShowMenu)
        self.menuView.addAction(self.actionShowToolbar)
        self.menuView.addSeparator()
        self.menuEdit.addAction(self.actionModifyWebapp)
        #self.menuEdit.addAction(self.actionEditPreferences)
        self.menuHelp.addAction(self.actionAbout)
        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuEdit.menuAction())
        self.menubar.addAction(self.menuView.menuAction())
        self.menubar.addAction(self.menuHelp.menuAction())
        self.toolBar.addAction(self.actionHome)
        self.toolBar.addAction(self.actionBack)
        self.toolBar.addAction(self.actionForward)
        self.toolBar.addWidget(self.urlLineEdit)

        self.toolBar.addAction(self.actionStop)
        self.toolBar.addAction(self.actionReload)

        self.retranslateUi()
        QMetaObject.connectSlotsByName(self)

        self.setWindowTitle(self.name)

        # Set up cookie jar that persists sessions
        self.cookieJar = PersistableCookieJar(self, identifier=self.appid)
        self.cookieJar.load()
        self.webViewMain.page().networkAccessManager().setCookieJar(
            self.cookieJar)

        # Set up link delegation so that external links open in web browser.
        self.webViewMain.page().setLinkDelegationPolicy(
            QWebPage.DelegateExternalLinks)

        self.desktopEntry = desktop.getEntry(self.appid)

        # Set icons for actions; this can't be done in the designer, AFAICT
        self.actionHome.setIcon(QIcon.fromTheme('go-home'))
        self.actionAbout.setIcon(QIcon.fromTheme('help-about'))

        # Set up shortcuts
        self.actionStop.setShortcut(Qt.Key_Escape)
        self.actionBack.setShortcut(QKeySequence.Back)
        self.actionForward.setShortcut(QKeySequence.Forward)
        self.actionReload.setShortcut(QKeySequence.Refresh)
        self.actionHome.setShortcut('Ctrl+Home')
        self.actionShowMenu.setShortcut('Ctrl+m')
        self.actionShowToolbar.setShortcut('Ctrl+t')
        self.actionPrint.setShortcut(QKeySequence.Print)

        self.backShortcut = QShortcut(self)
        self.backShortcut.setKey(Qt.Key_Back)
        self.backShortcut.activated.connect(self.webViewMain.back)

        self.forwardShortcut = QShortcut(self)
        self.forwardShortcut.setKey(Qt.Key_Forward)
        self.forwardShortcut.activated.connect(self.webViewMain.forward)

        # Set up context menu
        self.webViewMain.setContextMenuPolicy(Qt.CustomContextMenu)
        self.webViewMain.customContextMenuRequested.connect(self.showMenu)

        # Setup statusbar and toolbar
        for c in self.statusBar().children()[0].children():
            c.removeWidget(c)
        self.statusBar().addPermanentWidget(self.progressBar, 1)

        self.actionShowToolbar.setChecked(True)
        self.actionShowMenu.setChecked(True)

        # Icon
        if self.desktopEntry.hasKey('Icon'):
            self.icon = QIcon(self.desktopEntry.get('Icon'))
            self.setWindowIcon(self.icon)
        else:
            self.webViewMain.iconChanged.connect(self.setWindowIcon)

        # Set up events
        if self.desktopEntry.get('X-%s-menu-enabled' % APP_NAME) == '0':
            self.actionShowMenu.setChecked(False)
        else:
            self.actionShowMenu.setChecked(True)
        if self.desktopEntry.get('X-%s-toolbar-enabled' % APP_NAME) == '0':
            self.actionShowToolbar.setChecked(False)
        else:
            self.actionShowToolbar.setChecked(True)

        self.webViewMain.linkClicked.connect(self._onLinkClick)
        self.webViewMain.titleChanged.connect(self.setWindowTitle)
        self.webViewMain.loadProgress.connect(self._setLoadingStatus)
        self.webViewMain.urlChanged.connect(
            lambda x: self.urlLineEdit.setText(x.toString()))
        self.page.printRequested.connect(self._onPrint)
        self.page.loadFinished.connect(self._loadingFinished)
        self.actionHome.triggered.connect(
            lambda x: self.webViewMain.load(QUrl(self.base)))
        self.actionClose.triggered.connect(self.close)
        self.actionPrint.triggered.connect(self._onPrint)
        self.urlLineEdit.returnPressed.connect(self._onUrlEdit)
        self.actionShowToolbar.triggered.connect(self._onShowToolbar)
        self.actionShowMenu.triggered.connect(self._onShowMenu)
        self.actionAbout.triggered.connect(lambda x: about.show(self))
        self.actionModifyWebapp.triggered.connect(self._onModify)

        self._onShowMenu()
        self._onShowToolbar()

        try:
            self.resize(int(self.desktopEntry.getWindowWidth()),
                        int(self.desktopEntry.getWindowHeight()))
        except (ValueError, TypeError):
            self.resize(800, 600)

        # Load first page
        self.webViewMain.load(QUrl(base))

        self.editor = SiteEditorWindow(self.desktopEntry, isNew=False)

    def _onModify(self):
        self.editor.show()

    def closeEvent(self, qCloseEvent):
        self.desktopEntry.setWindowWidth(self.width())
        self.desktopEntry.setWindowHeight(self.height())
        self.desktopEntry.write()

    def _onPrint(self):
        printer = QPrinter()
        dialog = QPrintDialog(printer, self)
        if dialog.exec_() != QDialog.Accepted:
            return
        self.page.mainFrame().print_(printer)

    def _loadingFinished(self):
        # TODO: Add user scripts here
        # TODO: Add user styles here

        # Override window.webkitNotifications
        self.page.mainFrame().addToJavaScriptWindowObject(
            "_x_webplier_webkitNotifications", self.webkitNotifications)
        self.page.mainFrame().evaluateJavaScript(
            WebkitNotifications.JAVASCRIPT)

    def _setLoadingStatus(self, value):
        if value < 100:
            self.progressBar.setValue(value)
            self.progressBar.show()
            self.statusBar().show()
            self.actionReload.setVisible(False)
            self.actionStop.setVisible(True)
        else:
            self.page.setFeaturePermission(
                self.page.mainFrame(), LocalWebPage.Notifications,
                LocalWebPage.PermissionGrantedByUser)
            self.progressBar.hide()
            self.statusBar().hide()
            self.actionReload.setVisible(True)
            self.actionStop.setVisible(False)

    def _onUrlEdit(self):
        url = unicode(self.urlLineEdit.text())
        qurl = QUrl(url)
        if not qurl.scheme():
            qurl.setScheme('http')

        self.webViewMain.load(qurl)

    def _onLinkClick(self, qurl):
        url = unicode(qurl.toString())
        if not unicode(url).startswith(self.base):
            webbrowser.open(url, 1)
        else:
            self.webViewMain.load(qurl)

    def _onShowToolbar(self):
        if self.actionShowToolbar.isChecked():
            self.toolBar.show()
            self.desktopEntry.set('X-%s-toolbar-enabled' % APP_NAME, '1')
        else:
            self.toolBar.hide()
            self.desktopEntry.set('X-%s-toolbar-enabled' % APP_NAME, '0')

    def _onShowMenu(self):
        if self.actionShowMenu.isChecked():
            self.menubar.show()
            self.desktopEntry.set('X-%s-menu-enabled' % APP_NAME, '1')
        else:
            self.menubar.hide()
            self.desktopEntry.set('X-%s-menu-enabled' % APP_NAME, '0')

    def showMenu(self, point):
        m = self.webViewMain.page().createStandardContextMenu()

        # TODO: Make this less awful and fragile
        for a in m.actions():
            if a == self.actionSaveLink:
                m.removeAction(a)

        m.addSeparator()
        m.addAction(self.actionShowMenu)
        m.addAction(self.actionShowToolbar)
        globalpos = self.mapToParent(point)

        m.exec_(globalpos)
示例#48
0
class MenuQt(object):
    """主菜单"""
    add_record = QFrame(CENTRAL_WIDGET)  # 增加交易记录的界面
    grid_layout_widget = QWidget(add_record)  # title的container
    grid_layout = QGridLayout(grid_layout_widget)
    title = QLabel(grid_layout_widget)
    statusbar = QStatusBar(WINDOW)
    # 股票代码的title以及输入框
    grid_layout_widget_2 = QWidget(add_record)
    grid_layout_2 = QGridLayout(grid_layout_widget_2)
    share_code_title = QLabel(grid_layout_widget_2)
    grid_layout_widget_14 = QWidget(add_record)
    grid_layout_14 = QGridLayout(grid_layout_widget_14)
    share_code_input = QLineEdit(grid_layout_widget_14)
    # 股票名称的title和显示框
    grid_layout_widget_12 = QWidget(add_record)
    grid_layout_12 = QGridLayout(grid_layout_widget_12)
    share_name_title = QLabel(grid_layout_widget_12)
    grid_layout_widget_21 = QWidget(add_record)
    grid_layout_21 = QGridLayout(grid_layout_widget_21)
    share_name_show = QLineEdit(grid_layout_widget_21)
    # 买入日期的title和输入框
    grid_layout_widget_3 = QWidget(add_record)
    grid_layout_3 = QGridLayout(grid_layout_widget_3)
    buy_date_title = QLabel(grid_layout_widget_3)
    grid_layout_widget_15 = QWidget(add_record)
    grid_layout_15 = QGridLayout(grid_layout_widget_15)
    buy_date_input = QDateEdit(grid_layout_widget_15)
    # 卖出日期的title和输入框
    grid_layout_widget_10 = QWidget(add_record)
    grid_layout_10 = QGridLayout(grid_layout_widget_10)
    sale_date_title = QLabel(grid_layout_widget_10)
    grid_layout_widget_20 = QWidget(add_record)
    grid_layout_20 = QGridLayout(grid_layout_widget_20)
    sale_date_input = QDateEdit(grid_layout_widget_20)
    # 买入数量的title和输入框
    grid_layout_widget_5 = QWidget(add_record)
    grid_layout_5 = QGridLayout(grid_layout_widget_5)
    buy_num_title = QLabel(grid_layout_widget_5)
    grid_layout_widget_16 = QWidget(add_record)
    grid_layout_16 = QGridLayout(grid_layout_widget_16)
    buy_num_input = QLineEdit(grid_layout_widget_16)
    # 卖出数量的title和输入框
    grid_layout_widget_25 = QWidget(add_record)
    grid_layout_25 = QGridLayout(grid_layout_widget_25)
    sale_num_input = QLineEdit(grid_layout_widget_25)
    grid_layout_widget_13 = QWidget(add_record)
    grid_layout_13 = QGridLayout(grid_layout_widget_13)
    sale_num_title = QLabel(grid_layout_widget_13)
    # 买入价格的title和输入框
    grid_layout_widget_4 = QWidget(add_record)
    grid_layout_4 = QGridLayout(grid_layout_widget_4)
    buy_price_title = QLabel(grid_layout_widget_4)
    grid_layout_widget_17 = QWidget(add_record)
    grid_layout_17 = QGridLayout(grid_layout_widget_17)
    buy_price_input = QLineEdit(grid_layout_widget_17)
    # 卖出价格和输入框
    grid_layout_widget_11 = QWidget(add_record)
    grid_layout_11 = QGridLayout(grid_layout_widget_11)
    sale_price_title = QLabel(grid_layout_widget_11)
    grid_layout_widget_22 = QWidget(add_record)
    grid_layout_22 = QGridLayout(grid_layout_widget_22)
    sale_price_input = QLineEdit(grid_layout_widget_22)
    # 持仓价格和显示框
    grid_layout_widget_6 = QWidget(add_record)
    grid_layout_6 = QGridLayout(grid_layout_widget_6)
    have_avg_price = QLabel(grid_layout_widget_6)
    grid_layout_widget_19 = QWidget(add_record)
    grid_layout_19 = QGridLayout(grid_layout_widget_19)
    buv_avg_price_show = QLineEdit(grid_layout_widget_19)
    # 持仓数量和显示框
    grid_layout_widget_7 = QWidget(add_record)
    grid_layout_7 = QGridLayout(grid_layout_widget_7)
    have_num_title = QLabel(grid_layout_widget_7)
    grid_layout_widget_18 = QWidget(add_record)
    grid_layout_18 = QGridLayout(grid_layout_widget_18)
    have_num_show = QLineEdit(grid_layout_widget_18)
    # 当前盈利和显示框
    grid_layout_widget_8 = QWidget(add_record)
    grid_layout_8 = QGridLayout(grid_layout_widget_8)
    win_title = QLabel(grid_layout_widget_8)
    grid_layout_widget_24 = QWidget(add_record)
    grid_layout_24 = QGridLayout(grid_layout_widget_24)
    win_show = QLineEdit(grid_layout_widget_24)
    # 可卖数量和显示框
    grid_layout_widget_9 = QWidget(add_record)
    grid_layout_9 = QGridLayout(grid_layout_widget_9)
    can_sale_num_title = QLabel(grid_layout_widget_9)
    grid_layout_widget_23 = QWidget(add_record)
    grid_layout_23 = QGridLayout(grid_layout_widget_23)
    can_sale_num_show = QLineEdit(grid_layout_widget_23)
    # 查询按钮 计算按钮 保存按钮
    # grid_layout_widget_26 = QWidget(add_record)
    # grid_layout_26 = QGridLayout(grid_layout_widget_26)
    # query_button = QPushButton(grid_layout_widget_26)

    # grid_layout_widget_27 = QWidget(add_record)
    # grid_layout_27 = QGridLayout(grid_layout_widget_27)
    # compute_button = QPushButton(grid_layout_widget_27)

    grid_layout_widget_28 = QWidget(add_record)
    grid_layout_28 = QGridLayout(grid_layout_widget_28)
    save_button = QPushButton(grid_layout_widget_28)

    grid_layout_widget_29 = QWidget(add_record)
    grid_layout_29 = QGridLayout(grid_layout_widget_29)
    text_edit = QTextEdit(grid_layout_widget_29)
    menubar = QMenuBar(WINDOW)
    edit = QMenu(menubar)
    tool = QMenu(menubar)
    program = QMenu(menubar)
    help = QMenu(menubar)
    add = QAction(WINDOW)
    query = QAction(WINDOW)
    delete_record = QAction(WINDOW)
    add_share = QAction(WINDOW)
    import_share = QAction(WINDOW)
    login = QAction(WINDOW)
    logout = QAction(WINDOW)
    exit = QAction(WINDOW)
    about = QAction(WINDOW)
    slot_func = None

    @classmethod
    def init_window(cls):
        cls.slot_func = SlotFunc(cls)
        cls.init_widget()
        cls.init_button()
        cls.init_menu()
        cls.set_style_sheet()
        cls.init_text()
        cls.add_slot_func()
        QMetaObject.connectSlotsByName(WINDOW)

    @classmethod
    def init_menu(cls):
        WINDOW.setCentralWidget(CENTRAL_WIDGET)
        cls.menubar.setGeometry(QRect(0, 0, 960, 23))
        cls.menubar.setObjectName(_fromUtf8("menubar"))
        cls.edit.setObjectName(_fromUtf8("edit"))
        cls.tool.setObjectName(_fromUtf8("tool"))
        cls.program.setObjectName(_fromUtf8("program"))
        cls.help.setObjectName(_fromUtf8("help"))
        WINDOW.setMenuBar(cls.menubar)
        cls.statusbar.setObjectName(_fromUtf8("statusbar"))
        WINDOW.setStatusBar(cls.statusbar)
        cls.add.setObjectName(_fromUtf8("add"))
        cls.query.setObjectName(_fromUtf8("query"))
        cls.delete_record.setObjectName(_fromUtf8("delete_record"))
        cls.add_share.setObjectName(_fromUtf8("add_share"))
        cls.import_share.setObjectName(_fromUtf8("import_share"))
        cls.login.setObjectName(_fromUtf8("login"))
        cls.logout.setObjectName(_fromUtf8("logout"))
        cls.exit.setObjectName(_fromUtf8("exit"))
        cls.about.setObjectName(_fromUtf8("about"))
        cls.edit.addAction(cls.add)
        cls.edit.addAction(cls.query)
        cls.edit.addAction(cls.delete_record)

        cls.tool.addAction(cls.add_share)
        cls.tool.addAction(cls.import_share)
        cls.tool.addSeparator()
        cls.tool.addAction(cls.login)
        cls.tool.addAction(cls.logout)

        cls.program.addAction(cls.exit)
        cls.help.addAction(cls.about)

        cls.menubar.addAction(cls.edit.menuAction())
        cls.menubar.addAction(cls.tool.menuAction())
        cls.menubar.addAction(cls.program.menuAction())
        cls.menubar.addAction(cls.help.menuAction())

    @classmethod
    def add_slot_func(cls):
        """增加槽函数"""
        cls.share_code_input.textChanged.connect(
            cls.slot_func.query_share_code)
        cls.save_button.clicked.connect(cls.slot_func.save_record)

    @classmethod
    def init_button(cls):
        """初始化按钮"""
        # cls.grid_layout_widget_26.setGeometry(QRect(160, 390, 121, 50))
        # cls.grid_layout_widget_26.setObjectName(_fromUtf8("grid_layout_widget_26"))
        # cls.grid_layout_26.setObjectName(_fromUtf8("grid_layout_26"))
        # cls.query_button.setFont(WindowCons.get_font(bold=True))
        # cls.query_button.setFlat(False)
        # cls.query_button.setObjectName(_fromUtf8("query_button"))
        # cls.grid_layout_26.addWidget(cls.query_button, 0, 0, 1, 1)
        # cls.grid_layout_widget_27.setGeometry(QRect(300, 390, 121, 50))
        # cls.grid_layout_widget_27.setObjectName(_fromUtf8("grid_layout_widget_27"))
        # cls.grid_layout_27.setObjectName(_fromUtf8("grid_layout_27"))
        # cls.compute_button.setFont(WindowCons.get_font(bold=True))
        # cls.compute_button.setObjectName(_fromUtf8("compute_button"))
        # cls.grid_layout_27.addWidget(cls.compute_button, 0, 0, 1, 1)
        cls.grid_layout_widget_28.setGeometry(QRect(440, 390, 121, 50))
        cls.grid_layout_widget_28.setObjectName(
            _fromUtf8("grid_layout_widget_28"))
        cls.grid_layout_28.setObjectName(_fromUtf8("grid_layout_28"))
        cls.save_button.setFont(WindowCons.get_font(bold=True))
        cls.save_button.setObjectName(_fromUtf8("save_button"))
        cls.grid_layout_28.addWidget(cls.save_button, 0, 0, 1, 1)
        cls.grid_layout_widget_29.setGeometry(QRect(570, 390, 160, 73))
        cls.grid_layout_widget_29.setObjectName(
            _fromUtf8("grid_layout_widget_29"))
        cls.grid_layout_29.setObjectName(_fromUtf8("grid_layout_29"))
        cls.text_edit.setEnabled(False)
        cls.text_edit.setReadOnly(True)
        cls.text_edit.setFrameShape(False)
        cls.text_edit.setObjectName(_fromUtf8("textEdit"))
        cls.grid_layout_29.addWidget(cls.text_edit, 0, 0, 1, 1)

    @classmethod
    def set_style_sheet(cls):
        """设置样式"""
        # cls.query_button.setStyleSheet(WindowCons.button_style())
        cls.save_button.setStyleSheet(WindowCons.button_style())
        # cls.compute_button.setStyleSheet(WindowCons.button_style())
        cls.add_record.setStyleSheet(WindowCons.background_image())

        cls.title.setStyleSheet(WindowCons.LIGHT_BLUE_STYLE)
        cls.sale_num_title.setStyleSheet(WindowCons.WHITE_STYLE)
        cls.share_name_title.setStyleSheet(WindowCons.WHITE_STYLE)
        cls.sale_price_title.setStyleSheet(WindowCons.WHITE_STYLE)
        cls.buy_date_title.setStyleSheet(WindowCons.WHITE_STYLE)
        cls.win_title.setStyleSheet(WindowCons.WHITE_STYLE)
        cls.buy_num_title.setStyleSheet(WindowCons.WHITE_STYLE)
        cls.can_sale_num_title.setStyleSheet(WindowCons.WHITE_STYLE)
        cls.have_num_title.setStyleSheet(WindowCons.WHITE_STYLE)
        cls.share_code_title.setStyleSheet(WindowCons.WHITE_STYLE)
        cls.buy_price_title.setStyleSheet(WindowCons.WHITE_STYLE)
        cls.have_avg_price.setStyleSheet(WindowCons.WHITE_STYLE)
        cls.sale_date_title.setStyleSheet(WindowCons.WHITE_STYLE)
        # cls.text_edit.setAttribute(Qt.WA_TranslucentBackground, True)
        # cls.text_edit.repaint()
        cls.text_edit.setStyleSheet(WindowCons.TRANSPARENT)
        palette1 = QPalette()
        palette1.setBrush(
            cls.add_record.backgroundRole(),
            QBrush(QPixmap(':backgroud.png').scaled(cls.add_record.size())))
        cls.add_record.setPalette(palette1)
        cls.add_record.setStyleSheet(WindowCons.background_image())

    @classmethod
    def init_widget(cls):
        CENTRAL_WIDGET.setObjectName(_fromUtf8("centralwidget"))
        cls.add_record.setGeometry(QRect(-1, -1, 961, 561))
        cls.add_record.setObjectName(_fromUtf8("add_record"))
        cls.grid_layout_widget.setGeometry(QRect(50, 10, 314, 50))
        cls.grid_layout_widget.setObjectName(_fromUtf8("gridLayoutWidget"))
        cls.grid_layout.setObjectName(_fromUtf8("gridLayout"))
        cls.title.setFont(WindowCons.get_font(size=16, weight=50))
        cls.title.setTextFormat(Qt.PlainText)
        cls.title.setScaledContents(False)
        cls.title.setAlignment(Qt.AlignCenter)
        cls.title.setObjectName(_fromUtf8("title"))
        cls.grid_layout.addWidget(cls.title, 0, 0, 1, 1)
        cls._init_labels()

    @classmethod
    def init_text(cls):
        """初始化文字"""
        WINDOW.setWindowTitle(_translate("MainWindow", "驰骋A股", None))
        cls.title.setText(_translate("MainWindow", "新增交易记录", None))
        cls.share_code_title.setText(_translate("MainWindow", "股票代码", None))
        cls.buy_date_title.setText(_translate("MainWindow", "买入日期", None))
        cls.buy_price_title.setText(_translate("MainWindow", "买入价格", None))
        cls.buy_num_title.setText(_translate("MainWindow", "买入数量", None))
        cls.have_avg_price.setText(_translate("MainWindow", "持仓均价", None))
        cls.have_num_title.setText(_translate("MainWindow", "持仓数量", None))
        cls.win_title.setText(_translate("MainWindow", "当前盈利", None))
        cls.can_sale_num_title.setText(_translate("MainWindow", "可卖数量", None))
        cls.sale_date_title.setText(_translate("MainWindow", "卖出日期", None))
        cls.sale_price_title.setText(_translate("MainWindow", "卖出价格", None))
        cls.share_name_title.setText(_translate("MainWindow", "股票名称", None))
        cls.sale_num_title.setText(_translate("MainWindow", "卖出数量", None))
        # cls.query_button.setText(_translate("MainWindow", "查询", None))
        # cls.compute_button.setText(_translate("MainWindow", "计算", None))
        cls.save_button.setText(_translate("MainWindow", "保存", None))
        cls.text_edit.setHtml(
            _translate(
                "MainWindow",
                "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
                "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
                "p, li { white-space: pre-wrap; }\n"
                "</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
                "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">数量单位:手(1手=100股)</p>\n"
                "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">货币单位:元</p></body></html>",
                None))
        cls.edit.setTitle(_translate("MainWindow", "编辑", None))
        cls.tool.setTitle(_translate("MainWindow", "工具", None))
        cls.program.setTitle(_translate("MainWindow", "程序", None))
        cls.help.setTitle(_translate("MainWindow", "帮助", None))

        cls.add.setText(_translate("MainWindow", "新增交易记录", None))
        cls.query.setText(_translate("MainWindow", "查询交易记录", None))
        cls.delete_record.setText(_translate("MainWindow", "删除交易记录", None))
        cls.add_share.setText(_translate("MainWindow", "新增股票信息", None))
        cls.import_share.setText(_translate("MainWindow", "导入股票信息", None))
        cls.login.setText(_translate("MainWindow", "登录", None))
        cls.logout.setText(_translate("MainWindow", "注销", None))
        cls.exit.setText(_translate("MainWindow", "退出", None))
        cls.about.setText(_translate("MainWindow", "关于", None))
        cls.statusbar.showMessage(
            "本程序仅限内部人员使用,如作他用所承受的法律责任一概与作者无关(使用即代表你同意上述观点)")
        cls.statusbar.setStyleSheet(WindowCons.RED_STYLE)

    @classmethod
    def _init_labels(cls):
        """初始化页面的label"""
        cls.__init_share_code()  # 初始化股票代码以及输入框
        cls.__init_share_name()  # 初始化股票名称以及显示框
        cls.__init_buy_date()  # 初始化买入日期以及输入框
        cls.__init_sale_date()  # 初始化卖出日期以及输入框
        cls.__init_buy_num()  # 初始化买入数量以及输入框
        cls.__init_sale_num()  # 初始化卖出数量以及输入框
        cls.__init_buy_price()  # 初始化买入价格以及输入框
        cls.__init_sale_price()  # 初始化卖出价格以及输入框
        cls.__init_buy_avg_price()  # 初始化平均价以及显示框
        cls.__init_have_num()  # 初始化持仓数量以及显示框
        cls.__init_have_win()  # 初始化当前股票盈利情况以及显示框
        cls.__can_sale_num()  # 初始化可卖数量以及显示框

    @classmethod
    def __init_share_code(cls):
        cls.grid_layout_widget_2.setGeometry(QRect(160, 60, 101, 41))
        cls.grid_layout_widget_2.setObjectName(_fromUtf8("gridLayoutWidget_2"))
        cls.grid_layout_2.setObjectName(_fromUtf8("gridLayout_2"))
        cls.share_code_title.setFont(WindowCons.get_font(bold=True))
        cls.share_code_title.setTextFormat(Qt.PlainText)
        cls.share_code_title.setAlignment(Qt.AlignCenter)
        cls.share_code_title.setObjectName(_fromUtf8("share_code_title"))
        cls.grid_layout_2.addWidget(cls.share_code_title, 0, 0, 1, 1)
        cls.grid_layout_widget_14.setGeometry(QRect(280, 60, 141, 50))
        cls.grid_layout_widget_14.setObjectName(
            _fromUtf8("gridLayoutWidget_14"))
        cls.grid_layout_14.setObjectName(_fromUtf8("gridLayout_14"))
        cls.share_code_input.setFont(
            WindowCons.get_font(weight=50, family=WindowCons.YAHEI_UI_FAMILY))
        cls.share_code_input.setObjectName(_fromUtf8("share_code_input"))
        cls.share_code_input.setValidator(RegExpValidator())
        cls.grid_layout_14.addWidget(cls.share_code_input, 0, 0, 1, 1)

    @classmethod
    def __init_share_name(cls):
        cls.grid_layout_widget_12.setGeometry(QRect(450, 60, 101, 41))
        cls.grid_layout_widget_12.setObjectName(
            _fromUtf8("gridLayoutWidget_12"))
        cls.grid_layout_12.setObjectName(_fromUtf8("gridLayout_12"))
        cls.share_name_title.setFont(WindowCons.get_font(bold=True))
        cls.share_name_title.setTextFormat(Qt.PlainText)
        cls.share_name_title.setAlignment(Qt.AlignCenter)
        cls.share_name_title.setObjectName(_fromUtf8("share_name_title"))
        cls.grid_layout_12.addWidget(cls.share_name_title, 0, 0, 1, 1)

        cls.grid_layout_widget_21.setGeometry(QRect(570, 60, 141, 50))
        cls.grid_layout_widget_21.setObjectName(
            _fromUtf8("grid_layout_widget_21"))
        cls.grid_layout_21.setObjectName(_fromUtf8("grid_layout_21"))
        cls.share_name_show.setEnabled(True)
        cls.share_name_show.setFont(
            WindowCons.get_font(weight=50,
                                family=WindowCons.YAHEI_LIGHT_FAMILY))
        cls.share_name_show.setReadOnly(True)
        cls.share_name_show.setFrame(False)
        cls.share_name_show.setObjectName(_fromUtf8("share_name_show"))
        cls.grid_layout_21.addWidget(cls.share_name_show, 0, 0, 1, 1)

    @classmethod
    def __init_buy_date(cls):
        cls.grid_layout_widget_3.setGeometry(QRect(160, 110, 101, 41))
        cls.grid_layout_widget_3.setObjectName(_fromUtf8("gridLayoutWidget_3"))
        cls.grid_layout_3.setObjectName(_fromUtf8("gridLayout_3"))
        cls.buy_date_title.setFont(WindowCons.get_font(bold=True))
        cls.buy_date_title.setTextFormat(Qt.PlainText)
        cls.buy_date_title.setAlignment(Qt.AlignCenter)
        cls.buy_date_title.setObjectName(_fromUtf8("buy_date_title"))
        cls.grid_layout_3.addWidget(cls.buy_date_title, 0, 0, 1, 1)

        cls.grid_layout_widget_15.setGeometry(QRect(280, 110, 141, 41))
        cls.grid_layout_widget_15.setObjectName(
            _fromUtf8("gridLayoutWidget_15"))
        cls.grid_layout_15.setObjectName(_fromUtf8("gridLayout_15"))
        cls.buy_date_input.setEnabled(True)
        size_policy = WindowCons.get_size_policy(cls.buy_date_input)
        cls.buy_date_input.setSizePolicy(size_policy)
        cls.buy_date_input.setFont(
            WindowCons.get_font(family=WindowCons.YAHEI_LIGHT_FAMILY, size=12))
        cls.buy_date_input.setWrapping(False)
        cls.buy_date_input.setCalendarPopup(True)
        cls.buy_date_input.setFrame(False)
        cls.buy_date_input.setDate(
            QDate(datetime.datetime.date(datetime.datetime.now())))
        cls.buy_date_input.setObjectName(_fromUtf8("buy_date_input"))
        cls.grid_layout_15.addWidget(cls.buy_date_input, 0, 0, 1, 1)

    @classmethod
    def __init_sale_date(cls):
        cls.grid_layout_widget_10.setGeometry(QRect(450, 110, 101, 41))
        cls.grid_layout_widget_10.setObjectName(
            _fromUtf8("gridLayoutWidget_10"))
        cls.grid_layout_10.setObjectName(_fromUtf8("gridLayout_10"))
        cls.sale_date_title.setFont(WindowCons.get_font(bold=True))
        cls.sale_date_title.setTextFormat(Qt.PlainText)
        cls.sale_date_title.setAlignment(Qt.AlignCenter)
        cls.sale_date_title.setObjectName(_fromUtf8("buy_date_title_2"))
        cls.grid_layout_10.addWidget(cls.sale_date_title, 0, 0, 1, 1)

        cls.grid_layout_widget_20.setGeometry(QRect(570, 110, 141, 41))
        cls.grid_layout_widget_20.setObjectName(
            _fromUtf8("gridLayoutWidget_20"))
        cls.grid_layout_20.setObjectName(_fromUtf8("gridLayout_20"))
        cls.sale_date_input.setFont(
            WindowCons.get_font(size=12, family=WindowCons.YAHEI_LIGHT_FAMILY))
        cls.sale_date_input.setWrapping(False)
        cls.sale_date_input.setFrame(False)
        cls.sale_date_input.setCalendarPopup(True)
        cls.sale_date_input.setDate(
            QDate(datetime.datetime.date(datetime.datetime.now())))
        cls.sale_date_input.setObjectName(_fromUtf8("sale_date_input"))
        cls.grid_layout_20.addWidget(cls.sale_date_input, 0, 0, 1, 1)

    @classmethod
    def __init_buy_num(cls):
        cls.grid_layout_widget_5.setGeometry(QRect(160, 210, 101, 41))
        cls.grid_layout_widget_5.setObjectName(_fromUtf8("gridLayoutWidget_5"))
        cls.grid_layout_5.setObjectName(_fromUtf8("gridLayout_5"))
        cls.buy_num_title.setFont(WindowCons.get_font(bold=True))
        cls.buy_num_title.setTextFormat(Qt.PlainText)
        cls.buy_num_title.setAlignment(Qt.AlignCenter)
        cls.buy_num_title.setObjectName(_fromUtf8("buy_num_title"))
        cls.grid_layout_5.addWidget(cls.buy_num_title, 0, 0, 1, 1)

        cls.grid_layout_widget_16.setGeometry(QRect(280, 210, 141, 41))
        cls.grid_layout_widget_16.setObjectName(
            _fromUtf8("gridLayoutWidget_16"))
        cls.grid_layout_16.setObjectName(_fromUtf8("gridLayout_16"))
        cls.buy_num_input.setValidator(IntValidator())
        cls.buy_num_input.setText("100")
        cls.buy_num_input.setFont(
            WindowCons.get_font(family=WindowCons.JUI_LIGHT_FAMILY))
        cls.buy_num_input.setFrame(False)
        cls.buy_num_input.setObjectName(_fromUtf8("buy_num_input"))
        cls.grid_layout_16.addWidget(cls.buy_num_input, 0, 0, 1, 1)

    @classmethod
    def __init_sale_num(cls):
        # 初始化卖出数量以及输入框
        cls.grid_layout_widget_25.setGeometry(QRect(570, 210, 141, 41))
        cls.grid_layout_widget_25.setObjectName(
            _fromUtf8("gridLayoutWidget_25"))
        cls.grid_layout_25.setObjectName(_fromUtf8("gridLayout_25"))
        cls.sale_num_input.setValidator(IntValidator())
        cls.sale_num_input.setText("100")
        cls.sale_num_input.setFont(
            WindowCons.get_font(family=WindowCons.JUI_LIGHT_FAMILY))
        cls.sale_num_input.setFrame(False)
        cls.sale_num_input.setObjectName(_fromUtf8("sale_num_input"))
        cls.grid_layout_25.addWidget(cls.sale_num_input, 0, 0, 1, 1)

        cls.grid_layout_widget_13.setGeometry(QRect(450, 210, 101, 41))
        cls.grid_layout_widget_13.setObjectName(
            _fromUtf8("gridLayoutWidget_13"))
        cls.grid_layout_13.setObjectName(_fromUtf8("gridLayout_13"))
        cls.sale_num_title.setFont(WindowCons.get_font(bold=True))
        cls.sale_num_title.setTextFormat(Qt.PlainText)
        cls.sale_num_title.setAlignment(Qt.AlignCenter)
        cls.sale_num_title.setObjectName(_fromUtf8("buy_num_title_2"))
        cls.grid_layout_13.addWidget(cls.sale_num_title, 0, 0, 1, 1)

    @classmethod
    def __init_buy_price(cls):
        # 初始化买入价格以及输入框
        cls.grid_layout_widget_4.setGeometry(QRect(160, 160, 101, 41))
        cls.grid_layout_widget_4.setObjectName(_fromUtf8("gridLayoutWidget_4"))
        cls.grid_layout_4.setObjectName(_fromUtf8("gridLayout_4"))
        cls.buy_price_title.setFont(WindowCons.get_font(bold=True))
        cls.buy_price_title.setTextFormat(Qt.PlainText)
        cls.buy_price_title.setAlignment(Qt.AlignCenter)
        cls.buy_price_title.setObjectName(_fromUtf8("buy_price_title"))
        cls.grid_layout_4.addWidget(cls.buy_price_title, 0, 0, 1, 1)

        cls.grid_layout_widget_17.setGeometry(QRect(280, 160, 141, 41))
        cls.grid_layout_widget_17.setObjectName(
            _fromUtf8("gridLayoutWidget_17"))
        cls.grid_layout_17.setObjectName(_fromUtf8("gridLayout_17"))
        cls.buy_price_input.setFont(
            WindowCons.get_font(family=WindowCons.YAHEI_LIGHT_FAMILY))
        cls.buy_price_input.setFrame(False)
        cls.buy_price_input.setValidator(DoubleValidator())
        cls.buy_price_input.setText("0.00")
        cls.buy_price_input.setObjectName(_fromUtf8("buy_price_input"))
        cls.grid_layout_17.addWidget(cls.buy_price_input, 0, 0, 1, 1)

    @classmethod
    def __init_sale_price(cls):
        # 初始化卖出价格以及输入框
        cls.grid_layout_widget_11.setGeometry(QRect(450, 160, 101, 41))
        cls.grid_layout_widget_11.setObjectName(
            _fromUtf8("gridLayoutWidget_11"))
        cls.grid_layout_11.setObjectName(_fromUtf8("gridLayout_11"))
        cls.sale_price_title.setFont(WindowCons.get_font(bold=True))
        cls.sale_price_title.setTextFormat(Qt.PlainText)
        cls.sale_price_title.setAlignment(Qt.AlignCenter)
        cls.sale_price_title.setObjectName(_fromUtf8("cls.sale_price_title"))
        cls.grid_layout_11.addWidget(cls.sale_price_title, 0, 0, 1, 1)

        cls.grid_layout_widget_22.setGeometry(QRect(570, 160, 141, 41))
        cls.grid_layout_widget_22.setObjectName(
            _fromUtf8("grid_layout_widget_22"))
        cls.grid_layout_22.setObjectName(_fromUtf8("grid_layout_22"))
        cls.sale_price_input.setFont(
            WindowCons.get_font(family=WindowCons.YAHEI_LIGHT_FAMILY))
        cls.sale_price_input.setFrame(False)
        cls.sale_price_input.setText("0.00")
        cls.sale_price_input.setValidator(DoubleValidator())
        cls.sale_price_input.setObjectName(_fromUtf8("sale_price_input"))
        cls.grid_layout_22.addWidget(cls.sale_price_input, 0, 0, 1, 1)

    @classmethod
    def __init_buy_avg_price(cls):
        # 初始化平均价以及显示框
        cls.grid_layout_widget_6.setGeometry(QRect(160, 260, 101, 41))
        cls.grid_layout_widget_6.setObjectName(
            _fromUtf8("grid_layout_widget_6"))
        cls.grid_layout_6.setObjectName(_fromUtf8("grid_layout_6"))
        cls.have_avg_price.setFont(WindowCons.get_font(bold=True))
        cls.have_avg_price.setTextFormat(Qt.PlainText)
        cls.have_avg_price.setAlignment(Qt.AlignCenter)
        cls.have_avg_price.setObjectName(_fromUtf8("have_avg_price"))
        cls.grid_layout_6.addWidget(cls.have_avg_price, 0, 0, 1, 1)

        cls.grid_layout_widget_19.setGeometry(QRect(280, 260, 141, 41))
        cls.grid_layout_widget_19.setObjectName(
            _fromUtf8("grid_layout_widget_19"))
        cls.grid_layout_19.setObjectName(_fromUtf8("grid_layout_19"))
        cls.buv_avg_price_show.setEnabled(True)
        cls.buv_avg_price_show.setFont(
            WindowCons.get_font(family=WindowCons.JUI_LIGHT_FAMILY))
        cls.buv_avg_price_show.setReadOnly(True)
        cls.buv_avg_price_show.setFrame(False)
        cls.buv_avg_price_show.setObjectName(_fromUtf8("buv_avg_price_show"))
        cls.grid_layout_19.addWidget(cls.buv_avg_price_show, 0, 0, 1, 1)

    @classmethod
    def __init_have_num(cls):
        # 初始化持仓数量以及显示框
        cls.grid_layout_widget_7.setGeometry(QRect(160, 310, 101, 41))
        cls.grid_layout_widget_7.setObjectName(
            _fromUtf8("grid_layout_widget_7"))
        cls.grid_layout_7.setObjectName(_fromUtf8("grid_layout_7"))
        cls.have_num_title.setFont(WindowCons.get_font(bold=True))
        cls.have_num_title.setTextFormat(Qt.PlainText)
        cls.have_num_title.setAlignment(Qt.AlignCenter)
        cls.have_num_title.setObjectName(_fromUtf8("have_num_title"))
        cls.grid_layout_7.addWidget(cls.have_num_title, 0, 0, 1, 1)

        cls.grid_layout_widget_18.setGeometry(QRect(280, 310, 141, 41))
        cls.grid_layout_widget_18.setObjectName(
            _fromUtf8("grid_layout_widget_18"))
        cls.grid_layout_18.setObjectName(_fromUtf8("grid_layout_18"))
        cls.have_num_show.setFont(
            WindowCons.get_font(family=WindowCons.JUI_LIGHT_FAMILY))
        cls.have_num_show.setReadOnly(True)
        cls.have_num_show.setFrame(False)
        cls.have_num_show.setObjectName(_fromUtf8("have_num_show"))
        cls.grid_layout_18.addWidget(cls.have_num_show, 0, 0, 1, 1)

    @classmethod
    def __init_have_win(cls):
        # 初始化当前股票盈利情况以及显示框
        cls.grid_layout_widget_8.setGeometry(QRect(450, 260, 101, 41))
        cls.grid_layout_widget_8.setObjectName(
            _fromUtf8("grid_layout_widget_8"))
        cls.grid_layout_8.setObjectName(_fromUtf8("grid_layout_8"))
        cls.win_title.setFont(WindowCons.get_font(bold=True))
        cls.win_title.setTextFormat(Qt.PlainText)
        cls.win_title.setAlignment(Qt.AlignCenter)
        cls.win_title.setObjectName(_fromUtf8("win_title"))
        cls.grid_layout_8.addWidget(cls.win_title, 0, 0, 1, 1)

        cls.grid_layout_widget_24.setGeometry(QRect(570, 260, 141, 41))
        cls.grid_layout_widget_24.setObjectName(
            _fromUtf8("grid_layout_widget_24"))
        cls.grid_layout_24.setObjectName(_fromUtf8("grid_layout_24"))
        cls.win_show.setEnabled(True)
        cls.win_show.setFont(
            WindowCons.get_font(family=WindowCons.JUI_LIGHT_FAMILY))
        cls.win_show.setReadOnly(True)
        cls.win_show.setObjectName(_fromUtf8("win_show"))
        cls.win_show.setFrame(False)
        cls.grid_layout_24.addWidget(cls.win_show, 0, 0, 1, 1)

    @classmethod
    def __can_sale_num(cls):
        # 初始化可卖数量以及显示框
        cls.grid_layout_widget_9.setGeometry(QRect(450, 310, 101, 41))
        cls.grid_layout_widget_9.setObjectName(
            _fromUtf8("grid_layout_widget_9"))
        cls.grid_layout_9.setObjectName(_fromUtf8("gridLayout_9"))
        cls.can_sale_num_title.setFont(WindowCons.get_font(bold=True))
        cls.can_sale_num_title.setTextFormat(Qt.PlainText)
        cls.can_sale_num_title.setAlignment(Qt.AlignCenter)
        cls.can_sale_num_title.setObjectName(_fromUtf8("can_sale_num_title"))
        cls.grid_layout_9.addWidget(cls.can_sale_num_title, 0, 0, 1, 1)

        cls.grid_layout_widget_23.setGeometry(QRect(570, 310, 141, 41))
        cls.grid_layout_widget_23.setObjectName(
            _fromUtf8("gridLayoutWidget_23"))
        cls.grid_layout_23.setObjectName(_fromUtf8("grid_layout_23"))
        cls.can_sale_num_show.setEnabled(True)
        cls.can_sale_num_show.setFont(
            WindowCons.get_font(family=WindowCons.JUI_LIGHT_FAMILY))
        cls.can_sale_num_show.setReadOnly(True)
        cls.can_sale_num_show.setFrame(False)
        cls.can_sale_num_show.setObjectName(_fromUtf8("can_sale_num_show"))
        cls.grid_layout_23.addWidget(cls.can_sale_num_show, 0, 0, 1, 1)
示例#49
0
    def setupMainWindow(self):
        self.resize(800, 600)
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((
            screen.width()-size.width())/2, (screen.height()-size.height())/2)
        self.setWindowTitle(
            '{} - {}'.format(self.settings.notebookName, __appname__))

        self.viewedList.setFixedHeight(25)
        self.noteSplitter.addWidget(self.notesEdit)
        self.noteSplitter.addWidget(self.notesView)
        mainSplitter = QSplitter(Qt.Vertical)
        mainSplitter.setChildrenCollapsible(False)
        mainSplitter.addWidget(self.viewedList)
        mainSplitter.addWidget(self.noteSplitter)
        mainSplitter.addWidget(self.findBar)
        self.setCentralWidget(mainSplitter)

        self.searchEdit.returnPressed.connect(self.searchNote)
        self.quickNoteNav.returnPressed.connect(self.openFuncWrapper)
        searchLayout = QVBoxLayout()
        searchLayout.addWidget(self.searchEdit)
        searchLayout.addWidget(self.searchView)
        self.searchTab.setLayout(searchLayout)
        self.tocTree.header().close()

        indexLayout = QVBoxLayout(self.notesTab)
        indexLayout.addWidget(self.quickNoteNav)
        indexLayout.addWidget(self.notesTree)

        self.dockIndex.setObjectName("Index")
        self.dockIndex.setWidget(self.notesTab)
        self.dockSearch.setObjectName("Search")
        self.dockSearch.setWidget(self.searchTab)
        self.dockToc.setObjectName("TOC")
        self.dockToc.setWidget(self.tocTree)
        self.dockAttachment.setObjectName("Attachment")
        self.dockAttachment.setWidget(self.attachmentView)

        self.setDockOptions(QMainWindow.VerticalTabs)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dockIndex)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dockSearch)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dockToc)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dockAttachment)
        self.tabifyDockWidget(self.dockIndex, self.dockSearch)
        self.tabifyDockWidget(self.dockSearch, self.dockToc)
        self.tabifyDockWidget(self.dockToc, self.dockAttachment)
        self.setTabPosition(Qt.LeftDockWidgetArea, QTabWidget.North)
        self.dockIndex.raise_()      # Put dockIndex on top of the tab stack

        menuBar = QMenuBar(self)
        self.setMenuBar(menuBar)
        menuFile = menuBar.addMenu(self.tr('&File'))
        menuEdit = menuBar.addMenu(self.tr('&Edit'))
        menuView = menuBar.addMenu(self.tr('&View'))
        menuHelp = menuBar.addMenu(self.tr('&Help'))
        # menuFile
        menuFile.addAction(self.actions['newPage'])
        menuFile.addAction(self.actions['newSubpage'])
        menuFile.addAction(self.actions['NBSettings'])
        menuFile.addAction(self.actions['MDSettings'])
        menuFile.addAction(self.actions['importPage'])
        menuFile.addAction(self.actions['openNotebook'])
        menuFile.addAction(self.actions['reIndex'])
        menuFile.addSeparator()
        menuFile.addAction(self.actions['save'])
        menuFile.addAction(self.actions['saveAs'])
        menuFile.addAction(self.actions['print_'])
        menuExport = menuFile.addMenu(self.tr('&Export'))
        menuExport.addAction(self.actions['html'])
        menuFile.addSeparator()
        menuFile.addAction(self.actions['renamePage'])
        menuFile.addAction(self.actions['delPage'])
        menuFile.addSeparator()
        menuFile.addAction(self.actions['quit'])
        # menuEdit
        menuEdit.addAction(self.actions['undo'])
        menuEdit.addAction(self.actions['redo'])
        menuEdit.addAction(self.actions['findText'])
        menuEdit.addSeparator()
        menuEdit.addAction(self.actions['sortLines'])
        menuEdit.addAction(self.actions['insertImage'])
        # menuView
        menuView.addAction(self.actions['edit'])
        menuView.addAction(self.actions['split'])
        menuView.addAction(self.actions['flipEditAndView'])
        menuShowHide = menuView.addMenu(self.tr('Show/Hide'))
        menuShowHide.addAction(self.dockIndex.toggleViewAction())
        menuShowHide.addAction(self.dockSearch.toggleViewAction())
        menuShowHide.addAction(self.dockToc.toggleViewAction())
        menuShowHide.addAction(self.dockAttachment.toggleViewAction())
        #menuMode = menuView.addMenu(self.tr('Mode'))
        #menuMode.addAction(self.actionLeftAndRight)
        #menuMode.addAction(self.actionUpAndDown)
        # menuHelp
        menuHelp.addAction(self.actions['readme'])
        menuHelp.addAction(self.actions['changelog'])
        menuHelp.addAction(self.actions['aboutQt'])

        toolBar = QToolBar(self.tr("toolbar"), self)
        toolBar.setObjectName("toolbar")       # needed in saveState()
        toolBar.setIconSize(QSize(16, 16))
        toolBar.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
        self.addToolBar(Qt.TopToolBarArea, toolBar)
        toolBar.addAction(self.actions['edit'])
        toolBar.addAction(self.actions['split'])
        self.findEdit.returnPressed.connect(self.findText)
        self.findBar.addWidget(self.findEdit)
        self.findBar.addWidget(self.checkBox)
        self.findBar.addAction(self.actions['findPrev'])
        self.findBar.addAction(self.actions['find'])
        self.findBar.setVisible(False)
        self.findBar.visibilityChanged.connect(self.findBarVisibilityChanged)

        self.setStatusBar(self.statusBar)
        self.statusBar.addWidget(self.statusLabel, 1)

        self.notesTree.currentItemChanged.connect(
            self.currentItemChangedWrapper)
        self.tocTree.itemClicked.connect(self.tocNavigate)
        self.notesEdit.textChanged.connect(self.noteEditted)

        self.notesEdit.document(
        ).modificationChanged.connect(self.modificationChanged)

        self.updateRecentViewedNotes()
        notes = self.settings.recentViewedNotes()
        if len(notes) != 0:
            item = self.notesTree.pageToItem(notes[0])
            self.notesTree.setCurrentItem(item)
示例#50
0
class QtMenuBar(QtToolkitObject, ProxyMenuBar):
    """ A Qt implementation of an Enaml ProxyMenuBar.

    """
    #: A reference to the widget created by the proxy.
    widget = Typed(QMenuBar)

    #--------------------------------------------------------------------------
    # Initialization API
    #--------------------------------------------------------------------------
    def create_widget(self):
        """ Create the underlying menu bar widget.

        """
        # Qt behaves better when creating the menu bar without a parent.
        self.widget = QMenuBar()

    def init_layout(self):
        """ Initialize the layout for the menu bar.

        """
        super(QtMenuBar, self).init_layout()
        widget = self.widget
        for child in self.children():
            if isinstance(child, QtMenu):
                widget.addMenu(child.widget)

    def destroy(self):
        """ A reimplemented destructor.

        Qt takes ownership of the menubar, so the destructor does not
        attempt to unparent the menubar. The child_removed handler on
        the main window will reset the menu bar.

        """
        del self.declaration

    #--------------------------------------------------------------------------
    # Child Events
    #--------------------------------------------------------------------------
    def find_next_action(self, child):
        """ Get the QAction instance which follows the child.

        Parameters
        ----------
        child : QtMenu
            The child menu of interest.

        Returns
        -------
        result : QAction or None
            The QAction which comes immediately after the actions of the
            given child, or None if no actions follow the child.

        """
        found = False
        for dchild in self.children():
            if found:
                if isinstance(dchild, QtMenu):
                    return dchild.widget.menuAction()
            else:
                found = dchild is child

    def child_added(self, child):
        """ Handle the child added event for a QtMenuBar.

        """
        super(QtMenuBar, self).child_added(child)
        if isinstance(child, QtMenu):
            before = self.find_next_action(child)
            self.widget.insertMenu(before, child.widget)

    def child_removed(self, child):
        """ Handle the child removed event for a QtMenuBar.

        """
        super(QtMenuBar, self).child_removed(child)
        if isinstance(child, QtMenu):
            self.widget.removeAction(child.widget.menuAction())
示例#51
0
    def setupMainWindow(self):
        self.resize(800, 600)
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((screen.width() - size.width()) / 2,
                  (screen.height() - size.height()) / 2)
        self.setWindowTitle('{} - {}'.format(self.settings.notebookName,
                                             __appname__))

        self.viewedList.setFixedHeight(25)
        self.noteSplitter.addWidget(self.notesEdit)
        self.noteSplitter.addWidget(self.notesView)
        mainSplitter = QSplitter(Qt.Vertical)
        mainSplitter.setChildrenCollapsible(False)
        mainSplitter.addWidget(self.viewedList)
        mainSplitter.addWidget(self.noteSplitter)
        mainSplitter.addWidget(self.findBar)
        self.setCentralWidget(mainSplitter)

        self.searchEdit.returnPressed.connect(self.searchNote)
        self.quickNoteNav.returnPressed.connect(self.openFuncWrapper)
        searchLayout = QVBoxLayout()
        searchLayout.addWidget(self.searchEdit)
        searchLayout.addWidget(self.searchView)
        self.searchTab.setLayout(searchLayout)

        indexLayout = QVBoxLayout(self.notesTab)
        indexLayout.addWidget(self.quickNoteNav)
        indexLayout.addWidget(self.notesTree)

        self.dockIndex.setObjectName("Index")
        self.dockIndex.setWidget(self.notesTab)
        self.dockSearch.setObjectName("Search")
        self.dockSearch.setWidget(self.searchTab)
        self.dockToc.setObjectName("TOC")
        self.dockToc.setWidget(self.tocTree)
        self.dockAttachment.setObjectName("Attachment")
        self.dockAttachment.setWidget(self.attachmentView)

        self.setDockOptions(QMainWindow.VerticalTabs)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dockIndex)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dockSearch)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dockToc)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dockAttachment)
        self.tabifyDockWidget(self.dockIndex, self.dockSearch)
        self.tabifyDockWidget(self.dockSearch, self.dockToc)
        self.tabifyDockWidget(self.dockToc, self.dockAttachment)
        self.setTabPosition(Qt.LeftDockWidgetArea, QTabWidget.North)
        self.dockIndex.raise_()  # Put dockIndex on top of the tab stack

        menuBar = QMenuBar(self)
        self.setMenuBar(menuBar)
        menuFile = menuBar.addMenu(self.tr('&File'))
        menuEdit = menuBar.addMenu(self.tr('&Edit'))
        menuView = menuBar.addMenu(self.tr('&View'))
        menuHelp = menuBar.addMenu(self.tr('&Help'))
        # menuFile
        menuFile.addAction(self.actions['newPage'])
        menuFile.addAction(self.actions['newSubpage'])
        menuFile.addAction(self.actions['NBSettings'])
        menuFile.addAction(self.actions['MDSettings'])
        menuFile.addAction(self.actions['importPage'])
        menuFile.addAction(self.actions['openNotebook'])
        menuFile.addAction(self.actions['reIndex'])
        menuFile.addSeparator()
        menuFile.addAction(self.actions['save'])
        menuFile.addAction(self.actions['saveAs'])
        menuFile.addAction(self.actions['print_'])
        menuExport = menuFile.addMenu(self.tr('&Export'))
        menuExport.addAction(self.actions['html'])
        menuFile.addSeparator()
        menuFile.addAction(self.actions['renamePage'])
        menuFile.addAction(self.actions['delPage'])
        menuFile.addSeparator()
        menuFile.addAction(self.actions['quit'])
        # menuEdit
        menuEdit.addAction(self.actions['undo'])
        menuEdit.addAction(self.actions['redo'])
        menuEdit.addAction(self.actions['findText'])
        menuEdit.addAction(self.actions['findRepl'])
        menuEdit.addSeparator()
        menuEdit.addAction(self.actions['sortLines'])
        menuEdit.addAction(self.actions['insertImage'])
        # menuView
        menuView.addAction(self.actions['edit'])
        menuView.addAction(self.actions['split'])
        menuView.addAction(self.actions['flipEditAndView'])
        menuShowHide = menuView.addMenu(self.tr('Show/Hide'))
        menuShowHide.addAction(self.dockIndex.toggleViewAction())
        menuShowHide.addAction(self.dockSearch.toggleViewAction())
        menuShowHide.addAction(self.dockToc.toggleViewAction())
        menuShowHide.addAction(self.dockAttachment.toggleViewAction())
        #menuMode = menuView.addMenu(self.tr('Mode'))
        #menuMode.addAction(self.actionLeftAndRight)
        #menuMode.addAction(self.actionUpAndDown)
        # menuHelp
        menuHelp.addAction(self.actions['readme'])
        menuHelp.addAction(self.actions['changelog'])
        menuHelp.addAction(self.actions['aboutQt'])

        toolBar = QToolBar(self.tr("toolbar"), self)
        toolBar.setObjectName("toolbar")  # needed in saveState()
        #toolBar.setIconSize(QSize(16, 16))
        toolBar.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
        self.addToolBar(Qt.TopToolBarArea, toolBar)
        toolBar.addAction(self.actions['edit'])
        toolBar.addAction(self.actions['split'])
        self.findEdit.returnPressed.connect(self.findText)
        self.findBar.addWidget(self.findEdit)
        self.findBar.addWidget(self.checkBox)
        self.findBar.addAction(self.actions['findPrev'])
        self.findBar.addAction(self.actions['find'])
        self.findBar.setVisible(False)
        self.findBar.visibilityChanged.connect(self.findBarVisibilityChanged)

        self.setStatusBar(self.statusBar)
        self.statusBar.addWidget(self.statusLabel, 1)

        self.notesTree.currentItemChanged.connect(
            self.currentItemChangedWrapper)
        self.notesTree.nvwCallback = self.newNoteDisplay
        self.notesTree.nvwtCallback = self.newPlainTextNoteDisplay
        self.tocTree.itemClicked.connect(self.tocNavigate)
        self.notesEdit.textChanged.connect(self.noteEditted)

        self.notesEdit.document().modificationChanged.connect(
            self.modificationChanged)

        self.updateRecentViewedNotes()
        notes = self.settings.recentViewedNotes()
        if len(notes) != 0:
            item = self.notesTree.pageToItem(notes[0])
            self.notesTree.setCurrentItem(item)
示例#52
0
    def menuUi(self):
        extractQuit = QAction(self)
        extractQuit.setStatusTip('File')

        mainMenu = QMenuBar()

        fileMenu = mainMenu.addMenu('&File')
        exitMenu = QAction('&Exit', self)
        exitMenu.setShortcut('CTRL+Q')
        exitMenu.setStatusTip('Close Dialog')
        exitMenu.triggered.connect(self.lunchUnitForm)
        fileMenu.addAction(exitMenu)

        #settings menu
        ViewMenu = mainMenu.addMenu('&Veiws')
        ## student menu static items
        bioMenu = QAction('Biodata', self)
        bioMenu.setStatusTip('Bio and Contact data')
        bioMenu.triggered.connect(
            lambda state, x=1, y='k': self.lunchReport(x, y))
        ViewMenu.addAction(bioMenu)

        academicMenu = ViewMenu.addMenu('Academic')
        dumpClass1 = {}
        for k in self.myterms:
            act = str(list(self.myterms[k])[0])
            getResult = self.pullResults(k)
            studs = academicMenu.addMenu(act)
            for w in getResult:
                getRes = w['name'].split(',')
                getDat = w['description'].split(':::')
                if list(self.myterms[k])[1] in getRes:
                    stud = QAction(getDat[0], studs)
                    dumpClass1[k] = stud
                    stud.triggered.connect(lambda state, x=2, term=k, rep=w[
                        'id']: self.lunchReport(x, term, rep))
                    studs.addAction(stud)

        affectiveMenu = ViewMenu.addMenu('Affective')
        dumpClass2 = {}
        for k in self.myterms:
            act = str(self.myterms[k])
            stud = QAction(act, self)
            dumpClass2[k] = stud
            stud.triggered.connect(
                lambda state, x=3, y=k: self.lunchReport(x, y))
            affectiveMenu.addAction(stud)

        psychomotorMenu = ViewMenu.addMenu('Psychomotor')
        dumpClass3 = {}
        for k in self.myterms:
            act = str(self.myterms[k])
            stud = QAction(act, self)
            dumpClass3[k] = stud
            stud.triggered.connect(
                lambda state, x=4, y=k: self.lunchReport(x, y))
            psychomotorMenu.addAction(stud)

        feeMenu = ViewMenu.addMenu('Fees')
        dumpClass4 = {}
        for k in self.myterms:
            act = str(self.myterms[k])
            stud = QAction(act, self)
            dumpClass4[k] = stud
            stud.triggered.connect(
                lambda state, x=5, y=k: self.lunchReport(x, y))
            feeMenu.addAction(stud)

        printMenu = mainMenu.addMenu('&Print')
        exitMenu1 = QAction('&Exit', self)
        exitMenu1.setShortcut('CTRL+Q')
        exitMenu1.setStatusTip('Close Dialog')
        exitMenu1.triggered.connect(lambda state, x=1: self.lunchPrintForm(x))
        printMenu.addAction(exitMenu1)
        #printMenu.triggered.connect(lambda state, x = 1:self.lunchPrintForm(x))

        return mainMenu
示例#53
0
    #make the program quit on Ctrl+C
    import signal
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    from PyQt4.QtGui import QApplication
    import sys
    from applet import Applet

    qapp = QApplication(sys.argv)

    # Create some simple applets to load
    defaultApplet = Applet()
    trackingApplet = Applet("Tracking")

    # Normally applets would provide their own menu items,
    # but for this test we'll add them here (i.e. from the outside).
    defaultApplet._menuWidget = QMenuBar()
    defaultApplet._menuWidget.setNativeMenuBar(
        False)  # Native menus are broken on Ubuntu at the moment
    defaultMenu = QMenu("Default Applet", defaultApplet._menuWidget)
    defaultMenu.addAction("Default Action 1")
    defaultMenu.addAction("Default Action 2")
    defaultApplet._menuWidget.addMenu(defaultMenu)

    trackingApplet._menuWidget = QMenuBar()
    trackingApplet._menuWidget.setNativeMenuBar(
        False)  # Native menus are broken on Ubuntu at the moment
    trackingMenu = QMenu("Tracking Applet", trackingApplet._menuWidget)
    trackingMenu.addAction("Tracking Options...")
    trackingMenu.addAction("Track...")
    trackingApplet._menuWidget.addMenu(trackingMenu)
示例#54
0
class PeakMapExplorer(EmzedDialog):
    def __init__(self, ok_rows_container=[], parent=None):
        super(PeakMapExplorer, self).__init__(parent)
        self.setWindowFlags(Qt.Window)
        # Destroying the C++ object right after closing the dialog box,
        # otherwise it may be garbage-collected in another QThread
        # (e.g. the editor's analysis thread in Spyder), thus leading to
        # a segmentation fault on UNIX or an application crash on Windows
        self.ok_rows = ok_rows_container

        self.setAttribute(Qt.WA_DeleteOnClose)
        self.setWindowFlags(Qt.Window)

        self.gamma = 3.0

        self.last_used_directory_for_load = None
        self.last_used_directory_for_save = None

        self.history = History()

    def keyPressEvent(self, e):
        # avoid closing of dialog when Esc key pressed:
        if e.key() != Qt.Key_Escape:
            return super(PeakMapExplorer, self).keyPressEvent(e)

    def setWindowTitle(self):
        if self.peakmap2 is None:
            title = os.path.basename(self.peakmap.meta.get("source", ""))
        else:
            p1 = os.path.basename(self.peakmap.meta.get("source", ""))
            p2 = os.path.basename(self.peakmap2.meta.get("source", ""))
            title = "yellow=%s, blue=%s" % (p1, p2)
        super(PeakMapExplorer, self).setWindowTitle(title)

    def setup(self, peakmap, peakmap2=None, table=None):
        self.table = table

        def collect_precursor_mz(pm):
            for s in pm:
                if s.precursors:
                    if s.msLevel > 1:
                        yield s.precursors[0][0]

        self.ms_levels = set(peakmap.getMsLevels())
        self.precursor_mz = set(collect_precursor_mz(peakmap))
        if peakmap2 is not None:
            self.ms_levels &= set(peakmap2.getMsLevels())
            self.precursor_mz &= set(collect_precursor_mz(peakmap2))

        self.ms_levels = sorted(self.ms_levels)
        self.precursor_mz = sorted(self.precursor_mz)

        self.setup_table_widgets()
        self.setup_input_widgets()
        self.history_list = QComboBox(self)

        self.setup_ms2_widgets()
        self.full_pm = peakmap
        self.full_pm2 = peakmap2
        self.dual_mode = self.full_pm2 is not None

        self.current_ms_level = self.ms_levels[0]
        self.process_peakmap(self.current_ms_level)
        self.rtmin, self.rtmax, self.mzmin, self.mzmax = get_range(
            self.peakmap, self.peakmap2)

        self.setup_plot_widgets()
        self.setup_menu_bar()
        self.setup_layout()
        self.connect_signals_and_slots()
        self.setup_initial_values()
        self.plot_peakmap()

    def setup_ms2_widgets(self):
        self.spectra_selector_widget.set_data(self.ms_levels,
                                              self.precursor_mz)

    def setup_table_widgets(self):
        if self.table is not None:
            self.table_widget = create_table_widget(self.table, self)
            self.select_all_peaks = QPushButton("Select all peaks", self)
            self.unselect_all_peaks = QPushButton("Unselect all peaks", self)
            self.done_button = QPushButton("Done", self)

    def setup_menu_bar(self):
        self.menu_bar = QMenuBar(self)
        menu = QMenu("Peakmap Explorer", self.menu_bar)
        self.menu_bar.addMenu(menu)
        if not self.dual_mode:
            self.load_action = QAction("Load Peakmap", self)
            self.load_action.setShortcut(QKeySequence("Ctrl+L"))
            self.load_action2 = None
            menu.addAction(self.load_action)
        else:
            self.load_action = QAction("Load Yellow Peakmap", self)
            self.load_action2 = QAction("Load Blue Peakmap", self)
            menu.addAction(self.load_action)
            menu.addAction(self.load_action2)

        self.save_action = QAction("Save selected range as image", self)
        self.save_action.setShortcut(QKeySequence("Ctrl+S"))
        menu.addAction(self.save_action)

        menu = QMenu("Help", self.menu_bar)
        self.help_action = QAction("Help", self)
        self.help_action.setShortcut(QKeySequence("F1"))
        menu.addAction(self.help_action)
        self.menu_bar.addMenu(menu)

    def process_peakmap(self, ms_level, pre_mz_min=None, pre_mz_max=None):

        peakmap = self.full_pm.filter(lambda s: s.msLevel == ms_level)
        if ms_level > 1 and pre_mz_min is not None:
            peakmap = peakmap.filter(
                lambda s: s.precursors[0][0] >= pre_mz_min)
        if ms_level > 1 and pre_mz_max is not None:
            peakmap = peakmap.filter(
                lambda s: s.precursors[0][0] <= pre_mz_max)

        if self.full_pm2 is not None:
            peakmap2 = self.full_pm2.filter(lambda s: s.msLevel == ms_level)

        self.peakmap = peakmap
        if self.dual_mode:
            self.peakmap2 = peakmap2
        else:
            self.peakmap2 = None

        for i, msl in enumerate(self.ms_levels):
            if msl == ms_level:
                pass  # TODO self.ms_level.setCurrentIndex(i)

        self.setWindowTitle()

    def setup_initial_values(self):

        imax = self.peakmap_plotter.get_total_imax()
        self.image_scaling_widget.set_max_intensity(imax)
        self.image_scaling_widget.set_gamma(self.gamma)

        self.view_range_widget.set_view_range(self.rtmin, self.rtmax,
                                              self.mzmin, self.mzmax)

    def setup_input_widgets(self):
        self.image_scaling_widget = ImageScalingWidget(self)
        self.spectra_selector_widget = SpectraSelectorWidget(self)
        self.view_range_widget = ViewRangeWidget(self)

    def setup_plot_widgets(self):
        self.peakmap_plotter = PeakMapPlottingWidget()
        self.peakmap_plotter.set_peakmaps(self.peakmap, self.peakmap2)
        self.eic_plotter = EicPlottingWidget(with_range=False)
        self.mz_plotter = MzPlottingWidget()

        self.peakmap_plotter.set_logarithmic_scale(1)
        self.peakmap_plotter.set_gamma(self.gamma)

        self.eic_plotter.set_overall_range(self.rtmin, self.rtmax)
        self.mz_plotter.set_overall_range(self.mzmin, self.mzmax)

    def setup_layout(self):
        outer_layout = QVBoxLayout()
        outer_layout.addWidget(self.menu_bar)
        outer_layout.setStretch(0, 1)

        h_splitter = QSplitter(self)
        h_splitter.setOrientation(Qt.Horizontal)

        # FIRST COLUMN of h_splitter is chromatogram + peakmap:  ############################

        v_splitter1 = QSplitter(self)
        v_splitter1.setOrientation(Qt.Vertical)
        v_splitter1.addWidget(self.eic_plotter)
        v_splitter1.addWidget(self.peakmap_plotter)
        self.peakmap_plotter.setMinimumSize(250, 200)
        v_splitter1.setStretchFactor(0, 1)
        v_splitter1.setStretchFactor(1, 3)

        h_splitter.addWidget(v_splitter1)
        h_splitter.setStretchFactor(0, 2)

        # SECOND COLUMN of h_splittier holds controlx boxes + mz plot #######################

        v_splitter2 = QSplitter(self)
        v_splitter2.setOrientation(Qt.Vertical)

        v_splitter2.addWidget(self.image_scaling_widget)
        v_splitter2.addWidget(self.spectra_selector_widget)
        v_splitter2.addWidget(self.view_range_widget)
        v_splitter2.addWidget(self.history_list)
        v_splitter2.addWidget(self.mz_plotter)

        v_splitter2.setStretchFactor(0, 0)
        v_splitter2.setStretchFactor(1, 0)
        v_splitter2.setStretchFactor(2, 0)
        v_splitter2.setStretchFactor(3, 0)
        v_splitter2.setStretchFactor(4, 1)

        h_splitter.addWidget(v_splitter2)
        h_splitter.setStretchFactor(1, 1)

        # THIRD COLUMN of h_splittier holds control table + buttons ##########################
        if self.table:
            frame = QFrame(self)
            layout = QVBoxLayout(frame)
            frame.setLayout(layout)
            layout.addWidget(self.table_widget)

            button_row_layout = QHBoxLayout(frame)
            button_row_layout.addWidget(self.select_all_peaks)
            button_row_layout.addWidget(self.unselect_all_peaks)
            button_row_layout.addWidget(self.done_button)

            layout.addLayout(button_row_layout)
            h_splitter.addWidget(frame)
            h_splitter.setStretchFactor(2, 2)

        outer_layout.addWidget(h_splitter)
        self.setLayout(outer_layout)
        outer_layout.setStretch(1, 99)

    def connect_signals_and_slots(self):
        self.image_scaling_widget.USE_LOG_SCALE.connect(self.use_logscale)
        self.image_scaling_widget.GAMMA_CHANGED.connect(self.gamma_changed)

        self.image_scaling_widget.IMIN_CHANGED.connect(self.set_image_min)
        self.image_scaling_widget.IMAX_CHANGED.connect(self.set_image_max)

        self.spectra_selector_widget.MS_LEVEL_CHOSEN.connect(
            self.ms_level_chosen)
        self.spectra_selector_widget.PRECURSOR_RANGE_CHANGED.connect(
            self.set_precursor_range)

        self.view_range_widget.RANGE_CHANGED.connect(self.update_image_range)

        self.connect(self.history_list, SIGNAL("activated(int)"),
                     self.history_item_selected)

        if self.dual_mode:
            self.connect(self.load_action, SIGNAL("triggered()"),
                         self.do_load_yellow)
            self.connect(self.load_action2, SIGNAL("triggered()"),
                         self.do_load_blue)
        else:
            self.connect(self.load_action, SIGNAL("triggered()"), self.do_load)
        self.connect(self.save_action, SIGNAL("triggered()"), self.do_save)
        self.connect(self.help_action, SIGNAL("triggered()"), self.show_help)

        self.peakmap_plotter.NEW_IMAGE_LIMITS.connect(
            self.image_limits_upated_by_user)

        self.peakmap_plotter.KEY_LEFT.connect(
            self.user_pressed_left_key_in_plot)
        self.peakmap_plotter.KEY_RIGHT.connect(
            self.user_pressed_right_key_in_plot)
        self.peakmap_plotter.KEY_BACKSPACE.connect(
            self.user_pressed_backspace_key_in_plot)
        self.peakmap_plotter.KEY_END.connect(self.user_pressed_end_key_in_plot)
        self.peakmap_plotter.CURSOR_MOVED.connect(self.cursor_moved_in_plot)
        self.eic_plotter.CURSOR_MOVED.connect(self.eic_cursor_moved)
        self.eic_plotter.VIEW_RANGE_CHANGED.connect(
            self.eic_view_range_changed)
        self.mz_plotter.CURSOR_MOVED.connect(self.mz_cursor_moved)
        self.mz_plotter.VIEW_RANGE_CHANGED.connect(self.mz_view_range_changed)

        if self.table is not None:
            self.connect(self.table_widget.verticalHeader(),
                         SIGNAL("sectionClicked(int)"), self.row_selected)
            self.connect(self.table_widget,
                         SIGNAL("itemClicked(QTableWidgetItem*)"),
                         self.cell_clicked)
            self.connect(self.select_all_peaks, SIGNAL("pressed()"),
                         self.select_all_peaks_button_pressed)
            self.connect(self.unselect_all_peaks, SIGNAL("pressed()"),
                         self.unselect_all_peaks_button_pressed)
            self.connect(self.done_button, SIGNAL("pressed()"),
                         self.done_button_pressed)

            def key_release_handler(evt):
                tw = self.table_widget
                active_rows = set(
                    ix.row()
                    for ix in tw.selectionModel().selection().indexes())
                if active_rows:
                    row = active_rows.pop()
                    if evt.key() in (Qt.Key_Up, Qt.Key_Down):
                        tw.selectRow(row)
                        tw.verticalHeader().emit(SIGNAL("sectionClicked(int)"),
                                                 row)
                        return
                return QTableWidget.keyPressEvent(tw, evt)

            self.table_widget.keyReleaseEvent = key_release_handler

    def cursor_moved_in_plot(self, rt, mz):
        self.eic_plotter.set_cursor_pos(rt)
        self.mz_plotter.set_cursor_pos(mz)

    def eic_cursor_moved(self, rt):
        self.peakmap_plotter.set_cursor_rt(rt)

    def eic_view_range_changed(self, rtmin, rtmax):
        """
        we want to avoid the loop   EIC_RANGE_CHANGED -> VIEW_RANGE_CHANGED -> EIC_RANGE_CHANGED
        and we do not want to fully block emitting of VIEW_RANGE_CHANGED.
        so self.peakmap_plotter.blockSignals() does not work here, instead we "cut" the last
        connection here:
        """
        self.eic_plotter.VIEW_RANGE_CHANGED.disconnect()
        self.peakmap_plotter.blockSignals(True)
        self.peakmap_plotter.set_rt_limits(rtmin, rtmax)
        self.peakmap_plotter.blockSignals(False)
        self.peakmap_plotter.replot()
        self.eic_plotter.VIEW_RANGE_CHANGED.connect(
            self.eic_view_range_changed)

    def mz_view_range_changed(self, mzmin, mzmax):
        """
        we want to avoid the loop  MZ_RANGE_CHANGED -> VIEW_RANGE_CHANGED -> MZ_RANGE_CHANGED
        and we do not want to fully block emitting of VIEW_RANGE_CHANGED.
        so self.peakmap_plotter.blockSignals() does not work here, instead we "cut" the last
        connection here:
        """
        self.mz_plotter.VIEW_RANGE_CHANGED.disconnect()
        self.peakmap_plotter.blockSignals(True)
        self.peakmap_plotter.set_mz_limits(mzmin, mzmax)
        self.peakmap_plotter.blockSignals(False)
        self.peakmap_plotter.replot()
        self.mz_plotter.VIEW_RANGE_CHANGED.connect(self.mz_view_range_changed)

    def mz_cursor_moved(self, mz):
        self.peakmap_plotter.set_cursor_mz(mz)

    def image_limits_upated_by_user(self, rtmin, rtmax, mzmin, mzmax):
        self.update_peakmap_projection_views(rtmin, rtmax, mzmin, mzmax)
        self.history.new_head((rtmin, rtmax, mzmin, mzmax))
        self.update_history_entries()

    def set_image_min(self, value):
        self.peakmap_plotter.set_imin(value)
        self.peakmap_plotter.replot()

    def set_image_max(self, value):
        self.peakmap_plotter.set_imax(value)
        self.peakmap_plotter.replot()

    def update_peakmap_projection_views(self, rtmin, rtmax, mzmin, mzmax):

        rts, chroma = self.peakmap.chromatogram(mzmin, mzmax)
        self.eic_plotter.del_all_items()
        if self.dual_mode:
            rts2, chroma2 = self.peakmap2.chromatogram(mzmin, mzmax, rtmin,
                                                       rtmax)
            self.eic_plotter.add_eics([(rts, chroma), (rts2, chroma2)],
                                      configs=[blue_line, yellow_line])
        else:
            self.eic_plotter.add_eics([(rts, chroma)], configs=[grey_line])

        self.eic_plotter.shrink_and_replot(rtmin, rtmax)

        if self.dual_mode:
            data = [(self.peakmap, rtmin, rtmax, mzmin, mzmax, 3000),
                    (self.peakmap2, rtmin, rtmax, mzmin, mzmax, 3000)]
            configs = [dict(color="#aaaa00"), dict(color="#0000aa")]
            self.mz_plotter.plot_peakmaps(data, configs)
        else:
            self.mz_plotter.plot_peakmaps([(self.peakmap, rtmin, rtmax, mzmin,
                                            mzmax, 3000)])

        self.mz_plotter.shrink_and_replot(mzmin, mzmax)
        self.view_range_widget.set_view_range(rtmin, rtmax, mzmin, mzmax)

    def _handle_history_action(self, action):
        item = action()
        if item is not None:
            self.peakmap_plotter.set_limits_no_sig(*item)
            self.update_peakmap_projection_views(*item)
            self.update_history_entries()

    def user_pressed_left_key_in_plot(self):
        self._handle_history_action(self.history.go_back)

    def user_pressed_right_key_in_plot(self):
        self._handle_history_action(self.history.go_forward)

    def user_pressed_backspace_key_in_plot(self):
        self._handle_history_action(self.history.go_to_beginning)

    def user_pressed_end_key_in_plot(self):
        self._handle_history_action(self.history.go_to_end)

    def history_item_selected(self, index):
        self._handle_history_action(
            lambda index=index: self.history.set_position(index))

    @protect_signal_handler
    def do_save(self):
        pix = self.peakmap_plotter.paint_pixmap()
        while True:
            path = askForSave(self.last_used_directory_for_save,
                              caption="Save Image",
                              extensions=("png", "PNG"))
            if path is None:
                break
            __, ext = os.path.splitext(path)
            if ext not in (".png", ".PNG"):
                QMessageBox.warning(self, "Warning",
                                    "wrong/missing extension '.png'")
            else:
                self.last_used_directory_for_save = os.path.dirname(path)
                pix.save(path)
                break
        return

    def _do_load(self, title, attribute):
        path = askForSingleFile(self.last_used_directory_for_load,
                                caption=title,
                                extensions=("mzML", "mzData", "mzXML"))
        if path is not None:
            setattr(self, attribute, loadPeakMap(path))
            self.process_peakmap()
            self.peakmap_plotter.set_peakmaps(self.peakmap, self.peakmap2)
            self.setup_initial_values()
            self.setWindowTitle()
            self.peakmap_plotter.replot()
            self.plot_peakmap()
            self.last_used_directory_for_load = os.path.dirname(path)

    @protect_signal_handler
    def do_load(self):
        self._do_load("Load Peakmap", "peakmap")

    @protect_signal_handler
    def do_load_yellow(self):
        self._do_load("Load Yellow Peakmap", "peakmap")

    @protect_signal_handler
    def do_load_blue(self):
        self._do_load("Load Blue Peakmap", "peakmap2")

    @protect_signal_handler
    def select_all_peaks_button_pressed(self):
        for row in range(self.table_widget.rowCount()):
            item = self.table_widget.item(row, 0)
            item.setCheckState(Qt.Checked)

    @protect_signal_handler
    def unselect_all_peaks_button_pressed(self):
        for row in range(self.table_widget.rowCount()):
            item = self.table_widget.item(row, 0)
            item.setCheckState(Qt.Unchecked)

    @protect_signal_handler
    def done_button_pressed(self):
        self.ok_rows[:] = [
            i for i in range(len(self.table))
            if self.table_widget.item(i, 0).checkState() == Qt.Checked
        ]
        self.accept()

    @protect_signal_handler
    def row_selected(self, row_idx):
        row = self.table.getValues(self.table.rows[row_idx])
        needed = ["rtmin", "rtmax", "mzmin", "mzmax"]
        if all(n in row for n in needed):
            rtmin, rtmax, mzmin, mzmax = [row.get(ni) for ni in needed]
            self.peakmap_plotter.set_limits(rtmin, rtmax, mzmin, mzmax)
        else:
            needed = ["mzmin", "mzmax"]
            if all(n in row for n in needed):
                mzmin, mzmax = [row.get(ni) for ni in needed]
                self.peakmap_plotter.set_limits(self.rtmin, self.rtmax, mzmin,
                                                mzmax)

    @protect_signal_handler
    def cell_clicked(self, item):
        row = item.row()
        self.table_widget.selectRow(row)
        self.table_widget.verticalHeader().emit(SIGNAL("sectionClicked(int)"),
                                                row)

    @protect_signal_handler
    def show_help(self):
        html = resource_string("emzed.core.explorers",
                               "help_peakmapexplorer.html")
        QWebSettings.globalSettings().setFontFamily(QWebSettings.StandardFont,
                                                    'Courier')
        QWebSettings.globalSettings().setFontSize(QWebSettings.DefaultFontSize,
                                                  12)
        v = QWebView(self)
        v.setHtml(html)
        dlg = QDialog(self, Qt.Window)
        dlg.setMinimumSize(300, 300)
        l = QVBoxLayout(dlg)
        l.addWidget(v)
        dlg.setLayout(l)
        dlg.show()

    def update_history_entries(self):
        self.history_list.clear()
        for item in self.history.items:
            rtmin, rtmax, mzmin, mzmax = item
            str_item = "%10.5f .. %10.5f %6.2fm...%6.2fm " % (
                mzmin, mzmax, rtmin / 60.0, rtmax / 60.0)
            self.history_list.addItem(str_item)

        self.history_list.setCurrentIndex(self.history.position)

    @protect_signal_handler
    def use_logscale(self, is_log):
        self.peakmap_plotter.set_logarithmic_scale(is_log)
        self.peakmap_plotter.replot()

    @protect_signal_handler
    def ms_level_chosen(self, ms_level):
        if ms_level != self.current_ms_level:
            self.current_ms_level = ms_level
            self.process_peakmap(ms_level)
            self.peakmap_plotter.set_peakmaps(self.peakmap, self.peakmap2)
            self.peakmap_plotter.replot()
            self.plot_peakmap()

    @protect_signal_handler
    def set_precursor_range(self, pre_mz_min, pre_mz_max):
        self.process_peakmap(self.current_ms_level, pre_mz_min, pre_mz_max)
        self.peakmap_plotter.set_peakmaps(self.peakmap, self.peakmap2)
        self.peakmap_plotter.replot()
        self.plot_peakmap()

    @protect_signal_handler
    def gamma_changed(self, value):
        self.peakmap_plotter.set_gamma(value)
        self.peakmap_plotter.replot()

    @protect_signal_handler
    def update_image_range(self, rtmin, rtmax, mzmin, mzmax):

        rtmin *= 60.0
        rtmax *= 60.0

        if rtmin < self.rtmin:
            rtmin = self.rtmin
        if rtmax > self.rtmax:
            rtmax = self.rtmax
        if mzmin < self.mzmin:
            mzmin = self.mzmin
        if mzmax > self.mzmax:
            mzmax = self.mzmax
        rtmin, rtmax = sorted((rtmin, rtmax))
        mzmin, mzmax = sorted((mzmin, mzmax))

        self.peakmap_plotter.set_limits(rtmin, rtmax, mzmin, mzmax)

    def plot_peakmap(self):
        self.peakmap_plotter.set_limits(self.rtmin, self.rtmax, self.mzmin,
                                        self.mzmax)
示例#55
0
 def setupUi(self, port):
     self.setObjectName("MainWindow")
     self.resize(600, 600)
     self.centralwidget = QWidget(self)
     p = self.centralwidget.palette()
     self.centralwidget.setAutoFillBackground(True)
     p.setColor(self.centralwidget.backgroundRole(), QColor(126, 135, 152))
     self.centralwidget.setPalette(p)
     self.centralwidget.setObjectName("centralwidget")
     self.gridLayout = QGridLayout(self.centralwidget)
     self.gridLayout.setObjectName("gridLayout")
     self.setCentralWidget(self.centralwidget)
     self.menubar = QMenuBar(self)
     self.menubar.setGeometry(QRect(0, 0, 808, 25))
     self.menubar.setObjectName("menubar")
     self.menuFile = QMenu(self.menubar)
     self.menuFile.setObjectName("menuFile")
     self.setMenuBar(self.menubar)
     self.statusbar = QStatusBar(self)
     self.statusbar.setObjectName("statusbar")
     self.setStatusBar(self.statusbar)
     self.actionQuit = QAction(self)
     self.actionQuit.setObjectName("actionQuit")
     self.menuFile.addSeparator()
     self.menuFile.addAction(self.actionQuit)
     self.menubar.addAction(self.menuFile.menuAction())
     self.actionReset = QAction(self)
     self.actionReset.setObjectName("reset")
     self.menuFile.addSeparator()
     self.menuFile.addAction(self.actionReset)
     self.menubar.addAction(self.menuFile.menuAction())
     # add other GUI objects
     self.graph_widget = GraphWidget(self.statusbar)
     self.gridLayout.addWidget(self.graph_widget, 1, 11, 10, 10)
     pixmap = QPixmap(':/images/cta-logo-mini.png')
     lbl = QLabel()
     lbl.setPixmap(pixmap)
     self.gridLayout.addWidget(lbl, 0, 0)
     p = self.graph_widget.palette()
     self.graph_widget.setAutoFillBackground(True)
     p.setColor(self.graph_widget.backgroundRole(),
                QColor(255, 255, 255))  # QColor(226, 235, 252))
     self.graph_widget.setPalette(p)
     self.quitButton = QPushButton()  # self.centralwidget)
     self.quitButton.setObjectName("quitButton")
     self.quitButton.setText(
         QApplication.translate("MainWindow", "Quit", None,
                                QApplication.UnicodeUTF8))
     self.gridLayout.addWidget(self.quitButton, 12, 0, 1, 1)
     self.info_label = InfoLabel(0, 4)
     self.info_label.setAutoFillBackground(True)
     self.gridLayout.addWidget(self.info_label, 1, 0, 1, 5)
     #self.info_label.setAlignment(PyQt4.Qt.AlignCenter);
     palette = QPalette()
     palette.setColor(self.info_label.backgroundRole(), Qt.lightGray)
     self.info_label.setPalette(palette)
     QObject.connect(self.quitButton, SIGNAL("clicked()"), self.stop)
     QObject.connect(self.actionQuit, SIGNAL("triggered()"), self.stop)
     QMetaObject.connectSlotsByName(self)
     self.retranslateUi()
     QObject.connect(self.actionQuit, SIGNAL("triggered()"), self.close)
     QMetaObject.connectSlotsByName(self)
     # Create GuiConnexion for ZMQ comminucation with pipeline
     self.guiconnection = GuiConnexion(gui_port=port,
                                       statusBar=self.statusbar)
     self.guiconnection.message.connect(self.graph_widget.pipechange)
     self.guiconnection.message.connect(self.info_label.pipechange)
     self.guiconnection.reset_message.connect(self.graph_widget.reset)
     self.guiconnection.reset_message.connect(self.info_label.reset)
     self.guiconnection.mode_message.connect(self.info_label.mode_receive)
     QObject.connect(self.actionReset, SIGNAL("triggered()"),
                     self.guiconnection.reset)
     QMetaObject.connectSlotsByName(self)
     # start the process
     self.guiconnection.start()
示例#56
0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        
        #Set size of window and make it non-resizeable
        MainWindow.resize(818, 665)
        MainWindow.setFixedHeight(665)
        MainWindow.setFixedWidth(818)
        
        MainWindow.setWindowTitle("Map Master: Search for the Lost City")
        MainWindow.setWindowIcon(QIcon("icon_medium.ico"))

        #Set window backgrounds
        self.background = QLabel(MainWindow)
        
        
        self.backgroundPixmapMenu = QPixmap(normpath("images/gameMenu2.png"))
        self.backgroundPixmapSettings = QPixmap(normpath("images/gameMenuSettings2.png"))
        self.background.setPixmap(self.backgroundPixmapMenu)       
        
        self.background.setGeometry(QtCore.QRect(0, 0, 818, 665))
        
        #Stylesheet settings for labels and buttons
        self.fg = "QLabel {color:black}"
        self.fgb = "QPushButton {color:black}"

        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.stackedWidget = QStackedWidget(self.centralwidget)
        self.stackedWidget.setEnabled(True)
        self.stackedWidget.setObjectName("stackedWidget")
        
        #Main Menu page
        self.menuPage = QWidget()
        self.menuPage.setObjectName("menuPage")
        self.startButton = QPushButton(self.menuPage)
        self.startButton.setStyleSheet(self.fgb)
        self.startButton.setGeometry(QtCore.QRect(600, 200, 180, 60))
        self.startButton.setText(QApplication.translate("MainWindow", "Start Game", None, QApplication.UnicodeUTF8))
        self.startButton.setObjectName("startButton")
        self.loadButton = QPushButton(self.menuPage)
        self.loadButton.setStyleSheet(self.fgb)
        self.loadButton.setGeometry(QtCore.QRect(600, 280, 180, 60))
        self.loadButton.setText(QApplication.translate("MainWindow", "Load Game", None, QApplication.UnicodeUTF8))
        self.loadButton.setObjectName("loadButton")
        self.settingsButton = QPushButton(self.menuPage)
        self.settingsButton.setStyleSheet(self.fgb)
        self.settingsButton.setGeometry(QtCore.QRect(600, 440, 180, 60))
        self.settingsButton.setText(QApplication.translate("MainWindow", "Settings", None, QApplication.UnicodeUTF8))
        self.settingsButton.setObjectName("settingsButton")
        self.quitButton = QPushButton(self.menuPage)
        self.quitButton.setStyleSheet(self.fgb)
        self.quitButton.setGeometry(QtCore.QRect(600, 520, 180, 60))
        self.quitButton.setText(QApplication.translate("MainWindow", "Quit", None, QApplication.UnicodeUTF8))
        self.quitButton.setObjectName("quitButton")
        self.instrButton = QPushButton(self.menuPage)
        self.instrButton.setStyleSheet(self.fgb)
        self.instrButton.setGeometry(QtCore.QRect(600, 360, 180, 60))
        self.instrButton.setText(QApplication.translate("MainWindow", "Instructions", None, QApplication.UnicodeUTF8))
        self.instrButton.setObjectName("instrButton")
        self.stackedWidget.addWidget(self.menuPage)
        
        #Settings page
        self.settingsPage = QWidget()
        self.settingsPage.setObjectName("settingsPage")
        self.volumeSlider = QSlider(self.settingsPage)
        self.volumeSlider.setGeometry(QtCore.QRect(200, 200, 400, 30))
        self.volumeSlider.setProperty("value", 50)
        self.volumeSlider.setOrientation(QtCore.Qt.Horizontal)
        self.volumeSlider.setObjectName("volumeSlider")
        self.soundLabel = QLabel(self.settingsPage)
        self.soundLabel.setGeometry(QtCore.QRect(340, 160, 120, 30))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(20)
        self.soundLabel.setFont(font)
        self.soundLabel.setStyleSheet(self.fg)
        self.soundLabel.setText(QApplication.translate("MainWindow", "Volume", None, QApplication.UnicodeUTF8))
        self.soundLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.soundLabel.setObjectName("soundLabel")
        
        #Quiet Sound Graphic
        self.quietGraphic = QLabel(self.settingsPage)
        self.quietGraphic.setPixmap(QPixmap(normpath("images/speakerQuiet.png")))
        self.quietGraphic.setGeometry(QtCore.QRect(90, 180, 80, 80))
        self.quietGraphic.setObjectName("quietGraphic")
        
        #Loud Sound Graphic
        self.loudGraphic = QLabel(self.settingsPage)
        self.loudGraphic.setPixmap(QPixmap(normpath("images/speakerLoud.png")))
        self.loudGraphic.setEnabled(True)
        self.loudGraphic.setGeometry(QtCore.QRect(630, 180, 80, 80))
        self.loudGraphic.setObjectName("loudGraphic")
        
        self.settingsLabel = QLabel(self.settingsPage)
        self.settingsLabel.setGeometry(QtCore.QRect(260, 30, 280, 60))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(36)
        self.settingsLabel.setFont(font)
        self.settingsLabel.setStyleSheet(self.fg)
        self.settingsLabel.setText(QApplication.translate("MainWindow", "Settings", None, QApplication.UnicodeUTF8))
        self.settingsLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.settingsLabel.setObjectName("settingsLabel")
        self.doneButton = QPushButton(self.settingsPage)
        self.doneButton.setStyleSheet(self.fgb)
        self.doneButton.setGeometry(QtCore.QRect(600, 520, 161, 61))
        self.doneButton.setText(QApplication.translate("MainWindow", "Done", None, QApplication.UnicodeUTF8))
        self.doneButton.setObjectName("doneButton")
        self.stackedWidget.addWidget(self.settingsPage)
        
        self.soundManager = Sounds(self.volumeSlider.sliderPosition())
        
        #Main Game page
        self.mainPage = QWidget()
        self.mainPage.setObjectName("mainPage")
        
        #Person View
        self.personView = ViewGraphics(self.mainPage)
        self.personView.setGeometry(QtCore.QRect(0, 0, 390, 500))
        self.personView.setObjectName("personView")
        
        #Map View
        self.mapView = ViewGraphics(self.mainPage)
        self.mapView.setGeometry(QtCore.QRect(410, 0, 390, 500))
        self.mapView.setObjectName("mapView")
        
        #ClueView
        self.clueView = QLabel(self.mainPage)
        self.clueView.setGeometry(QtCore.QRect(0, 510, 390, 91))
        self.clueView.setObjectName("clueView")
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(20)
        self.clueView.setFont(font)
        self.clueView.setStyleSheet(self.fg)
        
        #Map Toggles
        self.latLongCheck = QCheckBox(self.mainPage)
        self.latLongCheck.setGeometry(QtCore.QRect(420, 510, 97, 41))
        self.latLongCheck.setText(QApplication.translate("MainWindow", "Latitude/ \n"
        "Longitude", None, QApplication.UnicodeUTF8))
        self.latLongCheck.setObjectName("latLongCheck")

        self.colorCheck = QCheckBox(self.mainPage)
        self.colorCheck.setGeometry(QtCore.QRect(560, 510, 97, 41))
        self.colorCheck.setText(QApplication.translate("MainWindow", "Color\n"
        "Coding", None, QApplication.UnicodeUTF8))
        self.colorCheck.setObjectName("colorCheck")
        self.legendCheck = QCheckBox(self.mainPage)
        self.legendCheck.setGeometry(QtCore.QRect(680, 520, 97, 22))
        self.legendCheck.setText(QApplication.translate("MainWindow", "Legend", None, QApplication.UnicodeUTF8))
        self.legendCheck.setObjectName("legendCheck")
        self.searchButton = QPushButton(self.mainPage)
        self.searchButton.setStyleSheet(self.fgb)
        self.searchButton.setGeometry(QtCore.QRect(420, 560, 211, 41))
        self.searchButton.setText(QApplication.translate("MainWindow", "Search", None, QApplication.UnicodeUTF8))
        self.searchButton.setObjectName("searchButton")
        
        #Score pieces
        self.scoreBox = QLabel(self.mainPage)
        self.scoreBox.setStyleSheet(self.fg)
        self.scoreBox.setGeometry(QtCore.QRect(720, 560, 71, 41))
        self.scoreBox.setObjectName("scoreBox")
        self.scoreBox.setText(QApplication.translate("MainWindow", "0", None, QApplication.UnicodeUTF8))
        self.scoreLabel = QLabel(self.mainPage)
        self.scoreLabel.setStyleSheet(self.fg)
        self.scoreLabel.setGeometry(QtCore.QRect(660, 570, 51, 17))
        self.scoreLabel.setText(QApplication.translate("MainWindow", "Score:", None, QApplication.UnicodeUTF8))
        self.scoreLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.scoreLabel.setObjectName("scoreLabel")
        self.stackedWidget.addWidget(self.mainPage)
        
        #Help page
        self.helpPage = QWidget()
        self.helpPage.setObjectName("helpPage")
        self.HelpLabel = QLabel(self.helpPage)
        self.HelpLabel.setStyleSheet(self.fg)
        self.HelpLabel.setGeometry(QtCore.QRect(260, 30, 280, 60))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(36)
        self.HelpLabel.setFont(font)
        self.HelpLabel.setText(QApplication.translate("MainWindow", "Instructions", None, QApplication.UnicodeUTF8))
        self.HelpLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.HelpLabel.setObjectName("HelpLabel")
        self.wInstr = QLabel(self.helpPage)
        self.wInstr.setStyleSheet(self.fg)
        self.wInstr.setGeometry(QtCore.QRect(200, 150, 40, 30))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(20)
        self.wInstr.setFont(font)
        self.wInstr.setText(QApplication.translate("MainWindow", "W", None, QApplication.UnicodeUTF8))
        self.wInstr.setAlignment(QtCore.Qt.AlignCenter)
        self.wInstr.setObjectName("wInstr")
        self.sInstr = QLabel(self.helpPage)
        self.sInstr.setStyleSheet(self.fg)
        self.sInstr.setGeometry(QtCore.QRect(200, 200, 40, 30))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(20)
        self.sInstr.setFont(font)
        self.sInstr.setText(QApplication.translate("MainWindow", "S", None, QApplication.UnicodeUTF8))
        self.sInstr.setAlignment(QtCore.Qt.AlignCenter)
        self.sInstr.setObjectName("sInstr")
        self.aInstr = QLabel(self.helpPage)
        self.aInstr.setStyleSheet(self.fg)
        self.aInstr.setGeometry(QtCore.QRect(200, 250, 40, 30))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(20)
        self.aInstr.setFont(font)
        self.aInstr.setText(QApplication.translate("MainWindow", "A", None, QApplication.UnicodeUTF8))
        self.aInstr.setAlignment(QtCore.Qt.AlignCenter)
        self.aInstr.setObjectName("aInstr")
        self.dInstr = QLabel(self.helpPage)
        self.dInstr.setStyleSheet(self.fg)
        self.dInstr.setGeometry(QtCore.QRect(200, 300, 40, 30))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(20)
        self.dInstr.setFont(font)
        self.dInstr.setText(QApplication.translate("MainWindow", "D", None, QApplication.UnicodeUTF8))
        self.dInstr.setAlignment(QtCore.Qt.AlignCenter)
        self.dInstr.setObjectName("dInstr")
        self.wInstr2 = QLabel(self.helpPage)
        self.wInstr2.setStyleSheet(self.fg)
        self.wInstr2.setGeometry(QtCore.QRect(400, 150, 180, 30))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(20)
        self.wInstr2.setFont(font)
        self.wInstr2.setText(QApplication.translate("MainWindow", "Move North", None, QApplication.UnicodeUTF8))
        self.wInstr2.setAlignment(QtCore.Qt.AlignCenter)
        self.wInstr2.setObjectName("wInstr2")
        self.sInstr2 = QLabel(self.helpPage)
        self.sInstr2.setStyleSheet(self.fg)
        self.sInstr2.setGeometry(QtCore.QRect(400, 200, 180, 30))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(20)
        self.sInstr2.setFont(font)
        self.sInstr2.setText(QApplication.translate("MainWindow", "Move South", None, QApplication.UnicodeUTF8))
        self.sInstr2.setAlignment(QtCore.Qt.AlignCenter)
        self.sInstr2.setObjectName("sInstr2")
        self.aInstr2 = QLabel(self.helpPage)
        self.aInstr2.setStyleSheet(self.fg)
        self.aInstr2.setGeometry(QtCore.QRect(400, 250, 180, 30))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(20)
        self.aInstr2.setFont(font)
        self.aInstr2.setText(QApplication.translate("MainWindow", "Move West", None, QApplication.UnicodeUTF8))
        self.aInstr2.setAlignment(QtCore.Qt.AlignCenter)
        self.aInstr2.setObjectName("aInstr2")
        self.dInstr2 = QLabel(self.helpPage)
        self.dInstr2.setStyleSheet(self.fg)
        self.dInstr2.setGeometry(QtCore.QRect(400, 300, 180, 30))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(20)
        self.dInstr2.setFont(font)
        self.dInstr2.setText(QApplication.translate("MainWindow", "Move East", None, QApplication.UnicodeUTF8))
        self.dInstr2.setAlignment(QtCore.Qt.AlignCenter)
        self.dInstr2.setObjectName("dInstr2")
        self.searchInstr = QPushButton(self.helpPage)
        self.searchInstr.setStyleSheet(self.fgb)
        self.searchInstr.setEnabled(True)
        self.searchInstr.setGeometry(QtCore.QRect(170, 350, 100, 30))
        self.searchInstr.setText(QApplication.translate("MainWindow", "Search", None, QApplication.UnicodeUTF8))
        self.searchInstr.setAutoDefault(False)
        self.searchInstr.setDefault(False)
        self.searchInstr.setFlat(False)
        self.searchInstr.setObjectName("searchInstr")
        self.dInstr2_2 = QLabel(self.helpPage)
        self.dInstr2_2.setStyleSheet(self.fg)
        self.dInstr2_2.setGeometry(QtCore.QRect(380, 350, 211, 30))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(20)
        self.dInstr2_2.setFont(font)
        self.dInstr2_2.setText(QApplication.translate("MainWindow", "Search for clues", None, QApplication.UnicodeUTF8))
        self.dInstr2_2.setAlignment(QtCore.Qt.AlignCenter)
        self.dInstr2_2.setObjectName("dInstr2_2")
        self.doneButton2 = QPushButton(self.helpPage)
        self.doneButton2.setStyleSheet(self.fgb)
        self.doneButton2.setGeometry(QtCore.QRect(600, 520, 161, 61))
        self.doneButton2.setText(QApplication.translate("MainWindow", "Done", None, QApplication.UnicodeUTF8))
        self.doneButton2.setObjectName("doneButton2")
        self.stackedWidget.addWidget(self.helpPage)
        
        #Credits page
        self.creditsPage = QWidget()
        self.creditsPage.setObjectName("creditsPage")
        self.creditsLabel = QLabel(self.creditsPage)
        self.creditsLabel.setStyleSheet(self.fg)
        self.creditsLabel.setGeometry(QtCore.QRect(260, 30, 280, 60))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(36)
        self.creditsLabel.setFont(font)
        self.creditsLabel.setText(QApplication.translate("MainWindow", "Credits", None, QApplication.UnicodeUTF8))
        self.creditsLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.creditsLabel.setObjectName("creditsLabel")
        self.credits = QLabel(self.creditsPage)
        self.credits.setStyleSheet(self.fg)
        self.credits.setGeometry(QtCore.QRect(180, 150, 500, 400))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(20)
        self.credits.setFont(font)
        self.credits.setText(QApplication.translate("MainWindow", 
        "Gary Lent\n"
        "Grant Stafford\n"
        "Jessie Liu\n"
        "Peter Andrien\n"
        "Nokia (Qt4 framework)\n"
        "Riverbank Computing Ltd (PyQt)\n"
        "Celestial Aeon Project", None, QApplication.UnicodeUTF8))
        self.credits.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
        self.credits.setObjectName("credits")
        self.doneButton3 = QPushButton(self.creditsPage)
        self.doneButton3.setStyleSheet(self.fgb)
        self.doneButton3.setGeometry(QtCore.QRect(600, 520, 161, 61))
        self.doneButton3.setText(QApplication.translate("MainWindow", "Done", None, QApplication.UnicodeUTF8))
        self.doneButton3.setObjectName("doneButton3")
        self.stackedWidget.addWidget(self.creditsPage)
        
        #Story page
        self.storyPage = QWidget()
        self.storyPage.setObjectName("storyPage")
        self.storyLabel = QLabel(self.storyPage)
        self.storyLabel.setStyleSheet(self.fg)
        self.storyLabel.setGeometry(QtCore.QRect(100, 50, 600, 400))
        font = QFont()
        font.setFamily("Century Schoolbook L")
        font.setPointSize(25)
        self.storyLabel.setFont(font)
        self.storyLabel.setText(QApplication.translate("MainWindow", "My name is Travis Sinclair.\n I'm a skilled cartographer.\n I recently lost my job, but stumbled\n on a clue that may change my life \nforever. I've set off on a quest - a quest\n to find a lost city. I've found a clue,\n and believe there may be more.\n Help me find the lost city.  ", None, QApplication.UnicodeUTF8))
        self.storyLabel.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
        self.storyLabel.setObjectName("storyLabel")
        self.nextButton = QPushButton(self.storyPage)
        self.nextButton.setGeometry(QtCore.QRect(600, 520, 161, 61))
        self.nextButton.setText(QApplication.translate("MainWindow", "Next", None, QApplication.UnicodeUTF8))
        self.nextButton.setObjectName("nextButton")
        self.stackedWidget.addWidget(self.storyPage)
        
        self.gridLayout.addWidget(self.stackedWidget, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        
        #Menu bar
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 818, 25))
        self.menubar.setObjectName("menubar")
        self.menuMenu = QMenu(self.menubar)
        self.menuMenu.setTitle(QApplication.translate("MainWindow", "Menu", None, QApplication.UnicodeUTF8))
        self.menuMenu.setObjectName("menuMenu")
        MainWindow.setMenuBar(self.menubar)
        self.actionSave_Game = QAction(MainWindow)
        self.actionSave_Game.setText(QApplication.translate("MainWindow", "Save Game", None, QApplication.UnicodeUTF8))
        self.actionSave_Game.setObjectName("actionSave_Game")
        self.actionCredits = QAction(MainWindow)
        self.actionCredits.setText(QApplication.translate("MainWindow", "Credits", None, QApplication.UnicodeUTF8))
        self.actionCredits.setObjectName("actionCredits")
        self.actionQuit = QAction(MainWindow)
        self.actionQuit.setText(QApplication.translate("MainWindow", "Quit", None, QApplication.UnicodeUTF8))
        self.actionQuit.setObjectName("actionQuit")
        self.actionSettings = QAction(MainWindow)
        self.actionSettings.setText(QApplication.translate("MainWindow", "Settings", None, QApplication.UnicodeUTF8))
        self.actionSettings.setObjectName("actionSettings")
        self.actionHelp = QAction(MainWindow)
        self.actionHelp.setText(QApplication.translate("MainWindow", "Help", None, QApplication.UnicodeUTF8))
        self.actionHelp.setObjectName("actionHelp")
        self.actionMain_Menu = QAction(MainWindow)
        self.actionMain_Menu.setText(QApplication.translate("MainWindow", "Main Menu", None, QApplication.UnicodeUTF8))
        self.actionMain_Menu.setObjectName("actionMain_Menu")
        self.menuMenu.addAction(self.actionSettings)
        self.menuMenu.addAction(self.actionHelp)
        self.menuMenu.addAction(self.actionSave_Game)
        self.menuMenu.addAction(self.actionCredits)
        self.menuMenu.addAction(self.actionMain_Menu)
        self.menuMenu.addAction(self.actionQuit)
        self.menubar.addAction(self.menuMenu.menuAction())
        

        self.retranslateUi(MainWindow)
        self.stackedWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        #These are the slots and signals to connect buttons to other functions
        self.location = 0
        QtCore.QObject.connect(self.actionQuit, QtCore.SIGNAL("triggered()"), MainWindow.close)
        QtCore.QObject.connect(self.quitButton, QtCore.SIGNAL("released()"), MainWindow.close)
        QtCore.QObject.connect(self.settingsButton, QtCore.SIGNAL("released()"), self.setSettings)
        QtCore.QObject.connect(self.actionSettings, QtCore.SIGNAL("triggered()"), self.setSettings)
        QtCore.QObject.connect(self.loadButton, QtCore.SIGNAL("released()"), self.load_file_dialog)
        QtCore.QObject.connect(self.actionSave_Game, QtCore.SIGNAL("triggered()"),self.save_file_dialog)
        QtCore.QObject.connect(self.doneButton, QtCore.SIGNAL("released()"), self.goBack)
        QtCore.QObject.connect(self.startButton, QtCore.SIGNAL("released()"), self.newGame)
        QtCore.QObject.connect(self.actionMain_Menu, QtCore.SIGNAL("triggered()"), self.setMain)
        QtCore.QObject.connect(self.actionHelp, QtCore.SIGNAL("triggered()"), self.setInstructions)
        QtCore.QObject.connect(self.instrButton, QtCore.SIGNAL("released()"), self.setInstructions)
        QtCore.QObject.connect(self.doneButton2, QtCore.SIGNAL("released()"), self.goBack)
        QtCore.QObject.connect(self.doneButton3, QtCore.SIGNAL("released()"), self.goBack)
        QtCore.QObject.connect(self.actionCredits, QtCore.SIGNAL("triggered()"), self.setCredits)
        self.latLongCheck.stateChanged.connect(self.latLong)
        self.colorCheck.stateChanged.connect(self.colorize)
        self.legendCheck.stateChanged.connect(self.legend)
        QtCore.QObject.connect(self.searchButton, QtCore.SIGNAL("released()"), self.doSearch)
        QtCore.QObject.connect(self.nextButton, QtCore.SIGNAL("released()"), self.storyButton)
        self.volumeSlider.sliderMoved.connect(self.setVol)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
示例#57
0
    def __init__(self, app, radarwidget):
        super(MainWindow, self).__init__()
        self.app = app
        uic.loadUi("./data/graphics/mainwindow.ui", self)

        # list of buttons to connect to, give icons, and tooltips
        #           the button         the icon      the tooltip    the callback
        buttons = { self.zoomin  :    ['zoomin.svg', 'Zoom in', self.buttonClicked],
                    self.zoomout :    ['zoomout.svg', 'Zoom out', self.buttonClicked],
                    self.panleft :    ['panleft.svg', 'Pan left', self.buttonClicked],
                    self.panright :   ['panright.svg', 'Pan right', self.buttonClicked],
                    self.panup :      ['panup.svg', 'Pan up', self.buttonClicked],
                    self.pandown :    ['pandown.svg', 'Pan down', self.buttonClicked],
                    self.ic :         ['stop.svg', 'Initial condition', self.buttonClicked],
                    self.op :         ['play.svg', 'Operate', self.buttonClicked],
                    self.hold :       ['pause.svg', 'Hold', self.buttonClicked],
                    self.fast :       ['fwd.svg', 'Enable fast-time', self.buttonClicked],
                    self.fast10 :     ['ffwd.svg', 'Fast-forward 10 seconds', self.buttonClicked],
                    self.sameic :     ['frwd.svg', 'Restart same IC', self.buttonClicked],
                    self.showac :     ['AC.svg', 'Show/hide aircraft', self.buttonClicked],
                    self.showpz :     ['PZ.svg', 'Show/hide PZ', self.buttonClicked],
                    self.showapt :    ['apt.svg', 'Show/hide airports', self.buttonClicked],
                    self.showwpt :    ['wpt.svg', 'Show/hide waypoints', self.buttonClicked],
                    self.showlabels : ['lbl.svg', 'Show/hide text labels', self.buttonClicked],
                    self.showmap :    ['geo.svg', 'Show/hide satellite image', self.buttonClicked]}

        for b in buttons.iteritems():
            # Set icon
            if not b[1][0] is None:
                b[0].setIcon(QIcon('data/graphics/icons/' + b[1][0]))
            # Set tooltip
            if not b[1][1] is None:
                b[0].setToolTip(b[1][1])
            # Connect clicked signal
            b[0].clicked.connect(b[1][2])

        self.menubar = QMenuBar(self)

        # File menu
        self.fileMenu = self.menubar.addMenu('&File')
        self.open_action = self.fileMenu.addAction('&Open')
        self.open_action.triggered.connect(self.app.show_file_dialog)
        self.save_action = self.fileMenu.addAction('&Save')

        # View Menu
        self.viewMenu = self.menubar.addMenu('&View')
        self.resetview_action = self.viewMenu.addAction('&Reset view')
        self.fullscreen_action = self.viewMenu.addAction('Fullscreen')

        # Analysis and metrics menu
        self.analysisMenu = self.menubar.addMenu('&Analysis')
        self.SD_action = self.analysisMenu.addAction('Static Density')
        self.DD_action = self.analysisMenu.addAction('Dynamic Density')
        self.SSD_action = self.analysisMenu.addAction('SSD Metric')
        self.lyu_action = self.analysisMenu.addAction('Lyapunov analysis')

        # Connections menu
        self.connectionsMenu = self.menubar.addMenu('Connections')
        self.connectionsMenu.addAction('Connect to ADS-B server')
        self.connectionsMenu.addAction('Enable output to UDP')

        self.setMenuBar(self.menubar)

        self.radarwidget = radarwidget
        radarwidget.setParent(self.centralwidget)
        self.verticalLayout.insertWidget(0, radarwidget, 1)
示例#58
0
class MainWindow(QMainWindow):
    """
    class MainWindow for the gui
    """

    def __init__(self, config, parent=None):
        """
        Constructor for class MainWindow
        :rtype : object
        :param parent: 
        @param config: iHike configuration
        """
        QMainWindow.__init__(self)
        self.config = config
        self.setGeometry(
            self.config.settings['app_x'],
            self.config.settings['app_y'],
            self.config.settings['app_w'],
            self.config.settings['app_h']
        )
        self.setWindowTitle(
            self.config.settings['appname'] +
            ' - Version: ' +
            self.config.settings['appversion']
        )
        globalFont = QFont(
            self.config.settings['fontfamily'],
            self.config.settings['pointsize']
        )
        self.statusbar = self.statusBar()
        self.center()

        self.exit = QAction('Quit iHike', self)
        self.menuLoadFile = QAction('Load File...', self)

        self.menubar = QMenuBar(None)
        self.file = self.menubar.addMenu('&File')
        self.file.addAction(self.exit)
        self.file.addAction(self.menuLoadFile)
        self.setMenuBar(self.menubar)

        self.save = QAction(QIcon('rsc/icons/fileSave.png'),
            'Save current page', self)
        self.save.setShortcut('Ctrl+S')
        self.save.setDisabled(True)
        self.search = QAction(QIcon('rsc/icons/magfit.png'), 'Search for',
            self)

        self.toolbar = self.addToolBar('Toolbar')
        self.toolbar.addAction(self.save)
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.search)
        self.toolbar.setMaximumHeight(24)

        self.trackListView = TrackListView()
        self.trackListView.setAllowedAreas(Qt.TopDockWidgetArea |
                                           Qt.BottomDockWidgetArea)
        self.addDockWidget(Qt.TopDockWidgetArea, self.trackListView)
        detailView = DetailView()
        detailView.setAllowedAreas(
            Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
        self.addDockWidget(Qt.RightDockWidgetArea, detailView)

        self.mainWidget = QWidget(self)
        # self.mainWidget.setLayout(self.gridLayout)
        self.setCentralWidget(self.mainWidget)

    def center(self):
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((screen.width() - size.width()) / 2,
            (screen.height() - size.height()) / 2)