/**
* 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();
}