Esempio n. 1
0
class MplWidget(QWidget):
    def __init__(self, parent):
        QWidget.__init__(self, parent) 
        self.layout = QVBoxLayout()
        self.setLayout(self.layout)
        self.fig = Figure(figsize=(1,1), dpi=10)
        _ = self.fig.add_subplot(111)
        self.linea = []


    def cargarGrafico(self, x_data, y_data):
        for i in reversed(range(self.layout.count())): 
            self.layout.itemAt(i).widget().setParent(None)
        fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 8))
        self.linea, = ax.plot(x_data,y_data,'',alpha=0.8)
        self.canvas = FigureCanvas(fig)    
        self.layout.addWidget(self.canvas)
        self.canvas.draw()

    def cargarGraficoDinamico(self, x_data, y_data, epocas_max, linea):
        self.linea = linea
        if self.linea == []:  
            for i in reversed(range(self.layout.count())): 
                self.layout.itemAt(i).widget().setParent(None)
            plt.xlim(0,epocas_max)
            fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 8))
            self.linea, = ax.plot(x_data,y_data,'',alpha=0.8)
            self.canvas = FigureCanvas(fig)    
            self.layout.addWidget(self.canvas)
            self.canvas.draw()
        else:
            self.linea.set_ydata(y_data)
            self.linea.set_xdata(x_data)
            self.canvas.draw()
        return self.linea
Esempio n. 2
0
class LogWidget(QWidget):
    ''' docstring: 统一处理和显示折叠消息盒 '''
    def __init__(self, parent=None):
        super().__init__(parent)
        self.lay = QVBoxLayout(self)
        self.scrollarea = QScrollArea()
        self.lay.addWidget(self.scrollarea)
        self.content = QWidget()
        self.scrollarea.setWidget(self.content)
        self.scrollarea.setWidgetResizable(True)

        self.contentarea = QVBoxLayout(self.content)
        self.contentarea.addStretch()

        # 设置区间范围改变信号
        self.scrollarea.verticalScrollBar().rangeChanged.connect(
            self.modifyBarValue)

    def modifyBarValue(self, min, max):
        if self.modifytime:
            bar = self.scrollarea.verticalScrollBar()
            bar.setValue(max)
            self.modifytime -= 1
            # print(bar.maximum(), bar.minimum(), bar.value(), self.modifytime)

    def addLog(self, title, message, flag=False):
        ''' docstring: 添加日志消息,默认选项卡关闭 '''
        index = self.contentarea.count()
        box = CollapsibleMessageBox(Title=title,
                                    defaultLayout=True,
                                    Message=message)
        self.contentarea.insertWidget(index - 1, box)
        if flag:
            box.toggle_button.animateClick()
        self.modifytime = 1
Esempio n. 3
0
class ToolStation(FixedWidthFrame):
    def __init__(self, controller, model):
        self.controller = controller
        self.model = model
        self.width = self.model.view_data.width
        super().__init__(self.width)

        self._init__UI()

    def _init__UI(self):
        self.layout = QVBoxLayout()
        self.layout.setSpacing(4)
        self.layout.setContentsMargins(1, 1, 1, 1)
        self.layout.setAlignment(Qt.AlignTop)

        self.setLayout(self.layout)
        self._add_all_widgets()

    def set_data(self):
        self._remove_all_widgets()
        self._add_all_widgets()

    def _add_all_widgets(self) -> None:
        widgets = self.model.view_data.tools
        for widget in widgets:
            seperator = FixedSizeLabel(self.width - 12, 1)
            seperator.set_colours(Colour(240, 240, 240), Colour(240, 240, 240))
            self.layout.addWidget(widget, alignment=Qt.AlignHCenter)
            self.layout.addWidget(seperator, alignment=Qt.AlignHCenter)

    def _remove_all_widgets(self) -> None:
        for index in reversed(range(self.layout.count())):
            widget = self.layout.itemAt(index).widget()
            self.layout.removeWidget(widget)
Esempio n. 4
0
class ViewWidget(QWidget):
    background_color = "#424A52"
    WIDTH = Settings.WIDTH.value
    HEIGHT = Settings.HEIGHT.value

    def __init__(self):
        super(ViewWidget, self).__init__()
        self.v_layout = QVBoxLayout()

    def init_gui(self):
        self.setGeometry(0, 0, Settings.WIDTH.value, Settings.HEIGHT.value)
        self.setLayout(self.v_layout)
        self.setContentsMargins(0, 0, 0, 0)
        self.setStyleSheet("background-color: %s;"
                           "color:#FFFFFF" % self.background_color)

    def init_main_layout(self):
        self.v_layout.setAlignment(Qt.AlignTop)
        self.v_layout.setDirection(QVBoxLayout.TopToBottom)
        self.v_layout.setSpacing(0)
        self.v_layout.setContentsMargins(0, 0, 0, 0)

    def clear_layout(self):
        for i in reversed(range(self.v_layout.count())):
            self.v_layout.itemAt(i).widget().setParent(None)
Esempio n. 5
0
    def __init__(self, *args, **kwargs):
        super(AboutDialog, self).__init__(*args, **kwargs)
        self.setWindowTitle("About %s" % self.title)
        quitButton = QDialogButtonBox.Ok
        self.buttonBox = QDialogButtonBox(quitButton)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)

        layout = QVBoxLayout()

        title = QLabel(self.title)
        font = title.font()
        font.setPointSize(20)
        title.setFont(font)

        layout.addWidget(title)

        logo = QLabel()
        logo.setPixmap(QPixmap(os.path.join('icons', 'ma-icon-128.png')))
        layout.addWidget(logo)

        layout.addWidget(QLabel(self.dev_info))

        for i in range(0, layout.count()):
            layout.itemAt(i).setAlignment(Qt.AlignHCenter)

        layout.addWidget(self.buttonBox)

        self.setLayout(layout)
        self.setVisible(True)
Esempio n. 6
0
class PluginController(QFrame):
    def __init__(self, plugins, highlighted_plugins=None, parent=None):
        """
        :type plugins: list of Plugin
        :type highlighted_plugins: list of Plugin
        """
        super().__init__(parent)
        self.ui = Ui_FramePlugins()
        self.ui.setupUi(self)
        self.model = PluginListModel(plugins,
                                     highlighted_plugins=highlighted_plugins)
        self.ui.listViewPlugins.setModel(self.model)
        self.settings_layout = QVBoxLayout()
        self.ui.groupBoxSettings.setLayout(self.settings_layout)
        self.create_connects()

    def create_connects(self):
        self.ui.listViewPlugins.selectionModel().selectionChanged.connect(
            self.handle_list_selection_changed)

    def save_enabled_states(self):
        for plugin in self.model.plugins:
            constants.SETTINGS.setValue(plugin.name, plugin.enabled)

    @pyqtSlot()
    def handle_list_selection_changed(self):
        i = self.ui.listViewPlugins.currentIndex().row()
        self.ui.txtEditPluginDescription.setText(
            self.model.plugins[i].description)
        self.model.plugins[i].load_settings_frame()

        if self.settings_layout.count() > 0:
            self.settings_layout.takeAt(0).widget().setParent(None)

        self.settings_layout.addWidget(self.model.plugins[i].settings_frame)
