def __init__(self, app, note, create, *args, **kwargs): """Init window, connect signals with slots Keyword Arguments: app -- QApplication note -- Note Returns: None """ QMainWindow.__init__(self, *args, **kwargs) self._action_threads = [] self.ui = NoteUi() self.ui.setupUi(self) self.setWindowIcon(app.icon) self.create = create if create: title = self.tr('Note title') text = self.tr('<div>Note text</div>') self.guid = None else: self.guid, title, text = note[1:4] prepared = '<h2 id="note-title">%s</h2>%s' % (title, text) self.ui.text.setText(prepared) self.text = self.ui.text self.setWindowTitle(title) self.note = note self.app = app self.save_on_close = True self.ui.toolBar.addAction(QIcon.fromTheme('document-save'), self.tr('Save'), Slot()(self.save)) self.ui.toolBar.addAction(QIcon.fromTheme('cancel'), self.tr('Close without saving'), self.close_wo_save) self.delete = self.ui.toolBar.addAction(QIcon.fromTheme('edit-delete'), self.tr('Remove note'), self.remove_note) if self.create: self.delete.setEnabled(False) self.ui.toolBar.addSeparator() cut = self.ui.toolBar.addAction(QIcon.fromTheme('edit-cut'), self.tr('Cut'), self.text.cut) self.text.copyAvailable.connect(cut.setEnabled) cut.setEnabled(False) copy = self.ui.toolBar.addAction(QIcon.fromTheme('edit-copy'), self.tr('Copy'), self.text.copy) self.text.copyAvailable.connect(copy.setEnabled) copy.setEnabled(False) self.ui.toolBar.addAction(QIcon.fromTheme('edit-paste'), self.tr('Paste'), self.text.paste) self.text.copyAvailable.connect(self.ui.actionCopy.setEnabled) self.ui.actionCopy.setEnabled(False) self.text.copyAvailable.connect(self.ui.actionCut.setEnabled) self.ui.actionCut.setEnabled(False) self.ui.actionSave.triggered.connect(Slot()(self.save)) self.ui.actionClose_and_save.triggered.connect(self.close) self.ui.actionClose_without_saving.triggered.connect(self.close_wo_save) self.ui.actionRemove.triggered.connect(self.remove_note) self.note_create.connect(self.note_created) self.closed = False
class NoteWindow(QMainWindow): """Note window""" note_remove = Signal() note_create = Signal(str) def __init__(self, app, note, create, *args, **kwargs): """Init window, connect signals with slots Keyword Arguments: app -- QApplication note -- Note Returns: None """ QMainWindow.__init__(self, *args, **kwargs) self._action_threads = [] self.ui = NoteUi() self.ui.setupUi(self) self.setWindowIcon(app.icon) self.create = create if create: title = self.tr('Note title') text = self.tr('<div>Note text</div>') self.guid = None else: self.guid, title, text = note[1:4] prepared = '<h2 id="note-title">%s</h2>%s' % (title, text) self.ui.text.setText(prepared) self.text = self.ui.text self.setWindowTitle(title) self.note = note self.app = app self.save_on_close = True self.ui.toolBar.addAction(QIcon.fromTheme('document-save'), self.tr('Save'), Slot()(self.save)) self.ui.toolBar.addAction(QIcon.fromTheme('cancel'), self.tr('Close without saving'), self.close_wo_save) self.delete = self.ui.toolBar.addAction(QIcon.fromTheme('edit-delete'), self.tr('Remove note'), self.remove_note) if self.create: self.delete.setEnabled(False) self.ui.toolBar.addSeparator() cut = self.ui.toolBar.addAction(QIcon.fromTheme('edit-cut'), self.tr('Cut'), self.text.cut) self.text.copyAvailable.connect(cut.setEnabled) cut.setEnabled(False) copy = self.ui.toolBar.addAction(QIcon.fromTheme('edit-copy'), self.tr('Copy'), self.text.copy) self.text.copyAvailable.connect(copy.setEnabled) copy.setEnabled(False) self.ui.toolBar.addAction(QIcon.fromTheme('edit-paste'), self.tr('Paste'), self.text.paste) self.text.copyAvailable.connect(self.ui.actionCopy.setEnabled) self.ui.actionCopy.setEnabled(False) self.text.copyAvailable.connect(self.ui.actionCut.setEnabled) self.ui.actionCut.setEnabled(False) self.ui.actionSave.triggered.connect(Slot()(self.save)) self.ui.actionClose_and_save.triggered.connect(self.close) self.ui.actionClose_without_saving.triggered.connect(self.close_wo_save) self.ui.actionRemove.triggered.connect(self.remove_note) self.note_create.connect(self.note_created) self.closed = False def closeEvent(self, event): """Close w/wo saving""" event.ignore() self.hide() if self.save_on_close: self.save() self.app.indicator.get_notes() self.closed = True @Slot() def close_wo_save(self): """Close without saving note""" self.save_on_close = False self.close() def get_data(self): title = self.text.toPlainText().split('\n')[0] html = self.text.toHtml() soup = BeautifulSoup(html) body = soup.find('body') html = reduce(lambda txt, cur: txt + unicode(cur), body.contents[2:], u'') return title, html @Slot(str) def note_created(self, guid): self.guid = guid self.create = False self.delete.setEnabled(True) def save(self): """Save note""" title, html = self.get_data() if self.create: self.app.sync_thread.action_receive.emit(( self.app.provider.create_note, (title, html), {}, self.note_create, )) self.app.send_notify( self.tr('Note created'), self.tr('Note "%s" created') % title, ) else: self.app.sync_thread.action_receive.emit(( self.app.provider.update_note, (self.guid, title, html), )) self.app.send_notify( self.tr('Note saved'), self.tr('Note "%s" saved') % title, ) @Slot() def remove_note(self): """Remove note in new thread""" msgBox = QMessageBox( QMessageBox.Critical, self.tr("You try to delete a note"), self.tr("Are you sure want to delete a note?"), QMessageBox.Yes | QMessageBox.No ) ret = msgBox.exec_() if ret == QMessageBox.Yes: self.app.sync_thread.action_receive.emit(( self.app.provider.remove_note, (self.note[1],), )) self.app.send_notify( self.tr('Note removed'), self.tr('Note "%s" removed') % self.note[2], ) self.close_wo_save()