Esempio n. 1
0
    def __init__(self, columns, parent=None):
        super(GenericCsvParserDialog, self).__init__('CSV Choose the columns',
                                                     parent_win=parent)

        self._filename = None
        self._columns = columns
        self._columns_indexes = []
        self._rownum = 0

        # Definition of the forms fields
        self._filename = ControlFile('CSV File')
        self._separator = ControlText('Separator', 'auto')
        self._startingrow = ControlNumber('Starting row', 0)

        for index, column in enumerate(columns):
            setattr(self, '_col_{0}'.format(index),
                    ControlNumber(column, index, -1, 1000))

        self._filePreview = ControlList('Preview')
        self._loadButton = ControlButton('Load')

        form_row = ['_separator'] + [
            '_col_{0}'.format(index) for index, column in enumerate(columns)
        ] + ['_loadButton']

        self._formset = [('_filename', '_startingrow'),
                         tuple(form_row), '_filePreview']
        self._separator.changed_event = self.__refreshPreview
        self._filename.changed_event = self.__refreshPreview
        self._startingrow.changed_event = self.__refreshPreview
        self._loadButton.value = self.load

        self._load_event = None
Esempio n. 2
0
    def __init__(self, parent=None, parentWindow=None):
        BaseWidget.__init__(self, 'Events stats', parentWindow=parentWindow)
        self._parent = parent

        self._bounds = ControlBoundingSlider('Frames range', 1, 100, horizontal=True)
        self._nframes = ControlNumber('Merge in a group of', 1800)
        self._videofsp = ControlNumber('FPS', 30.0)
        self._analyseButton = ControlButton('Calculate graphs')
        self._events = ControlCheckBoxList()
        self._graph = ControlVisVis('Graph')
        self._showTotalCounts = ControlCheckBox('Show total events counting')
        self._showEvtsCounts = ControlCheckBox('Show events counting', True)
        self._progress = ControlProgress()
        self._exportDurations = ControlButton('Export durations')
        self._exportTotals = ControlButton('Export totals')

        self._formset = [
            (' ', '_showEvtsCounts', '|', '_showTotalCounts', '|', '_nframes', '_videofsp', '_analyseButton', '_exportDurations', '_exportTotals'),
            '_bounds',
            {'a:Graph': ['_graph'],
                'c:Events selection':['_events']},
            '_progress'
        ]

        self._analyseButton.value = self.__generate_graph
        self._exportDurations.value = self.__export_durations
        self._exportTotals.value = self.__export_totals
        self._progress.hide()

        self.__load_events()

        self.setMinimumWidth(800)
        self.setMinimumHeight(600)
Esempio n. 3
0
    def __init__(self, timelineWidget=None):
        super(GraphsProperties, self).__init__('Graphs properties')
        self.setContentsMargins(10, 10, 10, 10)
        self._timeline = timelineWidget

        # Definition of the forms fields
        self._graphs_list = ControlList('Graphs list')
        self._name = ControlText('Name')
        self._min_value = ControlNumber('Min')
        self._max_value = ControlNumber('Max')
        self._values_zoom = ControlSlider('Amplitude', 100, 60, 400)
        self._values_top = ControlNumber('Top position', 0, -1000, 1000)
        self._remove_graph_btn = ControlButton('Remove graph')

        self._formset = [
            (['_graphs_list', '_remove_graph_btn'], '||', [
                ' ', '_name', ('_min_value', '_max_value'),
                ('_values_top', ' '), '_values_zoom', ' '
            ]),
        ]

        self._graphs_list.itemSelectionChanged = self.__graphs_list_selection_changed

        self._loaded = False

        self._name.changed = self.__save_graphs_changes
        self._min_value.changed = self.__save_graphs_changes
        self._max_value.changed = self.__save_graphs_changes
        self._values_zoom.changed = self.__save_graphs_changes
        self._values_top.changed = self.__save_graphs_changes
Esempio n. 4
0
    def __init__(self, timeline=None):
        super(Graph2Event, self).__init__('Graph to event',
                                          parent_win=timeline)
        self.setContentsMargins(10, 10, 10, 10)
        self._timeline = timeline

        # Definition of the forms fields
        self._graphs_list = ControlList('Graphs list (try double click)')
        self._equation = ControlTextArea('Equation')
        self._eventname = ControlText('Event name', 'New event')
        self._rownumber = ControlNumber('Row number', 0, 0, 1000)
        self._mindiff = ControlNumber('Minimum of frames', 0, 0, 1000000)
        self._genevts_btn = ControlButton('Generate events')

        self._formset = [
            (['_graphs_list'], '||', [
                ('_eventname', '_rownumber', '_mindiff'),
                '_equation',
                '_genevts_btn',
            ]),
        ]

        self._graphs_list.cell_double_clicked_event = self.__cell_double_clicked_evt
        self._graphs_list.readonly = True
        self._graphs_list.select_entire_row = True
        self._genevts_btn.value = self.__generage_events_evt