Esempio n. 7
0
class VarPositionalParser(QScrollArea):
    def __init__(self, loadSaved=False):
        super().__init__()
        self.arg_list = []
        self.mainWidget = QWidget()

        self.layout = QVBoxLayout(self.mainWidget)

        self.layout.setSizeConstraint(QLayout.SetFixedSize)
        self.argName = QLabel('args*')

        self.button_line = QWidget()
        self.button_line_layout = QHBoxLayout(self.button_line)

        self.addButton = QPushButton()
        self.addButton.setIcon(self.style().standardIcon(QStyle.SP_ArrowDown))

        self.removeButton = QPushButton()
        self.removeButton.setIcon(self.style().standardIcon(QStyle.SP_ArrowUp))

        self.button_line_layout.addWidget(self.addButton)
        self.button_line_layout.addWidget(self.removeButton)

        self.layout.addWidget(self.argName)
        self.layout.addWidget(self.button_line)
        # BAUSTELLE
        # wird durch edit->methodChanged->updateParams und edit->updateParams aufgerufen()

        self.addButton.clicked.connect(self.addArgument)
        self.removeButton.clicked.connect(self.removeArgument)

        #self.setLayout(self.layout)
        self.setWidget(self.mainWidget)
        self.setWidgetResizable(True)

    def addArgument(self, argName=None, argValue=None):

        argument = VarArg()

        if argName:
            argument.s_arg_name = argName

        if argValue:
            argument.s_arg_val = argValue

        # this is called when loading saved arguments
        if argName or argValue:
            argument.setText()

        self.layout.insertWidget(self.layout.count() - 1, argument)
        self.arg_list.append(argument)

    def removeArgument(self):

        #self.layout.removeWidget(self.lastAddedArgument)
        if self.arg_list:
            lastAddedArgument = self.arg_list[-1]
            lastAddedArgument.deleteLater()
            lastAddedArgument = None
            del self.arg_list[-1]
Esempio n. 8
0
class ImageBook(QWidget):

    def __init__(self, image_set):
        super().__init__()
        self.title = 'Network Results Flipbook'
        self.results = image_set

        self.left = 0
        self.top = 0
        self.width = 600
        self.height = 400
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.layout = QVBoxLayout(self)
        self.displayWidget = QFrame(self)
        self.canvasLayout = QVBoxLayout()
        self.displayWidget.setLayout(self.canvasLayout)

        self.chooseWidget = QComboBox(self)
        self.chooseWidget.activated.connect(self.result_choice)
        self.chooseWidget.addItems(self.results.keys())

        self.layout.addWidget(self.displayWidget)
        self.layout.addWidget(self.chooseWidget)

        self.show()

    def result_choice(self, text):
        for i in reversed(range(self.canvasLayout.count())):
            self.canvasLayout.itemAt(i).widget().setParent(None)
        self.canvasLayout.addWidget(self.results[str(text)])
        self.show()
Esempio n. 9
0
class PlanCropRotationView(ViewWidget):
    year = None

    def __init__(self):
        super().__init__()
        self.v_layout = QVBoxLayout()
        self.q_line_edit = QLineEdit()
        self.model = PlanCropRotationModel(self)
        self.table = QTableView()
        self.controller = PlanCropRotationController(self, self.model)
        self.init_gui()
        self.init_main_layout()
        self.init_input_form()

    def init_input_form(self):
        label = QLabel()
        label.setText("Введите год")
        label.setStyleSheet("font-size:20px;" "color:#FFFFFF")
        self.v_layout.addWidget(label, 0, Qt.AlignCenter)
        self.q_line_edit.setMaximumWidth(100)
        self.q_line_edit.setStyleSheet("text-align:center;" "color: #FFFFFF")
        self.q_line_edit.keyReleaseEvent = self.controller.key_input_form_event
        self.v_layout.addWidget(self.q_line_edit, 0, Qt.AlignCenter)

    def show_table(self):
        self.table.setStyleSheet("selection-background-color: #0f5b8d;"
                                 "background-color: #505052;"
                                 "color: #f0f4f7;"
                                 "font-size:14px;"
                                 "gridline-color:#324148;"
                                 "text-align:center;")
        self.table.horizontalHeader().setStyleSheet("background-color:#3b3b3d")
        self.table.setModel(self.model)
        self.table.keyReleaseEvent = self.controller.key_input
        for i in range(4):
            self.table.setColumnWidth(i, 240)
        self.table.setModel(self.model)
        self.table.setEditTriggers(QAbstractItemView.DoubleClicked)
        self.v_layout.addWidget(self.table)

    def show_nothing(self):
        label = QLabel("Ничего не найдено")
        label.setAlignment(Qt.AlignCenter)
        label.setStyleSheet("font-size:20px;"
                            "color: #FFFFFF;"
                            "background-color:#505052")
        self.v_layout.addWidget(label)

    def update_view(self):
        self.clear_layout()
        if self.year is not None:
            self.model.update(self.year)
            self.init_input_form()
            self.show_table()
        else:
            self.init_input_form()

    def clear_layout(self):
        for i in reversed(range(self.v_layout.count())):
            self.v_layout.itemAt(i).widget().setParent(None)
Esempio n. 10
0
class Bip39RecoveryDialog(WindowModalDialog):

    ROLE_ACCOUNT = Qt.UserRole

    def __init__(self, parent: QWidget, get_account_xpub, on_account_select):
        self.get_account_xpub = get_account_xpub
        self.on_account_select = on_account_select
        WindowModalDialog.__init__(self, parent, _('BIP39 Recovery'))
        self.setMinimumWidth(400)
        vbox = QVBoxLayout(self)
        self.content = QVBoxLayout()
        self.content.addWidget(
            QLabel(_('Scanning common paths for existing accounts...')))
        vbox.addLayout(self.content)
        self.ok_button = OkButton(self)
        self.ok_button.clicked.connect(self.on_ok_button_click)
        self.ok_button.setEnabled(False)
        vbox.addLayout(Buttons(CancelButton(self), self.ok_button))
        self.finished.connect(self.on_finished)
        self.show()
        self.thread = TaskThread(self)
        self.thread.finished.connect(self.deleteLater)  # see #3956
        self.thread.add(self.recovery, self.on_recovery_success, None,
                        self.on_recovery_error)

    def on_finished(self):
        self.thread.stop()

    def on_ok_button_click(self):
        item = self.list.currentItem()
        account = item.data(self.ROLE_ACCOUNT)
        self.on_account_select(account)

    def recovery(self):
        network = Network.get_instance()
        coroutine = account_discovery(network, self.get_account_xpub)
        return network.run_from_another_thread(coroutine)

    def on_recovery_success(self, accounts):
        self.clear_content()
        if len(accounts) == 0:
            self.content.addWidget(QLabel(_('No existing accounts found.')))
            return
        self.content.addWidget(QLabel(_('Choose an account to restore.')))
        self.list = QListWidget()
        for account in accounts:
            item = QListWidgetItem(account['description'])
            item.setData(self.ROLE_ACCOUNT, account)
            self.list.addItem(item)
        self.list.clicked.connect(lambda: self.ok_button.setEnabled(True))
        self.content.addWidget(self.list)

    def on_recovery_error(self, exc_info):
        self.clear_content()
        self.content.addWidget(QLabel(_('Error: Account discovery failed.')))
        _logger.error(f"recovery error", exc_info=exc_info)

    def clear_content(self):
        for i in reversed(range(self.content.count())):
            self.content.itemAt(i).widget().setParent(None)
