Ejemplo n.º 1
0
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowTitle("BMI Rechner")
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.bmi_value.hide()
        self.ui.warning.hide()
        self.ui.button.clicked.connect(self.bmi_button_calculate)

    def bmi_button_calculate(self):
        self.ui.warning.hide()
        height = float(self.ui.height.value())
        weight = int(self.ui.weight.value())

        if height != 0 or weight != 0:
            bmi_calc = round(weight / (height**2), 2)
            self.ui.bmi_value.show()
            self.ui.bmi_value.setText(str(bmi_calc))
            return
        else:
            self.ui.warning.setText(
                "Deine Größe oder dein Gewicht dürfen nicht 0 sein!")
            self.ui.warning.show()
            return
Ejemplo n.º 2
0
    def __init__(self, parent=None):
        """Initializes"""
        QtGui.QMainWindow.__init__(self, parent)                

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.display1 = None
        self.display2 = None
        self.no_of_connected_dev = 0
        self.__assign_displays()
        self.generate_dynamic_items()
        self.values = []
        self.array_value = 0.01
        for i in xrange(0, 100):
            self.values.append(self.array_value)
            self.array_value += 0.01
        self.connect_handlers()
        self.setup_widgets()

        # assign hotkeys shortcuts
        self.connect(QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_Period), self),
         QtCore.SIGNAL('activated()'), self.increase_value_pbr)

        self.connect(QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_Comma), self),
         QtCore.SIGNAL('activated()'), self.decrease_value_pbr)
Ejemplo n.º 3
0
    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        # init jupyter kernel
        self.init_jupyter_kernel(self.ui.jupyterConsole)
        app = QApplication.instance()
        app.aboutToQuit.connect(self.shutdown_jupyter_kernel)
        self.ui.jupyterConsole.kernel_manager.kernel.shell.push({
            "mainwindow": self,
        })
        # graphics view
        self.sceneOrigin = ArrayImage(self.ui.graphicsViewOrigin)
        self.scene = ArrayImage(self.ui.graphicsView)
        self.ui.graphicsViewOrigin.setScene(self.sceneOrigin)
        self.ui.graphicsView.setScene(self.scene)

        self.wheelBind = BindWheelEvent(
            self.ui.graphicsViewOrigin,
            self.ui.graphicsView,
        )
        self.wheelBind.bind()

        self.slider = SliderDialog(self)
        self.slider.valueChanged.connect(self.slider_valueChanged)
Ejemplo n.º 4
0
class XonStatForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.keypath = os.path.expanduser('~/.xonotic/key_0.d0si')
        
        # Signals
        self.ui.btnImport.clicked.connect(self.file_import)
        self.ui.btnExport.clicked.connect(self.file_export)
        
        # Old style signals
        # QtCore.QObject.connect(self.ui.btnImport, QtCore.SIGNAL("clicked()"), self.file_import)
        # QtCore.QObject.connect(self.ui.btnExport, QtCore.SIGNAL("clicked()"), self.file_export)
        
    def file_import(self):
        sourcepath = self.ui.lineImport.text()
        
        with open(sourcepath, 'rb') as sourcefile:
            cache = sourcefile.read()
        with open(self.keypath, 'wb') as keyfile:
            keyfile.write(cache)

    def file_export(self):
        descpath = self.ui.lineExport.text()
        
        with open(self.keypath, 'rb') as keyfile:
            cache = keyfile.read()
        with open(descpath, 'wb') as descfile:
            descfile.write(cache)
Ejemplo n.º 5
0
class MainWindow(QMainWindow):
	def __init__(self):
		# Load window
		super(MainWindow, self).__init__()
		self.ui = Ui_MainWindow()
		self.ui.setupUi(self)
		self.load_tab(0)

		# TabView slot
		self.ui.tabWidget.currentChanged.connect(self.load_tab)

		# Menu slots
		self.ui.actionExit.triggered.connect(sys.exit)
		self.ui.actionOptions.triggered.connect(self.optionsTriggered)

	def load_tab(self, index):
		module_name = self.ui.tabWidget.tabText(index)

		if module_name == 'Themes':
			if not hasattr(self, 'themesTab'):
				self.themesTab = themes.ThemesWindow(self.ui)
				self.themesTab.load_window()
		elif module_name == 'Presets':
			if not hasattr(self, 'presetsTab'):
				self.presetsTab = presets.PresetsWindow(self.ui)
				self.presetsTab.load_window()

	def optionsTriggered(self):
		from configuration import ConfigurationWindow

		self.configWindow = ConfigurationWindow()
		self.configWindow.show()
Ejemplo n.º 6
0
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowTitle("Studierendenverwaltung")

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.result.hide()
        self.ui.result_label.hide()

        # bmi = [Körpergewicht in kg] / [Körpergröße in m] ^ 2

        self.ui.calculate.clicked.connect(self.calculate_bmi)

    def calculate_bmi(self):
        height = self.ui.height.value()
        weight = self.ui.weigth.value()

        if height != 0:
            self.ui.result.show()
            self.ui.result_label.show()

            bmi = round(weight / (height**2), 2)
            self.ui.result.setText(str(bmi))
        else:
            self.ui.result.setText("")
Ejemplo n.º 7
0
    def __init__(self, parent=None):
        """Initializes"""
        QtGui.QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.display1 = None
        self.display2 = None
        self.temperature = 'Default'
        self.no_of_connected_dev = 0
        self.__assign_displays()
        self.setup_default_directory()
        self.generate_dynamic_items()
        self.default_config = '/home/{}/.config/' \
            'brightness_controller/settings'      \
            .format(getpass.getuser())
        self.values = []
        self.array_value = 0.01
        for i in xrange(0, 100):
            self.values.append(self.array_value)
            self.array_value += 0.01
        self.connect_handlers()
        self.setup_widgets()
        if path.exists(self.default_config):
            self.load_settings(self.default_config)

        self.setup_tray(parent)
Ejemplo n.º 8
0
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowTitle("Studierendenverwaltung")

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.pushButton.clicked.connect(self.search)

    def search(self):
        r = sr.Recognizer()
        with sr.Microphone() as source:
            #text = "what you want to search?"
            #var = gTTS(text=text, lang="en-AU", slow=False)
            #var.save("search.mp3")

            #playsound(".\s.wav")
            audio = r.listen(source)
            play = r.recognize_google(audio, language='ar')
            pywhatkit.playonyt(play)

            text = "completed"
            var = gTTS(text=text, lang="en")
            var.save("search1.mp3")
            playsound(".\search1.mp3")

            #os.remove("search.mp3")
            os.remove("search1.mp3")
Ejemplo n.º 9
0
class MainWindow(QMainWindow):
    
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.mainwindow = Ui_MainWindow()
        self.mainwindow.setupUi(self)

        it1 = Category(title='it1')
        it2 = Page('it2', 'This is it2\'s content')
        it3 = Page('it3', 'This is it3\'s content')
        it1.setChild(it1.rowCount(), it2)
        it1.setChild(it1.rowCount(), it3)
        model = QStandardItemModel()
        model.appendRow(it1)
        tv = self.mainwindow.treeView
        tv.setModel(model)
        tv.setRootIsDecorated(True)
        tv.setSelectionMode(QAbstractItemView.SingleSelection)
        tv.setSelectionBehavior(QAbstractItemView.SelectItems)
        tv.clicked.connect(self.printData)

        
    def printData(self):
        it = self.mainwindow.treeView.model().itemFromIndex(self.mainwindow.treeView.currentIndex())
        print('Item: {0}'.format(type(it)))
        self.mainwindow.textEdit.setText(it.content)
Ejemplo n.º 10
0
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("My window name")

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.read.clicked.connect(self.onButtonClick)

    def onButtonClick(self):
        database = DatabaseConnector(
        )  # sqlite3.connect('E:\\Programming\\betaDB.db')
        database.getNewValues()

        temperature = round(database.latestTemperature, 1)
        temperature = str(temperature) + "°C"

        pressure = round(database.latestPressure, 0)
        pressure = str(pressure) + "hPa"

        humidity = round(database.latestHumidity, 1)
        humidity = str(humidity) + "%"

        self.ui.temperature_text.setText(temperature)
        self.ui.humidity_text.setText(humidity)
        self.ui.pressure_text.setText(pressure)
Ejemplo n.º 11
0
 def __init__(self):
     QMainWindow.__init__(self)
     Ui_MainWindow.__init__(self)
     self.setupUi(self)
     self.init_login_win()
     # self.init_order_dialog()
     self.init_info()
Ejemplo n.º 12
0
    def __init__(self, parent = None):
        super().__init__(parent)

        self.setWindowTitle("GUI-Base")

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
Ejemplo n.º 13
0
    def initUI(self):
        """Create the window and connect the Qt signals to slots"""
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # Connect signals to slots.
        self.ui.searchfield.textChanged.connect(self.searchlist)
        self.ui.memberlistwidget.currentRowChanged.connect(
            lambda: self.showMemberInfo())
        self.ui.memberlistwidget.itemActivated.connect(self.editMember)
        self.ui.searchfield.returnPressed.connect(
            self.ui.memberlistwidget.setFocus)
        self.ui.actionNewMember.triggered.connect(self.createMember)
        self.ui.actionRemoveMember.triggered.connect(self.removeMember)
        self.ui.actionEditMember.triggered.connect(self.editMember)
        self.ui.actionMakeBackup.triggered.connect(self.makeBackup)
        self.ui.actionRestoreFromBackup.triggered.connect(
            self.restoreFromBackup)

        self.ui.memberlistwidget.addAction(self.ui.actionEditMember)
        self.ui.memberlistwidget.addAction(self.ui.actionRemoveMember)
        self.ui.memberlistwidget.setContextMenuPolicy(Qt.ActionsContextMenu)

        self.populateMemberList()

        self.setWindowTitle('SvakSvat')
Ejemplo n.º 14
0
class Control(QtWidgets.QMainWindow):
    """Create the UI, based on PyQt5.
    The UI elements are defined in "mainwindow.py" and resource file "resources_rc.py", created in QT Designer.

    To update "mainwindow.py":
        Run "pyuic5.exe --from-imports mainwindow.ui -o mainwindow.py"

    To update "resources_rc.py":
        Run "pyrcc5.exe resources.qrc -o resource_rc.py"

    Note: Never modify "mainwindow.py" or "resource_rc.py" manually.
    """

    def __init__(self):
        super().__init__()

        # Create the main window
        self.ui = Ui_MainWindow()
         # Set upp the UI
        self.ui.setupUi(self)
       # self.show()
        # Get a list of available serial ports (e.g. "COM1" in Windows)
        self.serial_ports = connection.get_serial_ports()
        self.ui.comboBox.addItems(self.serial_ports)
        self.setup_ui_logic()
        # Populate the "COM port" combo box with available serial ports
        #self.ui.comboBoxComPorts.addItems(self.serial_ports)


    def setup_ui_logic(self):
        """Define QT signal and slot connections and initializes UI values."""
        # Connect "Restart Communication" button
        self.ui.quitbutton.clicked.connect(QApplication.instance().quit)
Ejemplo n.º 15
0
class MainWindow(QMainWindow):
    def __init__(self):
        # Load window
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.load_tab(0)

        # TabView slot
        self.ui.tabWidget.currentChanged.connect(self.load_tab)

        # Menu slots
        self.ui.actionExit.triggered.connect(sys.exit)
        self.ui.actionOptions.triggered.connect(self.optionsTriggered)

    def load_tab(self, index):
        module_name = self.ui.tabWidget.tabText(index)

        if module_name == "Themes":
            if not hasattr(self, "themesTab"):
                self.themesTab = themes.ThemesWindow(self.ui)
                self.themesTab.load_window()
        elif module_name == "Presets":
            if not hasattr(self, "presetsTab"):
                self.presetsTab = presets.PresetsWindow(self.ui)
                self.presetsTab.load_window()

    def optionsTriggered(self):
        from configuration import ConfigurationWindow

        self.configWindow = ConfigurationWindow()
        self.configWindow.show()
    def __init__(self, parent=None):
        super().__init__(parent)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.status.text()
        self.setWindowTitle("TEZOS password finder")
        self.ui.StartButton.clicked.connect(self.start_Button_click)
Ejemplo n.º 17
0
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.treeModel = ASTTreeModel(self)
        self.ui.treeView.setModel(self.treeModel)
Ejemplo n.º 18
0
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("My window name")

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.read.clicked.connect(self.onButtonClick)
Ejemplo n.º 19
0
 def __init__(self, parent=None):
     super().__init__(parent)
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     # self.setWindowState(Qt.WindowMaximized)
     self.init_events()
     self.hub = DeviceHub()
     self.hub.seeked.connect(self.on_hub_seek)
Ejemplo n.º 20
0
    def __init__(self):
        super(PySub, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.address = IPAddress()

        self.run()
Ejemplo n.º 21
0
    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ctx = gpgme.Context()

        self.keylistModel = GPGKeyListModel(self.ctx, self.ui.treeViewKeyList)
        self.ui.treeViewKeyList.setModel(self.keylistModel)
Ejemplo n.º 22
0
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowTitle("Studierendenverwaltung")

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.pushButton.clicked.connect(self.search)
Ejemplo n.º 23
0
 def __init__(self, parent=None):
     QtGui.QWidget.__init__(self, parent)
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.keypath = os.path.expanduser('~/.xonotic/key_0.d0si')
     
     # Signals
     self.ui.btnImport.clicked.connect(self.file_import)
     self.ui.btnExport.clicked.connect(self.file_export)
Ejemplo n.º 24
0
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowTitle("BMI Rechner")
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.bmi_value.hide()
        self.ui.warning.hide()
        self.ui.button.clicked.connect(self.bmi_button_calculate)
Ejemplo n.º 25
0
 def __init__(self, parent=None):
     super().__init__(parent=parent)
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.ui.sale_Btn.clicked.connect(self.on_sale_btn_clicked)
     self.ui.show_stock_Btn.clicked.connect(self.show_stock_btn_clicked)
     self.ui.purchase_Btn.clicked.connect(self.on_purchase_btn_clicked)
     self.ui.return_Btn.clicked.connect(self.on_return_btn_clicked)
     self.ui.statistics_Btn.clicked.connect(self.on_statistics_btn_clicked)
Ejemplo n.º 26
0
 def __init__(self, parent=None):
     super(MainWindow, self).__init__(parent)
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.debs = {}
     self.parse_packages()
     self.list_components()
     self.list_installed_components()
     self.update_table()
Ejemplo n.º 27
0
    def __init__(self):
        super().__init__()

        # Set up the user interface from Designer
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # Connect up the buttons
        self.ui.btn_open.clicked.connect(self.status_msg)
        self.ui.btn_calc.clicked.connect(self.status_msg)
Ejemplo n.º 28
0
    def __init__(self):
        super(Window, self).__init__()
        self.ui = Ui_MainWindow()
        self.aboutui = AboutWindow()
        self.ui.setupUi(self)
        self.initUI()

        self.ui.scene = GraphicsScene()
        self.ui.graphicsView.setScene(self.ui.scene)
        print(dir(self.ui.scene))
Ejemplo n.º 29
0
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowTitle("Studierendenverwaltung")

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.readCsvFile("./Python/Python Bootcamp/QT/CSV_Import/students.csv")
        self.ui.newEntryButton.clicked.connect(self.onNewEntry)
        self.ui.saveButton.clicked.connect(self.onSave)
        self.ui.actionSave.triggered.connect(self.onSave)

    def onSave(self):
        with open('./Python/Python Bootcamp/QT/CSV_Import/students.csv',
                  'w',
                  newline='',
                  encoding="utf-8") as file:
            writer = csv.writer(file, delimiter=",", quotechar='"')

            rows = self.ui.studentsTable.rowCount()
            for i in range(0, rows):
                rowContent = [
                    self.ui.studentsTable.item(i, 0).text(),
                    self.ui.studentsTable.item(i, 1).text(),
                    self.ui.studentsTable.item(i, 2).text()
                ]
                writer.writerow(rowContent)

    def onNewEntry(self):
        row = self.ui.studentsTable.rowCount()
        self.ui.studentsTable.insertRow(row)

        self.ui.studentsTable.setItem(row, 0, QtWidgets.QTableWidgetItem(""))
        self.ui.studentsTable.setItem(row, 1, QtWidgets.QTableWidgetItem(""))
        self.ui.studentsTable.setItem(row, 2, QtWidgets.QTableWidgetItem(""))

        cell = self.ui.studentsTable.item(row, 0)
        self.ui.studentsTable.editItem(cell)

    def readCsvFile(self, filename):
        self.ui.studentsTable.setRowCount(0)
        with open(filename, "r", newline='', encoding="utf-8") as file:
            reader = csv.reader(file, delimiter=',', quotechar='"')
            for line in reader:
                row = self.ui.studentsTable.rowCount()
                self.ui.studentsTable.insertRow(row)

                self.ui.studentsTable.setItem(
                    row, 0, QtWidgets.QTableWidgetItem(line[0]))
                self.ui.studentsTable.setItem(
                    row, 1, QtWidgets.QTableWidgetItem(line[1]))
                self.ui.studentsTable.setItem(
                    row, 2, QtWidgets.QTableWidgetItem(line[2]))
Ejemplo n.º 30
0
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowTitle("Rezepte")

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.readCsvFile("rezepte.csv")
        self.ui.newEntryButton.clicked.connect(self.onNewEntry)
        self.ui.saveButton.clicked.connect(self.onSave)
Ejemplo n.º 31
0
    def __init__(self, parent=None):
        super().__init__(parent)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # Sets the system date as the reference and request date value.
        self.ui.dateEdit_startDate.setDate(QtCore.QDate.currentDate())
        self.ui.dateEdit_mesDate.setDate((QtCore.QDate.currentDate()))

        # Button activate
        self.ui.button_calculate.clicked.connect(self.on_button_click)
Ejemplo n.º 32
0
	def __init__(self,parent = None):
		super().__init__(parent)
		
		self.setWindowTitle("Studentenverwaltung")
	
		self.ui = Ui_MainWindow()
		self.ui.setupUi(self)
		
		self.readCsvFile("students.csv")
		self.ui.newEntryButton.clicked.connect(self.onNewEntry)
		self.ui.saveButton.clicked.connect(self.onSave)
		self.ui.actionSpeichern.triggered.connect(self.onSave)
Ejemplo n.º 33
0
 def __init__(self, data, classifier, parent=None):
     super(MainWindow, self).__init__(parent)
     self.ui =  Ui_MainWindow()
     self.ui.setupUi(self)
     self.set_data(data)
     self.classifier = classifier
     self.ui.cacl_button.clicked.connect(self.do_calc)
Ejemplo n.º 34
0
    def setupUi(self, window):
        Ui_MainWindow.setupUi(self, window)
        header = QtGui.QHeaderView(QtCore.Qt.Horizontal)
        header.setResizeMode(QtGui.QHeaderView.Stretch)
        self.episodeTable.setHorizontalHeader(header)
        self.fetchFeedButton.clicked.connect(self._load_feed)
        self.downloadButton.clicked.connect(self._download)
        self.deleteButton.clicked.connect(self._delete_row)
        self.saveQueueButton.clicked.connect(self._save_queue)
        self.settings = SettingsDialog()
        self.settingsButton.clicked.connect(self.settings.show)

        QtGui.qApp.queuehandler.finishedLoading.connect(self._set_model)
        QtGui.qApp.queuehandler.load()

        QtGui.qApp.downloader.fileDownloaded.connect(self._downloaded)
        QtGui.qApp.downloader.notFound.connect(self._notfound)
Ejemplo n.º 35
0
 def __init__(self, parent=None):
     super(MainWindow, self).__init__(parent)
     self.mainwindow = Ui_MainWindow()
     self.mainwindow.setupUi(self)
     self.current_list = session.query(List).filter_by(name=u'Default').one()
     self.load_data()
     self.editor = Editor(self)
     self.editor.hide()
     logging.basicConfig(level=logging.DEBUG)
Ejemplo n.º 36
0
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)

        self.ui = Ui_MainWindow()

        self.ui.setupUi(self)

        self.createObjects()
        self.setup()

        self.world.add_polygn('Teste', [(30,30), (50,30), (50,50), (30,50)])
        self.ui.edWindowFactor.setText('5')
