Example #1
0
class QKeithleyConfig(QVisaConfigure.QVisaConfigure):

	def __init__(self):

		# Inherits QVisaConfigure -> QWidget
		super(QKeithleyConfig, self).__init__()	

		# Create Icon for QMessageBox
		self.gen_main_layout()

	# Main layout	
	def gen_main_layout(self):	

		# Create configuration layout	
		self._layout = QVBoxLayout()

		# Set application icon
		self._icon = QIcon(os.path.join(os.path.dirname(os.path.realpath(__file__)), "python.ico"))

		# Insturment initialization widget
		self._device_widget = self._gen_device_control()
		self._device_widget.set_init_callback("init_keithley")
		self._device_widget.set_select_callback("updatedevice_pages")

		# QStackedWidget for insturment configurations
		self.device_pages = QStackedWidget()

		# Add comm widget and inst pages
		self._layout.addWidget(self._device_widget)
		self._layout.addStretch(1)
		self._layout.addWidget(self.device_pages)

		# Set application layout
		self.setLayout(self._layout)
		self.setFixedWidth(350)


	# Callback to handle addr initialization
	def init_keithley(self):

		# Initialize Keithley
		Device = self._device_widget.init( keithley2400.keithley2400 )

		# Build configuration widget for Keithley
		if Device is not None:
			self.device_pages.addWidget( QKeithleyConfigWidget( self, Device.get_property("name") ) )


	# This will update the QStackedWidget to show the correct QKeithleyWidget
	def update_device_pages(self):
		
		# Get current text
		Device = self._device_widget.get_current_inst()
		if Device is not None:
			
			# Loop through QStacked widget children
			for _page in list( self.device_pages.findChildren(QKeithleyConfigWidget) ):

				# If insturment name matches page name
				if _page.name == Device.get_property("name"):

					# Set widget page
					self.device_pages.setCurrentWidget(_page)