Esempio n. 5
0
    def __init__(self, timelineWidget=None, parent_win=None):
        super(GraphsProperties, self).__init__('Graphs properties',
                                               parent_win=parent_win)
        self.setContentsMargins(10, 10, 10, 10)
        self._mainwindow = parent_win
        self._timeline = timelineWidget

        #self.setMaximumWidth(300)

        # Definition of the forms fields
        self._graphs_list = ControlList('Graphs list')
        self._name = ControlText('Name')
        self._min_value = ControlNumber('Min', 0, -sys.float_info.max,
                                        sys.float_info.max)
        self._max_value = ControlNumber('Max', 0, -sys.float_info.max,
                                        sys.float_info.max)
        self._values_zoom = ControlSlider('Amplitude', 100, 60, 400)
        self._values_top = ControlNumber('Bottom', 0, -1000, 1000)
        self._remove_graph_btn = ControlButton('Remove graph')
        self._value = ControlLabel()

        self._graphs_list.readonly = True

        self._formset = [
            (['_graphs_list', '_remove_graph_btn'], '||', [
                ' ', '_name', ('_min_value', '_max_value', ' '),
                ('_values_top', ' '), '_values_zoom',
                'info:Choose one graph and move the mouse over \nthe timeline to visualize the coordenates.',
                '_value'
            ]),
        ]

        self._graphs_list.select_entire_row = True
        self._graphs_list.item_selection_changed_event = self.__graphs_list_selection_changed

        self._loaded = False
        self._current_selected_graph = None

        self._name.changed_event = self.__save_graphs_changes
        self._min_value.changed_event = self.__save_graphs_changes
        self._max_value.changed_event = self.__save_graphs_changes
        self._values_zoom.changed_event = self.__save_graphs_changes
        self._values_top.changed_event = self.__save_graphs_changes

        self._name.enabled = False
        self._min_value.enabled = False
        self._max_value.enabled = False
        self._values_zoom.enabled = False
        self._values_top.enabled = False
        self._remove_graph_btn.enabled = False

        self._remove_graph_btn.value = self.__remove_chart
Esempio n. 6
0
	def __init__(self, timeline=None):
		super(BonsaiImportFileDlg, self).__init__('Import file')

		self._file = ControlFile('File to import')
		self._fps = ControlNumber('Video FPS', 30)

		self._formset = [('_fps', '_file')]
Esempio n. 7
0
    def __init__(self):
        super(CsvParserDialog, self).__init__('CSV Choose the columns')
        self._filename = None

        # Definition of the forms fields
        self._filename = ControlFile('CSV File')
        self._separator = ControlText('Separator', ';')
        self._frameCol = ControlNumber('Frame column', 0, 0, 100)
        self._xCol = ControlNumber('X column', 1, 0, 100)
        self._yCol = ControlNumber('Y column', 2, 0, 100)
        self._zCol = ControlNumber('Z column', 3, 0, 100)
        self._filePreview = ControlList('Preview')
        self._loadButton = ControlButton('Load')

        self._formset = ['_filename', ('_separator', '_frameCol', '_xCol', '_yCol', '_zCol', '_loadButton'), '_filePreview']
        self._separator.changed = self.__refreshPreview
        self._filename.changed  = self.__refreshPreview
Esempio n. 8
0
    def __init__(self, columns, parent=None):
        super(GenericCsvParserDialog, self).__init__('CSV Choose the columns',
                                                     parent_win=parent)

        self._filename = None
        self._columns = columns
        self._columns_indexes = []
        self._rownum = 0

        # Definition of the forms fields
        self._filename = ControlFile('CSV File')
        self._separator = ControlCombo('Separator', default='auto')
        self._startingrow = ControlNumber('Starting row', default=0)

        for index, column in enumerate(columns):
            setattr(
                self, '_col_{0}'.format(index),
                ControlNumber(column, default=index, minimum=-1, maximum=1000))

        self._filePreview = ControlList('Preview')
        self._loadButton = ControlButton('Load')

        form_row = ['_separator'] + [
            '_col_{0}'.format(index) for index, column in enumerate(columns)
        ] + ['_loadButton']

        self._formset = [('_filename', '_startingrow'),
                         tuple(form_row), '_filePreview']
        self._separator.changed_event = self.__refreshPreview
        self._filename.changed_event = self.__refreshPreview
        self._startingrow.changed_event = self.__refreshPreview
        self._loadButton.value = self.load

        self._load_event = None

        self._separator.add_item('auto', 'auto')
        self._separator.add_item(';', ';')
        self._separator.add_item(',', ',')
        self._separator.add_item('TAB', '\t')
        self._separator.add_item('Excel', csv.excel)
        self._separator.add_item('Excel TAB', csv.excel_tab)
