org.modeshape.web.client.grid.Grid Maven / Gradle / Ivy
/*
* ModeShape (http://www.modeshape.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.modeshape.web.client.grid;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
import java.util.Collection;
/**
* Pattern for grid view.
*
* @author kulikov
* @param
* @param
*/
public abstract class Grid extends VLayout {
private R[] records;
private final VLayout viewPort = new VLayout();
private final HLayout bottomPanel = new HLayout();
public Grid(String caption) {
super();
init(caption);
}
private void init(String caption) {
this.records = records();
this.setStyleName("grid-bg");
this.setLayoutMargin(1);
VLayout background = new VLayout();
background.setWidth100();
background.setHeight100();
background.setStyleName("grid-panel");
addMember(background);
HLayout topPanel = new HLayout();
topPanel.setHeight(30);
topPanel.setAlign(VerticalAlignment.CENTER);
topPanel.setAlign(Alignment.LEFT);
topPanel.setLayoutMargin(3);
topPanel.setBackgroundColor("#e6f1f6");
Label label = new Label(caption);
label.setWidth100();
label.setStyleName("caption");
topPanel.addMember(label);
background.addMember(topPanel);
HLayout toolBar = this.toolBar();
if (toolBar != null) {
background.addMember(toolBar);
}
HLayout header = this.tableHeader();
if (header != null) {
background.addMember(header);
}
setAutoHeight();
bottomPanel.setHeight(30);
bottomPanel.setBackgroundColor("#e6f1f6");
bottomPanel.setLayoutAlign(VerticalAlignment.CENTER);
bottomPanel.setDefaultLayoutAlign(VerticalAlignment.CENTER);
viewPort.setAutoHeight();
background.addMember(viewPort);
background.addMember(bottomPanel);
}
protected abstract R[] records();
protected abstract HLayout tableHeader();
protected abstract HLayout toolBar();
protected void setValues(Collection values) {
try {
for (int i = 0; i < records.length; i++) {
records[i].setVisible(false);
viewPort.removeMember(records[i]);
}
} catch (Exception e) {
}
if (values.isEmpty()) {
viewPort.addMember(records[0]);
updateRecord(-1, records[0], null);
records[0].show();
return;
}
viewPort.addMember(records[0]);
records[0].show();
updateRecord(0, records[0], null);
int i = 1;
for (V value : values) {
viewPort.addMember(records[i]);
records[i].show();
updateRecord(i, records[i], value);
i++;
}
}
protected abstract void updateRecord(int pos, R record, V value);
public void setFooterContent(HLayout component) {
component.setWidth(100);
bottomPanel.addMember(component);
}
protected class Strut extends HLayout {
public Strut(int size) {
super();
setWidth(size);
}
}
}