+ new option - setSmartScrollToEnd: scrollToEnd work only if last scroll state is was "end"
1.1 --- a/src/main/java/org/vaadin/console/Console.java Thu May 19 00:52:44 2011 +0400
1.2 +++ b/src/main/java/org/vaadin/console/Console.java Fri May 20 17:52:09 2011 +0400
1.3 @@ -42,7 +42,8 @@
1.4 private static final int DEFAULT_COLS = -1;
1.5 private static final int DEFAULT_ROWS = -1;
1.6 private static final boolean DEFAULT_WRAP = true;
1.7 - private static final boolean DEFAULT_PRINT_PROMPT_ON_INPUT= true;
1.8 + private static final boolean DEFAULT_PRINT_PROMPT_ON_INPUT = true;
1.9 + private static final boolean DEFAULT_SMART_SCROLL_TO_END = false;
1.10 private static final int MAX_COLS = 500;
1.11 private static final int MAX_ROWS = 200;
1.12
1.13 @@ -54,15 +55,24 @@
1.14 config.wrap = wrap;
1.15 client.call("setWrap", wrap);
1.16 }
1.17 -
1.18 - public boolean isPrintPromptOnInput(){
1.19 - return config.isPrintPromptOnInput;
1.20 - }
1.21 -
1.22 - public void setPrintPromptOnInput(final boolean isPrintPromptOnInput){
1.23 - config.isPrintPromptOnInput = isPrintPromptOnInput;
1.24 - client.call("setPrintPromptOnInput", isPrintPromptOnInput);
1.25 - }
1.26 +
1.27 + public boolean isPrintPromptOnInput() {
1.28 + return config.isPrintPromptOnInput;
1.29 + }
1.30 +
1.31 + public void setPrintPromptOnInput(final boolean isPrintPromptOnInput) {
1.32 + config.isPrintPromptOnInput = isPrintPromptOnInput;
1.33 + client.call("setPrintPromptOnInput", isPrintPromptOnInput);
1.34 + }
1.35 +
1.36 + public boolean isSmartScrollToEnd() {
1.37 + return config.isSmartScrollToEnd;
1.38 + }
1.39 +
1.40 + public void setSmartScrollToEnd(final boolean isSmartScrollToEnd) {
1.41 + config.isSmartScrollToEnd = isSmartScrollToEnd;
1.42 + client.call("setSmartScrollToEnd", isSmartScrollToEnd);
1.43 + }
1.44
1.45 private final ServerSideProxy client = new ServerSideProxy(
1.46 new ClientCallback());
1.47 @@ -80,9 +90,16 @@
1.48 }
1.49
1.50 public Object[] initRequestFromClient() {
1.51 - return new Object[] { config.cols, config.rows,
1.52 - config.maxBufferSize, config.wrap, config.isPrintPromptOnInput, config.greeting,
1.53 - config.ps };
1.54 + return new Object[] {
1.55 + config.cols,
1.56 + config.rows,
1.57 + config.maxBufferSize,
1.58 + config.wrap,
1.59 + config.isPrintPromptOnInput,
1.60 + config.isSmartScrollToEnd,
1.61 + config.greeting,
1.62 + config.ps
1.63 + };
1.64 }
1.65
1.66 public void callFromClient(String method, Object[] params) {
1.67 @@ -116,6 +133,7 @@
1.68 int rows = DEFAULT_ROWS;
1.69 boolean wrap = DEFAULT_WRAP;
1.70 boolean isPrintPromptOnInput = DEFAULT_PRINT_PROMPT_ON_INPUT;
1.71 + boolean isSmartScrollToEnd = DEFAULT_SMART_SCROLL_TO_END;
1.72 String ps = DEFAULT_PS;
1.73 String greeting = DEFAULT_GREETING;
1.74
2.1 --- a/src/main/java/org/vaadin/console/client/ui/TextConsole.java Thu May 19 00:52:44 2011 +0400
2.2 +++ b/src/main/java/org/vaadin/console/client/ui/TextConsole.java Fri May 20 17:52:09 2011 +0400
2.3 @@ -446,6 +446,7 @@
2.4
2.5 public void newLine() {
2.6 // _log("newline");
2.7 + beforeChangeTerminal();
2.8 buffer.appendChild(createBr());
2.9 checkBufferLimit();
2.10 reducePrompt(1);
2.11 @@ -454,6 +455,7 @@
2.12 public void newLineIfNotEndsWithNewLine() {
2.13 if (!bufferIsEmpty() && !bufferEndsWithNewLine()) {
2.14 // _log("newline");
2.15 + beforeChangeTerminal();
2.16 buffer.appendChild(createBr());
2.17 checkBufferLimit();
2.18 reducePrompt(1);
2.19 @@ -479,16 +481,31 @@
2.20 scrollToEnd();
2.21 ps.setInnerHTML(cleanPs);
2.22 }
2.23 +
2.24 + private boolean isCheckedScrollState = false;
2.25
2.26 - public void scrollToEnd() {
2.27 - term.setScrollTop(BIG_NUMBER);
2.28 - }
2.29 + public void scrollToEnd() {
2.30 + if (config.isSmartScrollToEnd()) {
2.31 + if (config.isScrolledToEnd())
2.32 + term.setScrollTop(BIG_NUMBER);
2.33 + } else
2.34 + term.setScrollTop(BIG_NUMBER);
2.35 + isCheckedScrollState = false;
2.36 + }
2.37 +
2.38 + private void beforeChangeTerminal(){
2.39 + if(!isCheckedScrollState){
2.40 + config.setScrolledToEnd(term.getScrollTop() >= term.getScrollHeight() - term.getClientHeight());
2.41 + isCheckedScrollState = true;
2.42 + }
2.43 + }
2.44
2.45 public void prompt() {
2.46 prompt(null);
2.47 }
2.48
2.49 public void print(String string) {
2.50 + beforeChangeTerminal();
2.51 if (isPromptActive()) {
2.52 setPromtActive(false);
2.53 if (!bufferIsEmpty() && !bufferEndsWithNewLine()) {
2.54 @@ -531,6 +548,7 @@
2.55 }
2.56
2.57 public void print(String string, String className) {
2.58 + beforeChangeTerminal();
2.59 if (isPromptActive()) {
2.60 setPromtActive(false);
2.61 if (!bufferIsEmpty() && !bufferEndsWithNewLine()) {
2.62 @@ -566,6 +584,7 @@
2.63 }
2.64
2.65 public void append(String string) {
2.66 + beforeChangeTerminal();
2.67 final boolean doWrap = config.isWrap();
2.68 // _log("print original: '" + string + "' (" + doWrap + ")");
2.69 String str = string.replaceAll("\t", tabs);
2.70 @@ -599,6 +618,7 @@
2.71 }
2.72
2.73 public void append(String string, String className) {
2.74 + beforeChangeTerminal();
2.75 final boolean doWrap = config.isWrap();
2.76 // _log("print original: '" + string + "' (" + doWrap + ")");
2.77 String str = string.replaceAll("\t", tabs);
2.78 @@ -817,6 +837,7 @@
2.79 }
2.80
2.81 public void reset() {
2.82 + beforeChangeTerminal();
2.83 setPromtActive(false);
2.84 clearBuffer();
2.85 setPromptHeight(getRows());
3.1 --- a/src/main/java/org/vaadin/console/client/ui/TextConsoleConfig.java Thu May 19 00:52:44 2011 +0400
3.2 +++ b/src/main/java/org/vaadin/console/client/ui/TextConsoleConfig.java Fri May 20 17:52:09 2011 +0400
3.3 @@ -50,6 +50,22 @@
3.4 public final native boolean isPrintPromptOnInput() /*-{
3.5 return this.PrintPromptOnInput;
3.6 }-*/;
3.7 +
3.8 + public final native void setSmartScrollToEnd(boolean s) /*-{
3.9 + this.isSmartScrollToEnd = s;
3.10 + }-*/;
3.11 +
3.12 + public final native boolean isSmartScrollToEnd() /*-{
3.13 + return this.isSmartScrollToEnd;
3.14 + }-*/;
3.15 +
3.16 + public final native void setScrolledToEnd(boolean s) /*-{
3.17 + this.isScrolledToEnd = s;
3.18 + }-*/;
3.19 +
3.20 + public final native boolean isScrolledToEnd() /*-{
3.21 + return this.isScrolledToEnd;
3.22 + }-*/;
3.23
3.24 public final native void setPs(String ps) /*-{
3.25 this.ps = ps;
4.1 --- a/src/main/java/org/vaadin/console/client/ui/VTextConsole.java Thu May 19 00:52:44 2011 +0400
4.2 +++ b/src/main/java/org/vaadin/console/client/ui/VTextConsole.java Fri May 20 17:52:09 2011 +0400
4.3 @@ -155,11 +155,16 @@
4.4 clearCommandHistory();
4.5 }
4.6 });
4.7 - comm.register("setPrintPromptOnInput", new Method() {
4.8 - public void invoke(final String methodName, final Object[] data) {
4.9 - getConfig().setPrintPromptOnInput((Boolean) data[0]);
4.10 - }
4.11 - });
4.12 + comm.register("setPrintPromptOnInput", new Method() {
4.13 + public void invoke(final String methodName, final Object[] data) {
4.14 + getConfig().setPrintPromptOnInput((Boolean) data[0]);
4.15 + }
4.16 + });
4.17 + comm.register("setSmartScrollToEnd", new Method() {
4.18 + public void invoke(final String methodName, final Object[] data) {
4.19 + getConfig().setSmartScrollToEnd((Boolean) data[0]);
4.20 + }
4.21 + });
4.22 }
4.23
4.24 /**
4.25 @@ -260,10 +265,12 @@
4.26 cfg.setMaxBufferSize((Integer) params[i++]);
4.27 cfg.setWrap((Boolean) params[i++]);
4.28 cfg.setPrintPromptOnInput((Boolean) params[i++]);
4.29 + cfg.setSmartScrollToEnd((Boolean) params[i++]);
4.30 cfg.setGreeting((String) params[i++]);
4.31 cfg.setPs((String) params[i++]);
4.32 comm.d("init: '" + cfg.getGreeting() + "';" + cfg.getCols() + "x"
4.33 + cfg.getRows() + "");
4.34 + cfg.setScrolledToEnd(true);
4.35 setConfig(cfg);
4.36
4.37 reset();