Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7158e52

Browse files
committed
Use numeric text box for page jumping
1 parent f93cd6b commit 7158e52

File tree

6 files changed

+91
-19
lines changed

6 files changed

+91
-19
lines changed

src/gwt/src/org/rstudio/core/client/widget/NumericTextBox.java

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
package org.rstudio.core.client.widget;
1414

1515
import com.google.gwt.dom.client.Element;
16-
import com.google.gwt.event.dom.client.KeyPressEvent;
17-
import com.google.gwt.event.dom.client.KeyPressHandler;
16+
import com.google.gwt.event.dom.client.*;
1817
import com.google.gwt.user.client.ui.TextBox;
18+
import org.rstudio.core.client.command.KeyboardShortcut;
1919

2020
public class NumericTextBox extends TextBox
2121
{
@@ -33,6 +33,42 @@ protected NumericTextBox(Element element)
3333

3434
private void init()
3535
{
36+
addFocusHandler(new FocusHandler()
37+
{
38+
@Override
39+
public void onFocus(FocusEvent event)
40+
{
41+
selectAll();
42+
}
43+
});
44+
45+
addKeyDownHandler(new KeyDownHandler()
46+
{
47+
@Override
48+
public void onKeyDown(KeyDownEvent event)
49+
{
50+
int modifiers = KeyboardShortcut.getModifierValue(event.getNativeEvent());
51+
if (modifiers == KeyboardShortcut.NONE
52+
&& (event.isUpArrow() || event.isDownArrow()))
53+
{
54+
event.preventDefault();
55+
event.stopPropagation();
56+
57+
try
58+
{
59+
int value = Integer.parseInt(getText());
60+
value += event.isUpArrow() ? 1 : -1;
61+
setValue(value + "", true);
62+
selectAll();
63+
}
64+
catch (NumberFormatException nfe)
65+
{
66+
// just ignore
67+
}
68+
}
69+
}
70+
});
71+
3672
addKeyPressHandler(new KeyPressHandler()
3773
{
3874
@Override

src/gwt/src/org/rstudio/studio/client/pdfviewer/PDFViewerPresenter.java

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.google.gwt.user.client.Window;
2121
import com.google.gwt.user.client.Window.ClosingEvent;
2222
import com.google.gwt.user.client.Window.ClosingHandler;
23+
import com.google.gwt.user.client.ui.HasValue;
2324
import com.google.gwt.user.client.ui.IsWidget;
2425
import com.google.gwt.user.client.ui.Widget;
2526
import com.google.inject.Inject;
@@ -123,13 +124,34 @@ public void onClick(ClickEvent event)
123124
view_.toggleThumbnails();
124125
}
125126
});
126-
view_.getToolbarDisplay().getPageNumber().addValueChangeHandler(new ValueChangeHandler<Integer>()
127+
128+
final HasValue<String> pageNumber =
129+
view_.getToolbarDisplay().getPageNumber();
130+
pageNumber.addValueChangeHandler(new ValueChangeHandler<String>()
127131
{
128132
@Override
129-
public void onValueChange(ValueChangeEvent<Integer> event)
133+
public void onValueChange(ValueChangeEvent<String> event)
130134
{
131-
if (event.getValue() != null)
132-
PDFView.goToPage(event.getValue());
135+
String value = pageNumber.getValue();
136+
try
137+
{
138+
int intVal = Integer.parseInt(value);
139+
if (intVal != PDFView.currentPage()
140+
&& intVal >= 1 && intVal <= PDFView.pageCount())
141+
{
142+
PDFView.goToPage(intVal);
143+
view_.getToolbarDisplay().selectPageNumber();
144+
return;
145+
}
146+
}
147+
catch (NullPointerException ignored)
148+
{
149+
}
150+
catch (NumberFormatException ignored)
151+
{
152+
}
153+
154+
pageNumber.setValue(PDFView.currentPage() + "", false);
133155
}
134156
});
135157
view_.getToolbarDisplay().getZoomIn().addClickHandler(new ClickHandler()
@@ -169,8 +191,8 @@ public void onPDFLoad(PDFLoadEvent event)
169191

170192
private void updatePageNumber()
171193
{
172-
view_.getToolbarDisplay().getPageNumber().setValue(PDFView.currentPage(),
173-
false);
194+
view_.getToolbarDisplay().getPageNumber().setValue(
195+
PDFView.currentPage() + "", false);
174196
}
175197

176198
public void onActivated(PDFViewerParams pdfParams)

src/gwt/src/org/rstudio/studio/client/pdfviewer/ui/PDFViewerPanel.ui.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,7 @@
3434

3535
<div class="separator"></div>
3636

37-
<!--
3837
<input type="number" id="pageNumber" onchange="PDFView.page = this.value;" value="1" size="4" min="1" />
39-
-->
4038

4139
<span>/</span>
4240
<span id="numPages">--</span>

src/gwt/src/org/rstudio/studio/client/pdfviewer/ui/PDFViewerToolbar.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@
1717
import com.google.gwt.event.dom.client.*;
1818
import com.google.gwt.uibinder.client.UiBinder;
1919
import com.google.gwt.uibinder.client.UiField;
20-
import com.google.gwt.user.client.ui.*;
20+
import com.google.gwt.user.client.ui.Composite;
21+
import com.google.gwt.user.client.ui.HasValue;
22+
import com.google.gwt.user.client.ui.Image;
23+
import com.google.gwt.user.client.ui.Widget;
2124
import org.rstudio.core.client.widget.InlineToolbarButton;
25+
import org.rstudio.core.client.widget.NumericTextBox;
2226
import org.rstudio.core.client.widget.SpanLabel;
2327
import org.rstudio.studio.client.pdfviewer.ui.images.Resources;
2428

@@ -106,7 +110,6 @@ public HasClickHandlers getThumbnailsButton()
106110
public void setPageCount(int pageCount)
107111
{
108112
pageBlock_.getStyle().clearDisplay();
109-
pageSelect_.setPageCount(pageCount);
110113
pageCountLabel_.setText(pageCount + "");
111114
}
112115

@@ -129,9 +132,15 @@ public HasClickHandlers getZoomIn()
129132
}
130133

131134
@Override
132-
public HasValue<Integer> getPageNumber()
135+
public HasValue<String> getPageNumber()
133136
{
134-
return pageSelect_;
137+
return pageNumber_;
138+
}
139+
140+
@Override
141+
public void selectPageNumber()
142+
{
143+
pageNumber_.selectAll();
135144
}
136145

137146
@UiField
@@ -141,8 +150,6 @@ public HasValue<Integer> getPageNumber()
141150
@UiField
142151
InlineToolbarButton btnNext_;
143152
@UiField
144-
PageNumberListBox pageSelect_;
145-
@UiField
146153
InlineToolbarButton btnThumbnails_;
147154
@UiField
148155
SpanLabel pageCountLabel_;
@@ -154,4 +161,6 @@ public HasValue<Integer> getPageNumber()
154161
Image zoomIn_;
155162
@UiField
156163
DivElement pageBlock_;
164+
@UiField
165+
NumericTextBox pageNumber_;
157166
}

src/gwt/src/org/rstudio/studio/client/pdfviewer/ui/PDFViewerToolbar.ui.xml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,12 @@
5757
}
5858

