/*
* Copyright 2010 Alibaba Group Holding Limited.
* All rights reserved.
*
* 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 com.alibaba.antx.config.gui;
import java.util.List;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.StatusLineManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import com.alibaba.antx.config.ConfigRuntimeImpl;
import com.alibaba.antx.config.entry.ConfigEntry;
import com.alibaba.antx.config.gui.resource.Resources;
public class MainWindow extends ApplicationWindow {
private final ConfiguratorGUI gui;
/**
* Create the application window
*/
public MainWindow(ConfigRuntimeImpl runtime) {
super(null);
this.gui = new ConfiguratorGUI(this, runtime);
addMenuBar();
addToolBar(SWT.FLAT | SWT.WRAP);
addStatusLine();
}
/**
* Create contents of the application window
*
* @param parent
*/
protected Control createContents(Composite parent) {
SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL);
Composite leftPane = new Composite(sashForm, SWT.BORDER);
Composite rightPane = new Composite(sashForm, SWT.BORDER);
leftPane.setLayout(new GridLayout());
rightPane.setLayout(new GridLayout());
TreeViewer entriesViewer = new TreeViewer(leftPane, SWT.BORDER);
entriesViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
entriesViewer.setContentProvider(new ITreeContentProvider() {
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof List) {
List entriesList = (List) parentElement;
return (ConfigEntry[]) entriesList.toArray(new ConfigEntry[entriesList.size()]);
}
return null;
}
public Object getParent(Object element) {
return null;
}
public boolean hasChildren(Object element) {
return false;
}
public Object[] getElements(Object inputElement) {
if (inputElement instanceof List) {
List entriesList = (List) inputElement;
return (ConfigEntry[]) entriesList.toArray(new ConfigEntry[entriesList.size()]);
}
return null;
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
});
gui.scan();
entriesViewer.setInput(gui.getEntries());
return sashForm;
}
/**
* Create the menu manager
*
* @return the menu manager
*/
protected MenuManager createMenuManager() {
MenuManager menuManager = new MenuManager(null);
gui.configureMenuManager(menuManager);
return menuManager;
}
/**
* Create the toolbar manager
*
* @return the toolbar manager
*/
protected ToolBarManager createToolBarManager(int style) {
ToolBarManager toolBarManager = new ToolBarManager(style);
gui.configureToolBarManager(toolBarManager);
return toolBarManager;
}
/**
* Create the status line manager
*
* @return the status line manager
*/
protected StatusLineManager createStatusLineManager() {
StatusLineManager statusLineManager = new StatusLineManager();
return statusLineManager;
}
/**
* Configure the shell
*
* @param newShell
*/
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(Resources.getText("app.title"));
}
/**
* Return the initial size of the window
*/
protected Point getInitialSize() {
return new Point(500, 375);
}
public void handleShellCloseEvent() {
if (MessageDialog.openQuestion(getShell(), "退出提示", "你已经修改了资源/权限的映射规则,如果现在退出,所做的改动将不会保存,确定退出么?")) {
super.handleShellCloseEvent();
}
}
public static void run(ConfigRuntimeImpl runtime) {
MainWindow window = new MainWindow(runtime);
window.setBlockOnOpen(true);
window.open();
Display.getCurrent().dispose();
}
}