Esempio n. 11
0
    def __init__(self, *args, **kwargs):
        super(AboutDialog, self).__init__(*args, **kwargs)

        QBtn = QDialogButtonBox.Ok
        self.buttonBox = QDialogButtonBox(QBtn)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)

        layout = QVBoxLayout()

        # Title label
        title = QLabel("PyBrowse")
        font = title.font()
        font.setPointSize(20)
        title.setFont(font)
        layout.addWidget(title)

        # Icon Label/Pixmap
        logo = QLabel()
        logo.setPixmap(QPixmap(os.path.join('images', 'ma-icon-128.png')))
        layout.addWidget(logo)

        # More info Labels
        layout.addWidget(QLabel("Version 2020.1.0p67"))
        layout.addWidget(QLabel("Copyright 2020 HipyCas"))

        for i in range(0, layout.count()):
            layout.itemAt(i).setAlignment(Qt.AlignHCenter)

        layout.addWidget(self.buttonBox)

        self.setLayout(layout)
Esempio n. 12
0
    def btnSearch_on_clicked(self, checked):
        print('1')
        gbox = self.findChild(QGroupBox, 'gboxStockInfoList')
        print('2')

        # find vbox previous defined
        vbox = self.findChild(QVBoxLayout, 'vboxStockInfoList')
        if vbox is None:
            # init vbox
            vbox = QVBoxLayout()
            vbox.setObjectName('vboxStockInfoList')
        else:
            # delete child widgets
            for i in reversed(range(vbox.count())):
                vbox.itemAt(i).widget().deleteLater()

        fldKeyword = self.findChild(QLineEdit, 'keyword')
        sKeyword = fldKeyword.text()
        df_code_list = getDataCodeName(sKeyword)
        for code in df_code_list['code']:
            print(code)
            dict_stock_info = get_stock_realtime_info(code)
            # df_stock_info = pd.DataFrame([dict_stock_info])
            # print(dict_stock_info)
            hbox = self.drawStockInfo(dict_stock_info)
            wgt_new_stock_info = QWidget()
            wgt_new_stock_info.setLayout(hbox)
            vbox.addWidget(wgt_new_stock_info)
        gbox.setLayout(vbox)
Esempio n. 13
0
    def __init__(self, *args, **kwargs):
        super(AboutDialog, self).__init__(*args, **kwargs)

        QBtn = QDialogButtonBox.Ok  # No cancel
        self.buttonBox = QDialogButtonBox(QBtn)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)

        layout = QVBoxLayout()

        title = QLabel("CRIO")
        font = title.font()
        font.setPointSize(20)
        title.setFont(font)

        layout.addWidget(title)

        logo = QLabel()
        logo.setPixmap(QPixmap(os.path.join('images', 'ma-icon-128.png')))
        layout.addWidget(logo)

        layout.addWidget(QLabel("Copyright 2019 CRIO"))

        for i in range(0, layout.count()):
            layout.itemAt(i).setAlignment(Qt.AlignHCenter)

        layout.addWidget(self.buttonBox)

        self.setLayout(layout)
    def __init__(self, *args, **kwargs):
        super(HelpDialog, self).__init__(*args, **kwargs)

        QBtn = QDialogButtonBox.Ok
        self.buttonBox = QDialogButtonBox(QBtn)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)

        layout = QVBoxLayout()

        title = QLabel('Lab Control System')
        font = title.font()
        font.setPointSize(20)
        title.setFont(font)

        layout.addWidget(title)

        logo = QLabel()
        logo.setPixmap(QPixmap(os.path.join('images', 'tools.png')))
        layout.addWidget(logo)

        layout.addWidget(QLabel("Version 23.35.211.233232"))
        layout.addWidget(self.buttonBox)

        for i in range(0, layout.count()):
            layout.itemAt(i).setAlignment(Qt.AlignHCenter)

        self.setLayout(layout)
Esempio n. 15
0
class DirList(QWidget):
	"""DirList UI control
	"""
	def __init__(self, values, onChange=None, rowType=DirectoryLocal):
		super().__init__()
		self.rowType = rowType

		self.scroll = QScrollArea(self)
		self.scroll.setWidgetResizable(True)
		self.scroll.setFrameShape(QFrame.NoFrame)

		layout = QVBoxLayout(self.scroll)
		self.list = QVBoxLayout()
		self.button = QPushButton('Add')

		self.button.clicked.connect(self.on_click)

		layout.addLayout(self.list)
		layout.addWidget(self.button)
		layout.addStretch()

		widget = QWidget()
		widget.setLayout(layout)
		self.scroll.setWidget(widget)

		self.layout = layout
		self.onChange = onChange

		for value in values:
			self.add(value)

	def resizeEvent(self, _):
		self.scroll.setFixedWidth(self.width())
		self.scroll.setFixedHeight(self.height())

	def on_click(self):
		self.add(None)

	def add(self, value):
		self.list.addWidget(Row(self, value, self.rowType))

	def save(self):
		if self.onChange:
			self.onChange(self)

	def removeWidget(self, widget):
		self.list.removeWidget(widget)
		widget.setParent(None)

		self.save()

	def count(self):
		return self.list.count()

	def itemAt(self, i):
		return self.list.itemAt(i)

	def getValue(self, i):
		return self.itemAt(i).widget().getValue()
Esempio n. 16
0
class InstallPage(QWidget):
    """Settings page for the installed plugins"""
    def __init__(self, parent, repo):
        """QWidget Dictionary -> Void
        Consumes the parent and the repository dictionary and sets up the
        install page in the settings area"""
        QWidget.__init__(self, parent)
        self._userPlugins = helper.getPlugins()
        self._repo = repo

        # Add a scrollArea that if they are more plugins that fit into the
        # settings page
        scrollArea = QScrollArea(self)
        scrollArea.setWidgetResizable(True)
        scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        baseLayout = QVBoxLayout()
        baseLayout.setAlignment(Qt.AlignTop)
        self.setLayout(baseLayout)
        baseWidget = QWidget()
        scrollArea.setWidget(baseWidget)
        baseLayout.addWidget(scrollArea)

        self._vbox = QVBoxLayout()
        baseWidget.setLayout(self._vbox)

    def update(self, userPlugins):
        """ListOfUserpluginEntry -> Void
        Consume a list of UserpluginEntry and repopulates the install page"""
        for i in reversed(range(self._vbox.count())):
            try:
                self._vbox.itemAt(i).widget().setParent(None)
            except AttributeError as e:
                qWarning("Can't call setParent of None type")

        labelText = "<h2>Install Plugins</h2>"
        if (len(self._repo["plugins"]) < 1):
            labelText += "<p>It seems we could not load the plugin repository.</p>"
            labelText += "<p style='color:red'>Make shure your internet connection is working and restart Enki.</p><p></p>"
        self._vbox.addWidget(QLabel(labelText))

        for entry in self._repo["plugins"]:
            isInstalled = helper.isPluginInstalled(entry["name"], userPlugins)
            if isInstalled:
                self._vbox.addWidget(pluginspage.PluginTitlecard(isInstalled))
            else:
                self._vbox.addWidget(InstallableTitlecard(entry, self))

    def addPluginToUserPlugins(self, installableTitlecard):
        """InstallableTitlecard -> Void
        Consumes an InstallableTitlecard and insert an PluginTitleCard instead
        of itself"""
        index = self._vbox.indexOf(installableTitlecard)
        name = installableTitlecard.modulename()
        pluginEntry = helper.initPlugin(name)

        if pluginEntry:
            self._userPlugins.append(pluginEntry)
            self._vbox.insertWidget(index,
                                    pluginspage.PluginTitlecard(pluginEntry))
