/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

interface nsIController;
interface nsIDOMXULCommandDispatcher;

[scriptable, uuid(f36e3ec1-9197-4ad8-8d4c-d3b1927fd6df)]
interface nsIControllers : nsISupports
{
	nsIController getControllerForCommand(in string command);

	void insertControllerAt(in unsigned long index, in nsIController controller);
	nsIController removeControllerAt(in unsigned long index);
	nsIController getControllerAt(in unsigned long index);

    void appendController(in nsIController controller);
	void removeController(in nsIController controller);

    /*
        Return an ID for this controller which is unique to this
        nsIControllers.
    */
    unsigned long getControllerId(in nsIController controller);
    /*
        Get the controller specified by the given ID.
    */
    nsIController getControllerById(in unsigned long controllerID);
    
	unsigned long getControllerCount();
};