Esempio n. 9
0
    def __init__(self):
        super(ChooseColumnsWindow, self).__init__('CSV Choose the columns')
        self._filename = None

        # Definition of the forms fields
        self._filename = ControlFile('File')
        self._separator = ControlText('Separator', ';')
        self._frameCol = ControlNumber('Frame column', 0, 0, 100)
        self._xCol = ControlNumber('X column', 1, 0, 100)
        self._yCol = ControlNumber('Y column', 2, 0, 100)
        self._showZ = ControlCheckBox('Import Z value')			# Not being used yet
        self._zCol = ControlNumber('Z column', 0, 0, 100)		# Not being used yet
        self._filePreview = ControlList('Preview')
        self._loadButton = ControlButton('Load')

        self._formset = ['_filename', ('_separator', '_frameCol', '_xCol', '_yCol', '_loadButton'), '_filePreview']
        self._separator.changed = self.__refreshPreview
        self._filename.changed = self.__refreshPreview

        self._zCol.hide()
        self._showZ.changed = self.__showZChanged
Esempio n. 10
0
    def init_form(self):
        buttons_layout = QGridLayout()

        button_size_policy = QSizePolicy(QSizePolicy.Preferred,
                                         QSizePolicy.Preferred)

        up_icon = qta.icon('fa.arrow-up')
        up_button = QPushButton(up_icon, '')
        up_button.setSizePolicy(button_size_policy)
        up_button.clicked[bool].connect(self._up)

        down_icon = qta.icon('fa.arrow-down')
        down_button = QPushButton(down_icon, '')
        down_button.setSizePolicy(button_size_policy)
        down_button.clicked[bool].connect(self._down)

        left_icon = qta.icon('fa.arrow-left')
        left_button = QPushButton(left_icon, '')
        left_button.setSizePolicy(button_size_policy)
        left_button.clicked[bool].connect(self._left)

        right_icon = qta.icon('fa.arrow-right')
        right_button = QPushButton(right_icon, '')
        right_button.setSizePolicy(button_size_policy)
        right_button.clicked[bool].connect(self._right)

        home_icon = qta.icon('fa.home')
        home_button = QPushButton(home_icon, '')
        home_button.setSizePolicy(button_size_policy)
        home_button.clicked[bool].connect(self._home)

        buttons_layout.addWidget(up_button, 0, 1)
        buttons_layout.addWidget(down_button, 2, 1)
        buttons_layout.addWidget(left_button, 1, 0)
        buttons_layout.addWidget(right_button, 1, 2)
        buttons_layout.addWidget(home_button, 1, 1)

        layout = QVBoxLayout()

        self._step = ControlNumber(label="Step Size",
                                   default=self._step,
                                   minimum=0,
                                   maximum=float('inf'),
                                   decimals=5)

        layout.addLayout(buttons_layout)
        layout.addWidget(self._step.form)

        self._form = QWidget()
        self._form.setLayout(layout)

        self.label = self._label
Esempio n. 11
0
    def __init__(self, parent_win, label, begin, end):
        BaseWidget.__init__(self, 'Edit frame', parent_win=parent_win)

        if conf.PYFORMS_USE_QT5:
            self.layout().setContentsMargins(5, 5, 5, 5)
        else:
            self.layout().setMargin(5)

        self._label = ControlText('Label', default=label)
        self._begin = ControlNumber('Begin',
                                    default=begin,
                                    minimum=0,
                                    maximum=100000000000000)
        self._end = ControlNumber('End',
                                  default=end,
                                  minimum=0,
                                  maximum=100000000000000)

        self._applybtn = ControlButton('Apply')

        self.formset = ['_label', ('_begin', '_end'), '_applybtn']

        self._begin.changed_event = self.__begin_changed_event
        self._end.changed_event = self.__end_changed_event
Esempio n. 12
0
    def __init__(self):
        self._labjack = ljm.openS("T7", "USB", "ANY")

        self._serial_number = ljm.eReadName(self._labjack, 'SERIAL_NUMBER')

        # Start making the GUI to display when this sensor is selected
        self._widget = BaseWidget()

        # Label to show the serial number of the Labjack
        self._widget.serial_number = ControlLabel()
        self._widget.serial_number.value = str(int(self._serial_number))

        # Number input to get the threshold for an 'on' signal
        # for frequency calculations
        self._widget.threshold = ControlNumber(label="Threshold",
                                               default=0.1,
                                               minimum=0,
                                               maximum=float('inf'),
                                               decimals=5)
