blob: ee8dcaf632d32c53bf4f2914491e8845887eac10 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 BSI Business Systems Integration AG.
* 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:
* BSI Business Systems Integration AG - initial API and implementation
*******************************************************************************/
package org.eclipse.scout.rt.ui.rap.window.desktop.toolbar;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.HashMap;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.client.ui.action.tool.IToolButton;
import org.eclipse.scout.rt.client.ui.desktop.IDesktop;
import org.eclipse.scout.rt.client.ui.desktop.outline.AbstractFormToolButton;
import org.eclipse.scout.rt.ui.rap.basic.RwtScoutComposite;
import org.eclipse.scout.rt.ui.rap.services.common.patchedclass.IPatchedClassService;
import org.eclipse.scout.rt.ui.rap.util.RwtLayoutUtility;
import org.eclipse.scout.service.SERVICES;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
/**
* <h3>ViewButtonBar</h3> ...
*
* @author Andreas Hoegger
* @since 3.7.0 June 2011
*/
public class RwtScoutToolButtonBar extends RwtScoutComposite<IDesktop> implements IRwtScoutToolButtonBar<IDesktop> {
private static final IScoutLogger LOG = ScoutLogManager.getLogger(RwtScoutToolButtonBar.class);
private static final String VARIANT_TOOL_BUTTON_BAR = "toolButtonBar";
private static final String VARIANT_TOOL_BUTTON_BAR_ACTIVE = "toolButtonBar-active";
private static final String VARIANT_TOOLBAR_CONTAINER = "toolbarContainer";
private static final String VARIANT_TOOL_BUTTON_BAR_COLLAPSE_BUTTON = "toolButtonBarCollapseButton";
private static final String VARIANT_TOOL_BUTTON_BUTTON_ACTIVE = "toolButton-active";
private static final String VARIANT_TOOL_BUTTON = "toolButton";
private HashMap<IToolButton, IRwtScoutToolButton> m_toolTabItems;
private Label m_toolButtonsLabel;
private PropertyChangeListener m_toolbuttonPropertyListener = new PropertyChangeListener() {
@Override
public void propertyChange(final PropertyChangeEvent e) {
Runnable t = new Runnable() {
@Override
public void run() {
if (!isUiDisposed()) {
//
handleScoutToolButtonPropertyChange(e.getPropertyName(), e.getNewValue());
}
}
};
getUiEnvironment().invokeUiLater(t);
}
};
private Composite m_toolButtonContainer;
private Button m_toolButtonCollapseButton;
public RwtScoutToolButtonBar() {
m_toolTabItems = new HashMap<IToolButton, IRwtScoutToolButton>();
}
@Override
protected void initializeUi(Composite parent) {
Composite toolButtonBar = getUiEnvironment().getFormToolkit().createComposite(parent);
toolButtonBar.setData(RWT.CUSTOM_VARIANT, VARIANT_TOOL_BUTTON_BAR);
if (isShowingCollapseButtonEnabled()) {
m_toolButtonCollapseButton = getUiEnvironment().getFormToolkit().createButton(toolButtonBar, "", SWT.PUSH);
m_toolButtonCollapseButton.setData(RWT.CUSTOM_VARIANT, VARIANT_TOOL_BUTTON_BAR_COLLAPSE_BUTTON);
m_toolButtonCollapseButton.addSelectionListener(new SelectionAdapter() {
private static final long serialVersionUID = 1L;
@Override
public void widgetSelected(SelectionEvent e) {
collapseToolView();
}
});
}
if (isShowingLabelEnabled()) {
m_toolButtonsLabel = getUiEnvironment().getFormToolkit().createLabel(toolButtonBar, "", SWT.CENTER);
m_toolButtonsLabel.setData(RWT.CUSTOM_VARIANT, VARIANT_TOOL_BUTTON);
m_toolButtonsLabel.addMouseListener(new MouseAdapter() {
private static final long serialVersionUID = 1L;
@Override
public void mouseDown(MouseEvent e) {
collapseToolView();
}
});
}
m_toolButtonContainer = getUiEnvironment().getFormToolkit().createComposite(toolButtonBar);
m_toolButtonContainer.setData(RWT.CUSTOM_VARIANT, VARIANT_TOOL_BUTTON_BAR);
for (IToolButton scoutButton : getScoutObject().getToolButtons()) {
if (!(scoutButton instanceof AbstractFormToolButton)) {
continue;
}
String simpleClassName = scoutButton.getClass().getSimpleName();
String variant = VARIANT_TOOL_BUTTON;
String activeVariant = VARIANT_TOOL_BUTTON_BUTTON_ACTIVE;
variant += "-" + simpleClassName;
activeVariant += "-" + simpleClassName;
IRwtScoutToolButtonForPatch uiToolButton = SERVICES.getService(IPatchedClassService.class).createRwtScoutToolButton(false, true, variant, activeVariant);
uiToolButton.createUiField(m_toolButtonContainer, scoutButton, getUiEnvironment());
m_toolTabItems.put(scoutButton, uiToolButton);
}
//layout
GridLayout toolButtonBarLayout = RwtLayoutUtility.createGridLayoutNoSpacing(3, false);
toolButtonBarLayout.marginLeft = 10;
toolButtonBarLayout.marginRight = 10;
toolButtonBar.setLayout(toolButtonBarLayout);
if (m_toolButtonCollapseButton != null) {
GridData collapseButtonLayoutData = new GridData(GridData.VERTICAL_ALIGN_CENTER);
collapseButtonLayoutData.heightHint = 15;
collapseButtonLayoutData.widthHint = 15;
collapseButtonLayoutData.exclude = true;
m_toolButtonCollapseButton.setLayoutData(collapseButtonLayoutData);
}
if (m_toolButtonsLabel != null) {
GridData labelData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
labelData.exclude = true;
m_toolButtonsLabel.setLayoutData(labelData);
}
GridData tabFolderLayoutData = new GridData(GridData.HORIZONTAL_ALIGN_END);
m_toolButtonContainer.setLayoutData(tabFolderLayoutData);
RowLayout layout = new RowLayout(SWT.HORIZONTAL);
layout.marginBottom = 0;
layout.spacing = 15;
m_toolButtonContainer.setLayout(layout);
for (IRwtScoutToolButton b : m_toolTabItems.values()) {
RowData data = new RowData();
Object o = b.getUiField().getLayoutData();
if (o instanceof RowData) {
data = (RowData) o;
}
data.width = 32;
data.height = 28;
b.getUiField().setLayoutData(data);
}
setUiContainer(toolButtonBar);
}
@Override
protected void attachScout() {
super.attachScout();
for (IToolButton scoutButton : getScoutObject().getToolButtons()) {
scoutButton.addPropertyChangeListener(m_toolbuttonPropertyListener);
}
updateToolButtonLabel();
}
@Override
protected void detachScout() {
super.detachScout();
for (IToolButton scoutButton : getScoutObject().getToolButtons()) {
scoutButton.removePropertyChangeListener(m_toolbuttonPropertyListener);
}
}
protected void collapseToolView() {
Runnable r = new Runnable() {
@Override
public void run() {
for (IToolButton scoutButton : getScoutObject().getToolButtons()) {
if (scoutButton.isSelected()) {
scoutButton.getUIFacade().setSelectedFromUI(false);
}
}
}
};
getUiEnvironment().invokeScoutLater(r, 0);
}
protected void updateToolButtonLabel() {
String label = null;
for (IToolButton scoutButton : getScoutObject().getToolButtons()) {
if (!(scoutButton instanceof AbstractFormToolButton)) {
continue;
}
if (scoutButton.isSelected()) {
label = scoutButton.getText();
m_toolButtonContainer.setData(RWT.CUSTOM_VARIANT, VARIANT_TOOL_BUTTON_BAR_ACTIVE);
}
}
GridData collapseButtonData = null;
if (m_toolButtonCollapseButton != null) {
collapseButtonData = (GridData) m_toolButtonCollapseButton.getLayoutData();
}
GridData labelData = null;
if (m_toolButtonsLabel != null) {
labelData = (GridData) m_toolButtonsLabel.getLayoutData();
}
if (label == null) {
if (m_toolButtonCollapseButton != null && collapseButtonData != null) {
m_toolButtonCollapseButton.setVisible(false);
collapseButtonData.exclude = true;
}
if (m_toolButtonsLabel != null && labelData != null) {
labelData.exclude = true;
m_toolButtonsLabel.setVisible(false);
}
label = "";
}
else {
if (m_toolButtonCollapseButton != null && collapseButtonData != null) {
collapseButtonData.exclude = false;
m_toolButtonCollapseButton.setVisible(true);
}
if (m_toolButtonsLabel != null && labelData != null) {
labelData.exclude = false;
m_toolButtonsLabel.setVisible(true);
}
}
if (m_toolButtonsLabel != null) {
m_toolButtonsLabel.setText(label);
}
getUiContainer().getParent().layout(true, true);
}
protected void handleScoutToolButtonPropertyChange(String propertyName, Object newValue) {
updateToolButtonLabel();
}
/**
* As default the collapse button is visible. May be overridden to make the button invisible.
*/
public boolean isShowingCollapseButtonEnabled() {
return true;
}
/**
* As default the label is visible. May be overridden to make the label invisible.
*/
public boolean isShowingLabelEnabled() {
return true;
}
}