SideBySide2: Add user preference to hide top menu
The top menu occupies a lot of space. I personally prefer the
version of SideBySide2 that hides the top menu when CM3 has scrolled
down some number of lines. Allow users to hide the top menu as a
preference, gaining back some screen space for code.
Change-Id: Ib30e8875fcc4b87662a5c12fa0bf3cc791d02c95
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/DiffPreferences.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/DiffPreferences.java
index a276d76..8eb9fc1 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/DiffPreferences.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/DiffPreferences.java
@@ -32,6 +32,7 @@
p.showTabs(in.isShowTabs());
p.showWhitespaceErrors(in.isShowWhitespaceErrors());
p.syntaxHighlighting(in.isSyntaxHighlighting());
+ p.hideTopMenu(in.isHideTopMenu());
p.expandAllComments(in.isExpandAllComments());
return p;
}
@@ -45,6 +46,7 @@
p.setShowTabs(showTabs());
p.setShowWhitespaceErrors(showWhitespaceErrors());
p.setSyntaxHighlighting(syntaxHighlighting());
+ p.setHideTopMenu(hideTopMenu());
p.setExpandAllComments(expandAllComments());
}
@@ -60,6 +62,7 @@
public final native void showTabs(boolean s) /*-{ this.show_tabs = s }-*/;
public final native void showWhitespaceErrors(boolean s) /*-{ this.show_whitespace_errors = s }-*/;
public final native void syntaxHighlighting(boolean s) /*-{ this.syntax_highlighting = s }-*/;
+ public final native void hideTopMenu(boolean s) /*-{ this.hide_top_menu = s }-*/;
public final native void expandAllComments(boolean e) /*-{ this.expand_all_comments = e }-*/;
public final Whitespace ignoreWhitespace() {
@@ -75,6 +78,7 @@
public final native boolean showTabs() /*-{ return this.show_tabs }-*/;
public final native boolean showWhitespaceErrors() /*-{ return this.show_whitespace_errors }-*/;
public final native boolean syntaxHighlighting() /*-{ return this.syntax_highlighting }-*/;
+ public final native boolean hideTopMenu() /*-{ return this.hide_top_menu }-*/;
public final native boolean expandAllComments() /*-{ return this.expand_all_comments }-*/;
protected DiffPreferences() {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.java
index 6cf50bf..407108b 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.java
@@ -90,6 +90,7 @@
static DiffTableStyle style;
private SideBySide2 host;
+ private boolean headerVisible;
DiffTable(SideBySide2 host, PatchSet.Id base, PatchSet.Id revision, String path) {
patchSetSelectBoxA = new PatchSetSelectBox2(
@@ -101,10 +102,16 @@
fileCommentPanelB = new FileCommentPanel(host, this, path, DisplaySide.B);
initWidget(uiBinder.createAndBindUi(this));
this.host = host;
+ this.headerVisible = true;
+ }
+
+ boolean isHeaderVisible() {
+ return headerVisible;
}
void setHeaderVisible(boolean show) {
- Gerrit.setHeaderVisible(show);
+ headerVisible = show;
+ Gerrit.setHeaderVisible(show && !host.getPrefs().hideTopMenu());
UIObject.setVisible(patchSetNavRow, show);
UIObject.setVisible(fileCommentRow, show
&& (fileCommentPanelA.getBoxCount() > 0
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.java
index e6bb414..775edc0 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.java
@@ -72,6 +72,7 @@
@UiField ToggleButton syntaxHighlighting;
@UiField ToggleButton whitespaceErrors;
@UiField ToggleButton showTabs;
+ @UiField ToggleButton topMenu;
@UiField ToggleButton expandAllComments;
@UiField Button apply;
@UiField Button save;
@@ -111,6 +112,7 @@
syntaxHighlighting.setValue(prefs.syntaxHighlighting());
whitespaceErrors.setValue(prefs.showWhitespaceErrors());
showTabs.setValue(prefs.showTabs());
+ topMenu.setValue(!prefs.hideTopMenu());
expandAllComments.setValue(prefs.expandAllComments());
switch (view.getIntraLineStatus()) {
@@ -188,6 +190,14 @@
view.setShowTabs(prefs.showTabs());
}
+ @UiHandler("topMenu")
+ void onTopMenu(ValueChangeEvent<Boolean> e) {
+ prefs.hideTopMenu(!e.getValue());
+ Gerrit.setHeaderVisible(view.diffTable.isHeaderVisible()
+ && !prefs.hideTopMenu());
+ view.resizeCodeMirror();
+ }
+
@UiHandler("syntaxHighlighting")
void onSyntaxHighlighting(ValueChangeEvent<Boolean> e) {
prefs.syntaxHighlighting(e.getValue());
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.ui.xml b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.ui.xml
index bd51926..dd2361d 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.ui.xml
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.ui.xml
@@ -194,6 +194,13 @@
</g:ToggleButton></td>
</tr>
<tr>
+ <th><ui:msg>Top Menu</ui:msg></th>
+ <td><g:ToggleButton ui:field='topMenu'>
+ <g:upFace><ui:msg>Hide</ui:msg></g:upFace>
+ <g:downFace><ui:msg>Show</ui:msg></g:downFace>
+ </g:ToggleButton></td>
+ </tr>
+ <tr>
<th><ui:msg>Expand All Comments</ui:msg></th>
<td><g:ToggleButton ui:field='expandAllComments'>
<g:upFace><ui:msg>Collapse</ui:msg></g:upFace>
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/ScrollSynchronizer.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/ScrollSynchronizer.java
index 425878c..8209b80 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/ScrollSynchronizer.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/ScrollSynchronizer.java
@@ -14,7 +14,6 @@
package com.google.gerrit.client.diff;
-import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.diff.LineMapper.LineOnOtherInfo;
import com.google.gwt.user.client.Timer;
@@ -38,10 +37,10 @@
}
private void updateScreenHeader(ScrollInfo si) {
- if (si.getTop() == 0 && !Gerrit.isHeaderVisible()) {
+ if (si.getTop() == 0 && !diffTable.isHeaderVisible()) {
diffTable.setHeaderVisible(true);
} else if (si.getTop() > 0.5 * si.getClientHeight()
- && Gerrit.isHeaderVisible()) {
+ && diffTable.isHeaderVisible()) {
diffTable.setHeaderVisible(false);
}
}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
index 77bdb60..1820489 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
@@ -236,6 +236,9 @@
public void onShowView() {
super.onShowView();
Window.enableScrolling(false);
+ if (prefs.hideTopMenu()) {
+ Gerrit.setHeaderVisible(false);
+ }
final int height = getCodeMirrorHeight();
cmA.setHeight(height);
@@ -1519,6 +1522,10 @@
: null;
}
+ DiffPreferences getPrefs() {
+ return prefs;
+ }
+
CodeMirror getCmA() {
return cmA;
}
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountDiffPreference.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountDiffPreference.java
index afafd46..0988b12 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountDiffPreference.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountDiffPreference.java
@@ -116,6 +116,9 @@
@Column(id = 15)
protected boolean showLineEndings;
+ @Column(id = 16)
+ protected boolean hideTopMenu;
+
protected AccountDiffPreference() {
}
@@ -139,6 +142,7 @@
this.context = p.context;
this.retainHeader = p.retainHeader;
this.manualReview = p.manualReview;
+ this.hideTopMenu = p.hideTopMenu;
}
public Account.Id getAccountId() {
@@ -259,4 +263,12 @@
public void setManualReview(boolean manual) {
manualReview = manual;
}
+
+ public void setHideTopMenu(boolean hide) {
+ hideTopMenu = hide;
+ }
+
+ public boolean isHideTopMenu() {
+ return hideTopMenu;
+ }
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/GetDiffPreferences.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/GetDiffPreferences.java
index 459864a..84fe8f7 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/GetDiffPreferences.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/GetDiffPreferences.java
@@ -66,6 +66,7 @@
info.showWhitespaceErrors = p.isShowWhitespaceErrors() ? true : null;
info.skipDeleted = p.isSkipDeleted() ? true : null;
info.skipUncommented = p.isSkipUncommented() ? true : null;
+ info.hideTopMenu = p.isHideTopMenu() ? true : null;
info.syntaxHighlighting = p.isSyntaxHighlighting() ? true : null;
info.tabSize = p.getTabSize();
return info;
@@ -84,6 +85,7 @@
Boolean skipDeleted;
Boolean skipUncommented;
Boolean syntaxHighlighting;
+ Boolean hideTopMenu;
int tabSize;
}
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/SetDiffPreferences.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/SetDiffPreferences.java
index db9bc2d..08edf2a 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/SetDiffPreferences.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/SetDiffPreferences.java
@@ -44,6 +44,7 @@
Boolean skipDeleted;
Boolean skipUncommented;
Boolean syntaxHighlighting;
+ Boolean hideTopMenu;
Integer tabSize;
}
@@ -116,6 +117,9 @@
if (input.syntaxHighlighting != null) {
p.setSyntaxHighlighting(input.syntaxHighlighting);
}
+ if (input.hideTopMenu != null) {
+ p.setHideTopMenu(input.hideTopMenu);
+ }
if (input.tabSize != null) {
p.setTabSize(input.tabSize);
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java
index f70ccbd..145f22f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java
@@ -32,7 +32,7 @@
/** A version of the database schema. */
public abstract class SchemaVersion {
/** The current schema version. */
- public static final Class<Schema_87> C = Schema_87.class;
+ public static final Class<Schema_88> C = Schema_88.class;
public static class Module extends AbstractModule {
@Override
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_88.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_88.java
new file mode 100644
index 0000000..0a7f14c
--- /dev/null
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_88.java
@@ -0,0 +1,25 @@
+// Copyright (C) 2013 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.server.schema;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class Schema_88 extends SchemaVersion {
+ @Inject
+ Schema_88(Provider<Schema_87> prior) {
+ super(prior);
+ }
+}