/** * Copyright (c) 2014 - 2017 Frank Appel * 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: * Frank Appel - initial API and implementation */ package com.codeaffine.eclipse.swt.widget.scrollable.context; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Scrollable; import com.codeaffine.eclipse.swt.widget.scrollable.ScrollbarStyle; public class Reconciliation { final VisibilityReconciliation visibilityReconciliation; final EnablementReconciliation enablementReconciliation; final BoundsReconciliation boundsReconciliation; final LayoutReconciliation layoutReconciliation; final ColorReconciliation colorReconciliation; Reconciliation( Composite adapter, ScrollableControl<? extends Scrollable> scrollable ) { this( new VisibilityReconciliation( adapter, scrollable ), new EnablementReconciliation( adapter, scrollable ), new BoundsReconciliation( adapter, scrollable ), new LayoutReconciliation( adapter, scrollable ), new ColorReconciliation( castToScrollbarStyleIfPossible( adapter ), scrollable ) ); } Reconciliation( VisibilityReconciliation visibilityReconciliation, EnablementReconciliation enablementReconciliation, BoundsReconciliation boundsReconciliation, LayoutReconciliation layoutReconciliation, ColorReconciliation colorReconciliation ) { this.visibilityReconciliation = visibilityReconciliation; this.enablementReconciliation = enablementReconciliation; this.boundsReconciliation = boundsReconciliation; this.layoutReconciliation = layoutReconciliation; this.colorReconciliation = colorReconciliation; } public void runWithSuspendedBoundsReconciliation( Runnable runnable ) { boundsReconciliation.runSuspended( runnable ); } public boolean setVisible( boolean visible ) { return visibilityReconciliation.setVisible( visible ); } public boolean setEnabled( boolean enabled ) { return enablementReconciliation.setEnabled( enabled ); } public void runWhileSuspended( Runnable runnable ) { suspend(); try { runnable.run(); } finally { resume(); } } static ScrollbarStyle castToScrollbarStyleIfPossible( Composite adapter ) { return adapter instanceof ScrollbarStyle ? ( ScrollbarStyle )adapter : null; } private void suspend() { boundsReconciliation.suspend(); } private void resume() { visibilityReconciliation.run(); enablementReconciliation.run(); boundsReconciliation.resume(); boundsReconciliation.run(); layoutReconciliation.run(); colorReconciliation.run(); } }