Ejemplo n.º 37
0
    def __init__(self):
        # Load window
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.load_tab(0)

        # TabView slot
        self.ui.tabWidget.currentChanged.connect(self.load_tab)

        # Menu slots
        self.ui.actionExit.triggered.connect(sys.exit)
        self.ui.actionOptions.triggered.connect(self.optionsTriggered)
Ejemplo n.º 38
0
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowIcon(QIcon('icon.png'))

        self.ui.actionLoad_Lyrics.triggered.connect(self._load_lyrics_thread)
        self.cb_backends()

        # about widget
        self.aboutUi = About()
        self.ui.actionAbout.triggered.connect(self._about)
        self.aboutUi.setWindowModality(Qt.WindowModal)

        self._load_lyrics_thread()
Ejemplo n.º 39
0
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.mainwindow = Ui_MainWindow()
        self.mainwindow.setupUi(self)

        it1 = Category(title='it1')
        it2 = Page('it2', 'This is it2\'s content')
        it3 = Page('it3', 'This is it3\'s content')
        it1.setChild(it1.rowCount(), it2)
        it1.setChild(it1.rowCount(), it3)
        model = QStandardItemModel()
        model.appendRow(it1)
        tv = self.mainwindow.treeView
        tv.setModel(model)
        tv.setRootIsDecorated(True)
        tv.setSelectionMode(QAbstractItemView.SingleSelection)
        tv.setSelectionBehavior(QAbstractItemView.SelectItems)
        tv.clicked.connect(self.printData)
Ejemplo n.º 40
0
    def __init__(self, parent=None):
        """Initializes"""
        QtGui.QMainWindow.__init__(self, parent)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.display1 = None
        self.display2 = None
        self.no_of_connected_dev = 0
        self.__assign_displays()

        self.values = []
        self.array_value = 0.01
        for i in xrange(0, 100):
            self.values.append(self.array_value)
            self.array_value += 0.01

        self.connect_handlers()

        self.setup_widgets()
Ejemplo n.º 41
0
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setFixedSize(648, 635)
        self.setWindowTitle("ChessQt")

        self.style = ["background: #333", "background: #fff"]

        self.ui.actionNowa_gra.triggered.connect(self.newGame)

        self.next_move = False

        for i in xrange(8):
            for j in xrange(8):
                m_label = MyLabel(i, j, self.style[(i + j) % 2])
                labels[(i, j)] = m_label
                self.ui.gridLayout_2.addWidget(m_label, i, j)
                m_label.clicked.connect(self.slotClicked)
        self.newGame()
Ejemplo n.º 42
0
    def __init__(self, app):
        QMainWindow.__init__(self)
        self.app = app
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self._exit = False
        self.ui.action_Exit.triggered.connect(self.exit)
        self.ui.actionAbout_Qt.triggered.connect(app.aboutQt)
        self.setWindowIcon(QIcon(':/icons/logo32'))
        self.listener = None
        self.tray = None
        self.pusher = None
        self._connected = False

        self.settings_dlg = SettingsDlg(self)
        self.settings_dlg.saved.connect(self.reconnect)

        self.tray = PushbulletTray(self)
        self.connect_actions()
        self.connect_pushbullet()

        self.tray.show()
Ejemplo n.º 43
0
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.targetActions = [
            self.ui.actionMarkdown,
            self.ui.actionKAG3,
            self.ui.actionNScripter,
        ]

        # constants
        self.HESTIA_ARCHIVE_FILTER = self.tr("Hestia Archive(*.hax)")

        width = self.ui.splitterScenario.width()
        w = width // 3
        m = width % 3
        self.ui.splitterScenario.setSizes([w, w*2+m])
        self.ui.splitterScript.setSizes([w, w*2+m])

        self.highlighter = ScenarioHighlighter(self.ui.textEditScenario.document())

        self.scenarioRestore.connect(self.scenarioRestored)

        self.errorMessageDialog = ErrorMessageDialog(self)

        self.previewHasReady = False
        self.glWindow = GLWindow(self)
        self.glWindow.setViewSize(1280, 720)
        self.glWindow.ready.connect(self.previewWindow_ready)
        self.glWindow.next.connect(self.previewWindow_toNext)
        self.glWindow.prev.connect(self.previewWindow_toPrev)

        self.doubleBufferObject = None

        self.initialize()

        QMetaObject.invokeMethod(self.glWindow, "show")
Ejemplo n.º 44
0
    def initUI(self):
        """Create the window and connect the Qt signals to slots"""
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # Connect signals to slots.
        self.ui.searchfield.textChanged.connect(self.searchlist)
        self.ui.memberlistwidget.currentRowChanged.connect(lambda:
                self.showMemberInfo())
        self.ui.memberlistwidget.itemActivated.connect(self.editMember)
        self.ui.searchfield.returnPressed.connect(self.ui.memberlistwidget.setFocus)
        self.ui.actionNewMember.triggered.connect(self.createMember)
        self.ui.actionRemoveMember.triggered.connect(self.removeMember)
        self.ui.actionEditMember.triggered.connect(self.editMember)
        self.ui.actionMakeBackup.triggered.connect(self.makeBackup)
        self.ui.actionRestoreFromBackup.triggered.connect(self.restoreFromBackup)

        self.ui.memberlistwidget.addAction(self.ui.actionEditMember)
        self.ui.memberlistwidget.addAction(self.ui.actionRemoveMember)
        self.ui.memberlistwidget.setContextMenuPolicy(Qt.ActionsContextMenu)

        self.populateMemberList()

        self.setWindowTitle('SvakSvat')
Ejemplo n.º 45
0
class SvakSvat(QMainWindow):
    """Member Registry Application."""
    def __init__(self, session):
        """Create the window.

        session -- Sqlalchemy scoped_session.

        """
        super().__init__()
        self.session = session  # Assuming scoped_session

        self.initUI()

        try:
            self.ldapmanager = useraccounts.LDAPAccountManager()
        except Exception as e:
            print(e)
            print("Deaktiverar LDAP-integration.")
            self.ldapmanager = None

        self.setStatusMessage("Redo!", 3000)

    def initUI(self):
        """Create the window and connect the Qt signals to slots"""
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # Connect signals to slots.
        self.ui.searchfield.textChanged.connect(self.searchlist)
        self.ui.memberlistwidget.currentRowChanged.connect(lambda:
                self.showMemberInfo())
        self.ui.memberlistwidget.itemActivated.connect(self.editMember)
        self.ui.searchfield.returnPressed.connect(self.ui.memberlistwidget.setFocus)
        self.ui.actionNewMember.triggered.connect(self.createMember)
        self.ui.actionRemoveMember.triggered.connect(self.removeMember)
        self.ui.actionEditMember.triggered.connect(self.editMember)
        self.ui.actionMakeBackup.triggered.connect(self.makeBackup)
        self.ui.actionRestoreFromBackup.triggered.connect(self.restoreFromBackup)

        self.ui.memberlistwidget.addAction(self.ui.actionEditMember)
        self.ui.memberlistwidget.addAction(self.ui.actionRemoveMember)
        self.ui.memberlistwidget.setContextMenuPolicy(Qt.ActionsContextMenu)

        self.populateMemberList()

        self.setWindowTitle('SvakSvat')

    def makeBackup(self):
        filename = QFileDialog.getSaveFileName(self,
                'Välj namn för säkerhetskopia', '.')[0]
        with open(filename, 'wb') as f:
            pickler = pickle.Pickler(f)
            pickler.dump(backup_everything(self.session))

    def restoreFromBackup(self):
        filename = QFileDialog.getOpenFileName(self,
                                               'Öppna säkerthetskopia',
                                               '.')
        with open(filename, 'rb') as f:
            data = pickle.Unpickler(f).load()
            if restore_everything(self.session, data):
                self.session.commit()
                self.populateMemberList()

    def createMember(self):
        newmemberdialog = NewMemberDialog(self.session, self)
        newmemberdialog.exec()

    def removeMember(self):
        """Remove selected member."""
        member = self.currentMember()
        wholename = member.getWholeName()

        confirm = "Är du säker att du vill ta bort användaren %s?" % wholename
        reply = QMessageBox.question(self, 'Bekräfta',
                                           confirm, QMessageBox.Yes,
                                           QMessageBox.No)

        if reply == QMessageBox.Yes:
            self.session.delete(member)
            self.session.commit()
            self.populateMemberList()
            self.setStatusMessage("Användare %s borttagen!" % wholename)

    def populateMemberList(self, choosemember=None):
        """Fill the memberlist from the database."""
        self.memberlist = self.session.query(Member).order_by(
                Member.surName_fld).all()
        self.ui.searchfield.clear()
        self.searchlist()
        if choosemember:
            memberindex = self.memberlist.index(choosemember)
            self.ui.memberlistwidget.setCurrentRow(memberindex)

    def currentMember(self):
        """Returns the currently selected member."""
        member = self.filteredmemberlist[self.ui.memberlistwidget.currentRow()]
        return member

    def editMember(self):
        """Edit the currently selected member."""
        member = self.currentMember()
        self.membereditwidget = MemberEdit(self.session, member, self,
                self.ldapmanager)
        self.membereditwidget.show()

    def searchlist(self, pattern=''):
        """Perform a filter operation on the memberlist.

        pattern -- The string to match.

        """
        self.filteredmemberlist = [member for member in self.memberlist
                if member.getWholeName().upper().find(pattern.upper()) != -1]
        self.ui.memberlistwidget.clear()
        for member in self.filteredmemberlist:
            self.ui.memberlistwidget.addItem(member.getWholeName())

    def showMemberInfo(self, member=None):
        """Show the member's info in the panel below.

        member -- backend.orm.Member to show.
        """
        if not member:
            member = self.currentMember()
        contactinfo = member.contactinfo
        memberinfo = """Namn: %s %s
Address: %s %s %s %s
Telefon: %s
Mobiltelefon: %s
Email: %s
Användarnamn: %s
""" % (
            member.givenNames_fld,
            member.surName_fld,
            contactinfo.streetAddress_fld,
            contactinfo.postalCode_fld,
            contactinfo.city_fld,
            contactinfo.country_fld,
            contactinfo.phone_fld,
            contactinfo.cellPhone_fld,
            contactinfo.email_fld,
            member.username_fld
            )

        membershipinfo = self.getMembershipInfo(member)
        self.ui.memberinfo.setText(memberinfo + membershipinfo)

    def getMembershipInfo(self, member):
        """Get the current membershipinfo for a member.

        member -- backend.orm.Member

        Used in showMemberInfo"""
        currentposts = [postmembership.post.name_fld for postmembership in
                member.postmemberships if postmembership.isCurrent()]
        currentgroups = [groupmembership.group.name_fld for groupmembership in
                member.groupmemberships if groupmembership.isCurrent()]

        return ("\n".join(["\nPoster:"] + currentposts) +
                "\n".join(["\n\nGrupper:"] + currentgroups))

    def setStatusMessage(self, message, milliseconds=3000):
        """Sets a status message in the MainWindow.

        message -- The status message to set.
        milliseconds -- The lifetime of the message.

        """
        self.ui.statusbar.showMessage(message, milliseconds)
Ejemplo n.º 46
0
class TrabalhoComputacaoGrafica(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)

        self.ui = Ui_MainWindow()

        self.ui.setupUi(self)

        self.createObjects()
        self.setup()

        self.world.add_polygn('Teste', [(30,30), (50,30), (50,50), (30,50)])
        self.ui.edWindowFactor.setText('5')

    def createObjects(self):

        self.viewport = ViewPort()

        self.world = World()

        self.window = Window(self.viewport)
        self.world.add_window(self.window)

        self.world.connect_add_event(self.add_object)

    def setup(self):

        self.ui.gvMain.setScene(self.viewport)

        self.ui.lvObjects.contextMenuEvent = self.lvContextMenuEvent
        self.ui.lvObjects.connect(SIGNAL("itemClicked(QListWidgetItem *)"), self.itemClick)

        self.ui.btWindowUp.clicked.connect(self.window_up)
        self.ui.btWindowDown.clicked.connect(self.window_down)
        self.ui.btWindowRight.clicked.connect(self.window_right)
        self.ui.btWindowLeft.clicked.connect(self.window_left)

        self.ui.btWindowZoomIn.clicked.connect(self.window_zoomin)
        self.ui.btWindowZoomOut.clicked.connect(self.window_zoomout)

        self.viewport.mousePressEvent = self.sceneClick

        self.ui.btTranslaction.clicked.connect(self.translaction)
        self.ui.btStagger.clicked.connect(self.stagger)
        self.ui.btRotate.clicked.connect(self.rotate)

        self.createActions()

    def translaction(self, *args):

        tx = self.ui.edXTranslaction.text().strip()
        ty = self.ui.edYTranslaction.text().strip()

        if not tx or not ty:
            return

        tx = int(tx)
        ty = int(ty)

        selected_list = self.ui.lvObjects.selectedItems()
        if not selected_list:
            return

        obj = selected_list[0].obj

        self.world.translate_object(obj, (tx, ty))

    def stagger(self, *args):

        sx = self.ui.edXStagger.text().strip()
        sy = self.ui.edYStagger.text().strip()

        if not sx or not sy:
            return

        sx = int(sx)
        sy = int(sy)

        selected_list = self.ui.lvObjects.selectedItems()
        if not selected_list:
            return

        obj = selected_list[0].obj

        self.world.stagge_object(obj, (sx, sy))

    def rotate(self, *args):

        degree = self.ui.edRotationDegree.text().strip()

        if not degree:
            return

        degree = int(degree)

        selected_list = self.ui.lvObjects.selectedItems()
        if not selected_list:
            return

        obj = selected_list[0].obj

        if self.ui.rbRotationCenterWorld.isChecked():
            x = (self.viewport.xmax-self.viewport.xmin)/2.0
            y = (self.viewport.ymax-self.viewport.ymin)/2.0
            self.world.rotate_object(obj, degree, x, y)
        elif self.ui.rbRotationCenterObject.isChecked():
            self.world.rotate_object(obj, degree)
        else:
            x = int(self.ui.edXRotationSpecific.text())
            y = int(self.ui.edYRotationSpecific.text())
            self.world.rotate_object(obj, degree, x, y)


    def itemClick(self, item):
        self.world.select_object(item.obj)

    def sceneClick(self, event):

        pos = event.scenePos()

        obj = self.window.get_object_on_viewport(pos.x(), pos.y())
        if obj:
            self.world.select_object(obj)
            self.select_object_on_list(obj)

    def select_object_on_list(self, obj):

        for i in range(self.ui.lvObjects.count()):
            if self.ui.lvObjects.item(i).obj == obj:
                self.ui.lvObjects.item(i).setSelected(True)

    def window_up(self, *args):

        factor = self.ui.edWindowFactor.text().strip()
        if not factor:
            return
        factor = int(factor)
        self.window.move_up(factor)

    def window_down(self, *args):

        factor = self.ui.edWindowFactor.text().strip()
        if not factor:
            return
        factor = int(factor)
        self.window.move_down(factor)

    def window_right(self, *args):

        factor = self.ui.edWindowFactor.text().strip()
        if not factor:
            return
        factor = int(factor)
        self.window.move_right(factor)

    def window_left(self, *args):

        factor = self.ui.edWindowFactor.text().strip()
        if not factor:
            return
        factor = int(factor)
        self.window.move_left(factor)

    def window_zoomin(self, *args):

        factor = self.ui.edWindowFactor.text().strip()
        if not factor:
            return
        factor = int(factor)
        self.window.zoomin(factor)

    def window_zoomout(self, *args):

        factor = self.ui.edWindowFactor.text().strip()
        if not factor:
            return
        factor = int(factor)
        self.window.zoomout(factor)

    def createActions(self):

        self.NewObjectAct = QtGui.QAction("Novo objeto", self,
                statusTip="Cria um novo objeto",
                triggered=self.newObject)

    def newObject(self):
        obj = TrabalhoComputacaoGraficaObject(self)
        obj.show()

    def lvContextMenuEvent(self, event):
        menu = QtGui.QMenu(self)
        menu.addAction(self.NewObjectAct)
        menu.exec_(event.globalPos())

    def add_object(self, obj):

        self.ui.lvObjects.clear()
        for obj in self.world.obj_list:
            item = ObjectItem(obj)
            self.ui.lvObjects.addItem(item)
Ejemplo n.º 47
0
class MainWindow(QMainWindow, Ui_MainWindow):

    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowIcon(QIcon('icon.png'))

        self.ui.actionLoad_Lyrics.triggered.connect(self._load_lyrics_thread)
        self.cb_backends()

        # about widget
        self.aboutUi = About()
        self.ui.actionAbout.triggered.connect(self._about)
        self.aboutUi.setWindowModality(Qt.WindowModal)

        self._load_lyrics_thread()

    def cb_backends(self):
        self.cb_backends = QComboBox()

        self.cb_backends.addItem('Auto')

        menuLyricSource = QMenu(self.ui.menuEdit)
        menuLyricSource.setTitle('Lyric source')

        self.lyricGroup = QActionGroup(self)

        def addAction(name, checked=False):
            action = QAction(name, self)
            action.setText(name)
            action.setCheckable(True)
            action.setChecked(checked)
            action.setActionGroup(self.lyricGroup)

            return action

        menuLyricSource.addAction(addAction('Auto', True))
        menuLyricSource.addSeparator()
        menuLyricSource.triggered.connect(self._menu_backend_change)

        for backend in Pyrics.get_backends():
            menuLyricSource.addAction(addAction(backend.__name__))
            self.cb_backends.addItem(backend.__name__)

        self.ui.menuEdit.addMenu(menuLyricSource)
        self.ui.toolBar.addWidget(self.cb_backends)

        self.cb_backends.currentIndexChanged.connect(self._cb_backend_change)

    def _load_lyrics_thread(self):
        self.thread = LoadLyricsWorker(self.cb_backends.currentIndex(), self)

        self.thread.trigger.connect(self._load_lyrics)
        self.thread.start()

    def _load_lyrics(self, content):
        self.ui.txLyrics.setText(content)

    def _about(self):
        self.aboutUi.show()

    def _menu_backend_change(self, action):
        index = self.cb_backends.findText(action.text())
        self._update_backend(index)

    def _cb_backend_change(self, item):
        self._update_backend(item)

    def _update_backend(self, index):
        """Keep lyrics source combo in sync with the lyrics source in the menu"""
        if index >= 0:
            self.cb_backends.setCurrentIndex(index)
            name = self.cb_backends.currentText()

            for action in self.lyricGroup.actions():
                action.setChecked(False)
                if action.text() == name:
                    action.setChecked(True)