Esempio n. 17
0
class InstallPage(QWidget):
    """Settings page for the installed plugins"""
    def __init__(self, parent, repo):
        """QWidget Dictionary -> Void
        Consumes the parent and the repository dictionary and sets up the
        install page in the settings area"""
        QWidget.__init__(self, parent)
        self._userPlugins = helper.getPlugins()
        self._repo = repo

        # Add a scrollArea that if they are more plugins that fit into the
        # settings page
        scrollArea = QScrollArea(self)
        scrollArea.setWidgetResizable(True)
        scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        baseLayout = QVBoxLayout()
        baseLayout.setAlignment(Qt.AlignTop)
        self.setLayout(baseLayout)
        baseWidget = QWidget()
        scrollArea.setWidget(baseWidget)
        baseLayout.addWidget(scrollArea)

        self._vbox = QVBoxLayout()
        baseWidget.setLayout(self._vbox)

    def update(self, userPlugins):
        """ListOfUserpluginEntry -> Void
        Consume a list of UserpluginEntry and repopulates the install page"""
        for i in reversed(range(self._vbox.count())):
            try:
                self._vbox.itemAt(i).widget().setParent(None)
            except AttributeError as e:
                qWarning("Can't call setParent of None type")

        labelText = "<h2>Install Plugins</h2>"
        if (len(self._repo["plugins"]) < 1):
            labelText += "<p>It seems we could not load the plugin repository.</p>"
            labelText += "<p style='color:red'>Make shure your internet connection is working and restart Enki.</p><p></p>"
        self._vbox.addWidget(QLabel(labelText))

        for entry in self._repo["plugins"]:
            isInstalled = helper.isPluginInstalled(entry["name"], userPlugins)
            if isInstalled:
                self._vbox.addWidget(pluginspage.PluginTitlecard(isInstalled))
            else:
                self._vbox.addWidget(InstallableTitlecard(entry, self))

    def addPluginToUserPlugins(self, installableTitlecard):
        """InstallableTitlecard -> Void
        Consumes an InstallableTitlecard and insert an PluginTitleCard instead
        of itself"""
        index = self._vbox.indexOf(installableTitlecard)
        name = installableTitlecard.modulename()
        pluginEntry = helper.initPlugin(name)

        if pluginEntry:
            self._userPlugins.append(pluginEntry)
            self._vbox.insertWidget(index,
                                    pluginspage.PluginTitlecard(pluginEntry))
Esempio n. 18
0
class LocalButtonsConf(OptionsDialogGroupBox):
    def __init__(self, name, main):
        self.main = main
        OptionsDialogGroupBox.__init__(self, name, main)
        self.buttonBox = QGroupBox("Pins")
        self.buttonBoxLayout = QVBoxLayout()
        self.buttonBox.setLayout(self.buttonBoxLayout)

    def initUI(self):
        vbox = QVBoxLayout()
        self.polBox = QCheckBox("Invert")
        vbox.addWidget(self.polBox)
        self.buttongroup = QButtonGroup()
        self.buttongroup.setExclusive(False)
        vbox.addWidget(self.buttonBox)

        self.setLayout(vbox)

    def initButtons(self, num):
        #delete buttons
        self.num = num

        # Remove buttons
        for i in range(self.buttonBoxLayout.count()):
            b = self.buttonBoxLayout.takeAt(0)
            self.buttonBoxLayout.removeItem(b)
            b.widget().deleteLater()
        for b in self.buttongroup.buttons():
            self.buttongroup.removeButton(b)

        self.buttonBox.update()

        for i in range(self.num):
            cb = QCheckBox(str(i + 1))
            self.buttongroup.addButton(cb, i)
            self.buttonBoxLayout.addWidget(cb)

        def localcb(mask):
            for i in range(self.num):
                self.buttongroup.button(i).setChecked(mask & (1 << i))

        self.main.comms.serialGetAsync("local_btnmask?", localcb, int)

    def apply(self):
        mask = 0
        for i in range(self.num):
            if (self.buttongroup.button(i).isChecked()):
                mask |= 1 << i
        self.main.comms.serialWrite("local_btnmask=" + str(mask))
        self.main.comms.serialWrite("local_btnpol=" +
                                    ("1" if self.polBox.isChecked() else "0"))

    def readValues(self):
        self.main.comms.serialGetAsync("local_btnpins?", self.initButtons, int)

        self.main.comms.serialGetAsync("local_btnpol?", self.polBox.setChecked,
                                       int)
class AnalogInputConf(OptionsDialogGroupBox):
    analogbtns = QButtonGroup()
    axes = 0

    def __init__(self, name, main):
        self.main = main
        OptionsDialogGroupBox.__init__(self, name, main)
        self.analogbtns.setExclusive(False)
        self.buttonBox = QGroupBox("Pins")
        self.buttonBoxLayout = QVBoxLayout()
        self.buttonBox.setLayout(self.buttonBoxLayout)

    def initUI(self):
        layout = QVBoxLayout()
        self.autorangeBox = QCheckBox("Autorange")
        layout.addWidget(self.autorangeBox)
        layout.addWidget(self.buttonBox)
        self.setLayout(layout)

    def readValues(self):
        self.main.comms.serialGetAsync("local_ain_num?", self.createAinButtons,
                                       int)
        self.main.comms.serialGetAsync("local_ain_acal?",
                                       self.autorangeBox.setChecked, int)

    def createAinButtons(self, axes):
        self.axes = axes

        # remove buttons
        for i in range(self.buttonBoxLayout.count()):
            b = self.buttonBoxLayout.takeAt(0)
            self.buttonBoxLayout.removeItem(b)
            b.widget().deleteLater()
        for b in self.analogbtns.buttons():
            self.analogbtns.removeButton(b)

        # add buttons
        for i in range(axes):
            btn = QCheckBox(str(i + 1), self)
            self.analogbtns.addButton(btn, i)
            self.buttonBoxLayout.addWidget(btn)

        def f(axismask):
            for i in range(self.axes):
                self.analogbtns.button(i).setChecked(axismask & (1 << i))

        self.main.comms.serialGetAsync("local_ain_mask?", f, int)

    def apply(self):
        mask = 0
        for i in range(self.axes):
            if (self.analogbtns.button(i).isChecked()):
                mask |= 1 << i
        self.main.comms.serialWrite("local_ain_mask=" + str(mask))
        self.main.comms.serialWrite("local_ain_acal=" + (
            "1" if self.autorangeBox.isChecked() else "0"))
