1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2012 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.browsing.ui.swt.widgets;
\r
14 import java.util.concurrent.CopyOnWriteArrayList;
\r
16 import org.eclipse.swt.events.SelectionListener;
\r
17 import org.eclipse.swt.widgets.Composite;
\r
18 import org.eclipse.swt.widgets.Control;
\r
19 import org.eclipse.swt.widgets.Display;
\r
20 import org.simantics.browsing.ui.swt.widgets.impl.ReadFactory;
\r
21 import org.simantics.browsing.ui.swt.widgets.impl.Widget;
\r
22 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;
\r
23 import org.simantics.db.management.ISessionContext;
\r
24 import org.simantics.db.procedure.Listener;
\r
26 public class Scale extends WidgetImpl {
\r
28 private ReadFactory<?, Integer> selectionFactory;
\r
29 private final CopyOnWriteArrayList<SelectionListener> selectionListeners = new CopyOnWriteArrayList<SelectionListener>();
\r
31 final private Display display;
\r
32 final private org.eclipse.swt.widgets.Scale scale;
\r
34 public Scale(Composite parent, WidgetSupport support, int style) {
\r
36 this.display = parent.getDisplay();
\r
37 scale = new org.eclipse.swt.widgets.Scale(parent, style);
\r
38 scale.setData("org.simantics.browsing.ui.widgets.Scale", this);
\r
39 support.register(this);
\r
42 public void setSelectionFactory(ReadFactory<?, Integer> selectionFactory) {
\r
43 this.selectionFactory = selectionFactory;
\r
46 public org.eclipse.swt.widgets.Scale getWidget() {
\r
51 public Control getControl() {
\r
56 public void setInput(ISessionContext context, Object input) {
\r
58 if (selectionListeners != null) {
\r
59 for (SelectionListener listener : selectionListeners) {
\r
60 if(listener instanceof Widget) {
\r
61 ((Widget) listener).setInput(context, input);
\r
66 if(selectionFactory != null) {
\r
67 selectionFactory.listen(context, input, new Listener<Integer>() {
\r
70 public void exception(Throwable t) {
\r
71 t.printStackTrace();
\r
75 public void execute(final Integer selection) {
\r
76 if(isDisposed()) return;
\r
77 display.asyncExec(new Runnable() {
\r
81 if(isDisposed()) return;
\r
82 if(selection == null) return;
\r
83 for(SelectionListener listener : selectionListeners) scale.removeSelectionListener(listener);
\r
84 scale.setSelection(selection);
\r
85 for(SelectionListener listener : selectionListeners) scale.addSelectionListener(listener);
\r
92 public boolean isDisposed() {
\r
93 return scale.isDisposed();
\r
101 public synchronized void addSelectionListener(SelectionListener listener) {
\r
102 selectionListeners.add(listener);
\r
103 scale.addSelectionListener(listener);
\r