mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-10 17:22:09 +10:00
added worker thread
This commit is contained in:
@@ -11,5 +11,5 @@
|
|||||||
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;Library&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;DIYLC&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;default/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.default"/> </sourceContainers> </sourceLookupDirector> "/>
|
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;Library&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;DIYLC&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;default/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.default"/> </sourceContainers> </sourceLookupDirector> "/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.diylc.DIYLCStarter"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.diylc.DIYLCStarter"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="DIYLC"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="DIYLC"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms64m -Xmx256m"/>
|
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms256m -Xmx512m"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package org.diylc.common;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract layer between the app and platform worker thread implementation.
|
||||||
|
*
|
||||||
|
* @author Branislav Stojkovic
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
*/
|
||||||
|
public interface ITask<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runs in background thread.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
T doInBackground() throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called if background thread fails.
|
||||||
|
*
|
||||||
|
* @param e
|
||||||
|
*/
|
||||||
|
void failed(Exception e);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called if background thread is executed correctly, the result is passed
|
||||||
|
* as a parameter.
|
||||||
|
*
|
||||||
|
* @param result
|
||||||
|
*/
|
||||||
|
void complete(T result);
|
||||||
|
}
|
||||||
+5
-1
@@ -7,13 +7,15 @@ import javax.swing.SwingConstants;
|
|||||||
import javax.swing.JPopupMenu.Separator;
|
import javax.swing.JPopupMenu.Separator;
|
||||||
|
|
||||||
import org.diylc.common.BadPositionException;
|
import org.diylc.common.BadPositionException;
|
||||||
|
import org.diylc.common.ITask;
|
||||||
|
import org.diylc.core.IView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface for plugin access to the swing front end.
|
* Interface for plugin access to the swing front end.
|
||||||
*
|
*
|
||||||
* @author Branislav Stojkovic
|
* @author Branislav Stojkovic
|
||||||
*/
|
*/
|
||||||
public interface ISwingUI {
|
public interface ISwingUI extends IView {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injects a custom GUI panels provided by the plug-in and desired position
|
* Injects a custom GUI panels provided by the plug-in and desired position
|
||||||
@@ -57,4 +59,6 @@ public interface ISwingUI {
|
|||||||
* @param parentMenuName
|
* @param parentMenuName
|
||||||
*/
|
*/
|
||||||
void injectSubmenu(String name, Icon icon, String parentMenuName);
|
void injectSubmenu(String name, Icon icon, String parentMenuName);
|
||||||
|
|
||||||
|
<T extends Object> void executeBackgroundTask(ITask<T> task);
|
||||||
}
|
}
|
||||||
|
|||||||
+30
-1
@@ -2,6 +2,7 @@ package org.diylc.swing.gui;
|
|||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Container;
|
import java.awt.Container;
|
||||||
|
import java.awt.Cursor;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
@@ -11,6 +12,7 @@ import java.util.Arrays;
|
|||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
import javax.swing.Action;
|
import javax.swing.Action;
|
||||||
import javax.swing.BoxLayout;
|
import javax.swing.BoxLayout;
|
||||||
@@ -23,6 +25,7 @@ import javax.swing.JMenuBar;
|
|||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.SwingConstants;
|
import javax.swing.SwingConstants;
|
||||||
|
import javax.swing.SwingWorker;
|
||||||
import javax.swing.Timer;
|
import javax.swing.Timer;
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
@@ -30,6 +33,7 @@ import org.diylc.common.BadPositionException;
|
|||||||
import org.diylc.common.EventType;
|
import org.diylc.common.EventType;
|
||||||
import org.diylc.common.IPlugIn;
|
import org.diylc.common.IPlugIn;
|
||||||
import org.diylc.common.IPlugInPort;
|
import org.diylc.common.IPlugInPort;
|
||||||
|
import org.diylc.common.ITask;
|
||||||
import org.diylc.core.IView;
|
import org.diylc.core.IView;
|
||||||
import org.diylc.images.IconLoader;
|
import org.diylc.images.IconLoader;
|
||||||
import org.diylc.presenter.Presenter;
|
import org.diylc.presenter.Presenter;
|
||||||
@@ -42,7 +46,7 @@ import org.diylc.swing.plugins.layers.LayersMenuPlugin;
|
|||||||
import org.diylc.swing.plugins.statusbar.StatusBar;
|
import org.diylc.swing.plugins.statusbar.StatusBar;
|
||||||
import org.diylc.swing.plugins.toolbox.ToolBox;
|
import org.diylc.swing.plugins.toolbox.ToolBox;
|
||||||
|
|
||||||
public class MainFrame extends JFrame implements IView, ISwingUI {
|
public class MainFrame extends JFrame implements ISwingUI {
|
||||||
|
|
||||||
private static final Logger LOG = Logger.getLogger(MainFrame.class);
|
private static final Logger LOG = Logger.getLogger(MainFrame.class);
|
||||||
|
|
||||||
@@ -248,6 +252,31 @@ public class MainFrame extends JFrame implements IView, ISwingUI {
|
|||||||
menuMap.put(name, submenu);
|
menuMap.put(name, submenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends Object> void executeBackgroundTask(final ITask<T> task) {
|
||||||
|
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
|
SwingWorker<T, Void> worker = new SwingWorker<T, Void>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected T doInBackground() throws Exception {
|
||||||
|
return task.doInBackground();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void done() {
|
||||||
|
try {
|
||||||
|
T result = get();
|
||||||
|
task.complete(result);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error("Task failed", e);
|
||||||
|
task.failed(e);
|
||||||
|
}
|
||||||
|
setCursor(Cursor.getDefaultCursor());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
worker.execute();
|
||||||
|
}
|
||||||
|
|
||||||
class FramePlugin implements IPlugIn {
|
class FramePlugin implements IPlugIn {
|
||||||
|
|
||||||
private IPlugInPort plugInPort;
|
private IPlugInPort plugInPort;
|
||||||
|
|||||||
+121
-23
@@ -3,7 +3,6 @@ package org.diylc.swing.plugins.file;
|
|||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.print.PrinterException;
|
import java.awt.print.PrinterException;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -13,9 +12,9 @@ import org.apache.log4j.Logger;
|
|||||||
import org.diylc.common.EventType;
|
import org.diylc.common.EventType;
|
||||||
import org.diylc.common.IPlugIn;
|
import org.diylc.common.IPlugIn;
|
||||||
import org.diylc.common.IPlugInPort;
|
import org.diylc.common.IPlugInPort;
|
||||||
|
import org.diylc.common.ITask;
|
||||||
import org.diylc.common.PropertyWrapper;
|
import org.diylc.common.PropertyWrapper;
|
||||||
import org.diylc.images.IconLoader;
|
import org.diylc.images.IconLoader;
|
||||||
import org.diylc.presenter.Presenter;
|
|
||||||
import org.diylc.swing.ISwingUI;
|
import org.diylc.swing.ISwingUI;
|
||||||
import org.diylc.swing.gui.DialogFactory;
|
import org.diylc.swing.gui.DialogFactory;
|
||||||
import org.diylc.swing.gui.editor.PropertyEditorDialog;
|
import org.diylc.swing.gui.editor.PropertyEditorDialog;
|
||||||
@@ -23,7 +22,6 @@ import org.diylc.swing.gui.editor.PropertyEditorDialog;
|
|||||||
import com.diyfever.gui.ButtonDialog;
|
import com.diyfever.gui.ButtonDialog;
|
||||||
import com.diyfever.gui.IDrawingProvider;
|
import com.diyfever.gui.IDrawingProvider;
|
||||||
import com.diyfever.gui.export.DrawingExporter;
|
import com.diyfever.gui.export.DrawingExporter;
|
||||||
import com.lowagie.text.DocumentException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Entry point class for File management utilities.
|
* Entry point class for File management utilities.
|
||||||
@@ -121,11 +119,29 @@ public class FileMenuPlugin implements IPlugIn {
|
|||||||
if (!plugInPort.allowFileAction()) {
|
if (!plugInPort.allowFileAction()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
File file = DialogFactory.getInstance().showOpenDialog(FileFilterEnum.DIY.getFilter(),
|
final File file = DialogFactory.getInstance().showOpenDialog(
|
||||||
null, FileFilterEnum.DIY.getExtensions()[0], null);
|
FileFilterEnum.DIY.getFilter(), null, FileFilterEnum.DIY.getExtensions()[0],
|
||||||
|
null);
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
|
swingUI.executeBackgroundTask(new ITask<Void>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void doInBackground() throws Exception {
|
||||||
LOG.debug("Opening from " + file.getAbsolutePath());
|
LOG.debug("Opening from " + file.getAbsolutePath());
|
||||||
plugInPort.loadProjectFromFile(file.getAbsolutePath());
|
plugInPort.loadProjectFromFile(file.getAbsolutePath());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void complete(Void result) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void failed(Exception e) {
|
||||||
|
swingUI.showMessage("Could not open file. " + e.getMessage(), "Error",
|
||||||
|
ISwingUI.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -144,16 +160,50 @@ public class FileMenuPlugin implements IPlugIn {
|
|||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
LOG.info("SaveAction triggered");
|
LOG.info("SaveAction triggered");
|
||||||
if (plugInPort.getCurrentFileName() == null) {
|
if (plugInPort.getCurrentFileName() == null) {
|
||||||
File file = DialogFactory.getInstance().showSaveDialog(
|
final File file = DialogFactory.getInstance().showSaveDialog(
|
||||||
FileFilterEnum.DIY.getFilter(), null,
|
FileFilterEnum.DIY.getFilter(), null,
|
||||||
FileFilterEnum.DIY.getExtensions()[0], null);
|
FileFilterEnum.DIY.getExtensions()[0], null);
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
|
swingUI.executeBackgroundTask(new ITask<Void>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void doInBackground() throws Exception {
|
||||||
LOG.debug("Saving to " + file.getAbsolutePath());
|
LOG.debug("Saving to " + file.getAbsolutePath());
|
||||||
plugInPort.saveProjectToFile(file.getAbsolutePath());
|
plugInPort.saveProjectToFile(file.getAbsolutePath());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void complete(Void result) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void failed(Exception e) {
|
||||||
|
swingUI.showMessage("Could not save to file. " + e.getMessage(),
|
||||||
|
"Error", ISwingUI.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG.debug("Exporting to " + plugInPort.getCurrentFileName());
|
swingUI.executeBackgroundTask(new ITask<Void>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void doInBackground() throws Exception {
|
||||||
|
LOG.debug("Saving to " + plugInPort.getCurrentFileName());
|
||||||
plugInPort.saveProjectToFile(plugInPort.getCurrentFileName());
|
plugInPort.saveProjectToFile(plugInPort.getCurrentFileName());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void complete(Void result) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void failed(Exception e) {
|
||||||
|
swingUI.showMessage("Could not save to file. " + e.getMessage(), "Error",
|
||||||
|
ISwingUI.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -171,11 +221,29 @@ public class FileMenuPlugin implements IPlugIn {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
LOG.info("SaveAsAction triggered");
|
LOG.info("SaveAsAction triggered");
|
||||||
File file = DialogFactory.getInstance().showSaveDialog(FileFilterEnum.DIY.getFilter(),
|
final File file = DialogFactory.getInstance().showSaveDialog(
|
||||||
null, FileFilterEnum.DIY.getExtensions()[0], null);
|
FileFilterEnum.DIY.getFilter(), null, FileFilterEnum.DIY.getExtensions()[0],
|
||||||
|
null);
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
LOG.debug("Save to " + file.getAbsolutePath());
|
swingUI.executeBackgroundTask(new ITask<Void>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void doInBackground() throws Exception {
|
||||||
|
LOG.debug("Saving to " + file.getAbsolutePath());
|
||||||
plugInPort.saveProjectToFile(file.getAbsolutePath());
|
plugInPort.saveProjectToFile(file.getAbsolutePath());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void complete(Void result) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void failed(Exception e) {
|
||||||
|
swingUI.showMessage("Could not save to file. " + e.getMessage(), "Error",
|
||||||
|
ISwingUI.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -216,19 +284,30 @@ public class FileMenuPlugin implements IPlugIn {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
LOG.info("ExportPDFAction triggered");
|
LOG.info("ExportPDFAction triggered");
|
||||||
File file = DialogFactory.getInstance().showSaveDialog(FileFilterEnum.PDF.getFilter(),
|
final File file = DialogFactory.getInstance().showSaveDialog(
|
||||||
null, FileFilterEnum.PDF.getExtensions()[0], null);
|
FileFilterEnum.PDF.getFilter(), null, FileFilterEnum.PDF.getExtensions()[0],
|
||||||
|
null);
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
try {
|
swingUI.executeBackgroundTask(new ITask<Void>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void doInBackground() throws Exception {
|
||||||
LOG.debug("Exporting to " + file.getAbsolutePath());
|
LOG.debug("Exporting to " + file.getAbsolutePath());
|
||||||
DrawingExporter.getInstance().exportPDF(this.drawingProvider, file);
|
DrawingExporter.getInstance().exportPDF(
|
||||||
} catch (FileNotFoundException e1) {
|
ExportPDFAction.this.drawingProvider, file);
|
||||||
// TODO Auto-generated catch block
|
return null;
|
||||||
e1.printStackTrace();
|
|
||||||
} catch (DocumentException e1) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e1.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void complete(Void result) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void failed(Exception e) {
|
||||||
|
swingUI.showMessage("Could not export to PDF. " + e.getMessage(), "Error",
|
||||||
|
ISwingUI.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -249,11 +328,30 @@ public class FileMenuPlugin implements IPlugIn {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
LOG.info("ExportPNGAction triggered");
|
LOG.info("ExportPNGAction triggered");
|
||||||
File file = DialogFactory.getInstance().showSaveDialog(FileFilterEnum.PNG.getFilter(),
|
final File file = DialogFactory.getInstance().showSaveDialog(
|
||||||
null, FileFilterEnum.PNG.getExtensions()[0], null);
|
FileFilterEnum.PNG.getFilter(), null, FileFilterEnum.PNG.getExtensions()[0],
|
||||||
|
null);
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
|
swingUI.executeBackgroundTask(new ITask<Void>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void doInBackground() throws Exception {
|
||||||
LOG.debug("Exporting to " + file.getAbsolutePath());
|
LOG.debug("Exporting to " + file.getAbsolutePath());
|
||||||
DrawingExporter.getInstance().exportPNG(this.drawingProvider, file);
|
DrawingExporter.getInstance().exportPNG(
|
||||||
|
ExportPNGAction.this.drawingProvider, file);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void complete(Void result) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void failed(Exception e) {
|
||||||
|
swingUI.showMessage("Could not export to PNG. " + e.getMessage(), "Error",
|
||||||
|
ISwingUI.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user