import java.util.Arrays;
import java.util.Optional;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPathEditorInput;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.EditorPart;
import net.mograsim.machine.Machine;
+import net.mograsim.machine.MemoryObserver;
import net.mograsim.machine.mi.MicroInstructionDefinition;
import net.mograsim.machine.mi.MicroInstructionMemory;
import net.mograsim.machine.mi.MicroInstructionMemoryParseException;
import net.mograsim.plugin.util.DropDownMenu;
import net.mograsim.plugin.util.DropDownMenu.DropDownEntry;
-public class InstructionView extends ViewPart implements ContextObserver
+public class InstructionView extends EditorPart implements ContextObserver, MemoryObserver
{
private String saveLoc = null;
private LazyTableViewer viewer;
private DisplaySettings displaySettings;
private InstructionTableContentProvider provider;
private int highlighted = 0;
+ private boolean dirty = false;
@SuppressWarnings("unused")
@Override
this.memory = memory;
viewer.setInput(memory);
this.miDef = memory.getDefinition().getMicroInstructionDefinition();
+ this.memory.registerObserver(this);
createColumns();
}
if (memory == null)
{
System.err.println("Failed to write MicroprogrammingMemory to File. No MicroprogrammingMemory assigned.");
+ return;
}
- if (saveLoc != null)
+ try
{
- try
- {
- MicroInstructionMemoryParser.write(memory, file);
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
+ MicroInstructionMemoryParser.write(memory, file);
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
}
}
bindMicroInstructionMemory(actualMachine.getMicroInstructionMemory());
}
}
+
+ @Override
+ public void doSave(IProgressMonitor progressMonitor)
+ {
+ IEditorInput input = getEditorInput();
+ if (input instanceof IPathEditorInput)
+ {
+ IPathEditorInput pathInput = (IPathEditorInput) input;
+ save(pathInput.getPath().toOSString());
+ dirty = false;
+ firePropertyChange(PROP_DIRTY);
+ }
+ }
+
+ @Override
+ public void doSaveAs()
+ {
+ // not allowed
+ }
+
+ @Override
+ public void init(IEditorSite site, IEditorInput input) throws PartInitException
+ {
+ setSite(site);
+ setInput(input);
+ if (input instanceof IPathEditorInput)
+ {
+ IPathEditorInput pathInput = (IPathEditorInput) input;
+ open(pathInput.getPath().toOSString());
+ }
+ }
+
+ @Override
+ public boolean isDirty()
+ {
+ return dirty;
+ }
+
+ @Override
+ public boolean isSaveAsAllowed()
+ {
+ return false;
+ }
+
+ @Override
+ public void update(long address)
+ {
+ dirty = true;
+ firePropertyChange(PROP_DIRTY);
+ }
}