5959
.pageNumber {
60+
border: 1px solid rgb(153, 153, 153);
61+
outline: none;
62+
width: 30px;
63+
text-align: right;
64+
}
65+
.pageNumber:focus {
6066
outline: none;
6167
}
6268

@@ -94,8 +100,8 @@
94100
style="display: none">
95101
<div class="{style.inlineBlock} {style.padLeft3}">
96102
Page
97-
<input class="{style.pageNumber}" type="number" id="pageNumber" onchange="PDFView.page = this.value;" value="1" size="3" min="1" />
98-
<pdfviewer:PageNumberListBox ui:field="pageSelect_" visible="false"/>
103+
<widget:NumericTextBox styleName="{style.pageNumber}"
104+
ui:field="pageNumber_"/>
99105
of <widget:SpanLabel ui:field="pageCountLabel_"/>
100106
</div>
101107
<widget:InlineToolbarSeparator />

src/gwt/src/org/rstudio/studio/client/pdfviewer/ui/PDFViewerToolbarDisplay.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ public interface PDFViewerToolbarDisplay
2222
HasClickHandlers getThumbnailsButton();
2323
HasClickHandlers getZoomOut();
2424
HasClickHandlers getZoomIn();
25-
HasValue<Integer> getPageNumber();
25+
HasValue<String> getPageNumber();
26+
void selectPageNumber();
2627
void setPageCount(int pageCount);
2728
void setFilename(String filename);
2829
}

0 commit comments

Comments
 (0)