kopia lustrzana https://github.com/maccasoft/z80-tools
Imlemented busy indicator and reload open tabs feature
rodzic
ba982cf0b3
commit
b0ca689ed2
|
@ -78,6 +78,7 @@ import org.eclipse.swt.widgets.Shell;
|
|||
import org.eclipse.swt.widgets.ToolBar;
|
||||
import org.eclipse.swt.widgets.ToolItem;
|
||||
|
||||
import com.maccasoft.tools.internal.BusyIndicator;
|
||||
import com.maccasoft.tools.internal.ImageRegistry;
|
||||
|
||||
import jssc.SerialPort;
|
||||
|
@ -151,11 +152,12 @@ public class Application {
|
|||
};
|
||||
|
||||
public Application() {
|
||||
preferences = Preferences.getInstance();
|
||||
|
||||
}
|
||||
|
||||
public void open() {
|
||||
display = Display.getDefault();
|
||||
preferences = Preferences.getInstance();
|
||||
|
||||
shell = new Shell(display);
|
||||
shell.setText(APP_TITLE);
|
||||
|
@ -226,6 +228,21 @@ public class Application {
|
|||
}
|
||||
try {
|
||||
preferences.removePropertyChangeListener(preferencesChangeListner);
|
||||
|
||||
List<String> openTabs = new ArrayList<String>();
|
||||
for (int i = 0; i < tabFolder.getItemCount(); i++) {
|
||||
SourceEditorTab tab = (SourceEditorTab) tabFolder.getItem(i).getData();
|
||||
if (tab.getFile() != null) {
|
||||
openTabs.add(tab.getFile().getAbsolutePath());
|
||||
}
|
||||
}
|
||||
preferences.setOpenTabs(openTabs.toArray(new String[openTabs.size()]));
|
||||
|
||||
if (tabFolder.getSelection() != null) {
|
||||
SourceEditorTab tab = (SourceEditorTab) tabFolder.getSelection().getData();
|
||||
preferences.setSelectedTab(tab.getFile().getAbsolutePath());
|
||||
}
|
||||
|
||||
preferences.save();
|
||||
} catch (IOException e1) {
|
||||
e1.printStackTrace();
|
||||
|
@ -233,6 +250,78 @@ public class Application {
|
|||
ImageRegistry.dispose();
|
||||
}
|
||||
});
|
||||
|
||||
BusyIndicator.showWhile(display, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
String line;
|
||||
|
||||
final String[] openTabs = preferences.getOpenTabs();
|
||||
if (openTabs == null || openTabs.length == 0 || !preferences.isReloadOpenTabs()) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < openTabs.length; i++) {
|
||||
File file = new File(openTabs[i]);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
try {
|
||||
if (!file.exists() || file.isDirectory()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
BufferedReader reader = new BufferedReader(new FileReader(file));
|
||||
while ((line = reader.readLine()) != null) {
|
||||
sb.append(line);
|
||||
sb.append("\n");
|
||||
}
|
||||
reader.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
display.asyncExec(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
SourceEditorTab tab = new SourceEditorTab(tabFolder, sb.toString());
|
||||
tab.setText(file.getName());
|
||||
tab.setToolTipText(file.getAbsolutePath());
|
||||
tab.setFile(file);
|
||||
tab.getEditor().setShowLineNumbers(preferences.isShowLineNumbers());
|
||||
tab.getEditor().setFont(preferences.getEditorFont());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
display.asyncExec(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (tabFolder.getItemCount() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
SourceEditorTab tab = (SourceEditorTab) tabFolder.getItem(0).getData();
|
||||
|
||||
String s = preferences.getSelectedTab();
|
||||
if (s != null) {
|
||||
File selectedFile = new File(s);
|
||||
for (int i = 0; i < tabFolder.getItemCount(); i++) {
|
||||
SourceEditorTab editorTab = (SourceEditorTab) tabFolder.getItem(i).getData();
|
||||
if (selectedFile.equals(editorTab.getFile())) {
|
||||
tab = editorTab;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tabFolder.setSelection(tab.getTabItem());
|
||||
tab.setFocus();
|
||||
}
|
||||
});
|
||||
}
|
||||
}, true);
|
||||
}
|
||||
|
||||
void createFileMenu(Menu parent) {
|
||||
|
@ -415,11 +504,9 @@ public class Application {
|
|||
preferences.removeLru(fileToOpen);
|
||||
return;
|
||||
}
|
||||
SourceEditorTab tab = openSourceTab(fileToOpen);
|
||||
tabFolder.setSelection(tab.getTabItem());
|
||||
tab.setFocus();
|
||||
openSourceTab(fileToOpen);
|
||||
preferences.addLru(fileToOpen);
|
||||
} catch (IOException e1) {
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
@ -959,9 +1046,7 @@ public class Application {
|
|||
if (file.isDirectory()) {
|
||||
return;
|
||||
}
|
||||
SourceEditorTab tab = openSourceTab(file);
|
||||
tabFolder.setSelection(tab.getTabItem());
|
||||
tab.setFocus();
|
||||
openSourceTab(file);
|
||||
preferences.addLru(file);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
@ -1041,37 +1126,52 @@ public class Application {
|
|||
if (fileName != null) {
|
||||
File file = new File(fileName);
|
||||
try {
|
||||
SourceEditorTab tab = openSourceTab(file);
|
||||
tabFolder.setSelection(tab.getTabItem());
|
||||
tab.setFocus();
|
||||
} catch (IOException e) {
|
||||
openSourceTab(file);
|
||||
preferences.addLru(file);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
preferences.addLru(file);
|
||||
}
|
||||
}
|
||||
|
||||
SourceEditorTab openSourceTab(File file) throws IOException {
|
||||
String line;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
void openSourceTab(File file) {
|
||||
BusyIndicator.showWhile(display, new Runnable() {
|
||||
|
||||
if (file.exists()) {
|
||||
BufferedReader reader = new BufferedReader(new FileReader(file));
|
||||
while ((line = reader.readLine()) != null) {
|
||||
sb.append(line);
|
||||
sb.append("\n");
|
||||
@Override
|
||||
public void run() {
|
||||
String line;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if (file.exists()) {
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader(new FileReader(file));
|
||||
while ((line = reader.readLine()) != null) {
|
||||
sb.append(line);
|
||||
sb.append("\n");
|
||||
}
|
||||
reader.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
display.asyncExec(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
SourceEditorTab tab = new SourceEditorTab(tabFolder, sb.toString());
|
||||
tab.setText(file.getName());
|
||||
tab.setToolTipText(file.getAbsolutePath());
|
||||
tab.setFile(file);
|
||||
tab.getEditor().setShowLineNumbers(preferences.isShowLineNumbers());
|
||||
tab.getEditor().setFont(preferences.getEditorFont());
|
||||
|
||||
tabFolder.setSelection(tab.getTabItem());
|
||||
tab.setFocus();
|
||||
}
|
||||
});
|
||||
}
|
||||
reader.close();
|
||||
}
|
||||
|
||||
SourceEditorTab tab = new SourceEditorTab(tabFolder, sb.toString());
|
||||
tab.setText(file.getName());
|
||||
tab.setToolTipText(file.getAbsolutePath());
|
||||
tab.setFile(file);
|
||||
tab.getEditor().setShowLineNumbers(preferences.isShowLineNumbers());
|
||||
tab.getEditor().setFont(preferences.getEditorFont());
|
||||
|
||||
return tab;
|
||||
}, true);
|
||||
}
|
||||
|
||||
private void handleFileSave() throws IOException {
|
||||
|
|
|
@ -58,6 +58,9 @@ public class Preferences {
|
|||
|
||||
String editorFont;
|
||||
boolean showLineNumbers;
|
||||
boolean reloadOpenTabs;
|
||||
String[] openTabs;
|
||||
String selectedTab;
|
||||
|
||||
boolean generateBinary;
|
||||
boolean generateHex;
|
||||
|
@ -72,6 +75,7 @@ public class Preferences {
|
|||
|
||||
Preferences() {
|
||||
showLineNumbers = true;
|
||||
reloadOpenTabs = true;
|
||||
|
||||
generateHex = true;
|
||||
generateListing = true;
|
||||
|
@ -131,6 +135,30 @@ public class Preferences {
|
|||
changeSupport.firePropertyChange(PROP_SHOW_LINE_NUMBERS, this.showLineNumbers, this.showLineNumbers = showLineNumbers);
|
||||
}
|
||||
|
||||
public boolean isReloadOpenTabs() {
|
||||
return reloadOpenTabs;
|
||||
}
|
||||
|
||||
public void setReloadOpenTabs(boolean reloadOpenTabs) {
|
||||
this.reloadOpenTabs = reloadOpenTabs;
|
||||
}
|
||||
|
||||
public String[] getOpenTabs() {
|
||||
return openTabs;
|
||||
}
|
||||
|
||||
public void setOpenTabs(String[] openTabs) {
|
||||
this.openTabs = openTabs;
|
||||
}
|
||||
|
||||
public String getSelectedTab() {
|
||||
return selectedTab;
|
||||
}
|
||||
|
||||
public void setSelectedTab(String selectedTab) {
|
||||
this.selectedTab = selectedTab;
|
||||
}
|
||||
|
||||
public boolean isGenerateBinary() {
|
||||
return generateBinary;
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@ public class PreferencesDialog extends Dialog {
|
|||
Text editorFont;
|
||||
Button editorFontBrowse;
|
||||
Button showLineNumbers;
|
||||
Button reloadOpenTabs;
|
||||
|
||||
Button generateBinary;
|
||||
Button generateHex;
|
||||
|
@ -123,6 +124,12 @@ public class PreferencesDialog extends Dialog {
|
|||
showLineNumbers.setText("Show line numbers");
|
||||
showLineNumbers.setSelection(preferences.isShowLineNumbers());
|
||||
|
||||
new Label(composite, SWT.NONE);
|
||||
|
||||
reloadOpenTabs = new Button(composite, SWT.CHECK);
|
||||
reloadOpenTabs.setText("Reload open tabs");
|
||||
reloadOpenTabs.setSelection(preferences.isReloadOpenTabs());
|
||||
|
||||
addSeparator(composite);
|
||||
|
||||
label = new Label(composite, SWT.NONE);
|
||||
|
@ -282,6 +289,7 @@ public class PreferencesDialog extends Dialog {
|
|||
|
||||
preferences.setEditorFont(editorFont.getText().equals(defaultFont) ? null : editorFont.getText());
|
||||
preferences.setShowLineNumbers(showLineNumbers.getSelection());
|
||||
preferences.setReloadOpenTabs(reloadOpenTabs.getSelection());
|
||||
|
||||
preferences.setGenerateBinary(generateBinary.getSelection());
|
||||
preferences.setGenerateHex(generateHex.getSelection());
|
||||
|
|
|
@ -585,7 +585,6 @@ public class SourceEditor {
|
|||
currentLine = 0;
|
||||
this.text.setText(text);
|
||||
this.text.setLineBackground(currentLine, 1, currentLineBackground);
|
||||
tokenMarker.refreshMultilineComments(text);
|
||||
|
||||
undoStack = new Stack<TextChange>();
|
||||
redoStack = new Stack<TextChange>();
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
* Copyright (c) 2018 Marco Maccaferri and others.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program and the accompanying materials are made available under
|
||||
* the terms of the Eclipse Public License v1.0 which accompanies this
|
||||
* distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*/
|
||||
|
||||
package com.maccasoft.tools.internal;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.graphics.Cursor;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
public class BusyIndicator {
|
||||
|
||||
static int nextBusyId = 1;
|
||||
static final String BUSYID_NAME = "SWT BusyIndicator"; //$NON-NLS-1$
|
||||
static final String BUSY_CURSOR = "SWT BusyIndicator Cursor"; //$NON-NLS-1$
|
||||
|
||||
public static void showWhile(Display display, Runnable runnable) {
|
||||
showWhile(display, runnable, false);
|
||||
}
|
||||
|
||||
public static void showWhile(Display display, Runnable runnable, boolean fork) {
|
||||
if (runnable == null) {
|
||||
SWT.error(SWT.ERROR_NULL_ARGUMENT);
|
||||
}
|
||||
if (display == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Integer busyId = new Integer(nextBusyId);
|
||||
nextBusyId++;
|
||||
|
||||
Cursor cursor = display.getSystemCursor(SWT.CURSOR_WAIT);
|
||||
|
||||
Shell[] shells = display.getShells();
|
||||
for (int i = 0; i < shells.length; i++) {
|
||||
Integer id = (Integer) shells[i].getData(BUSYID_NAME);
|
||||
if (id == null) {
|
||||
shells[i].setCursor(cursor);
|
||||
shells[i].setData(BUSYID_NAME, busyId);
|
||||
}
|
||||
}
|
||||
|
||||
Runnable busyRunnable = new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
runnable.run();
|
||||
} finally {
|
||||
display.syncExec(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Shell[] shells = display.getShells();
|
||||
for (int i = 0; i < shells.length; i++) {
|
||||
Integer id = (Integer) shells[i].getData(BUSYID_NAME);
|
||||
if (id == busyId) {
|
||||
shells[i].setCursor(null);
|
||||
shells[i].setData(BUSYID_NAME, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
if (fork) {
|
||||
new Thread(busyRunnable).start();
|
||||
}
|
||||
else {
|
||||
busyRunnable.run();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Ładowanie…
Reference in New Issue