blob: 238233eacdac8cd0e5b2fa7f484646993f3ce034 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.themes;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.custom.ViewForm;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchPreferenceConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
import org.eclipse.ui.internal.IWorkbenchThemeConstants;
import org.eclipse.ui.internal.WorkbenchImages;
import org.eclipse.ui.themes.ITheme;
import org.eclipse.ui.themes.IThemePreview;
/**
* @since 3.0
*/
public class WorkbenchPreview implements IThemePreview {
// don't reset this dynamically, so just keep the information static.
// see bug:
// 75422 [Presentations] Switching presentation to R21 switches immediately, but only partially
private static int tabPos = PlatformUI.getPreferenceStore().getInt(IWorkbenchPreferenceConstants.VIEW_TAB_POSITION);
private boolean disposed = false;
private CTabFolder folder;
private ITheme theme;
private ToolBar toolBar;
private CLabel viewMessage;
private ViewForm viewForm;
private IPropertyChangeListener fontAndColorListener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (!disposed) {
setColorsAndFonts();
//viewMessage.setSize(viewMessage.computeSize(SWT.DEFAULT, SWT.DEFAULT, true));
viewForm.layout(true);
}
}
};
/* (non-Javadoc)
* @see org.eclipse.ui.IPresentationPreview#createControl(org.eclipse.swt.widgets.Composite, org.eclipse.ui.themes.ITheme)
*/
public void createControl(Composite parent, ITheme currentTheme) {
this.theme = currentTheme;
folder = new CTabFolder(parent, SWT.BORDER);
folder.setUnselectedCloseVisible(false);
folder.setEnabled(false);
folder.setMaximizeVisible(true);
folder.setMinimizeVisible(true);
viewForm = new ViewForm(folder, SWT.NONE);
viewForm.marginHeight = 0;
viewForm.marginWidth = 0;
viewForm.verticalSpacing = 0;
viewForm.setBorderVisible(false);
toolBar = new ToolBar(viewForm, SWT.FLAT | SWT.WRAP);
ToolItem toolItem = new ToolItem(toolBar, SWT.PUSH);
Image hoverImage = WorkbenchImages
.getImage(IWorkbenchGraphicConstants.IMG_LCL_VIEW_MENU);
toolItem.setImage(hoverImage);
viewForm.setTopRight(toolBar);
viewMessage = new CLabel(viewForm, SWT.NONE);
viewMessage.setText("Etu?"); //$NON-NLS-1$
viewForm.setTopLeft(viewMessage);
CTabItem item = new CTabItem(folder, SWT.CLOSE);
item.setText("Lorem"); //$NON-NLS-1$
Label text = new Label(viewForm, SWT.NONE);
viewForm.setContent(text);
text.setText("Lorem ipsum dolor sit amet"); //$NON-NLS-1$
item = new CTabItem(folder, SWT.CLOSE);
item.setText("Ipsum"); //$NON-NLS-1$
item.setControl(viewForm);
item.setImage(WorkbenchImages.getImage(ISharedImages.IMG_TOOL_COPY));
folder.setSelection(item);
item = new CTabItem(folder, SWT.CLOSE);
item.setText("Dolor"); //$NON-NLS-1$
item = new CTabItem(folder, SWT.CLOSE);
item.setText("Sit"); //$NON-NLS-1$
currentTheme.addPropertyChangeListener(fontAndColorListener);
setColorsAndFonts();
setTabPosition();
setTabStyle();
}
/**
* Set the tab style from preferences.
*/
protected void setTabStyle() {
boolean traditionalTab = PlatformUI.getPreferenceStore()
.getBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS);
folder.setSimple(traditionalTab);
}
/**
* Set the tab location from preferences.
*/
protected void setTabPosition() {
tabPos = PlatformUI.getPreferenceStore().getInt(IWorkbenchPreferenceConstants.VIEW_TAB_POSITION);
folder.setTabPosition(tabPos);
}
/**
* Set the folder colors and fonts
*/
private void setColorsAndFonts() {
folder.setSelectionForeground(theme.getColorRegistry().get(
IWorkbenchThemeConstants.ACTIVE_TAB_TEXT_COLOR));
folder.setForeground(theme.getColorRegistry().get(
IWorkbenchThemeConstants.INACTIVE_TAB_TEXT_COLOR));
Color[] colors = new Color[2];
colors[0] = theme.getColorRegistry().get(
IWorkbenchThemeConstants.INACTIVE_TAB_BG_START);
colors[1] = theme.getColorRegistry().get(
IWorkbenchThemeConstants.INACTIVE_TAB_BG_END);
colors[0] = theme.getColorRegistry().get(
IWorkbenchThemeConstants.ACTIVE_TAB_BG_START);
colors[1] = theme.getColorRegistry().get(
IWorkbenchThemeConstants.ACTIVE_TAB_BG_END);
folder.setSelectionBackground(colors, new int[] { theme
.getInt(IWorkbenchThemeConstants.ACTIVE_TAB_PERCENT) }, theme
.getBoolean(IWorkbenchThemeConstants.ACTIVE_TAB_VERTICAL));
folder.setFont(theme.getFontRegistry().get(
IWorkbenchThemeConstants.TAB_TEXT_FONT));
viewMessage.setFont(theme.getFontRegistry().get(
IWorkbenchThemeConstants.VIEW_MESSAGE_TEXT_FONT));
}
/* (non-Javadoc)
* @see org.eclipse.ui.IPresentationPreview#dispose()
*/
public void dispose() {
disposed = true;
theme.removePropertyChangeListener(fontAndColorListener);
}
}