import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
+import java.util.Collection;
+import java.util.HashSet;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.EditorPart;
+import org.eclipse.ui.themes.ITheme;
+import org.eclipse.ui.themes.IThemeManager;
import net.mograsim.machine.MainMemory;
import net.mograsim.machine.MainMemoryDefinition;
private MemoryTableContentProvider provider;
private DisplaySettings displaySettings;
+ private Collection<Control> fontDependent = new HashSet<>();
+
private boolean dirty;
private final MemoryCellModifiedListener memListener;
+ private final static String font = "net.mograsim.plugin.memory.table_font";
+ private IPropertyChangeListener fontChangeListener;
+
public MemoryEditor()
{
memListener = this::cellModified;
Text amountText = new Text(parent, SWT.BORDER);
amountText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
amountText.addVerifyListener(vl);
- amountText.setText("0");
amountText.addModifyListener(e ->
{
try
{
- provider.setAmount(AsmNumberUtil.valueOf(amountText.getText()).intValue());
- viewer.refresh();
+ if (provider != null)
+ provider.setAmount(AsmNumberUtil.valueOf(amountText.getText()).intValue());
+ if (viewer != null)
+ viewer.refresh();
}
catch (NumberFormatException x)
{
// Nothing to do here
}
});
+ amountText.setText("100");// do this after registering the ModifyListener
new RadixSelector(parent, displaySettings);
addActivationButton(parent);
private void createViewer(Composite parent)
{
viewer = new LazyTableViewer(parent, SWT.FULL_SELECTION | SWT.BORDER | SWT.VIRTUAL);
+ fontDependent.add(viewer.getTable());
createColumns();
Table table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
viewer.setUseHashlookup(true);
viewer.setContentProvider(provider);
- getSite().setSelectionProvider(viewer);// TODO what does this?
+ getSite().setSelectionProvider(viewer);// TODO what does this do?
viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 7, 1));
+
+ IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager();
+ themeManager.addPropertyChangeListener(fontChangeListener = (e) ->
+ {
+ if (IThemeManager.CHANGE_CURRENT_THEME.equals(e.getProperty()) || font.equals(e.getProperty()))
+ {
+ updateFont(themeManager.getCurrentTheme());
+ viewer.refresh();
+ }
+ });
+ updateFont(themeManager.getCurrentTheme());
+
if (memory != null)
viewer.setInput(memory);
}
+ private void updateFont(ITheme theme)
+ {
+ Font newFont = theme.getFontRegistry().get(font);
+ // TODO: This is a quick fix! Still have to figure out why the CellEditors do not get the appropriate Font on their own
+ fontDependent.forEach(c -> c.setFont(newFont));
+ }
+
private void createColumns()
{
TableViewerColumn addrCol = createTableViewerColumn("Address", 100);
return ((MemoryTableRow) element).getMemory().getDefinition().getCellWidth();
}
});
- dataCol.setEditingSupport(new MemoryCellEditingSupport(viewer, displaySettings));
+ MemoryCellEditingSupport eSup;
+ dataCol.setEditingSupport(eSup = new MemoryCellEditingSupport(viewer, displaySettings));
+ fontDependent.add(eSup.getCellEditorControl());
}
private TableViewerColumn createTableViewerColumn(String title, int width)
@Override
public void dispose()
{
+ getSite().getWorkbenchWindow().getWorkbench().getThemeManager().removePropertyChangeListener(fontChangeListener);
if (memory != null)
memory.deregisterCellModifiedListener(memListener);
super.dispose();