Esempio n. 13
0
def laser_custom_config():
    """
    Get the GUI config to configure the laser
    The GUI is the same for each laser axis and for the laser lightsource
    """
    global WIDGET

    if WIDGET is None:
        widget = BaseWidget("Laser Config")

        widget.power_supply = ControlCombo(label="Power Supply")

        widget.power_supply += ('None', None)

        for power in DEVICES['Power Supply']:
            widget.power_supply += power

        widget.power_supply.current_index_changed_event = update_laser

        widget.power_channel = ControlNumber(label="Power Supply Channel",
                                             default=1,
                                             minimum=1,
                                             maximum=4)

        widget.signal_generator = ControlCombo(label="Signal Generator")

        widget.signal_generator += ('None', None)

        for signal in DEVICES['Signal Generator']:
            widget.signal_generator += signal

        widget.signal_generator.current_index_changed_event = update_laser

        widget.formset = [
            "h5:Laser Using", 'power_supply', 'power_channel',
            'signal_generator', "(All laser axis use the same laser)"
        ]

        WIDGET = widget

    return WIDGET
    def get_custom_config(self):
        """
        Gets a pyforms BaseWidget to complete configuration for RotationAxis
        """

        if self._widget is None:
            widget = BaseWidget("Rotate Axis Config")

            widget.device_list = ControlCombo(label="Device")

            widget.device_list += ('None', None)

            for device in DEVICES:
                widget.device_list += device

            if self._rotation_stage is not None:
                widget.value = self._rotation_stage.serial_number

            widget.device_list.current_index_changed_event = self._update_stage

            widget.distance_field = ControlNumber(
                label="Distance to Surface",
                default=self._distance_to_surface,
                minimum=0,
                maximum=float('inf'),
                decimals=5)

            widget.distance_field.key_pressed_event = self._update_distance_to_surface

            widget.formset = ['device_list', 'distance_field', '']

            self._widget = widget

            self._update_stage(0)

        if self._rotation_stage is not None:
            self._rotation_stage.identify()

        return self._widget