class NavigationContainer(QWidget):
    def __init__(self, parent=None):
        super(NavigationContainer, self).__init__(parent)
        self._layout = None  # QVBoxLayout
        self._tabBar = None  # TabBar
        self._layout = QVBoxLayout(self)
        self._layout.setContentsMargins(0, 0, 0, 0)
        self._layout.setSpacing(0)
        self.setLayout(self._layout)

        self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)

    def addWidget(self, widget):
        '''
        @param: widget QWidget
        '''
        self._layout.addWidget(widget)

    def setTabBar(self, tabBar):
        '''
        @param: tabBar TabBar
        '''
        self._tabBar = tabBar
        self._layout.addWidget(self._tabBar)

        self.toggleTabsOnTop(gVar.qzSettings.tabsOnTop)

    def toggleTabsOnTop(self, enable):
        self.setUpdatesEnabled(False)

        self._layout.removeWidget(self._tabBar)
        index = 0
        if not enable:
            index = self._layout.count()
        self._layout.insertWidget(index, self._tabBar)
        top = enable and 2 or 0
        bottom = enable and 2 or 0
        self._layout.setContentsMargins(0, top, 0, bottom)

        self.setUpdatesEnabled(True)

    # private:
    # override
    def paintEvent(self, event):
        '''
        @param: event QPaintEvent
        '''
        super(NavigationContainer, self).paintEvent(event)
        # Draw line at the bottom of navigation bar if tabs are on top
        # To visually distinguish navigation bar from the page
        if gVar.qzSettings.tabsOnTop:
            p = QPainter(self)
            lineRect = QRect(0, self.height() - 1, self.width(), 1)
            color = self.palette().window().color().darker(125)
            p.fillRect(lineRect, color)
Esempio n. 21
0
class SelectData(QWidget):
    def __init__(self, HDV):
        QWidget.__init__(self)

        self.HDV = HDV
        self.data_items = list()

        self._initUI()

        self.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowCloseButtonHint)

    def _initUI(self):

        self.setGeometry(350, 350, 400, 300)
        self.setWindowTitle('Select Data')
        # self.setStyleSheet("background-color: gray;")

        self._make_widgets()
        self._make_layout()
        self._make_connect()

    def closeEvent(self, event):

        pass

    def _make_widgets(self):

        pass

    def _make_layout(self):

        self.layout = QVBoxLayout(self)
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.addStretch()

    def _make_connect(self):

        pass
        # self.dataTree.itemChanged.connect(self.onChangeHandler)

    def addFolder(self, folder):

        pass

    def add_data_handle(self, data_handle):

        self.data_items.append(DataListItem(data_handle, parent=self))
        data_handle.set_data_item(self.data_items[-1])
        self.layout.insertWidget(self.layout.count() - 1, self.data_items[-1])

    def remove_data_handle(self, data_handle):

        self.layout.removeWidget(data_handle.data_item)
        self.data_items.remove(data_handle.data_item)
        data_handle.data_item.deleteLater()
Esempio n. 22
0
class QTrapWidget(QFrame):
    """Controls for all traps."""
    def __init__(self, *args, **kwargs):
        super(QTrapWidget, self).__init__(*args, **kwargs)
        self.properties = dict()
        self.init_ui()

    def init_ui(self):
        self.setFrameShape(QFrame.Box)
        inner = QWidget()
        self.layout = QVBoxLayout()
        self.layout.setSpacing(0)
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.setAlignment(Qt.AlignTop)
        inner.setLayout(self.layout)
        scroll = QScrollArea()
        scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        scroll.setWidgetResizable(True)
        scroll.setWidget(inner)
        layout = QVBoxLayout(self)
        layout.addWidget(scroll)
        self.setLayout(layout)
        self.layout.addWidget(self.labelLine())

    def labelLine(self):
        widget = QWidget()
        layout = QHBoxLayout()
        layout.setAlignment(Qt.AlignLeft)
        layout.setSpacing(0)
        layout.setContentsMargins(0, 0, 0, 0)
        for name in ['x', 'y', 'z', 'alpha', 'phi']:
            label = QLabel(name)
            label.setAlignment(Qt.AlignCenter)
            label.setFixedWidth(getWidth())
            layout.addWidget(label)
        widget.setLayout(layout)
        return widget

    @pyqtSlot(QTrap)
    def registerTrap(self, trap):
        trapWidget = QTrapPropertyWidget(trap)
        self.properties[trap] = trapWidget
        self.layout.addWidget(trapWidget)
        trap.destroyed.connect(lambda: self.unregisterTrap(trap))

    @pyqtSlot(QTrap)
    def unregisterTrap(self, trap):
        try:
            self.properties[trap].deleteLater()
        except Exception as ex:
            logger.warning('{}'.format(ex))

    def count(self):
        return self.layout.count()
Esempio n. 23
0
 def create_choiceBox(self):
     layout = QHBoxLayout()
     vBox = QVBoxLayout()
     for region in self.regions:
         vBox.addLayout(MyHBox(self, region))
         if vBox.count() >= 10:
             layout.addLayout(vBox)
             layout.addWidget(separator('V'))
             vBox = QVBoxLayout()
     layout.addLayout(vBox)
     return layout
Esempio n. 24
0
class QScrollableBox(QWidget):
    def __init__(self, parent):
        super(QScrollableBox, self).__init__(parent)
        mainLayout = QVBoxLayout()
        mainLayout.setContentsMargins(0, 0, 0, 0)
        self.scrollArea = QScrollArea(self)
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        self.scrollArea.setSizePolicy(sizePolicy)
        self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        self.scrollArea.setWidgetResizable(True)

        mainLayout.addWidget(self.scrollArea)
        self.setLayout(mainLayout)
        scrollContents = QWidget()
        self.m_layout = QVBoxLayout()
        self.m_layout.setContentsMargins(0, 0, 0, 0)
        self.m_layout.setSizeConstraint(QLayout.SetNoConstraint)
        scrollContents.setLayout(self.m_layout)

        self.scrollArea.setWidget(scrollContents)

    def addWidget(self, w):
        if not w:
            return
        count = self.m_layout.count()
        if count > 1:
            self.m_layout.removeItem(self.m_layout.itemAt(count - 1))
        self.m_layout.addWidget(w)
        w.show()
        self.m_layout.addStretch()
        self.scrollArea.update()

    def removeWidget(self, w):
        self.m_layout.removeWidget(w)
        self.scrollArea.update()

    def insertWidget(self, i, w):
        self.m_layout.insertWidget(i, w)
        self.scrollArea.update()

    def clearWidgets(self):
        item = self.m_layout.takeAt(0)
        while item != None:
            item.widget().deleteLater()
            self.m_layout.removeItem(item)
            del item

        self.scrollArea.update()

    def indexOf(self, w):
        return self.m_layout.indexOf(w)
