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

Source Code of com.aelitis.azureus.ui.swt.skin.SWTSkinObjectBrowser

/**
* Copyright (C) 2006 Aelitis, 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; either version 2
* of the License, or (at your option) any later version.
* 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.
*
* AELITIS, SAS au capital de 63.529,40 euros
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*
*/

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

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.*;

import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.core3.util.SystemTime;
import org.gudy.azureus2.ui.swt.Utils;

import com.aelitis.azureus.core.cnetwork.ContentNetwork;
import com.aelitis.azureus.core.cnetwork.ContentNetworkManagerFactory;
import com.aelitis.azureus.ui.selectedcontent.SelectedContentManager;
import com.aelitis.azureus.ui.swt.browser.BrowserContext;
import com.aelitis.azureus.ui.swt.browser.BrowserContext.loadingListener;
import com.aelitis.azureus.ui.swt.browser.listener.*;
import com.aelitis.azureus.util.UrlFilter;

/**
* @author TuxPaper
* @created Oct 9, 2006
*
*/
public class SWTSkinObjectBrowser
  extends SWTSkinObjectBasic
{

  private Browser browser;

  private Composite cParent;

  private Composite cArea;

  private String sStartURL;

  private BrowserContext context;

  private String urlToUse;

  private boolean forceVisibleAfterLoad;
 
  private static boolean doneTheUglySWTFocusHack = false;

  /**
   * @param skin
   * @param properties
   * @param sID
   * @param sConfigID
   * @param type
   * @param parent
   */
  public SWTSkinObjectBrowser(SWTSkin skin, SWTSkinProperties properties,
      String sID, String sConfigID, SWTSkinObject parent) {
    super(skin, properties, sID, sConfigID, "browser", parent);

    cParent = parent == null ? skin.getShell()
        : (Composite) parent.getControl();

    cArea = cParent;
    cArea = new Canvas(cParent, SWT.NO_BACKGROUND);
    cArea.setLayout(new FormLayout());

    setControl(cArea);

    if (cParent.isVisible()) {
      init();
    } else {
      addListener(new SWTSkinObjectListener() {
        public Object eventOccured(SWTSkinObject skinObject, int eventType,
            Object params) {
          if (eventType == SWTSkinObjectListener.EVENT_SHOW) {
            removeListener(this);
            init();
          }
          return null;
        }
      });
    }
  }

  public void init() {
    if (browser != null && !browser.isDisposed()) {
      return;
    }

    try {
      browser = new Browser(cArea, Utils.getInitialBrowserStyle(SWT.NONE));

      browser.setLayoutData(Utils.getFilledFormData());
      browser.getParent().layout(true);
    } catch (SWTError e) {
      System.err.println("Browser: " + e.toString());
      return;
    }

    Control widgetIndicator = null;
    String sIndicatorWidgetID = properties.getStringValue(sConfigID
        + ".indicator");
    if (sIndicatorWidgetID != null) {
      SWTSkinObject skinObjectIndicator = skin.getSkinObjectByID(sIndicatorWidgetID);
      if (skinObjectIndicator != null) {
        widgetIndicator = skinObjectIndicator.getControl();
      }
    }

    String browserID = properties.getStringValue(sConfigID + ".view");
    if (browserID == null) {
      browserID = sID;
    }

    forceVisibleAfterLoad = properties.getBooleanValue(sConfigID + ".forceVisibleAfterLoad", true);
    context = new BrowserContext(browserID, browser, widgetIndicator, forceVisibleAfterLoad);

    boolean noListeners = properties.getBooleanValue(sConfigID + ".browser.nolisteners", false);
   
    if (!noListeners) {
      context.addMessageListener(new TorrentListener());
      context.addMessageListener(new VuzeListener());
      context.addMessageListener(new DisplayListener(browser));
      context.addMessageListener(new ConfigListener(browser));
    }

    boolean popouts = properties.getBooleanValue(sConfigID + ".browser.allowPopouts", true);
    context.setAllowPopups(popouts);
   
    context.addListener(new loadingListener() {
      public void browserLoadingChanged(boolean loading, String url) {
        if (loading && browser.isVisible()) {
          // hack so search results page doesn't clear cur selected
          if (UrlFilter.getInstance().urlCanRPC(url)) {
            SelectedContentManager.clearCurrentlySelectedContent();
          }
        }
       
      }
    });

    String url = urlToUse != null ? urlToUse : sStartURL != null ? sStartURL
        : properties.getStringValue(sConfigID + ".url", (String) null);
    if (url != null) {
      setURL(url);
    }
  }

  public Browser getBrowser() {
    if (browser == null) {
      init();
    }
    return browser;
  }

  public void setURL(final String url) {
    urlToUse = url;
    if (browser == null) {
      return;
    }
    Utils.execSWTThread(new AERunnable() {
      public void runSupport() {
        if (browser.isDisposed()) {
          return;
        }
        if (url == null) {
          browser.setText("");
        } else {
          String urlToUse = url;
          if (UrlFilter.getInstance().urlCanRPC(url)){
            ContentNetwork contentNetwork = ContentNetworkManagerFactory.getSingleton().getContentNetwork(
                context.getContentNetworkID());
            if (contentNetwork != null) {
              urlToUse = contentNetwork.appendURLSuffix(urlToUse,
                  false, true);
            }
          }
          if (browser != null) {
            browser.setUrl(urlToUse);
            if(browser.isVisible()) {
              browser.setFocus();
            }
          }
        }
        if (sStartURL == null) {
          sStartURL = url;
          if (browser != null) {
            browser.setData("StartURL", url);
          }
        }
        //System.out.println(SystemTime.getCurrentTime() + "] Set URL: " + url);
      }
    });
  }

  public void restart() {
    if (null != sStartURL) {
      String startURLUnique;
      String sRand = "rand=" + SystemTime.getCurrentTime();
      if (sStartURL.indexOf("rand=") > 0) {
        startURLUnique = sStartURL.replaceAll("rand=[0-9.]+", sRand);
      } else if (sStartURL.indexOf('?') > 0) {
        startURLUnique = sStartURL + "&" + sRand;
      } else {
        startURLUnique = sStartURL + "?" + sRand;
      }
      System.out.println(startURLUnique);
      setURL(startURLUnique);
    }
  }

  /**
   *
   */
  public void layout() {
    cParent.layout();
  }
 
  public BrowserContext getContext() {
    return context;
  }

  public String getStartURL() {
    return sStartURL;
  }

  public void setStartURL(String url) {
    sStartURL = url;
    if (null != browser) {
      if (urlToUse == null) {
        browser.setUrl(url);
      }
      browser.setData("StartURL", url);
    }
  }

  public boolean isPageLoading() {
    return context == null ? false : context.isPageLoading();
  }

  // @see com.aelitis.azureus.ui.swt.skin.SWTSkinObjectBasic#setVisible(boolean)
  public boolean setIsVisible(final boolean visible, boolean walkup) {
    boolean changed = super.setIsVisible(visible, walkup);

    if (changed) {
      // notify browser after we've fully processed visibility
      Utils.execSWTThreadLater(0, new AERunnable() {
        public void runSupport() {
          if (!isDisposed() && context != null) {
            context.sendBrowserMessage("browser", visible ? "shown" : "hidden");
          }
        }
      });
    }
    return changed;
  }

  public void addListener(loadingListener l) {
    if (context != null) {
      context.addListener(l);
    }
  }

  public void refresh() {
    Utils.execSWTThread(new AERunnable() {
      public void runSupport() {
        if (browser != null && !browser.isDisposed()) {
          browser.refresh();
        }
      }
    });
   
  }

}
TOP

Related Classes of com.aelitis.azureus.ui.swt.skin.SWTSkinObjectBrowser

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.