/* * This file is part of NixNote * Copyright 2011 Randy Baumgarte * * This file may be licensed under the terms of of the * GNU General Public License Version 2 (the ``GPL''). * * Software distributed under the License is distributed * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either * express or implied. See the GPL for the specific language * governing rights and limitations. * * You should have received a copy of the GPL along with this * program. If not, go to http://www.gnu.org/licenses/gpl.html * or write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ package cx.fbn.nevernote.dialog; //********************************************** //********************************************** //* This is the dialog that shows a user //* a quick popup of a note based upon its title. //* It is used in the Quick Link function. //********************************************** //********************************************** import java.util.List; import com.evernote.edam.type.Note; import com.trolltech.qt.core.QByteArray; import com.trolltech.qt.core.QTemporaryFile; import com.trolltech.qt.core.Qt.ContextMenuPolicy; import com.trolltech.qt.gui.QComboBox; import com.trolltech.qt.gui.QDialog; import com.trolltech.qt.gui.QHBoxLayout; import com.trolltech.qt.gui.QIcon; import com.trolltech.qt.gui.QLabel; import com.trolltech.qt.gui.QPushButton; import com.trolltech.qt.gui.QVBoxLayout; import cx.fbn.nevernote.gui.BrowserWindow; import cx.fbn.nevernote.sql.DatabaseConnection; import cx.fbn.nevernote.utilities.ApplicationLogger; import cx.fbn.nevernote.utilities.Pair; import cx.fbn.nevernote.xml.NoteFormatter; public class NoteQuickLinkDialog extends QDialog { public final QPushButton ok; public final QPushButton cancel; private final DatabaseConnection conn; public final QComboBox titleCombo; private final BrowserWindow browser; private final ApplicationLogger logger; List<Pair<String,String>> results; public boolean okPressed; private List<QTemporaryFile> tempFiles; private final String iconPath = new String("classpath:cx/fbn/nevernote/icons/"); // Constructor public NoteQuickLinkDialog(ApplicationLogger l, DatabaseConnection c, String text) { okPressed = false; setWindowTitle(tr("Quick Link Notes")); setWindowIcon(new QIcon(iconPath+"notebook-green.png")); QVBoxLayout main = new QVBoxLayout(); setLayout(main); titleCombo = new QComboBox(this); QHBoxLayout comboLayout = new QHBoxLayout(); comboLayout.addWidget(new QLabel(tr("Matching Notes:"))); comboLayout.addWidget(titleCombo); comboLayout.addStretch(100); main.addLayout(comboLayout); conn = c; browser = new BrowserWindow(conn); main.addWidget(browser); browser.titleLabel.setVisible(false); browser.notebookBox.setVisible(false); browser.hideButtons(); browser.tagEdit.setVisible(false); browser.tagLabel.setVisible(false); QHBoxLayout buttonLayout = new QHBoxLayout(); buttonLayout.addStretch(100); ok = new QPushButton(tr("OK")); ok.clicked.connect(this, "okPressed()"); cancel = new QPushButton(tr("Cancel")); cancel.clicked.connect(this, "cancelPressed()"); buttonLayout.addWidget(ok); buttonLayout.addWidget(cancel); main.addLayout(buttonLayout); browser.getBrowser().setContextMenuPolicy(ContextMenuPolicy.NoContextMenu); logger = l; // Search for matching notes results = conn.getNoteTable().findNotesByTitle(text); // Add the results to the combo box for (int i=0; i<results.size(); i++) { titleCombo.addItem(results.get(i).getSecond(), results.get(i).getFirst()); } titleCombo.activated.connect(this, "selectionChanged(String)"); // Load the results into the combo box if (results.size() > 0) { Note currentNote = conn.getNoteTable().getNote(results.get(0).getFirst(), true, true, false, true, true); setContent(currentNote); } } // Cancel button pressed @SuppressWarnings("unused") private void cancelPressed() { this.close(); } // OK button pressed @SuppressWarnings("unused") private void okPressed() { okPressed = true; close(); } // When the selection changes, we refresh the browser window with the new content @SuppressWarnings("unused") private void selectionChanged(String text) { int pos = titleCombo.currentIndex(); String guid = results.get(pos).getFirst(); Note note = conn.getNoteTable().getNote(guid, true, true, false, true, true); setContent(note); } // Return the note the user is currently viewing public String getSelectedNote() { int pos = titleCombo.currentIndex(); return results.get(pos).getFirst(); } // Load the content of the note into the viewing window. public void setContent(Note currentNote) { NoteFormatter formatter = new NoteFormatter(logger, conn, tempFiles); formatter.setNote(currentNote, false); formatter.setHighlight(null); formatter.setNoteHistory(true); StringBuffer js = new StringBuffer(); // We need to prepend the note with <HEAD></HEAD> or encoded characters are ugly js.append("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"); js.append("<style type=\"text/css\">en-crypt-temp { border-style:solid; border-color:blue; padding:1mm 1mm 1mm 1mm; }</style>"); js.append("</head>"); js.append(formatter.rebuildNoteHTML()); js.append("</HTML>"); browser.setNote(currentNote); browser.setContent(new QByteArray(js.toString())); } // give the results from the DB search back to the caller. public List<Pair<String,String>> getResults() { return results; } }