/* ******************************************************************************
*
* Copyright 2008-2010 Hans Dijkema
*
* JRichTextEditor is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* SwingX is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JRichTextEditor. If not, see <http://www.gnu.org/licenses/>.
*
* ******************************************************************************/
package nl.dykema.demo.jxmlnote;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.geom.AffineTransform;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.Date;
import java.util.Iterator;
import java.util.Vector;
import java.util.prefs.Preferences;
import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.text.BadLocationException;
import javax.swing.text.StyleConstants;
import javax.xml.parsers.ParserConfigurationException;
import nl.dykema.jxmlnote.JXMLNoteEditor;
import nl.dykema.jxmlnote.document.DocumentAdminEvent;
import nl.dykema.jxmlnote.document.DocumentAdminListener;
import nl.dykema.jxmlnote.document.DocumentPreEvent;
import nl.dykema.jxmlnote.document.DocumentPreListener;
import nl.dykema.jxmlnote.document.XMLNoteDocument;
import nl.dykema.jxmlnote.document.XMLNoteImageIconSize;
import nl.dykema.jxmlnote.document.XMLNoteMark;
import nl.dykema.jxmlnote.document.XMLNoteMarkIdProvider;
import nl.dykema.jxmlnote.document.XMLNoteMarkListener;
import nl.dykema.jxmlnote.document.XMLNoteUndoable;
import nl.dykema.jxmlnote.exceptions.BadDocumentException;
import nl.dykema.jxmlnote.exceptions.BadMetaException;
import nl.dykema.jxmlnote.exceptions.BadOperationException;
import nl.dykema.jxmlnote.exceptions.BadStyleException;
import nl.dykema.jxmlnote.exceptions.DefaultXMLNoteErrorHandler;
import nl.dykema.jxmlnote.exceptions.MarkExistsException;
import nl.dykema.jxmlnote.exceptions.MarkNoExistException;
import nl.dykema.jxmlnote.exceptions.NoSelectionException;
import nl.dykema.jxmlnote.html.HtmlToXHtml;
import nl.dykema.jxmlnote.html.XHtmlToXMLNote;
import nl.dykema.jxmlnote.html.XMLNoteToHtml;
import nl.dykema.jxmlnote.interfaces.MarkMarkupProvider;
import nl.dykema.jxmlnote.interfaces.MarkMarkupProviderMaker;
import nl.dykema.jxmlnote.interfaces.XMLNotePreferences;
import nl.dykema.jxmlnote.interfaces.MarkMarkupProvider.MarkupType;
import nl.dykema.jxmlnote.internationalization.DefaultXMLNoteTranslator;
import nl.dykema.jxmlnote.internationalization.XMLNoteTranslator;
import nl.dykema.jxmlnote.report.ReportException;
import nl.dykema.jxmlnote.report.ReportProgressBar;
import nl.dykema.jxmlnote.report.XMLNoteToReport;
import nl.dykema.jxmlnote.report.ReportProgressBar.Progress;
import nl.dykema.jxmlnote.report.XMLNoteToReport.Moment;
import nl.dykema.jxmlnote.report.pdf.PdfReport;
import nl.dykema.jxmlnote.report.viewers.PdfViewer;
import nl.dykema.jxmlnote.styles.XMLNoteStyles;
import nl.dykema.jxmlnote.toolbar.JXMLNoteToolBar;
import nl.dykema.jxmlnote.utils.DPIAdjuster;
import nl.dykema.jxmlnote.widgets.JXMLNotePane;
import nl.dykema.jxmlnote.widgets.JXMLNoteStylePane;
import nl.dykema.jxmlnote.widgets.marks.DefaultMarkMarkupProvider;
import nl.dykema.jxmlnote.widgets.marks.MarkMouseListener;
import nl.dykema.jxmlnote.xml.XMLNoteUtils;
import org.xml.sax.SAXException;
public class JXMLNoteDemo {
private static String readFileAsString(String filePath)
throws java.io.IOException {
byte[] buffer = new byte[(int) new File(filePath).length()];
BufferedInputStream f = new BufferedInputStream(new FileInputStream(
filePath));
f.read(buffer);
f.close();
return new String(buffer, "UTF-8");
}
public static void main(String[] args) {
try {
//System.setProperty("awt.useSystemAAFontSettings", "lcd_vbgr");
//UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {
System.out.println("Error setting native LAF: " + e);
}
class EditRun implements Runnable, ActionListener {
private Integer _id = 0;
private JXMLNotePane _notes;
private XMLNoteDocument _document;
private MarkerProvider _provider;
private MarkerProvider _provider2;
private XMLNoteTranslator _translator;
private JFrame _frame;
private JMenuBar _menu;
private JXMLNoteEditor _editor;
private JXMLNoteEditor _viewer;
private Preferences _preferences=Preferences.userNodeForPackage(JXMLNoteDemo.class);
private File _saveFile=new File("/tmp/xmlnote.jxmlnote");
private boolean _canceled;
private float convertToPixels(int pt) {
return (float) DPIAdjuster.adjustPointSize((double) pt);
}
public void createPdf() {
final PdfReport pdf;
final XMLNoteToReport report;
try {
pdf = new PdfReport(new File("/tmp/fontcache.dat"));
final File reportFile=new File("/tmp/pdf_output.pdf");
pdf.beginReport(reportFile);
report=new XMLNoteToReport(pdf);
_canceled=false;
ReportProgressBar bar=ReportProgressBar.runJob(pdf, _editor, "Printing", new ReportProgressBar.Job() {
public void job(Progress p) {
try {
p.progress(0);
p.statusMessage("Creating "+reportFile);
pdf.addXMLNote(_editor.getDocument(),new MarkMarkupProviderMaker() {
public MarkMarkupProvider create(String markId,String markClass) {
return _provider2;
}
}, new XMLNoteToReport.MarkTextProvider() {
public String provideText(
XMLNoteMark mark,
XMLNoteToReport.Moment moment) {
if (moment.equals(Moment.BEFORE)) {
return "(BEFORE)";
} else {
return "(AFTER)";
}
}
});
p.progress(100);
pdf.endReport();
} catch (ReportException e) {
DefaultXMLNoteErrorHandler.exception(e);
}
}
public void cancelled() {
try {
pdf.cancel();
_canceled=true;
} catch (ReportException e) {
DefaultXMLNoteErrorHandler.exception(e);
}
}
}, new XMLNotePreferences() {
public String getString(String key, String _default) { return _preferences.get(key, _default); }
public int getInt(String key, int _default) { return _preferences.getInt(key,_default); }
public void put(String key, String value) { _preferences.put(key, value); }
public void put(String key, Integer value) { _preferences.putInt(key, value); }
});
} catch (ReportException e) {
e.printStackTrace();
}
}
protected java.awt.Rectangle getVisibleEditorRect(JTextPane ta) {
java.awt.Rectangle alloc = ta.getBounds();
if ((alloc.width > 0) && (alloc.height > 0)) {
alloc.x = alloc.y = 0;
Insets insets = ta.getInsets();
alloc.x += insets.left;
alloc.y += insets.top;
alloc.width -= insets.left + insets.right;
alloc.height -= insets.top + insets.bottom;
return alloc;
}
return null;
}
private void doPrint() {
createPdf();
if (_canceled) { return; }
try {
PdfViewer.showPdfViewer(_frame, "View resulting pdf", new File("/tmp/pdf_output.pdf"),
new XMLNotePreferences() {
public String getString(String key,String _default) {
return _preferences.get(key,_default);
}
public int getInt(String key,int _default) {
return _preferences.getInt(key,_default);
}
public void put(String key,String value) {
_preferences.put(key,value);
}
public void put(String key,Integer value) {
_preferences.putInt(key,value);
}
});
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class MarkerProvider extends DefaultMarkMarkupProvider {
private Color _c1,_c2;
private MarkupType _type;
public Color markColor(XMLNoteMark m) {
int id=Integer.parseInt(m.id());
if ((id%2)==0) {
return _c1;
} else {
return _c2;
}
}
public void setColors(Color c1,Color c2) {
_c1=c1;_c2=c2;
super.fireChangedEvent();
}
public Color getColor1() {
return _c1;
}
public Color getColor2() {
return _c2;
}
public MarkupType type() {
return _type;
}
public void setType(MarkupType t) {
_type=t;
super.setType(t);
}
public MarkerProvider(MarkupType t,Color c1,Color c2) {
super(t,c1);
_c1=c1;_c2=c2;_type=t;
}
}
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
System.out.println("command: " + cmd);
if (cmd.equals("prefs")) {
JDialog dlg=new JDialog(_frame,"Style preferences",true);
dlg.setLocationRelativeTo(_frame);
JXMLNoteStylePane pane=new JXMLNoteStylePane(_document.getStyles());
dlg.add(pane);
dlg.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dlg.pack();
dlg.setVisible(true);
} else if (cmd.equals("mark")) {
_id += 1;
boolean le=_notes.getXMLNoteDoc().setLongEdit(true);
XMLNoteUndoable u=new XMLNoteUndoable() {
public boolean operation() {
System.out.println("HI THERE, DOING 'operation'");
return true;
}
public void inverseOperation() {
System.out.println("HI THERE, UNDOING 'operation'");
}
};
_notes.getXMLNoteDoc().addUndoable(u);
try {
_notes.insertMark(_id.toString(),null);
} catch (NoSelectionException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (BadLocationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (MarkExistsException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
_notes.getXMLNoteDoc().setLongEdit(le);
} else if (cmd.equals("unmark")) {
Vector<XMLNoteMark> marks = _notes.getMarksForCaret();
Iterator<XMLNoteMark> it = marks.iterator();
while (it.hasNext()) {
try {
_notes.removeMark(it.next().id());
} catch (MarkNoExistException e1) {
e1.printStackTrace();
}
}
} else if (cmd.equals("lighters")) {
if (_provider.getColor1().equals(Color.yellow)) {
_provider.setColors(Color.gray,Color.gray);
} else {
_provider.setColors(Color.yellow,Color.green);
}
if (_provider2.type()==MarkupType.UNDERLINED) {
_provider2.setType(MarkupType.MARKER);
_provider2.setColors(_provider2.getColor2(), _provider2.getColor1());
} else {
_provider2.setType(MarkupType.UNDERLINED);
}
} else if (cmd.equals("save")) {
String xml;
try {
_document.setMeta("last_id", _id);
_document.setMeta("save_time",new Date());
xml = _document.toXML();
} catch (BadDocumentException e1) {
e1.printStackTrace();
xml = null;
}
System.out.println(XMLNoteUtils.prettyPrintXML(xml));
try {
OutputStream sout = new FileOutputStream(_saveFile);
sout.write(xml.getBytes("UTF-8"));
sout.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (UnsupportedEncodingException e3) {
e3.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
xml = _document.getStyles().toXML();
System.out.println(XMLNoteUtils.prettyPrintXML(xml));
} else if (cmd.startsWith("loadurl")) {
try {
String U;
U="http://www.homeoint.org/books/boericmm/n/nat-ar.htm";
//U="http://www.dijkema.net"; //TODO: Wat te doen met dit soort stuff?
//U="http://www.ns.nl"; // TODO: Check wat er gebeurt hier!
//U="http://nl.wikipedia.org/wiki/Rich_Text_Format";
//U="http://java.sun.com/j2se/1.4.2/docs/api/java/io/InputStreamReader.html";
//U="http://nos.nl/artikel/174291-burgemeester-duisburg-uitgejouwd.html";
//U="http://i-to-i.irexnet.com/";
//U="http://i-to-i.irexnet.com/2010/06/10/2-0-rc2-software-available-for-dr800sg-and-dr1000s/";
//U="http://debs.oolite.org/";
//U="http://www.oolite.org/about";
URL url=new URL(U);
String xhtml=HtmlToXHtml.fromHtml(url);
System.out.println(xhtml);
XMLNoteDocument d=XHtmlToXMLNote.convert(xhtml,null,new XMLNoteStyles());
d.trim();
if (cmd.equals("loadurl1") || cmd.equals("loadurl3")) {
d.setMeta("startsWithParagraph", false);
}
if (cmd.equals("loadurl2") || cmd.equals("loadurl3")) {
d.setMeta("endsWithParagraph",false);
}
if (!cmd.equals("loadurl4")) {
_document.copyInto(d, _editor.getCaretPosition() , true);
} else {
_document.resetFromDocument(d);
}
System.out.println(d.toXML());
} catch (IOException e1) {
e1.printStackTrace();
} catch (BadDocumentException e3) {
e3.printStackTrace();
} catch (ParserConfigurationException e2) {
e2.printStackTrace();
} catch (SAXException e2) {
e2.printStackTrace();
} catch (BadStyleException e2) {
e2.printStackTrace();
} catch (MarkExistsException e2) {
e2.printStackTrace();
}
} else if (cmd.equals("take_part")) {
try {
XMLNoteDocument part=_document.getPart(_editor.getSelectionStart(),_editor.getSelectionEnd(),XMLNoteDocument.PARTIAL);
if (part==null) {
System.out.println("Part = null");
} else {
System.out.println("Part:");
System.out.println(XMLNoteUtils.prettyPrintXML(part.toXML()));
}
} catch (BadLocationException e1) {
e1.printStackTrace();
} catch (BadDocumentException e1) {
e1.printStackTrace();
}
} else if (cmd.equals("part_to_html")) {
try {
XMLNoteDocument part=_document.getPart(_editor.getSelectionStart(),_editor.getSelectionEnd(),XMLNoteDocument.PARTIAL);
if (part==null) {
System.out.println("Part = null");
} else {
String xhtml=XMLNoteToHtml.toString(part, _editor.getMarkMarkupProviderMaker());
System.out.println(XMLNoteUtils.prettyPrintXML(xhtml));
System.out.println(xhtml);
OutputStream sout = new FileOutputStream("/tmp/xmlnote.html");
sout.write(xhtml.getBytes("UTF-8"));
sout.close();
}
} catch (Exception e1) {
e1.printStackTrace();
}
} else if (cmd.equals("to_html")) {
try {
String xhtml=XMLNoteToHtml.toString(_document, _viewer.getMarkMarkupProviderMaker());
System.out.println(XMLNoteUtils.prettyPrintXML(xhtml));
System.out.println(xhtml);
OutputStream sout = new FileOutputStream("/tmp/xmlnote.html");
sout.write(xhtml.getBytes("UTF-8"));
sout.close();
} catch (Exception e1) {
e1.printStackTrace();
}
} else if (cmd.equals("load")) {
String xml=XMLNoteDocument.emptyXML();
try {
File lastpath=new File(_preferences.get("lastpath", "."));
JFileChooser chooser = new JFileChooser(lastpath);
FileNameExtensionFilter filter = new FileNameExtensionFilter("XMLNote files", "jxmlnote");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(_frame);
if (returnVal == JFileChooser.APPROVE_OPTION) {
lastpath=chooser.getCurrentDirectory();
_preferences.put("lastpath", lastpath.getAbsolutePath());
File file = chooser.getSelectedFile();
String fl = file.getAbsolutePath();
if (!fl.endsWith(".jxmlnote")) {
file = new File(fl + ".jxmlnote");
}
_saveFile=file;
xml = readFileAsString(file.getAbsolutePath());
}
_document.resetFromXML(xml);
_id=_document.getIntMeta("last_id");
System.out.println("last id: "+_id);
System.out.println("last save date: "+_document.getDateMeta("save_time"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (BadDocumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (BadMetaException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} else if (cmd.equals("new")) {
_document.clear();
} else if (cmd.equals("undo")) {
_document.getUndoManager().undo();
} else if (cmd.equals("trim")) {
_document.trim();
} else if (cmd.equals("print")) {
doPrint();
} else {
System.out.println(cmd);
if (cmd.equals("undo")) {
_document.getUndoManager().undo();
}
}
}
public void run() {
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd=ge.getDefaultScreenDevice();
GraphicsConfiguration gc=gd.getDefaultConfiguration();
AffineTransform at=gc.getDefaultTransform();
System.out.println(at);
at.setToScale(0.4, 0.4);
System.out.println(at);
System.out.println(gc.getDefaultTransform());
System.out.println(gc.getClass());
//sun.awt.X11GraphicsConfig gcx=(sun.awt.X11GraphicsConfig) gc;
at=gc.getNormalizingTransform();
System.out.println(at);
//AffineTransform at=gc.getDefaultTransform();
//at.setToScale(2.0, 2.0);
//AffineTransform at=gc.getNormalizingTransform();
//at.setToScale(2.0, 2.0);
_frame = new JFrame();
_translator = new DefaultXMLNoteTranslator();
try {
_document = new XMLNoteDocument();
} catch (BadStyleException e3) {
e3.printStackTrace();
}
_provider = new MarkerProvider(MarkupType.MARKER,Color.yellow,Color.green);
_provider2 = new MarkerProvider(MarkupType.UNDERLINED,Color.blue,Color.cyan);
_document.setMarkIdReassigner(new XMLNoteMarkIdProvider() {
public String getNewId(XMLNoteMark mark) {
if (_document.markExists(mark.id())) {
_id+=1;
return _id.toString();
} else {
return null;
}
}
});
_viewer = new JXMLNoteEditor(_document,
new MarkMarkupProviderMaker() {
public MarkMarkupProvider create(
String markId,
String markClass) {
return _provider2;
}
});
_editor = new JXMLNoteEditor(_document,
new MarkMarkupProviderMaker() {
public MarkMarkupProvider create(String markId,String markClass) {
return _provider;
}
}
);
// JXMLNotePane _pane=new JXMLNotePane(_document);
JXMLNoteToolBar _bar = _editor.toolbar();
_bar.setButtonSize(24);
_notes = _editor.pane();
JPanel _panel = new JPanel();
JPanel _editorPanel=new JPanel();
_editorPanel.setLayout(new BoxLayout(_editorPanel, BoxLayout.PAGE_AXIS));
_panel.setLayout(new BorderLayout());
try {
_document.insertString(0, "��n extra graag", null);
} catch (BadLocationException e2) {
e2.printStackTrace();
}
_document.addDocumentPreListener(new DocumentPreListener() {
public boolean changeUpdate(DocumentEvent e) {
System.out.println("pre change");
return false;
}
public boolean insertUpdate(DocumentEvent e) {
System.out.println("pre insert");
DocumentPreEvent ee = (DocumentPreEvent) e;
try {
System.out.println("insert=" + ee.getString());
} catch (BadOperationException e1) {
e1.printStackTrace();
}
return false;
}
public boolean removeUpdate(DocumentEvent e) {
System.out.println("pre remove");
XMLNoteDocument d = (XMLNoteDocument) e.getDocument();
if (d.isMarkInRange(e.getOffset(), e.getLength())) {
if (JOptionPane.showConfirmDialog(_frame,
"This selection contains marks, remove?","Remove marks",
JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION) {
return false;
} else {
return true; // VETO
}
}
return false;
}
});
_document.addDocumentAdminListener(new DocumentAdminListener() {
public boolean veto(String msg, String title) {
System.out.println("pre clear/reset");
if (JOptionPane.showConfirmDialog(_frame, msg, title,
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
return false;
}
return true;
}
public boolean documentWillBeReset(DocumentAdminEvent e) {
return veto("Sure to load new XMLNote document?",
"Loading document");
}
public void documentHasBeenReset(DocumentAdminEvent e) {
System.out.println("admin: reset");
}
public boolean documentWillBeCleared(DocumentAdminEvent e) {
return veto("Sure to clear the document?",
"Clearing document");
}
public void documentHasBeenCleared(DocumentAdminEvent e) {
System.out.println("admin: clear");
}
public void documentChangedState(DocumentAdminEvent e) {
System.out.println("document changed event");
}
});
_document.addDocumentPostListener(new DocumentListener() {
public void changedUpdate(DocumentEvent arg0) {
System.out.println("post change");
}
public void insertUpdate(DocumentEvent arg0) {
System.out.println("post insert");
}
public void removeUpdate(DocumentEvent arg0) {
System.out.println("post remove");
}
});
_document.addMarkListener(new XMLNoteMarkListener() {
public ChangedMessageWay markAdminBegin() {
return ChangedMessageWay.FOR_CHANGED;
}
public void markAdminEnd() {
}
public boolean markInsert(String id, int offset, int length) {
System.out.println(String.format("markInsert(%s,%d)",
id, offset));
return false;
}
public boolean markRemove(String id) {
System.out.println(String.format("markRemove(%s)", id));
return false;
}
public void markOffsetsChanged(XMLNoteMark m,
Vector<XMLNoteMark> orderedMarks,
int indexInOrderedMarks) {
System.out.println(String.format(
"markOffsetChanged(%s,%d) - %d", m.id(),
m.offset(), indexInOrderedMarks));
}
public boolean markRemoved(XMLNoteMark m,
Vector<XMLNoteMark> orderedMarks) {
System.out.println(String.format("markRemoved(%s)",
m.id()));
return false;
}
public boolean markInserted(XMLNoteMark m,
Vector<XMLNoteMark> orderedMarks,
int indexInOrderedMarks) {
System.out.println(String.format("markInserted(%s,%d)",
m.id(), m.offset()));
return false;
}
public void iteratorOperation(XMLNoteMark m, Object info) {
}
public void markIdChanged(XMLNoteMark m, String previousId) {
}
});
_viewer.pane().addMarkMouseListener(new MarkMouseListener() {
public void markClicked(XMLNoteMark m,MouseEvent e) {
e.consume();
System.out.println("Clicked!id="+m.id());
}
public void markDoubleClicked(XMLNoteMark m,MouseEvent e) {
e.consume();
System.out.println("Double Clicked! id="+m.id());
}
public Cursor mouseMovedIntoMark(XMLNoteMark m,MouseEvent e) {
System.out.println("Mouse in id="+m.id());
return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
}
public void mouseMovedOutOfMark(XMLNoteMark m,MouseEvent e) {
System.out.println("Mouse out id="+m.id());
}
});
_bar.insertSection("io", "&File");
_bar.add("io", "new", _translator
.translate("Clear the document and create a new one"),
this);
_bar.add("io", "save", "Save this document", this);
_bar.add("io", "load", "Load the document from file", this);
_bar.insertSection("mark", "_Mark");
{
URL url=this.getClass().getResource("/nl/dykema/demo/jxmlnote/resources/mark.png");
ImageIcon imark = new ImageIcon(url);
_bar.add("mark", "mark", "mark", this, imark);
}
{
URL url=this.getClass().getResource("/nl/dykema/demo/jxmlnote/resources/unmark.png");
ImageIcon iumark = new ImageIcon(url);
_bar.add("mark", "unmark", "unmark", this, iumark);
}
{
URL url=this.getClass().getResource("/nl/dykema/demo/jxmlnote/resources/style.png");
ImageIcon lighters = new ImageIcon(url);
_bar.add("mark", "lighters", "lighters", this, lighters);
}
{
URL url=this.getClass().getResource("/nl/dykema/demo/jxmlnote/resources/prefs.png");
ImageIcon prefs = new ImageIcon(url);
_bar.add("mark", "prefs", "Style preferences", this, prefs);
}
_bar.initToolBar();
Toolkit kit=Toolkit.getDefaultToolkit();
System.out.println("Screen resolution:"+kit.getScreenResolution());
System.out.println("Screen size:"+kit.getScreenSize());
try {
_document.insertString(_document.getLength(), "\n", null);
XMLNoteImageIconSize size=new XMLNoteImageIconSize(3*72,-1,XMLNoteImageIconSize.TYPE_PT);
URL image=this.getClass().getResource("/nl/dykema/demo/jxmlnote/resources/image.jpg");
_document.insertImage(_document.getLength(),image,"cover",size);
_document.applyAlign(StyleConstants.ALIGN_CENTER, _document.getLength(),1);
_document.insertString(_document.getLength(), "\n", null);
} catch (Exception E) {
E.printStackTrace();
}
_menu=new JMenuBar();
JMenu menu=new JMenu("Test");
menu.add(new JMenuItem(new AbstractAction("Insert URL at caret (paragraph)") {
public void actionPerformed(ActionEvent e) {
EditRun.this.actionPerformed(new ActionEvent(e.getSource(),e.getID(),"loadurl"));
}
}));
menu.add(new JMenuItem(new AbstractAction("Insert URL at caret (!startsWithParagraph)") {
public void actionPerformed(ActionEvent e) {
EditRun.this.actionPerformed(new ActionEvent(e.getSource(),e.getID(),"loadurl1"));
}
}));
menu.add(new JMenuItem(new AbstractAction("Insert URL at caret (!endsWithParagraph)") {
public void actionPerformed(ActionEvent e) {
EditRun.this.actionPerformed(new ActionEvent(e.getSource(),e.getID(),"loadurl2"));
}
}));
menu.add(new JMenuItem(new AbstractAction("Insert URL at caret (!start & !end)") {
public void actionPerformed(ActionEvent e) {
EditRun.this.actionPerformed(new ActionEvent(e.getSource(),e.getID(),"loadurl3"));
}
}));
menu.add(new JMenuItem(new AbstractAction("Load URL as new Document") {
public void actionPerformed(ActionEvent e) {
EditRun.this.actionPerformed(new ActionEvent(e.getSource(),e.getID(),"loadurl4"));
}
}));
menu.add(new JMenuItem(new AbstractAction("Get part of the document") {
public void actionPerformed(ActionEvent e) {
EditRun.this.actionPerformed(new ActionEvent(e.getSource(),e.getID(),"take_part"));
}
}));
menu.add(new JMenuItem(new AbstractAction("To HTML") {
public void actionPerformed(ActionEvent e) {
EditRun.this.actionPerformed(new ActionEvent(e.getSource(),e.getID(),"to_html"));
}
}));
menu.add(new JMenuItem(new AbstractAction("Part to HTML") {
public void actionPerformed(ActionEvent e) {
EditRun.this.actionPerformed(new ActionEvent(e.getSource(),e.getID(),"part_to_html"));
}
}));
menu.add(new JMenuItem(new AbstractAction("Trim document") {
public void actionPerformed(ActionEvent e) {
EditRun.this.actionPerformed(new ActionEvent(e.getSource(),e.getID(),"trim"));
}
}));
menu.add(new JMenuItem(new AbstractAction("Print document") {
public void actionPerformed(ActionEvent e) {
EditRun.this.actionPerformed(new ActionEvent(e.getSource(),e.getID(),"print"));
}
}));
menu.addActionListener(this);
_menu.add(menu);
_frame.setJMenuBar(_menu);
_panel.add(_bar,BorderLayout.NORTH);
// _editor.setPreferredSize(new Dimension(700,700));
_editorPanel.setPreferredSize(new Dimension(550, 600));
_editorPanel.add(_editor);
_editorPanel.add(Box.createRigidArea(new Dimension(0,10)));
_editorPanel.add(_viewer);
_panel.add(_editorPanel);
// _panel.add(_pane);
_frame.add(_panel);
_frame.pack();
_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
_frame.setVisible(true);
}
}
SwingUtilities.invokeLater(new EditRun());
}
}