org.modeshape.web.client.contents.PathControl 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.contents;
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.layout.HLayout;
/**
*
* @author kulikov
*/
public class PathControl extends HLayout {
private final static String PATH_SEPARATOR = "/";
private final Label[] segments = new Label[50];
private final Label[] separators = new Label[50];
private final Label addButton = new Label();
private final Label importButton = new Label();
private final Label exportButton = new Label();
public PathControl(final Contents contents) {
super();
setHeight(30);
Label path = new Label();
path.setAutoWidth();
path.setContents("Node:");
path.setStyleName("text");
addMember(path);
for (int i = 0; i < segments.length; i++) {
segments[i] = new Label();
segments[i].setAutoWidth();
segments[i].setStyleName("segment");
segments[i].addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Label label = (Label) event.getSource();
contents.getAndDisplayNode(label.getDataPath(), true);
}
});
separators[i] = new Label();
separators[i].setContents(PATH_SEPARATOR);
separators[i].setVisible(false);
separators[i].setAutoWidth();
separators[i].setStyleName("segment-separator");
separators[i].setMargin(3);
addMember(segments[i]);
addMember(separators[i]);
}
addButton.setIcon("icons/add.png");
addButton.setWidth(16);
addButton.setTooltip("Add new node");
addButton.setStyleName("button-label");
addButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
contents.showAddNodeDialog();
}
});
importButton.setIcon("icons/folder_add.png");
importButton.setWidth(16);
importButton.setTooltip("Import nodes under this node");
importButton.setStyleName("button-label");
importButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
contents.showImportDialog();
}
});
exportButton.setIcon("icons/folder_go.png");
exportButton.setWidth(16);
exportButton.setTooltip("Export this node");
exportButton.setStyleName("button-label");
exportButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
contents.showExportDialog();
}
});
addMember(addButton);
addMember(importButton);
addMember(exportButton);
}
public void display(String url) {
for (int i = 0; i < segments.length; i++) {
segments[i].setContents("");
separators[i].setVisible(false);
}
String[] tokens = url.split(PATH_SEPARATOR);
if (tokens.length == 0) {
tokens = new String[]{PATH_SEPARATOR};
}
for (int i = 0; i < tokens.length; i++) {
segments[i].setContents(tokens[i]);
String path = "";
for (int j = 0; j <= i; j++) {
path += (PATH_SEPARATOR + segments[j].getContents());
}
segments[i].setTooltip(path);
segments[i].setDataPath(path);
segments[i].draw();
if (i < tokens.length - 1) {
separators[i].setVisible(true);
}
}
}
}