use of org.rstudio.core.client.dom.DomUtils.ElementPredicate in project rstudio by rstudio.
the class ModifyKeyboardShortcutsWidget method createMainWidget.
@Override
protected Widget createMainWidget() {
resetState();
setEscapeDisabled(true);
setEnterDisabled(true);
previewHandler_ = Event.addNativePreviewHandler(new NativePreviewHandler() {
@Override
public void onPreviewNativeEvent(NativePreviewEvent preview) {
if (swallowNextKeyUpEvent_ && preview.getTypeInt() == Event.ONKEYUP) {
swallowNextKeyUpEvent_ = false;
preview.cancel();
preview.getNativeEvent().stopPropagation();
preview.getNativeEvent().preventDefault();
} else if (preview.getTypeInt() == Event.ONKEYDOWN) {
int keyCode = preview.getNativeEvent().getKeyCode();
if (keyCode == KeyCodes.KEY_ESCAPE || keyCode == KeyCodes.KEY_ENTER) {
// If the DataGrid (or an underlying element) has focus, let it
// handle the escape / enter key.
Element target = preview.getNativeEvent().getEventTarget().cast();
Element foundTable = DomUtils.findParentElement(target, new ElementPredicate() {
@Override
public boolean test(Element el) {
return el.equals(table_.getElement());
}
});
if (foundTable != null)
return;
// the widget.
if (filterWidget_.isFocused()) {
if (keyCode == KeyCodes.KEY_ENTER) {
table_.setKeyboardSelectedRow(0);
table_.setKeyboardSelectedColumn(0);
return;
} else if (keyCode == KeyCodes.KEY_ESCAPE) {
focusOkButton();
return;
}
}
// Otherwise, handle Enter / Escape 'modally' as we might normally do.
preview.cancel();
preview.getNativeEvent().stopPropagation();
preview.getNativeEvent().preventDefault();
if (keyCode == KeyCodes.KEY_ENTER) {
clickOkButton();
return;
} else if (keyCode == KeyCodes.KEY_ESCAPE) {
closeDialog();
return;
}
}
}
}
});
addAttachHandler(new AttachEvent.Handler() {
@Override
public void onAttachOrDetach(AttachEvent event) {
if (event.isAttached())
;
else
previewHandler_.removeHandler();
}
});
VerticalPanel container = new VerticalPanel();
FlowPanel headerPanel = new FlowPanel();
Label radioLabel = new Label("Show:");
radioLabel.getElement().getStyle().setFloat(Style.Float.LEFT);
radioLabel.getElement().getStyle().setMarginRight(8, Unit.PX);
headerPanel.add(radioLabel);
headerPanel.add(radioAll_);
radioAll_.setValue(true);
headerPanel.add(radioCustomized_);
filterWidget_.getElement().getStyle().setFloat(Style.Float.LEFT);
filterWidget_.getElement().getStyle().setMarginLeft(10, Unit.PX);
filterWidget_.getElement().getStyle().setMarginTop(-1, Unit.PX);
headerPanel.add(filterWidget_);
HelpLink link = new HelpLink("Customizing Keyboard Shortcuts", "custom_keyboard_shortcuts");
link.getElement().getStyle().setFloat(Style.Float.RIGHT);
headerPanel.add(link);
container.add(headerPanel);
FlowPanel spacer = new FlowPanel();
spacer.setWidth("100%");
spacer.setHeight("4px");
container.add(spacer);
DockPanel dockPanel = new DockPanel();
dockPanel.add(table_, DockPanel.CENTER);
container.add(dockPanel);
return container;
}
use of org.rstudio.core.client.dom.DomUtils.ElementPredicate in project rstudio by rstudio.
the class Toolbar method updateStylesSafari.
// This is used to work around a button sizing issue on Safari where
// TD elements with a child element having 'display: none' might
// still take up some space, thereby messing with the layout
// when the DOM has a number of TD elements with undisplayed
// contents.
private void updateStylesSafari(HorizontalPanel panel) {
for (int i = 0; i < panel.getWidgetCount(); i++) {
Widget widget = panel.getWidget(i);
boolean visible = widget.isVisible();
DomUtils.toggleParentVisibility(widget.getElement(), visible, new ElementPredicate() {
@Override
public boolean test(Element el) {
return el.getTagName().toLowerCase().equals("td");
}
});
}
}
Aggregations