//
//  MessagesInterfaceController.java
//  Structure
//
//  Created by Luc-Henri Barthélémy on Fri Oct 13 2006.
//  Copyright (c) 2001 __MyCompanyName__. All rights reserved.
//

//
//
// eviter la mise en avant de la fenetre choixStructure apres un runmodaldialog
//
//
package Structure.client;

import com.webobjects.foundation.*;
import com.webobjects.eocontrol.*;
import com.webobjects.eoapplication.*;
import com.webobjects.eointerface.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.lang.reflect.*;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import com.webobjects.eointerface.swing.EOTextArea;

public class MessagesInterfaceController extends EOInterfaceController {

	private EOSimpleWindowController theFrame;
	private String theMessage;
	public JTextField messageField;
	public JTextField messageField2;
	private Window choixWindow;

	
    public MessagesInterfaceController() {
        super();
    }

    public MessagesInterfaceController(EOEditingContext substitutionEditingContext) {
        super(substitutionEditingContext);
    }
	
	public MessagesInterfaceController(EOEditingContext substitutionEditingContext, String message, EOModalDialogController myFrame) {
        super(substitutionEditingContext);
		theMessage = message;
		theFrame = myFrame;
    }
	
	public MessagesInterfaceController(EOEditingContext substitutionEditingContext, String message, EOFrameController myFrame) {
        super(substitutionEditingContext);
		theMessage = message;
		theFrame = myFrame;
    }
	//
	// affiche  un message (non modal) dans une fenetre
	//
	
	public static EOFrameController initMessage(String title, String message)
	{
		MessagesInterfaceController myMessage;
		
		final EOFrameController myFrame = new EOFrameController();
		
		myMessage = new MessagesInterfaceController(null,message, myFrame);
		myFrame.setLabel(title);
		myFrame.setComponent(myMessage.component());
		myMessage.connectionWasEstablished();
		
		//
		// on veut que la fenetre s affiche tout de suite
		//
		
		myFrame.window().setVisible(true);
        myFrame.window().paintAll(myFrame.window().getGraphics());
		myFrame.activateWindow();
		// LHB 06/04/2007
		//myFrame.window().toFront();
		
		
		setAlwaysOnTop(myFrame.window());
		
		return myFrame;
	}
	
	//
	// same but Modal
	//
	
	// pas utile of course
	//
	
	
	// l ordre des operations est tes important
	
	public static EOModalDialogController initModalMessage(String title, String message)
	{
		MessagesInterfaceController myMessage;
		
		EOModalDialogController myFrame = new EOModalDialogController();
		
		myFrame.setLabel(title);
		
		myMessage = new MessagesInterfaceController(null,message, myFrame);

		 
		 myFrame.setComponent(myMessage.component());
		 myMessage.connectionWasEstablished();
		 //myFrame.window().paintAll(myFrame.window().getGraphics());

		 //
		 // on veut que la fenetre s affiche tout de suite
		 //
		 
		 //setAlwaysOnTop(myFrame.window());
		 //System.out.println("avant activateWindow");
		 myFrame.activateWindow();
		 //System.out.println("apres activateWindow");
		 // LHB 06/04/2007
		 //myFrame.window().toFront();
		myFrame.makeInvisible();
		//
		// on s en fiche en fait puisqu on est en modal
		// a changer
		//
		return myFrame;
	}
	
	public static EOModalDialogController initModalMessage(String title, String message, String message2)
	{
		MessagesInterfaceController myMessage;
		
		EOModalDialogController myFrame = new EOModalDialogController();
		
		myFrame.setLabel(title);
		
		myMessage = new MessagesInterfaceController(null,message, myFrame);
		
		
		myFrame.setComponent(myMessage.component());
		myMessage.connectionWasEstablished();
		//
		// une ligne de plus que le precedent
		//
		if(message2 != null && message2.length()>0)
			myMessage.addText(message2);
		
		//myFrame.window().paintAll(myFrame.window().getGraphics());
		
		//
		// on veut que la fenetre s affiche tout de suite
		//
		
		//setAlwaysOnTop(myFrame.window());
		//System.out.println("avant activateWindow");
		myFrame.activateWindow();
		//System.out.println("apres activateWindow");
		// LHB 06/04/2007
		//myFrame.window().toFront();
		myFrame.makeInvisible();
		//
		// on s en fiche en fait puisqu on est en modal
		// a changer
		//
		return myFrame;
	}
	
	
	public static EOFrameController initMessage(String title, String message, String message2)
	{
		MessagesInterfaceController myMessage;
		
		final EOFrameController myFrame = new EOFrameController();
		
		myMessage = new MessagesInterfaceController(null,message, myFrame);
		myFrame.setLabel(title);
		myFrame.setComponent(myMessage.component());
		myMessage.connectionWasEstablished();
		//
		// une ligne de plus que le precedent
		//
		if(message2 != null && message2.length()>0)
			myMessage.addText(message2);
		
		//
		// on veut que la fenetre s affiche tout de suite
		//
		
		myFrame.window().setVisible(true);
        myFrame.window().paintAll(myFrame.window().getGraphics());
		myFrame.activateWindow();
		// LHB 06/04/2007
		//myFrame.window().toFront();
		
//		myFrame.window().addWindowListener(new WindowAdapter(){
//			public void windowDeactivated(WindowEvent e){
//				//always on top
//				System.out.println("always on top !");
//				myFrame.window().toFront();
//			}
//		});
		
		setAlwaysOnTop(myFrame.window());
		
		return myFrame;
	}
	
	//
	// pour le mac en Java 1.5
	//

	public static void setAlwaysOnTop(Window myWindow)
	{
		
		NSSelector sel = new NSSelector("setAlwaysOnTop",new Class [] {boolean.class});
		try{
			sel.invoke(myWindow,new Boolean(true)); 
			//sel.invoke(actionsPanel,new Object[] { new Boolean(true) });
			myWindow.setVisible(true);
		}
		catch (NoSuchMethodException e1)
		{
			//System.out.println("Methode non connue" + e1.toString());
			System.out.println("Methode non connue" + " SetAlwaysOnTop");
		}		
		catch (IllegalAccessException e2)
		{
			System.out.println("Access illegal");
		}
		catch (InvocationTargetException e3)
		{
			System.out.println("Cible interdite");
		}
		
		//		myFrame.window().addWindowListener(new WindowAdapter(){
		//			public void windowDeactivated(WindowEvent e){
		//				//always on top
		//				System.out.println("always on top !");
		//				myFrame.window().toFront();
		//			}
		//		});
	}
	
	public void connectionWasEstablished()
	{
		choixWindow = theFrame.window();
		messageField.setText(theMessage);
	}

	public void addText(String message)
	{
		messageField2.setText(message);
	}
	
	public void okAction()
	{
		choixWindow.setVisible(false);
	}
}
