Exemplo n.º 1
0
 def on_arbBtn_clicked(self):
     dlg = QDialog(self)
     loadUi(dlg, 'change.ui')
     with SettingGroup('main') as settings:
         dlg.xEdit.setText(settings.value('changex', 'x'))
         dlg.yEdit.setText(settings.value('changey', 'y'))
         dlg.dyEdit.setText(settings.value('changedy', 'dy'))
         if dlg.exec_() != QDialog.Accepted:
             return
         settings.setValue('changex', dlg.xEdit.text())
         settings.setValue('changey', dlg.yEdit.text())
         settings.setValue('changedy', dlg.dyEdit.text())
     xfml = dlg.xEdit.text()
     yfml = dlg.yEdit.text()
     dyfml = dlg.dyEdit.text()
     new_x = []
     new_y = []
     new_dy = []
     ns = {}
     for dpoint in zip(self.data.x, self.data.y_raw, self.data.dy_raw):
         ns.update(x=dpoint[0], y=dpoint[1], dy=dpoint[2])
         new_x.append(eval(xfml, ns))
         new_y.append(eval(yfml, ns))
         new_dy.append(eval(dyfml, ns))
     self.data.x[:] = new_x
     self.data.y_raw[:] = new_y
     self.data.dy_raw[:] = new_dy
     self.data.y = self.data.y_raw / self.data.norm
     self.data.dy = self.data.dy_raw / self.data.norm
     self.replotRequest.emit(None)
     session.set_dirty()
Exemplo n.º 2
0
    def on_subtractBtn_clicked(self):
        from ufit.gui.scanitem import ScanDataItem
        dlg = QDialog(self)
        loadUi(dlg, 'subtract.ui')
        data2obj = dlg.setList.populate(ScanDataItem)
        if dlg.exec_() != QDialog.Accepted:
            return
        witems = dlg.setList.selectedItems()
        if not witems:
            return
        try:
            prec = float(dlg.precisionEdit.text())
        except ValueError:
            QMessageBox.warning(self, 'Error',
                                'Please enter a valid precision.')
            return

        new_data = self.data.subtract(data2obj[witems[0].type()].data, prec,
                                      dlg.destructBox.isChecked())

        if not dlg.destructBox.isChecked():
            new_model = self.model.copy()
            from ufit.gui.scanitem import ScanDataItem
            session.add_item(ScanDataItem(new_data, new_model),
                             self.item.group)
        else:
            self.replotRequest.emit(None)
            session.set_dirty()
Exemplo n.º 3
0
 def on_addCustomBtn_clicked(self):
     dlg = QDialog(self)
     loadUi(dlg, 'custommodel.ui')
     while 1:
         if dlg.exec_() != QDialog.Accepted:
             return
         modelname = str(dlg.nameBox.text())
         params = str(dlg.paramBox.text())
         value = str(dlg.valueEdit.toPlainText()).strip()
         if not ident_re.match(modelname):
             QMessageBox.warning(
                 self, 'Error', 'Please enter a valid model '
                 'name (must be a Python identifier using '
                 'only alphabetic characters and digits).')
             continue
         if not params:
             QMessageBox.warning(self, 'Error',
                                 'Please enter some parameters.')
             continue
         for param in params.split():
             if not ident_re.match(param):
                 QMessageBox.warning(
                     self, 'Error', 'Parameter name %s is not valid (must '
                     'be a Python identifier using only alphabetic '
                     'characters and digits).' % param)
                 params = None
                 break
         if not params:
             continue
         break
     self.insert_model_code('Custom(%r, %r, %r)' %
                            (modelname, params, value))
Exemplo n.º 4
0
    def on_addboxBtn_clicked(self):
        x1, x2 = map(int, self.canvas.axes.get_xlim())
        y1, y2 = map(int, self.canvas.axes.get_ylim())
        box = QWidget(self)
        loadUi(box, 'box.ui')
        # there's always a stretcher at the bottom
        self.boxLayout.insertWidget(self.boxLayout.count() - 1, box)
        self.boxes.append(box)
        box.nameBox.setText('Box %d' % len(self.boxes))
        box.x1Box.setValue(x1)
        box.x2Box.setValue(x2)
        box.y1Box.setValue(y1)
        box.y2Box.setValue(y2)

        def boxchange(v):
            self.plot(False)

        def boxremove(box=box):
            index = self.boxes.index(box)
            del self.boxes[index]
            item = self.boxLayout.takeAt(index)
            item.widget().deleteLater()
            self.plot(False)

        box.x1Box.valueChanged.connect(boxchange)
        box.x2Box.valueChanged.connect(boxchange)
        box.y1Box.valueChanged.connect(boxchange)
        box.y2Box.valueChanged.connect(boxchange)
        box.delBtn.clicked.connect(boxremove)
        self.plot(False)
