package org.ovirt.engine.ui.userportal.client.views.extended.templates;
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.core.compat.Event;
import org.ovirt.engine.core.compat.EventArgs;
import org.ovirt.engine.core.compat.IEventListener;
import org.ovirt.engine.core.compat.PropertyChangedEventArgs;
import org.ovirt.engine.ui.uicommon.models.userportal.UserPortalTemplateListModel;
import org.ovirt.engine.ui.uicommon.models.vms.UnitVmModel;
import org.ovirt.engine.ui.userportal.client.binders.ObjectNameResolver;
import org.ovirt.engine.ui.userportal.client.components.GridController;
import org.ovirt.engine.ui.userportal.client.components.GridRefreshManager;
import org.ovirt.engine.ui.userportal.client.components.RefreshPanel;
import org.ovirt.engine.ui.userportal.client.modalpanels.ItemRemoveModalPanel;
import org.ovirt.engine.ui.userportal.client.modalpanels.NewVmModalPanel;
import org.ovirt.engine.ui.userportal.client.views.extended.templates.components.TemplateItemSubTabs;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.layout.LayoutSpacer;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.toolbar.ToolStrip;
import com.smartgwt.client.widgets.toolbar.ToolStripButton;
import com.smartgwt.client.widgets.toolbar.ToolStripSeparator;
public class TemplateGridLayout extends VLayout {
private UserPortalTemplateListModel tlm = new UserPortalTemplateListModel();
private ToolStripButton editButton;
private ToolStripButton removeButton;
private TemplateGrid templatesGrid;
private TemplateItemSubTabs templateItemSubTabs;
public TemplateGridLayout() {
setOverflow(Overflow.HIDDEN);
setWidth100();
setHeight100();
templatesGrid = new TemplateGrid();
templatesGrid.setModel(tlm);
templatesGrid.search();
templateItemSubTabs = new TemplateItemSubTabs(tlm, templatesGrid);
addMember(getToolbar());
addMember(templatesGrid.getLayout());
addMember(templateItemSubTabs);
// At the initial item selection in TemplateListModel, the detail models are initialized
tlm.getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
PropertyChangedEventArgs pcea = (PropertyChangedEventArgs)args;
if (pcea.PropertyName.equals("DetailModels")) {
initItemSelected();
}
}
});
templatesGrid.getSelectionStatusChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
if (args == GridController.ITEM_SELECTED_EVENT_ARGS) {
templateItemSubTabs.show();
}
else {
templateItemSubTabs.hide();
}
}
});
}
private ToolStrip getToolbar() {
ToolStrip toolBar = new ToolStrip();
toolBar.setWidth100();
toolBar.setBackgroundColor("#FFFFFF");
toolBar.setStyleName("mainGrid-Toolbar");
editButton = new ToolStripButton("Edit");
editButton.setAutoFit(true);
editButton.addClickHandler(editButtonClickHandler);
editButton.setHeight(19);
editButton.setDisabled(true);
removeButton = new ToolStripButton("Remove");
removeButton.setAutoFit(true);
removeButton.addClickHandler(removeButtonClickHandler);
removeButton.setHeight(19);
removeButton.setDisabled(true);
setVisibilityHandlers();
toolBar.setMembers(editButton, new ToolStripSeparator(), removeButton, new LayoutSpacer(), new RefreshPanel(templatesGrid));
return toolBar;
}
ClickHandler removeButtonClickHandler = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
tlm.getRemoveCommand().Execute();
Window removeTemplateModalPanel = new ItemRemoveModalPanel("Remove Template(s)", "Template(s)", tlm, new ObjectNameResolver() {
@Override
public String getItemName(Object o) {
return ((VmTemplate)o).getname();
}
}, templatesGrid);
removeTemplateModalPanel.draw();
}
};
ClickHandler editButtonClickHandler = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
tlm.getEditCommand().Execute();
Window editTemplateModalPanel = new NewVmModalPanel(templatesGrid, (UnitVmModel)tlm.getWindow(), tlm);
editTemplateModalPanel.draw();
}
};
@Override
public void show() {
super.show();
GridRefreshManager.getInstance().subscribe(templatesGrid);
}
@Override
public void hide() {
super.hide();
GridRefreshManager.getInstance().unsubscribe(templatesGrid);
}
private void setVisibilityHandlers() {
tlm.getEditCommand().getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
editButton.setDisabled(!tlm.getEditCommand().getIsExecutionAllowed());
}
});
tlm.getRemoveCommand().getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
removeButton.setDisabled(!tlm.getRemoveCommand().getIsExecutionAllowed());
}
});
}
public void initItemSelected() {
removeButton.setDisabled(!tlm.getRemoveCommand().getIsExecutionAllowed());
editButton.setDisabled(!tlm.getEditCommand().getIsExecutionAllowed());
}
}