Esempio n. 25
0
class ContextWidget(QDialog):
    var_changed_signal = pyqtSignal(str, float)
    refresh_signal = pyqtSignal()

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

        self.setWindowTitle("Variables")
        self.global_layout = QVBoxLayout(self)
        self.main_layout = QVBoxLayout(self)
        self.refresh_btn = QPushButton('Refresh', self)
        self.refresh_btn.clicked.connect(lambda: self.refresh_signal.emit())

        self.global_layout.addWidget(self.refresh_btn, alignment=Qt.AlignAbsolute)
        self.global_layout.addLayout(self.main_layout)
        self.global_layout.addStretch()
        self.setLayout(self.global_layout)

    def refresh(self, context):
        self.clear_layout()

        for key, value in context.items():
            tmp_layout = QHBoxLayout(self)
            label = QLabel(key, self)
            text_edit = QLineEdit(str(value), self)
            text_edit.textChanged.connect(lambda value, variable=key: self.change_value(variable, value))
            tmp_layout.addWidget(label, alignment=Qt.AlignAbsolute)
            tmp_layout.addWidget(text_edit, alignment=Qt.AlignAbsolute)
            self.main_layout.addLayout(tmp_layout)

    def change_value(self, variable, value):
        try:
            value = float(value)
        except:
            value = value[:1]
        self.var_changed_signal.emit(variable, float(value))

    def clear_layout(self):
        while self.main_layout.count() > 0:
            l = self.main_layout.itemAt(0).layout()

            # label
            i = l.itemAt(0).widget()
            l.itemAt(0).widget().setParent(None)
            i.deleteLater()

            # text edit
            i = l.itemAt(0).widget()
            l.itemAt(0).widget().setParent(None)
            i.deleteLater()

            self.main_layout.itemAt(0).layout().setParent(None)
            l.deleteLater()
Esempio n. 26
0
class MyApp(QMainWindow):
    def __init__(self):
        super().__init__()

        self.add_btn = QPushButton("Add")
        self.add_btn.clicked.connect(self.click_add_btn)

        self.remove_btn = QPushButton("Remove")
        self.remove_btn.clicked.connect(self.click_remove_btn)

        self.scroll_area = QScrollArea()
        self.scroll_area.setWidgetResizable(True)

        self.init_ui()

    def init_ui(self):
        self.main_layout = QVBoxLayout()
        self.main_layout.addWidget(self.add_btn)
        self.main_layout.addWidget(self.remove_btn)
        self.main_layout.addWidget(TestUI())
        self.centralWidget = QWidget()
        self.centralWidget.setLayout(self.main_layout)
        self.setCentralWidget(self.centralWidget)
        self.show()

    def click_add_btn(self):
        self.main_layout.addWidget(TestUI())
        self.setFixedSize(
            self.main_layout.sizeHint()
            + PyQt5.QtCore.QSize(0, TestUI().frameGeometry().height())
        )

    def click_remove_btn(self):
        if self.main_layout.count() > 3:
            child = self.main_layout.takeAt(self.main_layout.count() - 1)
            child.widget().deleteLater()
            print(self.main_layout.count())
            print(self.main_layout.sizeHint())
            self.setFixedSize(self.main_layout.sizeHint())
Esempio n. 27
0
class IdgamesSearchView(Base, Form):
    def __init__(self, root, controller, parent=None):
        super(self.__class__, self).__init__(parent)

        self.setupUi(self)
        add_widget(root, self, 'IDGAMES_SEARCH')

        self.searchbar = SearchBar(root, controller)
        self.controller = controller

        self.search_results_container = self.findChild(
            QScrollArea, 'idgames_search_results_container')
        self.search_results_container.setWidgetResizable(True)
        self.search_results = self.findChild(QWidget, 'idgames_search_results')

        self.layout = QVBoxLayout()
        self.layout.setContentsMargins(9, 9, 9, 9)
        self.layout.setAlignment(Qt.AlignTop)
        self.search_results.setLayout(self.layout)

        self.layout.addWidget(QLabel('Search result will show here...'))

        self.search_results_widgets = {}

    def updateResults(self, result):
        for i in reversed(range(self.layout.count())):
            widgetToRemove = self.layout.itemAt(i).widget()
            # remove it from the layout list
            self.layout.removeWidget(widgetToRemove)
            # remove it from the gui
            if widgetToRemove != None:
                widgetToRemove.setParent(None)

        search_result = result[0].get('file', [])
        if type(search_result) != list:
            search_result = [search_result]

        warning = result[0].get('warning', None)
        if warning:
            self.layout.addWidget(QLabel(warning['type']))
            self.layout.addWidget(QLabel(warning['message']))

        self.search_results_widgets = {}
        for item in search_result:
            search_result_widget = SearchResultWidget(self.controller)
            search_result_widget.set_data(item)
            self.layout.addWidget(search_result_widget)
            self.search_results_widgets[item['id']] = search_result_widget

        self.layout.addStretch()
Esempio n. 28
0
class PDFViewer(QScrollArea):
    def __init__(self, parent):
        super().__init__(parent)
        self.scrollAreaContents = QWidget()
        self.scrollAreaLayout = QVBoxLayout()

        self.setWidget(self.scrollAreaContents)
        self.setWidgetResizable(True)

        self.scrollAreaContents.setLayout(self.scrollAreaLayout)
        self.pixmapList = []

    def resizeEvent(self, event):
        pass
        # do something about this later
    
    def update(self, pdf):
        self.render(pdf)
        self.clear()
        self.show()

    def render(self, pdf):
        """
        Update the preview shown by rendering a new PDF and drawing it to the scroll area.
        """

        self.pixmapList = []
        pdfView = fitz.Document(stream=pdf, filetype='pdf')
        # render at 4x resolution and scale
        for page in pdfView:
            self.pixmapList.append(page.getPixmap(matrix=fitz.Matrix(4, 4), alpha=False))
                    
    def clear(self):
        while self.scrollAreaLayout.count():
            item = self.scrollAreaLayout.takeAt(0)
            w = item.widget()
            if w:
                w.deleteLater()
    
    def show(self):
        for p in self.pixmapList:
            label = QLabel(parent=self.scrollAreaContents)
            label.setAlignment(Qt.AlignHCenter)
            qtimg = QImage(p.samples, p.width, p.height, p.stride, QImage.Format_RGB888)
            # -45 because of various margins... value obtained by trial and error.
            label.setPixmap(QPixmap.fromImage(qtimg).scaled(self.width()-45, self.height()*2, Qt.KeepAspectRatio, transformMode=Qt.SmoothTransformation))
            self.scrollAreaLayout.addWidget(label)
        
        # necessary on Mojave with PyInstaller (or previous contents will be shown)
        self.repaint()
Esempio n. 29
0
class StartPageFrame(QWidget):
    WIDTH = 330
    HEIGHT = 150
    THICKNESS = 4

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

        self.__layout = QVBoxLayout()
        self.__layout.setAlignment(Qt.AlignTop | Qt.AlignLeft)
        self.__layout.setContentsMargins(20, 20, 20, 20)
        self.setLayout(self.__layout)

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)

        painter.setRenderHint(QPainter.Antialiasing)

        painter.setBrush(QBrush(QColor(0, 0, 255, 32)))
        painter.setPen(QPen(QPen(QColor(0, 36, 62, 96), self.THICKNESS)))

        viewport = painter.viewport()

        rect = QRect(int(self.THICKNESS / 2), int(self.THICKNESS / 2),
                     int(viewport.width() - self.THICKNESS),
                     int(viewport.height() - self.THICKNESS))

        painter.drawRoundedRect(rect, 15, 15)

        painter.end()

        super().paintEvent(event)

    def sizeHint(self):
        return QSize(self.WIDTH, self.HEIGHT)

    def add_frame_action(self):
        action = StartPageFrameAction()
        self.__layout.addWidget(action)

        return action

    def clear(self):
        for no in range(self.__layout.count()):
            widget = self.__layout.itemAt(0).widget()
            widget.setParent(None)
            self.__layout.removeWidget(widget)