Exemplo n.º 5
0
    def __init__(self, parent):
        QMainWindow.__init__(self, parent)
        loadUi(self, 'browse.ui')
        self.logger = logger.getChild('browse')

        self.dataloader = parent
        self.rootdir = ''
        self.loader = Loader()
        self._data = {}
        self.yaxis = None
        self.canvas = MPLCanvas(self)
        self.canvas.plotter.lines = True
        self.toolbar = MPLToolbar(self.canvas, self)
        self.toolbar.setObjectName('browsetoolbar')
        self.addToolBar(self.toolbar)
        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self.canvas)
        self.plotframe.setLayout(layout)
        self.sgroup = SettingGroup('browse')

        with self.sgroup as settings:
            geometry = settings.value('geometry', QByteArray())
            self.restoreGeometry(geometry)
            windowstate = settings.value('windowstate', QByteArray())
            self.restoreState(windowstate)
            splitstate = settings.value('splitstate', QByteArray())
            self.splitter.restoreState(splitstate)
            self.monScaleEdit.setText(settings.value('fixedmonval'))
Exemplo n.º 6
0
    def createUI(self, standalone):
        loadUi(self, 'dataloader.ui')
        self.dataformatBox.addItem('auto')
        for fmt in sorted(data_formats):
            self.dataformatBox.addItem(fmt)

        self.buttonBox.addButton(QDialogButtonBox.Open)
        self.buttonBox.addButton('Preview', QDialogButtonBox.NoRole)
Exemplo n.º 7
0
 def __init__(self, parent, items):
     QDialog.__init__(self, parent)
     loadUi(self, 'paramset.ui')
     self.new_data = None
     self.items = items
     self.xaxisList.populate(items)
     self.yaxisList.populate(items)
     self._auto_name = ''
Exemplo n.º 8
0
    def __init__(self, parent):
        QWidget.__init__(self, parent)
        self.item = None
        self.data = None
        self.picking = None
        self.picked_points = []

        loadUi(self, 'dataops.ui')
        self.pickedLbl.hide()
Exemplo n.º 9
0
 def createUI(self):
     loadUi(self, 'modelbuilder.ui')
     self.modeldefStacker.setCurrentIndex(0)
     self.model_dict = {}
     for model in concrete_models:
         QListWidgetItem(model.__name__, self.premodelsList)
         self.model_dict[model.__name__] = model
     self.buttonBox.addButton('Check', QDialogButtonBox.NoRole)
     self.buttonBox.addButton(QDialogButtonBox.Apply)
Exemplo n.º 10
0
 def __init__(self, parent, canvas, item):
     QFrame.__init__(self, parent)
     loadUi(self, 'mapping.ui')
     self._limits = None
     self.item = item
     self.logger = logger.getChild('mapping')
     self.canvas = canvas
     self.mapdata = None
     self.set_datas(item.datas)
     self.set_settings(item.settings)
Exemplo n.º 11
0
    def createUI(self, standalone):
        loadUi(self, 'fitter.ui')

        if standalone:
            self.buttonBox.addButton(QDialogButtonBox.Close)
        self.buttonBox.addButton('Initial guess', QDialogButtonBox.HelpRole)
        self.buttonBox.addButton('Save params', QDialogButtonBox.ResetRole)
        self.buttonBox.addButton('Restore saved', QDialogButtonBox.ResetRole)
        self.buttonBox.addButton('Replot', QDialogButtonBox.ActionRole)
        fitbtn = self.buttonBox.addButton('Fit', QDialogButtonBox.ApplyRole)
        fitbtn.setShortcut(QKeySequence('Ctrl+F'))
        fitbtn.setIcon(QIcon.fromTheme('dialog-ok'))