class AxisTab(BaseWidget):
    """
    The Axis Tab in the main GUI
    """

    _axis = []
    _xaxis = None
    _yaxis = None

    _events = True

    _update_function = None

    def __init__(self, update_function=None):
        super().__init__("Axis Tab")

        self._update_function = update_function

        self._axis_list = ControlList(label='Axis List',
                                      default='',
                                      add_function=self._on_add_axis,
                                      remove_function=self._on_remove_axis)

        self._axis_list.item_selection_changed_event = self._on_selection_changed
        self._axis_list.data_changed_event = self._on_data_changed
        self._axis_list.select_entire_row = True

        self._axis_hw_type = ControlLabel()

        self._min = ControlNumber(label="Minimum",
                                  minimum=-float('inf'),
                                  maximum=float('inf'),
                                  decimals=5)

        self._min.changed_event = self._on_min_changed
        self._min.visible = False

        self._max = ControlNumber(label="Maximum",
                                  minimum=-float('inf'),
                                  maximum=float('inf'),
                                  decimals=5)

        self._max.changed_event = self._on_max_changed
        self._max.visible = False

        self._norm_min = ControlNumber(label="  0%",
                                       minimum=-float('inf'),
                                       maximum=float('inf'),
                                       decimals=5)

        self._norm_min.changed_event = self._on_norm_min_changed
        self._norm_min.visible = False

        self._norm_max = ControlNumber(label="100%",
                                       minimum=-float('inf'),
                                       maximum=float('inf'),
                                       decimals=5)

        self._norm_max.changed_event = self._on_norm_max_changed
        self._norm_max.visible = False

        self._special_axis = ControlEmptyWidget()

        self._axis_custom = ControlEmptyWidget()

        self._load_button = ControlFile(label="Load Axis")
        self._load_button.changed_event = self._on_load_axis

        self._save_button = ControlButton(label="Save Axis")
        self._save_button.value = self._on_save_axis
        self._save_button.visible = False

        self.formset = [
            '_axis_list', ('_axis_hw_type', '_special_axis'), ('_min', '_max'),
            ('_norm_min', '_norm_max'), '_axis_custom',
            ('_load_button', '_save_button')
        ]

    def _update_shown_axis(self):
        index = self._axis_list.selected_row_index
        if not index is None:
            axis = self._axis[index]
            if not axis is None:
                assert isinstance(axis, ControlAxis)

                # Get the hardware type from the name of the class
                self._axis_hw_type.value = type(axis).__name__

                # Update the minimum box
                if not self._min.visible:
                    self._min.visible = True
                self._min.label = "Minimum ({})".format(axis.get_units())
                self._events = False
                self._min.value = axis.get_min()
                self._events = True

                # Update the maximum box
                if not self._max.visible:
                    self._max.visible = True
                self._max.label = "Maximum ({})".format(axis.get_units())
                self._events = False
                self._max.value = axis.get_max()
                self._events = True

                # Update the norm_minimum box
                if not self._norm_min.visible:
                    self._norm_min.visible = True
                self._norm_min.label = "  0% ({})".format(axis.get_units())
                self._events = False
                self._norm_min.value = axis.get_norm_min()
                self._events = True

                # Update the norm_maximum box
                if not self._norm_max.visible:
                    self._norm_max.visible = True
                self._norm_max.label = "100% ({})".format(axis.get_units())
                self._events = False
                self._norm_max.value = axis.get_norm_max()
                self._events = True

                # Populate the special axis combo
                special_axis = ControlCombo(label="Special Axis")
                special_axis.add_item('', '')
                special_axis.add_item("X Axis", 'xaxis')
                special_axis.add_item("Y Axis", 'yaxis')

                if axis == self._xaxis:
                    special_axis.value = 'xaxis'
                elif axis == self._yaxis:
                    special_axis.value = 'yaxis'

                def axis_changed(_):
                    """
                    Called when axis changed
                    """
                    if special_axis.value == 'xaxis':
                        self._xaxis = axis
                        if self._yaxis == axis:
                            self._yaxis = None
                    elif special_axis.value == 'yaxis':
                        self._yaxis = axis
                        if self._xaxis == axis:
                            self._xaxis = None
                    else:
                        if self._xaxis == axis:
                            self._xaxis = None
                        if self._yaxis == axis:
                            self._yaxis = None

                    self._send_events()

                print("Making Special Combo")
                special_axis.current_index_changed_event = axis_changed

                self._events = False
                self._special_axis.value = None
                self._special_axis.value = special_axis
                self._events = True

                # Update the custom config GUI
                self._axis_custom.value = axis.get_custom_config()

                self._save_button.visible = True
            else:
                self._axis_hw_type.value = ''
                self._min.visible = False
                self._max.visible = False
                self._norm_min.visible = False
                self._norm_max.visible = False
                self._special_axis.value = None
                self._axis_custom.value = None
                self._save_button.visible = False
        else:
            self._axis_hw_type.value = ''
            self._min.visible = False
            self._max.visible = False
            self._norm_min.visible = False
            self._norm_max.visible = False
            self._special_axis.value = None
            self._axis_custom.value = None
            self._save_button.visible = False

    def _send_events(self):
        if self._events and self._update_function is not None:
            self._update_function({
                'axis': self._axis,
                'xaxis': self._xaxis,
                'yaxis': self._yaxis
            })

    def update_events(self, events):
        #print("Axis Tab", events)
        for axis in self._axis:
            if isinstance(axis, ControlAxis):
                axis.update_events(events)

    def _on_add_axis(self):
        win = NewAxisWindow(self.add_axis)
        win.show()

    def _on_remove_axis(self):
        index = self._axis_list.selected_row_index
        if not index is None:
            axis = self._axis[index]
            assert isinstance(axis, ControlAxis)

            self._axis_list -= index
            self._axis.pop(index)

            if not axis is None:
                if axis == self._xaxis:
                    self._xaxis = None
                if axis == self._yaxis:
                    self._yaxis = None

            self._send_events()

    def add_axis(self, axis):
        """
        Add an axis to the list
        """
        if not axis is None:
            self._axis_list += [axis.get_name()]
            self._axis += [axis]
            self._axis_list.tableWidget.selectRow(self._axis_list.rows_count -
                                                  1)
            # self._update_shown_axis()
            self._send_events()

    def _on_selection_changed(self):
        self._update_shown_axis()

    def _on_data_changed(self, row, _, item):
        if row < len(self._axis):
            axis = self._axis[row]
            if not axis is None:
                axis.set_name(item)
                #self._update_shown_axis()
                self._send_events()

    def _on_min_changed(self):
        index = self._axis_list.selected_row_index
        if not index is None:
            axis = self._axis[index]
            assert isinstance(axis, ControlAxis)
            if axis is not None:
                if axis.get_min() != self._min.value:
                    axis.set_min(self._min.value)
                    self._send_events()

    def _on_max_changed(self):
        index = self._axis_list.selected_row_index
        if not index is None:
            axis = self._axis[index]
            assert isinstance(axis, ControlAxis)
            if axis is not None:
                if axis.get_max() != self._max.value:
                    axis.set_max(self._max.value)
                    self._send_events()

    def _on_norm_min_changed(self):
        index = self._axis_list.selected_row_index
        if not index is None:
            axis = self._axis[index]
            assert isinstance(axis, ControlAxis)
            if axis is not None:
                if axis.get_norm_min() != self._norm_min.value:
                    axis.set_norm_min(self._norm_min.value)
                    self._send_events()

    def _on_norm_max_changed(self):
        index = self._axis_list.selected_row_index
        if not index is None:
            axis = self._axis[index]
            assert isinstance(axis, ControlAxis)
            if axis is not None:
                if axis.get_norm_max() != self._norm_max.value:
                    axis.set_norm_max(self._norm_max.value)
                    self._send_events()

    def _on_load_axis(self):
        """
        Load an axis from a saved axis file
        """
        if self._load_button.value is not None and self._load_button.value != '':
            data = {}
            with open(self._load_button.value) as output_file:
                try:
                    data = dict(json.load(output_file))
                except:
                    print("Could not read file")
                    return
            print(data)

            if 'hw_type' in data:

                name = ""
                if 'name' in data:
                    name = data['name']

                axis = None
                for axis_type in ControlAxis.__subclasses__():
                    if axis_type.__name__ == data['hw_type']:
                        axis = axis_type(name)

                if axis is None:
                    print("No hardware type found!")
                    return

                assert isinstance(axis, ControlAxis)

                self.add_axis(axis)

                #self._update_shown_axis()

                if 'min' in data:
                    self._min.load_form(data['min'])

                if 'max' in data:
                    self._max.load_form(data['max'])

                if 'norm_min' in data:
                    self._norm_min.load_form(data['norm_min'])

                if 'norm_max' in data:
                    self._norm_max.load_form(data['norm_max'])

                if 'special_axis' in data:
                    self._special_axis.value.load_form(data['special_axis'])

                self._axis_custom.value = axis.get_custom_config()

                if 'axis-specific' in data and self._axis_custom.value is not None:
                    self._axis_custom.value.load_form(data['axis-specific'])

    def _on_save_axis(self):
        """
        Save an axis to a file
        """
        data = {}

        data['name'] = self._axis_list.get_currentrow_value()[0]

        data['hw_type'] = self._axis_hw_type.value

        data['min'] = {}
        self._min.save_form(data['min'])

        data['max'] = {}
        self._max.save_form(data['max'])

        data['norm_min'] = {}
        self._norm_min.save_form(data['norm_min'])

        data['norm_max'] = {}
        self._norm_max.save_form(data['norm_max'])

        data['special_axis'] = {}
        self._special_axis.value.save_form(data['special_axis'])

        if self._axis_custom.value is not None:
            data['axis-specific'] = {}
            self._axis_custom.value.save_form(data['axis-specific'])

        print(data)

        filename = QFileDialog.getSaveFileName(self,
                                               'Save Axis',
                                               filter='JSON Files (*.json)')
        if filename[0] is not None and filename[0] != '':
            with open(filename[0], 'w') as output_file:
                json.dump(data, output_file, indent=2)
