/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.geofence.gui.client.widget.rule.detail; import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.mvc.Dispatcher; import com.extjs.gxt.ui.client.widget.ComponentManager; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; import org.geoserver.geofence.gui.client.GeofenceEvents; import org.geoserver.geofence.gui.client.Resources; import org.geoserver.geofence.gui.client.i18n.I18nProvider; import org.geoserver.geofence.gui.client.model.RuleModel; import org.geoserver.geofence.gui.client.model.data.LayerLimitsInfo; import org.geoserver.geofence.gui.client.service.RulesManagerRemoteServiceAsync; /** * The Class RuleLimitsWidget. * */ public class RuleLimitsWidget extends ContentPanel { /** The rule. */ private RuleModel theRule; /** The rule details info. */ private RuleLimitsInfoWidget ruleLimitsInfo; /** The tool bar. */ private ToolBar toolBar; /** The save layer details button. */ private Button saveLayerDetailsButton; private Button cancelButton; /** * Instantiates a new rule limits widget. * * @param model * the model * @param rulesService * the rule service */ public RuleLimitsWidget(RuleModel model, RulesManagerRemoteServiceAsync rulesService) { this.theRule = model; this.toolBar = new ToolBar(); setHeaderVisible(false); setFrame(true); setHeight(330); setWidth(690); setLayout(new FitLayout()); ruleLimitsInfo = new RuleLimitsInfoWidget(this.theRule, rulesService, this); add(ruleLimitsInfo.getFormPanel()); super.setMonitorWindowResize(true); setScrollMode(Scroll.AUTOY); this.saveLayerDetailsButton = new Button("Save"); saveLayerDetailsButton.setIcon(Resources.ICONS.save()); saveLayerDetailsButton.disable(); saveLayerDetailsButton.addListener(Events.OnClick, new Listener<ButtonEvent>() { public void handleEvent(ButtonEvent be) { disableSaveButton(); LayerLimitsInfo limitsInfoModel = ruleLimitsInfo.getModelData(); Dispatcher.forwardEvent(GeofenceEvents.SAVE_LAYER_LIMITS, limitsInfoModel); Dispatcher.forwardEvent(GeofenceEvents.SEND_INFO_MESSAGE, new String[] { "GeoServer Rules: Layer Limits", "Apply Changes" }); } }); cancelButton = new Button("Cancel"); cancelButton.addListener(Events.OnClick, new Listener<ButtonEvent>() { public void handleEvent(ButtonEvent be) { // ///////////////////////////////////////////////////////// // Getting the Rule limits edit dialogs and hiding this // ///////////////////////////////////////////////////////// ComponentManager.get().get(I18nProvider.getMessages().ruleDialogId()).hide(); } }); this.toolBar.add(new FillToolItem()); this.toolBar.add(saveLayerDetailsButton); this.toolBar.add(cancelButton); setBottomComponent(this.toolBar); } /* * (non-Javadoc) * * @see com.extjs.gxt.ui.client.widget.Component#onWindowResize(int, int) */ @Override protected void onWindowResize(int width, int height) { super.layout(); } /** * Sets the rule limits info. * * @param ruleLimitsInfoWidget * the new rule limits info */ public void setRuleDetailsInfo(RuleLimitsInfoWidget ruleLimitsInfoWidget) { this.ruleLimitsInfo = ruleLimitsInfoWidget; } /** * Gets the rule limits info. * * @return the rule limits info */ public RuleLimitsInfoWidget getRuleLimitsInfo() { return ruleLimitsInfo; } /** * Disable save button. */ public void disableSaveButton() { if (this.saveLayerDetailsButton.isEnabled()) { this.saveLayerDetailsButton.disable(); } } /** * Enable save button. */ public void enableSaveButton() { if (!this.saveLayerDetailsButton.isEnabled()) { this.saveLayerDetailsButton.enable(); } } /** * @return the toolBar */ public ToolBar getToolBar() { return this.toolBar; } }