Source code for zoom_dialog

from schrodinger.infra import canvas2d
from schrodinger.Qt.QtWidgets import QDialog
from schrodinger.Qt.QtWidgets import QDialogButtonBox
from schrodinger.utils import imputils

zoom_dialog_ui = imputils.import_script('zoom_dialog_ui.py',
                                        subdir='event_analysis_dir')


class EventAnalysisZoomDialog(QDialog):

    def __init__(self):
        QDialog.__init__(self)
        self.ui = zoom_dialog_ui.Ui_EAZoomDialog()
        self.ui.setupUi(self)
        self.slider = canvas2d.ChmDoubleSlider(self)
        self.ui.horizontalLayout.insertWidget(1, self.slider)
        self.slider.setRange(0.0, 100.0)
        self.zoom_range = [0, 100.0, 0, 100.0, 0.1]
        self.applyButton = self.ui.buttonBox.button(QDialogButtonBox.Apply)
        self.applyButton.clicked.connect(self.accept)
        self.ui.startSB.valueChanged.connect(self.slider.leftPos)
        self.ui.endSB.valueChanged.connect(self.slider.rightPos)
        self.ui.startSB.valueChanged.connect(self.change_limits_end)
        self.ui.endSB.valueChanged.connect(self.change_limits_start)
        #self.ui.startSB.valueChanged.connect(self.sliders_moved)
        #self.ui.endSB.valueChanged.connect(self.sliders_moved)
        self.slider.valuesChanged.connect(self.sliders_moved)

    def set_zoom_limits(self, min_f, max_f, dt):
        self.slider.setRange(min_f, max_f)
        self.zoom_range = [min_f, max_f, min_f, max_f, dt]
        self.sliders_moved()
        self.update()

    def set_zoom_range(self, v):
        # set values to widgets
        self.slider.leftPos(v[2])
        self.slider.rightPos(v[3])
        self.sliders_moved()

    def get_zoom_range(self):
        # read values from widgets and set in self.zoom_range
        self.zoom_range[2] = self.ui.startSB.value()
        self.zoom_range[3] = self.ui.endSB.value()

    def accept(self):
        self.get_zoom_range()
        self.setResult(QDialog.Accepted)
        self.hide()

    def reject(self):
        self.set_zoom_range(self.zoom_range)
        self.setResult(QDialog.Rejected)
        self.hide()

    def sliders_moved(self):
        lpos = self.slider.leftPos()
        rpos = self.slider.rightPos()

        self.ui.startSB.setRange(self.zoom_range[0], rpos)
        self.ui.startSB.setValue(lpos)
        self.ui.endSB.setRange(lpos, self.zoom_range[1])
        self.ui.endSB.setValue(rpos)

        self.update_range_label()

    def change_limits_end(self):
        lpos = self.slider.leftPos()
        self.ui.endSB.setRange(lpos, self.zoom_range[1])
        self.update_range_label()

    def change_limits_start(self):
        rpos = self.slider.rightPos()
        self.ui.startSB.setRange(self.zoom_range[0], rpos)
        self.update_range_label()

    def update_range_label(self):
        minT = self.ui.startSB.value() * self.zoom_range[4]
        maxT = self.ui.endSB.value() * self.zoom_range[4]
        txt = "%.2f - %.2f nsec" % (minT, maxT)
        self.ui.label.setText(txt)

    def getRangeLabel(self):
        """
        This function returns text string showing trajectory
        range in nsec.

        :return: range string
        :rtype: str
        """

        return self.ui.label.text()