From 85f843a6573fdf5c1ba9daa4b9e2eb9cd34d61bf Mon Sep 17 00:00:00 2001 From: David Ostrovsky Date: Thu, 14 May 2015 23:25:06 +0200 Subject: [PATCH] InlineEdit: Make cursor blink rate customizable Codemirror supports out of the box customizability of cursor blink rate. Half-period in milliseconds is used for cursor blinking. The default blink rate in Codemirror is 530ms. Default in inline editor is 0: blinking is disabled. Change-Id: Ie54063f3ba11e98dcebaf727e29b50093258c028 --- Documentation/rest-api-accounts.txt | 5 +++++ .../acceptance/rest/account/EditPreferencesIT.java | 3 +++ .../extensions/client/EditPreferencesInfo.java | 2 ++ .../gerrit/client/account/EditPreferences.java | 4 ++++ .../gerrit/client/editor/EditPreferencesBox.java | 13 +++++++++++++ .../gerrit/client/editor/EditPreferencesBox.ui.xml | 6 ++++++ .../com/google/gerrit/client/editor/EditScreen.java | 2 +- 7 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Documentation/rest-api-accounts.txt b/Documentation/rest-api-accounts.txt index cb17c5da17..26c6fcc0bd 100644 --- a/Documentation/rest-api-accounts.txt +++ b/Documentation/rest-api-accounts.txt @@ -1342,6 +1342,7 @@ link:#edit-preferences-info[EditPreferencesInfo] entity. "key_map_type": "VIM", "tab_size": 4, "line_length": 80, + "cursor_blink_rate": 530, "hide_top_menu": true, "show_whitespace_errors": true, "hide_line_numbers": true @@ -1369,6 +1370,7 @@ link:#edit-preferences-info[EditPreferencesInfo] entity. "key_map_type": "VIM", "tab_size": 4, "line_length": 80, + "cursor_blink_rate": 530, "hide_top_menu": true, "show_tabs": true, "show_whitespace_errors": true, @@ -1766,6 +1768,9 @@ supported: `DEFAULT`, `EMACS`, `VIM`. Number of spaces that should be used to display one tab. |`line_length` || Number of characters that should be displayed per line. +|`cursor_blink_rate` || +Half-period in milliseconds used for cursor blinking. +Setting it to 0 disables cursor blinking. |`hide_top_menu` |not set if `false`| If true the top menu header and site header is hidden. |`show_tabs` |not set if `false`| diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/EditPreferencesIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/EditPreferencesIT.java index d58133c4ac..c225c32b77 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/EditPreferencesIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/EditPreferencesIT.java @@ -37,6 +37,7 @@ public class EditPreferencesIT extends AbstractDaemonTest { assertThat(out.lineLength).isEqualTo(100); assertThat(out.tabSize).isEqualTo(8); + assertThat(out.cursorBlinkRate).isEqualTo(0); assertThat(out.hideTopMenu).isNull(); assertThat(out.showTabs).isTrue(); assertThat(out.showWhitespaceErrors).isNull(); @@ -48,6 +49,7 @@ public class EditPreferencesIT extends AbstractDaemonTest { // change some default values out.lineLength = 80; out.tabSize = 4; + out.cursorBlinkRate = 500; out.hideTopMenu = true; out.showTabs = false; out.showWhitespaceErrors = true; @@ -75,6 +77,7 @@ public class EditPreferencesIT extends AbstractDaemonTest { EditPreferencesInfo in) { assertThat(out.lineLength).isEqualTo(in.lineLength); assertThat(out.tabSize).isEqualTo(in.tabSize); + assertThat(out.cursorBlinkRate).isEqualTo(in.cursorBlinkRate); assertThat(out.hideTopMenu).isEqualTo(in.hideTopMenu); assertThat(out.showTabs).isNull(); assertThat(out.showWhitespaceErrors).isEqualTo(in.showWhitespaceErrors); diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/EditPreferencesInfo.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/EditPreferencesInfo.java index aafd60adc0..74527e38a6 100644 --- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/EditPreferencesInfo.java +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/EditPreferencesInfo.java @@ -18,6 +18,7 @@ package com.google.gerrit.extensions.client; public class EditPreferencesInfo { public Integer tabSize; public Integer lineLength; + public Integer cursorBlinkRate; public Boolean hideTopMenu; public Boolean showTabs; public Boolean showWhitespaceErrors; @@ -30,6 +31,7 @@ public class EditPreferencesInfo { EditPreferencesInfo i = new EditPreferencesInfo(); i.tabSize = 8; i.lineLength = 100; + i.cursorBlinkRate = 0; i.hideTopMenu = false; i.showTabs = true; i.showWhitespaceErrors = false; diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/EditPreferences.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/EditPreferences.java index e2cda8f8ff..9297bff724 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/EditPreferences.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/EditPreferences.java @@ -24,6 +24,7 @@ public class EditPreferences extends JavaScriptObject { EditPreferences p = createObject().cast(); p.tabSize(in.tabSize); p.lineLength(in.lineLength); + p.cursorBlinkRate(in.cursorBlinkRate); p.hideTopMenu(in.hideTopMenu); p.showTabs(in.showTabs); p.showWhitespaceErrors(in.showWhitespaceErrors); @@ -37,6 +38,7 @@ public class EditPreferences extends JavaScriptObject { public final void copyTo(EditPreferencesInfo p) { p.tabSize = tabSize(); p.lineLength = lineLength(); + p.cursorBlinkRate = cursorBlinkRate(); p.hideTopMenu = hideTopMenu(); p.showTabs = showTabs(); p.showWhitespaceErrors = showWhitespaceErrors(); @@ -58,6 +60,7 @@ public class EditPreferences extends JavaScriptObject { public final native void tabSize(int t) /*-{ this.tab_size = t }-*/; public final native void lineLength(int c) /*-{ this.line_length = c }-*/; + public final native void cursorBlinkRate(int r) /*-{ this.cursor_blink_rate = r }-*/; public final native void hideTopMenu(boolean s) /*-{ this.hide_top_menu = s }-*/; public final native void showTabs(boolean s) /*-{ this.show_tabs = s }-*/; public final native void showWhitespaceErrors(boolean s) /*-{ this.show_whitespace_errors = s }-*/; @@ -78,6 +81,7 @@ public class EditPreferences extends JavaScriptObject { public final int tabSize() {return get("tab_size", 8); } public final int lineLength() {return get("line_length", 100); } + public final int cursorBlinkRate() {return get("cursor_blink_rate", 0); } public final native boolean hideTopMenu() /*-{ return this.hide_top_menu || false }-*/; public final native boolean showTabs() /*-{ return this.show_tabs || false }-*/; public final native boolean showWhitespaceErrors() /*-{ return this.show_whitespace_errors || false }-*/; diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.java index 62b226a710..5fd39d23f3 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.java @@ -56,6 +56,7 @@ class EditPreferencesBox extends Composite { @UiField Anchor close; @UiField NpIntTextBox tabWidth; @UiField NpIntTextBox lineLength; + @UiField NpIntTextBox cursorBlinkRate; @UiField ToggleButton topMenu; @UiField ToggleButton syntaxHighlighting; @UiField ToggleButton showTabs; @@ -78,6 +79,7 @@ class EditPreferencesBox extends Composite { tabWidth.setIntValue(prefs.tabSize()); lineLength.setIntValue(prefs.lineLength()); + cursorBlinkRate.setIntValue(prefs.cursorBlinkRate()); topMenu.setValue(!prefs.hideTopMenu()); syntaxHighlighting.setValue(prefs.syntaxHighlighting()); showTabs.setValue(prefs.showTabs()); @@ -105,6 +107,17 @@ class EditPreferencesBox extends Composite { } } + @UiHandler("cursorBlinkRate") + void onCursoBlinkRate(ValueChangeEvent e) { + String v = e.getValue(); + if (v != null && v.length() > 0) { + // A negative value hides the cursor entirely: + // don't let user shoot himself in the foot. + prefs.cursorBlinkRate(Math.max(0, Integer.parseInt(v))); + view.getEditor().setOption("cursorBlinkRate", prefs.cursorBlinkRate()); + } + } + @UiHandler("topMenu") void onTopMenu(ValueChangeEvent e) { prefs.hideTopMenu(!e.getValue()); diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.ui.xml b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.ui.xml index 0b610b200c..0ae8374a6a 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.ui.xml +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.ui.xml @@ -181,6 +181,12 @@ limitations under the License. visibleLength='4' alignment='RIGHT'/> + + Cursor Blink Rate + + Top Menu diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditScreen.java index 7526d4e634..f99261c1c2 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditScreen.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditScreen.java @@ -441,7 +441,7 @@ public class EditScreen extends Screen { cm = CodeMirror.create(editor, Configuration.create() .set("value", content) .set("readOnly", false) - .set("cursorBlinkRate", 0) + .set("cursorBlinkRate", prefs.cursorBlinkRate()) .set("cursorHeight", 0.85) .set("lineNumbers", prefs.hideLineNumbers()) .set("tabSize", prefs.tabSize())