/*
* 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.gui;
import java.awt.Desktop;
import java.util.List;
import com.trolltech.qt.core.QUrl;
import com.trolltech.qt.core.Qt.WidgetAttribute;
import com.trolltech.qt.gui.QCloseEvent;
import com.trolltech.qt.gui.QDesktopServices;
import com.trolltech.qt.gui.QDialog;
import com.trolltech.qt.gui.QMdiSubWindow;
import com.trolltech.qt.gui.QPrintDialog;
import com.trolltech.qt.gui.QPrinter;
import cx.fbn.nevernote.Global;
import cx.fbn.nevernote.dialog.FindDialog;
import cx.fbn.nevernote.sql.DatabaseConnection;
public class ExternalBrowse extends QMdiSubWindow {
private final DatabaseConnection conn;
private final BrowserWindow browser;
public Signal4<String, String, Boolean, BrowserWindow> contentsChanged;
public Signal1<String> windowClosing;
boolean noteDirty;
String saveTitle;
private final FindDialog find; // Text search in note dialog
// ExternalBrowserMenuBar menu;
ExternalBrowserMenuBar menu;
// Constructor
public ExternalBrowse(DatabaseConnection c) {
setAttribute(WidgetAttribute.WA_QuitOnClose, false);
setWindowTitle(tr("NixNote"));
conn = c;
contentsChanged = new Signal4<String, String, Boolean, BrowserWindow>();
windowClosing = new Signal1<String>();
browser = new BrowserWindow(conn);
menu = new ExternalBrowserMenuBar(this);
for (int i=0; i<menu.actions().size(); i++) {
addAction(menu.actions().get(i));
}
setWidget(browser);
noteDirty = false;
browser.titleLabel.textChanged.connect(this, "titleChanged(String)");
browser.getBrowser().page().contentsChanged.connect(this, "contentChanged()");
find = new FindDialog();
find.getOkButton().clicked.connect(this, "doFindText()");
}
@SuppressWarnings("unused")
private void contentChanged() {
noteDirty = true;
contentsChanged.emit(getBrowserWindow().getNote().getGuid(), getBrowserWindow().getContent(), false, getBrowserWindow());
}
@Override
public void closeEvent(QCloseEvent event) {
if (noteDirty)
contentsChanged.emit(getBrowserWindow().getNote().getGuid(), getBrowserWindow().getContent(), true, getBrowserWindow());
windowClosing.emit(getBrowserWindow().getNote().getGuid());
}
public BrowserWindow getBrowserWindow() {
return browser;
}
@SuppressWarnings("unused")
private void titleChanged(String value) {
setWindowTitle(tr("NixNote - ") +value);
}
@SuppressWarnings("unused")
private void updateTitle(String guid, String title) {
if (guid.equals(getBrowserWindow().getNote().getGuid()) &&
(saveTitle != null && !title.equals(saveTitle) || saveTitle == null) ) {
saveTitle = title;
getBrowserWindow().loadingData(true);
getBrowserWindow().setTitle(title);
getBrowserWindow().getNote().setTitle(title);
getBrowserWindow().loadingData(false);
}
}
@SuppressWarnings("unused")
private void updateNotebook(String guid, String notebook) {
if (guid.equals(getBrowserWindow().getNote().getGuid())) {
getBrowserWindow().loadingData(true);
getBrowserWindow().setNotebook(notebook);
getBrowserWindow().loadingData(false);
}
}
@SuppressWarnings("unused")
private void updateTags(String guid, List<String> tags) {
if (guid.equals(getBrowserWindow().getNote().getGuid())) {
StringBuffer tagLine = new StringBuffer(100);
for (int i=0; i<tags.size(); i++) {
if (i>0)
tagLine.append(Global.tagDelimeter+" ");
tagLine.append(tags.get(i));
}
getBrowserWindow().loadingData(true);
getBrowserWindow().getTagLine().setText(tagLine.toString());
getBrowserWindow().loadingData(false);
}
}
@SuppressWarnings("unused")
private void findText() {
find.show();
find.setFocusOnTextField();
}
@SuppressWarnings("unused")
private void doFindText() {
browser.getBrowser().page().findText(find.getText(), find.getFlags());
find.setFocus();
}
@SuppressWarnings("unused")
private void printNote() {
QPrintDialog dialog = new QPrintDialog();
if (dialog.exec() == QDialog.DialogCode.Accepted.value()) {
QPrinter printer = dialog.printer();
browser.getBrowser().print(printer);
}
}
// Listener triggered when the email button is pressed
@SuppressWarnings("unused")
private void emailNote() {
if (Desktop.isDesktopSupported()) {
Desktop desktop = Desktop.getDesktop();
String text2 = browser.getContentsToEmail();
QUrl url = new QUrl("mailto:");
url.addQueryItem("subject", browser.getTitle());
url.addQueryItem("body", text2);
QDesktopServices.openUrl(url);
}
}
}