Esempio n. 30
0
    def __init__(self, plugin_registry, message, context, state, parent=None):
        super().__init__(parent)
        self.plugin_registry = plugin_registry
        vbox = QVBoxLayout()
        self.combo = QComboBox()
        vbox.addWidget(self.combo)
        vbox.addStretch()
        vbox.itemAt(vbox.count() - 1)
        self.vbox = vbox
        self.setLayout(vbox)

        self.setContent(message, context)
        self.restoreState(state)

        self.combo.currentIndexChanged.connect(self.onComboChanged)
        self.onComboChanged()
Esempio n. 31
0
class MainWindow(QMainWindow, Ui_MainWindow):
    signal_list_modules = pyqtSignal()

    def __init__(self):
        QMainWindow.__init__(self)
        self.setupUi(self)
        self.setAttribute(Qt.WA_TranslucentBackground, True)

        self.verticalLayout_inner = QVBoxLayout()
        self.modulesManager_tab.setLayout(self.verticalLayout_inner)

        self.pushButtonRetry.clicked.connect(self.showEvent)

    @pyqtSlot(list)
    def list_modules(self, response):
        self.clear_listed_modules()
        for module in response:
            item = ModuleGroupBox(module)
            self.verticalLayout_inner.addWidget(item, alignment=Qt.AlignTop)

            ModuleManager.instance().installation_started.connect(
                item.disable_btns)
            ModuleManager.instance().update_started.connect(item.disable_btns)

            item.signal_install.connect(ModuleManager.instance().download)
            item.signal_update.connect(ModuleManager.instance().update)
            item.signal_uninstall.connect(ModuleManager.instance().uninstall)

            ModuleManager.instance().installation_finished.connect(
                item.installed_or_updated)
            ModuleManager.instance().uninstallation_finished.connect(
                item.uninstalled)
        self.groupBoxError.hide()

    @pyqtSlot()
    def handle_connection_error(self):
        self.clear_listed_modules()
        self.groupBoxError.show()
        self.labelError.setText("No Internet Connection")

    def showEvent(self, QShowEvent):
        self.labelError.setText("Loading...")
        self.signal_list_modules.emit()

    def clear_listed_modules(self):
        for i in reversed(range(self.verticalLayout_inner.count())):
            self.verticalLayout_inner.itemAt(i).widget().deleteLater()
Esempio n. 32
0
class PluginFrame(QFrame):
    def __init__(self, plugins, highlighted_plugins=None, parent=None):
        """
        :type plugins: list of Plugin
        :type highlighted_plugins: list of Plugin
        """
        super().__init__(parent)
        self.ui = Ui_FramePlugins()
        self.ui.setupUi(self)
        self.model = PluginListModel(plugins, highlighted_plugins=highlighted_plugins)
        self.ui.listViewPlugins.setModel(self.model)
        self.settings_layout = QVBoxLayout()
        self.ui.groupBoxSettings.setLayout(self.settings_layout)
        self.create_connects()

        try:
            self.restoreGeometry(constants.SETTINGS.value("{}/geometry".format(self.__class__.__name__)))
        except TypeError:
            pass


    def create_connects(self):
        self.ui.listViewPlugins.selectionModel().selectionChanged.connect(self.on_list_selection_changed)
        for plugin in self.model.plugins:
            if hasattr(plugin, "show_proto_sniff_dialog_clicked"):
                plugin.show_proto_sniff_dialog_clicked.connect(self.parent().parent().show_proto_sniff_dialog)

    def save_enabled_states(self):
        for plugin in self.model.plugins:
            constants.SETTINGS.setValue(plugin.name, plugin.enabled)

    @pyqtSlot()
    def on_list_selection_changed(self):
        i = self.ui.listViewPlugins.currentIndex().row()
        self.ui.txtEditPluginDescription.setText(self.model.plugins[i].description)

        if self.settings_layout.count() > 0:
            widget = self.settings_layout.takeAt(0).widget()
            self.settings_layout.removeWidget(widget)
            widget.setParent(None)

        self.settings_layout.addWidget(self.model.plugins[i].settings_frame)
Esempio n. 33
0
class PluginsPage(QWidget):
    """Settings page for the installed plugins"""
    def __init__(self, parent):
        QWidget.__init__(self, parent)

        # Add a scrollArea that if they are more plugins that fit into the
        # settings page
        scrollArea = QScrollArea(self)
        scrollArea.setWidgetResizable(True)
        scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        baseLayout = QVBoxLayout()
        self.setLayout(baseLayout)
        baseWidget = QWidget()
        scrollArea.setWidget(baseWidget)
        baseLayout.addWidget(scrollArea)

        self._vbox = QVBoxLayout()
        baseWidget.setLayout(self._vbox)

    def update(self, userPlugins):
        """ListOfUserpluginEntry -> Void
        Consume a list of UserpluginEntry and repopulates the plugins page"""
        for i in reversed(range(self._vbox.count())):
            try:
                self._vbox.itemAt(i).widget().setParent(None)
            except AttributeError as e:
                qWarning("Can't call setParent of None type")

        self._vbox.addWidget(QLabel(
            """<h2>Installed Plugins: <code>%i</code></h2>
            <p>Add plugins by putting them into <code>%s</code></p>
            <p></p>""" % (len(userPlugins), PLUGIN_DIR_PATH)))
        for entry in userPlugins:
            self._vbox.addWidget(PluginTitlecard(entry))

        self._vbox.addStretch(1)
Esempio n. 34
0
class Contacts(QWidget):
    def __init__(self, db):
        self.dic_wind = {}
        self.dic_button = {}
        self.dic_err_win = {}
        self.layout = None
        self.mygroupbox = QGroupBox('Contacts list')
        self.myform = QFormLayout()
        self.scroll = QScrollArea()
        self.db = db
        self.google_api = Google()
        super().__init__()

    def init_ui(self):
        sender = self.sender()
        error = None
        if sender is not None:
            if sender.text() == '&VK':
                if not self.db.db_exists():
                    error = self.db.create(download_data(sender.text()))
                else:
                    error = self.db.update_database(
                        download_data(sender.text()))
            if sender.text() == '&Facebook':
                if not self.db.db_exists():
                    error = self.db.create(download_data(sender.text()))
                else:
                    error = self.db.update_database(
                        download_data(sender.text()))

        if error is not None:
            self.dic_err_win[error] = ErrorWindow(error)
            self.dic_err_win[error].init_ui()
        else:
            for friend in self.db.get_list_users():
                button = self.create_button(friend)
                self.myform.addRow(button)

            self.mygroupbox.setLayout(self.myform)

            self.scroll.setWidget(self.mygroupbox)
            self.scroll.setWidgetResizable(True)
            self.scroll.setFixedHeight(600)
            self.layout = QVBoxLayout(self)
            self.layout.addWidget(self.scroll)

    def create_button(self, friend):
        name = friend
        button = QPushButton(name, self)
        self.dic_button[name] = button
        inf_friend = self.db.get_user_inf(friend)
        if inf_friend['picture'] != '':
            logo = inf_friend['picture']

        self.dic_wind[name] = Window(name, logo,
                                     inf_friend, self, self.google_api)
        button.clicked.connect(lambda: self.dic_wind[name].init_ui())
        return button

    def import_all_contacts(self):
        list_users = self.db.get_list_users()
        if len(list_users) != 0:
            open_new('https://contacts.google.com')
            for contact in list_users:
                contact_data = self.db.get_user_inf(contact)
                self.google_api.create_contact(
                    self.google_api.create_xml(contact_data))

    def redrawing(self):
        self.clear_window()
        self.init_ui()

    def clear_layout(self, layout):
        for i in range(layout.count()):
            if layout.itemAt(i) is not None:
                layout.itemAt(i).widget().setParent(None)

    def clear_window(self):
        for i in range(self.layout.count()):
            if self.layout.itemAt(i) is not None:
                if self.layout.itemAt(i).layout() is not None:
                    self.clear_layout(self.layout.itemAt(i).layout())
                    self.layout.itemAt(i).layout().setParent(None)
                if self.layout.itemAt(i).widget() is not None:
                    self.layout.itemAt(i).widget().setParent(None)