Ejemplo n.º 48
0
Archivo: gui.py Proyecto: flyser/maamp
	def __init__(self, parent=None):
		QtGui.QWidget.__init__(self, parent)
		self.ui = Ui_MainWindow()
		self.ui.setupUi(self)
		self.ui.lcdcurrent.display("00:00")
		self.ui.lcdtotal.display("00:00")

		self.PORT = False
		self.SHOW = False
		self.songs = []
		self.chosen = 0

		###### WINDOW SETTINGS ######
		try:
			self.setAttribute(QtCore.Qt.WA_Maemo5StackedWindow, True)
			self.setAttribute(QtCore.Qt.WA_Maemo5AutoOrientation, True);
		except:
			pass
		self.setWindowTitle("MaAmp - Offline") # Should show artist name here

		self.connect(QtGui.QApplication.desktop(), QtCore.SIGNAL("resized(int)"), self.orientationChanged );

		### SETUP CUSTOM LABEL, PUSHLABEL ###
		self.ui.cover_art = pushLabel(self)
		self.ui.cover_art.setGeometry(QtCore.QRect(20, 35, 280, 280))
		self.ui.cover_art.setScaledContents(True)
		#self.ui.cover_art.setPixmap(QtGui.QPixmap(current[3]))
		self.ui.cover_art.setPixmap(QtGui.QPixmap(os.path.dirname(os.path.realpath( __file__ ) )+"/empty.png"))
		self.connect(self.ui.cover_art, QtCore.SIGNAL("clicked()"),self.animate)

		### INIT THINGS ###
		self.getconnected()
		self.disablebuttons()

		### ACTIONBUTTONS (MENU) ###
		self.connect(self.ui.actionConfigure, QtCore.SIGNAL("triggered()"),self.configure)
		self.connect(self.ui.actionAbout, QtCore.SIGNAL("triggered()"),self.about)
		self.connect(self.ui.actionFM_Radio, QtCore.SIGNAL('triggered()'), self.fmradio)
		self.connect(self.ui.actionClearRefresh, QtCore.SIGNAL('triggered()'), self.clearrefresh)

		### BUTTONS ###
		self.connect(self.ui.artistsButton, QtCore.SIGNAL("clicked()"),self.listartists)
		#self.connect(self.ui.albumsButton, QtCore.SIGNAL("clicked()"),self.listalbums)

		### PLAYER BUTTONS ###
		self.connect(self.ui.playButton, QtCore.SIGNAL("clicked()"),self.play)
		self.connect(self.ui.stopButton, QtCore.SIGNAL("clicked()"),self.stop)
		self.connect(self.ui.nextButton, QtCore.SIGNAL("clicked()"),self.next)
		self.connect(self.ui.previousButton, QtCore.SIGNAL("clicked()"),self.prev)
		self.connect(self.ui.listWidget, QtCore.SIGNAL("itemClicked(QListWidgetItem*)"), self.itemClicked)

		### INIT ALL ANIMATIONS ###
		self.f_animate = QtCore.QPropertyAnimation(self.ui.frame, "geometry")
		self.f_animate.setDuration(ANIMSPEED)
		self.f2_animate = QtCore.QPropertyAnimation(self.ui.frame_2, "geometry")
		self.f2_animate.setDuration(ANIMSPEED)
		self.l_animate = QtCore.QPropertyAnimation(self.ui.listWidget, "geometry")
		self.l_animate.setDuration(ANIMSPEED)

		### ANIMATION GEOMETRY ###
		### PORTRAIT ###
		self.fp_visible = QtCore.QRect(35, 655, 411, 91)
		self.fp_invisible = QtCore.QRect (35, 810, 411, 91)
		self.f2p_visible = QtCore.QRect (0, 330, 480, 311)
		self.f2p_invisible = QtCore.QRect (490, 330, 480, 311)
		self.lp_visible = QtCore.QRect (0, 330, 480, 430)
		self.lp_invisible = QtCore.QRect (490, 330, 480, 430)
		### LANDSCAPE ###
		self.fl_visible = QtCore.QRect (360, 330, 411, 91)
		self.fl_invisible = QtCore.QRect (360, 490, 411, 91)
		self.f2l_visible = QtCore.QRect (320, 5, 480, 311)
		self.f2l_invisible = QtCore.QRect (810, 5, 480, 311)
		self.ll_visible = QtCore.QRect (320, 0, 480, 430)
		self.ll_invisible = QtCore.QRect (810, 0, 480, 430)
		
		### SETUP & INIT PHONON SOUND ###
		self.mediaObject = Phonon.createPlayer(Phonon.MusicCategory)
		self.audioOutput = Phonon.AudioOutput(Phonon.MusicCategory)
		#print self.audioOutput.outputDevice().name()

		self.mediaObject.setTickInterval(1000)
		self.mediaObject.tick.connect(self.tick)
		self.mediaObject.stateChanged.connect(self.stateChanged)
		self.mediaObject.currentSourceChanged.connect(self.sourceChanged)
		self.mediaObject.aboutToFinish.connect(self.aboutToFinish)
		self.mediaObject.finished.connect(self.finished)

		### CREATE AND CONNCT SEEKSLIDER TO PHONON ###
		self.ui.seekSlider = Phonon.SeekSlider(self.mediaObject,self.ui.frame_2)
		self.ui.seekSlider.setGeometry(QtCore.QRect(10, 245, 268, 61))
		self.ui.seekSlider.setOrientation(QtCore.Qt.Horizontal)
		self.ui.seekSlider.setObjectName("seekSlider")
		
		### JUST TO UPDATE SCREEN... HMMM.... ###
		self.animate()
Ejemplo n.º 49
0
Archivo: gui.py Proyecto: flyser/maamp
class MainWin(QtGui.QMainWindow):
	def __init__(self, parent=None):
		QtGui.QWidget.__init__(self, parent)
		self.ui = Ui_MainWindow()
		self.ui.setupUi(self)
		self.ui.lcdcurrent.display("00:00")
		self.ui.lcdtotal.display("00:00")

		self.PORT = False
		self.SHOW = False
		self.songs = []
		self.chosen = 0

		###### WINDOW SETTINGS ######
		try:
			self.setAttribute(QtCore.Qt.WA_Maemo5StackedWindow, True)
			self.setAttribute(QtCore.Qt.WA_Maemo5AutoOrientation, True);
		except:
			pass
		self.setWindowTitle("MaAmp - Offline") # Should show artist name here

		self.connect(QtGui.QApplication.desktop(), QtCore.SIGNAL("resized(int)"), self.orientationChanged );

		### SETUP CUSTOM LABEL, PUSHLABEL ###
		self.ui.cover_art = pushLabel(self)
		self.ui.cover_art.setGeometry(QtCore.QRect(20, 35, 280, 280))
		self.ui.cover_art.setScaledContents(True)
		#self.ui.cover_art.setPixmap(QtGui.QPixmap(current[3]))
		self.ui.cover_art.setPixmap(QtGui.QPixmap(os.path.dirname(os.path.realpath( __file__ ) )+"/empty.png"))
		self.connect(self.ui.cover_art, QtCore.SIGNAL("clicked()"),self.animate)

		### INIT THINGS ###
		self.getconnected()
		self.disablebuttons()

		### ACTIONBUTTONS (MENU) ###
		self.connect(self.ui.actionConfigure, QtCore.SIGNAL("triggered()"),self.configure)
		self.connect(self.ui.actionAbout, QtCore.SIGNAL("triggered()"),self.about)
		self.connect(self.ui.actionFM_Radio, QtCore.SIGNAL('triggered()'), self.fmradio)
		self.connect(self.ui.actionClearRefresh, QtCore.SIGNAL('triggered()'), self.clearrefresh)

		### BUTTONS ###
		self.connect(self.ui.artistsButton, QtCore.SIGNAL("clicked()"),self.listartists)
		#self.connect(self.ui.albumsButton, QtCore.SIGNAL("clicked()"),self.listalbums)

		### PLAYER BUTTONS ###
		self.connect(self.ui.playButton, QtCore.SIGNAL("clicked()"),self.play)
		self.connect(self.ui.stopButton, QtCore.SIGNAL("clicked()"),self.stop)
		self.connect(self.ui.nextButton, QtCore.SIGNAL("clicked()"),self.next)
		self.connect(self.ui.previousButton, QtCore.SIGNAL("clicked()"),self.prev)
		self.connect(self.ui.listWidget, QtCore.SIGNAL("itemClicked(QListWidgetItem*)"), self.itemClicked)

		### INIT ALL ANIMATIONS ###
		self.f_animate = QtCore.QPropertyAnimation(self.ui.frame, "geometry")
		self.f_animate.setDuration(ANIMSPEED)
		self.f2_animate = QtCore.QPropertyAnimation(self.ui.frame_2, "geometry")
		self.f2_animate.setDuration(ANIMSPEED)
		self.l_animate = QtCore.QPropertyAnimation(self.ui.listWidget, "geometry")
		self.l_animate.setDuration(ANIMSPEED)

		### ANIMATION GEOMETRY ###
		### PORTRAIT ###
		self.fp_visible = QtCore.QRect(35, 655, 411, 91)
		self.fp_invisible = QtCore.QRect (35, 810, 411, 91)
		self.f2p_visible = QtCore.QRect (0, 330, 480, 311)
		self.f2p_invisible = QtCore.QRect (490, 330, 480, 311)
		self.lp_visible = QtCore.QRect (0, 330, 480, 430)
		self.lp_invisible = QtCore.QRect (490, 330, 480, 430)
		### LANDSCAPE ###
		self.fl_visible = QtCore.QRect (360, 330, 411, 91)
		self.fl_invisible = QtCore.QRect (360, 490, 411, 91)
		self.f2l_visible = QtCore.QRect (320, 5, 480, 311)
		self.f2l_invisible = QtCore.QRect (810, 5, 480, 311)
		self.ll_visible = QtCore.QRect (320, 0, 480, 430)
		self.ll_invisible = QtCore.QRect (810, 0, 480, 430)
		
		### SETUP & INIT PHONON SOUND ###
		self.mediaObject = Phonon.createPlayer(Phonon.MusicCategory)
		self.audioOutput = Phonon.AudioOutput(Phonon.MusicCategory)
		#print self.audioOutput.outputDevice().name()

		self.mediaObject.setTickInterval(1000)
		self.mediaObject.tick.connect(self.tick)
		self.mediaObject.stateChanged.connect(self.stateChanged)
		self.mediaObject.currentSourceChanged.connect(self.sourceChanged)
		self.mediaObject.aboutToFinish.connect(self.aboutToFinish)
		self.mediaObject.finished.connect(self.finished)

		### CREATE AND CONNCT SEEKSLIDER TO PHONON ###
		self.ui.seekSlider = Phonon.SeekSlider(self.mediaObject,self.ui.frame_2)
		self.ui.seekSlider.setGeometry(QtCore.QRect(10, 245, 268, 61))
		self.ui.seekSlider.setOrientation(QtCore.Qt.Horizontal)
		self.ui.seekSlider.setObjectName("seekSlider")
		
		### JUST TO UPDATE SCREEN... HMMM.... ###
		self.animate()
		
	### STILL PHONON ###
	def play(self):
		QtGui.QApplication.processEvents()
		playing = (self.mediaObject.state() == Phonon.PlayingState)
		if not playing:
			self.ui.lcdtotal.display(self.current_song[4])
			self.mediaObject.play()
		else:
			self.mediaObject.pause()
		try:
			self.setAttribute(QtCore.Qt.WA_Maemo5ShowProgressIndicator, False);
		except:
			pass
		
	def stop(self):
		self.ui.playButton.setText("Play")
		self.mediaObject.stop()

	def prev(self):
		QtGui.QApplication.processEvents()
		try:
			self.setAttribute(QtCore.Qt.WA_Maemo5ShowProgressIndicator, True);
		except:
			pass
		self.chosen = self.chosen - 1
		if self.chosen < 0:
			self.chosen = len(self.songs)-1
		self.ui.listWidget.setCurrentRow(self.chosen)
		self.url = self.amp.getSongurl(self.songs[self.chosen][6]) 
		self.current_song = self.songs[self.chosen] 
		self.ui.songLabel.setText(self.songs[self.chosen][1])
		self.ui.songsLabel.setText("Songs: "+str(self.current_song[0])+"/"+str(len(self.songs)))
		self.ui.artistLabel.setText(self.songs[self.chosen][2])
		self.ui.albumLabel.setText(self.songs[self.chosen][3])
		self.mediaObject.setCurrentSource(Phonon.MediaSource(self.url))
		self.ui.seekSlider.setMediaObject(self.mediaObject)
		self.play()

	def next(self):
		QtGui.QApplication.processEvents()
		try:
			self.setAttribute(QtCore.Qt.WA_Maemo5ShowProgressIndicator, True);
		except:
			pass
		self.chosen = self.chosen + 1
		if self.chosen > len(self.songs):
			self.chosen = 0
		self.ui.listWidget.setCurrentRow(self.chosen)
		self.url = self.amp.getSongurl(self.songs[self.chosen][6]) 
		self.current_song = self.songs[self.chosen] 
		self.ui.songLabel.setText(self.songs[self.chosen][1])
		self.ui.songsLabel.setText("Songs: "+str(self.current_song[0])+"/"+str(len(self.songs)))
		self.ui.artistLabel.setText(self.songs[self.chosen][2])
		self.ui.albumLabel.setText(self.songs[self.chosen][3])
		self.mediaObject.setCurrentSource(Phonon.MediaSource(self.url))
		self.ui.seekSlider.setMediaObject(self.mediaObject)
		self.play()

	def stateChanged(self, newState, oldState):
		if newState == Phonon.ErrorState:
			if self.mediaObject.errorType() == Phonon.FatalError:
				QtGui.QMessageBox.warning(self, "Fatal Error",
						self.mediaObject.errorString())
			else:
				QtGui.QMessageBox.warning(self, "Error",
						self.mediaObject.errorString())

		elif newState == Phonon.PlayingState:
			self.ui.playButton.setText("Pause")

		elif newState == Phonon.StoppedState:
			self.ui.lcdcurrent.display("00:00")

		elif newState == Phonon.PausedState:
			self.ui.playButton.setText("Play")

	def tick(self, time):
		displayTime = QtCore.QTime(0, (time / 60000) % 60, (time / 1000) % 60)
		self.ui.lcdcurrent.display(displayTime.toString('mm:ss'))

	def sourceChanged(self, source):
		pass

	def aboutToFinish(self):
		### SO WE DONT HAVE TO WAIT FOR AMPACHEE-AUTH WHEN PLAYING NEXT ###
		if not self.amp.is_authenticated():
			self.amp.authenticate()

	def finished(self):
		self.next()
	### PHONON FINISHED ###

	### ENABLE BUTTONS (IF ALBUM IS LOADED) ###
	def enablebuttons(self):
		self.ui.cover_art.setEnabled(True)
		self.ui.playButton.setEnabled(True)
		self.ui.stopButton.setEnabled(True)
		self.ui.nextButton.setEnabled(True)
		self.ui.previousButton.setEnabled(True)

	### DISABLE BUTTONS (IF NO ALBUM IS LOADED)
	def disablebuttons(self):
		self.ui.cover_art.setEnabled(False)
		self.ui.playButton.setEnabled(False)
		self.ui.stopButton.setEnabled(False)
		self.ui.nextButton.setEnabled(False)
		self.ui.previousButton.setEnabled(False)

	### TRY TO CONNECT TO AMPACHE ###
	def getconnected(self):
		### GET AMACHE CONFIGURATION AND STUFF ###
		self.amp = ampache()
		self.config = self.amp.getconfig()
		if not self.config[0] == "http://":
			if self.amp.authenticate():
				self.ui.actionConnect.setText(QtGui.QApplication.translate("MainWindow", "Connected", None, QtGui.QApplication.UnicodeUTF8))
				self.ui.actionClearRefresh.setEnabled(True)
				self.ui.actionFM_Radio.setEnabled(True)
				self.ui.actionConnect.setChecked(True)
				self.artists = self.amp.getArtists()
				self.setWindowTitle("MaAmp - Online")
				ONLINE = True
				self.ui.frame.setEnabled(True)
				try:
					QMaemo5InformationBox.information(None, "Connected ... :)", 5000)
				except:
					pass
			else:
				self.setWindowTitle("MaAmp - Offline") 
				self.ui.frame.setEnabled(False)
				self.ui.cover_art.setEnabled(False)
				self.ui.actionConnect.setText(QtGui.QApplication.translate("MainWindow", "Connect", None, QtGui.QApplication.UnicodeUTF8))
				self.ui.actionClearRefresh.setEnabled(False)
				self.ui.actionFM_Radio.setEnabled(False)
				self.ui.actionConnect.setChecked(False)
				ONLINE = False
		else:
			self.setWindowTitle("MaAmp - Offline") 
			self.ui.frame.setEnabled(False)
			self.ui.cover_art.setEnabled(False)
			self.ui.actionConnect.setText(QtGui.QApplication.translate("MainWindow", "Connect", None, QtGui.QApplication.UnicodeUTF8))
			self.ui.actionClearRefresh.setEnabled(False)
			self.ui.actionFM_Radio.setEnabled(False)
			self.ui.actionConnect.setChecked(False)
			ONLINE = False
			#try:
			QMaemo5InformationBox.information(None, "You need to configure MaAmp!", 5000)
			#except:
			#	pass
			

	def about(self):
		ad = AboutDialog(self)
		if self.PORT:
			ad.resize(480, 650)
		else:
			ad.resize(800, 400)
		ad.show()

	def configure(self):
		cd = ConfigDialog(self)
		### SETUP UI ###
		if self.PORT:
			cd.resize(480, 267)
		else:
			cd.resize(800, 267)
		self.cdui = Ui_Config()
		self.cdui.setupUi(cd)
		self.cdui.serverEdit.setText(self.config[0])
		self.cdui.userEdit.setText(self.config[1])
		self.cdui.passwordEdit.setText(self.config[2])
		self.cdui.autoLoginCheck.setChecked(self.config[3])
		cd.show()
		if cd.exec_() == 1:
			self.config = [self.cdui.serverEdit.text(),self.cdui.userEdit.text(),self.cdui.passwordEdit.text(),self.cdui.autoLoginCheck.isChecked()]
			cd.destroy()
			self.amp.setconfig(self.config)
			if self.config[3] == True:
				self.getconnected()

	def itemClicked(self,item):
		QtGui.QApplication.processEvents()
		try:
			self.setAttribute(QtCore.Qt.WA_Maemo5ShowProgressIndicator, True);
		except:
			pass
		self.animate()
		if self.ui.listWidget.row(item) < 0:
			self.chosen = 1
		else:
			self.chosen = self.ui.listWidget.row(item)
		self.url = self.amp.getSongurl(self.songs[self.chosen][6]) 
		self.current_song = self.songs[self.chosen] 
		self.ui.songLabel.setText(self.songs[self.chosen][1])
		self.ui.songsLabel.setText("Songs: "+str(self.current_song[0])+"/"+str(len(self.songs)))
		self.ui.artistLabel.setText(self.songs[self.chosen][2])
		self.ui.albumLabel.setText(self.songs[self.chosen][3])
		self.ui.lcdtotal.display(self.current_song[4])
		self.mediaObject.setCurrentSource(Phonon.MediaSource(self.url))
		self.ui.seekSlider.setMediaObject(self.mediaObject)
		self.ui.seekSlider.setEnabled(True)
		self.play()
		self.ui.playButton.setText("Pause")

	def clearrefresh(self):
		result = self.amp.clearCache()
		self.artists = result

	def orientationChanged ( self ): #called when N900 is rotated
		screenGeometry=QtGui.QApplication.desktop().screenGeometry();
		if screenGeometry.width() > screenGeometry.height(): #landscape
			if self.SHOW: # SHOW FRAMES, HIDE LISTWIDGET
				self.ui.frame.setGeometry(self.fl_visible)
				self.ui.frame_2.setGeometry(self.f2l_visible)
				self.ui.listWidget.setGeometry(self.ll_invisible)
			else: # SHOW LISTWIDGET, HIDE FRAMES
				self.ui.frame.setGeometry(self.fl_invisible)
				self.ui.frame_2.setGeometry(self.f2l_invisible)
				self.ui.listWidget.setGeometry(self.ll_visible)
			self.ui.artistsButton.setGeometry(QtCore.QRect(10, 340, 141, 71))
			self.ui.playlistButton.setGeometry(QtCore.QRect(160, 340, 141, 71))
			self.PORT = False
		else: #portrait
			if self.SHOW: # SHOW FRAMES, HIDE LISTWIDGET
				self.ui.frame.setGeometry(self.fp_visible)
				self.ui.frame_2.setGeometry(self.f2p_visible)
				self.ui.listWidget.setGeometry(self.lp_invisible)
			else: # SHOW LISTWIDGET, HIDE FRAMES
				self.ui.frame.setGeometry(self.fp_invisible)
				self.ui.frame_2.setGeometry(self.f2p_invisible)
				self.ui.listWidget.setGeometry(self.lp_visible)
			self.ui.artistsButton.setGeometry(QtCore.QRect(330, 140, 141, 71))
			self.ui.playlistButton.setGeometry(QtCore.QRect(330, 220, 141, 71))
			self.PORT = True
	
	def animate(self):
		if self.PORT: 
			if self.SHOW: # SHOW LISTWIDGET, HIDE FRAMES
				self.f_animate.setStartValue(self.fp_visible)
				self.f_animate.setEndValue(self.fp_invisible)
				self.f2_animate.setStartValue(self.f2p_visible)
				self.f2_animate.setEndValue(self.f2p_invisible)
				self.l_animate.setStartValue(self.lp_invisible)
				self.l_animate.setEndValue(self.lp_visible)
				self.SHOW = False
			else: # SHOW FRAMES HIDE LISTWIDGET
				self.f_animate.setStartValue(self.fp_invisible)
				self.f_animate.setEndValue(self.fp_visible)
				self.f2_animate.setStartValue(self.f2p_invisible)
				self.f2_animate.setEndValue(self.f2p_visible)
				self.l_animate.setStartValue(self.lp_visible)
				self.l_animate.setEndValue(self.lp_invisible)
				self.SHOW = True
		else:
			if self.SHOW: # SHOW LISTWIDGET HIDE FRAMES
				self.f_animate.setStartValue(self.fl_visible)
				self.f_animate.setEndValue(self.fl_invisible)
				self.f2_animate.setStartValue(self.f2l_visible)
				self.f2_animate.setEndValue(self.f2l_invisible)
				self.l_animate.setStartValue(self.ll_invisible)
				self.l_animate.setEndValue(self.ll_visible)
				self.SHOW = False
			else: # SHOW FRAMES, HIDE LISTWIDGET
				self.f_animate.setStartValue(self.fl_invisible)
				self.f_animate.setEndValue(self.fl_visible)
				self.f2_animate.setStartValue(self.f2l_invisible)
				self.f2_animate.setEndValue(self.f2l_visible)
				self.l_animate.setStartValue(self.ll_visible)
				self.l_animate.setEndValue(self.ll_invisible)
				self.SHOW = True
		self.f_animate.start()
		self.f2_animate.start()
		self.l_animate.start()
			
	def connected(self):
		if self.ONLINE:
			self.ui.actionConnect.setText(QtGui.QApplication.translate("MainWindow", "Connected", None, QtGui.QApplication.UnicodeUTF8))
			self.getconnected()
			self.ONLINE = True
		else:
			self.ui.actionConnect.setText(QtGui.QApplication.translate("MainWindow", "Connect", None, QtGui.QApplication.UnicodeUTF8))
			self.disablebuttons()
			self.ONLINE = False
			
	# BORROWED FROM PYRADIO! #
	def fmradio(self, initial=False): #Turn on FM transmitter
		try : #test for FM transmitter.
			sysbus = dbus.SystemBus()
			fmtx = sysbus.get_object('com.nokia.FMTx', '/com/nokia/fmtx/default', False)
			fmtx_iface = dbus.Interface(fmtx, dbus_interface='org.freedesktop.DBus.Properties')

			state = fmtx_iface.Get("com.nokia.FMTx.Device", "state")
			if state == 'disabled':
				if not initial: 
					self.ui.actionFM_Radio.setText(QtGui.QApplication.translate("MainWindow", "Disable FM", None, QtGui.QApplication.UnicodeUTF8))
					fmtx_iface.Set("com.nokia.FMTx.Device", "state", dbus.String(u'%s' % 'enabled', variant_level=1))
				else:
					self.ui.actionFM_Radio.setText(QtGui.QApplication.translate("MainWindow", "Enable FM", None, QtGui.QApplication.UnicodeUTF8))
			else:
				if not initial: 
					self.ui.actionFM_Radio.setText(QtGui.QApplication.translate("MainWindow", "Enable FM", None, QtGui.QApplication.UnicodeUTF8))
					fmtx_iface.Set("com.nokia.FMTx.Device", "state", dbus.String(u'%s' % 'disabled', variant_level=1))
				else:
					self.ui.actionEnable_FM_Radio.setText(QtGui.QApplication.translate("MainWindow", "Disable FM", None, QtGui.QApplication.UnicodeUTF8))
		except: print "No FM Transmitter."
	###########################
	
	def listartists(self):
		if not self.amp.is_authenticated():
			self.getconnected()
		self.ArtistWin = ArtistWin(self)
		try:
			self.ArtistWin.setAttribute(QtCore.Qt.WA_Maemo5ShowProgressIndicator, True);
		except:
			pass
		self.ArtistWin.setWindowTitle("All Artists ("+str(len(self.artists))+")")
		self.ArtistWin.show()
		self.ArtistWin.artists(self.artists)

	def selectedAristAlbum(self,artist_id):
		album = self.amp.getAlbums(artist_id)
		self.selectedAlbum(album,0)

	def selectedAlbum(self,album,nr):
		QtGui.QApplication.processEvents()
		self.songs = self.amp.getSongs(album[nr][0])
		self.ui.cover_art.setPixmap(QtGui.QPixmap(album[nr][3]))
		self.ui.songLabel.setText(self.songs[0][1])
		self.ui.artistLabel.setText(self.songs[0][2])
		self.ui.albumLabel.setText(self.songs[0][3])
		self.ui.yearLabel.setText("Year: "+album[nr][6])
		self.ui.songsLabel.setText("Songs: 1/"+str(album[nr][2]))
		self.ui.tagsLabel.setText(album[nr][7])
		self.ui.listWidget.clear()
		for row in self.songs:
			self.ui.listWidget.addItem(row[1])
		self.url = self.amp.getSongurl(self.songs[0][6]) 
		self.current_song = self.songs[0] 
		self.ui.lcdtotal.display(self.current_song[4])
		wasPlaying = (self.mediaObject.state() == Phonon.PlayingState)
		if wasPlaying:
			self.stop()
		self.mediaObject.setCurrentSource(Phonon.MediaSource(self.url))
		self.ui.seekSlider.setMediaObject(self.mediaObject)
		self.enablebuttons()
		self.SHOW = True
		self.animate()
		try:
			self.setAttribute(QtCore.Qt.WA_Maemo5ShowProgressIndicator, False);
		except:
			pass
