labelDialog.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from PyQt4.QtGui import *
  2. from PyQt4.QtCore import *
  3. from lib import newIcon, labelValidator
  4. # TODO:
  5. # - Calculate optimal position so as not to go out of screen area.
  6. BB = QDialogButtonBox
  7. class LabelDialog(QDialog):
  8. def __init__(self, text="Enter object label", parent=None):
  9. super(LabelDialog, self).__init__(parent)
  10. self.edit = QLineEdit()
  11. self.edit.setText(text)
  12. self.edit.setValidator(labelValidator())
  13. self.edit.editingFinished.connect(self.postProcess)
  14. layout = QVBoxLayout()
  15. layout.addWidget(self.edit)
  16. self.buttonBox = bb = BB(BB.Ok | BB.Cancel, Qt.Horizontal, self)
  17. bb.button(BB.Ok).setIcon(newIcon('done'))
  18. bb.button(BB.Cancel).setIcon(newIcon('undo'))
  19. bb.accepted.connect(self.validate)
  20. bb.rejected.connect(self.reject)
  21. layout.addWidget(bb)
  22. self.setLayout(layout)
  23. def validate(self):
  24. if self.edit.text().trimmed():
  25. self.accept()
  26. def postProcess(self):
  27. self.edit.setText(self.edit.text().trimmed())
  28. def popUp(self, text='', move=True):
  29. self.edit.setText(text)
  30. self.edit.setSelection(0, len(text))
  31. self.edit.setFocus(Qt.PopupFocusReason)
  32. if move:
  33. self.move(QCursor.pos())
  34. return self.edit.text() if self.exec_() else None