/*
 * Created on 2004/May/14
 *
 * 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.
 */

package org.gudy.azureus2.pluginsimpl.local.ui.SWT;

import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;

import org.gudy.azureus2.core3.util.AEMonitor;
import org.gudy.azureus2.ui.swt.mainwindow.SWTThread;
import org.gudy.azureus2.ui.swt.plugins.UISWTInstance;

import com.aelitis.azureus.core.AzureusCoreFactory;
import com.aelitis.azureus.ui.UIFunctions;
import com.aelitis.azureus.ui.UIFunctionsManager;
import com.aelitis.azureus.ui.swt.UIFunctionsSWT;

import org.gudy.azureus2.plugins.PluginView;
import org.gudy.azureus2.plugins.ui.UIInstance;
import org.gudy.azureus2.plugins.ui.UIManager;
import org.gudy.azureus2.plugins.ui.UIManagerListener;
import org.gudy.azureus2.plugins.ui.SWT.GraphicSWT;
import org.gudy.azureus2.plugins.ui.SWT.SWTManager;
import org.gudy.azureus2.plugins.ui.model.PluginViewModel;

import org.gudy.azureus2.pluginsimpl.local.deprecate.PluginDeprecation;

/*
 * @deprecated
 */

public class SWTManagerImpl
	implements SWTManager
{	
	protected static SWTManagerImpl singleton;
	
	private static AEMonitor	class_mon	= new AEMonitor( "SWTManager" );

	public static SWTManagerImpl getSingleton() {
		try{
			class_mon.enter();
		
			if (singleton == null)
				singleton = new SWTManagerImpl();
			return singleton;
		}finally{
			
			class_mon.exit();
		}
	}
  
  public Display getDisplay() {
  	SWTThread instance = SWTThread.getInstance();
  	if (instance == null)
  		return null;
    return instance.getDisplay();
  }
  
  public GraphicSWT createGraphic(Image img) {
    return new GraphicSWTImpl(img);
  }
  

	public void addView(final PluginView view, final boolean bAutoOpen) {
		try {
			UIManager ui_manager = AzureusCoreFactory.getSingleton().getPluginManager().getDefaultPluginInterface().getUIManager();

			ui_manager.addUIListener(new UIManagerListener() {
				public void UIAttached(UIInstance instance) {
					if (instance instanceof UISWTInstance) {
						if (view instanceof PluginViewWrapper) {

							// legacy support for RSSImport plugin
							// model already registered, no need to do anything as UI will pick it up

						} else {
							UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
							if (uiFunctions instanceof UIFunctionsSWT) {
								((UIFunctionsSWT)uiFunctions).addPluginView(view);

								if (bAutoOpen) {
									((UIFunctionsSWT)uiFunctions).openPluginView(view);
								}
							}
						}
					}
				}

				public void UIDetached(UIInstance instance) {
				}
			});

		} catch (Throwable e) {
			// SWT not available prolly
		}
	} 

  	public void 
  	addView(
  		PluginView view)
  	{
  		addView(view, false);
  	} 

	public PluginView
	createPluginView(
		PluginViewModel	model )
	{	
		PluginDeprecation.call("createPluginView", model.getName());
		return( new PluginViewWrapper(model));
	
	}
	
	protected class
	PluginViewWrapper
		extends PluginView
	{
		private	PluginViewModel		model;
		
		protected
		PluginViewWrapper(
			PluginViewModel	_model )
		{
			model	= _model;
		}
		
		public String 
		getPluginViewName()
		{
			return( model.getName());
		}
	}
	
  /* 
   * Not working due to class loader being different between plugins and
   * main program.
   * 
  public boolean loadImage(String resource,String name) {
    try {
      ImageRepository.loadImage(getDisplay(),resource,name);
      return true;
    } catch(Exception e) {
      e.printStackTrace();
      return false;
    }
  }
  
  public Image getImage(String name) {
    return ImageRepository.getImage(name);
  }*/
}
