package net.autosauler.ballance.client.gui;
import java.util.ArrayList;
import java.util.List;
import net.autosauler.ballance.client.gui.messages.M;
import net.autosauler.ballance.client.model.StructureModel;
import com.extjs.gxt.ui.client.Style.SelectionMode;
import com.extjs.gxt.ui.client.event.MenuEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.menu.Menu;
import com.extjs.gxt.ui.client.widget.menu.MenuBar;
import com.extjs.gxt.ui.client.widget.menu.MenuBarItem;
import com.extjs.gxt.ui.client.widget.menu.MenuItem;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
public class StructurePanel extends ContentPanel implements IPaneWithMenu,
IReloadMsgReceiver {
private static StructurePanel impl = null;
public static StructurePanel get() {
if (impl == null) {
impl = new StructurePanel();
}
return impl;
}
private Grid<StructureModel> grid;
private ListStore<StructureModel> store;
private GridSelectionModel<StructureModel> sm;
/**
* Instantiates a new users panel.
*/
private StructurePanel() {
super(new FitLayout());
setHeaderVisible(false);
buildPane();
}
private void buildPane() {
sm = new GridSelectionModel<StructureModel>();
sm.setSelectionMode(SelectionMode.SINGLE);
sm.addSelectionChangedListener(new SelectionChangedListener<StructureModel>() {
@Override
public void selectionChanged(
SelectionChangedEvent<StructureModel> se) {
StructureModel record = se.getSelectedItem();
if ((record != null) && (record.get("name") != null)) {
new StructureEditor((String) record.get("name"),
StructurePanel.this);
sm.deselectAll();
}
}
});
List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
ColumnConfig column = new ColumnConfig();
column = new ColumnConfig();
column.setId("name");
column.setHeader("Structure name");
column.setWidth(150);
column.setRowHeader(true);
columns.add(column);
ColumnModel cm = new ColumnModel(columns);
store = new ListStore<StructureModel>();
reloadList();
grid = new Grid<StructureModel>(store, cm);
grid.setSelectionModel(sm);
grid.setAutoExpandColumn("name");
grid.setBorders(true);
add(grid);
}
@Override
public List<MenuItem> getHelpItems() {
return null;
}
@Override
public MenuBar getPaneMenu() {
MenuBar menubar = new MenuBar();
Menu menu = new Menu();
menu.add(new MenuItem(M.structure.menuAddStruct(),
new SelectionListener<MenuEvent>() { // create new user
@Override
public void componentSelected(MenuEvent ce) {
sm.deselectAll();
new StructureEditor("", StructurePanel.this);
}
}));
menu.add(new MenuItem(M.structure.menuReload(),
new SelectionListener<MenuEvent>() { // reload users list
@Override
public void componentSelected(MenuEvent ce) {
loadList();
}
}));
menubar.add(new MenuBarItem(M.menu.itemStructure(), menu));
menu = new Menu();
menu.add(new MenuItem("Download", new SelectionListener<MenuEvent>() {
@Override
public void componentSelected(MenuEvent ce) {
Window.open(GWT.getModuleBaseURL()
+ "configuration?cmd=download", "_blank", "");
}
}));
menu.add(new MenuItem("Upload", new SelectionListener<MenuEvent>() {
@Override
public void componentSelected(MenuEvent ce) {
FileUploadDialog d = new FileUploadDialog(GWT
.getModuleBaseURL() + "configuration", "upload");
d.show();
}
}));
menubar.add(new MenuBarItem("Configuration", menu));
return menubar;
}
protected void loadList() {
store.removeAll();
StructureModel.load(store);
sm.deselectAll();
}
@Override
public void reloadList() {
loadList();
}
}