1/*******************************************************************************
2 * Copyright (c) 2011 Google, Inc.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 *    Google, Inc. - initial API and implementation
10 *******************************************************************************/
11package org.eclipse.wb.internal.core.model.property.editor.presentation;
12
13import org.eclipse.wb.internal.core.DesignerPlugin;
14import org.eclipse.wb.internal.core.EnvironmentUtils;
15import org.eclipse.wb.internal.core.model.property.Property;
16import org.eclipse.wb.internal.core.model.property.table.PropertyTable;
17
18import org.eclipse.swt.SWT;
19import org.eclipse.swt.graphics.Image;
20import org.eclipse.swt.widgets.Button;
21
22/**
23 * Implementation of {@link PropertyEditorPresentation} for displaying {@link Button}.
24 *
25 * @author scheglov_ke
26 * @author mitin_aa
27 * @coverage core.model.property.editor
28 */
29public abstract class ButtonPropertyEditorPresentation extends PropertyEditorPresentation {
30  private final int m_style;
31  private final ButtonPropertyEditorPresentationImpl m_impl;
32
33  ////////////////////////////////////////////////////////////////////////////
34  //
35  // Constructors
36  //
37  ////////////////////////////////////////////////////////////////////////////
38  public ButtonPropertyEditorPresentation() {
39    this(SWT.NONE);
40  }
41
42  public ButtonPropertyEditorPresentation(int style) {
43    m_style = style;
44    m_impl =
45        EnvironmentUtils.IS_MAC
46            ? new ButtonPropertyEditorPresentationImplMac(this)
47            : new ButtonPropertyEditorPresentationImpl(this);
48  }
49
50  ////////////////////////////////////////////////////////////////////////////
51  //
52  // Access
53  //
54  ////////////////////////////////////////////////////////////////////////////
55  /**
56   * Sets "selection" property of {@link Button}.
57   */
58  public final void setSelection(PropertyTable propertyTable, Property property, boolean selected) {
59    m_impl.setSelection(propertyTable, property, selected);
60  }
61
62  ////////////////////////////////////////////////////////////////////////////
63  //
64  // PropertyEditorPresentation
65  //
66  ////////////////////////////////////////////////////////////////////////////
67  @Override
68  public final int show(final PropertyTable propertyTable,
69      final Property property,
70      final int x,
71      final int y,
72      final int width,
73      final int height) {
74    return m_impl.show(propertyTable, property, x, y, width, height);
75  }
76
77  @Override
78  public final void hide(PropertyTable propertyTable, Property property) {
79    m_impl.hide(propertyTable, property);
80  }
81
82  ////////////////////////////////////////////////////////////////////////////
83  //
84  // Access
85  //
86  ////////////////////////////////////////////////////////////////////////////
87  final int getStyle() {
88    return m_style;
89  }
90
91  ////////////////////////////////////////////////////////////////////////////
92  //
93  // Implementation
94  //
95  ////////////////////////////////////////////////////////////////////////////
96  /**
97   * @return the {@link Image} to display on {@link Button}.
98   */
99  protected Image getImage() {
100    return DesignerPlugin.getImage("properties/dots.gif");
101  }
102
103  /**
104   * @return the tooltip text to display for {@link Button}.
105   */
106  protected String getTooltip() {
107    return null;
108  }
109
110  /**
111   * Handles click on {@link Button}.
112   */
113  protected abstract void onClick(PropertyTable propertyTable, Property property) throws Exception;
114
115  // Temporary workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=388574
116  public static boolean isInWorkaround;
117  public void click(PropertyTable propertyTable, Property property) throws Exception {
118    try {
119      isInWorkaround = true;
120      onClick(propertyTable, property);
121    } finally {
122        isInWorkaround = false;
123    }
124  }
125}
126