Source code for schrodinger.ui.qt.fp_selector_widget

"""
Widget for selecting fingerprint types.

Copyright Schrodinger LLC, All Rights Reserved.
"""

from schrodinger.application.canvas import fingerprint
from schrodinger.models import mappers
from schrodinger.models import parameters
from schrodinger.Qt import QtCore
from schrodinger.Qt import QtWidgets
from schrodinger.ui.qt import basewidgets
from schrodinger.ui.qt import fp_selector_widget_ui
from schrodinger.ui.qt import pop_up_widgets

FINGERPRINT_TYPES = fingerprint.CanvasFingerprintGenerator.FINGERPRINT_TYPES


[docs]class FingerprintsModel(parameters.CompoundParam): """ Model used by fingerprints selector widget. """ use_fp = parameters.BoolParam(False) fp_type = parameters.StringParam(FINGERPRINT_TYPES[0])
[docs]class FingerprintsPopUp(pop_up_widgets.PopUp): """ The pop up window that shows available fingerprint types. """ fingerprintChanged = QtCore.pyqtSignal()
[docs] def setup(self): self.list_widget = QtWidgets.QListWidget() self.list_widget.addItems(sorted(FINGERPRINT_TYPES)) self.list_widget.setSelectionMode(QtWidgets.QListWidget.SingleSelection) self.list_widget.itemSelectionChanged.connect(self.fingerprintChanged) self.main_layout = QtWidgets.QVBoxLayout(self) self.main_layout.setContentsMargins(0, 0, 0, 0) self.main_layout.setSpacing(0) self.main_layout.addWidget(self.list_widget)
[docs] def getFingerprint(self): """ Returns selected fingerprint type or None if no type is selected. :return: FP type :rtype: str or None """ selected_items = self.list_widget.selectedItems() if selected_items: return selected_items[0].text() return None
[docs] def setFingerprint(self, fp_type): """ Sets fingerprint type to be selected. :param fp_type: FP type :type fp_type: str """ items = self.list_widget.findItems(fp_type, QtCore.Qt.MatchFlag.MatchExactly) if items: items[0].setSelected(True)
[docs]class FingerprintsSelectorWidget(mappers.MapperMixin, basewidgets.BaseWidget): """ A widget for selecting fingerprint types. """ model_class = FingerprintsModel ui_module = fp_selector_widget_ui
[docs] def initSetUp(self): super().initSetUp() # popup setup self.ui.fp_btn.setPopUpClass(FingerprintsPopUp)
[docs] def defineMappings(self): M = self.model_class fp_target = mappers.TargetSpec( setter=self.ui.fp_btn._pop_up.setFingerprint, getter=self.ui.fp_btn._pop_up.getFingerprint, signal=self.ui.fp_btn._pop_up.fingerprintChanged) return [(self.ui.fp_cb, M.use_fp), (self.ui.fp_lbl, M.fp_type), (fp_target, M.fp_type), (mappers.TargetSpec(slot=self._onUseFPChanged), M.use_fp)]
def _onUseFPChanged(self): """ This method is called when 'fingerprint' option is toggled on/off. """ for widget in [self.ui.fp_lbl, self.ui.fp_btn]: widget.setVisible(self.model.use_fp)