Ejemplo n.º 50
0
class SoftwareCenter(QMainWindow):

    # fx(software, category) map
    scmap = {}
    # fx(page, softwares) map
    psmap = {}
    # recommend number in fill func
    recommendNumber = 0
    # now page
    nowPage = ''

    # search delay timer
    searchDTimer = ''

    def __init__(self,parent=None):
        QMainWindow.__init__(self,parent)

        # ui
        self.ui_init()

        # logic
        self.tmp_get_category()
        self.tmp_get_category_software()

        # from backend.ibackend import get_backend
        # self.bk = get_backend()
        # sl = self.bk.get_all_packages()
        # # self.check_software()


        self.psmap[self.ui.allsListWidget] = []
        self.psmap[self.ui.upListWidget] = []
        self.psmap[self.ui.unListWidget] = []

        # test
        self.ui.leSearch.setPlaceholderText("请输入想要搜索的软件")
        self.ui.allsMSGBar.setText("已安装软件 ")
        self.ui.bottomText1.setText("UK软件中心:")
        self.ui.bottomText2.setText("1.0.12")
        # self.tmp_fill_recommend_softwares()
        # self.tmp_get_ads()

        self.ui.categoryView.setEnabled(False)
        self.ui.btnUp.setEnabled(False)
        self.ui.btnUn.setEnabled(False)
        self.ui.btnTask.setEnabled(False)

        self.slot_goto_homepage()


        # from backend.ibackend import get_backend
        # self.bk = get_backend()
        self.connect(data.backend, SIGNAL("getallpackagesover"), self.slot_get_all_packages_over)
        at = AsyncThread(data.backend.get_all_packages)
        at.setDaemon(True)
        at.start()


        # from multiprocessing import Process,Queue
        # q = Queue()
        # q.put(data.softwareList)
        # p = Process(target=self.check_software,args=(q,))
        # p.start()
        # data.softwareList = q.get()
        # print len(data.softwareList)
        # p.join()

        # self.connect(data.sbo, SIGNAL("countiover"), self.slot_count_installed_over)
        # at = AsyncThread(data.sbo.count_installed_software)
        # at.setDaemon(True)
        # at.start()
        #
        # self.connect(data.sbo, SIGNAL("countuover"), self.slot_count_upgradable_over)
        # at = AsyncThread(data.sbo.count_upgradable_software)
        # at.setDaemon(True)
        # at.start()
        self.btntesttask = QPushButton(self.ui.taskWidget)
        self.btntesttask.setGeometry(400,20,100,30)
        self.raise_()
        self.btntesttask.clicked.connect(self.slot_testtask)

    def slot_testtask(self):
        software = data.sbo.get_software_by_name("firefox")
        oneitem = QListWidgetItem()
        tliw = TaskListItemWidget(software)
        self.ui.taskListWidget.addItem(oneitem)
        self.ui.taskListWidget.setItemWidget(oneitem, tliw)
        import time
        for i in range(100):
            tliw.ui.progressBar.setValue(i+1)
            time.sleep(0.02)

    def ui_init(self):
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowTitle("Ubuntu Kylin Software-Center")
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground, True)

        self.ui.headerWidget.installEventFilter(self)

        self.ui.categoryView.itemClicked.connect(self.slot_change_category)
        self.ui.allsListWidget.verticalScrollBar().valueChanged.connect(self.slot_softwidget_scroll_end)
        self.ui.upListWidget.verticalScrollBar().valueChanged.connect(self.slot_softwidget_scroll_end)
        self.ui.unListWidget.verticalScrollBar().valueChanged.connect(self.slot_softwidget_scroll_end)
        self.ui.btnHomepage.pressed.connect(self.slot_goto_homepage)
        self.ui.btnUp.pressed.connect(self.slot_goto_uppage)
        self.ui.btnUn.pressed.connect(self.slot_goto_unpage)
        self.ui.btnTask.pressed.connect(self.slot_goto_taskpage)
        self.ui.btnClose.clicked.connect(self.slot_close)
        self.ui.btnMin.clicked.connect(self.slot_min)

        self.connect(data.backend, SIGNAL("backendmsg"), self.slot_backend_msg)

        # style by code
        self.ui.headerWidget.setAutoFillBackground(True)
        palette = QPalette()
        img = QPixmap("res/header.png")
        palette.setBrush(QPalette.Window, QBrush(img))
        self.ui.headerWidget.setPalette(palette)

        self.ui.bottomWidget.setAutoFillBackground(True)
        palette = QPalette()
        img = QPixmap("res/foot.png")
        palette.setBrush(QPalette.Window, QBrush(img))
        self.ui.bottomWidget.setPalette(palette)

        self.ui.categoryView.setFocusPolicy(Qt.NoFocus)
        self.ui.btnDay.setFocusPolicy(Qt.NoFocus)
        self.ui.btnWeek.setFocusPolicy(Qt.NoFocus)
        self.ui.btnMonth.setFocusPolicy(Qt.NoFocus)
        self.ui.btnDownTimes.setFocusPolicy(Qt.NoFocus)
        self.ui.btnGrade.setFocusPolicy(Qt.NoFocus)
        self.ui.btnClose.setFocusPolicy(Qt.NoFocus)
        self.ui.btnMin.setFocusPolicy(Qt.NoFocus)
        self.ui.btnSkin.setFocusPolicy(Qt.NoFocus)
        self.ui.btnConf.setFocusPolicy(Qt.NoFocus)
        self.ui.btnBack.setFocusPolicy(Qt.NoFocus)
        self.ui.btnNext.setFocusPolicy(Qt.NoFocus)
        self.ui.btnHomepage.setFocusPolicy(Qt.NoFocus)
        self.ui.btnUp.setFocusPolicy(Qt.NoFocus)
        self.ui.btnUn.setFocusPolicy(Qt.NoFocus)
        self.ui.btnTask.setFocusPolicy(Qt.NoFocus)
        self.ui.allsListWidget.setFocusPolicy(Qt.NoFocus)
        self.ui.upListWidget.setFocusPolicy(Qt.NoFocus)
        self.ui.unListWidget.setFocusPolicy(Qt.NoFocus)
        self.ui.taskListWidget.setFocusPolicy(Qt.NoFocus)

        self.ui.allsWidget.hide()
        self.ui.upWidget.hide()
        self.ui.unWidget.hide()
        self.ui.taskWidget.hide()

        self.show()

        # style by qss
        self.ui.btnBack.setStyleSheet("QPushButton{background-image:url('res/nav-back-1.png');border:0px;}QPushButton:hover{background:url('res/nav-back-2.png');}QPushButton:pressed{background:url('res/nav-back-3.png');}")
        self.ui.btnNext.setStyleSheet("QPushButton{background-image:url('res/nav-next-1.png');border:0px;}QPushButton:hover{background:url('res/nav-next-2.png');}QPushButton:pressed{background:url('res/nav-next-3.png');}")
        self.ui.btnHomepage.setStyleSheet("QPushButton{background-image:url('res/nav-homepage-1.png');border:0px;}QPushButton:hover{background:url('res/nav-homepage-2.png');}QPushButton:pressed{background:url('res/nav-homepage-3.png');}")
        self.ui.btnUp.setStyleSheet("QPushButton{background-image:url('res/nav-up-1.png');border:0px;}QPushButton:hover{background:url('res/nav-up-2.png');}QPushButton:pressed{background:url('res/nav-up-3.png');}")
        self.ui.btnUn.setStyleSheet("QPushButton{background-image:url('res/nav-un-1.png');border:0px;}QPushButton:hover{background:url('res/nav-un-2.png');}QPushButton:pressed{background:url('res/nav-un-3.png');}")
        self.ui.btnTask.setStyleSheet("QPushButton{background-image:url('res/nav-task-1.png');border:0px;}QPushButton:hover{background:url('res/nav-task-2.png');}QPushButton:pressed{background:url('res/nav-task-3.png');}")
        self.ui.logoImg.setStyleSheet("QLabel{background-image:url('res/logo.png')}")
        self.ui.searchicon.setStyleSheet("QLabel{background-image:url('res/search.png')}")
        self.ui.leSearch.setStyleSheet("QLineEdit{border:1px solid #C3E0F4;border-radius:2px;padding-left:15px;color:#497FAB;font-size:13px;}")
        self.ui.userWidget.setStyleSheet("QWidget{background-color:#DDE4EA}")
        self.ui.userLabel.setStyleSheet("QLabel{background-image:url('res/item3')}")
        self.ui.item1Widget.setStyleSheet("QWidget{background-image:url('res/item1.png')}")
        self.ui.item2Widget.setStyleSheet("QWidget{background-image:url('res/item2.png')}")
        self.ui.btnClose.setStyleSheet("QPushButton{background-image:url('res/close-1.png');border:0px;}QPushButton:hover{background:url('res/close-2.png');}QPushButton:pressed{background:url('res/close-3.png');}")
        self.ui.btnMin.setStyleSheet("QPushButton{background-image:url('res/min-1.png');border:0px;}QPushButton:hover{background:url('res/min-2.png');}QPushButton:pressed{background:url('res/min-3.png');}")
        self.ui.btnSkin.setStyleSheet("QPushButton{background-image:url('res/skin-1.png');border:0px;}QPushButton:hover{background:url('res/skin-2.png');}QPushButton:pressed{background:url('res/skin-3.png');}")
        self.ui.btnConf.setStyleSheet("QPushButton{background-image:url('res/conf-1.png');border:0px;}QPushButton:hover{background:url('res/conf-2.png');}QPushButton:pressed{background:url('res/conf-3.png');}")
        self.ui.categoryView.setStyleSheet("QListWidget{border:0px;background-image:url('res/categorybg.png');}QListWidget::item{height:35px;padding-left:20px;margin-top:0px;border:0px;}QListWidget::item:hover{background:#CAD4E2;}QListWidget::item:selected{background-color:#6BB8DD;color:black;}")
        self.ui.categorytext.setStyleSheet("QLabel{background-image:url('res/categorybg.png');color:#7E8B97;font-weight:bold;padding-left:5px;}")
        self.ui.hline1.setStyleSheet("QLabel{background-image:url('res/hline1.png')}")
        self.ui.recommendWidget.setStyleSheet("QWidget{background-color:white}")
        self.ui.vline1.setStyleSheet("QLabel{background-color:#BBD1E4;}")
        self.ui.rankWidget.setStyleSheet("QWidget{background-color:white}")
        self.ui.rankLogo.setStyleSheet("QLabel{background-image:url('res/rankLogo.png')}")
        self.ui.rankText.setStyleSheet("QLabel{color:#7E8B97;font-size:13px;font-weight:bold;}")
        self.ui.btnDay.setStyleSheet("QPushButton{background-image:url('res/day1.png');border:0px;}")
        self.ui.btnWeek.setStyleSheet("QPushButton{background-image:url('res/week1.png');border:0px;}")
        self.ui.btnMonth.setStyleSheet("QPushButton{background-image:url('res/month1.png');border:0px;}")
        self.ui.btnDownTimes.setStyleSheet("QPushButton{font-size:14px;color:#2B8AC2;background-color:#C3E0F4;border:0px;}")
        self.ui.btnGrade.setStyleSheet("QPushButton{font-size:14px;color:#2B8AC2;background-color:#C3E0F4;border:0px;}")
        self.ui.rankView.setStyleSheet("QListWidget{border:0px;}")
        self.ui.bottomImg.setStyleSheet("QLabel{background-image:url('res/logo.png')}")
        self.ui.bottomText1.setStyleSheet("QLabel{color:white;font-size:14px;}")
        self.ui.bottomText2.setStyleSheet("QLabel{color:white;font-size:14px;}")
        self.ui.allsMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}")
        self.ui.upMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}")
        self.ui.unMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}")
        self.ui.taskMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}")
        self.ui.allsHeader.setStyleSheet("QLabel{background-image:url('res/listwidgetheader.png')}")
        self.ui.upHeader.setStyleSheet("QLabel{background-image:url('res/listwidgetheader.png')}")
        self.ui.unHeader.setStyleSheet("QLabel{background-image:url('res/listwidgetheader.png')}")
        self.ui.taskHeader.setStyleSheet("QLabel{background-image:url('res/taskwidgetheader.png')}")
        self.ui.allsListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:66px;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}")
        self.ui.upListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:66px;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}")
        self.ui.unListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:66px;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}")
        self.ui.taskListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:45;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}")

    def eventFilter(self, obj, event):
        if (obj == self.ui.headerWidget):
            if (event.type() == QEvent.MouseButtonPress):
                self.isMove = True  # True only when click the blank place on header bar
                self.nowMX = event.globalX()
                self.nowMY = event.globalY()
                self.nowWX = self.x()
                self.nowWY = self.y()
            elif (event.type() == QEvent.MouseMove):
                if(self.isMove):
                    incx = event.globalX() - self.nowMX
                    incy = event.globalY() - self.nowMY
                    self.move(self.nowWX + incx, self.nowWY + incy)
            elif (event.type() == QEvent.MouseButtonRelease):
                self.isMove = False
        return True

    def tmp_get_category(self):
        for c in os.listdir("res/category"):
            if(c == 'ubuntukylin'):
                oneitem = QListWidgetItem('Ubuntu Kylin')
                icon = QIcon()
                icon.addFile("res/" + c + ".png", QSize(), QIcon.Normal, QIcon.Off)
                oneitem.setIcon(icon)
                oneitem.setWhatsThis(c)
                self.ui.categoryView.addItem(oneitem)
        for c in os.listdir("res/category"):
            zhcnc = ''
            if(c == 'devel'):
                zhcnc = '编程开发'
            if(c == 'game'):
                zhcnc = '游戏娱乐'
            if(c == 'ubuntukylin'):
                continue
                # zhcnc = 'Ubuntu Kylin'
            if(c == 'office'):
                zhcnc = '办公软件'
            if(c == 'internet'):
                zhcnc = '网络工具'
            if(c == 'multimedia'):
                zhcnc = '影音播放'
            if(c == 'graphic'):
                zhcnc = '图形图像'
            if(c == 'profession'):
                zhcnc = '专业软件'
            if(c == 'other'):
                zhcnc = '其他软件'
            if(c == 'necessary'):
                zhcnc = '装机必备'
            oneitem = QListWidgetItem(zhcnc)
            icon = QIcon()
            icon.addFile("res/" + c + ".png", QSize(), QIcon.Normal, QIcon.Off)
            oneitem.setIcon(icon)
            oneitem.setWhatsThis(c)
            self.ui.categoryView.addItem(oneitem)

    def tmp_get_category_software(self):
        for c in os.listdir("res/category"):
            file = open(os.path.abspath("res/category/" + c), 'r')
            for line in file:
                self.scmap[line[:-1]] = c

    def tmp_get_ads(self):
        tmpads = []
        tmpads.append(Advertisement("qq", "url", "ad1.png", "http://www.baidu.com"))
        tmpads.append(Advertisement("wps", "pkg", "ad2.png", "wps"))
        tmpads.append(Advertisement("qt", "pkg", "ad3.png", "qtcreator"))
        adw = ADWidget(tmpads, self)

    def tmp_fill_recommend_softwares(self):
        rnames = ['flashplugin-installer','vlc','openfetion','virtualbox']
        for name in rnames:
            self.add_one_recommend_software(name)

    def add_one_recommend_software(self, name):
        for software in data.softwareList:
            if(software.name == name):
                x = 0
                y = 0
                recommend = RecommendItem(software,self.ui.recommendWidget)
                if(self.recommendNumber in (0, 1, 2)):
                    y = 0
                elif(self.recommendNumber in (3, 4, 5)):
                    y = 88
                else:
                    y = 176
                if(self.recommendNumber in (0, 3, 6)):
                    x = 0
                elif(self.recommendNumber in (1, 4, 7)):
                    x = 176
                else:
                    x = 352
                recommend.move(x, y)
                self.recommendNumber += 1

    # delete packages from apt backend which not in category file
    def check_software(self, sl):
        slist = []
        for c in os.listdir("res/category"):
            file = open(os.path.abspath("res/category/"+c), 'r')
            for line in file:
                slist.append(line[:-1])

        i = 0
        while i < len(sl):
            name = sl[i].name
            for name_ in slist:
                if name == name_:
                    sl[i].category = self.scmap[name]
                    break
            else:
                sl.pop(i)
                i -= 1

            i += 1

        self.emit(SIGNAL("chksoftwareover"), sl)

    def _check_software(self):
        slist = []
        for c in os.listdir("res/category"):
            file = open(os.path.abspath("res/category/"+c), 'r')
            for line in file:
                slist.append(line[:-1])

        data.sbo.get_all_software()

        i = 0
        while i < len(data.softwareList):
            name = data.softwareList[i].name
            for name_ in slist:
                if name == name_:
                    data.softwareList[i].category = self.scmap[name]
                    break
            else:
                data.softwareList.pop(i)
                i -= 1

            i += 1

        self.emit(SIGNAL("chksoftwareover"))

    def show_more_software(self, listWidget):
        theRange = 0
        if(len(self.psmap[listWidget]) < data.showSoftwareStep):
            theRange = len(self.psmap[listWidget])
        else:
            theRange = data.showSoftwareStep

        for i in range(theRange):
            software = self.psmap[listWidget].pop(0)
            oneitem = QListWidgetItem()
            liw = ListItemWidget(software, self.nowPage)
            listWidget.addItem(oneitem)
            listWidget.setItemWidget(oneitem, liw)

    def switch_category(self):
        listWidget = self.get_current_listWidget()
        nowCategory = listWidget.whatsThis()

        if(self.nowPage == 'homepage'):
            self.ui.categoryView.clearSelection()
        else:
            if(nowCategory == ''):
                self.ui.categoryView.clearSelection()
            else:
                for i in range(self.ui.categoryView.count()):
                    item = self.ui.categoryView.item(i)
                    if(item.whatsThis() == nowCategory):
                        item.setSelected(True)

    def get_current_listWidget(self):
        listWidget = ''
        if(self.nowPage == "homepage"):
            listWidget = self.ui.allsListWidget
        elif(self.nowPage == "uppage"):
            listWidget = self.ui.upListWidget
        elif(self.nowPage == "unpage"):
            listWidget = self.ui.unListWidget
        return listWidget

    #-------------------------------slots-------------------------------

    def slot_change_category(self, citem):
        listWidget = self.get_current_listWidget()
        category = str(citem.whatsThis())
        trueCategory = listWidget.whatsThis()

        if(trueCategory == category):
            pass
        else:
            listWidget.scrollToTop()            # if not, the func will trigger slot_softwidget_scroll_end()
            listWidget.setWhatsThis(category)   # use whatsThis() to save each selected category
            listWidget.clear()
            self.psmap[listWidget] = []
            for software in data.softwareList:
                if(software.category == category):
                    if(self.nowPage == 'homepage'):
                        self.psmap[listWidget].append(software)
                    elif(self.nowPage == 'uppage'):
                        if(software.is_upgradable):
                            self.psmap[listWidget].append(software)
                    elif(self.nowPage == 'unpage'):
                        if(software.is_installed):
                            self.psmap[listWidget].append(software)

            self.show_more_software(listWidget)

        # homepage is special
        if(self.nowPage == "homepage" and self.ui.allsWidget.isVisible() == False):
            self.ui.allsWidget.setVisible(True)

    def slot_softwidget_scroll_end(self, now):
        listWidget = self.get_current_listWidget()
        max = listWidget.verticalScrollBar().maximum()
        if(now == max):
            self.show_more_software(listWidget)

    def slot_goto_homepage(self):
        self.nowPage = 'homepage'
        self.ui.categoryView.setEnabled(True)
        self.switch_category()
        self.ui.homepageWidget.setVisible(True)
        self.ui.allsWidget.setVisible(False)
        self.ui.upWidget.setVisible(False)
        self.ui.unWidget.setVisible(False)
        self.ui.taskWidget.setVisible(False)
        self.ui.btnHomepage.setEnabled(False)
        self.ui.btnUp.setEnabled(True)
        self.ui.btnUn.setEnabled(True)
        self.ui.btnTask.setEnabled(True)
        self.ui.btnHomepage.setStyleSheet("QPushButton{background-image:url('res/nav-homepage-3.png');border:0px;}")
        self.ui.btnUp.setStyleSheet("QPushButton{background-image:url('res/nav-up-1.png');border:0px;}QPushButton:hover{background:url('res/nav-up-2.png');}QPushButton:pressed{background:url('res/nav-up-3.png');}")
        self.ui.btnUn.setStyleSheet("QPushButton{background-image:url('res/nav-un-1.png');border:0px;}QPushButton:hover{background:url('res/nav-un-2.png');}QPushButton:pressed{background:url('res/nav-un-3.png');}")
        self.ui.btnTask.setStyleSheet("QPushButton{background-image:url('res/nav-task-1.png');border:0px;}QPushButton:hover{background:url('res/nav-task-2.png');}QPushButton:pressed{background:url('res/nav-task-3.png');}")

    def slot_goto_uppage(self):
        self.nowPage = 'uppage'
        self.ui.categoryView.setEnabled(True)
        self.switch_category()
        self.ui.homepageWidget.setVisible(False)
        self.ui.allsWidget.setVisible(False)
        self.ui.upWidget.setVisible(True)
        self.ui.unWidget.setVisible(False)
        self.ui.taskWidget.setVisible(False)
        self.ui.btnHomepage.setEnabled(True)
        self.ui.btnUp.setEnabled(False)
        self.ui.btnUn.setEnabled(True)
        self.ui.btnTask.setEnabled(True)
        self.ui.btnHomepage.setStyleSheet("QPushButton{background-image:url('res/nav-homepage-1.png');border:0px;}QPushButton:hover{background:url('res/nav-homepage-2.png');}QPushButton:pressed{background:url('res/nav-homepage-3.png');}")
        self.ui.btnUp.setStyleSheet("QPushButton{background-image:url('res/nav-up-3.png');border:0px;}")
        self.ui.btnUn.setStyleSheet("QPushButton{background-image:url('res/nav-un-1.png');border:0px;}QPushButton:hover{background:url('res/nav-un-2.png');}QPushButton:pressed{background:url('res/nav-un-3.png');}")
        self.ui.btnTask.setStyleSheet("QPushButton{background-image:url('res/nav-task-1.png');border:0px;}QPushButton:hover{background:url('res/nav-task-2.png');}QPushButton:pressed{background:url('res/nav-task-3.png');}")

    def slot_goto_unpage(self):
        self.nowPage = 'unpage'
        self.ui.categoryView.setEnabled(True)
        self.switch_category()
        self.ui.homepageWidget.setVisible(False)
        self.ui.allsWidget.setVisible(False)
        self.ui.upWidget.setVisible(False)
        self.ui.unWidget.setVisible(True)
        self.ui.taskWidget.setVisible(False)
        self.ui.btnHomepage.setEnabled(True)
        self.ui.btnUp.setEnabled(True)
        self.ui.btnUn.setEnabled(False)
        self.ui.btnTask.setEnabled(True)
        self.ui.btnHomepage.setStyleSheet("QPushButton{background-image:url('res/nav-homepage-1.png');border:0px;}QPushButton:hover{background:url('res/nav-homepage-2.png');}QPushButton:pressed{background:url('res/nav-homepage-3.png');}")
        self.ui.btnUp.setStyleSheet("QPushButton{background-image:url('res/nav-up-1.png');border:0px;}QPushButton:hover{background:url('res/nav-up-2.png');}QPushButton:pressed{background:url('res/nav-up-3.png');}")
        self.ui.btnUn.setStyleSheet("QPushButton{background-image:url('res/nav-un-3.png');border:0px;}")
        self.ui.btnTask.setStyleSheet("QPushButton{background-image:url('res/nav-task-1.png');border:0px;}QPushButton:hover{background:url('res/nav-task-2.png');}QPushButton:pressed{background:url('res/nav-task-3.png');}")

    def slot_goto_taskpage(self):
        self.nowPage = 'taskpage'
        self.ui.categoryView.setEnabled(False)
        self.ui.categoryView.clearSelection()
        self.ui.homepageWidget.setVisible(False)
        self.ui.allsWidget.setVisible(False)
        self.ui.upWidget.setVisible(False)
        self.ui.unWidget.setVisible(False)
        self.ui.taskWidget.setVisible(True)
        self.ui.btnHomepage.setEnabled(True)
        self.ui.btnUp.setEnabled(True)
        self.ui.btnUn.setEnabled(True)
        self.ui.btnTask.setEnabled(False)
        self.ui.btnHomepage.setStyleSheet("QPushButton{background-image:url('res/nav-homepage-1.png');border:0px;}QPushButton:hover{background:url('res/nav-homepage-2.png');}QPushButton:pressed{background:url('res/nav-homepage-3.png');}")
        self.ui.btnUp.setStyleSheet("QPushButton{background-image:url('res/nav-up-1.png');border:0px;}QPushButton:hover{background:url('res/nav-up-2.png');}QPushButton:pressed{background:url('res/nav-up-3.png');}")
        self.ui.btnUn.setStyleSheet("QPushButton{background-image:url('res/nav-un-1.png');border:0px;}QPushButton:hover{background:url('res/nav-un-2.png');}QPushButton:pressed{background:url('res/nav-un-3.png');}")
        self.ui.btnTask.setStyleSheet("QPushButton{background-image:url('res/nav-task-3.png');border:0px;}")

    def slot_close(self):
        os._exit(0)

    def slot_min(self):
        self.showMinimized()

    def slot_click_ad(self, ad):
        if(ad.type == "pkg"):
            print ad.urlorpkgid
        elif(ad.type == "url"):
            webbrowser.open_new_tab(ad.urlorpkgid)

    def slot_get_all_packages_over(self, sl):
        print len(sl)
        self.connect(self, SIGNAL("chksoftwareover"), self.slot_check_software_over)
        at = AsyncThread(self.check_software, sl)
        at.setDaemon(True)
        at.start()
        # at = CheckSoftwareThread(sl, self.scmap)
        # at.setDaemon(True)
        # at.start()

        from multiprocessing import Process, Queue, Pipe
        # q = Queue()
        # q.put(sl)
        # ap = AsyncProcess(self.check_software)
        # ap.start()
        # from multiprocessing import Process,Queue
        # q = Queue()
        # q.put(sl)
        # sll = ['1','2','3','1','2','3']
        # one = sl[0]
        # print one
        # pipe = Pipe()
        # p = Process(target=self.check_software,args=(pipe[1],))
        # pipe[0].send(one)
        # p.start()
        # print q.get()
        # data.softwareList = q.get()
        # print len(data.softwareList)
        # p.join()

    def slot_check_software_over(self, sl):
        print len(sl)
        data.softwareList = sl
        self.tmp_fill_recommend_softwares()
        self.tmp_get_ads()
        self.ui.categoryView.setEnabled(True)
        self.ui.btnUp.setEnabled(True)
        self.ui.btnUn.setEnabled(True)
        self.ui.btnTask.setEnabled(True)

        self.ui.allsMSGBar.setText("所有软件 <font color='#009900'>" + str(len(data.softwareList)) + "</font> 款,系统盘可用空间 <font color='#009900'>" + vfs.get_available_size() + "</font>")

        self.connect(data.sbo, SIGNAL("countiover"), self.slot_count_installed_over)
        at = AsyncThread(data.sbo.count_installed_software)
        at.setDaemon(True)
        at.start()

        self.connect(data.sbo, SIGNAL("countuover"), self.slot_count_upgradable_over)
        at = AsyncThread(data.sbo.count_upgradable_software)
        at.setDaemon(True)
        at.start()

    def slot_count_installed_over(self):
        print "iover..."
        self.ui.unMSGBar.setText("可卸载软件 <font color='#009900'>" + str(data.installedCount) + "</font> 款,系统盘可用空间 <font color='#009900'>" + vfs.get_available_size() + "</font>")

    def slot_count_upgradable_over(self):
        print "uover..."
        self.ui.upMSGBar.setText("可升级软件 <font color='#009900'>" + str(data.upgradableCount) + "</font> 款,系统盘可用空间 <font color='#009900'>" + vfs.get_available_size() + "</font>")

    def slot_backend_msg(self, msg):
        print msg
