org.rstudio.core.client.prefs.SectionChooser.java Source code

Java tutorial

Introduction

Here is the source code for org.rstudio.core.client.prefs.SectionChooser.java

Source

/*
 * SectionChooser.java
 *
 * Copyright (C) 2009-12 by RStudio, Inc.
 *
 * Unless you have received this program directly from RStudio pursuant
 * to the terms of a commercial license agreement with RStudio, then
 * this program is licensed to you under the terms of version 3 of the
 * GNU Affero General Public License. This program is distributed WITHOUT
 * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
 * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
 *
 */
package org.rstudio.core.client.prefs;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.VerticalPanel;

class SectionChooser extends SimplePanel implements HasSelectionHandlers<Integer> {
    private class ClickableVerticalPanel extends VerticalPanel implements HasClickHandlers {

        public HandlerRegistration addClickHandler(ClickHandler handler) {
            return addDomHandler(handler, ClickEvent.getType());
        }
    }

    public SectionChooser() {
        setStyleName(res_.styles().sectionChooser());
        inner_.setStyleName(res_.styles().sectionChooserInner());
        setWidget(inner_);
    }

    public void addSection(ImageResource icon, String name) {
        Image img = new Image(icon.getSafeUri());
        img.setSize("36px", "25px");
        Label label = new Label(name, false);
        final ClickableVerticalPanel panel = new ClickableVerticalPanel();
        panel.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
        panel.add(img);
        panel.add(label);
        panel.setStyleName(res_.styles().section());

        panel.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                select(inner_.getWidgetIndex(panel));
            }
        });

        inner_.add(panel);
    }

    public void select(Integer index) {
        if (selectedIndex_ != null)
            inner_.getWidget(selectedIndex_).removeStyleName(res_.styles().activeSection());

        selectedIndex_ = index;

        if (index != null)
            inner_.getWidget(index).addStyleName(res_.styles().activeSection());

        SelectionEvent.fire(this, index);
    }

    public void hideSection(Integer index) {
        if (index != null)
            inner_.getWidget(index).setVisible(false);
    }

    public HandlerRegistration addSelectionHandler(SelectionHandler<Integer> handler) {
        return addHandler(handler, SelectionEvent.getType());
    }

    public int getDesiredWidth() {
        return 102;
    }

    private Integer selectedIndex_;
    private final VerticalPanel inner_ = new VerticalPanel();
    private static final PreferencesDialogBaseResources res_ = PreferencesDialogBaseResources.INSTANCE;
}