Esempio n. 16
0
    def __init__(self, update_function=None):
        super().__init__("Points")

        self._update_function = update_function

        self._open_file = ControlFile(
            label="Points File: "
        )
        self._open_file.changed_event = self._on_open_file

        self._save_file = ControlButton(
            label="Save"
        )
        self._save_file.value = self._save_points

        self._points_list = ControlList(
            label="Points",
            add_function=self._add_point,
            remove_function=self._remove_point,
            auto_resize=False
        )
        self._points_list.data_changed_event = self._change_point
        self._points_list.horizontal_headers = [
            axis.get_name() for axis in self._axis]

        self._pre_delay_time = ControlNumber(
            label="Pre Delay Time (s)",
            default=1,
            minimum=0,
            maximum=float('inf'),
            decimals=5
        )

        self._measure_time = ControlNumber(
            label="Measure Time (s)",
            default=5,
            minimum=0,
            maximum=float('inf'),
            decimals=5
        )

        self._post_delay_time = ControlNumber(
            label="Post Delay Time (s)",
            default=1,
            minimum=0,
            maximum=float('inf'),
            decimals=5
        )

        self._scan_frequency = ControlNumber(
            label="Scan Frequency (Hz)",
            default=10,
            minimum=0,
            maximum=float('inf'),
            decimals=5
        )

        self._out_file = ControlDir(
            label="Output Folder: "
        )

        self._scan_button = ControlButton(
            label="Scan"
        )
        self._scan_button.value = self._begin_scan

        self.formset = [
            ('_open_file', '_save_file'),
            '_points_list',
            ('_pre_delay_time', '_post_delay_time'),
            ('_measure_time', '_scan_frequency'),
            '_out_file',
            '_scan_button',
        ]
    def __init__(self, update_function=None):
        super().__init__("Axis Tab")

        self._update_function = update_function

        self._axis_list = ControlList(label='Axis List',
                                      default='',
                                      add_function=self._on_add_axis,
                                      remove_function=self._on_remove_axis)

        self._axis_list.item_selection_changed_event = self._on_selection_changed
        self._axis_list.data_changed_event = self._on_data_changed
        self._axis_list.select_entire_row = True

        self._axis_hw_type = ControlLabel()

        self._min = ControlNumber(label="Minimum",
                                  minimum=-float('inf'),
                                  maximum=float('inf'),
                                  decimals=5)

        self._min.changed_event = self._on_min_changed
        self._min.visible = False

        self._max = ControlNumber(label="Maximum",
                                  minimum=-float('inf'),
                                  maximum=float('inf'),
                                  decimals=5)

        self._max.changed_event = self._on_max_changed
        self._max.visible = False

        self._norm_min = ControlNumber(label="  0%",
                                       minimum=-float('inf'),
                                       maximum=float('inf'),
                                       decimals=5)

        self._norm_min.changed_event = self._on_norm_min_changed
        self._norm_min.visible = False

        self._norm_max = ControlNumber(label="100%",
                                       minimum=-float('inf'),
                                       maximum=float('inf'),
                                       decimals=5)

        self._norm_max.changed_event = self._on_norm_max_changed
        self._norm_max.visible = False

        self._special_axis = ControlEmptyWidget()

        self._axis_custom = ControlEmptyWidget()

        self._load_button = ControlFile(label="Load Axis")
        self._load_button.changed_event = self._on_load_axis

        self._save_button = ControlButton(label="Save Axis")
        self._save_button.value = self._on_save_axis
        self._save_button.visible = False

        self.formset = [
            '_axis_list', ('_axis_hw_type', '_special_axis'), ('_min', '_max'),
            ('_norm_min', '_norm_max'), '_axis_custom',
            ('_load_button', '_save_button')
        ]
