/*
* 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.contents;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.ComboBoxItem;
import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
import org.modeshape.web.shared.Align;
import org.modeshape.web.shared.Columns;
/**
* Panel for session/workspace actions.
*
* Layout:
*
* |----------------------------------------------|
* | col1 | col2 |
* |----------------------------------------------|
*
* @author kulikov
*/
public class WorkspacePanel extends Columns {
private final static String STYLE_NAME = "viewport";
private final static int LAYOUT_MARGIN = 5;
private final static String COL2_WIDTH = "25%";
private final Contents contents;
private final Column1 col1 = new Column1();
private final Column2 col2 = new Column2();
private RefreshSessionDialog refreshDialog;
/**
* Create new instance.
*
* @param contents
*/
public WorkspacePanel(final Contents contents) {
super(Align.LEFT, Align.CENTER);
this.contents = contents;
refreshDialog = new RefreshSessionDialog(contents);
setStyleName(STYLE_NAME);
setLayoutMargin(LAYOUT_MARGIN);
HLayout strut = new HLayout();
strut.setWidth(40);
addMember(col1);
addMember(strut);
addMember(col2);
}
public void setEnabled(boolean enabled) {
col1.setEnabled(enabled);
}
/**
* Assigns workspace names to the combo box into column 2.
*
* @param values
*/
public void setWorkspaceNames(String[] values) {
col2.combo.setValueMap(values);
if (values.length > 0) {
col2.combo.setValue(values[0]);
}
}
/**
* Gets selected combo box value.
*
* @return
*/
public String getSelectedWorkspace() {
return col2.combo.getValueAsString();
}
/**
* |---------------------------------|
* | combo_title : combox_box |
* |---------------------------------|
*/
private class Column2 extends Columns {
private ComboBoxItem combo = new ComboBoxItem();
public Column2() {
super(Align.LEFT, Align.CENTER);
setWidth(COL2_WIDTH);
final DynamicForm form = new DynamicForm();
form.setFields(combo);
combo.setTitle("Workspace");
combo.setWidth(250);
combo.addChangedHandler(new ChangedHandler() {
@Override
public void onChanged(ChangedEvent event) {
contents.changeWorkspace((String) event.getValue());
}
});
addMember(form);
}
}
/**
* |---------------------------------|
* | row1 |
* |---------------------------------|
* | row2 |
* |---------------------------------|
*/
private class Column1 extends VLayout {
private final Label saveButton = new Label();
public Column1() {
setWidth100();
//append rows
addMember(Row1());
addMember(Row2());
}
public void setEnabled(boolean enabled) {
if (enabled) {
saveButton.enable();
saveButton.setStyleName("button-label");
} else {
saveButton.disable();
saveButton.setStyleName("button-label-disable");
}
saveButton.redraw();
}
private HLayout Row1() {
Columns top = new Columns(Align.LEFT, Align.CENTER);
top.setAlign(Alignment.LEFT);
top.setWidth100();
top.setHeight(30);
final Label caption = new Label();
caption.setContents("Session ");
caption.setAutoWidth();
saveButton.setIcon("icons/cd.png");
saveButton.setWidth(16);
saveButton.setTooltip("Save session");
saveButton.setStyleName("button-label-disabled");
saveButton.setContents("Save");
saveButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
contents.save();
}
});
final Label refreshButton = new Label();
refreshButton.setIcon("icons/apply.png");
refreshButton.setWidth(16);
refreshButton.setTooltip("Refresh session");
refreshButton.setStyleName("button-label");
refreshButton.setContents("Refresh");
refreshButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
refreshDialog.showModal();
}
});
top.addMember(caption);
top.addStrut(5);
top.addMember(saveButton);
top.addStrut(5);
top.addMember(refreshButton);
return top;
}
private HLayout Row2() {
Columns panel = new Columns(Align.LEFT, Align.CENTER);
panel.setWidth100();
panel.setHeight(50);
panel.setStyleName("session-hint");
final Label hint = new Label();
hint.setWidth100();
hint.setHeight100();
hint.setContents("Each Session object is associated one-to-one with a "
+ "Workspace object. The Workspace object represents a \"view\" "
+ "of an actual repository workspace entity as seen through "
+ "the authorization settings of its associated Session. ");
panel.addMember(hint);
return panel;
}
}
}