Package com.aelitis.azureus.ui.swt.views.skin

Source Code of com.aelitis.azureus.ui.swt.views.skin.InfoBarUtil

/**
* Created on Mar 1, 2009
*
* Copyright 2008 Vuze, Inc.  All rights reserved.
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License only.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
*/

package com.aelitis.azureus.ui.swt.views.skin;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;

import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.ui.swt.Utils;

import com.aelitis.azureus.ui.common.RememberedDecisionsManager;
import com.aelitis.azureus.ui.swt.skin.*;
import com.aelitis.azureus.ui.swt.skin.SWTSkinButtonUtility.ButtonListenerAdapter;

/**
* @author TuxPaper
* @created Mar 1, 2009
*
*/
public abstract class InfoBarUtil
{
  private final SWTSkinObject forSO;

  private final boolean top;

  private SWTSkin skin;

  private SWTSkinObject soInfoBar;

  private final String stateConfigID;

  private final String textPrefix;

  private final String skintemplateid;

  public InfoBarUtil(SWTSkinObject forSO, boolean top,
      final String stateConfigID, String textPrefix) {
    this(forSO, "library.top.info", top, stateConfigID, textPrefix);
  }

  public InfoBarUtil(final SWTSkinObject forSO, String skintemplateid, boolean top,
      final String stateConfigID, String textPrefix) {
    this.forSO = forSO;
    this.skintemplateid = skintemplateid;
    this.stateConfigID = stateConfigID;
    this.textPrefix = textPrefix;
    this.skin = forSO.getSkin();
    this.top = top;

    // Migrate existing state config to remembered decision manager so user
    // can get them back
    if (COConfigurationManager.hasParameter(
              stateConfigID, true)) {
      RememberedDecisionsManager.setRemembered(stateConfigID,
          COConfigurationManager.getBooleanParameter(stateConfigID) ? 1 : 0);
      COConfigurationManager.removeParameter(stateConfigID);
    }
   
    forSO.addListener(new SWTSkinObjectListener() {
      public Object eventOccured(SWTSkinObject skinObject, int eventType,
          Object params) {
        if (eventType == EVENT_SHOW) {
          forSO.removeListener(this);
          boolean show = RememberedDecisionsManager.getRememberedDecision(stateConfigID) != 0;
          if (show && allowShow() && soInfoBar == null) {
            createInfoBar();
          }
        }
        return null;
      }
    });
  }

  protected void createInfoBar() {
    Object ldForSO = forSO.getControl().getLayoutData();
    if (!(ldForSO instanceof FormData)) {
      return;
    }
    FormData fdForSO = (FormData) ldForSO;
    SWTSkinObject parent = forSO.getParent();
    soInfoBar = skin.createSkinObject("infobarutil", skintemplateid, parent);

    FormData fdInfoBar = (FormData) soInfoBar.getControl().getLayoutData();
    if (fdInfoBar == null) {
      fdInfoBar = Utils.getFilledFormData();
    }
    if (top) {
      fdInfoBar.top = new FormAttachment(fdForSO.top.control, fdForSO.top.offset,
          fdForSO.top.alignment);
      fdInfoBar.bottom = null;
      soInfoBar.getControl().setLayoutData(fdInfoBar);
      fdForSO.top = new FormAttachment(soInfoBar.getControl(), 0, SWT.BOTTOM);
      forSO.getControl().setLayoutData(fdForSO);
    } else {
      if (fdForSO.bottom.control == null) {
        fdInfoBar.bottom = new FormAttachment(fdForSO.bottom.numerator, fdForSO.bottom.denominator,
            fdForSO.bottom.offset);
      } else {
        fdInfoBar.bottom = new FormAttachment(fdForSO.bottom.control, fdForSO.bottom.offset,
            fdForSO.bottom.alignment);
      }
      fdInfoBar.top = null;
      soInfoBar.getControl().setLayoutData(fdInfoBar);
      fdForSO.bottom = new FormAttachment(soInfoBar.getControl(), 0, SWT.TOP);
      forSO.getControl().setLayoutData(fdForSO);
    }

    ((SWTSkinObjectContainer) parent).getComposite().layout(true);

    SWTSkinObject soClose = skin.getSkinObject("close", parent);
    if (soClose != null) {
      SWTSkinButtonUtility btnClose = new SWTSkinButtonUtility(soClose);
      btnClose.addSelectionListener(new ButtonListenerAdapter() {
        // @see com.aelitis.azureus.ui.swt.skin.SWTSkinButtonUtility.ButtonListenerAdapter#pressed(com.aelitis.azureus.ui.swt.skin.SWTSkinButtonUtility, com.aelitis.azureus.ui.swt.skin.SWTSkinObject, int)
        public void pressed(SWTSkinButtonUtility buttonUtility,
            SWTSkinObject skinObject, int stateMask) {
          soInfoBar.setVisible(false);
          RememberedDecisionsManager.setRemembered(stateConfigID, 0);
        }
      });
    }

    soInfoBar.addListener(new SWTSkinObjectListener() {
      public Object eventOccured(SWTSkinObject skinObject, int eventType,
          Object params) {
        if (eventType == EVENT_SHOW) {
          RememberedDecisionsManager.setRemembered(stateConfigID, 1);
        }
        return null;
      }
    });

    SWTSkinObject soText1 = skin.getSkinObject("infobar-title-1", parent);
    if (soText1 instanceof SWTSkinObjectText) {
      SWTSkinObjectText soText = (SWTSkinObjectText) soText1;
      String id = textPrefix + ".text1";
      if (MessageText.keyExists(id)) {
        soText.setTextID(id);
      }
    }
    SWTSkinObject soText2 = skin.getSkinObject("infobar-title-2", parent);
    if (soText2 instanceof SWTSkinObjectText) {
      SWTSkinObjectText soText = (SWTSkinObjectText) soText2;
      String id = textPrefix + ".text2";
      if (MessageText.keyExists(id)) {
        soText.setTextID(id);
      }
    }
   
    created(parent);

    soInfoBar.setVisible(true);
  }

  /**
   *
   *
   * @param parent
   * @since 4.1.0.5
   */
  protected void created(SWTSkinObject parent) {
  }

  public void hide(boolean permanently) {
    if (soInfoBar != null && !soInfoBar.isDisposed()) {
      soInfoBar.setVisible(false);
    }
    if (permanently) {
      RememberedDecisionsManager.setRemembered(stateConfigID, 0);
    }
  }

  public void show() {
    RememberedDecisionsManager.setRemembered(stateConfigID, 1);
    if (soInfoBar == null) {
      createInfoBar();
    } else {
      soInfoBar.setVisible(true);
    }
  }

  public abstract boolean allowShow();
}
TOP

Related Classes of com.aelitis.azureus.ui.swt.views.skin.InfoBarUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.