Esempio n. 18
0
    def __init__(self):
        super(UI, self).__init__("Bose SoundTouch UI")

        self.ip = None
        self.speakers = {}

        self._speakers = ControlCheckBoxList("Speakers")
        self._speakers.selection_changed_event = self.speaker_selected

        self._remove = ControlButton("Remove")
        self._set = ControlButton("Set")
        self._add = ControlButton("Add")
        self._volume = ControlNumber()
        self._volume.decimals = 0
        self._volume_set = ControlButton("Set Volume")
        self._volume_get = ControlButton("Get Volume")
        self._volume_value = ControlLabel()
        self._bass = ControlNumber()
        self._bass.decimals = 0
        self._bass_set = ControlButton("Set Bass (neg)")
        self._bass_get = ControlButton("Get Bass")
        self._bass_value = ControlLabel()
        self._power = ControlButton("Power")
        self._mute = ControlButton("Mute")
        self._now_playing = ControlButton("Now Playing")
        self._prev = ControlButton("Prev")
        self._play_pause = ControlButton("Play/Pause")
        self._next = ControlButton("Next")
        self._p1 = ControlButton("P1")
        self._p2 = ControlButton("P2")
        self._p3 = ControlButton("P3")
        self._p4 = ControlButton("P4")
        self._p5 = ControlButton("P5")
        self._p6 = ControlButton("P6")

        self._zone = ControlCheckBoxList("Zone Info")
        self._info = ControlCheckBoxList("Speaker Info")
        self._np = ControlCheckBoxList("Now Playing")
        self._art = ControlImage()

        self.formset = (['_zone', '_info'], [
            ('_speakers'), ('_remove', '_set', '_add'),
            ('_volume', '_volume_set', '_volume_get', '_volume_value'),
            ('_bass', '_bass_set', '_bass_get', '_bass_value'),
            ('_power', '_mute', '_now_playing'),
            ('_prev', '_play_pause', '_next'), ('_p1', '_p2', '_p3'),
            ('_p4', '_p5', '_p6')
        ], ['_np', '_art'])

        self._add.value = self.__add
        self._set.value = self.__set
        self._remove.value = self.__remove
        self._volume_get.value = self.__volume_get
        self._volume_set.value = self.__volume_set
        self._bass_get.value = self.__bass_get
        self._bass_set.value = self.__bass_set
        self._power.value = self.__power
        self._mute.value = self.__mute
        self._now_playing.value = self.set_now_playing
        self._prev.value = self.__prev
        self._play_pause.value = self.__play_pause
        self._next.value = self.__next
        self._p1.value = self.__preset1
        self._p2.value = self.__preset2
        self._p3.value = self.__preset3
        self._p4.value = self.__preset4
        self._p5.value = self.__preset5
        self._p6.value = self.__preset6

        self.zeroconf = Zeroconf()
        self.st_listener = STListener(self.device_added, self.device_removed)
        self.browser = ServiceBrowser(self.zeroconf, "_soundtouch._tcp.local.",
                                      self.st_listener)

        self.select_device_timer = threading.Timer(10.0, self.select_device)
