/*******************************************************************************
* Copyright 2015 xWic group (http://www.xwic.de)
*
* 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 de.jwic.sourceviewer.viewer;
import de.jwic.base.ControlContainer;
import de.jwic.base.IControlContainer;
import de.jwic.controls.LabelControl;
import de.jwic.sourceviewer.main.SVModel;
import de.jwic.sourceviewer.main.SVModelAdapter;
import de.jwic.sourceviewer.main.SVModelEvent;
import de.jwic.sourceviewer.model.NavigationElement;
import de.jwic.sourceviewer.viewer.impl.CssCodeViewer;
import de.jwic.sourceviewer.viewer.impl.FolderViewer;
import de.jwic.sourceviewer.viewer.impl.GroupViewer;
import de.jwic.sourceviewer.viewer.impl.HTMLCodeViewer;
import de.jwic.sourceviewer.viewer.impl.ImageViewer;
import de.jwic.sourceviewer.viewer.impl.JavaCodeViewer;
import de.jwic.sourceviewer.viewer.impl.PackageViewer;
import de.jwic.sourceviewer.viewer.impl.ProjectViewer;
import de.jwic.sourceviewer.viewer.impl.PropertiesViewer;
import de.jwic.sourceviewer.viewer.impl.SourceFolderViewer;
import de.jwic.sourceviewer.viewer.impl.TextViewer;
import de.jwic.sourceviewer.viewer.impl.VelocityCodeViewer;
/**
*
* @author Florian Lippisch
*/
public class ViewerControl extends ControlContainer {
private int width = 600;
private NavigationElement element = null;
private SVModel model;
private ElementInfoControl elementInfo;
private ContentViewer content;
private LabelControl emptyLabel = null;
private IObjectViewer currViewer = null;
private IObjectViewer[] viewers;
/**
* @param container
* @param name
* @param model
*/
public ViewerControl(IControlContainer myContainer, String name, SVModel model) {
super(myContainer, name);
this.model = model;
model.addSVModelListener(new SVModelAdapter() {
public void elementSelected(SVModelEvent event) {
setElement(event.getElement());
}
});
content = new ContentViewer(this, "content");
elementInfo = new ElementInfoControl(this, "info");
emptyLabel = new LabelControl(content);
emptyLabel.setText("<br><p align=center>- no viewer for this file available -</p>");
content.setCurrControl(emptyLabel.getName());
createViewers();
}
/**
* Creates the available viewers. In future versions, this step should be
* based upon configuration or some plugin mechanism.
*
*/
private void createViewers() {
viewers = new IObjectViewer[12];
viewers[0] = new JavaCodeViewer(content, "java");
viewers[1] = new VelocityCodeViewer(content, "vel");
viewers[2] = new ImageViewer(content, "img");
viewers[3] = new HTMLCodeViewer(content, "html");
viewers[4] = new PropertiesViewer(content, "prop");
viewers[5] = new CssCodeViewer(content, "css");
viewers[6] = new PackageViewer(content, "package");
viewers[7] = new FolderViewer(content,"folder");
viewers[8] = new SourceFolderViewer(content,"srcfolder");
viewers[9] = new ProjectViewer(content,"project");
viewers[10] = new GroupViewer(content,"group");
viewers[11] = new TextViewer(content, "txt");
for (int i = 0; i < viewers.length; i++) {
viewers[i].init(model);
}
}
/**
* @return the element
*/
public NavigationElement getElement() {
return element;
}
/**
* @param element
* the element to set
*/
public void setElement(NavigationElement element) {
this.element = element;
elementInfo.setElement(element);
if (currViewer != null) {
currViewer.setNavigationElement(null); // clear
currViewer = null;
}
for (int i = 0; i < viewers.length; i++) {
if (viewers[i].isSupported(element)) {
currViewer = viewers[i];
break;
}
}
if (currViewer == null) {
content.setCurrControl(emptyLabel.getName());
} else {
content.setCurrControl(currViewer.getName());
currViewer.setNavigationElement(element);
}
content.setTop(0); // scroll to the top
}
/**
* Set the width.
*
* @param width
*/
public void setWidth(int width) {
this.width = width;
content.setWidth(width + "px");
}
/**
* Set the height.
*
* @param height
*/
public void setHeight(int height) {
content.setHeight((height - 40) + "px");
}
/**
* @return the width
*/
public int getWidth() {
return width;
}
}