Ejemplo n.º 51
0
class MainWindow(QMainWindow):
    """Main application form class"""

    def __init__(self, data, classifier, parent=None):
        super(MainWindow, self).__init__(parent)
        self.ui =  Ui_MainWindow()
        self.ui.setupUi(self)
        self.set_data(data)
        self.classifier = classifier
        self.ui.cacl_button.clicked.connect(self.do_calc)

    def do_calc(self):
        row = self.get_row()
        res = self.classifier.get_labels_weights(row)
        self.set_result(res)

    def get_row(self):
        row = []
        for i in xrange(self.data_set.n_features):
            if self.feature_active_checkboxes[i].checkState() != Qt.Checked:
                row.append(numpy.nan)
            elif i in self.data_set.feature_class_names.keys():
                row.append(self.feature_inputs[i].currentIndex())
            else:
                row.append(self.feature_inputs[i].value())
        return row

    def set_result(self, values_count):
        s = sum(values_count.values())
        for i in xrange(len(self.data_set.target_names)):
            val = int(100 * values_count[i]/s) if values_count.has_key(i) else 0
            self.target_bars[i].setValue(val)

    def set_data(self, data_set):
        self.data_set = data_set
        self.feature_inputs = []
        self.feature_active_checkboxes = []
        for i, feature_name in zip(xrange(data_set.n_features), data_set.feature_names):
            rowLayout = QtGui.QHBoxLayout()
            featureLabel = QtGui.QLabel()
            active_checkbox = QtGui.QCheckBox()
            active_checkbox.setCheckState(Qt.Checked)
            featureLabel.setText(feature_name)
            featureLabel.setFixedWidth(150)

            if i in data_set.feature_class_names.keys():
                combo = QtGui.QComboBox()
                for label in data_set.feature_class_names[i]:
                    combo.addItem(label)
                input = combo
            else:
                input = QtGui.QSpinBox()

            input.setFixedWidth(150)
            self.feature_inputs.append(input)
            a = i
            def abc(state):
                self.feature_inputs[i].setEnabled(state == Qt.Checked)
            active_checkbox.stateChanged.connect(
                abc
            )
            self.feature_active_checkboxes.append(active_checkbox)
            rowLayout.addWidget(active_checkbox)
            rowLayout.addWidget(input)
            rowLayout.addWidget(featureLabel)

            featureLabel.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Expanding))
            self.ui.features_layout.addLayout(rowLayout)

        self.target_bars = []
        for target_name in data_set.target_names:
            rowLayout = QtGui.QHBoxLayout(self)
            target_label = QtGui.QLabel(self)
            target_label.setText(target_name)
            target_label.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding))
            target_label.setFixedWidth(100)
            bar = QtGui.QProgressBar()
            self.target_bars.append(bar)
            rowLayout.addWidget(bar)
            rowLayout.addWidget(target_label)
            self.ui.result_layout.addLayout(rowLayout)

        class TableModel(QAbstractTableModel):
            def __init__(self,  data_set):
                super(TableModel, self).__init__(None)
                self.data_set = data_set

            def rowCount(self, index=QModelIndex()):
                """ Returns the number of rows the model holds. """
                return self.data_set.n_samples

            def columnCount(self, index=QModelIndex()):
                return self.data_set.n_features + 1

            def data(self, index, role=Qt.DisplayRole):
                """ Depending on the index and role given, return data. If not
                    returning data, return None (PySide equivalent of QT's
                    "invalid QVariant").
                """
                if role != Qt.DisplayRole:
                    return None
                if not index.isValid():
                    return None
                #noinspection PyTypeChecker
                if not 0 <= index.row() < self.data_set.n_samples:
                    return None
                if index.column() < self.data_set.n_features:
#                    if self.data_set.feature_class_names.has_key(index.column()):
#                       return unicode(self.data_set.feature_class_names[index.column()][int(self.data_set.data[index.row(), index.column()])])
                    return unicode(self.data_set.data[index.row(), index.column()])
                else:
                    return unicode(self.data_set.target_names[int(self.data_set.target[index.row()])])


            def headerData(self, section, orientation, role=Qt.DisplayRole):
                """ Set the headers to be displayed. """
                if role != Qt.DisplayRole:
                    return None

                if orientation == Qt.Horizontal:
                    if section < self.data_set.n_features:
                        return self.data_set.feature_names[section]
                    elif section == self.data_set.n_features:
                        return "DS"

                return None

        self.ui.data_view.setModel(TableModel(data_set))
        self.ui.data_view.update()
