+ new option - setSmartScrollToEnd: scrollToEnd work only if last scroll state is was "end"
authorindvdum
Fri, 20 May 2011 17:52:09 +0400
changeset 9dbc3bbf10535
parent 8 1f4c68061547
child 10 1f81f87f3283
+ new option - setSmartScrollToEnd: scrollToEnd work only if last scroll state is was "end"
src/main/java/org/vaadin/console/Console.java
src/main/java/org/vaadin/console/client/ui/TextConsole.java
src/main/java/org/vaadin/console/client/ui/TextConsoleConfig.java
src/main/java/org/vaadin/console/client/ui/VTextConsole.java
     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();