Esempio n. 19
0
    def __init__(self):
        BaseWidget.__init__(self, "Mandelbrot Set Generator")

        self._redSlider = ControlSlider(label="Red", min=0, max=255)
        self._blueSlider = ControlSlider(label="Blue", min=0, max=255)
        self._greenSlider = ControlSlider(label="Green", min=0, max=255)

        self._redSliderTwo = ControlSlider(label="Red 2",
                                           defaultValue=255,
                                           min=0,
                                           max=255)
        self._blueSliderTwo = ControlSlider(label="Blue 2",
                                            defaultValue=255,
                                            min=0,
                                            max=255)
        self._greenSliderTwo = ControlSlider(label="Green 2",
                                             defaultValue=255,
                                             min=0,
                                             max=255)

        self._randomizeFirstColor = ControlCheckBox(
            label='Randomize First Color?')
        self._randomizeFirstColor.value = True
        self._randomizeSecondColor = ControlCheckBox(
            label="Randomize Second Color?")
        self._randomizeSecondColor.value = True
        self._randomizeBrightness = ControlCheckBox(
            label="Randomize Brightness?")

        self._brightnessSlider = ControlSlider(label="Brightness",
                                               defaultValue=255,
                                               min=0,
                                               max=255)

        self._xSlider = ControlText(label="X", defaultValue="-1.0")
        self._ySlider = ControlText(label="Y", defaultValue="0")

        self._zoomSlider = ControlNumber(label="Zoom",
                                         defaultValue=1,
                                         min=1,
                                         max=1000000)

        self._entropySlider = ControlSlider(label="Entropy",
                                            defaultValue=5000,
                                            min=100,
                                            max=100000)

        self._randomPreviewButton = ControlButton(
            label="Smart Randomize and Generate Preview")
        self._randomPreviewButton.value = self.randomPreviewAction

        self._previewButton = ControlButton(label="Generate Preview (120x120)")
        self._previewButton.value = self.previewAction

        self._generateButton = ControlButton(label="Generate (500x500)")
        self._generateButton.value = self.generateAction

        self._exportButton = ControlButton(
            label="Export For Desktop (2049x1153)")
        self._exportButton.value = self.exportAction

        self._fourKExportButton = ControlButton(
            label="Export at 4K UHD (3840x2160)")
        self._fourKExportButton.value = self.fourKExportAction

        self._phoneExportButton = ControlButton(
            label="Export for Phone (1080x1920)")
        self._phoneExportButton.value = self.phoneExportAction

        self._randomButton = ControlButton(label="Randomize")
        self._randomButton.value = self.randomAction

        self._formset = [
            (('_redSlider', '_greenSlider', '_blueSlider'), "=",
             ('_redSliderTwo', '_greenSliderTwo',
              '_blueSliderTwo'), '=', '           ', '_randomizeFirstColor',
             '_randomizeSecondColor', '_randomizeBrightness', '|',
             '_brightnessSlider', "=", '_entropySlider', '_xSlider',
             '_ySlider', '_zoomSlider', "=", '_randomButton',
             '_randomPreviewButton', '_previewButton', '_generateButton',
             '_exportButton', '_fourKExportButton', '_phoneExportButton')
        ]
Esempio n. 20
0
class ChooseColumnsWindow(BaseWidget):

    def __init__(self):
        super(ChooseColumnsWindow, self).__init__('CSV Choose the columns')
        self._filename = None

        # Definition of the forms fields
        self._filename = ControlFile('File')
        self._separator = ControlText('Separator', ';')
        self._frameCol = ControlNumber('Frame column', 0, 0, 100)
        self._xCol = ControlNumber('X column', 1, 0, 100)
        self._yCol = ControlNumber('Y column', 2, 0, 100)
        self._showZ = ControlCheckBox('Import Z value')			# Not being used yet
        self._zCol = ControlNumber('Z column', 0, 0, 100)		# Not being used yet
        self._filePreview = ControlList('Preview')
        self._loadButton = ControlButton('Load')

        self._formset = ['_filename', ('_separator', '_frameCol', '_xCol', '_yCol', '_loadButton'), '_filePreview']
        self._separator.changed = self.__refreshPreview
        self._filename.changed = self.__refreshPreview

        self._zCol.hide()
        self._showZ.changed = self.__showZChanged

    def __showZChanged(self):
        if self._showZ.value:
            self._zCol.show()
        else:
            self._zCol.hide()

    @property
    def filename(self): return self._filename.value

    @filename.setter
    def filename(self, value):
        self._filename.value = value
        self.__refreshPreview()

    @property
    def loadFileEvent(self): return self._loadButton.value

    @loadFileEvent.setter
    def loadFileEvent(self, value): self._loadButton.value = value

    @property
    def separator(self): return self._separator.value

    @property
    def frameColumn(self): return self._frameCol.value

    @property
    def xColumn(self): return self._xCol.value

    @property
    def yColumn(self): return self._yCol.value

    @property
    def zColumn(self):
        if self._showZ.value:
            return self._zCol.value
        else:
            return None

    def __refreshPreview(self):
        if self._filename.value != None and self._filename.value != '':
            with open(self._filename.value) as csvfile:
                spamreader = csv.reader(csvfile, delimiter=self._separator.value)
                self._filePreview.value = []
                self._filePreview.horizontalHeaders = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", ]
                for i, row in enumerate(spamreader):
                    self._filePreview += row
                    if i >= 10:
                        break