/*
* This file is part of NixNote
* Copyright 2009 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
//* the note's history from Evernote.
//**********************************************
//**********************************************
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import com.evernote.edam.notestore.NoteVersionId;
import com.evernote.edam.type.Note;
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.Global;
import cx.fbn.nevernote.gui.BrowserWindow;
import cx.fbn.nevernote.sql.DatabaseConnection;
import cx.fbn.nevernote.utilities.ApplicationLogger;
import cx.fbn.nevernote.xml.NoteFormatter;
public class OnlineNoteHistory extends QDialog {
public final QPushButton restoreAsNew;
public final QPushButton restore;
private final DatabaseConnection conn;
public final QComboBox historyCombo;
private final BrowserWindow browser;
private final ApplicationLogger logger;
List<QTemporaryFile> tempFiles;
private final String iconPath = new String("classpath:cx/fbn/nevernote/icons/");
// Constructor
public OnlineNoteHistory(ApplicationLogger l, DatabaseConnection c) {
setWindowTitle(tr("Online Note History"));
setWindowIcon(new QIcon(iconPath+"notebook-green.png"));
QVBoxLayout main = new QVBoxLayout();
setLayout(main);
historyCombo = new QComboBox(this);
QHBoxLayout comboLayout = new QHBoxLayout();
comboLayout.addWidget(new QLabel(tr("History Date:")));
comboLayout.addWidget(historyCombo);
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);
restore = new QPushButton(tr("Restore Note"));
restore.clicked.connect(this, "restorePushed()");
restoreAsNew = new QPushButton(tr("Restore As New Note"));
restoreAsNew.clicked.connect(this, "restoreAsNewPushed()");
QPushButton cancel = new QPushButton(tr("Cancel"));
cancel.clicked.connect(this, "cancelPressed()");
buttonLayout.addWidget(restore);
buttonLayout.addWidget(restoreAsNew);
buttonLayout.addWidget(cancel);
main.addLayout(buttonLayout);
browser.getBrowser().setContextMenuPolicy(ContextMenuPolicy.NoContextMenu);
tempFiles = new ArrayList<QTemporaryFile>();
logger = l;
}
@SuppressWarnings("unused")
private void restoreAsNewPushed() {
this.close();
}
@SuppressWarnings("unused")
private void restorePushed() {
this.close();
}
@SuppressWarnings("unused")
private void cancelPressed() {
this.close();
}
public void setCurrent(boolean isDirty) {
if (isDirty)
historyCombo.addItem(new String(tr("Current (Non Synchronized)")));
else
historyCombo.addItem(new String(tr("Current (Synchronized)")));
}
public void load(List<NoteVersionId> versions) {
String fmt = Global.getDateFormat() + " " + Global.getTimeFormat();
String dateTimeFormat = new String(fmt);
SimpleDateFormat simple = new SimpleDateFormat(dateTimeFormat);
for (int i=0; i<versions.size(); i++) {
StringBuilder versionDate = new StringBuilder(simple.format(versions.get(i).getSaved()));
historyCombo.addItem(versionDate.toString());
}
}
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.getBrowser().page().mainFrame().setHtml(js.toString());
}
}