//
//  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 {

	protected EOSimpleWindowController theFrame;
	protected String theMessage;
	public JTextField messageField;
	public JTextField messageField2;
	public EOTextArea detailText;
	protected Window choixWindow;
	public JFrame detailPanel;
	public JButton closeDetail;

	
    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 EOModalDialogController initModalMessage(String title, String message, String message2, String message3)
	{
		MessagesInterfaceController myMessage;
		
		EOModalDialogController myFrame = new EOModalDialogController();
		
		myFrame.setLabel(title);
		
		myMessage = new MessagesInterfaceController(null,message, myFrame);
		
		//System.out.println(">>> MessagesInterfaceController : " + myMessage.toString());
		
		myFrame.setComponent(myMessage.component());
		myMessage.connectionWasEstablished();
		//
		// une ligne de plus que le precedent
		//
		if(message2 != null && message2.length()>0)
			myMessage.addText(message2);
			
					// une ligne de plus que le precedent
		//
		if(message3 != null && message3.length()>0)
			myMessage.addDetail(message3);

		
		//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;
	}

	public static EOFrameController initMessage(String title, String message, String message2, String message3)
	{
		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);
		
				//
		// une ligne de plus que le precedent
		//
		if(message3 != null && message3.length()>0)
			myMessage.addDetail(message3);

		//
		// 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);
		ClicAndCloseButtonController myCAndC = new ClicAndCloseButtonController(closeDetail);
	}

	public void addText(String message)
	{
		messageField2.setText(message);
	}
	
	public void addDetail(String message)
	{
		detailText.setText(message);
	}
	
	public void okAction()
	{
		choixWindow.setVisible(false);
	}
	
		public void showDetail()
	{
		//individuDG.fetch();
		//panelSetLoc(individuPanel,mainWD());
		//JDialog myDialog = new JDialog(component().getTopLevelAncestor(),"Choix Responsable",true);
		//JDialog myDialog = new JDialog((Frame)null,"Choix Responsable",true);
		//JDialog myDialog = new JDialog();
		//responsablePanel.setVisible(true);
		//detailPanel.setVisible(true);

//		if(UserInfo.useModal() == false)
//		{
//			detailPanel.setVisible(true);
//			//panelSetLoc(responsablePanel,mainWD);
//		}
//		else
			initChoixModal(detailPanel,"Détails");
	}
		//
	// on cree des dialogues modaux ds le meme nib
	//
	public void initChoixModal(JFrame myPanel,String title)
	{
		JDialog myDialog = new JDialog((Frame)null,title,true);

		myDialog.setContentPane(myPanel.getContentPane());
		myDialog.pack();
	
		/**	
		if(myPanel != mainWD)
		{
			panelSetLoc(myDialog,mainWD);
		}
		else
		{
			// normalement on ne passe jamais ici
			panelSetLoc(myDialog,component());
		}
		**/
			panelSetLoc(myDialog,component());
		
		myDialog.setVisible(true);
	}
	
		public void panelSetLoc(Component myFrame, Component base)
	{
		Point loc;
		//
		// parfois la fenetre principale
		// n est pas le component
		//
		// si base n est pas visible (StructureEditor par ex)
		// on se base sur le component()
		//
		//base.setVisible(true);
		
		// LHB 04/04/2007
		
		//
		// ds le cas de SplitStructureEditorController
		// on a lance le mainWD ds un dialog
		// ce dialog est ds mainModal
		//
		/**
		if(mainModal != null)
		{
			base = mainModal;
		}
		**/
		
		if(base.isVisible())
		{
			//System.out.println("base.isVisible");
			loc = base.getLocationOnScreen();
		}
		else
		{
			//
			// surtout utilise ds StructureEditorIC
			//
			loc = component().getLocationOnScreen();
		}
		
		//loc = base.getLocation();
		
		//int j = (int)((base.getSize().getWidth()/1.5  + loc.getX()));
		int j = (int)((base.getSize().getWidth()/4  + loc.getX()));
		//int k = (int)((mainTabView.getSize().getHeight()  + loc.getY()/2D));
		int k = (int)( loc.getY());
		if(j < 0)
			j = 0;
		if(k < 0)
			k = 0;
		myFrame.setLocation(j, k);
	}


	public boolean detailAllowed()
	{		
		if(detailText.textComponent().getText() == null || detailText.textComponent().getText().length() == 0)
			return false;
		else
			return true;
	}
	

}
