package com.jcommerce.gwt.client.panels.article; import java.util.ArrayList; import java.util.List; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.data.BaseTreeLoader; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.GridEvent; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.store.Record; import com.extjs.gxt.ui.client.store.StoreEvent; import com.extjs.gxt.ui.client.store.StoreListener; import com.extjs.gxt.ui.client.store.TreeStore; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.Info; import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.grid.CheckColumnConfig; 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.layout.FitLayout; import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar; import com.extjs.gxt.ui.client.widget.treegrid.TreeGrid; import com.extjs.gxt.ui.client.widget.treegrid.TreeGridCellRenderer; import com.google.gwt.user.client.Element; import com.jcommerce.gwt.client.ContentWidget; import com.jcommerce.gwt.client.ModelNames; import com.jcommerce.gwt.client.PageState; import com.jcommerce.gwt.client.form.BeanObject; import com.jcommerce.gwt.client.model.IArticle; import com.jcommerce.gwt.client.model.IArticleCatagory; import com.jcommerce.gwt.client.resources.Resources; import com.jcommerce.gwt.client.service.Condition; import com.jcommerce.gwt.client.service.Criteria; import com.jcommerce.gwt.client.service.DeleteService; import com.jcommerce.gwt.client.service.ListService; import com.jcommerce.gwt.client.service.ReadService; import com.jcommerce.gwt.client.service.TreeListService; import com.jcommerce.gwt.client.service.UpdateService; import com.jcommerce.gwt.client.widgets.ActionCellRenderer; public class ArticleCatogory extends ContentWidget{ public ArticleCatogory() { curState = new State(); initJS(this); } public static class State extends PageState { public String getPageClassName() { return ArticleCatogory.class.getName(); } public String getMenuDisplayName() { return "文章分类"; } public void setParentId(String parentId) { setValue("parentId", parentId); } public String getParentId() { return (String) getValue("parentId"); } } public State getCurState() { return (State)curState; } public void setCurState(State curState) { this.curState = curState; } private static ArticleCatogory instance; public static ArticleCatogory getInstance() { if(instance == null) { instance = new ArticleCatogory(); } return instance; } private BaseTreeLoader<BeanObject> loader; private TreeGrid<BeanObject> treeGrid; private PagingToolBar toolBar = new PagingToolBar(10); private ContentPanel TablePanel = new ContentPanel(); public String getButtonText() { return "添加文章分类"; } protected void buttonClicked() { NewArticleCat.State state = new NewArticleCat.State(); state.execute(); } protected void onRender(Element parent, int index) { super.onRender(parent, index); final BaseTreeLoader<BeanObject> loader = new TreeListService().getLoader(ModelNames.ARTICLECATAGORY); this.loader = loader; final TreeStore<BeanObject> store = new TreeStore<BeanObject>(loader); store.addStoreListener(new StoreListener<BeanObject>() { public void storeUpdate(StoreEvent<BeanObject> se) { List<Record> changed = store.getModifiedRecords(); for (Record rec : changed) { BeanObject bean = (BeanObject) rec.getModel(); new UpdateService().updateBean(bean.getLong(IArticleCatagory.ID), bean, null); } } }); List<ColumnConfig> columns = new ArrayList<ColumnConfig>(); ColumnConfig catogory_name = new ColumnConfig(IArticleCatagory.NAME, "文章分类名称", 200); columns.add(catogory_name); // ColumnConfig catogory_type = new ColumnConfig(IArticleCatagory.TYPE, // "分类类型", 150); // // columns.add(catogory_type); ColumnConfig description = new ColumnConfig(IArticleCatagory.DESCRIPTION, "描述", 150); columns.add(description); ColumnConfig order = new ColumnConfig(IArticleCatagory.SORTRORDER, "排序", 150); columns.add(order); CheckColumnConfig navigation = new CheckColumnConfig(IArticleCatagory.NAVIGATOR, "是否显示在导航栏", 150); columns.add(navigation); ColumnConfig actcol1 = new ColumnConfig("Action", Resources.constants .GoodsList_action(), 100); columns.add(actcol1); ColumnModel cm = new ColumnModel(columns); TreeGrid<BeanObject> treeGrid = new TreeGrid<BeanObject>(store, cm) { @Override protected boolean hasChildren(BeanObject parent) { return parent.getProperties().get("children") != null; } @Override protected void onDoubleClick(GridEvent<BeanObject> e) { if (e.getRowIndex() != -1) { fireEvent(Events.RowDoubleClick, e); if (e.getColIndex() != -1) { fireEvent(Events.CellDoubleClick, e); } } } }; treeGrid.addListener(Events.Attach, new Listener<GridEvent<BeanObject>>() { public void handleEvent(GridEvent<BeanObject> be) { loader.load(); } }); catogory_name.setRenderer(new TreeGridCellRenderer<BeanObject>()); treeGrid.setBorders(true); treeGrid.setSize(400, 400); treeGrid.setAutoExpandColumn("name"); treeGrid.setTrackMouseOver(false); treeGrid.addPlugin(navigation); this.treeGrid = treeGrid; ActionCellRenderer render = new ActionCellRenderer(treeGrid); ActionCellRenderer.ActionInfo act = new ActionCellRenderer.ActionInfo(); act.setText("编辑 "); act.setAction("onManageClick($id)"); act.setTooltip("编辑"); render.addAction(act); actcol1.setRenderer(render); act = new ActionCellRenderer.ActionInfo(); act.setText(" 删除"); act.setAction("onDeleteClick($id)"); act.setTooltip(Resources.constants.Region_action_delete()); render.addAction(act); actcol1.setRenderer(render); // TreeCellLinkRender render1 = new TreeCellLinkRender(treeGrid); // TreeCellLinkRender.ActionInfo act0 = new // TreeCellLinkRender.ActionInfo(); // act0.setAction("onManageClick($id)"); // render1.addAction(act0); // catogory_name.setRenderer(render1); TablePanel.add(treeGrid); TablePanel.setFrame(true); TablePanel.setCollapsible(true); TablePanel.setAnimCollapse(false); TablePanel.setButtonAlign(HorizontalAlignment.CENTER); TablePanel.setIconStyle("icon-table"); TablePanel.setLayout(new FitLayout()); TablePanel.setHeading("文章分类"); TablePanel.setSize(800, 350); // TablePanel.setButtonAlign(HorizontalAlignment.CENTER); // TablePanel.setButtonAlign(HorizontalAlignment.CENTER); // TablePanel.addButton(new com.extjs.gxt.ui.client.widget.button.Button("添加文章分类", // new SelectionListener<ButtonEvent>() { // public void componentSelected(ButtonEvent ce) { // NewArticleCat.State state = new NewArticleCat.State(); // state.execute(); // } // })); add(TablePanel); } private native void initJS(ArticleCatogory me) /*-{ $wnd.onManageClick = function (id) { me.@com.jcommerce.gwt.client.panels.article.ArticleCatogory::editArticleCat(Ljava/lang/Long;)(id); }; $wnd.onDeleteClick = function (id) { me.@com.jcommerce.gwt.client.panels.article.ArticleCatogory::deleteArticleCat(Ljava/lang/Long;)(id); }; }-*/; private void editArticleCat(Long id) { new ReadService().getBean(ModelNames.ARTICLECATAGORY, id, new ReadService.Listener() { public void onSuccess(BeanObject bean) { NewArticleCat.State state = new NewArticleCat.State(); state.setArticleCategory(bean); state.execute(); } }); } private void deleteArticleCat(final Long id) { List<ModelData> children = treeGrid.getSelectionModel().getSelectedItem().getChildren(); if (children != null && children.size() > 0) { MessageBox.alert("DeleteError", "Please first delete the subnodes", null); } else { Criteria criteria = new Criteria(); Condition cond = new Condition(); cond.setField(IArticle.ARTICLECATEGORY); cond.setOperator(Condition.EQUALS); cond.setValue(id); criteria.addCondition(cond); new ListService().listBeans(ModelNames.ARTICLE, criteria, new ListService.Listener() { public void onSuccess(List<BeanObject> result) { if (result != null && result.size() > 0) { MessageBox.alert("DeleteError", "this category has articles", null); } else { new DeleteService().deleteBean(ModelNames.ARTICLECATAGORY, id, new DeleteService.Listener() { public void onSuccess(Boolean success) { Info.display("Congratulation", "deleted: id=" + id); loader.load(); } }); } } }); } } @Override public String getDescription() { // TODO Auto-generated method stub return null; } @Override public String getName() { // TODO Auto-generated method stub return "文章分类"; } }