Update to gclc-2.0.1
Signed-off-by: Emmanuel Bigeon <emmanuel@bigeon.fr>
This commit is contained in:
parent
d2cd059c01
commit
206df88506
@ -1,4 +1,35 @@
|
||||
|
||||
<!-- GCLC swt, provide a swt window for console applications -->
|
||||
<!-- Copyright (C) 2015-2017 E. Bigeon -->
|
||||
<!-- mailto:emmanuel@bigeon.fr -->
|
||||
<!-- -->
|
||||
<!-- This software is governed by the CeCILL license under French law and -->
|
||||
<!-- abiding by the rules of distribution of free software. You can use, -->
|
||||
<!-- modify and/or redistribute the software under the terms of the CeCILL -->
|
||||
<!-- license as circulated by CEA, CNRS and INRIA at the following URL -->
|
||||
<!-- "http://www.cecill.info". -->
|
||||
<!-- -->
|
||||
<!-- As a counterpart to the access to the source code and rights to copy, -->
|
||||
<!-- modify and redistribute granted by the license, users are provided only -->
|
||||
<!-- with a limited warranty and the software's author, the holder of the -->
|
||||
<!-- economic rights, and the successive licensors have only limited -->
|
||||
<!-- liability. -->
|
||||
<!-- -->
|
||||
<!-- In this respect, the user's attention is drawn to the risks associated -->
|
||||
<!-- with loading, using, modifying and/or developing or reproducing the -->
|
||||
<!-- software by the user in light of its specific status of free software, -->
|
||||
<!-- that may mean that it is complicated to manipulate, and that also -->
|
||||
<!-- therefore means that it is reserved for developers and experienced -->
|
||||
<!-- professionals having in-depth computer knowledge. Users are therefore -->
|
||||
<!-- encouraged to load and test the software's suitability as regards their -->
|
||||
<!-- requirements in conditions enabling the security of their systems and/or -->
|
||||
<!-- data to be ensured and, more generally, to use and operate it in the -->
|
||||
<!-- same conditions as regards security. -->
|
||||
<!-- -->
|
||||
<!-- The fact that you are presently reading this means that you have had -->
|
||||
<!-- knowledge of the CeCILL license and that you accept its terms. -->
|
||||
|
||||
|
||||
<!-- Copyright E. Bigeon (2015) -->
|
||||
<!-- -->
|
||||
<!-- emmanuel@bigeon.fr -->
|
||||
@ -51,7 +82,7 @@
|
||||
<dependency>
|
||||
<groupId>fr.bigeon</groupId>
|
||||
<artifactId>gclc</artifactId>
|
||||
<version>2.0.0</version>
|
||||
<version>2.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>fr.bigeon</groupId>
|
||||
|
@ -1,10 +1,7 @@
|
||||
/*
|
||||
* Copyright E. Bigeon (2015)
|
||||
*
|
||||
* emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is a computer program whose purpose is to
|
||||
* provide a swt window for console applications.
|
||||
* GCLC swt, provide a swt window for console applications
|
||||
* Copyright (C) 2015-2017 E. Bigeon
|
||||
* mailto:emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is governed by the CeCILL license under French law and
|
||||
* abiding by the rules of distribution of free software. You can use,
|
||||
@ -46,12 +43,15 @@ package fr.bigeon.gclc.swt;
|
||||
*
|
||||
* @author Emmanuel Bigeon */
|
||||
public interface ConsoleDelayIO {
|
||||
/** Actually send the input as the prompt next input. */
|
||||
void validateInput();
|
||||
/** Get the input text.
|
||||
* @return the non validated input */
|
||||
String getInput();
|
||||
|
||||
/** @param input the input to set */
|
||||
/** Set the input text.
|
||||
*
|
||||
* @param input the input to set */
|
||||
void setInput(String input);
|
||||
|
||||
/** @return the non validated input */
|
||||
String getInput();
|
||||
/** Actually send the input as the prompt next input. */
|
||||
void validateInput();
|
||||
}
|
||||
|
@ -1,10 +1,7 @@
|
||||
/*
|
||||
* Copyright E. Bigeon (2015)
|
||||
*
|
||||
* emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is a computer program whose purpose is to
|
||||
* provide a swt window for console applications.
|
||||
* GCLC swt, provide a swt window for console applications
|
||||
* Copyright (C) 2015-2017 E. Bigeon
|
||||
* mailto:emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is governed by the CeCILL license under French law and
|
||||
* abiding by the rules of distribution of free software. You can use,
|
||||
@ -45,40 +42,46 @@ import org.eclipse.swt.events.KeyEvent;
|
||||
import fr.bigeon.collections.ArrayRibbon;
|
||||
import fr.bigeon.collections.Ribbon;
|
||||
|
||||
/** A key listener to validate commands and manage the history of commands
|
||||
/** A key listener to validate commands and manage the history of commands.
|
||||
*
|
||||
* @author Emmanuel Bigeon */
|
||||
public final class HistoryTextKeyListener extends KeyAdapter {
|
||||
|
||||
/** The size of commands history */
|
||||
/** The size of commands history. */
|
||||
private static final int DEFAULT_HISTORY_SIZE = 10;
|
||||
/** The empty string constant */
|
||||
/** The empty string constant. */
|
||||
private static final String EMPTY = ""; //$NON-NLS-1$
|
||||
/** The history ribbon */
|
||||
/** The history ribbon. */
|
||||
private final Ribbon<String> commands;
|
||||
/** The current index in history search */
|
||||
/** The current index in history search. */
|
||||
private int currentIndex = 0;
|
||||
/** The console to notify of command validation */
|
||||
/** The console to notify of command validation. */
|
||||
private final ConsoleDelayIO console;
|
||||
|
||||
/** @param console the console delayed */
|
||||
public HistoryTextKeyListener(ConsoleDelayIO console) {
|
||||
/** Create the key listener that cycle the history.
|
||||
*
|
||||
* @param console the console delayed */
|
||||
public HistoryTextKeyListener(final ConsoleDelayIO console) {
|
||||
super();
|
||||
this.console = console;
|
||||
this.commands = new ArrayRibbon<>(DEFAULT_HISTORY_SIZE);
|
||||
commands = new ArrayRibbon<>(DEFAULT_HISTORY_SIZE);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.swt.events.KeyAdapter#keyPressed(org.eclipse.swt.events.
|
||||
* KeyEvent) */
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
|
||||
public void keyPressed(final KeyEvent e) {
|
||||
pressedKeyCode(e.keyCode);
|
||||
}
|
||||
|
||||
/** @param keyCode the pressed key code */
|
||||
public void pressedKeyCode(int keyCode) {
|
||||
/** Indicate a pressed key combination.
|
||||
*
|
||||
* @param keyCode the pressed key code */
|
||||
public void pressedKeyCode(final int keyCode) {
|
||||
// Enter validates the command if prompting
|
||||
if (keyCode == '\r') {
|
||||
String input = console.getInput();
|
||||
final String input = console.getInput();
|
||||
if (!input.isEmpty()) {
|
||||
commands.add(input);
|
||||
}
|
||||
@ -90,7 +93,7 @@ public final class HistoryTextKeyListener extends KeyAdapter {
|
||||
if (keyCode == SWT.ARROW_UP &&
|
||||
currentIndex < commands.size() - 1) {
|
||||
currentIndex++;
|
||||
String cmd = commands.get(commands.size() - currentIndex - 1);
|
||||
final String cmd = commands.get(commands.size() - currentIndex - 1);
|
||||
console.setInput(cmd);
|
||||
}
|
||||
|
||||
@ -100,7 +103,7 @@ public final class HistoryTextKeyListener extends KeyAdapter {
|
||||
currentIndex--;
|
||||
console.setInput(EMPTY);
|
||||
} else if (currentIndex > 0) {
|
||||
String cmd = commands
|
||||
final String cmd = commands
|
||||
.get(commands.size() - (--currentIndex) - 1);
|
||||
console.setInput(cmd);
|
||||
}
|
||||
|
@ -1,10 +1,7 @@
|
||||
/*
|
||||
* Copyright E. Bigeon (2015)
|
||||
*
|
||||
* emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is a computer program whose purpose is to
|
||||
* provide a swt window for console applications.
|
||||
* GCLC swt, provide a swt window for console applications
|
||||
* Copyright (C) 2015-2017 E. Bigeon
|
||||
* mailto:emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is governed by the CeCILL license under French law and
|
||||
* abiding by the rules of distribution of free software. You can use,
|
||||
@ -54,36 +51,34 @@ import fr.bigeon.gclc.ConsoleApplication;
|
||||
import fr.bigeon.gclc.manager.ConsoleInput;
|
||||
import fr.bigeon.gclc.manager.ConsoleOutput;
|
||||
|
||||
/** A SWT component to connect to gclc {@link ConsoleApplication}
|
||||
/** A SWT component to connect to gclc {@link ConsoleApplication}.
|
||||
* <p>
|
||||
*
|
||||
* @author Emmanuel Bigeon */
|
||||
public class SWTConsole extends Composite
|
||||
public final class SWTConsole extends Composite
|
||||
implements ConsoleDelayIO, ConsoleInput, ConsoleOutput {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
/** The number of columns of the layout. */
|
||||
private static final int LAYOUT_NB_COLUMNS = 2;
|
||||
/** The cmd prefix in the output console */
|
||||
/** The cmd prefix in the output console. */
|
||||
private static final String CMD_PREFIX = "[CMD] "; //$NON-NLS-1$
|
||||
/** The class logger */
|
||||
/** The class logger. */
|
||||
private static final Logger LOGGER = Logger
|
||||
.getLogger(SWTConsole.class.getName());
|
||||
/** The empty string constant */
|
||||
/** The empty string constant. */
|
||||
private static final String EMPTY = ""; //$NON-NLS-1$
|
||||
/** The console output text field */
|
||||
/** The console output text field. */
|
||||
private final Text consoleOutput;
|
||||
/** The console input text field */
|
||||
/** The console input text field. */
|
||||
private final Text consoleInput;
|
||||
/** The prompt label */
|
||||
/** The prompt label. */
|
||||
private final Label lblPromptlabel;
|
||||
/** The prompt text */
|
||||
/** The prompt text. */
|
||||
private String prompt = ">"; //$NON-NLS-1$
|
||||
/** The command entered by the user */
|
||||
/** The command entered by the user. */
|
||||
private String command = null;
|
||||
/** If the prompt should be active */
|
||||
/** If the prompt should be active. */
|
||||
private boolean prompting = false;
|
||||
/** The object for thread synchronization with the prompt */
|
||||
/** The object for thread synchronization with the prompt. */
|
||||
private final Object promptLock = new Object();
|
||||
|
||||
/** Create the composite.
|
||||
@ -121,7 +116,7 @@ public class SWTConsole extends Composite
|
||||
@Override
|
||||
public void close() {
|
||||
synchronized (promptLock) {
|
||||
promptLock.notify();
|
||||
promptLock.notifyAll();
|
||||
}
|
||||
if (consoleInput.isDisposed()) {
|
||||
return;
|
||||
@ -149,7 +144,7 @@ public class SWTConsole extends Composite
|
||||
@Override
|
||||
public void interruptPrompt() {
|
||||
synchronized (promptLock) {
|
||||
promptLock.notify();
|
||||
promptLock.notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
@ -232,6 +227,7 @@ public class SWTConsole extends Composite
|
||||
LOGGER.log(Level.WARNING,
|
||||
"Error in synchronization of prompting", e); //$NON-NLS-1$
|
||||
command = null;
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
if (isDisposed()) {
|
||||
@ -281,6 +277,7 @@ public class SWTConsole extends Composite
|
||||
LOGGER.log(Level.WARNING,
|
||||
"Error in synchronization of prompting", e); //$NON-NLS-1$
|
||||
command = null;
|
||||
Thread.currentThread().interrupt();
|
||||
} finally {
|
||||
Display.getDefault().syncExec(new Runnable() {
|
||||
@SuppressWarnings("synthetic-access")
|
||||
|
@ -1,10 +1,7 @@
|
||||
/*
|
||||
* Copyright E. Bigeon (2015)
|
||||
*
|
||||
* emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is a computer program whose purpose is to
|
||||
* provide a swt window for console applications.
|
||||
* GCLC swt, provide a swt window for console applications
|
||||
* Copyright (C) 2015-2017 E. Bigeon
|
||||
* mailto:emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is governed by the CeCILL license under French law and
|
||||
* abiding by the rules of distribution of free software. You can use,
|
||||
@ -47,7 +44,7 @@ import org.eclipse.swt.widgets.Shell;
|
||||
* <p>
|
||||
*
|
||||
* @author Emmanuel Bigeon */
|
||||
public class SWTConsoleShell extends Shell {
|
||||
public final class SWTConsoleShell extends Shell {
|
||||
|
||||
/** The console component */
|
||||
private SWTConsole console;
|
||||
|
@ -1,10 +1,7 @@
|
||||
/*
|
||||
* Copyright E. Bigeon (2015)
|
||||
*
|
||||
* emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is a computer program whose purpose is to
|
||||
* provide a swt window for console applications.
|
||||
* GCLC swt, provide a swt window for console applications
|
||||
* Copyright (C) 2015-2017 E. Bigeon
|
||||
* mailto:emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is governed by the CeCILL license under French law and
|
||||
* abiding by the rules of distribution of free software. You can use,
|
||||
@ -58,7 +55,7 @@ import fr.bigeon.gclc.tools.AOutputForwardRunnable;
|
||||
* <p>
|
||||
*
|
||||
* @author Emmanuel Bigeon */
|
||||
public class SWTConsoleView extends Composite implements ConsoleDelayIO {
|
||||
public final class SWTConsoleView extends Composite implements ConsoleDelayIO {
|
||||
/** The local implementation of the forwarding runnable
|
||||
*
|
||||
* @author Emmanuel Bigeon */
|
||||
@ -95,8 +92,7 @@ public class SWTConsoleView extends Composite implements ConsoleDelayIO {
|
||||
private final Text consoleOutput;
|
||||
/** The console input text field */
|
||||
private final Text consoleInput;
|
||||
/** The actual manager */
|
||||
private PipedConsoleOutput manager;
|
||||
/** The input. */
|
||||
private PipedConsoleInput input;
|
||||
/** The forwarding runnable */
|
||||
private ToSWTConsoleForwardRunnable forward;
|
||||
@ -160,10 +156,12 @@ public class SWTConsoleView extends Composite implements ConsoleDelayIO {
|
||||
consoleInput.setSelection(input.length());
|
||||
}
|
||||
|
||||
/** @param manager the manager to set */
|
||||
/** Set the input and output.
|
||||
*
|
||||
* @param manager the output to set
|
||||
* @param input the input */
|
||||
public void setManager(final PipedConsoleOutput manager,
|
||||
final PipedConsoleInput input) {
|
||||
this.manager = manager;
|
||||
this.input = input;
|
||||
if (forward != null) {
|
||||
forward.setRunning(false);
|
||||
|
39
gclc-swt/src/main/java/fr/bigeon/gclc/swt/package-info.java
Normal file
39
gclc-swt/src/main/java/fr/bigeon/gclc/swt/package-info.java
Normal file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* GCLC swt, provide a swt window for console applications
|
||||
* Copyright (C) 2015-2017 E. Bigeon
|
||||
* mailto:emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is governed by the CeCILL license under French law and
|
||||
* abiding by the rules of distribution of free software. You can use,
|
||||
* modify and/or redistribute the software under the terms of the CeCILL
|
||||
* license as circulated by CEA, CNRS and INRIA at the following URL
|
||||
* "http://www.cecill.info".
|
||||
*
|
||||
* As a counterpart to the access to the source code and rights to copy,
|
||||
* modify and redistribute granted by the license, users are provided only
|
||||
* with a limited warranty and the software's author, the holder of the
|
||||
* economic rights, and the successive licensors have only limited
|
||||
* liability.
|
||||
*
|
||||
* In this respect, the user's attention is drawn to the risks associated
|
||||
* with loading, using, modifying and/or developing or reproducing the
|
||||
* software by the user in light of its specific status of free software,
|
||||
* that may mean that it is complicated to manipulate, and that also
|
||||
* therefore means that it is reserved for developers and experienced
|
||||
* professionals having in-depth computer knowledge. Users are therefore
|
||||
* encouraged to load and test the software's suitability as regards their
|
||||
* requirements in conditions enabling the security of their systems and/or
|
||||
* data to be ensured and, more generally, to use and operate it in the
|
||||
* same conditions as regards security.
|
||||
*
|
||||
* The fact that you are presently reading this means that you have had
|
||||
* knowledge of the CeCILL license and that you accept its terms.
|
||||
*/
|
||||
/**
|
||||
* gclc-swt:fr.bigeon.gclc.swt.package-info.java
|
||||
* Created on: Nov 18, 2017
|
||||
*/
|
||||
/** SWT components for a frontend of GCLC applications.
|
||||
*
|
||||
* @author Emmanuel Bigeon */
|
||||
package fr.bigeon.gclc.swt;
|
@ -1,10 +1,7 @@
|
||||
/*
|
||||
* Copyright E. Bigeon (2015)
|
||||
*
|
||||
* emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is a computer program whose purpose is to
|
||||
* provide a swt window for console applications.
|
||||
* GCLC swt, provide a swt window for console applications
|
||||
* Copyright (C) 2015-2017 E. Bigeon
|
||||
* mailto:emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is governed by the CeCILL license under French law and
|
||||
* abiding by the rules of distribution of free software. You can use,
|
||||
|
@ -1,10 +1,7 @@
|
||||
/*
|
||||
* Copyright E. Bigeon (2015)
|
||||
*
|
||||
* emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is a computer program whose purpose is to
|
||||
* provide a swt window for console applications.
|
||||
* GCLC swt, provide a swt window for console applications
|
||||
* Copyright (C) 2015-2017 E. Bigeon
|
||||
* mailto:emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is governed by the CeCILL license under French law and
|
||||
* abiding by the rules of distribution of free software. You can use,
|
||||
|
@ -1,10 +1,7 @@
|
||||
/*
|
||||
* Copyright E. Bigeon (2015)
|
||||
*
|
||||
* emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is a computer program whose purpose is to
|
||||
* provide a swt window for console applications.
|
||||
* GCLC swt, provide a swt window for console applications
|
||||
* Copyright (C) 2015-2017 E. Bigeon
|
||||
* mailto:emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is governed by the CeCILL license under French law and
|
||||
* abiding by the rules of distribution of free software. You can use,
|
||||
@ -72,13 +69,13 @@ public class SWTConsoleViewTest {
|
||||
final Shell shell = new Shell(DISPLAY);
|
||||
final SWTConsoleView swtConsole = new SWTConsoleView(shell, SWT.NONE);
|
||||
try (PipedConsoleOutput manager = new PipedConsoleOutput();
|
||||
PipedConsoleInput input = new PipedConsoleInput()) {
|
||||
PipedConsoleInput input = new PipedConsoleInput(System.out)) {
|
||||
swtConsole.setManager(manager, input);
|
||||
} catch (final IOException e2) {
|
||||
assertNull(e2);
|
||||
}
|
||||
try (PipedConsoleOutput manager = new PipedConsoleOutput();
|
||||
PipedConsoleInput input = new PipedConsoleInput()) {
|
||||
PipedConsoleInput input = new PipedConsoleInput(System.out)) {
|
||||
swtConsole.setManager(manager, input);
|
||||
final ConsoleApplication appl = new ConsoleApplication(manager,
|
||||
input,
|
||||
|
Loading…
Reference in New Issue
Block a user