コード例 #1
0
ファイル: cryptjournal.py プロジェクト: chiiph/CryptJournal
class CryptJournal(QtGui.QMainWindow):
  def __init__(self):
    super(CryptJournal,self).__init__()
    self._journal = None
    self._editing = False
    self._editing_id = -1
    self._loaded = -1
    self.ui = Ui_CryptJournal()
    self.ui.setupUi(self)

    self.ui.grpJournal.hide()
    self.ui.grpEdit.hide()
    self.ui.textEntry.hide()
    self.ui.toolBar.addAction(self.ui.actionAdd)
    self.ui.toolBar.addAction(self.ui.actionEdit)
    self.ui.toolBar.addAction(self.ui.actionDelete)
    self.ui.toolBar.addAction(self.ui.actionHide)
    self.ui.toolBar.hide()

    self.ui.linePassphrase.returnPressed.connect(self.create_journal)

    self.ui.actionAdd.triggered.connect(self.add)
    self.ui.actionDelete.triggered.connect(self.delete)
    self.ui.actionEdit.triggered.connect(self.edit)

    self.ui.buttonBox.clicked.connect(self.handle_add_buttons)
    self.ui.listEntries.itemDoubleClicked.connect(self.load_journal_entry)
    self.ui.listEntries.itemActivated.connect(self.load_journal_entry)
    
    self.show()

  def create_journal(self):
    key = self.ui.linePassphrase.text()
    if len(key) <= 0:
      return

    self.ui.grpPassphrase.hide()
    self.ui.grpJournal.show()
    self.ui.toolBar.show()
    self._journal = Journal(key)

    self.fill_journal_list()

  def fill_journal_list(self):
    self.ui.listEntries.clear()
    for entry in self._journal:
      item = QtGui.QListWidgetItem()
      item.setSizeHint(QtCore.QSize(0,65));
      self.ui.listEntries.addItem(item)
      self.ui.listEntries.setItemWidget(item, JournalEntry(data=entry))

  def load_journal_entry(self, entry):
    data = self.ui.listEntries.itemWidget(entry).data()

    if self.ui.textEntry.isVisible() and self._loaded == data["id"]:
      self._loaded = -1
      self.ui.textEntry.hide()
      return

    html = "<h1>"+data["title"]+"</h1>\n"
    html += "<h3><i>Last modified: "+data["date"]+"</i></h3>"
    html += self.parse_text(data["data"])

    self.ui.textEntry.setHtml(html)
    self.ui.textEntry.show()
    self._loaded = data["id"]

  def parse_text(self, text):
    parts = docutils.core.publish_parts(text, writer_name="html")
    html = parts['body'] 
    return html

  def add(self):
    self.ui.grpEdit.show()
    self.ui.lineTitle.setFocus()

  def delete(self):
    entry = self.ui.listEntries.currentItem()
    if entry is None:
      return
    res = QtGui.QMessageBox.question(self,"Are you sure?",\
        "Are you sure you want to delete this entry?",\
        QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
    if res != QtGui.QMessageBox.Yes:
      return
    data = self.ui.listEntries.itemWidget(entry).data()
    self._journal.remove(data["id"])
    self.fill_journal_list()
  
  def edit(self):
    entry = self.ui.listEntries.currentItem()
    if entry is None:
      return
    self.ui.textEntry.hide()
    data = self.ui.listEntries.itemWidget(entry).data()
    self._editing = True
    self._editing_id = data["id"]
    self.ui.lineTitle.setText(data["title"])
    self.ui.textData.setPlainText(data["data"])
    self.ui.grpEdit.show()
    self.fill_journal_list()
  
  def handle_add_buttons(self, button):
    if button.text() == "Save":
      if self._editing and self._editing_id > -1:
        self._journal.edit(self._editing_id,\
            self.ui.lineTitle.text(),\
            self.ui.textData.toPlainText())
      else:
        self._journal.add(self.ui.lineTitle.text(),\
            self.ui.textData.toPlainText())

    self._editing = False
    self._editing_id = -1
    self.ui.lineTitle.clear()
    self.ui.textData.clear()
    self.ui.grpEdit.hide()
    self.fill_journal_list()