Esempio n. 35
0
class TopicsTab(QWidget):
    configChanged = pyqtSignal()
    def __init__(self):
        super(QWidget, self).__init__()
        self.config = None
        self.count = 0
        self.topicRows = {}

        self.nameEdit = QLineEdit()
        self.dataTypeComboBox = QComboBox()
        self.fillDataTypes()
        self.opTypeComboBox = QComboBox()
        self.opTypeComboBox.addItem('sub', 'Subscribe')
        self.opTypeComboBox.addItem('pub', 'Publish')
        self.addButton = QPushButton('Add')
        self.addButton.clicked.connect(self.addClicked)

        self.mainLayout = QVBoxLayout()
        rowLayout = QHBoxLayout()
        rowLayout.addWidget(self.nameEdit)
        rowLayout.addWidget(self.dataTypeComboBox)
        rowLayout.addWidget(self.opTypeComboBox)
        rowLayout.addWidget(self.addButton)
        rowContainer = QWidget()
        rowContainer.setLayout(rowLayout)
        rowContainer.setObjectName('titleRow')
        self.mainLayout.addWidget(rowContainer)
        self.setLayout(self.mainLayout)


    def fillDataTypes(self):
        rosTypes = Interfaces.getRosMessageTypes()
        for type in rosTypes:
            concatType = type['typeDir'] + '/' + type['type']
            self.dataTypeComboBox.addItem(concatType, concatType)


    def addTopicRow(self, name, type, opType):
        rowLayout = QHBoxLayout()
        rowLayout.addWidget(QLabel(name))
        rowLayout.addWidget(QLabel(type))
        rowLayout.addWidget(QLabel(opType))
        removeButton = QPushButton('Remove')
        removeButton.clicked.connect(self.removeTopicClicked)
        removeButton.setObjectName(str(self.count))
        rowLayout.addWidget(removeButton)
        rowContainer = QWidget()
        rowContainer.setLayout(rowLayout)
        rowContainer.setObjectName('row' + str(self.count))
        self.mainLayout.addWidget(rowContainer)
        self.topicRows[self.count] = rowContainer
        self.count += 1


    def addClicked(self):
        if self.config is not None:
            self.config.addTopic(self.count, self.nameEdit.text(), self.dataTypeComboBox.currentData(), self.opTypeComboBox.currentData())
            self.addTopicRow(self.nameEdit.text(), self.dataTypeComboBox.currentData(), self.opTypeComboBox.currentData())
            self.nameEdit.setText('')
            self.configChanged.emit()

    def removeTopicClicked(self):
        if self.config is not None:
            itemToRemove = None
            for i in range(self.mainLayout.count()):
                if self.mainLayout.itemAt(i).widget().objectName() == 'row' + self.sender().objectName():
                    itemToRemove = self.mainLayout.itemAt(i)
                    break
            if itemToRemove is not None:
                self.mainLayout.removeItem(itemToRemove)
                itemToRemove.widget().setParent(None)
                self.mainLayout.update()
                self.configChanged.emit()
            self.config.removeTopic(int(self.sender().objectName()))
            del self.topicRows[int(self.sender().objectName())]


    def clearAllRows(self):
        clearList = []
        for i in range(self.mainLayout.count()):
            item = self.mainLayout.itemAt(i)
            if item.widget().objectName() != 'titleRow':
                clearList.append(item)

        for item in clearList:
            self.mainLayout.removeItem(item)
            item.widget().setParent(None)

        self.mainLayout.update()
        self.count = 0


    def setConfig(self, config):
        self.config = config
        self.clearAllRows()
        for topic in self.config.getTopics():
            topic['id'] = self.count
            self.addTopicRow(topic['name'], topic['type'], topic['opType'])
Esempio n. 36
0
class MenuView(QScrollArea):

    def __init__(self, parent=None, update_func=None, params=None):
        super().__init__(parent)

        self.setMaximumWidth(200)

        self.params = params

        self.H1_HEIGHT = 50
        self.H2_HEIGHT = 50
        self.SIDE_MARGIN = 5
        self.H1_FONT_SIZE = 18
        self.H2_FONT_SIZE = 18
        self.H3_FONT_SIZE = 16
        self.TEXT_FONT_SIZE = 14

        style = '''
            QPushButton:flat{
                text-align: left;
                padding: 1ex;
            }
            QPushButton:pressed{
                background-color: silver;
            }
            QPushButton:hover:!pressed{
                font: bold;
            }
            '''
        self.setStyleSheet(style)

        self.update_func = update_func

        self.inner = QWidget(self)

        self.vbox = QVBoxLayout(self.inner)
        self.vbox.setSpacing(0)
        self.vbox.setContentsMargins(0, 0, 0, 0)
        self.vbox.setAlignment(Qt.AlignTop)

        topframe = QFrame()
        topframe.setStyleSheet('background-color: white')
        topframe.setFixedHeight(self.H1_HEIGHT)

        lbl_h1 = QLabel('Contents', topframe)
        fnt = lbl_h1.font()
        fnt.setPointSize(self.H1_FONT_SIZE)
        lbl_h1.setFont(fnt)
        lbl_h1.setFixedHeight(self.H1_HEIGHT)
        lbl_h1.setMargin(self.SIDE_MARGIN)

        self.vbox.addWidget(topframe)

        self.list_button = []
        if self.params.lang == 'en':
            self.edit_button('Introduction')
        else:
            self.edit_button('はじめに')

        self.inner.setLayout(self.vbox)

        self.setWidget(self.inner)

    def buttonClicked(self, text):
        if self.update_func is not None:
            self.update_func(text)

    def edit_button(self, text, delete=False):
        if delete:
            for i in range(self.vbox.count()):
                widget = self.vbox.itemAt(i).widget()
                if type(widget) == QPushButton:
                    if widget.text() == '-' + text:
                        self.vbox.removeWidget(widget)
                        widget.deleteLater()
                        widget = None
            return

        if text not in self.list_button:
            self.list_button.append(text)
            btn = QPushButton('-' + text, self.inner)
            btn.setFlat(True)
            fnt = btn.font()
            fnt.setPointSize(self.TEXT_FONT_SIZE)
            btn.setFont(fnt)
            btn.clicked.connect(lambda: self.buttonClicked(text))
            self.vbox.addWidget(btn)

        self.buttonClicked(text)