/*
* Copyright (c) 2012, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html
*
* 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.google.dart.tools.ui.presentation;
import com.google.dart.tools.core.DartCoreDebug;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchPreferenceConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder;
import org.eclipse.ui.internal.presentations.defaultpresentation.DefaultThemeListener;
import org.eclipse.ui.internal.presentations.defaultpresentation.EmptyTabFolder;
import org.eclipse.ui.internal.presentations.util.PresentablePartFolder;
import org.eclipse.ui.internal.presentations.util.TabbedStackPresentation;
import org.eclipse.ui.presentations.AbstractPresentationFactory;
import org.eclipse.ui.presentations.IStackPresentationSite;
import org.eclipse.ui.presentations.StackPresentation;
/**
* Presentation factory for the Dart Editor.
*/
@SuppressWarnings("restriction")
public class DartEditorPresentationFactory extends AbstractPresentationFactory {
public DartEditorPresentationFactory() {
}
@Override
public StackPresentation createEditorPresentation(Composite parent, IStackPresentationSite site) {
DefaultTabFolder folder = new DefaultTabFolder(
parent,
SWT.TOP | SWT.BORDER,
site.supportsState(IStackPresentationSite.STATE_MINIMIZED),
site.supportsState(IStackPresentationSite.STATE_MAXIMIZED));
folder.setSimpleTabs(false);
configureFolder(folder);
PresentablePartFolder partFolder = new PresentablePartFolder(folder);
TabbedStackPresentation result = new TabbedStackPresentation(
site,
partFolder,
new EditorSystemMenu(site));
DefaultThemeListener themeListener = new DefaultThemeListener(folder, result.getTheme());
result.getTheme().addListener(themeListener);
return result;
}
@Override
public StackPresentation createStandaloneViewPresentation(Composite parent,
IStackPresentationSite site, boolean showTitle) {
if (showTitle) {
return createViewPresentation(parent, site);
}
EmptyTabFolder folder = new EmptyTabFolder(parent, true);
TabbedStackPresentation presentation = new TabbedStackPresentation(
site,
folder,
new ViewSystemMenu(site));
return presentation;
}
@Override
public StackPresentation createViewPresentation(Composite parent, IStackPresentationSite site) {
DefaultTabFolder folder = new DefaultTabFolder(
parent,
SWT.TOP | SWT.BORDER,
site.supportsState(IStackPresentationSite.STATE_MINIMIZED),
site.supportsState(IStackPresentationSite.STATE_MAXIMIZED));
final IPreferenceStore store = PlatformUI.getPreferenceStore();
final int minimumCharacters = store.getInt(IWorkbenchPreferenceConstants.VIEW_MINIMUM_CHARACTERS);
if (minimumCharacters >= 0) {
folder.setMinimumCharacters(minimumCharacters);
}
folder.setUnselectedCloseVisible(false);
folder.setUnselectedImageVisible(true);
folder.setSimpleTabs(false);
configureFolder(folder);
PresentablePartFolder partFolder = new PresentablePartFolder(folder);
TabbedStackPresentation result = new TabbedStackPresentation(
site,
partFolder,
new ViewSystemMenu(site));
DefaultThemeListener themeListener = new DefaultThemeListener(folder, result.getTheme());
result.getTheme().addListener(themeListener);
return result;
}
private void configureFolder(DefaultTabFolder folder) {
if (!DartCoreDebug.ENABLE_TAB_COLORING) {
return;
}
// folder.setSimpleTabs(true);
// folder.setUnselectedCloseVisible(true);
// folder.setUnselectedImageVisible(true);
// Control ctrl = folder.getControl();
// if (ctrl instanceof CTabFolder) {
// final CTabFolder tabs = (CTabFolder) ctrl;
// tabs.setBorderVisible(true);
// setColors(tabs);
// final IPropertyChangeListener propertyChangeListener = new IPropertyChangeListener() {
// @Override
// public void propertyChange(PropertyChangeEvent event) {
// setColors(tabs);
// }
// };
// tabs.addDisposeListener(new DisposeListener() {
// // This will only be used when closing all tabs in a folder, e.g. close all editors.
// @Override
// public void widgetDisposed(DisposeEvent e) {
// getPreferences().removePropertyChangeListener(propertyChangeListener);
// }
// });
// getPreferences().addPropertyChangeListener(propertyChangeListener);
// }
}
// private IPreferenceStore getPreferences() {
// return DartToolsPlugin.getDefault().getCombinedPreferenceStore();
// }
// private void setColors(CTabFolder tabs) {
// SWTUtil.setColors(tabs, getPreferences());
// // Do this last to initialize fields with colors.
// TabFolderRenderer renderer = new TabFolderRenderer(tabs);
// tabs.setRenderer(renderer);
// }
}