2024-01-18 18:25:07 +00:00
|
|
|
from ..Qt import QtWidgets, QtGui, QtCore
|
|
|
|
from ..lib.iconloading import get_icon
|
|
|
|
from ..lib.pg_objects import RegionItem
|
|
|
|
|
|
|
|
|
|
|
|
class FitToolbar(QtWidgets.QToolBar):
|
|
|
|
def __init__(
|
|
|
|
self,
|
|
|
|
fitaction: QtWidgets.QAction,
|
|
|
|
limit_menu: QtWidgets.QMenu,
|
|
|
|
parent=None,
|
|
|
|
):
|
2024-07-15 17:42:28 +02:00
|
|
|
super().__init__('Fit', parent=parent)
|
2024-01-18 18:25:07 +00:00
|
|
|
|
|
|
|
self.fit_action = fitaction
|
|
|
|
self.region = RegionItem()
|
|
|
|
self.addAction(fitaction)
|
|
|
|
|
|
|
|
self.fitlim_button = QtWidgets.QToolButton(self)
|
|
|
|
self.fitlim_button.setMenu(limit_menu)
|
|
|
|
self.fitlim_button.setPopupMode(self.fitlim_button.InstantPopup)
|
|
|
|
self.fitlim_button.setIcon(get_icon('fit_region'))
|
|
|
|
self.addWidget(self.fitlim_button)
|
|
|
|
|
|
|
|
self.label = QtWidgets.QLabel(self)
|
|
|
|
self.label.setText('L: ')
|
|
|
|
self.addWidget(self.label)
|
|
|
|
self.label.setEnabled(False)
|
|
|
|
|
|
|
|
self.lineedit = QtWidgets.QLineEdit(self)
|
|
|
|
self.lineedit.setValidator(QtGui.QDoubleValidator())
|
|
|
|
self.lineedit.setMaximumWidth(92)
|
|
|
|
self.addWidget(self.lineedit)
|
|
|
|
self.lineedit.setEnabled(False)
|
|
|
|
|
|
|
|
self.label2 = QtWidgets.QLabel(self)
|
|
|
|
self.label2.setText(' R: ')
|
|
|
|
self.addWidget(self.label2)
|
|
|
|
self.label2.setEnabled(False)
|
|
|
|
|
|
|
|
self.lineedit2 = QtWidgets.QLineEdit(self)
|
|
|
|
self.lineedit2.setValidator(QtGui.QDoubleValidator())
|
|
|
|
self.addWidget(self.lineedit2)
|
|
|
|
self.lineedit2.setMaximumWidth(92)
|
|
|
|
self.lineedit2.setEnabled(False)
|
|
|
|
|
|
|
|
self.limit_group = QtWidgets.QActionGroup(self)
|
|
|
|
for ac in limit_menu.actions():
|
|
|
|
self.limit_group.addAction(ac)
|
|
|
|
|
|
|
|
self.limit_group.triggered.connect(self.change_limit_type)
|
|
|
|
|
|
|
|
self.region.sigRegionChanged.connect(self.change_labels)
|
|
|
|
self.change_labels()
|
|
|
|
|
|
|
|
self.lineedit.textChanged.connect(self.move_region)
|
|
|
|
self.lineedit2.textChanged.connect(self.move_region)
|
|
|
|
|
|
|
|
@QtCore.pyqtSlot(QtWidgets.QAction)
|
|
|
|
def change_limit_type(self, action: QtWidgets.QAction):
|
2024-02-07 17:55:07 +00:00
|
|
|
is_custom = (action.text() in ['Custom', 'Exclude region'])
|
|
|
|
print(is_custom)
|
2024-01-18 18:25:07 +00:00
|
|
|
|
|
|
|
for w in [self.label, self.label2, self.lineedit, self.lineedit2]:
|
|
|
|
w.setEnabled(is_custom)
|
|
|
|
|
|
|
|
def change_labels(self):
|
|
|
|
r = self.region.getRegion()
|
|
|
|
self.lineedit.blockSignals(True)
|
|
|
|
self.lineedit.setText(f'{r[0]:.4g}')
|
|
|
|
self.lineedit.blockSignals(False)
|
|
|
|
|
|
|
|
self.lineedit2.blockSignals(True)
|
|
|
|
self.lineedit2.setText(f'{r[1]:.4g}')
|
|
|
|
self.lineedit2.blockSignals(False)
|
|
|
|
|
|
|
|
def move_region(self):
|
|
|
|
try:
|
|
|
|
r_min = float(self.lineedit.text())
|
|
|
|
except ValueError:
|
|
|
|
r_min = None
|
|
|
|
|
|
|
|
try:
|
|
|
|
r_max = float(self.lineedit2.text())
|
|
|
|
except ValueError:
|
|
|
|
r_max = None
|
|
|
|
|
|
|
|
if r_min is not None and r_max is not None:
|
|
|
|
self.region.setRegion((r_min, r_max), use_log=True)
|
|
|
|
|
|
|
|
def get_limit(self):
|
|
|
|
action_text = self.limit_group.checkedAction().text()
|
|
|
|
|
|
|
|
return {
|
|
|
|
'None': 'none',
|
|
|
|
'Visible x range': 'x',
|
2024-02-07 17:55:07 +00:00
|
|
|
'Custom': ('in', self.region.getRegion()),
|
|
|
|
'Exclude region': ('out', self.region.getRegion()),
|
2024-01-18 18:25:07 +00:00
|
|
|
}[action_text]
|