Ejemplo n.º 52
0
class Main(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setFixedSize(648, 635)
        self.setWindowTitle("ChessQt")

        self.style = ["background: #333", "background: #fff"]

        self.ui.actionNowa_gra.triggered.connect(self.newGame)

        self.next_move = False

        for i in xrange(8):
            for j in xrange(8):
                m_label = MyLabel(i, j, self.style[(i + j) % 2])
                labels[(i, j)] = m_label
                self.ui.gridLayout_2.addWidget(m_label, i, j)
                m_label.clicked.connect(self.slotClicked)
        self.newGame()

    def createPiece(self):
        chessboard[(6, 0)] = BlackPawn(6, 0, True)
        chessboard[(6, 1)] = BlackPawn(6, 1, True)
        chessboard[(6, 2)] = BlackPawn(6, 2, True)
        chessboard[(6, 3)] = BlackPawn(6, 3, True)
        chessboard[(6, 4)] = BlackPawn(6, 4, True)
        chessboard[(6, 5)] = BlackPawn(6, 5, True)
        chessboard[(6, 6)] = BlackPawn(6, 6, True)
        # chessboard[(6, 7)] = BlackPawn(6, 7, True)

        chessboard[(7, 0)] = Rook(7, 0, True)
        chessboard[(7, 1)] = Knight(7, 1, True)
        chessboard[(7, 2)] = Bishop(7, 2, True)
        chessboard[(7, 3)] = King(7, 3, True)
        self.white_king = chessboard[(7, 3)]
        chessboard[(7, 4)] = Queen(7, 4, True)
        chessboard[(7, 5)] = Bishop(7, 5, True)
        chessboard[(7, 6)] = Knight(7, 6, True)
        chessboard[(7, 7)] = Rook(7, 7, True)

        chessboard[(0, 0)] = Rook(0, 0, False)
        chessboard[(0, 1)] = Knight(0, 1, False)
        chessboard[(0, 2)] = Bishop(0, 2, False)
        chessboard[(0, 3)] = King(0, 3, False)
        self.black_king = chessboard[(0, 3)]
        chessboard[(0, 4)] = Queen(0, 4, False)
        chessboard[(0, 5)] = Bishop(0, 5, False)
        chessboard[(0, 6)] = Knight(0, 6, False)
        chessboard[(0, 7)] = Rook(0, 7, False)

        # chessboard[(1, 0)] = WhitePawn(1, 0, False)
        chessboard[(1, 1)] = WhitePawn(1, 1, False)
        chessboard[(1, 2)] = WhitePawn(1, 2, False)
        chessboard[(1, 3)] = WhitePawn(1, 3, False)
        chessboard[(1, 4)] = WhitePawn(1, 4, False)
        chessboard[(1, 5)] = WhitePawn(1, 5, False)
        chessboard[(1, 6)] = WhitePawn(1, 6, False)
        chessboard[(1, 7)] = WhitePawn(1, 7, False)

    def refreshPiece(self):
        for i in xrange(8):
            for j in xrange(8):
                if chessboard.has_key((i, j)):
                    piece = chessboard.get((i, j))
                    if piece.alive:
                        if piece.color:
                            labels.get((i, j)).setImagePiece(piece.src_black)
                        else:
                            labels.get((i, j)).setImagePiece(piece.src_white)
                else:
                    labels.get((i, j)).setImagePiece("")

    def deselectAll(self):
        for i in xrange(8):
            for j in xrange(8):
                labels.get((i, j)).setStyleSheet(self.style[(i + j) % 2])

    def movePiece(self, x, y):
        chessboard.get((self.active_x, self.active_y)).move(x, y)
        chessboard[(x, y)] = chessboard.get((self.active_x, self.active_y))
        del chessboard[(self.active_x, self.active_y)]
        self.deselectAll()
        self.refreshPiece()
        self.next_move = not self.next_move
    
        if not self.black_king.alive:
            dialog = QtGui.QDialog()
        elif not self.white_king.alive:
            QMessageBox.about(self, "Black wins.", "")

    def removePiece(self):
        for i in xrange(8):
            for j in xrange(8):
                if chessboard.has_key((i, j)):
                    del chessboard[(i, j)]

    def newGame(self):
        self.removePiece()
        self.createPiece()
        self.refreshPiece()

    def slotNewGame(self):
        self.newGame()

    def slotClicked(self, x, y):
        if chessboard.has_key((x, y)) and labels.get((x, y)).styleSheet() == "background: #00f":
            chessboard.get((x, y)).makeNotAlive()
            self.movePiece(x, y)
        elif chessboard.has_key((x, y)):
            if chessboard.get((x, y)).color == self.next_move:
                for i in xrange(8):
                    for j in xrange(8):
                        labels[(i, j)].setStyleSheet(self.style[(i+j) % 2])
                        if chessboard.get((x, y)).moveValidator(i, j) and not chessboard.get((x, y)).isSelfHere(i, j):
                            labels.get((i, j)).setStyleSheet("background: #00f")
                        else:
                            labels.get((x, y)).setStyleSheet(self.style[(i+j) % 2])
                            labels.get((x, y)).setStyleSheet("background: #f00")
                            self.active_x = x
                            self.active_y = y
        elif labels.get((x, y)).styleSheet() == "background: #00f":
            self.movePiece(x, y)
Ejemplo n.º 53
0
    def ui_init(self):
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowTitle("Ubuntu Kylin Software-Center")
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground, True)

        self.ui.headerWidget.installEventFilter(self)

        self.ui.categoryView.itemClicked.connect(self.slot_change_category)
        self.ui.allsListWidget.verticalScrollBar().valueChanged.connect(self.slot_softwidget_scroll_end)
        self.ui.upListWidget.verticalScrollBar().valueChanged.connect(self.slot_softwidget_scroll_end)
        self.ui.unListWidget.verticalScrollBar().valueChanged.connect(self.slot_softwidget_scroll_end)
        self.ui.btnHomepage.pressed.connect(self.slot_goto_homepage)
        self.ui.btnUp.pressed.connect(self.slot_goto_uppage)
        self.ui.btnUn.pressed.connect(self.slot_goto_unpage)
        self.ui.btnTask.pressed.connect(self.slot_goto_taskpage)
        self.ui.btnClose.clicked.connect(self.slot_close)
        self.ui.btnMin.clicked.connect(self.slot_min)

        self.connect(data.backend, SIGNAL("backendmsg"), self.slot_backend_msg)

        # style by code
        self.ui.headerWidget.setAutoFillBackground(True)
        palette = QPalette()
        img = QPixmap("res/header.png")
        palette.setBrush(QPalette.Window, QBrush(img))
        self.ui.headerWidget.setPalette(palette)

        self.ui.bottomWidget.setAutoFillBackground(True)
        palette = QPalette()
        img = QPixmap("res/foot.png")
        palette.setBrush(QPalette.Window, QBrush(img))
        self.ui.bottomWidget.setPalette(palette)

        self.ui.categoryView.setFocusPolicy(Qt.NoFocus)
        self.ui.btnDay.setFocusPolicy(Qt.NoFocus)
        self.ui.btnWeek.setFocusPolicy(Qt.NoFocus)
        self.ui.btnMonth.setFocusPolicy(Qt.NoFocus)
        self.ui.btnDownTimes.setFocusPolicy(Qt.NoFocus)
        self.ui.btnGrade.setFocusPolicy(Qt.NoFocus)
        self.ui.btnClose.setFocusPolicy(Qt.NoFocus)
        self.ui.btnMin.setFocusPolicy(Qt.NoFocus)
        self.ui.btnSkin.setFocusPolicy(Qt.NoFocus)
        self.ui.btnConf.setFocusPolicy(Qt.NoFocus)
        self.ui.btnBack.setFocusPolicy(Qt.NoFocus)
        self.ui.btnNext.setFocusPolicy(Qt.NoFocus)
        self.ui.btnHomepage.setFocusPolicy(Qt.NoFocus)
        self.ui.btnUp.setFocusPolicy(Qt.NoFocus)
        self.ui.btnUn.setFocusPolicy(Qt.NoFocus)
        self.ui.btnTask.setFocusPolicy(Qt.NoFocus)
        self.ui.allsListWidget.setFocusPolicy(Qt.NoFocus)
        self.ui.upListWidget.setFocusPolicy(Qt.NoFocus)
        self.ui.unListWidget.setFocusPolicy(Qt.NoFocus)
        self.ui.taskListWidget.setFocusPolicy(Qt.NoFocus)

        self.ui.allsWidget.hide()
        self.ui.upWidget.hide()
        self.ui.unWidget.hide()
        self.ui.taskWidget.hide()

        self.show()

        # style by qss
        self.ui.btnBack.setStyleSheet("QPushButton{background-image:url('res/nav-back-1.png');border:0px;}QPushButton:hover{background:url('res/nav-back-2.png');}QPushButton:pressed{background:url('res/nav-back-3.png');}")
        self.ui.btnNext.setStyleSheet("QPushButton{background-image:url('res/nav-next-1.png');border:0px;}QPushButton:hover{background:url('res/nav-next-2.png');}QPushButton:pressed{background:url('res/nav-next-3.png');}")
        self.ui.btnHomepage.setStyleSheet("QPushButton{background-image:url('res/nav-homepage-1.png');border:0px;}QPushButton:hover{background:url('res/nav-homepage-2.png');}QPushButton:pressed{background:url('res/nav-homepage-3.png');}")
        self.ui.btnUp.setStyleSheet("QPushButton{background-image:url('res/nav-up-1.png');border:0px;}QPushButton:hover{background:url('res/nav-up-2.png');}QPushButton:pressed{background:url('res/nav-up-3.png');}")
        self.ui.btnUn.setStyleSheet("QPushButton{background-image:url('res/nav-un-1.png');border:0px;}QPushButton:hover{background:url('res/nav-un-2.png');}QPushButton:pressed{background:url('res/nav-un-3.png');}")
        self.ui.btnTask.setStyleSheet("QPushButton{background-image:url('res/nav-task-1.png');border:0px;}QPushButton:hover{background:url('res/nav-task-2.png');}QPushButton:pressed{background:url('res/nav-task-3.png');}")
        self.ui.logoImg.setStyleSheet("QLabel{background-image:url('res/logo.png')}")
        self.ui.searchicon.setStyleSheet("QLabel{background-image:url('res/search.png')}")
        self.ui.leSearch.setStyleSheet("QLineEdit{border:1px solid #C3E0F4;border-radius:2px;padding-left:15px;color:#497FAB;font-size:13px;}")
        self.ui.userWidget.setStyleSheet("QWidget{background-color:#DDE4EA}")
        self.ui.userLabel.setStyleSheet("QLabel{background-image:url('res/item3')}")
        self.ui.item1Widget.setStyleSheet("QWidget{background-image:url('res/item1.png')}")
        self.ui.item2Widget.setStyleSheet("QWidget{background-image:url('res/item2.png')}")
        self.ui.btnClose.setStyleSheet("QPushButton{background-image:url('res/close-1.png');border:0px;}QPushButton:hover{background:url('res/close-2.png');}QPushButton:pressed{background:url('res/close-3.png');}")
        self.ui.btnMin.setStyleSheet("QPushButton{background-image:url('res/min-1.png');border:0px;}QPushButton:hover{background:url('res/min-2.png');}QPushButton:pressed{background:url('res/min-3.png');}")
        self.ui.btnSkin.setStyleSheet("QPushButton{background-image:url('res/skin-1.png');border:0px;}QPushButton:hover{background:url('res/skin-2.png');}QPushButton:pressed{background:url('res/skin-3.png');}")
        self.ui.btnConf.setStyleSheet("QPushButton{background-image:url('res/conf-1.png');border:0px;}QPushButton:hover{background:url('res/conf-2.png');}QPushButton:pressed{background:url('res/conf-3.png');}")
        self.ui.categoryView.setStyleSheet("QListWidget{border:0px;background-image:url('res/categorybg.png');}QListWidget::item{height:35px;padding-left:20px;margin-top:0px;border:0px;}QListWidget::item:hover{background:#CAD4E2;}QListWidget::item:selected{background-color:#6BB8DD;color:black;}")
        self.ui.categorytext.setStyleSheet("QLabel{background-image:url('res/categorybg.png');color:#7E8B97;font-weight:bold;padding-left:5px;}")
        self.ui.hline1.setStyleSheet("QLabel{background-image:url('res/hline1.png')}")
        self.ui.recommendWidget.setStyleSheet("QWidget{background-color:white}")
        self.ui.vline1.setStyleSheet("QLabel{background-color:#BBD1E4;}")
        self.ui.rankWidget.setStyleSheet("QWidget{background-color:white}")
        self.ui.rankLogo.setStyleSheet("QLabel{background-image:url('res/rankLogo.png')}")
        self.ui.rankText.setStyleSheet("QLabel{color:#7E8B97;font-size:13px;font-weight:bold;}")
        self.ui.btnDay.setStyleSheet("QPushButton{background-image:url('res/day1.png');border:0px;}")
        self.ui.btnWeek.setStyleSheet("QPushButton{background-image:url('res/week1.png');border:0px;}")
        self.ui.btnMonth.setStyleSheet("QPushButton{background-image:url('res/month1.png');border:0px;}")
        self.ui.btnDownTimes.setStyleSheet("QPushButton{font-size:14px;color:#2B8AC2;background-color:#C3E0F4;border:0px;}")
        self.ui.btnGrade.setStyleSheet("QPushButton{font-size:14px;color:#2B8AC2;background-color:#C3E0F4;border:0px;}")
        self.ui.rankView.setStyleSheet("QListWidget{border:0px;}")
        self.ui.bottomImg.setStyleSheet("QLabel{background-image:url('res/logo.png')}")
        self.ui.bottomText1.setStyleSheet("QLabel{color:white;font-size:14px;}")
        self.ui.bottomText2.setStyleSheet("QLabel{color:white;font-size:14px;}")
        self.ui.allsMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}")
        self.ui.upMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}")
        self.ui.unMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}")
        self.ui.taskMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}")
        self.ui.allsHeader.setStyleSheet("QLabel{background-image:url('res/listwidgetheader.png')}")
        self.ui.upHeader.setStyleSheet("QLabel{background-image:url('res/listwidgetheader.png')}")
        self.ui.unHeader.setStyleSheet("QLabel{background-image:url('res/listwidgetheader.png')}")
        self.ui.taskHeader.setStyleSheet("QLabel{background-image:url('res/taskwidgetheader.png')}")
        self.ui.allsListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:66px;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}")
        self.ui.upListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:66px;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}")
        self.ui.unListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:66px;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}")
        self.ui.taskListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:45;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}")
