/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Mozilla Public
 * License Version 1.1 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of
 * the License at http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 * 
 * The Original Code is the Mozilla browser.
 * 
 * The Initial Developer of the Original Code is Netscape
 * Communications, Inc.  Portions created by Netscape are
 * Copyright (C) 1999, Mozilla.  All Rights Reserved.
 * 
 * Contributor(s):
 *   Travis Bogard <travis@netscape.com>
 */

#include "nsISupports.idl"

/**
 * The nsIXULWindow
 */

interface nsIDocShell;
interface nsIDocShellTreeItem;
interface nsIXULBrowserWindow;

[scriptable, uuid(5d72a699-a252-4161-a45f-e7d35e78b7f3)]
interface nsIXULWindow : nsISupports
{
  /**
  The docshell owning the XUL for this window.
  */
  readonly attribute nsIDocShell docShell;

  /**
  Indicates if this window is instrinsically sized.	
  */
  attribute boolean intrinsicallySized;

  /**
  This returns the primary content shell.  
  
  Note that this is a docshell tree item and therefore can not be assured of
  what object it is.  It could be an editor, a docshell, or a browser object.
  Or down the road any other object that supports being a DocShellTreeItem
  Query accordingly	to determine the capabilities.
  */
  readonly attribute nsIDocShellTreeItem primaryContentShell;

  /**
  This returns the content shell specified by the supplied id.
    
  Note that this is a docshell tree item and therefore can not be assured of
  what object it is.  It could be an editor, a docshell, or a browser object.
  Or down the road any other object that supports being a DocShellTreeItem
  Query accordingly	to determine the capabilities.
  */
  nsIDocShellTreeItem getContentShellById(in wstring ID);

  /**
  Tell this window that it has picked up or lost a child XUL window
  @param aChild the child window being added or removed
  */
  void addChildWindow(in nsIXULWindow aChild);
  void removeChildWindow(in nsIXULWindow aChild);

  /**
  Move the window to a centered position.
  @param aRelative the window relative to which the window is moved.
                    See screen parameter for details. if null, the
                    window is centered relative to the main screen.
  @param aScreen PR_TRUE to center the window relative to the screen
                  containing aRelative. PR_FALSE to center it relative
                  to aRelative itself.
  @param aAlert PR_TRUE to move the window to an alert position,
                generally centered horizontally and 1/3 down from the top.
  */
  void center(in nsIXULWindow aRelative, in boolean aScreen, in boolean aAlert);

  /**
  Shows the window as a modal window. That is, ensures that it is visible
  and runs a local event loop, exiting only once the window has been closed.
  */
  void showModal();

  const unsigned long lowestZ = 0;
  const unsigned long loweredZ = 4;  /* "alwaysLowered" attribute */
  const unsigned long normalZ = 5;
  const unsigned long raisedZ = 6;   /* "alwaysRaised" attribute */
  const unsigned long highestZ = 9;

           attribute unsigned long zLevel;

  /**
   * contextFlags are from nsIWindowCreator2
   */
           attribute PRUint32  contextFlags;

  /**
  Create a new window.
  @param aChromeFlags: see nsIWebBrowserChrome
  @return the newly minted window
  */
  nsIXULWindow createNewWindow(in PRInt32 aChromeFlags);

  attribute nsIXULBrowserWindow XULBrowserWindow;
};

