def __init__(self, parent): self.parent = parent self.parent.setAttribute(Qt.WA_DeleteOnClose) text = QPlainTextEdit(self.parent) lineNumbers = QPlainTextEdit(self.parent) lineNumbers.setMaximumWidth(20) lineNumbers.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) lineNumbers.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) lineNumbers.setFrameShape(QFrame.StyledPanel) lineNumbers.setFrameShadow(QFrame.Plain) lineNumbers.setEnabled(False) grid = QGridLayout(self.parent) grid.addWidget(lineNumbers, 0, 0, 1, 1) grid.addWidget(text, 0, 1, 1, 1) text.blockCountChanged.connect(self.parent.setLineNumbers) text.updateRequest.connect(self.parent.scrollLineNumbers) text.cursorPositionChanged.connect(self.parent.highlightCurrentLine) text.document().contentsChanged.connect(self.parent.documentModified) self.parent.text = text self.parent.lineNumbers = lineNumbers
class Skin(QWidget): def __init__(self, pref): QWidget.__init__(self) vbox = QVBoxLayout(self) vbox.addWidget(QLabel('Configure the CSS (Skin) for this Application')) self.checkDefault = QCheckBox('Default') self.checkCustom = QCheckBox('Custom') self.checkNoSkin = QCheckBox('No Skin') hbox = QHBoxLayout() hbox.addWidget(self.checkDefault) hbox.addWidget(self.checkCustom) hbox.addWidget(self.checkNoSkin) vbox.addLayout(hbox) self.text = QPlainTextEdit() self.text.setEnabled(False) self.text.setPlainText(styles.css_styles) vbox.addWidget(self.text) if pref.get('noSkin', False): self.checkNoSkin.setCheckState(Qt.Checked) elif pref.get('custom', False): self.checkCustom.setCheckState(Qt.Checked) self.text.setEnabled(True) self.text.setPlainText(pref.get('skin', '')) else: self.checkDefault.setCheckState(Qt.Checked) self.connect(self.checkDefault, SIGNAL("stateChanged(int)"), self.use_default) self.connect(self.checkCustom, SIGNAL("stateChanged(int)"), self.use_custom) self.connect(self.checkNoSkin, SIGNAL("stateChanged(int)"), self.use_no_skin) def use_default(self, val): if val == 2: self.checkDefault.setCheckState(Qt.Checked) self.checkCustom.setCheckState(Qt.Unchecked) self.checkNoSkin.setCheckState(Qt.Unchecked) self.text.setEnabled(False) def use_custom(self, val): if val == 2: self.checkDefault.setCheckState(Qt.Unchecked) self.checkCustom.setCheckState(Qt.Checked) self.checkNoSkin.setCheckState(Qt.Unchecked) self.text.setEnabled(True) def use_no_skin(self, val): if val == 2: self.checkDefault.setCheckState(Qt.Unchecked) self.checkCustom.setCheckState(Qt.Unchecked) self.checkNoSkin.setCheckState(Qt.Checked) self.text.setEnabled(False)
class TalkDetailsWidget(QWidget): def __init__(self, parent=None): super(TalkDetailsWidget, self).__init__(parent) self.layout = QGridLayout() self.setLayout(self.layout) self.buttonLayout = QHBoxLayout() saveIcon = QIcon.fromTheme("document-save") self.saveButton = QPushButton('Save Talk') self.saveButton.setIcon(saveIcon) self.buttonLayout.addWidget(self.saveButton) self.layout.addLayout(self.buttonLayout, 0, 1, 1, 1) self.titleLabel = QLabel('Title') self.titleLineEdit = QLineEdit() self.presenterLabel = QLabel('Presenter') self.presenterLineEdit = QLineEdit() self.layout.addWidget(self.titleLabel, 1, 0, 1, 1) self.layout.addWidget(self.titleLineEdit, 1, 1, 1, 1) self.layout.addWidget(self.presenterLabel, 1, 2, 1, 1) self.layout.addWidget(self.presenterLineEdit, 1, 3, 1, 1) self.eventLabel = QLabel('Event') self.eventLineEdit = QLineEdit() self.categoryLabel = QLabel('Category') self.categoryLineEdit = QLineEdit() self.layout.addWidget(self.eventLabel, 2, 0, 1, 1) self.layout.addWidget(self.eventLineEdit, 2, 1, 1, 1) self.layout.addWidget(self.categoryLabel, 2, 2, 1, 1) self.layout.addWidget(self.categoryLineEdit, 2, 3, 1, 1) self.roomLabel = QLabel('Room') self.roomLineEdit = QLineEdit() self.dateLayout = QHBoxLayout() self.dateLabel = QLabel('Date') self.dateEdit = QDateEdit() currentDate = QDate() self.dateEdit.setDate(currentDate.currentDate()) self.dateEdit.setCalendarPopup(True) self.layout.addWidget(self.roomLabel, 3, 0, 1, 1) self.layout.addWidget(self.roomLineEdit, 3, 1, 1, 1) self.dateLayout.addWidget(self.dateEdit) self.layout.addWidget(self.dateLabel, 3, 2, 1, 1) self.layout.addLayout(self.dateLayout, 3, 3, 1, 1) self.startTimeLayout = QHBoxLayout() self.startTimeLabel = QLabel('Start Time') self.startTimeEdit = QTimeEdit() self.startTimeLayout.addWidget(self.startTimeEdit) self.endTimeLayout = QHBoxLayout() self.endTimeLabel = QLabel('End Time') self.endTimeEdit = QTimeEdit() self.endTimeLayout.addWidget(self.endTimeEdit) self.layout.addWidget(self.startTimeLabel, 4, 0, 1, 1) self.layout.addLayout(self.startTimeLayout, 4, 1, 1, 1) self.layout.addWidget(self.endTimeLabel, 4, 2, 1, 1) self.layout.addLayout(self.endTimeLayout, 4, 3, 1, 1) self.descriptionLabel = QLabel('Description') self.descriptionLabel.setAlignment(Qt.AlignTop) self.descriptionTextEdit = QPlainTextEdit() self.layout.addWidget(self.descriptionLabel, 5, 0, 1, 1) self.layout.addWidget(self.descriptionTextEdit, 5, 1, 1, 3) def enable_input_fields(self): self.titleLineEdit.setPlaceholderText("Enter Talk Title") self.presenterLineEdit.setPlaceholderText("Enter Presenter Name") self.categoryLineEdit.setPlaceholderText("Enter Category Type") self.eventLineEdit.setPlaceholderText("Enter Event Name") self.roomLineEdit.setPlaceholderText("Enter Room Location") self.titleLineEdit.setEnabled(True) self.presenterLineEdit.setEnabled(True) self.categoryLineEdit.setEnabled(True) self.eventLineEdit.setEnabled(True) self.roomLineEdit.setEnabled(True) self.dateEdit.setEnabled(True) self.startTimeEdit.setEnabled(True) self.endTimeEdit.setEnabled(True) self.descriptionTextEdit.setEnabled(True) def disable_input_fields(self): self.titleLineEdit.setPlaceholderText("") self.presenterLineEdit.setPlaceholderText("") self.categoryLineEdit.setPlaceholderText("") self.eventLineEdit.setPlaceholderText("") self.roomLineEdit.setPlaceholderText("") self.titleLineEdit.setEnabled(False) self.presenterLineEdit.setEnabled(False) self.categoryLineEdit.setEnabled(False) self.eventLineEdit.setEnabled(False) self.roomLineEdit.setEnabled(False) self.dateEdit.setEnabled(False) self.startTimeEdit.setEnabled(False) self.endTimeEdit.setEnabled(False) self.descriptionTextEdit.setEnabled(False)
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow")) MainWindow.resize(300, 270) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.buttonSave = QPushButton(self.centralwidget) self.buttonSave.setGeometry(QRect(120, 235, 71, 32)) self.buttonSave.setObjectName(_fromUtf8("buttonSave")) self.inputFolder = QLineEdit(self.centralwidget) self.inputFolder.setGeometry(QRect(130, 10, 131, 23)) self.inputFolder.setObjectName(_fromUtf8("inputFolder")) self.buttonSelectFolder = QToolButton(self.centralwidget) self.buttonSelectFolder.setGeometry(QRect(263, 10, 27, 23)) self.buttonSelectFolder.setToolButtonStyle(Qt.ToolButtonIconOnly) self.buttonSelectFolder.setAutoRaise(False) self.buttonSelectFolder.setArrowType(Qt.NoArrow) self.buttonSelectFolder.setObjectName(_fromUtf8("buttonSelectFolder")) self.labelFolder = QLabel(self.centralwidget) self.labelFolder.setGeometry(QRect(10, 13, 101, 16)) self.labelFolder.setObjectName(_fromUtf8("labelFolder")) self.inputLogin = QLineEdit(self.centralwidget) self.inputLogin.setGeometry(QRect(130, 40, 161, 23)) self.inputLogin.setObjectName(_fromUtf8("inputLogin")) self.inputPassword = QLineEdit(self.centralwidget) self.inputPassword.setGeometry(QRect(130, 70, 161, 23)) self.inputPassword.setObjectName(_fromUtf8("inputPassword")) self.labelLogin = QLabel(self.centralwidget) self.labelLogin.setGeometry(QRect(10, 42, 62, 16)) self.labelLogin.setObjectName(_fromUtf8("labelLogin")) self.labelPassword = QLabel(self.centralwidget) self.labelPassword.setGeometry(QRect(10, 72, 62, 16)) self.labelPassword.setObjectName(_fromUtf8("labelPassword")) self.output = QPlainTextEdit(self.centralwidget) self.output.setEnabled(True) self.output.setGeometry(QRect(10, 100, 281, 131)) self.output.viewport().setProperty("cursor", QCursor(Qt.IBeamCursor)) self.output.setReadOnly(True) self.output.setObjectName(_fromUtf8("output")) font = QApplication.font() font.setPointSize(11) self.output.setFont(font) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) self.connectSignals() QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(QApplication.translate("MainWindow", "TDS Dropbox setup", None, QApplication.UnicodeUTF8)) self.buttonSave.setText(QApplication.translate("MainWindow", "Save", None, QApplication.UnicodeUTF8)) self.buttonSelectFolder.setText(QApplication.translate("MainWindow", "...", None, QApplication.UnicodeUTF8)) self.labelFolder.setText(QApplication.translate("MainWindow", "Folder to sync", None, QApplication.UnicodeUTF8)) self.labelLogin.setText(QApplication.translate("MainWindow", "Login", None, QApplication.UnicodeUTF8)) self.labelPassword.setText(QApplication.translate("MainWindow", "Password", None, QApplication.UnicodeUTF8)) def connectSignals(self): QObject.connect(self.buttonSelectFolder, SIGNAL("clicked()"), self.selectFolder) QObject.connect(self.centralwidget, SIGNAL("folderIsSet(PyQt_PyObject)"), self.setFolder) QObject.connect(self.buttonSave, SIGNAL("clicked()"), self.validateData) def selectFolder(self): folder = QFileDialog.getExistingDirectory(self.centralwidget, "Choose folder to sync", os.getenv("HOME")) QObject.emit(self.centralwidget, SIGNAL("folderIsSet(PyQt_PyObject)"), folder) def setFolder(self, folder): self.inputFolder.setText(folder) def validateData(self): validate = True if (len(self.inputFolder.text()) == 0): self.error("You haven't choose the dir to sync!") validate = False if (len(self.inputLogin.text()) == 0): self.error("You havent enter the login!") validate = False if (len(self.inputPassword.text()) == 0): self.error("You haven't enter the password!") validate = False if (validate): self.lockGui() self.out("setup start") self.setupSync({"folder": self.inputFolder.text(), "login": self.inputLogin.text(), "password": self.inputPassword.text()}) self.unlockGui() def lockGui(self): self.inputFolder.setReadOnly(True) self.inputLogin.setReadOnly(True) self.inputPassword.setReadOnly(True) self.buttonSave.setDisabled(True) self.buttonSelectFolder.setDisabled(True) def unlockGui(self): self.inputFolder.setReadOnly(False) self.inputLogin.setReadOnly(False) self.inputPassword.setReadOnly(False) self.buttonSave.setDisabled(False) self.buttonSelectFolder.setDisabled(False) def setupSync(self, data): p = Popen(["./letssync.sh", "-u%(login)s" % data, "-p%(password)s" % data, "%(folder)s" % data]) if (p.wait() != 0): self.error("an error occuring during setup!") else: self.out("setup complete!") def error(self, message): self.out("ERROR: {}".format(message)) def out(self, message): self.output.appendPlainText("{0} :: {1}".format(datetime.now().strftime("%H:%M"), message))