Source code for schrodinger.application.desmond.cwidget
"""
Widgets used mainly in Desmond and MCPRO+ panels.
Copyright Schrodinger, LLC. All rights reserved.
"""
import schrodinger.ui.qt.filedialog as filedialog
from schrodinger.Qt import QtWidgets
try:
    import schrodinger.maestro as maestro
except:
    maestro = None
[docs]class AdvLabel(QtWidgets.QLabel):
    """
    A mutli-line label with small, bold text.
    """
[docs]    def __init__(self, text, parent, max_height=None):
        # FIXME max_height
        QtWidgets.QLabel.__init__(self, "<b><small>%s</small></b>" % text,
                                  parent)
        self.setWordWrap(True)  
[docs]class EntryField(QtWidgets.QWidget):
    """
    A special composite widget which contains a labeled line edit field.
    """
[docs]    def __init__(self, parent, label_text, initial_text=""):
        """
        Create a labeled text entry area with text 'label_text', set the
        initial text value to 'initial_text' and if 'units_text' is defined
        then add a label after the editable text to display the lable
        """
        QtWidgets.QWidget.__init__(self, parent)
        layout = QtWidgets.QHBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(3)
        self.label = QtWidgets.QLabel(label_text, self)
        layout.addWidget(self.label)
        self.line_edit = QtWidgets.QLineEdit(self)
        self.line_edit.setText(initial_text)
        layout.addWidget(self.line_edit, 10)  # Make entry field stretchable 
[docs]    def setText(self, text):
        """
        Set the text for the QLineEdit part of the entry field
        """
        self.line_edit.setText(text) 
[docs]    def text(self):
        """
        Returns the text for the QLineEdit part of the entry field
        """
        return str(self.line_edit.text()) 
[docs]    def setValidator(self, validator):
        self.line_edit.setValidator(validator) 
[docs]    def hasAcceptableInput(self):
        return self.line_edit.hasAcceptableInput()  
[docs]class FileEntry(QtWidgets.QWidget):
    """
    Class combining a QLabel, QLineEdit, and a QPushButton (Browse...).
    """
[docs]    def __init__(self,
                 parent,
                 label_text,
                 fdlg_title,
                 fdlg_ftypes,
                 initial_dir="",
                 command=None):
        self._fdlg_title = fdlg_title
        self._fdlg_ftypes = fdlg_ftypes
        self.initial_dir = initial_dir
        self._command = command
        QtWidgets.QWidget.__init__(self, parent)
        layout = QtWidgets.QHBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(3)
        self._label = QtWidgets.QLabel(label_text, self)
        layout.addWidget(self._label)
        self.entry = QtWidgets.QLineEdit(self)
        self.entry.setText("")
        layout.addWidget(self.entry, 10)  # Make entry field stretchable
        self.browse_btn = QtWidgets.QPushButton("Browse...", self)
        layout.addWidget(self.browse_btn)
        self.browse_btn.clicked.connect(self.browse) 
[docs]    def pathModified(self):
        """
        Called when the selected file path is modified.
        """
        val = str(self.entry.text()).strip()
        self.entry.setText(val)
        #self.entry.xview_moveto( 1 )
        if self._command:
            self._command(val) 
[docs]    def browse(self):
        """
        Called when the user clicks on the Browse button
        """
        fname = filedialog.get_open_file_name(self, self._fdlg_title,
                                              self.initial_dir,
                                              self._fdlg_ftypes)
        if fname:
            self.entry.setText(fname)
            self.pathModified() 
[docs]    def text(self):
        """
        Get the value of the entry field.
        """
        return str(self.entry.text()) 
[docs]    def setText(self, value):
        """
        Set the value of the entry field.
        """
        self.entry.setText(value)