Example #2
0
class SettingsWindow(QDialog):

    def __init__(self):
        super().__init__()
        self.setWindowTitle('nParse Settings')

        layout = QVBoxLayout()

        top_layout = QHBoxLayout()
        self._list_widget = QListWidget()
        self._list_widget.setObjectName('SettingsList')
        self._list_widget.setSelectionMode(QListWidget.SingleSelection)
        self._list_widget.currentItemChanged.connect(self._switch_stack)
        self._widget_stack = QStackedWidget()
        self._widget_stack.setObjectName('SettingsStack')
        top_layout.addWidget(self._list_widget, 0)
        top_layout.addWidget(self._widget_stack, 1)

        settings = self._create_settings()
        if settings:
            for setting_name, stacked_widget in settings:
                self._list_widget.addItem(QListWidgetItem(setting_name))
                self._widget_stack.addWidget(stacked_widget)

            self._list_widget.setCurrentRow(0)
        self._list_widget.setMaximumWidth(
            self._list_widget.minimumSizeHint().width())

        self._list_widget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

        buttons = QWidget()
        buttons.setObjectName('SettingsButtons')
        buttons_layout = QHBoxLayout()
        buttons_layout.setContentsMargins(0, 0, 0, 0)
        save_button = QPushButton('Save')
        save_button.setAutoDefault(False)
        save_button.clicked.connect(self._save)
        buttons_layout.addWidget(save_button)
        cancel_button = QPushButton('Cancel')
        cancel_button.setAutoDefault(False)
        cancel_button.clicked.connect(self._cancelled)
        buttons_layout.addWidget(cancel_button)
        buttons_layout.insertStretch(0)
        buttons.setLayout(buttons_layout)
        layout.addLayout(top_layout, 1)
        layout.addWidget(buttons, 0)

        self.setLayout(layout)

        self._set_values()

    def _save(self):
        for stacked_widget in self._widget_stack.findChildren(QFrame):
            for widget in stacked_widget.children():
                wt = type(widget)
                if wt == QCheckBox:
                    key1, key2 = widget.objectName().split(':')
                    config.data[key1][key2] = widget.isChecked()
                elif wt == QSpinBox:
                    key1, key2 = widget.objectName().split(':')
                    config.data[key1][key2] = widget.value()
                elif wt == QLineEdit:
                    key1, key2 = widget.objectName().split(':')
                    config.data[key1][key2] = widget.text()
        config.save()
        self.accept()

    def _cancelled(self):
        self._set_values()
        self.reject()

    def showEvent(self, _):
        self._set_values()

    def closeEvent(self, _):
        self._set_values()
        self.reject()

    def _switch_stack(self):
        if self._list_widget.selectedIndexes():
            self._widget_stack.setCurrentIndex(self._list_widget.currentRow())

    def _set_values(self):
        for stacked_widget in self._widget_stack.findChildren(QFrame):
            for widget in stacked_widget.children():
                wt = type(widget)
                if wt == QCheckBox:
                    key1, key2 = widget.objectName().split(':')
                    widget.setChecked(config.data[key1][key2])
                elif wt == QSpinBox:
                    key1, key2 = widget.objectName().split(':')
                    widget.setValue(config.data[key1][key2])
                elif wt == QLineEdit:
                    key1, key2 = widget.objectName().split(':')
                    widget.setText(config.data[key1][key2])

    def _create_settings(self):
        stacked_widgets = []

        # General Settings
        general_settings = QFrame()
        gsl = QFormLayout()
        gsl.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow)
        gsl.addRow(SettingsHeader('general'))
        gsl_update_check = QCheckBox()
        gsl_update_check.setObjectName('general:update_check')
        gsl.addRow('Check for Updates', gsl_update_check)
        gsl.addRow(SettingsHeader('parsers'))
        gsl_opacity = QSpinBox()
        gsl_opacity.setRange(1, 100)
        gsl_opacity.setSingleStep(5)
        gsl_opacity.setSuffix('%')
        gsl_opacity.setObjectName('general:parser_opacity')
        gsl.addRow('Parser Window Opacity (% 1-100)', gsl_opacity)
        gsl_scaling = QSpinBox()
        gsl_scaling.setRange(100, 300)
        gsl_scaling.setSingleStep(5)
        gsl_scaling.setSuffix('%')
        gsl_scaling.setObjectName('general:qt_scale_factor')
        gsl.addRow('Window Scaling Factor', gsl_scaling)
        gsl.addRow(SettingsHeader('experimental'))
        gsl_enable_plugins = QCheckBox()
        gsl_enable_plugins.setObjectName('general:enable_plugins')
        gsl.addRow('Enable Plugins', gsl_enable_plugins)
        gsl_safe_mode = QCheckBox()
        gsl_safe_mode.setObjectName('general:safe_mode')
        gsl.addRow('Safe Mode', gsl_safe_mode)
        general_settings.setLayout(gsl)

        stacked_widgets.append(('General', general_settings))

        # Spell Settings
        spells_settings = QFrame()
        ssl = QFormLayout()
        ssl.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow)
        ssl.addRow(SettingsHeader('general'))
        ssl_casting_window = QCheckBox()
        ssl_casting_window.setWhatsThis(WHATS_THIS_CASTING_WINDOW)
        ssl_casting_window.setObjectName('spells:use_casting_window')
        ssl.addRow('Use Casting Window', ssl_casting_window)
        ssl_casting_window_buffer = QSpinBox()
        ssl_casting_window_buffer.setWhatsThis(WHATS_THIS_CASTING_BUFFER)
        ssl_casting_window_buffer.setRange(1, 4000)
        ssl_casting_window_buffer.setSingleStep(100)
        ssl_casting_window_buffer.setObjectName('spells:casting_window_buffer')

        ssl.addRow(
            'Casting Window Buffer (msec 1-4000)',
            ssl_casting_window_buffer
            )
        ssl_open_custom = QPushButton("Edit")
        ssl_open_custom.clicked.connect(self._get_custom_timers)
        row = ssl.addRow('Custom Timers', ssl_open_custom)

        ssl.addRow(SettingsHeader('experimental'))
        ssl_secondary_duration = QCheckBox()
        ssl_secondary_duration.setWhatsThis(WHATS_THIS_PVP_DURATION)
        ssl_secondary_duration.setObjectName('spells:use_secondary_all')
        ssl.addRow('Use PvP Durations', ssl_secondary_duration)
        ssl_save_spells = QCheckBox()
        ssl_save_spells.setObjectName('spells:save_spells')
        ssl.addRow('Save Spells Between Sessions', ssl_save_spells)
        spells_settings.setLayout(ssl)
        stacked_widgets.append(('Spells', spells_settings))

        # caoilainn fork
        # log streaming
        push_settings = QFrame()
        push = QFormLayout()
        push.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow)
        push.addRow(SettingsHeader('push notifications (experimental)'))

        push_enable = QCheckBox()
        push_enable.setWhatsThis(WHATS_THIS_PUSH_NOTIFICATIONS)
        push_enable.setObjectName('push:push_enabled')
        push.addRow('Use Push Notifications', push_enable)

        push_timer_expiry = QCheckBox()
        push_timer_expiry.setObjectName('push:timer_expiry')
        push.addRow('Push When Timer Expires', push_timer_expiry)

        push_afk_only = QCheckBox()
        push_afk_only.setObjectName('push:afk_only')
        push.addRow('Triggers Only When AFK', push_afk_only)

        push_timer_afk_only = QCheckBox()
        push_timer_afk_only.setObjectName('push:timer_expiry_afk_only')
        push.addRow('Timers Only When AFK', push_timer_afk_only)

        push_afk_idle_time = QSpinBox()
        push_afk_idle_time.setRange(0, 600)
        push_afk_idle_time.setSingleStep(1)
        push_afk_idle_time.setSuffix('s')
        push_afk_idle_time.setObjectName('push:idle_time_to_afk')
        push.addRow('Idle time to be AFK', push_afk_idle_time)
        push.addWidget(QLabel("You are always afk when using /afk.\n(0 to disable idle timer)"))

        push_api_key = QLineEdit()
        push_api_key.setMaxLength(512)
        push_api_key.setObjectName('push:prowl_api_key')
        push.addRow('Prowl API Key', push_api_key)

        push_edit_triggers = QPushButton("Edit")
        push_edit_triggers.clicked.connect(self._get_push_triggers)
        push.addRow('Push Triggers', push_edit_triggers)

        push_settings.setLayout(push)
        stacked_widgets.append(('Push', push_settings))

        # Map Settings
        map_settings = QFrame()
        msl = QFormLayout()
        msl.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow)
        msl.addRow(SettingsHeader('general'))
        msl_line_width = QSpinBox()
        msl_line_width.setObjectName('maps:line_width')
        msl_line_width.setRange(1, 10)
        msl_line_width.setSingleStep(1)
        msl.addRow('Map Line Width', msl_line_width)

        msl_grid_line_width = QSpinBox()
        msl_grid_line_width.setObjectName('maps:grid_line_width')
        msl_grid_line_width.setRange(1, 10)
        msl_grid_line_width.setSingleStep(1)
        msl.addRow('Grid Line Width', msl_grid_line_width)

        msl.addRow(SettingsHeader('z levels'))

        msl_current_z_alpha = QSpinBox()
        msl_current_z_alpha.setRange(1, 100)
        msl_current_z_alpha.setSingleStep(1)
        msl_current_z_alpha.setSuffix('%')
        msl_current_z_alpha.setObjectName('maps:current_z_alpha')
        msl.addRow('Current Z Opacity', msl_current_z_alpha)

        msl_closest_z_alpha = QSpinBox()
        msl_closest_z_alpha.setRange(1, 100)
        msl_closest_z_alpha.setSingleStep(1)
        msl_closest_z_alpha.setSuffix('%')
        msl_closest_z_alpha.setObjectName('maps:closest_z_alpha')
        msl.addRow('Closest Z Opacity', msl_closest_z_alpha)

        msl_other_z_alpha = QSpinBox()
        msl_other_z_alpha.setRange(1, 100)
        msl_other_z_alpha.setSingleStep(1)
        msl_other_z_alpha.setSuffix('%')
        msl_other_z_alpha.setObjectName('maps:other_z_alpha')
        msl.addRow('Other Z Opacity', msl_other_z_alpha)

        map_settings.setLayout(msl)
        stacked_widgets.append(('Maps', map_settings))

        return stacked_widgets

    def _get_custom_timers(self):
        dialog = CustomTriggerSettings()
        dialog.exec()

    def _get_push_triggers(self):
        dialog = PushTriggerSettings()
        dialog.exec()