Exemplo n.º 12
0
 def on_actionMergeData_triggered(self):
     items = self.selected_items(ScanDataItem)
     if len(items) < 2:
         return
     dlg = QDialog(self)
     loadUi(dlg, 'rebin.ui')
     if dlg.exec_():
         try:
             precision = float(dlg.precisionEdit.text())
         except ValueError:
             return
         datalist = [i.data for i in items]
         new_data = datalist[0].merge(precision, *datalist[1:])
         session.add_item(ScanDataItem(new_data), self.items[-1].group)
Exemplo n.º 13
0
    def __init__(self, parent):
        self._updating = False
        self._data = None
        QMainWindow.__init__(self, parent)
        loadUi(self, 'inspector.ui')
        # layout = QVBoxLayout()
        # layout.setContentsMargins(0, 0, 0, 0)
        # layout.addWidget(self.canvas)
        self.sgroup = SettingGroup('inspector')
        self.tbl.verticalHeader().setDefaultSectionSize(
            self.tbl.verticalHeader().minimumSectionSize() + 2)

        with self.sgroup as settings:
            geometry = settings.value('geometry', QByteArray())
            self.restoreGeometry(geometry)
            windowstate = settings.value('windowstate', QByteArray())
            self.restoreState(windowstate)
Exemplo n.º 14
0
    def __init__(self, parent):
        self._updating = False
        self._data = None
        QMainWindow.__init__(self, parent)
        loadUi(self, 'annotations.ui')
        self.sgroup = SettingGroup('annotations')

        session.propsRequested.connect(self.on_session_propsRequested)
        session.propsUpdated.connect(self.on_session_propsUpdated)

        with self.sgroup as settings:
            geometry = settings.value('geometry', QByteArray())
            self.restoreGeometry(geometry)
            windowstate = settings.value('windowstate', QByteArray())
            self.restoreState(windowstate)

        self._editing = True
        self.on_session_propsUpdated()
Exemplo n.º 15
0
 def on_actionReorder_triggered(self):
     dlg = QDialog(self)
     loadUi(dlg, 'reorder.ui')
     data2obj = dlg.itemList.populate()
     if not dlg.exec_():
         return
     new_structure = []
     for i in range(dlg.itemList.count()):
         new_index = dlg.itemList.item(i).type()
         obj = data2obj[new_index]
         if isinstance(obj, ItemGroup):
             new_structure.append((obj, []))
         else:
             if not new_structure:
                 QMessageBox.warning(
                     self, 'ufit', 'Reordering invalid: every data item '
                     'must be below a group')
                 return
             new_structure[-1][1].append(obj)
     session.reorder_groups(new_structure)
     self.re_expand_tree()