Ejemplo n.º 54
0
class MyApplication(QtGui.QMainWindow):

    def __assign_displays(self):
        """assigns display name """
        self.displays = CDisplay.detect_display_devices()
        self.no_of_displays = len(self.displays)
        self.no_of_connected_dev = self.no_of_displays

        if self.no_of_displays is 1:

            self.display1 = self.displays[0]
        elif self.no_of_displays is 2:

            self.display1 = self.displays[0]
            self.display2 = self.displays[1]

    def __init__(self, parent=None):
        """Initializes"""
        QtGui.QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.display1 = None
        self.display2 = None
        self.temperature = 'Default'
        self.no_of_connected_dev = 0
        self.__assign_displays()
        self.setup_default_directory()
        self.generate_dynamic_items()
        self.default_config = '/home/{}/.config/' \
            'brightness_controller/settings'      \
            .format(getpass.getuser())
        self.values = []
        self.array_value = 0.01
        for i in xrange(0, 100):
            self.values.append(self.array_value)
            self.array_value += 0.01
        self.connect_handlers()
        self.setup_widgets()
        if path.exists(self.default_config):
            self.load_settings(self.default_config)

        self.setup_tray(parent)

    def setup_default_directory(self):
        """ Create default settings directory if it doesnt exist """
        directory = '/home/{}/.config/' \
            'brightness_controller/'    \
            .format(getpass.getuser())
        if not path.exists(directory):
            try:
                makedirs(directory)
            except error as e:
                self._show_error(str(e))


    def closeEvent(self, event):
        """ Override CloseEvent for system tray """
        if self.isVisible() is True:
            self.hide()
            event.ignore()
        else:
            reply = QtGui.QMessageBox.question(self, 'Message', "Are you sure to quit?", QtGui.QMessageBox.Yes |
                                            QtGui.QMessageBox.No, QtGui.QMessageBox.No)
            if reply == QtGui.QMessageBox.Yes:
                event.accept()
            else:
                # fixes an odd event bug, the app never shows but prevents closing
                self.show()
                self.hide()
                event.ignore()


    def setup_tray(self, parent):
        """ Setup systemtray """
        self.tray_menu = QtGui.QMenu(parent)
        self.tray_menu.addAction(QtGui.QAction("Show ...", self,
                statusTip="Show",
                triggered=self.show))
        self.tray_menu.addAction(QtGui.QAction("Quit ...", self,
                statusTip="Quit",
                triggered=self.close))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("/usr/share/icons/hicolor/scalable/apps/brightness-controller.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.tray_icon = QtGui.QSystemTrayIcon(icon, self)
        if self.tray_icon.isSystemTrayAvailable():
            self.tray_icon.connect(
                QtCore.SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), self._icon_activated)
            self.tray_icon.setContextMenu(self.tray_menu)
            self.tray_icon.show()

    def _icon_activated(self, reason):
        if reason in (QtGui.QSystemTrayIcon.Trigger, QtGui.QSystemTrayIcon.DoubleClick):
            self.show()

    def setup_widgets(self):
        """connects the form widgets with functions"""
        self.license_widget = LicenseForm()
        self.license_widget.set_main_window(self)
        self.license_widget.hide()

        self.about_widget = AboutForm()
        self.about_widget.set_main_window(self)
        self.about_widget.hide()

        self.help_widget = HelpForm()
        self.help_widget.set_main_window(self)
        self.help_widget.hide()

    def generate_dynamic_items(self):
        '''
        manages widgets that may contain dynamic items.
        '''
        self.generate_brightness_sources()

    def generate_brightness_sources(self):
        '''
        generates assigns display sources to combo boxes
        '''
        if self.no_of_connected_dev < 2:
            self.ui.secondary_combo.addItem("Disabled")
            self.ui.secondary_combo.setEnabled(False)
            self.ui.primary_combobox.addItem("Disabled")
            self.ui.primary_combobox.setEnabled(False)
            return

        for display in self.displays:
            self.ui.secondary_combo.addItem(display)
            self.ui.primary_combobox.addItem(display)


    def connect_handlers(self):
        """Connects the handlers of GUI widgets"""
        self.ui.primary_brightness.valueChanged[int].\
            connect(self.change_value_pbr)
        self.ui.primary_red.valueChanged[int].\
            connect(self.change_value_pr)
        self.ui.primary_blue.valueChanged[int].\
            connect(self.change_value_pb)
        self.ui.primary_green.valueChanged[int].\
            connect(self.change_value_pg)
        self.enable_secondary_widgets(False)

        if self.no_of_connected_dev >= 2:
            self.enable_secondary_widgets(True)
            self.connect_secondary_widgets()

        if path.exists(self.default_config):
            self.ui.actionClearDefault.setVisible(True)
            self.ui.actionClearDefault.triggered.connect(self.delete_default_settings)

        self.ui.actionDefault.triggered.connect(lambda: self.save_settings(True))
        self.ui.comboBox.activated[str].connect(self.combo_activated)
        self.ui.primary_combobox.activated[
            str].connect(self.primary_source_combo_activated)
        self.ui.secondary_combo.activated[
            str].connect(self.secondary_source_combo_activated)
        self.ui.actionAbout.triggered.connect(self.show_about)
        self.ui.actionExit.triggered.connect(self.close)
        self.ui.actionHelp.triggered.connect(self.show_help)
        self.ui.actionLicense.triggered.connect(self.show_license)
        self.ui.actionSave.triggered.connect(self.save_settings)
        self.ui.actionLoad.triggered.connect(self.load_settings)

    def enable_secondary_widgets(self, boolean):
        """
        boolean - assigns boolean value to setEnabled(boolean)
        """
        self.ui.secondary_brightness.setEnabled(boolean)
        self.ui.secondary_blue.setEnabled(boolean)
        self.ui.secondary_red.setEnabled(boolean)
        self.ui.secondary_green.setEnabled(boolean)

    def connect_secondary_widgets(self):
        """
        connects the secondary widgets with functions
        """
        self.ui.secondary_brightness.valueChanged[int].\
            connect(self.change_value_sbr)
        self.ui.secondary_red.valueChanged[int].\
            connect(self.change_value_sr)
        self.ui.secondary_blue.valueChanged[int].\
            connect(self.change_value_sb)
        self.ui.secondary_green.valueChanged[int].\
            connect(self.change_value_sg)

    def change_value_pbr(self, value):
        """Changes Primary Display Brightness"""
        cmd_value = "xrandr\
        --output %s \
        --brightness %s\
        --gamma %s:%s:%s" % \
            (self.display1,
             self.values[value],
             self.values[self.ui.primary_red.value()],
             self.values[self.ui.primary_green.value()],
             self.values[self.ui.primary_blue.value()])
        Executor.execute_command(cmd_value)

    def change_value_pr(self, value):
        """Changes Primary Display Red ratio"""
        cmd_value = "xrandr\
        --output %s \
        --brightness %s\
        --gamma %s:%s:%s" % \
            (self.display1,
             self.values[self.ui.primary_brightness.value()],
             self.values[value],
             self.values[self.ui.primary_green.value()],
             self.values[self.ui.primary_blue.value()])
        Executor.execute_command(cmd_value)

    def change_value_pg(self, value):
        """Changes Primary Display Green ratio"""
        cmd_value = "xrandr\
        --output %s \
        --brightness %s\
        --gamma %s:%s:%s" % \
            (self.display1,
             self.values[self.ui.primary_brightness.value()],
             self.values[self.ui.primary_red.value()],
             self.values[value],
             self.values[self.ui.primary_blue.value()])

        Executor.execute_command(cmd_value)

    def change_value_pb(self, value):
        """Changes Primary Display Blue ratio"""
        cmd_value = "xrandr\
        --output %s \
        --brightness %s\
        --gamma %s:%s:%s" % \
            (self.display1,
             self.values[self.ui.primary_brightness.value()],
             self.values[self.ui.primary_red.value()],
             self.values[self.ui.primary_green.value()],
             self.values[value])
        Executor.execute_command(cmd_value)

    def change_value_sbr(self, value):
        """
        Changes Secondary Display Brightness
        """
        cmd_value = "xrandr\
        --output %s \
        --brightness %s\
        --gamma %s:%s:%s" % \
            (self.display2,
             self.values[value],
             self.values[self.ui.secondary_red.value()],
             self.values[self.ui.secondary_green.value()],
             self.values[self.ui.secondary_blue.value()])
        Executor.execute_command(cmd_value)

    def change_value_sr(self, value):
        """Changes Secondary Display Red ratio"""
        cmd_value = "xrandr\
        --output %s \
        --brightness %s\
        --gamma %s:%s:%s" % \
            (self.display2,
             self.values[self.ui.secondary_brightness.value()],
             self.values[value],
             self.values[self.ui.secondary_green.value()],
             self.values[self.ui.secondary_blue.value()])
        Executor.execute_command(cmd_value)

    def change_value_sg(self, value):
        """Changes Secondary Display Green ratio"""
        cmd_value = "xrandr\
        --output %s \
        --brightness %s\
        --gamma %s:%s:%s" % \
            (self.display2,
             self.values[self.ui.secondary_brightness.value()],
             self.values[self.ui.secondary_red.value()],
             self.values[value],
             self.values[self.ui.secondary_blue.value()])

        Executor.execute_command(cmd_value)

    def change_value_sb(self, value):
        """Changes Primary Display Blue ratio"""
        cmd_value = "xrandr\
        --output %s \
        --brightness %s\
        --gamma %s:%s:%s" % \
            (self.display2,
             self.values[self.ui.secondary_brightness.value()],
             self.values[self.ui.secondary_red.value()],
             self.values[self.ui.secondary_green.value()],
             self.values[value])
        Executor.execute_command(cmd_value)

    def changed_state(self, state):
        if state == QtCore.Qt.Checked:
            temp = self.display1
            self.display1 = self.display2
            self.display2 = temp
        else:
            temp = self.display1
            self.display1 = self.display2
            self.display2 = temp

    def secondary_source_combo_activated(self, text):
        '''
        assigns combo value to display
        '''
        self.display2 = text

    def primary_source_combo_activated(self, text):
        '''assigns combo value to display'''
        self.display1 = text

    def combo_activated(self, text):
        """ Designates values to display and to sliders """
        self.temperature = text
        if text == 'Default':
            rgb = [255, 255, 255]
            self.change_primary_sliders(rgb)
            if self.no_of_connected_dev == 2:
                self.change_secondary_sliders(rgb)

        elif text == '1900K Candle':
            rgb = [255, 147, 41]
            self.change_primary_sliders(rgb)
            if self.no_of_connected_dev == 2:
                self.change_secondary_sliders(rgb)
        elif text == '2600K 40W Tungsten':
            rgb = [255, 197, 143]
            self.change_primary_sliders(rgb)
            if self.no_of_connected_dev == 2:
                self.change_secondary_sliders(rgb)
        elif text == '2850K 100W Tungsten':
            rgb = [255, 214, 170]
            self.change_primary_sliders(rgb)
            if self.no_of_connected_dev == 2:
                self.change_secondary_sliders(rgb)
        elif text == '3200K Halogen':
            rgb = [255, 241, 224]
            self.change_primary_sliders(rgb)
            if self.no_of_connected_dev == 2:
                self.change_secondary_sliders(rgb)
        elif text == '5200K Carbon Arc':
            rgb = [255, 250, 244]
            self.change_primary_sliders(rgb)
            if self.no_of_connected_dev == 2:
                self.change_secondary_sliders(rgb)
        elif text == '5400K High Noon':
            rgb = [255, 255, 251]
            self.change_primary_sliders(rgb)
            if self.no_of_connected_dev == 2:
                self.change_secondary_sliders(rgb)
        elif text == '6000K Direct Sun':
            rgb = [255, 255, 255]
            self.change_primary_sliders(rgb)
            if self.no_of_connected_dev == 2:
                self.change_secondary_sliders(rgb)
        elif text == '7000K Overcast Sky':
            rgb = [201, 226, 255]
            self.change_primary_sliders(rgb)
            if self.no_of_connected_dev == 2:
                self.change_secondary_sliders(rgb)
        elif text == '20000K Clear Blue Sky':
            rgb = [64, 156, 255]
            self.change_primary_sliders(rgb)
            if self.no_of_connected_dev == 2:
                self.change_secondary_sliders(rgb)

    def change_primary_sliders(self, rgb):
        """
        rgb - based on the rgb array, assign values to primary display sliders
        and in turn changes primary display color
        """
        slider_r = int((rgb[0] * 100) / 255)
        slider_g = int((rgb[1] * 100) / 255)
        slider_b = int((rgb[2] * 100) / 255)

        self.ui.primary_red.setValue(slider_r)
        self.ui.primary_green.setValue(slider_g)
        self.ui.primary_blue.setValue(slider_b)

    def change_secondary_sliders(self, rgb):
        """
        rgb - based on the rgb array, assign values to
        secondary display sliders and in turn changes secondary display color
        rgb is given in array from a range of 0 to 255
        """
        slider_r = int((rgb[0] * 100) / 255)
        slider_g = int((rgb[1] * 100) / 255)
        slider_b = int((rgb[2] * 100) / 255)

        self.ui.secondary_red.setValue(slider_r)
        self.ui.secondary_green.setValue(slider_g)
        self.ui.secondary_blue.setValue(slider_b)

    def change_secondary_sliders_in_rgb_0_99(self, br_rgb):
        """
        change slider values in rgb from a range of 0 to 99 value
        for secondary monitor slider
        """
        self.ui.secondary_brightness.setValue(br_rgb[0])
        self.ui.secondary_red.setValue(br_rgb[1])
        self.ui.secondary_green.setValue(br_rgb[2])
        self.ui.secondary_blue.setValue(br_rgb[3])

    def primary_sliders_in_rgb_0_99(self, br_rgb):
        """
        change slider values in rgb from a range of 0 to 99 value
        for primary monitor sliders
        """
        self.ui.primary_brightness.setValue(br_rgb[0])
        self.ui.primary_red.setValue(br_rgb[1])
        self.ui.primary_green.setValue(br_rgb[2])
        self.ui.primary_blue.setValue(br_rgb[3])

    def secondary_sliders_in_rgb_0_99(self, br_rgb):
        """
        change slider values in rgb from a range of 0 to 99 value
        for primary monitor sliders
        """
        self.ui.secondary_brightness.setValue(br_rgb[0])
        self.ui.secondary_red.setValue(br_rgb[1])
        self.ui.secondary_green.setValue(br_rgb[2])
        self.ui.secondary_blue.setValue(br_rgb[3])

    def show_about(self):
        """ Shows the About widget"""
        self.about_widget.show()

    def show_license(self):
        """ Shows the License widget"""
        self.license_widget.show()

    def show_help(self):
        """ Shows the Help Widget"""
        self.help_widget.show()


    def save_settings(self, default=False):
        """ save current primary and secondary display settings"""
        file_path = self.default_config if default else QtGui.QFileDialog.getSaveFileName()[0]
        # just a number. path.exists won't work in case it is a new file.
        if len(file_path) > 5:
            if default:
                self.ui.actionClearDefault.setVisible(True)
            if self.no_of_connected_dev == 1:
                WriteConfig.write_primary_display(
                    self.return_current_primary_settings(),
                    file_path
                )
            elif self.no_of_connected_dev >= 2:
                WriteConfig.write_both_display(
                    self.return_current_primary_settings(),
                    self.return_current_secondary_settings(),
                    file_path

                )


    def _show_error(self, message):
        """ Shows an Error Message"""
        QtGui.QMessageBox.critical(self, 'Error', message)


    def delete_default_settings(self):
        """
        delete default settings
        """
        if path.exists(self.default_config):
            try:
                remove(self.default_config)
                self.ui.actionClearDefault.setVisible(False)
            except OSError as e:
                self._show_error(str(e))
        else:
            return False


    def _load_temperature(self, text='Default'):
        """
        Load current temperature settings
        """
        self.temperature = text
        primary_temperature_index = self.ui.comboBox.findText(
            text, QtCore.Qt.MatchFixedString)
        if primary_temperature_index >= 0:
            self.ui.comboBox.setCurrentIndex(primary_temperature_index)


    def load_settings(self, location=None):
        """
        Load current primary and secondary display settings
        """
        file_path = location or QtGui.QFileDialog.getOpenFileName()[0]
        if path.exists(file_path):
            loaded_settings = ReadConfig.read_configuration(file_path)
            if len(loaded_settings) == 5:
                self._load_temperature(loaded_settings[4])
                self.primary_sliders_in_rgb_0_99(loaded_settings)
            elif len(loaded_settings) == 11:
                # checks just in case saved settings are for two displays,
                # but loads when only one display is connected
                if self.no_of_connected_dev == 1:

                    self.primary_sliders_in_rgb_0_99(
                        (loaded_settings[0],
                         loaded_settings[1],
                         loaded_settings[2],
                         loaded_settings[3]))
                    return
                # sets reverse control
                primary_source = loaded_settings[4]
                secondary_source = loaded_settings[10]
                self._load_temperature(loaded_settings[5])
                primary_combo_index = self.ui.primary_combobox.findText(
                    primary_source, QtCore.Qt.MatchFixedString)
                second_combo_index = self.ui.secondary_combo.findText(
                    secondary_source, QtCore.Qt.MatchFixedString)
                if primary_combo_index >= 0:
                    self.ui.primary_combobox.setCurrentIndex(primary_combo_index)
                    self.primary_source_combo_activated(primary_source)
                if second_combo_index >= 0:
                    self.ui.secondary_combo.setCurrentIndex(second_combo_index)
                    self.secondary_source_combo_activated(secondary_source)

                self.primary_sliders_in_rgb_0_99(
                    (loaded_settings[0],
                     loaded_settings[1],
                     loaded_settings[2],
                     loaded_settings[3]))
                # (99, 99, 99, 99, 'LVDS-1', 99, 38, 99, 99, 'VGA-1')

                self.secondary_sliders_in_rgb_0_99(
                    (loaded_settings[6],
                     loaded_settings[7],
                     loaded_settings[8],
                     loaded_settings[9]))


    def return_current_primary_settings(self):
        """
        return p_br_rgb(primary_brightness,
        primary_red, primary_green, primary_blue)
        """
        # p_br_rgb = []
        p_br_rgb = [
            self.ui.primary_brightness.value(),
            self.ui.primary_red.value(),
            self.ui.primary_green.value(),
            self.ui.primary_blue.value(),
            self.display1,
            self.temperature
        ]

        return p_br_rgb

    def return_current_secondary_settings(self):
        """
        return s_br_rgb(secondary_brightness,
        secondary_red, secondary_green, secondary_blue)
        """
        s_br_rgb = [
            self.ui.secondary_brightness.value(),
            self.ui.secondary_red.value(),
            self.ui.secondary_green.value(),
            self.ui.secondary_blue.value(),
            self.display2
        ]
        # s_br_rgb = []
        # s_br_rgb.append(self.ui.secondary_brightness.value())
        # s_br_rgb.append(self.ui.secondary_red.value())
        # s_br_rgb.append(self.ui.secondary_green.value())
        # s_br_rgb.append(self.ui.secondary_blue.value())
        return s_br_rgb
Ejemplo n.º 55
0
class MainWindow(QMainWindow):
    connected = pyqtSignal(bool)

    def __init__(self, app):
        QMainWindow.__init__(self)
        self.app = app
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self._exit = False
        self.ui.action_Exit.triggered.connect(self.exit)
        self.ui.actionAbout_Qt.triggered.connect(app.aboutQt)
        self.setWindowIcon(QIcon(':/icons/logo32'))
        self.listener = None
        self.tray = None
        self.pusher = None
        self._connected = False

        self.settings_dlg = SettingsDlg(self)
        self.settings_dlg.saved.connect(self.reconnect)

        self.tray = PushbulletTray(self)
        self.connect_actions()
        self.connect_pushbullet()

        self.tray.show()

    def connect_actions(self):
        self.ui.action_Settings.triggered.connect(self.settings_dlg.show)
        self.ui.browseFileBtn.clicked.connect(self.choice_file)
        self.ui.action_Refresh.triggered.connect(self.refresh)
        # List Items
        self.ui.addItemBtn.clicked.connect(self.add_item_list)
        self.ui.removeItemBtn.clicked.connect(self.remove_item_list)
        self.ui.clearItemsBtn.clicked.connect(self.clear_item_list)
        self.ui.itemsList.itemDoubleClicked.connect(self.edit_item_list)

    @pyqtSlot()
    def add_item_list(self):
        item = QListWidgetItem("item", self.ui.itemsList)
        item.setFlags(item.flags() | Qt.ItemIsEditable)
        self.ui.itemsList.addItem(item)

    @pyqtSlot()
    def remove_item_list(self):
        if self.ui.itemsList.currentRow() >= 0:
            self.ui.itemsList.takeItem(self.ui.itemsList.currentRow())

    @pyqtSlot()
    def clear_item_list(self):
        self.ui.itemsList.clear()

    @pyqtSlot(QListWidgetItem)
    def edit_item_list(self, item):
        self.ui.itemsList.editItem(item)

    @pyqtSlot()
    def choice_file(self):
        file_to_send = QFileDialog.getOpenFileName(self, "choose file to send")
        if file_to_send and not file_to_send.isEmpty():
            self.ui.filePathEdt.setText(file_to_send)

    @pyqtSlot()
    def refresh(self):
        self.refresh_devices()

    @pyqtSlot()
    def refresh_devices(self):
        self.ui.devicesList.clear()
        for device in self.pusher.devices:
            device_item = QListWidgetItem(device.nickname)
            device_item.setData(Qt.UserRole, device)
            self.ui.devicesList.addItem(device_item)

    def connect_pushbullet(self):
        if config.value('key') is not None and not config.value('key').toString().isEmpty():
            proxy_host = str(config.value('proxy.host').toString())
            proxy_port, int_conv_ok = config.value('proxy.port').toInt()
            if proxy_host.strip() == '':
                proxy_host = proxy_port = None
            self.pusher = PushBullet(str(config.value('key').toString()))
            self.listener = QPushBulletListener(self, self.pusher, proxy_host, proxy_port)
            self.listener.start()
            self.connect_systray()
            self.connect_pushes_actions()
            self.refresh_devices()
            self.connected.emit(True)
            self._connected = True
        else:
            self.connected.emit(False)

    def disconnect_pushbullet(self):
        self.connected.emit(False)
        if False and self.listener is not None:
            print "systray"
            self.disconnect_systray()
            print "listener quit"
            self.listener.quit()
            print "listener terminate"
            self.listener.terminate()
            print "disconnect_pushes"
            self.disconnect_pushes_actions()
            self.listener = None


    @pyqtSlot()
    def push_note(self):
        if self.pusher and len(self.ui.devicesList.selectedItems()) == 1:
            device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject()
            device.push_note(str(self.ui.noteTitleEdt.text()), str(self.ui.noteTextEdt.toPlainText()))
        else:
            QMessageBox.warning(self, "Cannot push", "There is no target device selected")

    @pyqtSlot()
    def push_link(self):
        if self.pusher and len(self.ui.devicesList.selectedItems()) == 1:
            device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject()
            device.push_link(str(self.ui.linkTitleEdt.text()), str(self.ui.linkUrlEdt.text()))
        else:
            QMessageBox.warning(self, "Cannot push", "There is no target device selected")

    @pyqtSlot()
    def push_list(self):
        if self.pusher and len(self.ui.devicesList.selectedItems()) == 1:
            device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject()
            widget_items = [self.ui.itemsList.item(n) for n in range(0, self.ui.itemsList.count())]
            items = map(lambda x: str(x.text()), widget_items)
            device.push_list(str(self.ui.listTitleEdt.text()), items)
        else:
            QMessageBox.warning(self, "Cannot push", "There is no target device selected")

    @pyqtSlot()
    def push_file(self):
        if self.pusher and len(self.ui.devicesList.selectedItems()) == 1:
            device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject()
            fname = str(self.ui.filePathEdt.text())
            with open(fname, "rb") as f_to_send:
                success, file_data = self.pusher.upload_file(f_to_send, os.path.basename(fname))
                if success:
                    device.push_file(**file_data)
        else:
            QMessageBox.warning(self, "Cannot push", "There is no target device selected")

    @pyqtSlot()
    def push_address(self):
        if self.pusher and len(self.ui.devicesList.selectedItems()) == 1:
            device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject()
            device.push_address(str(self.ui.addressTitleEdt.text()), str(self.ui.addressTxt.toPlainText()))
        else:
            QMessageBox.warning(self, "Cannot push", "There is no target device selected")

    def connect_pushes_actions(self):
        self.ui.sendNoteBtn.clicked.connect(self.push_note)
        self.ui.sendLinkBtn.clicked.connect(self.push_link)
        self.ui.sendFileBtn.clicked.connect(self.push_file)
        self.ui.sendListBtn.clicked.connect(self.push_list)
        self.ui.sendAddressBtn.clicked.connect(self.push_address)

    def disconnect_pushes_actions(self):
        self.ui.sendNoteBtn.clicked.disconnect(self.push_note)
        self.ui.sendLinkBtn.clicked.disconnect(self.push_link)
        self.ui.sendFileBtn.clicked.disconnect(self.push_file)
        self.ui.sendListBtn.clicked.disconnect(self.push_list)
        self.ui.sendAddressBtn.clicked.disconnect(self.push_address)

    def connect_systray(self, ):
        if self.tray is not None:
            self.connected.connect(self.tray.connected)
            self.listener.on_link.connect(self.tray.on_link)
            self.listener.on_note.connect(self.tray.on_note)
            self.connected.emit(self._connected)

    def disconnect_systray(self):
        if self.tray is not None:
            self.listener.on_link.disconnect(self.tray.on_link)
            self.listener.on_note.disconnect(self.tray.on_note)

    @pyqtSlot()
    def reconnect(self):
        if self.listener is not None:
            self.disconnect_pushbullet()
        self.connect_pushbullet()

    @pyqtSlot()
    def exit(self):
        self._exit = True
        self.close()

    def closeEvent(self, event):
        if not self._exit:
            self.hide()
            event.ignore()
        else:
            QMainWindow.closeEvent(self, event)
