def __init__(self, parent, **params): get_or_put(params, 'layout', QHBoxLayout()) self.params = Params(**params) self.data_accessor = self.params.data_accessor # alias i18n_def = "Square filter " + self.data_accessor.signal_unit.display_label # @IgnorePep8 super(SquareFilterWidget, self).__init__(parent, i18n_def=i18n_def, **params) self.__filter__ = SquareFilter() LabelWidget(self, i18n_def="Min value") self.__min_value__ = NumberEditWidget( self, text_changed_handler=self.__min_handler__) LabelWidget(self, i18n_def="Max value") self.__max_value__ = NumberEditWidget( self, text_changed_handler=self.__max_handler__) if self.params.use_apply_button: self.__action_button__ = PushButtonWidget( self, i18n_def='Apply', clicked_handler=self.__filter_handler__) else: self.__action_button__ = CheckBoxWidget( self, i18n_def='Use filter', clicked_handler=self.__use_handler__) self.data_accessor.addListener( self, __SquareFilterDataVectorListener__(self)) self.__action_button__.setChecked(False) self.reset()
def __init__(self, parent, **params): params['layout'] = QHBoxLayout() super(DecimalPrecisionWidget, self).__init__(parent, **params) LabelWidget(self, i18n_def='Precision') self.__precision_choice__ = ComboBoxWidget( self, clicked_handler=self.__precision_change_handler__, sizePolicy=QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)) for row in range(1, DecimalPrecisionWidget.MAX_PRECISION): self.__precision_choice__.addItem(str(row)) precision = params.get('precision', DecimalPrecisionWidget.MAX_PRECISION) self.__precision_choice__.setCurrentIndex(precision - 1) LabelWidget(self, i18n_def='.', sizePolicy=QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)) self.__scale_choice__ = ComboBoxWidget(self, sizePolicy=QSizePolicy( QSizePolicy.Fixed, QSizePolicy.Fixed)) self.__rescale__() scale = params.get('scale', None) if scale: if scale <= self.__scale_choice__.count(): self.__scale_choice__.setCurrentIndex(scale) self.layout().addStretch(1)
def __init__(self, parent, data_accessor): super(__StepperSizeWidget__, self).__init__(parent, layout=QVBoxLayout()) self.data_accessor = data_accessor info_group = CompositeWidget(self, layout=QHBoxLayout()) LabelWidget(info_group, i18n_def='Stepper size:') self.__size_value__ = LabelWidget(info_group, i18n_def='<value>') self.__unit_value__ = LabelWidget(info_group, i18n_def='') self.__size_slider__ = SliderWidget( self, orientation=Qt.Horizontal, sizePolicy=QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed), value_changed_handler=self.__value_changed__) self.__size_slider__.setTickPosition(QSlider.TicksBelow) self.setValueInUnit(self.data_accessor.signal_x_unit) self.setUnit(self.data_accessor.signal_x_unit) self.__unitsWidget__ = TimeUnitsWidget( self, i18n_def='Units', default_unit=self.data_accessor.signal_x_unit, change_unit_handler=self.changeUnit, layout=QHBoxLayout()) self.__unitsWidget__.addUnit(OrderUnit)
class __StepperSizeWidget__(CompositeWidget): """ widget used to change stepper size """ def __init__(self, parent, data_accessor): super(__StepperSizeWidget__, self).__init__(parent, layout=QVBoxLayout()) self.data_accessor = data_accessor info_group = CompositeWidget(self, layout=QHBoxLayout()) LabelWidget(info_group, i18n_def='Stepper size:') self.__size_value__ = LabelWidget(info_group, i18n_def='<value>') self.__unit_value__ = LabelWidget(info_group, i18n_def='') self.__size_slider__ = SliderWidget(self, orientation=Qt.Horizontal, sizePolicy=QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed), value_changed_handler=self.__value_changed__) self.__size_slider__.setTickPosition(QSlider.TicksBelow) self.setValueInUnit(self.data_accessor.signal_x_unit) self.setUnit(self.data_accessor.signal_x_unit) self.__unitsWidget__ = TimeUnitsWidget(self, i18n_def='Units', default_unit=self.data_accessor.signal_x_unit, change_unit_handler=self.changeUnit, layout=QHBoxLayout()) self.__unitsWidget__.addUnit(OrderUnit) def __value_changed__(self, _value): self.__size_value__.setText(str(_value)) def setValueInUnit(self, _unit): signal = self.data_accessor.signal_in_unit(_unit) self.__size_slider__.setMaximum(int(pl.amax(signal))) self.__size_slider__.setValue(0) self.__size_slider__.setTickInterval(self.__size_slider__.maximum() / 10) # @IgnorePep8 def setUnit(self, _unit): self.__unit_value__.setText(_unit.name) @property def size(self): value = self.__size_slider__.value() return None if value == 0 else value def setSize(self, _size): self.__size_slider__.setValue(int(_size)) def changeUnit(self, _unit): if not _unit == None: self.setValueInUnit(_unit) self.setUnit(_unit) self.__unitsWidget__.setUnit(_unit) @property def unit(self): return self.__unitsWidget__.getUnit()
class DirWidget(CompositeWidget): """ widget gives ability to choose a directory """ def __init__(self, parent, **params): layout = QHBoxLayout() layout.setAlignment(Qt.AlignLeft) get_or_put(params, 'layout', layout) super(DirWidget, self).__init__(parent, **params) LabelWidget(self, i18n_def='Directory:') self.__dir_label__ = LabelWidget(self, i18n_def=__NOT_SET_LABEL__, sizePolicy=QSizePolicy( QSizePolicy.MinimumExpanding, QSizePolicy.Minimum)) PushButtonWidget(self, i18n_def="Browse", clicked_handler=self.__clicked_handler__) def __clicked_handler__(self): _dir = self.__dir_label__.text() if self.__dir_label__.text() else '.' output_dir = QFileDialog.getExistingDirectory( self, caption='Choose dir', directory=_dir, options=QFileDialog.ShowDirsOnly | QFileDialog.DontResolveSymlinks) if output_dir: self.setDirectory(output_dir) @property def directory(self): _dir = str(self.__dir_label__.text()) if not (is_empty(_dir) or __NOT_SET_LABEL__ == _dir): _dir = str(QDir(_dir[1:-1]).path()) return _dir def validate(self): if self.directory == None: ErrorWindow(message="The directory must be selected !") return False return True def setDirectory(self, output_dir): """ set directory by external code """ self.__dir_label__.setText("[%s]" % output_dir)
class DirWidget(CompositeWidget): """ widget gives ability to choose a directory """ def __init__(self, parent, **params): layout = QHBoxLayout() layout.setAlignment(Qt.AlignLeft) get_or_put(params, "layout", layout) super(DirWidget, self).__init__(parent, **params) LabelWidget(self, i18n_def="Directory:") self.__dir_label__ = LabelWidget( self, i18n_def=__NOT_SET_LABEL__, sizePolicy=QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Minimum) ) PushButtonWidget(self, i18n_def="Browse", clicked_handler=self.__clicked_handler__) def __clicked_handler__(self): _dir = self.__dir_label__.text() if self.__dir_label__.text() else "." output_dir = QFileDialog.getExistingDirectory( self, caption="Choose dir", directory=_dir, options=QFileDialog.ShowDirsOnly | QFileDialog.DontResolveSymlinks, ) if output_dir: self.setDirectory(output_dir) @property def directory(self): _dir = str(self.__dir_label__.text()) if not (is_empty(_dir) or __NOT_SET_LABEL__ == _dir): _dir = str(QDir(_dir[1:-1]).path()) return _dir def validate(self): if self.directory == None: ErrorWindow(message="The directory must be selected !") return False return True def setDirectory(self, output_dir): """ set directory by external code """ self.__dir_label__.setText("[%s]" % output_dir)
def __createFilePreview__(self, parent, filename): composite = CompositeWidget(parent) layout = QVBoxLayout() composite.setLayout(layout) informationLabel = LabelWidget(composite) layout.addWidget(informationLabel) preview = PlainTextEditWidget(composite, readonly=True) layout.addWidget(preview) file_ = QFile(filename) if file_.open(QFile.ReadOnly): preview.insertPlainText(QString(file_.readAll())) preview.moveCursor(QTextCursor.Start) informationLabel.setText('Lines # ' + str(preview.document().lineCount())) file_.close() return composite
def __init__(self, parent, **params): get_or_put(params, 'layout', QVBoxLayout()) get_or_put(params, 'i18n_def', 'Miscellaneous') super(MiscellaneousWidget, self).__init__(parent, **params) LabelWidget(self, i18n_def='Data window shift: 1') self.params = Params(**params) self.params.data_accessor.addListener( self, __MiscellaneousVectorListener__(self)) self.__window_size__ = __DataWindowSizeWidget__( self, self.params.data_accessor) self.__unitsWidget__ = TimeUnitsWidget( self, i18n_def='Units', default_unit=self.params.data_accessor.signal_x_unit, change_unit_handler=self.changeUnit, layout=QHBoxLayout()) self.__unitsWidget__.addUnit(OrderUnit) self.__use_parameters__ = CompositeWidget(self, layout=QHBoxLayout()) self.__use_buffer__ = CheckBoxWidget(self.__use_parameters__, i18n_def='Use buffer', checked=True) self.__use_identity_line__ = CheckBoxWidget( self.__use_parameters__, i18n_def='Use identity line', checked=True) self.__sample_step__ = __SampleStepWidget__(self, self.params.data_accessor) self.__stepper_size__ = __StepperSizeWidget__( self, self.params.data_accessor)
def __init__(self, parent, **params): layout = QHBoxLayout() layout.setAlignment(Qt.AlignLeft) get_or_put(params, 'layout', layout) super(DirWidget, self).__init__(parent, **params) LabelWidget(self, i18n_def='Directory:') self.__dir_label__ = LabelWidget(self, i18n_def=__NOT_SET_LABEL__, sizePolicy=QSizePolicy( QSizePolicy.MinimumExpanding, QSizePolicy.Minimum)) PushButtonWidget(self, i18n_def="Browse", clicked_handler=self.__clicked_handler__)
class __SampleStepWidget__(CompositeWidget): """ widget used to change sample step value """ def __init__(self, parent, data_accessor): super(__SampleStepWidget__, self).__init__(parent, layout=QVBoxLayout()) self.data_accessor = data_accessor info_group = CompositeWidget(self, layout=QHBoxLayout()) LabelWidget(info_group, i18n_def='Sample step:') self.__step_value__ = LabelWidget(info_group, i18n_def='<value>') self.__unit_value__ = LabelWidget(info_group, i18n_def='') self.__step_slider__ = SliderWidget( self, orientation=Qt.Horizontal, sizePolicy=QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed), value_changed_handler=self.__value_changed__) self.__step_slider__.setTickPosition(QSlider.TicksBelow) self.setValueInSignalUnit() self.setUnit() def __value_changed__(self, _value): self.__step_value__.setText(str(_value)) def setValueInSignalUnit(self): signal = self.data_accessor.signal self.__step_slider__.setMaximum(int(pl.amax(signal))) self.__step_slider__.setValue(0) self.__step_slider__.setTickInterval(self.__step_slider__.maximum() / 10) # @IgnorePep8 def setUnit(self): self.__unit_value__.setText( self.data_accessor.signal_unit.display_label) @property def step(self): value = self.__step_slider__.value() return None if value == 0 else value def setStep(self, _step): self.__step_slider__.setValue(_step)
def __createFileConstraintsComposite__(self, parent): fileConstraintsComposite = CompositeWidget(parent, layout=QHBoxLayout()) self.chooseRootDirButton = PushButtonWidget( fileConstraintsComposite, i18n="datasource.datasource.choose.root.dir.button", i18n_def="Choose root dir", clicked_handler=self.chooseRootDirAction) LabelWidget(fileConstraintsComposite, i18n="datasource.root.dir.label", i18n_def="Root dir:") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) self.rootDirLabel = LabelWidget(fileConstraintsComposite, i18n="datasource.root.dir.label", i18n_def="[Not set]", sizePolicy=sizePolicy, stretch_after_widget=1) LabelWidget(fileConstraintsComposite, i18n="datasource.file.name.filter.label", i18n_def="Files name filter") self.filesExtension = LineEditWidget( fileConstraintsComposite, maxLength=15, width=get_width_of_n_letters(14), text="*", enabled_precheck_handler=self.enabledPrecheckHandler) self.recursively = CheckBoxWidget( fileConstraintsComposite, i18n="datasource.search.files.recursively.label", i18n_def="Search files recursively", clicked_handler=self.reload, enabled_precheck_handler=self.enabledPrecheckHandler) self.onlyKnownTypes = CheckBoxWidget( fileConstraintsComposite, i18n="datasource.only.known.types.checkbox", i18n_def="Only known types", checked=True, clicked_handler=self.reload, enabled_precheck_handler=self.enabledPrecheckHandler)
def __init__(self, parent, data_accessor): super(__SampleStepWidget__, self).__init__(parent, layout=QVBoxLayout()) self.data_accessor = data_accessor info_group = CompositeWidget(self, layout=QHBoxLayout()) LabelWidget(info_group, i18n_def='Sample step:') self.__step_value__ = LabelWidget(info_group, i18n_def='<value>') self.__unit_value__ = LabelWidget(info_group, i18n_def='') self.__step_slider__ = SliderWidget(self, orientation=Qt.Horizontal, sizePolicy=QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed), value_changed_handler=self.__value_changed__) self.__step_slider__.setTickPosition(QSlider.TicksBelow) self.setValueInSignalUnit() self.setUnit()
class __DataWindowSizeWidget__(CompositeWidget): """ widget used to change data window size """ def __init__(self, parent, data_accessor): super(__DataWindowSizeWidget__, self).__init__(parent, layout=QVBoxLayout()) self.data_accessor = data_accessor info_group = CompositeWidget(self, layout=QHBoxLayout()) LabelWidget(info_group, i18n_def='Data window size:') self.__size_value__ = LabelWidget(info_group, i18n_def='<value>') self.__unit_value__ = LabelWidget(info_group, i18n_def='') self.__size_slider__ = SliderWidget( self, orientation=Qt.Horizontal, sizePolicy=QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed), value_changed_handler=self.__value_changed__) self.__size_slider__.setTickPosition(QSlider.TicksBelow) self.setValueInUnit(self.data_accessor.signal_x_unit) self.setUnit(self.data_accessor.signal_x_unit) def __value_changed__(self, _value): self.__size_value__.setText(str(_value)) def setValueInUnit(self, _unit): signal = self.data_accessor.signal_in_unit(_unit) self.__size_slider__.setMaximum(int(pl.amax(signal))) self.__size_slider__.setValue(0) self.__size_slider__.setTickInterval(self.__size_slider__.maximum() / 10) # @IgnorePep8 def setUnit(self, _unit): self.__unit_value__.setText(_unit.name) @property def size(self): return self.__size_slider__.value() def setSize(self, _size): self.__size_slider__.setValue(int(_size))
class __SampleStepWidget__(CompositeWidget): """ widget used to change sample step value """ def __init__(self, parent, data_accessor): super(__SampleStepWidget__, self).__init__(parent, layout=QVBoxLayout()) self.data_accessor = data_accessor info_group = CompositeWidget(self, layout=QHBoxLayout()) LabelWidget(info_group, i18n_def='Sample step:') self.__step_value__ = LabelWidget(info_group, i18n_def='<value>') self.__unit_value__ = LabelWidget(info_group, i18n_def='') self.__step_slider__ = SliderWidget(self, orientation=Qt.Horizontal, sizePolicy=QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed), value_changed_handler=self.__value_changed__) self.__step_slider__.setTickPosition(QSlider.TicksBelow) self.setValueInSignalUnit() self.setUnit() def __value_changed__(self, _value): self.__step_value__.setText(str(_value)) def setValueInSignalUnit(self): signal = self.data_accessor.signal self.__step_slider__.setMaximum(int(pl.amax(signal))) self.__step_slider__.setValue(0) self.__step_slider__.setTickInterval(self.__step_slider__.maximum() / 10) # @IgnorePep8 def setUnit(self): self.__unit_value__.setText( self.data_accessor.signal_unit.display_label) @property def step(self): value = self.__step_slider__.value() return None if value == 0 else value def setStep(self, _step): self.__step_slider__.setValue(_step)
def __init__(self, parent, data_accessor): super(__SampleStepWidget__, self).__init__(parent, layout=QVBoxLayout()) self.data_accessor = data_accessor info_group = CompositeWidget(self, layout=QHBoxLayout()) LabelWidget(info_group, i18n_def='Sample step:') self.__step_value__ = LabelWidget(info_group, i18n_def='<value>') self.__unit_value__ = LabelWidget(info_group, i18n_def='') self.__step_slider__ = SliderWidget( self, orientation=Qt.Horizontal, sizePolicy=QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed), value_changed_handler=self.__value_changed__) self.__step_slider__.setTickPosition(QSlider.TicksBelow) self.setValueInSignalUnit() self.setUnit()
class __DataWindowSizeWidget__(CompositeWidget): """ widget used to change data window size """ def __init__(self, parent, data_accessor): super(__DataWindowSizeWidget__, self).__init__(parent, layout=QVBoxLayout()) self.data_accessor = data_accessor info_group = CompositeWidget(self, layout=QHBoxLayout()) LabelWidget(info_group, i18n_def='Data window size:') self.__size_value__ = LabelWidget(info_group, i18n_def='<value>') self.__unit_value__ = LabelWidget(info_group, i18n_def='') self.__size_slider__ = SliderWidget(self, orientation=Qt.Horizontal, sizePolicy=QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed), value_changed_handler=self.__value_changed__) self.__size_slider__.setTickPosition(QSlider.TicksBelow) self.setValueInUnit(self.data_accessor.signal_x_unit) self.setUnit(self.data_accessor.signal_x_unit) def __value_changed__(self, _value): self.__size_value__.setText(str(_value)) def setValueInUnit(self, _unit): signal = self.data_accessor.signal_in_unit(_unit) self.__size_slider__.setMaximum(int(pl.amax(signal))) self.__size_slider__.setValue(0) self.__size_slider__.setTickInterval(self.__size_slider__.maximum() / 10) # @IgnorePep8 def setUnit(self, _unit): self.__unit_value__.setText(_unit.name) @property def size(self): return self.__size_slider__.value() def setSize(self, _size): self.__size_slider__.setValue(int(_size))
def __init__(self, parent, **params): layout = QHBoxLayout() layout.setAlignment(Qt.AlignLeft) get_or_put(params, "layout", layout) super(DirWidget, self).__init__(parent, **params) LabelWidget(self, i18n_def="Directory:") self.__dir_label__ = LabelWidget( self, i18n_def=__NOT_SET_LABEL__, sizePolicy=QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Minimum) ) PushButtonWidget(self, i18n_def="Browse", clicked_handler=self.__clicked_handler__)
def __init__(self, _parent, _header_label, _header_elements): QWidget.__init__(self, parent=_parent) layout = QVBoxLayout(self) self.setLayout(layout) LabelWidget(self, i18n_def=_header_label) self.__buttons__ = {} for header_element in _header_elements: handler = __Handler__(header_element.handler, self) self.__buttons__[header_element.name] = CheckBoxWidget(self, i18n_def=header_element.label, clicked_handler=handler)
def __init__(self, parent, data_accessor): super(__StepperSizeWidget__, self).__init__(parent, layout=QVBoxLayout()) self.data_accessor = data_accessor info_group = CompositeWidget(self, layout=QHBoxLayout()) LabelWidget(info_group, i18n_def='Stepper size:') self.__size_value__ = LabelWidget(info_group, i18n_def='<value>') self.__unit_value__ = LabelWidget(info_group, i18n_def='') self.__size_slider__ = SliderWidget(self, orientation=Qt.Horizontal, sizePolicy=QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed), value_changed_handler=self.__value_changed__) self.__size_slider__.setTickPosition(QSlider.TicksBelow) self.setValueInUnit(self.data_accessor.signal_x_unit) self.setUnit(self.data_accessor.signal_x_unit) self.__unitsWidget__ = TimeUnitsWidget(self, i18n_def='Units', default_unit=self.data_accessor.signal_x_unit, change_unit_handler=self.changeUnit, layout=QHBoxLayout()) self.__unitsWidget__.addUnit(OrderUnit)
def __init__(self, parent, **params): super(ActivityWidget, self).__init__(parent, layout=QHBoxLayout(), **params) self.activityButton = CheckBoxWidget( self, i18n="activity.button", i18n_def="Save as activity", clicked_handler=self.__clickedHandler__) LabelWidget(self, i18n="activity.description.label", i18n_def="Activity description (optional):") self.activityDescription = LineEditWidget(self, enabled=False)
def __createFileConstraintsComposite__(self, parent): fileConstraintsComposite = CompositeWidget(parent, layout=QHBoxLayout()) self.chooseRootDirButton = PushButtonWidget(fileConstraintsComposite, i18n="datasource.datasource.choose.root.dir.button", i18n_def="Choose root dir", clicked_handler=self.chooseRootDirAction) LabelWidget(fileConstraintsComposite, i18n="datasource.root.dir.label", i18n_def="Root dir:") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) self.rootDirLabel = LabelWidget(fileConstraintsComposite, i18n="datasource.root.dir.label", i18n_def="[Not set]", sizePolicy=sizePolicy, stretch_after_widget=1) LabelWidget(fileConstraintsComposite, i18n="datasource.file.name.filter.label", i18n_def="Files name filter") self.filesExtension = LineEditWidget(fileConstraintsComposite, maxLength=15, width=get_width_of_n_letters(14), text="*", enabled_precheck_handler=self.enabledPrecheckHandler) self.recursively = CheckBoxWidget(fileConstraintsComposite, i18n="datasource.search.files.recursively.label", i18n_def="Search files recursively", clicked_handler=self.reload, enabled_precheck_handler=self.enabledPrecheckHandler) self.onlyKnownTypes = CheckBoxWidget(fileConstraintsComposite, i18n="datasource.only.known.types.checkbox", i18n_def="Only known types", checked=True, clicked_handler=self.reload, enabled_precheck_handler=self.enabledPrecheckHandler)
def __init__(self, parent, **params): layout = QVBoxLayout() layout.setAlignment(Qt.AlignCenter) get_or_put(params, 'layout', layout) super(ChooseColorWidget, self).__init__(parent, **params) get_or_put(params, 'title', 'Color changer') get_or_put(params, 'default_color', Qt.black) self.params = Params(**params) LabelWidget(self, i18n_def=self.params.title) PushButtonWidget(self, i18n_def="Change color", clicked_handler=self.__change_color_handler__) self.__color_area__ = __FrameWidget__(self) PushButtonWidget(self, i18n_def="Restore default", clicked_handler=self.__restore_default_handler__) self.setcolor(self.params.default_color)
class ChooseDatasourcePage(QWizardPage): def __init__(self, _parent): QWizardPage.__init__(self, parent=_parent) def initializePage(self): title_I18N(self, "datasource.page.title", "Datasource chooser") #self.setSubTitle('Setup frame specific data') pageLayout = QVBoxLayout() self.setLayout(pageLayout) self.__createFilesGroupBox(pageLayout) #to force call of isComplete(self) method by the Wizard framework #which causes state next button to be updated self.emit(WIZARD_COMPLETE_CHANGED_SIGNAL) self.rootDir = None def __createFilesGroupBox(self, pageLayout): self.filesGroupBox = GroupBoxWidget(self, i18n="datasource.files.group.title", i18n_def="Files", layout=QVBoxLayout()) self.__createFileConstraintsComposite__(self.filesGroupBox) self.__createReloadButton__(self.filesGroupBox) self.__createTableView__(self.filesGroupBox) self.__createFilesOperationsComposite__(self.filesGroupBox) self.changeEnablemend(False) self.chooseRootDirButton.setEnabled(True) def __createFileConstraintsComposite__(self, parent): fileConstraintsComposite = CompositeWidget(parent, layout=QHBoxLayout()) self.chooseRootDirButton = PushButtonWidget(fileConstraintsComposite, i18n="datasource.datasource.choose.root.dir.button", i18n_def="Choose root dir", clicked_handler=self.chooseRootDirAction) LabelWidget(fileConstraintsComposite, i18n="datasource.root.dir.label", i18n_def="Root dir:") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) self.rootDirLabel = LabelWidget(fileConstraintsComposite, i18n="datasource.root.dir.label", i18n_def="[Not set]", sizePolicy=sizePolicy, stretch_after_widget=1) LabelWidget(fileConstraintsComposite, i18n="datasource.file.name.filter.label", i18n_def="Files name filter") self.filesExtension = LineEditWidget(fileConstraintsComposite, maxLength=15, width=get_width_of_n_letters(14), text="*", enabled_precheck_handler=self.enabledPrecheckHandler) self.recursively = CheckBoxWidget(fileConstraintsComposite, i18n="datasource.search.files.recursively.label", i18n_def="Search files recursively", clicked_handler=self.reload, enabled_precheck_handler=self.enabledPrecheckHandler) self.onlyKnownTypes = CheckBoxWidget(fileConstraintsComposite, i18n="datasource.only.known.types.checkbox", i18n_def="Only known types", checked=True, clicked_handler=self.reload, enabled_precheck_handler=self.enabledPrecheckHandler) def __createReloadButton__(self, parent): self.reloadButton = PushButtonWidget(parent, i18n="datasource.reload.button", i18n_def="Reload", clicked_handler=self.reload, alignment=Qt.AlignRight, enabled_precheck_handler=self.enabledPrecheckHandler) def __createTableView__(self, parent): self.filesTableView = FilesTableView(parent, model=QStandardItemModel(self), onClickedAction=self.onClickedAction, wizardButtons=(QWizard.NextButton,), wizard_handler=self.wizard, sorting=True, enabled_precheck_handler=self.enabledPrecheckHandler) def __createFilesOperationsComposite__(self, parent): filesOperations = CompositeWidget(parent, layout=QHBoxLayout()) self.filePreviewButton = PushButtonWidget(filesOperations, i18n="datasource.file.preview.button", i18n_def="File preview", stretch_after_widget=1, clicked_handler=self.filePreviewAction, enabled_precheck_handler=self.enabledPrecheckHandler) self.selectAllButton = PushButtonWidget(filesOperations, i18n="datasource.accept.select.all.button", i18n_def="Select all", enabled=False, clicked_handler=self.__select_all_handler__, enabled_precheck_handler=self.enabledPrecheckHandler) self.unselectAllButton = PushButtonWidget(filesOperations, i18n="datasource.accept.unselect.all.button", i18n_def="Unselect all", enabled=False, clicked_handler=self.__unselect_all_handler__, enabled_precheck_handler=self.enabledPrecheckHandler) def chooseRootDirAction(self): SettingsFactory.loadSettings(self, Setter(rootDir=None)) rootDir = QFileDialog.getExistingDirectory(self, caption=self.chooseRootDirButton.text(), directory=self.rootDir) if rootDir: self.rootDir = rootDir + os.path.sep SettingsFactory.saveSettings(self, Setter(rootDir=self.rootDir)) self.rootDirLabel.setText(self.rootDir) self.reload() def __select_all_handler__(self): self.__change_selection__(True) def __unselect_all_handler__(self): self.__change_selection__(False) def __change_selection__(self, _select): self.changeEnablemend(False) count = self.filesTableView.getRowCount() progressManager = ProgressDialogManager(self, label_text=("Selecting..." if _select else "Unselecting..."), max_value=count) with progressManager as progress: for idx in range(count): if (progress.wasCanceled()): break progress.increaseCounter() if _select: self.filesTableView.setCheckedRowState(idx, Qt.Checked) else: self.filesTableView.setCheckedRowState(idx, Qt.Unchecked) self.filesTableView.changeCompleteState() self.changeEnablemend(True) def filePreviewAction(self): showFilesPreviewDialog( self.filesTableView.getSelectedPathAndFilename()) def reload(self): self.changeEnablemend(True) if self.rootDirLabel.text(): self.filesTableView.clear() self.changeEnablemend(False) iteratorFlag = QDirIterator.Subdirectories \ if self.recursively.isChecked() \ else QDirIterator.NoIteratorFlags nameFilters = QStringList( self.filesExtension.text()) \ if len(self.filesExtension.text()) > 0 \ and not self.filesExtension.text() \ in ("*", "*.*", "", None) \ else QStringList() self.iterator = QDirIterator( self.rootDirLabel.text(), nameFilters, QDir.Filters(QDir.Files), iteratorFlag) with ProgressDialogManager(self) as progress: while(self.iterator.next()): if (progress.wasCanceled()): break fileInfo = self.iterator.fileInfo() if fileInfo.size() == 0 or fileInfo.isFile() == False: continue if self.filesExtension.text() in ("*", "*.*", "", None): if (sys.platform == 'win32' \ and fileInfo.isExecutable() == True) \ or is_text_file(fileInfo.filePath(), self.onlyKnownTypes.checkState()) == False: continue progress.increaseCounter() checkable = QStandardItem("") checkable.setCheckable(True) filename = QStandardItem(fileInfo.fileName()) progress.setLabelText(fileInfo.fileName()) size = QStandardItem(str(fileInfo.size())) path = QStandardItem(fileInfo.path()) self.filesTableView.addRow((checkable, filename, size, path)) # @IgnorePep8 self.filesTableView.resizeColumnsToContents() self.filesExtension.setFocus() self.changeEnablemend(True) def onClickedAction(self, idx): self.filePreviewButton.setEnabled(True) self.filesTableView.onClickedAction(idx) def isComplete(self): """ method used by QWizard to check if next/previous buttons have to be disabled/enabled (when False/True is returned) """ return self.filesTableView.isCompletedCount() def changeEnablemend(self, enabled): self.emit(SIGNAL(ENABLED_SIGNAL_NAME), enabled) self.chooseRootDirButton.setEnabled(enabled) def enabledPrecheckHandler(self, widget): """ only interested widgets return bool value others none value """ if widget in (self.selectAllButton, self.unselectAllButton): return self.filesTableView.count() > 0 elif widget == self.filePreviewButton: return self.filesTableView.getSelectedRowCount() > 0 def getDatasourceModel(self): return self.filesTableView.getModel()
class ChooseDatasourcePage(QWizardPage): def __init__(self, _parent): QWizardPage.__init__(self, parent=_parent) def initializePage(self): title_I18N(self, "datasource.page.title", "Datasource chooser") #self.setSubTitle('Setup frame specific data') pageLayout = QVBoxLayout() self.setLayout(pageLayout) self.__createFilesGroupBox(pageLayout) #to force call of isComplete(self) method by the Wizard framework #which causes state next button to be updated self.emit(WIZARD_COMPLETE_CHANGED_SIGNAL) self.rootDir = None def __createFilesGroupBox(self, pageLayout): self.filesGroupBox = GroupBoxWidget( self, i18n="datasource.files.group.title", i18n_def="Files", layout=QVBoxLayout()) self.__createFileConstraintsComposite__(self.filesGroupBox) self.__createReloadButton__(self.filesGroupBox) self.__createTableView__(self.filesGroupBox) self.__createFilesOperationsComposite__(self.filesGroupBox) self.changeEnablemend(False) self.chooseRootDirButton.setEnabled(True) def __createFileConstraintsComposite__(self, parent): fileConstraintsComposite = CompositeWidget(parent, layout=QHBoxLayout()) self.chooseRootDirButton = PushButtonWidget( fileConstraintsComposite, i18n="datasource.datasource.choose.root.dir.button", i18n_def="Choose root dir", clicked_handler=self.chooseRootDirAction) LabelWidget(fileConstraintsComposite, i18n="datasource.root.dir.label", i18n_def="Root dir:") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) self.rootDirLabel = LabelWidget(fileConstraintsComposite, i18n="datasource.root.dir.label", i18n_def="[Not set]", sizePolicy=sizePolicy, stretch_after_widget=1) LabelWidget(fileConstraintsComposite, i18n="datasource.file.name.filter.label", i18n_def="Files name filter") self.filesExtension = LineEditWidget( fileConstraintsComposite, maxLength=15, width=get_width_of_n_letters(14), text="*", enabled_precheck_handler=self.enabledPrecheckHandler) self.recursively = CheckBoxWidget( fileConstraintsComposite, i18n="datasource.search.files.recursively.label", i18n_def="Search files recursively", clicked_handler=self.reload, enabled_precheck_handler=self.enabledPrecheckHandler) self.onlyKnownTypes = CheckBoxWidget( fileConstraintsComposite, i18n="datasource.only.known.types.checkbox", i18n_def="Only known types", checked=True, clicked_handler=self.reload, enabled_precheck_handler=self.enabledPrecheckHandler) def __createReloadButton__(self, parent): self.reloadButton = PushButtonWidget( parent, i18n="datasource.reload.button", i18n_def="Reload", clicked_handler=self.reload, alignment=Qt.AlignRight, enabled_precheck_handler=self.enabledPrecheckHandler) def __createTableView__(self, parent): self.filesTableView = FilesTableView( parent, model=QStandardItemModel(self), onClickedAction=self.onClickedAction, wizardButtons=(QWizard.NextButton, ), wizard_handler=self.wizard, sorting=True, enabled_precheck_handler=self.enabledPrecheckHandler) def __createFilesOperationsComposite__(self, parent): filesOperations = CompositeWidget(parent, layout=QHBoxLayout()) self.filePreviewButton = PushButtonWidget( filesOperations, i18n="datasource.file.preview.button", i18n_def="File preview", stretch_after_widget=1, clicked_handler=self.filePreviewAction, enabled_precheck_handler=self.enabledPrecheckHandler) self.selectAllButton = PushButtonWidget( filesOperations, i18n="datasource.accept.select.all.button", i18n_def="Select all", enabled=False, clicked_handler=self.__select_all_handler__, enabled_precheck_handler=self.enabledPrecheckHandler) self.unselectAllButton = PushButtonWidget( filesOperations, i18n="datasource.accept.unselect.all.button", i18n_def="Unselect all", enabled=False, clicked_handler=self.__unselect_all_handler__, enabled_precheck_handler=self.enabledPrecheckHandler) def chooseRootDirAction(self): SettingsFactory.loadSettings(self, Setter(rootDir=None)) rootDir = QFileDialog.getExistingDirectory( self, caption=self.chooseRootDirButton.text(), directory=self.rootDir) if rootDir: self.rootDir = rootDir + os.path.sep SettingsFactory.saveSettings(self, Setter(rootDir=self.rootDir)) self.rootDirLabel.setText(self.rootDir) self.reload() def __select_all_handler__(self): self.__change_selection__(True) def __unselect_all_handler__(self): self.__change_selection__(False) def __change_selection__(self, _select): self.changeEnablemend(False) count = self.filesTableView.getRowCount() progressManager = ProgressDialogManager( self, label_text=("Selecting..." if _select else "Unselecting..."), max_value=count) with progressManager as progress: for idx in range(count): if (progress.wasCanceled()): break progress.increaseCounter() if _select: self.filesTableView.setCheckedRowState(idx, Qt.Checked) else: self.filesTableView.setCheckedRowState(idx, Qt.Unchecked) self.filesTableView.changeCompleteState() self.changeEnablemend(True) def filePreviewAction(self): showFilesPreviewDialog( self.filesTableView.getSelectedPathAndFilename()) def reload(self): self.changeEnablemend(True) if self.rootDirLabel.text(): self.filesTableView.clear() self.changeEnablemend(False) iteratorFlag = QDirIterator.Subdirectories \ if self.recursively.isChecked() \ else QDirIterator.NoIteratorFlags nameFilters = QStringList( self.filesExtension.text()) \ if len(self.filesExtension.text()) > 0 \ and not self.filesExtension.text() \ in ("*", "*.*", "", None) \ else QStringList() self.iterator = QDirIterator(self.rootDirLabel.text(), nameFilters, QDir.Filters(QDir.Files), iteratorFlag) with ProgressDialogManager(self) as progress: while (self.iterator.next()): if (progress.wasCanceled()): break fileInfo = self.iterator.fileInfo() if fileInfo.size() == 0 or fileInfo.isFile() == False: continue if self.filesExtension.text() in ("*", "*.*", "", None): if (sys.platform == 'win32' \ and fileInfo.isExecutable() == True) \ or is_text_file(fileInfo.filePath(), self.onlyKnownTypes.checkState()) == False: continue progress.increaseCounter() checkable = QStandardItem("") checkable.setCheckable(True) filename = QStandardItem(fileInfo.fileName()) progress.setLabelText(fileInfo.fileName()) size = QStandardItem(str(fileInfo.size())) path = QStandardItem(fileInfo.path()) self.filesTableView.addRow( (checkable, filename, size, path)) # @IgnorePep8 self.filesTableView.resizeColumnsToContents() self.filesExtension.setFocus() self.changeEnablemend(True) def onClickedAction(self, idx): self.filePreviewButton.setEnabled(True) self.filesTableView.onClickedAction(idx) def isComplete(self): """ method used by QWizard to check if next/previous buttons have to be disabled/enabled (when False/True is returned) """ return self.filesTableView.isCompletedCount() def changeEnablemend(self, enabled): self.emit(SIGNAL(ENABLED_SIGNAL_NAME), enabled) self.chooseRootDirButton.setEnabled(enabled) def enabledPrecheckHandler(self, widget): """ only interested widgets return bool value others none value """ if widget in (self.selectAllButton, self.unselectAllButton): return self.filesTableView.count() > 0 elif widget == self.filePreviewButton: return self.filesTableView.getSelectedRowCount() > 0 def getDatasourceModel(self): return self.filesTableView.getModel()
class __StepperSizeWidget__(CompositeWidget): """ widget used to change stepper size """ def __init__(self, parent, data_accessor): super(__StepperSizeWidget__, self).__init__(parent, layout=QVBoxLayout()) self.data_accessor = data_accessor info_group = CompositeWidget(self, layout=QHBoxLayout()) LabelWidget(info_group, i18n_def='Stepper size:') self.__size_value__ = LabelWidget(info_group, i18n_def='<value>') self.__unit_value__ = LabelWidget(info_group, i18n_def='') self.__size_slider__ = SliderWidget( self, orientation=Qt.Horizontal, sizePolicy=QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed), value_changed_handler=self.__value_changed__) self.__size_slider__.setTickPosition(QSlider.TicksBelow) self.setValueInUnit(self.data_accessor.signal_x_unit) self.setUnit(self.data_accessor.signal_x_unit) self.__unitsWidget__ = TimeUnitsWidget( self, i18n_def='Units', default_unit=self.data_accessor.signal_x_unit, change_unit_handler=self.changeUnit, layout=QHBoxLayout()) self.__unitsWidget__.addUnit(OrderUnit) def __value_changed__(self, _value): self.__size_value__.setText(str(_value)) def setValueInUnit(self, _unit): signal = self.data_accessor.signal_in_unit(_unit) self.__size_slider__.setMaximum(int(pl.amax(signal))) self.__size_slider__.setValue(0) self.__size_slider__.setTickInterval(self.__size_slider__.maximum() / 10) # @IgnorePep8 def setUnit(self, _unit): self.__unit_value__.setText(_unit.name) @property def size(self): value = self.__size_slider__.value() return None if value == 0 else value def setSize(self, _size): self.__size_slider__.setValue(int(_size)) def changeUnit(self, _unit): if not _unit == None: self.setValueInUnit(_unit) self.setUnit(_unit) self.__unitsWidget__.setUnit(_unit) @property def unit(self): return self.__unitsWidget__.getUnit()