예제 #1
0
def get_widget_by_type(obj):
	if type(obj) == int:
		widget = QSpinBox()
		widget.setRange(INT_RANGE_MIN, INT_RANGE_MAX)
		widget.setSingleStep(INT_RANGE_STEP)
		widget.setValue(obj)
		widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum)

	elif type(obj) == float:
		widget = QDoubleSpinBox()
		widget.setRange(FLOAT_RANGE_MIN, FLOAT_RANGE_MAX)
		widget.setSingleStep(FLOAT_RANGE_STEP)
		widget.setValue(obj)
		widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum)

	elif type(obj) == str:
		widget = QLineEdit()
		widget.setText(obj)

	elif type(obj) == bool:
		widget = QCheckBox()
		widget.setChecked(obj)

	elif type(obj) == list:
		widget = QComboBox()
		widget.addItems(obj)
		widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum)

	elif type(obj) == tuple:
		widget = QFrame()

		if len(obj) <= 3:
			box = QHBoxLayout()
		else:
			box = QVBoxLayout()
		box.setMargin(0)

		for item in obj:
			value_widget = QLabel(f"{item}")
			value_widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum)
			value_widget.setObjectName("tuple")

			box.addWidget(value_widget)

		widget.setLayout(box)

	elif type(obj) == dict:
		widget = QFrame()

		# If less than 3 items, lay it out horizontally else vertically
		# if len(obj) <= 3:
		# 	box = QHBoxLayout()
		# else:
		# 	box = QVBoxLayout()
		# box.setMargin(0)

		grid = QGridLayout()
		grid.setMargin(0)

		row = 0
		for key in obj:
			label = QLabel(f"{key.capitalize()}:")
			grid.addWidget(label, row, 0)
			
			value_widget = get_widget_by_type(obj[key])
			value_widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum)
			grid.addWidget(value_widget, row, 1)

			try:
				value_widget.setRange(INT_RANGE_MIN, INT_RANGE_MAX)
				value_widget.setSingleStep(INT_RANGE_STEP)
				value_widget.setValue(obj[key])
			except:
				pass

			row += 1

		widget.setLayout(grid)

	# TODO: Lists inside of lists. Should probably use QTreeView
	# elif type(obj) == list:
	# 	widget = []
	# 	for l in obj:
	# 		widget.append(QComboBox())
	# 		widget[-1].addItems(obj)
	# 		widget[-1].setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum)
	
	return widget
예제 #2
0
    def __init__(self, parent=None):
        super(Settings, self).__init__(parent)
        self.settings = QSettings(self)

        self.setWindowTitle('Annotations - settings')
        f = QFormLayout()
        self.setLayout(f)

        c = self.setup_combo(['Light', 'Dark'], 'theme')
        self.theme = c
        c.currentIndexChanged.connect(self._theme_changed)
        f.addRow('Theme', c)

        c = self.setup_combo(QFontDatabase().families(), 'family')
        self.family = c
        c.currentIndexChanged.connect(self._font_changed)
        f.addRow('Font', c)

        c = QSpinBox(self)
        c.setValue(int(self.settings.value('size')))
        self.size = c
        c.setMaximum(30)
        c.setMinimum(5)
        c.valueChanged.connect(self._font_changed)
        f.addRow('Font size', c)

        c = QLineEdit(self)
        c.setText(self.settings.value('annotator', ""))
        self.token = c
        c.textChanged.connect(
            lambda text: self.settings.setValue('annotator', text))
        f.addRow('Annotator name', c)

        c = QLineEdit(self)
        c.setText(
            self.settings.value('repo_location',
                                os.path.abspath('./repository')))
        self.token = c
        c.textChanged.connect(
            lambda text: self.settings.setValue('repo_location', text))
        f.addRow('Repo location', c)

        c = QLineEdit(self)
        c.setText(self.settings.value('repository'))
        self.token = c
        c.textChanged.connect(
            lambda text: self.settings.setValue('repository', text))
        f.addRow('Repository', c)

        c = QLineEdit(self)
        c.setText(self.settings.value('user'))
        self.token = c
        c.textChanged.connect(
            lambda text: self.settings.setValue('user', text))
        f.addRow('Repo user', c)

        c = QLineEdit(self)
        c.setText(self.settings.value('token'))
        self.token = c
        c.textChanged.connect(
            lambda text: self.settings.setValue('token', text))
        f.addRow('Repo token', c)

        c = QLineEdit(self)
        c.textChanged.connect(
            lambda text: self.settings.setValue('indent', text))
        c.setText(self.settings.value('indent', defaultValue='-'))
        self.token = c
        f.addRow('Summary indent', c)