Beispiel #1
0
    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
Beispiel #2
0
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()