package cx.fbn.nevernote.gui;\r
\r
import java.io.File;\r
+import java.io.FileNotFoundException;\r
+import java.io.IOException;\r
import java.net.FileNameMap;\r
import java.net.URI;\r
import java.net.URLConnection;\r
import java.util.GregorianCalendar;\r
import java.util.HashMap;\r
import java.util.List;\r
+import java.util.Locale;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
\r
import com.evernote.edam.limits.Constants;\r
import com.evernote.edam.type.Data;\r
import com.evernote.edam.type.Resource;\r
import com.evernote.edam.type.ResourceAttributes;\r
import com.evernote.edam.type.Tag;\r
+import com.swabunga.spell.engine.SpellDictionary;\r
+import com.swabunga.spell.engine.SpellDictionaryHashMap;\r
+import com.swabunga.spell.engine.Word;\r
+import com.swabunga.spell.event.SpellCheckEvent;\r
+import com.swabunga.spell.event.SpellCheckListener;\r
+import com.swabunga.spell.event.SpellChecker;\r
+import com.swabunga.spell.event.StringWordTokenizer;\r
import com.trolltech.qt.core.QByteArray;\r
import com.trolltech.qt.core.QDataStream;\r
import com.trolltech.qt.core.QDateTime;\r
import com.trolltech.qt.core.QIODevice;\r
import com.trolltech.qt.core.QMimeData;\r
import com.trolltech.qt.core.QUrl;\r
+import com.trolltech.qt.gui.QAction;\r
import com.trolltech.qt.gui.QApplication;\r
import com.trolltech.qt.gui.QCalendarWidget;\r
import com.trolltech.qt.gui.QClipboard;\r
import com.trolltech.qt.gui.QPushButton;\r
import com.trolltech.qt.gui.QShortcut;\r
import com.trolltech.qt.gui.QTimeEdit;\r
+import com.trolltech.qt.gui.QToolButton;\r
+import com.trolltech.qt.gui.QToolButton.ToolButtonPopupMode;\r
import com.trolltech.qt.gui.QVBoxLayout;\r
import com.trolltech.qt.gui.QWidget;\r
import com.trolltech.qt.network.QNetworkRequest;\r
import cx.fbn.nevernote.dialog.EnDecryptDialog;\r
import cx.fbn.nevernote.dialog.GeoDialog;\r
import cx.fbn.nevernote.dialog.InsertLinkDialog;\r
+import cx.fbn.nevernote.dialog.SpellCheck;\r
import cx.fbn.nevernote.dialog.TableDialog;\r
import cx.fbn.nevernote.dialog.TagAssign;\r
import cx.fbn.nevernote.evernote.EnCrypt;\r
private final QLabel notebookLabel;\r
private final QLabel createdLabel;\r
public final QComboBox fontSize;\r
+ public final QAction fontSizeAction;\r
private boolean extendedOn;\r
public boolean buttonsVisible;\r
private final String iconPath = new String("classpath:cx/fbn/nevernote/icons/");\r
private final QCalendarWidget subjectCalendarWidget;\r
\r
public final QPushButton undoButton;\r
+ public final QAction undoAction;\r
public final QPushButton redoButton;\r
+ public final QAction redoAction;\r
public final QPushButton cutButton;\r
+ public final QAction cutAction;\r
public final QPushButton copyButton;\r
+ public final QAction copyAction;\r
public final QPushButton pasteButton;\r
+ public final QAction pasteAction;\r
public final QPushButton boldButton;\r
+ public final QAction boldAction;\r
public final QPushButton underlineButton;\r
+ public final QAction underlineAction;\r
public final QPushButton italicButton;\r
+ public final QAction italicAction;\r
public final Signal0 focusLost;\r
public final NoteResourceSignal resourceSignal;\r
\r
public QPushButton rightAlignButton;\r
+ public final QAction rightAlignAction;\r
public QPushButton leftAlignButton;\r
+ public final QAction leftAlignAction;\r
public QPushButton centerAlignButton;\r
+ public final QAction centerAlignAction;\r
\r
public final QPushButton strikethroughButton;\r
+ public final QAction strikethroughAction;\r
public final QPushButton hlineButton;\r
+ public final QAction hlineAction;\r
public final QPushButton indentButton;\r
+ public final QAction indentAction;\r
public final QPushButton outdentButton;\r
+ public final QAction outdentAction;\r
public final QPushButton bulletListButton;\r
+ public final QAction bulletListAction;\r
public final QPushButton numberListButton;\r
+ public final QAction numberListAction;\r
\r
public final QShortcut focusTitleShortcut;\r
public final QShortcut focusTagShortcut;\r
public final QShortcut focusUrlShortcut;\r
public final QShortcut focusAuthorShortcut;\r
\r
+ public EditorButtonBar buttonLayout;\r
public final QComboBox fontList;\r
- public final QPushButton fontColor;\r
+ public final QAction fontListAction;\r
+ public final QToolButton fontColor;\r
+ public final QAction fontColorAction;\r
private final ColorMenu fontColorMenu;\r
- public final QPushButton fontHilight;\r
-// public final ColorComboBox fontHilight;\r
+ public final QToolButton fontHilight;\r
+ public final QAction fontHilightAction;\r
private final ColorMenu fontHilightColorMenu;\r
public final QFileSystemWatcher fileWatcher;\r
public int cursorPosition;\r
private final HashMap<String,Integer> previewPageList; \r
\r
\r
+ public static class SuggestionListener implements SpellCheckListener {\r
+ public boolean abortSpellCheck = false;\r
+ public boolean errorsFound = false;\r
+ \r
+ private final BrowserWindow parent;\r
+ public SuggestionListener(BrowserWindow parent) {\r
+ this.parent = parent;\r
+ }\r
+ public void spellingError(SpellCheckEvent event) {\r
+ errorsFound = true;\r
+ SpellCheck dialog = new SpellCheck();\r
+ dialog.setWord(event.getInvalidWord());\r
+\r
+ List<Word> suggestions = event.getSuggestions();\r
+ if (suggestions.isEmpty()) {\r
+ dialog.setNoSuggestions(true);\r
+ } else {\r
+ dialog.setCurrentSuggestion(suggestions.get(0).getWord());\r
+ for (int i=0; i<suggestions.size(); i++) {\r
+ dialog.addSuggestion(suggestions.get(i).getWord());\r
+ }\r
+ dialog.setSelectedSuggestion(0);\r
+ }\r
+ dialog.exec();\r
+ if (dialog.cancelPressed()) {\r
+ abortSpellCheck = true;\r
+ return;\r
+ }\r
+ if (dialog.replacePressed()) {\r
+ QClipboard clipboard = QApplication.clipboard();\r
+ clipboard.setText(dialog.getReplacementWord()); \r
+ parent.pasteClicked();\r
+ }\r
+ }\r
+ }\r
+\r
+ \r
+ \r
public BrowserWindow(DatabaseConnection c) {\r
logger = new ApplicationLogger("browser.log");\r
logger.log(logger.HIGH, "Setting up browser");\r
bulletListButton = newEditorButton("bulletList", tr("Bullet List"));\r
numberListButton = newEditorButton("numberList", tr("Number List"));\r
\r
-\r
- QHBoxLayout buttonLayout;\r
- buttonLayout = new QHBoxLayout();\r
- buttonLayout.setSpacing(0);\r
- v.addLayout(buttonLayout);\r
\r
- buttonLayout.addWidget(undoButton);\r
- buttonLayout.addWidget(redoButton);\r
-\r
- buttonLayout.addWidget(newSeparator(), 0);\r
- buttonLayout.addWidget(cutButton);\r
- buttonLayout.addWidget(copyButton);\r
- buttonLayout.addWidget(pasteButton);\r
-\r
- buttonLayout.addWidget(newSeparator(), 0);\r
- buttonLayout.addWidget(boldButton);\r
- buttonLayout.addWidget(italicButton);\r
- buttonLayout.addWidget(underlineButton);\r
- buttonLayout.addWidget(strikethroughButton);\r
+ buttonLayout = new EditorButtonBar();\r
+// buttonLayout.setSpacing(0);\r
+ v.addWidget(buttonLayout);\r
\r
- buttonLayout.addWidget(newSeparator(), 0);\r
- buttonLayout.addWidget(leftAlignButton);\r
- buttonLayout.addWidget(centerAlignButton);\r
- buttonLayout.addWidget(rightAlignButton);\r
-\r
- buttonLayout.addWidget(newSeparator(), 0);\r
- buttonLayout.addWidget(hlineButton);\r
+ undoAction = buttonLayout.addWidget(undoButton);\r
+ buttonLayout.toggleUndoVisible.triggered.connect(this, "toggleUndoVisible(Boolean)");\r
+ redoAction = buttonLayout.addWidget(redoButton);\r
+ buttonLayout.toggleRedoVisible.triggered.connect(this, "toggleRedoVisible(Boolean)");\r
+ \r
+ buttonLayout.addWidget(newSeparator());\r
+ cutAction = buttonLayout.addWidget(cutButton);\r
+ buttonLayout.toggleCutVisible.triggered.connect(this, "toggleCutVisible(Boolean)");\r
+ copyAction = buttonLayout.addWidget(copyButton);\r
+ buttonLayout.toggleCopyVisible.triggered.connect(this, "toggleCopyVisible(Boolean)");\r
+ pasteAction = buttonLayout.addWidget(pasteButton);\r
+ buttonLayout.togglePasteVisible.triggered.connect(this, "togglePasteVisible(Boolean)");\r
+\r
+ buttonLayout.addWidget(newSeparator());\r
+ boldAction = buttonLayout.addWidget(boldButton);\r
+ buttonLayout.toggleBoldVisible.triggered.connect(this, "toggleBoldVisible(Boolean)");\r
+ italicAction = buttonLayout.addWidget(italicButton);\r
+ buttonLayout.toggleItalicVisible.triggered.connect(this, "toggleItalicVisible(Boolean)");\r
+ underlineAction = buttonLayout.addWidget(underlineButton);\r
+ buttonLayout.toggleUnderlineVisible.triggered.connect(this, "toggleUnderlineVisible(Boolean)");\r
+ strikethroughAction = buttonLayout.addWidget(strikethroughButton);\r
+ buttonLayout.toggleStrikethroughVisible.triggered.connect(this, "toggleStrikethroughVisible(Boolean)");\r
\r
- buttonLayout.addWidget(indentButton);\r
- buttonLayout.addWidget(outdentButton);\r
- buttonLayout.addWidget(bulletListButton);\r
- buttonLayout.addWidget(numberListButton);\r
+ \r
+ buttonLayout.addWidget(newSeparator());\r
+ leftAlignAction = buttonLayout.addWidget(leftAlignButton);\r
+ buttonLayout.toggleLeftAlignVisible.triggered.connect(this, "toggleLeftAlignVisible(Boolean)");\r
+ centerAlignAction = buttonLayout.addWidget(centerAlignButton);\r
+ buttonLayout.toggleCenterAlignVisible.triggered.connect(this, "toggleCenterAlignVisible(Boolean)");\r
+ rightAlignAction = buttonLayout.addWidget(rightAlignButton);\r
+ buttonLayout.toggleRightAlignVisible.triggered.connect(this, "toggleRightAlignVisible(Boolean)");\r
+\r
+ buttonLayout.addWidget(newSeparator());\r
+ hlineAction = buttonLayout.addWidget(hlineButton);\r
+ buttonLayout.toggleHLineVisible.triggered.connect(this, "toggleHLineVisible(Boolean)");\r
+\r
+ indentAction = buttonLayout.addWidget(indentButton);\r
+ buttonLayout.toggleIndentVisible.triggered.connect(this, "toggleIndentVisible(Boolean)");\r
+ outdentAction = buttonLayout.addWidget(outdentButton);\r
+ buttonLayout.toggleOutdentVisible.triggered.connect(this, "toggleOutdentVisible(Boolean)");\r
+ bulletListAction = buttonLayout.addWidget(bulletListButton);\r
+ buttonLayout.toggleBulletListVisible.triggered.connect(this, "toggleBulletListVisible(Boolean)");\r
+ numberListAction = buttonLayout.addWidget(numberListButton);\r
+ buttonLayout.toggleNumberListVisible.triggered.connect(this, "toggleNumberListVisible(Boolean)");\r
\r
// Setup the font & font size combo boxes\r
- buttonLayout.addWidget(newSeparator(), 0);\r
+ buttonLayout.addWidget(newSeparator());\r
fontList = new QComboBox();\r
fontSize = new QComboBox();\r
fontList.setToolTip("Font");\r
fontSize.setToolTip("Font Size");\r
fontList.activated.connect(this, "fontChanged(String)");\r
fontSize.activated.connect(this, "fontSizeChanged(String)");\r
- buttonLayout.addWidget(fontList, 0);\r
- buttonLayout.addWidget(fontSize, 0);\r
+ fontListAction = buttonLayout.addWidget(fontList);\r
+ buttonLayout.toggleFontVisible.triggered.connect(this, "toggleFontListVisible(Boolean)");\r
+ fontSizeAction = buttonLayout.addWidget(fontSize);\r
+ buttonLayout.toggleFontSizeVisible.triggered.connect(this, "toggleFontSizeVisible(Boolean)");\r
QFontDatabase fonts = new QFontDatabase();\r
List<String> fontFamilies = fonts.families();\r
for (int i = 0; i < fontFamilies.size(); i++) {\r
}\r
}\r
\r
- buttonLayout.addWidget(newSeparator(), 0);\r
- fontColor = newEditorButton("fontColor", tr("Font Color"));\r
+// buttonLayout.addWidget(newSeparator(), 0);\r
+ fontColor = newToolButton("fontColor", tr("Font Color"));\r
fontColorMenu = new ColorMenu(this);\r
fontColor.setMenu(fontColorMenu.getMenu());\r
+ fontColor.setPopupMode(ToolButtonPopupMode.MenuButtonPopup);\r
+ fontColor.setAutoRaise(false);\r
fontColorMenu.getMenu().triggered.connect(this, "fontColorClicked()");\r
- buttonLayout.addWidget(fontColor);\r
- fontHilight = newEditorButton("fontHilight", tr("Font Hilight Color"));\r
+ fontColorAction = buttonLayout.addWidget(fontColor);\r
+ buttonLayout.toggleFontColorVisible.triggered.connect(this, "toggleFontColorVisible(Boolean)");\r
+ fontHilight = newToolButton("fontHilight", tr("Font Hilight Color"));\r
+ fontHilight.setPopupMode(ToolButtonPopupMode.MenuButtonPopup);\r
+ fontHilight.setAutoRaise(false);\r
fontHilightColorMenu = new ColorMenu(this);\r
+ fontHilightColorMenu.setDefault(QColor.yellow);\r
fontHilight.setMenu(fontHilightColorMenu.getMenu());\r
fontHilightColorMenu.getMenu().triggered.connect(this, "fontHilightClicked()");\r
- buttonLayout.addWidget(fontHilight);\r
+ fontHilightAction = buttonLayout.addWidget(fontHilight);\r
+ fontHilightColorMenu.setDefault(QColor.yellow);\r
+ buttonLayout.toggleFontHilight.triggered.connect(this, "toggleFontHilightVisible(Boolean)");\r
\r
- buttonLayout.addWidget(new QLabel(), 1);\r
+// buttonLayout.addWidget(new QLabel(), 1);\r
v.addWidget(browser, 1);\r
-// v.addLayout(buttonLayout,0);\r
setLayout(v);\r
\r
browser.downloadAttachmentRequested.connect(this,\r
browser.page().mainFrame().setTextSizeMultiplier(Global.getTextSizeMultiplier());\r
browser.page().mainFrame().setZoomFactor(Global.getZoomFactor());\r
\r
- previewPageList = new HashMap<String,Integer>();\r
+ previewPageList = new HashMap<String,Integer>();\r
\r
browser.page().microFocusChanged.connect(this, "microFocusChanged()");\r
+ \r
logger.log(logger.HIGH, "Browser setup complete");\r
}\r
\r
\r
+ \r
private void setupShortcut(QShortcut action, String text) {\r
if (!Global.shortcutKeys.containsAction(text))\r
return;\r
button.clicked.connect(this, name + "Clicked()");\r
return button;\r
}\r
+ // New Editor Button\r
+ private QToolButton newToolButton(String name, String toolTip) {\r
+ QToolButton button = new QToolButton();\r
+ QIcon icon = new QIcon(iconPath + name + ".gif");\r
+ button.setIcon(icon);\r
+ button.setToolTip(toolTip);\r
+ button.clicked.connect(this, name + "Clicked()");\r
+ return button;\r
+ }\r
\r
// New Separator\r
private QLabel newSeparator() {\r
\r
public void hideButtons() {\r
\r
+ undoButton.parentWidget().setVisible(false);\r
buttonsVisible = false;\r
- \r
- undoButton.setVisible(false);\r
- redoButton.setVisible(false);\r
- cutButton.setVisible(false);\r
- copyButton.setVisible(false);\r
- pasteButton.setVisible(false);\r
- boldButton.setVisible(false);\r
- underlineButton.setVisible(false);\r
- italicButton.setVisible(false);\r
-\r
- rightAlignButton.setVisible(false);\r
- leftAlignButton.setVisible(false);\r
- centerAlignButton.setVisible(false);\r
-\r
- strikethroughButton.setVisible(false);\r
- hlineButton.setVisible(false);\r
- indentButton.setVisible(false);\r
- outdentButton.setVisible(false);\r
- bulletListButton.setVisible(false);\r
- numberListButton.setVisible(false);\r
-\r
- fontList.setVisible(false);\r
- fontSize.setVisible(false);\r
- fontColor.setVisible(false);\r
- fontHilight.setVisible(false);\r
-\r
}\r
\r
\r
}\r
\r
// Listener when PASTE is clicked\r
- void pasteClicked() {\r
+ public void pasteClicked() {\r
logger.log(logger.EXTREME, "Paste Clicked");\r
if (forceTextPaste) {\r
pasteWithoutFormattingClicked();\r
String selectedText = browser.selectedText();\r
logger.log(logger.EXTREME, "Inserting link on text "+selectedText);\r
logger.log(logger.EXTREME, "URL Link " +dialog.getUrl().trim());\r
- String url = "<a href=\"" +dialog.getUrl().trim()+"\" >"+selectedText +"</a>";\r
+ String dUrl = StringUtils.replace(dialog.getUrl().trim(), "'", "\\'");\r
+ String url = "<a href=\"" +dUrl\r
+ +"\" title=" +dUrl \r
+ +" >"+selectedText +"</a>";\r
String script = "document.execCommand('insertHtml', false, '"+url+"');";\r
browser.page().mainFrame().evaluateJavaScript(script);\r
return;\r
// Check the note title\r
private void checkNoteTitle() {\r
String text = browser.page().currentFrame().toPlainText();\r
- if (saveNoteTitle.trim().equals("")) {\r
+ if (saveNoteTitle.trim().equals("") || saveNoteTitle.trim().equals("Untitled Note")) {\r
int newLine = text.indexOf("\n");\r
if (newLine > 0) {\r
text = text.substring(0, newLine);\r
text = tr("Untitled Note");\r
titleLabel.setText(text);\r
} else {\r
- if (text.length() > 20)\r
- titleLabel.setText(text.substring(0, 20));\r
+ if (text.length() > Constants.EDAM_NOTE_TITLE_LEN_MAX)\r
+ titleLabel.setText(text.substring(0, Constants.EDAM_NOTE_TITLE_LEN_MAX));\r
else {\r
+ titleLabel.blockSignals(true);\r
if (text.trim().equals(""))\r
titleLabel.setText(tr("Untitled Note"));\r
else\r
titleLabel.setText(text);\r
+ titleLabel.blockSignals(false);\r
}\r
}\r
noteSignal.titleChanged.emit(currentNote.getGuid(), titleLabel\r
buffer.append("\" en-tag=en-media type=\"image/jpeg\""\r
+" hash=\""+Global.byteArrayToHexString(newRes.getData().getBodyHash()) +"\""\r
+" guid=\"" +newRes.getGuid() +"\""\r
- +" onContextMenu=\"window.jambi.imageContextMenu('" +tfile.fileName() +"');\""\r
+// +" onContextMenu=\"window.jambi.imageContextMenu('" +tfile.fileName() +"');\""\r
+ +" onContextMenu=\"window.jambi.imageContextMenu(&." +tfile.fileName() +"&.);\""\r
+ " />");\r
+ \r
browser.page().mainFrame().evaluateJavaScript(\r
script_start + buffer + script_end);\r
\r
String script_end = new String("');");\r
StringBuffer buffer;\r
\r
- for (int i = 0; i < urlList.size(); i++) {\r
- buffer = new StringBuffer(100);\r
- String url = urlList.get(i).toString();\r
-\r
- // Start building the HTML\r
String[] type = mimeType.split("/");\r
String icon = findIcon(type[1]);\r
if (icon.equals("attachment.png"))\r
icon = findIcon(type[0]);\r
+ buffer = new StringBuffer(100);\r
+\r
+ for (int i = 0; i < urlList.size(); i++) {\r
+ String url = urlList.get(i).toString();\r
+\r
+ // Start building the HTML\r
if (icon.equals("attachment.png"))\r
icon = findIcon(url.substring(url.lastIndexOf(".")+1));\r
String imageURL = FileUtils.toFileURLString(Global.getFileManager().getImageDirFile(icon));\r
}\r
\r
logger.log(logger.EXTREME, "Generating link tags");\r
+ buffer.delete(0, buffer.length());\r
buffer.append("<a en-tag=\"en-media\" guid=\"" +newRes.getGuid()+"\" ");\r
buffer.append(" onContextMenu=\"window.jambi.imageContextMenu('")\r
.append(Global.getFileManager().getResDirPath(fileName))\r
}\r
return;\r
}\r
+\r
private Resource createResource(String url, int sequence, String mime, boolean attachment) {\r
logger.log(logger.EXTREME, "Inside create resource");\r
QFile resourceFile;\r
- url = new QUrl(url).toLocalFile();\r
+ String urlTest = new QUrl(url).toLocalFile();\r
+ if (!urlTest.equals(""))\r
+ url = urlTest;\r
url = url.replace("/", File.separator);\r
resourceFile = new QFile(url); \r
resourceFile.open(new QIODevice.OpenMode(QIODevice.OpenModeFlag.ReadOnly));\r
int guidEndPos = segment.indexOf("\"", guidStartPos+7);\r
String guid = segment.substring(guidStartPos+6,guidEndPos);\r
\r
+ int mimeStartPos = segment.indexOf("type");\r
+ int mimeEndPos = segment.indexOf("\"", mimeStartPos+7);\r
+ String mime = segment.substring(mimeStartPos+6,mimeEndPos);\r
+\r
+ int srcStartPos = segment.indexOf("src");\r
+ int srcEndPos = segment.indexOf("\"", srcStartPos+6);\r
+ String src = segment.substring(srcStartPos+5,srcEndPos);\r
+ \r
Calendar currentTime = new GregorianCalendar();\r
Long l = new Long(currentTime.getTimeInMillis());\r
long prevTime = l;\r
}\r
\r
Resource r = conn.getNoteTable().noteResourceTable.getNoteResource(guid, true);\r
- if (r==null)\r
- return "";\r
+ // if r==null, then the image doesn't exist (it was probably cut out of another note, so \r
+ // we need to recereate it\r
+ if (r==null) {\r
+ r = createResource(src, 1, mime, false);\r
+ if (r==null)\r
+ return "";\r
+ }\r
String randint = new String(Long.toString(l));\r
String extension = null;\r
if (r.getMime()!= null) {\r
// browser.previousPageAction.setVisible(false);\r
}\r
*/\r
+ \r
+ private void toggleUndoVisible(Boolean toggle) {\r
+ undoAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("undo", toggle);\r
+ }\r
+ private void toggleRedoVisible(Boolean toggle) {\r
+ redoAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("redo", toggle);\r
+ }\r
+ private void toggleCutVisible(Boolean toggle) {\r
+ cutAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("cut", toggle);\r
+ }\r
+ private void toggleCopyVisible(Boolean toggle) {\r
+ copyAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("copy", toggle);\r
+ }\r
+ private void togglePasteVisible(Boolean toggle) {\r
+ pasteAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("paste", toggle);\r
+ }\r
+ private void toggleBoldVisible(Boolean toggle) {\r
+ boldAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("bold", toggle);\r
+ }\r
+ private void toggleItalicVisible(Boolean toggle) {\r
+ italicAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("italic", toggle);\r
+ }\r
+ private void toggleUnderlineVisible(Boolean toggle) {\r
+ underlineAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("underline", toggle);\r
+ }\r
+ private void toggleStrikethroughVisible(Boolean toggle) {\r
+ strikethroughAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("strikethrough", toggle);\r
+ }\r
+ private void toggleLeftAlignVisible(Boolean toggle) {\r
+ leftAlignAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("alignLeft", toggle);\r
+ }\r
+ private void toggleRightAlignVisible(Boolean toggle) {\r
+ rightAlignAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("alignRight", toggle);\r
+ } \r
+ private void toggleCenterAlignVisible(Boolean toggle) {\r
+ centerAlignAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("alignCenter", toggle);\r
+ }\r
+ private void toggleHLineVisible(Boolean toggle) {\r
+ hlineAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("hline", toggle);\r
+ }\r
+ private void toggleIndentVisible(Boolean toggle) {\r
+ indentAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("indent", toggle);\r
+ }\r
+ private void toggleOutdentVisible(Boolean toggle) {\r
+ outdentAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("outdent", toggle);\r
+ }\r
+ private void toggleBulletListVisible(Boolean toggle) {\r
+ bulletListAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("bulletList", toggle);\r
+ }\r
+ private void toggleNumberListVisible(Boolean toggle) {\r
+ numberListAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("numberList", toggle);\r
+ }\r
+ private void toggleFontListVisible(Boolean toggle) {\r
+ fontListAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("font", toggle);\r
+ }\r
+ private void toggleFontColorVisible(Boolean toggle) {\r
+ fontColorAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("fontColor", toggle);\r
+ }\r
+ private void toggleFontSizeVisible(Boolean toggle) {\r
+ fontSizeAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("fontSize", toggle);\r
+ }\r
+ private void toggleFontHilightVisible(Boolean toggle) {\r
+ fontHilightAction.setVisible(toggle);\r
+ Global.saveEditorButtonsVisible("fontHilight", toggle);\r
+ }\r
+\r
+\r
+ // Invoke spell checker dialog\r
+ private void doSpellCheck() {\r
+\r
+ File wordList = new File(Global.getFileManager().getSpellDirPath()+Locale.getDefault()+".dic");\r
+ SpellDictionary dictionary;\r
+ try {\r
+ dictionary = new SpellDictionaryHashMap(wordList);\r
+ SpellChecker spellChecker = new SpellChecker(dictionary);\r
+ SuggestionListener spellListener = new SuggestionListener(this);\r
+ spellChecker.addSpellCheckListener(spellListener);\r
+\r
+ String content = getBrowser().page().mainFrame().toPlainText();\r
+ StringWordTokenizer tokenizer = new StringWordTokenizer(content);\r
+ if (!tokenizer.hasMoreWords())\r
+ return;\r
+ String word = tokenizer.nextWord();\r
+ getBrowser().page().action(WebAction.MoveToStartOfDocument);\r
+ QWebPage.FindFlags flags = new QWebPage.FindFlags();\r
+ flags.set(QWebPage.FindFlag.FindBackward);\r
+\r
+ getBrowser().setFocus();\r
+ boolean found = getBrowser().page().findText(word);\r
+ if (!found) {\r
+ QMessageBox.critical(this, tr("Spell Check Error"), \r
+ tr("An error has occurred while launching the spell check. The most probable" +\r
+ " cause is that the cursor was not at the beginning of the document.\n\n" +\r
+ "Please place the cursor at the beginning & try again"));\r
+ return;\r
+ }\r
+ while (found) {\r
+ found = getBrowser().page().findText(word);\r
+ }\r
+ \r
+ spellChecker.checkSpelling(new StringWordTokenizer(word));\r
+ getBrowser().setFocus();\r
+ \r
+ flags = new QWebPage.FindFlags();\r
+ tokenizer = new StringWordTokenizer(content);\r
+ \r
+ while(tokenizer.hasMoreWords()) {\r
+ word = tokenizer.nextWord();\r
+ found = getBrowser().page().findText(word);\r
+ if (found && !spellListener.abortSpellCheck) {\r
+ spellChecker.checkSpelling(new StringWordTokenizer(word));\r
+ getBrowser().setFocus();\r
+ }\r
+ }\r
+ spellChecker.removeSpellCheckListener(spellListener);\r
+ if (!spellListener.errorsFound)\r
+ QMessageBox.information(this, tr("Spell Check Complete"), \r
+ tr("No spelling errors found"));\r
+ } catch (FileNotFoundException e) {\r
+ QMessageBox.critical(this, tr("Spell Check Error"), \r
+ tr("Dictionary "+ Global.getFileManager().getSpellDirPath()+Locale.getDefault()+\r
+ ".dic was not found."));\r
+ } catch (IOException e) {\r
+ QMessageBox.critical(this, tr("Spell Check Error"), \r
+ tr("Dictionary "+ Global.getFileManager().getSpellDirPath()+Locale.getDefault()+\r
+ ".dic is invalid."));\r
+ }\r
+\r
+ }\r
+\r
}\r