Exemplo n.º 16
0
    def __init__(self):
        QMainWindow.__init__(self)

        self.itempanels = {}
        self.multipanels = {}
        self.current_panel = None
        self.inspector_window = None
        self.annotation_window = None

        self.sgroup = SettingGroup('main')
        loadUi(self, 'main.ui')

        self.menuRecent.aboutToShow.connect(self.on_menuRecent_aboutToShow)
        self.menuMoveToGroup = QMenu('Move selected to group', self)
        self.menuMoveToGroup.setIcon(QIcon(':/drawer-open.png'))
        self.menuMoveToGroup.aboutToShow.connect(
            self.on_menuMoveToGroup_aboutToShow)
        self.menuCopyToGroup = QMenu('Copy selected to group', self)
        self.menuCopyToGroup.setIcon(QIcon(':/drawer-double-open.png'))
        self.menuCopyToGroup.aboutToShow.connect(
            self.on_menuCopyToGroup_aboutToShow)
        self.menuRemoveGroup = QMenu('Remove group', self)
        self.menuRemoveGroup.setIcon(QIcon(':/drawer--minus.png'))
        self.menuRemoveGroup.aboutToShow.connect(
            self.on_menuRemoveGroup_aboutToShow)
        self.menuRenameGroup = QMenu('Rename group', self)
        self.menuRenameGroup.aboutToShow.connect(
            self.on_menuRenameGroup_aboutToShow)

        # populate plot view
        layout2 = QVBoxLayout()
        layout2.setContentsMargins(0, 0, 0, 0)
        self.canvas = MPLCanvas(self, maincanvas=True)
        self.canvas.replotRequest.connect(
            lambda: self.current_panel.plot(True))
        self.canvas.mpl_connect('button_press_event', self.on_canvas_pick)
        self.canvas.mpl_connect('pick_event', self.on_canvas_pick)
        self.canvas.mpl_connect('button_release_event', self.on_canvas_click)
        self.toolbar = MPLToolbar(self.canvas, self)
        self.toolbar.setObjectName('mainplottoolbar')
        self.toolbar.popoutRequested.connect(self.on_actionPopOut_triggered)
        self.addToolBar(self.toolbar)
        layout2.addWidget(self.canvas)
        self.plotframe.setLayout(layout2)

        # session events
        session.itemsUpdated.connect(self.on_session_itemsUpdated)
        session.itemAdded.connect(self.on_session_itemAdded)
        session.filenameChanged.connect(self.on_session_filenameChanged)
        session.dirtyChanged.connect(self.on_session_dirtyChanged)

        # create data loader
        self.dloader = DataLoader(self, self.canvas.plotter)
        self.dloader.newDatas.connect(self.on_dloader_newDatas)
        self.stacker.addWidget(self.dloader)
        self.current_panel = self.dloader

        # create item model
        self.itemlistmodel = ItemListModel()
        self.itemTree.setModel(self.itemlistmodel)
        self.itemlistmodel.reset()
        self.itemTree.addAction(self.actionMergeData)
        self.itemTree.addAction(self.actionRemoveData)
        self.itemTree.addAction(self.menuMoveToGroup.menuAction())
        self.itemTree.addAction(self.menuCopyToGroup.menuAction())
        self.itemTree.newSelection.connect(self.on_itemTree_newSelection)

        # backend selector
        self.backend_group = QActionGroup(self)
        for backend in backends.available:
            action = QAction(backend.backend_name, self)
            action.setCheckable(True)
            if backends.backend.backend_name == backend.backend_name:
                action.setChecked(True)
            self.backend_group.addAction(action)
            self.menuBackend.addAction(action)
            action.triggered.connect(self.on_backend_action_triggered)

        # manage button
        menu = QMenu(self)
        menu.addAction(self.actionMergeData)
        menu.addAction(self.actionRemoveData)
        menu.addMenu(self.menuMoveToGroup)
        menu.addMenu(self.menuCopyToGroup)
        menu.addAction(self.actionReorder)
        menu.addSeparator()
        menu.addAction(self.actionNewGroup)
        menu.addMenu(self.menuRenameGroup)
        menu.addMenu(self.menuRemoveGroup)
        self.manageBtn.setMenu(menu)

        # right-mouse-button menu for canvas
        menu = self.canvasMenu = QMenu(self)
        menu.addAction(self.actionUnzoom)
        menu.addAction(self.actionHideFit)
        menu.addSeparator()
        menu.addAction(self.actionDrawSymbols)
        menu.addAction(self.actionConnectData)
        menu.addAction(self.actionSmoothImages)
        menu.addSeparator()
        menu.addAction(self.actionDrawGrid)
        menu.addAction(self.actionShowLegend)

        # restore window state
        with self.sgroup as settings:
            geometry = settings.value('geometry', QByteArray())
            self.restoreGeometry(geometry)
            windowstate = settings.value('windowstate', QByteArray())
            self.restoreState(windowstate)
            splitstate = settings.value('splitstate', QByteArray())
            self.splitter.restoreState(splitstate)
            vsplitstate = settings.value('vsplitstate', QByteArray())
            self.vsplitter.restoreState(vsplitstate)
            self.recent_files = settings.value('recentfiles', []) or []
Exemplo n.º 17
0
    def __init__(self, parent, canvas):
        QWidget.__init__(self, parent)
        self.canvas = canvas
        self.replotRequest.connect(self.plot)

        loadUi(self, 'multiops.ui')
Exemplo n.º 18
0
 def __init__(self, parent, items):
     QDialog.__init__(self, parent)
     loadUi(self, 'paramselect.ui')
     self.availList.populate(items, intersect=False)
     self.items = items
Exemplo n.º 19
0
 def __init__(self, parent, canvas):
     QWidget.__init__(self, parent)
     self.canvas = canvas
     self.boxes = []
     loadUi(self, 'imageops.ui')
Exemplo n.º 20
0
 def on_actionAbout_triggered(self):
     dlg = QDialog(self)
     dlg.setWindowFlags(Qt.Dialog | Qt.FramelessWindowHint)
     loadUi(dlg, 'about.ui')
     dlg.lbl.setText(dlg.lbl.text().replace('VERSION', __version__))
     dlg.exec_()