Ejemplo n.º 56
0
class MainWindow(QMainWindow):

    scenarioRestore = pyqtSignal(QModelIndex)
    scriptUpdate = pyqtSignal()

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.targetActions = [
            self.ui.actionMarkdown,
            self.ui.actionKAG3,
            self.ui.actionNScripter,
        ]

        # constants
        self.HESTIA_ARCHIVE_FILTER = self.tr("Hestia Archive(*.hax)")

        width = self.ui.splitterScenario.width()
        w = width // 3
        m = width % 3
        self.ui.splitterScenario.setSizes([w, w*2+m])
        self.ui.splitterScript.setSizes([w, w*2+m])

        self.highlighter = ScenarioHighlighter(self.ui.textEditScenario.document())

        self.scenarioRestore.connect(self.scenarioRestored)

        self.errorMessageDialog = ErrorMessageDialog(self)

        self.previewHasReady = False
        self.glWindow = GLWindow(self)
        self.glWindow.setViewSize(1280, 720)
        self.glWindow.ready.connect(self.previewWindow_ready)
        self.glWindow.next.connect(self.previewWindow_toNext)
        self.glWindow.prev.connect(self.previewWindow_toPrev)

        self.doubleBufferObject = None

        self.initialize()

        QMetaObject.invokeMethod(self.glWindow, "show")

    def initialize(self):
        self.project = ProjectFile.create()

        self.projectModel = ProjectTreeModel(self)
        self.projectModel.projectUpdated.connect(self.projectModel_projectUpdated)

        # file selection view
        self.ui.treeViewScenario.setModel(self.projectModel)
        self.ui.treeViewStructure.setModel(self.projectModel)
        self.ui.treeViewScript.setModel(self.projectModel)
        self.scenarioSelection = self.ui.treeViewScenario.selectionModel()
        self.structureSelection = self.ui.treeViewStructure.selectionModel()
        self.scriptSelection = self.ui.treeViewScript.selectionModel()

        self.scenarioSelection.currentRowChanged.connect(self.scenarioSelection_currentRowChanged, Qt.QueuedConnection)
        self.structureSelection.currentRowChanged.connect(self.structureSelection_currentRowChanged)
        self.scriptSelection.currentRowChanged.connect(self.scriptSelection_currentRowChanged)

        # scenario structure view
        self.structureModel = StructureListModel(self)

        self.ui.listViewStructure.setModel(self.structureModel)
        self.lineSelection = self.ui.listViewStructure.selectionModel()

        self.lineSelection.currentRowChanged.connect(self.lineSelection_currentRowChanged)

        self.setProject(ProjectFile.create())

        self.initializeScenario()

    def initializeScenario(self):
        self.setCurrentScenario(Scenario.create())
        self.ui.textEditScenario.clear()
        self.scenarioSelection.setCurrentIndex(QModelIndex(), QItemSelectionModel.Clear)

    def currentIsChanged(self):
        text = qt.toUnicode(self.ui.textEditScenario.toPlainText())
        return not self.currentScenario.isSame(text)

    def open(self, filepath):
        """
        :type filepath: str
        """
        self.setProject(ProjectFile.open(filepath))

    def save(self, filepath):
        """
        :type filepath: str
        """
        assert(bool(filepath))
        filepath = self.hestiaArchiveName(filepath)
        self.project.setFilePath(filepath)
        self.project.save()
        self.setWindowModified(False)

    def setProject(self, project):
        self.project = project
        self.project.changed.connect(self.projectChanged)
        self.project.changed.connect(self.projectModel.projectUpdate)
        self.projectModel.setProject(self.project)
        self.projectModel.projectUpdate()

    def setCurrentScenario(self, scenario):
        self.currentScenario = scenario
        filepath = self.currentScenario.filePath()
        if not filepath:
            self.setWindowTitle(self.tr("Hestia [*]"))

    def getOpenFileName(self, caption, path, filter):
        """
        :rtype: str
        """
        return qt.toUnicode(QFileDialog.getOpenFileName(self, caption, path, filter))

    def getSaveFileName(self, caption, path, filter):
        """
        :rtype: str
        """
        return qt.toUnicode(QFileDialog.getSaveFileName(self, caption, path, filter))

    def hestiaArchiveName(self, filepath):
        """
        :type filepath: str
        :rtype: str
        """
        root, ext = os.path.splitext(filepath)
        if ext != HESTIA_EXT:
            return root + HESTIA_EXT
        return filepath

    def closeEvent(self, event):
        if self.project.isChanged():
            ret = QMessageBox.warning(self,
                    self.tr("Project changed"),
                    self.tr("Do you want to continue?"),
                    QMessageBox.Cancel | QMessageBox.Discard)
            if ret == QMessageBox.Cancel:
                event.ignore()
                return

    @pyqtSlot(object)
    def projectChanged(self, container):
        self.setWindowModified(True)
        if container:
            filepath = container.filePath()
            self.setWindowTitle(self.tr("%1 - Hestia [*]").arg(filepath))


    @pyqtSlot()
    def projectModel_projectUpdated(self):
        self.ui.treeViewScenario.setRootIndex(self.projectModel.index(0, 0))
        self.ui.treeViewStructure.setRootIndex(self.projectModel.index(0, 0))
        self.ui.treeViewScript.setRootIndex(self.projectModel.index(0, 0))
        self.ui.treeViewScenario.expandAll()
        self.ui.treeViewStructure.expandAll()
        self.ui.treeViewScript.expandAll()

    @pyqtSlot()
    def previewWindow_ready(self):
        # set default font
        if __debug__:
            path = os.path.join(os.path.dirname(__file__), DEFAULT_FONT)
        else:
            appDir = six.text_type(QCoreApplication.applicationDirPath())
            path = os.path.join(appDir, DEFAULT_FONT)
        if not os.path.exists(path):
            QMessageBox.critical(self,
                self.tr("Font not found"),
                self.tr("Font \"%1\" cannot open.").arg(path)
            )
            sys.exit(1)
        font = ftgl.FTPixmapFont(path.encode(DEFAULT_ENCODING))
        if not font.FaceSize(30):
            print("FaceSize error.", file=sys.stderr)
        self.glWindow.context().fontRegistry.installFont(None, font)

        # init double buffer
        self.doubleBufferObject = DoubleBufferObject()
        self.glWindow.setDoubleBufferObject(self.doubleBufferObject)

        # set to ready
        self.previewHasReady = True

    @pyqtSlot()
    def previewWindow_toNext(self):
        if not self.previewHasReady:
            return
        index = self.lineSelection.currentIndex()
        if not index.isValid():
            return
        next = index.sibling(index.row()+1, index.column())
        if not index.isValid():
            return
        self.lineSelection.setCurrentIndex(next, QItemSelectionModel.SelectCurrent)

    @pyqtSlot()
    def previewWindow_toPrev(self):
        if not self.previewHasReady:
            return
        index = self.lineSelection.currentIndex()
        if not index.isValid():
            return
        next = index.sibling(index.row()-1, index.column())
        if not index.isValid():
            return
        self.lineSelection.setCurrentIndex(next, QItemSelectionModel.SelectCurrent)

    @pyqtSlot()
    def on_actionNew_triggered(self):
        self.initialize()

    @pyqtSlot()
    def on_actionOpen_triggered(self):
        filepath = self.getOpenFileName(self.tr(""), self.tr(""), self.HESTIA_ARCHIVE_FILTER)
        if not filepath:
            return
        self.open(filepath)

    @pyqtSlot()
    def on_actionSave_triggered(self):
        filepath = self.project.filePath()
        if not filepath:
            filepath = self.getSaveFileName(self.tr(""), self.tr(""), self.HESTIA_ARCHIVE_FILTER)
            if not filepath:
                return
            filepath = self.hestiaArchiveName(filepath)
        self.save(filepath)

    @pyqtSlot()
    def on_actionSaveAs_triggered(self):
        filepath = self.getSaveFileName(self.tr(""), self.tr(""), self.HESTIA_ARCHIVE_FILTER)
        if not filepath:
            return
        self.save(filepath)

    @pyqtSlot()
    def on_actionScenarioNew_triggered(self):
        if self.currentIsChanged():
            ret = QMessageBox.warning(self,
                self.tr("Text changed"),
                self.tr("Do you want to save it?"),
                QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
            if ret == QMessageBox.Cancel:
                return
            elif ret == QMessageBox.Save:
                content = qt.toUnicode(self.ui.textEditScenario.toPlainText())
                self.currentScenario.setText(content)
        self.initializeScenario()
    
    @pyqtSlot()
    def on_actionScenarioSave_triggered(self):
        filename = self.currentScenario.filePath()
        if not filename:
            dialog = FileNameEditDialog(self)
            if dialog.exec_() != QDialog.Accepted:
                return
            filename = dialog.fileName()
            root, ext = os.path.splitext(filename)
            if ext not in [".txt", ".md"]:
                filename += DEFAULT_EXT
        # set content
        content = qt.toUnicode(self.ui.textEditScenario.toPlainText())
        self.currentScenario.setText(content)
        if self.currentScenario.filePath():
            # filename is already set
            return
        # set filepath & register
        self.currentScenario.setFilePath(filename)
        self.project.append(self.currentScenario)

    @pyqtSlot()
    def on_actionScenarioSaveAs_triggered(self):
        dialog = FileNameEditDialog(self)
        if dialog.exec_() != QDialog.Accepted:
            return
        filename = dialog.fileName()
        root, ext = os.path.splitext(filename)
        if ext not in [".txt", ".md"]:
            filename += DEFAULT_EXT
        # set content
        content = qt.toUnicode(self.ui.textEditScenario.toPlainText())
        scenario = Scenario.create()
        scenario.setText(content)
        # set filepath & register
        scenario.setFilePath(filename)
        self.project.append(scenario)
        self.setCurrentScenario(scenario)

    @pyqtSlot()
    def on_actionShowPreview_triggered(self):
        self.glWindow.show()

    @pyqtSlot(QAction)
    def on_menuTarget_triggered(self, target):
        # force checked
        target.setChecked(True)
        # Toggle target
        for action in self.targetActions:
            if action == target:
                continue
            if action.isChecked():
                action.setChecked(False)
        current = self.scriptSelection.currentIndex()
        self.showScript(current)

    @pyqtSlot(QModelIndex, QModelIndex)
    def scenarioSelection_currentRowChanged(self, current, previous):
        if not current.isValid():
            return
        currentItem = current.internalPointer()
        previousItem = previous.internalPointer()
        if not isinstance(currentItem, FileItem):
            return
        if currentItem == previousItem:
            return
        if currentItem.object.type() != ContainerType.Scenario:
            return
        if currentItem.object == self.currentScenario:
            return
        if self.currentIsChanged():
            ret = QMessageBox.information(self,
                    self.tr("Text Changed"),
                    self.tr("Do you want to save it?"),
                    QMessageBox.Save | QMessageBox.Cancel | QMessageBox.Discard)
            if ret == QMessageBox.Cancel:
                self.scenarioRestore.emit(previous)
                return
            elif ret == QMessageBox.Save:
                self.currentScenario.setText(qt.toUnicode(self.ui.textEditScenario.toPlainText()))
        self.setCurrentScenario(currentItem.object)
        self.ui.textEditScenario.setScenario(self.currentScenario)
        filepath = self.currentScenario.filePath()
        self.setWindowTitle(self.tr("%1 - Hestia [*]").arg(filepath))

    @pyqtSlot(QModelIndex, QModelIndex)
    def structureSelection_currentRowChanged(self, current, previous):
        if not current.isValid():
            return
        currentItem = current.internalPointer()
        previousItem = previous.internalPointer()
        if not isinstance(currentItem, FileItem):
            return
        root = self.indexToDOM(current)
        if root is None:
            return
        self.structureModel.setRoot(root)

    @pyqtSlot(QModelIndex, QModelIndex)
    def scriptSelection_currentRowChanged(self, current, previous):
        self.showScript(current)

    @pyqtSlot(QModelIndex)
    def showScript(self, index):
        if not index.isValid():
            self.ui.textEditScript.clear()
            return
        item = index.internalPointer()
        if not isinstance(item, FileItem):
            self.ui.textEditScript.clear()
            return
        root = self.indexToDOM(index)
        if root is None:
            self.ui.textEditScript.clear()
            return
        script = self.makeScript(root)
        self.ui.textEditScript.setPlainText(script)

    def indexToDOM(self, index):
        if not index.isValid():
            return None
        item = index.internalPointer()
        if not isinstance(item, FileItem):
            return None
        if item.object.type() != ContainerType.Scenario:
            return None
        text = item.object.text()
        xhtml = converter.toXHTML(text)
        return etree.fromstring(xhtml)

    def makeScript(self, root):
        xslt = self.currentTargetXSLT()
        return six.text_type(xslt(root))

    def currentTargetXSLT(self):
        root = qt.toUnicode(QCoreApplication.applicationDirPath())
        if __debug__:
            root = os.path.dirname(__file__)
        if self.ui.actionMarkdown.isChecked():
            return etree.XSLT(etree.parse(os.path.join(root, XSLT_MARKDOWN)))
        elif self.ui.actionKAG3.isChecked():
            return etree.XSLT(etree.parse(os.path.join(root, XSLT_KAG3)))
        elif self.ui.actionNScripter.isChecked():
            return etree.XSLT(etree.parse(os.path.join(root, XSLT_NSCRIPTER)))
        else:
            raise Exception

    @pyqtSlot(QModelIndex)
    def scenarioRestored(self, index):
        self.ui.treeViewScenario.setCurrentIndex(index)

    @pyqtSlot(QModelIndex, QModelIndex)
    def lineSelection_currentRowChanged(self, current, previous):
        if not self.previewHasReady:
            return
        if not current.isValid():
            return
        node = current.internalPointer()
        # background image
        if node.ctx.bg_img:
            texture = self.doubleBufferObject.backBuffer().backgroundTexture()
            path = node.ctx.bg_img.src
            data = self.project.loadResource(path, test_exts=[".png"])
            if data:
                obj = Image.fromData(texture, data)
                self.doubleBufferObject.setBackgroundImage(obj)
            else:
                # load failed
                self.errorMessageDialog.appendMessage(
                    self.tr('Resource "%1" not found.').arg(path)
                )
                self.errorMessageDialog.show()

        # message window
        obj = (
            LoadIdentity() &
            Ortho2DContext() &
            BlendWrapper(
                Color(0.0, 0.0, 0.0, 0.5) &
                RelativeQuad(Rect(0.0, 0.0, 1280, 300))
            )
        )
        self.doubleBufferObject.setMessageWindow(obj)

        # message
        text = self.currentText(current)
        obj = (
            LoadIdentity() &
            Ortho2DContext() &
            Color(1.0, 1.0, 1.0) &
            RasterPos(100, 200) &
            TextObject(text)
        )
        self.doubleBufferObject.setMessage(obj)

        self.doubleBufferObject.flip()

    def currentText(self, current):
        item = self.structureModel.data(current)
        return six.text_type(item)
Ejemplo n.º 57
0
class MainWindow(QMainWindow):
    
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.mainwindow = Ui_MainWindow()
        self.mainwindow.setupUi(self)
        self.current_list = session.query(List).filter_by(name=u'Default').one()
        self.load_data()
        self.editor = Editor(self)
        self.editor.hide()
        logging.basicConfig(level=logging.DEBUG)
        
        
    def load_data(self):
        tasks = session.query(Task).filter_by(taskList=self.current_list)
        tv = self.mainwindow.treeView
        model = QStandardItemModel()
        model.setHorizontalHeaderLabels(['Task', 'Description', 'Date due'])
        
        for task in tasks:
            items = []

            it = QStandardItem(QIcon('ui/priority-{0}.png'.format(task.priority)),task.title)
            it.setData(task.title, Qt.DisplayRole)
            it.task = task
            it.column_name = 'title'
            it.setCheckable(True)
            if task.completed:
                it.setCheckState(Qt.CheckState.Checked)
            else:
                it.setCheckState(Qt.CheckState.Unchecked)
            items.append(it)
            
            it = QStandardItem()
            it.setData(task.description, Qt.DisplayRole)
            it.task = task
            it.column_name = 'description'
            items.append(it)
            
            it = QStandardItem()
            it.setData(str(task.date_due), Qt.DisplayRole)
            it.task = task
            it.column_name = 'date_due'
            items.append(it)
            
            model.appendRow(items)
            
        tv.setModel(model)
        tv.sortByColumn(2, Qt.SortOrder.AscendingOrder)
        tv.setColumnWidth(0, 120)
        tv.setColumnWidth(1, 300)
        tv.setColumnWidth(2, 165)
        tv.setIndentation(0)
        model.dataChanged.connect(self.item_data_changed)
        tv.selectionModel().currentChanged.connect(self.task_selection_changed)
        self.mainwindow.actionDelete_Task.triggered.connect(self.delete_task_action)
        self.mainwindow.actionEdit_Task.triggered.connect(self.edit_task_action)
        self.mainwindow.actionNew_Task.triggered.connect(self.new_task_action)
        self.mainwindow.action_Exit.triggered.connect(self.exit_action)
        
        
    def item_data_changed(self, item):
        if item.column() == 0:
            print('Ignoring item_data_changed... column was 0')
            return
        
        item = self.mainwindow.treeView.model().itemFromIndex(self.mainwindow.treeView.currentIndex())
        if item.checkState():
            item.task.completed = True
        else:
            item.task.completed = False
        setattr(item.task, item.column_name, item.data(Qt.DisplayRole))
        self.mainwindow.treeView.model().item(item.row(), 0).setIcon(QIcon('ui/priority-{0}.png'.format(item.task.priority)))
        session.commit()
        
    def delete_task_action(self,checked=None):
        idx = self.mainwindow.treeView.currentIndex()
        # First, get the 'current' task
        item = self.mainwindow.treeView.model().itemFromIndex(idx)
        # if none selected, do nothing
        if not item:
            logging.debug('No item selected, returning...')
            return
        # Delete the task
        item.task.delete()
        session.commit()
        self.mainwindow.treeView.model().removeRow(idx.row())
        
    def new_task_action(self,checked=None):
        # Open the task in the editor
        self.editor.action = 'new_task'
        self.editor.edit(Task(taskList=self.current_list), self.mainwindow.treeView.model())
        
    def number_of_tasks(self):
        return session.query(Task).count()
        
    def edit_task_action(self,checked=None):
        # Open the task in the editor
        self.editor.action = 'edit_task'
        currentItem = self.mainwindow.treeView.model().itemFromIndex(self.mainwindow.treeView.currentIndex())
        self.editor.edit(currentItem.task, self.mainwindow.treeView.model())
        
    def exit_action(self):
        sys.exit()
        
    def task_selection_changed(self, current, previous):
        self.mainwindow.actionDelete_Task.setEnabled(True if current else False)