Skip to content

Instantly share code, notes, and snippets.

@branflake2267
Last active February 24, 2017 17:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save branflake2267/bb2bbf454c95ab4be08ed1da35a322d7 to your computer and use it in GitHub Desktop.
Save branflake2267/bb2bbf454c95ab4be08ed1da35a322d7 to your computer and use it in GitHub Desktop.
GXT 4 with Material Design Font Icons as a ToolButton with Select Events that open up and Align Menu to them.
import com.google.gwt.core.shared.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
public interface AppResources extends ClientBundle {
public static AppResources INSTANCE = GWT.create(AppResources.class);
public interface Styles extends CssResource {
String toolButton();
String toolButtonOver();
}
@Source({ "styles.gss" })
Styles styles();
}
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.RootPanel;
import com.sencha.gxt.core.client.Style.Anchor;
import com.sencha.gxt.core.client.Style.AnchorAlignment;
import com.sencha.gxt.widget.core.client.button.IconButton.IconConfig;
import com.sencha.gxt.widget.core.client.button.ToolButton;
import com.sencha.gxt.widget.core.client.container.FlowLayoutContainer;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.menu.Menu;
import com.sencha.gxt.widget.core.client.menu.MenuItem;
/**
* Material Font Icons: https://google.github.io/material-design-icons/#icon-font-for-the-web
*
* Import: <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
*/
public class MaterialButtonsWithAlignToExample implements EntryPoint {
@Override
public void onModuleLoad() {
// only needed once
AppResources.INSTANCE.styles().ensureInjected();
ToolButton button1 = createMaterialButton("menu", "blue", 36);
ToolButton button2 = createMaterialButton("more_vert", "green", 36);
ToolButton button3 = createMaterialButton("error_outline", "red", 36);
FlowLayoutContainer toolBar = new FlowLayoutContainer();
toolBar.setBorders(true);
toolBar.setHeight("38px");
toolBar.add(button1);
toolBar.add(button2);
toolBar.add(button3);
RootPanel.get().add(toolBar, 100, 100);
}
/**
* Sizing: https://google.github.io/material-design-icons/#sizing
*/
public ToolButton createMaterialButton(String iconName, String color, int size) {
// define the styles for the button
String toolStyle = AppResources.INSTANCE.styles().toolButton();
String toolOverStyle = AppResources.INSTANCE.styles().toolButtonOver();
// setup the tool button config
IconConfig toolConfig = new IconConfig(toolStyle, toolOverStyle);
// instantiate the button for use
final ToolButton button = new ToolButton(toolConfig);
// button.setBorders(true); // debug Size
button.setPixelSize(size, size);
button.addStyleName("material-icons");
button.addStyleName("md-" + size);
button.getElement().getStyle().setFontSize(size, Unit.PX);
button.getElement().getStyle().setColor(color);
button.getElement().setInnerText(iconName);
button.addSelectHandler(new SelectHandler() {
@Override
public void onSelect(SelectEvent event) {
fireSelectEvent(button);
}
});
return button;
}
protected void fireSelectEvent(ToolButton button) {
Menu menu = new Menu();
menu.add(new MenuItem("Item 1"));
menu.add(new MenuItem("Item 2"));
menu.add(new MenuItem("Item 3"));
menu.add(new MenuItem("Item 4"));
menu.add(new MenuItem("Item 5"));
// Align Menu to button
AnchorAlignment alignTo = new AnchorAlignment(Anchor.TOP_LEFT, Anchor.BOTTOM_LEFT, true);
menu.show(button.getElement(), alignTo, 0, 0);
}
}
.toolButton {
}
.toolButtonOver {
opacity: .5;
}
@branflake2267
Copy link
Author

material-buttons

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment