Search in sources :

Example 1 with ElementPredicate

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;
}
Also used : NativePreviewHandler(com.google.gwt.user.client.Event.NativePreviewHandler) NativePreviewEvent(com.google.gwt.user.client.Event.NativePreviewEvent) VerticalPanel(com.google.gwt.user.client.ui.VerticalPanel) AttachEvent(com.google.gwt.event.logical.shared.AttachEvent) DockPanel(com.google.gwt.user.client.ui.DockPanel) Element(com.google.gwt.dom.client.Element) TableRowElement(com.google.gwt.dom.client.TableRowElement) FlowPanel(com.google.gwt.user.client.ui.FlowPanel) Label(com.google.gwt.user.client.ui.Label) HelpLink(org.rstudio.studio.client.common.HelpLink) ElementPredicate(org.rstudio.core.client.dom.DomUtils.ElementPredicate)

Example 2 with ElementPredicate

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");
            }
        });
    }
}
Also used : Element(com.google.gwt.dom.client.Element) ElementPredicate(org.rstudio.core.client.dom.DomUtils.ElementPredicate)

Aggregations

Element (com.google.gwt.dom.client.Element)2 ElementPredicate (org.rstudio.core.client.dom.DomUtils.ElementPredicate)2 TableRowElement (com.google.gwt.dom.client.TableRowElement)1 AttachEvent (com.google.gwt.event.logical.shared.AttachEvent)1 NativePreviewEvent (com.google.gwt.user.client.Event.NativePreviewEvent)1 NativePreviewHandler (com.google.gwt.user.client.Event.NativePreviewHandler)1 DockPanel (com.google.gwt.user.client.ui.DockPanel)1 FlowPanel (com.google.gwt.user.client.ui.FlowPanel)1 Label (com.google.gwt.user.client.ui.Label)1 VerticalPanel (com.google.gwt.user.client.ui.VerticalPanel)1 HelpLink (org.rstudio.studio.client.common.HelpLink)1