/* * Copyright (c) 2010, Michael Grossmann * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the jo-widgets.org nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ package org.jowidgets.impl.widgets.composed; import org.jowidgets.api.model.item.IMenuModel; import org.jowidgets.api.widgets.IComposite; import org.jowidgets.api.widgets.IProgressBar; import org.jowidgets.api.widgets.descriptor.setup.IProgressBarSetup; import org.jowidgets.common.color.IColorConstant; import org.jowidgets.common.types.Cursor; import org.jowidgets.common.types.Orientation; import org.jowidgets.common.widgets.IProgressBarCommon; import org.jowidgets.common.widgets.controller.IPopupDetectionListener; import org.jowidgets.common.widgets.factory.ICustomWidgetCreator; import org.jowidgets.common.widgets.factory.ICustomWidgetFactory; import org.jowidgets.common.widgets.layout.ILayoutDescriptor; import org.jowidgets.common.widgets.layout.MigLayoutDescriptor; import org.jowidgets.impl.spi.ISpiBluePrintFactory; import org.jowidgets.impl.spi.SpiBluePrintFactory; import org.jowidgets.impl.spi.blueprint.IProgressBarBluePrintSpi; import org.jowidgets.impl.widgets.basic.ProgressBarCommonToControl; import org.jowidgets.spi.IWidgetFactorySpi; import org.jowidgets.spi.widgets.IProgressBarSpi; import org.jowidgets.tools.widgets.invoker.ColorSettingsInvoker; import org.jowidgets.tools.widgets.invoker.VisibiliySettingsInvoker; import org.jowidgets.tools.widgets.wrapper.ControlWrapper; public class ProgressBarImpl extends ControlWrapper implements IProgressBar { private final IComposite composite; private final IProgressBarCommon indeterminateProgressBar; private final IProgressBarCommon progressBar; private int maximum; private int minimum; private int progress; private boolean isIndeterminate; public ProgressBarImpl(final IComposite composite, final IProgressBarSetup setup, final IWidgetFactorySpi widgetsFactorySpi) { super(composite); this.composite = composite; final String componentLayoutConstraints; if (setup.getOrientation() == Orientation.HORIZONTAL) { componentLayoutConstraints = "growx, growy, hidemode 3"; } else { componentLayoutConstraints = "growy, growx, hidemode 3"; } final ILayoutDescriptor layoutDescriptor; if (setup.getOrientation() == Orientation.HORIZONTAL) { layoutDescriptor = new MigLayoutDescriptor("0[grow]0", "0[grow]0"); } else { layoutDescriptor = new MigLayoutDescriptor("0[grow]0", "0[grow][grow]0"); } this.composite.setLayout(layoutDescriptor); final ISpiBluePrintFactory spiBpf = new SpiBluePrintFactory(); final IProgressBarBluePrintSpi intermediateProgressBarBp = spiBpf.progressBar(); intermediateProgressBarBp.setSetup(setup).setIndeterminate(true); final IProgressBarBluePrintSpi progressBarBp = spiBpf.progressBar(); progressBarBp.setSetup(setup).setIndeterminate(false); this.indeterminateProgressBar = composite.add(new ICustomWidgetCreator<ProgressBarCommonToControl>() { @Override public ProgressBarCommonToControl create(final ICustomWidgetFactory widgetFactory) { final IProgressBarSpi progressBarSpi = widgetsFactorySpi.createProgressBar( getUiReference(), intermediateProgressBarBp); return new ProgressBarCommonToControl(progressBarSpi); } }, componentLayoutConstraints); this.progressBar = composite.add(new ICustomWidgetCreator<ProgressBarCommonToControl>() { @Override public ProgressBarCommonToControl create(final ICustomWidgetFactory widgetFactory) { final IProgressBarSpi progressBarSpi = widgetsFactorySpi.createProgressBar(getUiReference(), progressBarBp); return new ProgressBarCommonToControl(progressBarSpi); } }, componentLayoutConstraints); this.minimum = setup.getMinimum(); progressBar.setMinimum(this.minimum); this.maximum = setup.getMaximum(); progressBar.setMaximum(this.maximum); this.progress = setup.getProgress(); progressBar.setProgress(progress); setIndeterminatState(setup.isIndeterminate()); ColorSettingsInvoker.setColors(setup, this); VisibiliySettingsInvoker.setVisibility(setup, this); } @Override public void setEnabled(final boolean enabled) { indeterminateProgressBar.setEnabled(enabled); progressBar.setEnabled(enabled); } @Override public boolean isEnabled() { return indeterminateProgressBar.isEnabled(); } @Override public int getMinimum() { return minimum; } @Override public int getMaximum() { return maximum; } @Override public int getProgress() { return progress; } @Override public void setIndeterminate(final boolean indeterminate) { if (this.isIndeterminate != indeterminate) { composite.layoutBegin(); setIndeterminatState(indeterminate); composite.layoutEnd(); } } private void setIndeterminatState(final boolean indeterminate) { this.isIndeterminate = indeterminate; if (indeterminate) { indeterminateProgressBar.setVisible(true); progressBar.setVisible(false); } else { progressBar.setVisible(true); this.indeterminateProgressBar.setVisible(false); } } @Override public boolean isIndeterminate() { return isIndeterminate; } @Override public void setMinimum(final int min) { this.minimum = min; progressBar.setMinimum(min); if (isIndeterminate) { setIndeterminate(false); } } @Override public void setMaximum(final int max) { this.maximum = max; progressBar.setMaximum(max); if (isIndeterminate) { setIndeterminate(false); } } @Override public void setProgress(final int progress) { progressBar.setProgress(progress); if (isIndeterminate) { setIndeterminate(false); } } @Override public void setFinished() { indeterminateProgressBar.setProgress(maximum); progressBar.setProgress(maximum); if (isIndeterminate) { setIndeterminate(false); } } @Override public boolean isFinished() { return maximum == progress; } @Override public void setForegroundColor(final IColorConstant colorValue) { indeterminateProgressBar.setForegroundColor(colorValue); progressBar.setForegroundColor(colorValue); } @Override public void setBackgroundColor(final IColorConstant colorValue) { indeterminateProgressBar.setBackgroundColor(colorValue); progressBar.setBackgroundColor(colorValue); } @Override public IColorConstant getForegroundColor() { if (isIndeterminate) { return indeterminateProgressBar.getForegroundColor(); } else { return progressBar.getForegroundColor(); } } @Override public IColorConstant getBackgroundColor() { if (isIndeterminate) { return indeterminateProgressBar.getBackgroundColor(); } else { return progressBar.getBackgroundColor(); } } @Override public void setCursor(final Cursor cursor) { indeterminateProgressBar.setCursor(cursor); progressBar.setCursor(cursor); } @Override public void setPopupMenu(final IMenuModel popupMenu) { //TODO MG this might not work, popup must be set on progressBar and indeterminateProgressBar also. //For that, progressBar and indeterminateProgressBar must be api widgets composite.setPopupMenu(popupMenu); } @Override public void addPopupDetectionListener(final IPopupDetectionListener listener) { composite.addPopupDetectionListener(listener); } @Override public void removePopupDetectionListener(final IPopupDetectionListener listener) { composite.removePopupDetectionListener(listener); } @Override public void setToolTipText(final String toolTip) { composite.setToolTipText(toolTip); indeterminateProgressBar.setToolTipText(toolTip); progressBar.setToolTipText(toolTip); } }