/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Netscape Public License
 * Version 1.0 (the "NPL"); you may not use this file except in
 * compliance with the NPL.  You may obtain a copy of the NPL at
 * http://www.mozilla.org/NPL/
 *
 * Software distributed under the NPL is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
 * for the specific language governing rights and limitations under the
 * NPL.
 *
 * The Initial Developer of this code under the NPL is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
 * Reserved.
 */
 
#include "nsISupports.idl"
#include "domstubs.idl"
#include "nsIFileSpec.idl"

%{C++

class nsIDOMWindow;
class nsIDOMDocument;
class nsIDOMSelection;
class nsIDOMElement;
%}

interface nsIFileSpec;

[scriptable, uuid(9afff72b-ca9a-11d2-96c9-0060b0fb9956)]
interface nsIEditorShell : nsISupports
{
  readonly attribute wstring           contentsAsText;
  readonly attribute wstring           contentsAsHTML;

  readonly attribute wstring           selectionAsHTML;
  readonly attribute wstring           selectionAsText;

  readonly attribute nsIDOMDocument    editorDocument;
  readonly attribute nsIDOMSelection   editorSelection;
  
  attribute wstring    paragraphFormat;
  attribute long       wrapColumn;
   
  /* Setup */
  void SetEditorType(in wstring editorType);

  void SetToolbarWindow(in nsIDOMWindow win);
  void SetContentWindow(in nsIDOMWindow win);
  void SetWebShellWindow(in nsIDOMWindow win);
  void LoadUrl(in wstring url);
  
  void Init();
  
  /* Commands */
  void NewWindow();
  void Open();
  void Save();
  void SaveAs();
  void CloseWindow();
  void Print();
  void Exit();
  
  void Undo();
  void Redo();
  
  void Cut();
  void Copy();
  void Paste();
  void PasteAsQuotation();
  void PasteAsCitedQuotation(in wstring cite);
  
  void InsertAsQuotation(in wstring quotedText);
  void InsertAsCitedQuotation(in wstring quotedText, in wstring cite);
  
  void SelectAll();
  void DeleteSelection(in PRInt32 action);
  
  void Find();
  void FindNext();
  
  /* Structure change */
  void InsertText(in wstring textToInsert);
  void InsertSource(in wstring textToInsert);
  void InsertBreak();
  
  void InsertLink();
  void InsertImage();
  void InsertList(in wstring listType);
  void Indent(in wstring indent);
  void Align(in wstring align);
  
  nsIDOMElement GetSelectedElement(in wstring tagName);
  nsIDOMElement CreateElementWithDefaults(in wstring tagName);
  void    InsertElement(in nsIDOMElement element, in boolean deleteSelection);
  void    SaveHLineSettings(in nsIDOMElement element);
  void    InsertLinkAroundSelection(in nsIDOMElement anchorElement);
  void    SelectElement(in nsIDOMElement element);
  void    SetSelectionAfterElement(in nsIDOMElement element);

  /* Formatting */
  void SetTextProperty(in wstring prop, in wstring attr, in wstring value);
  void RemoveTextProperty(in wstring prop, in wstring attr);
  void GetTextProperty(in wstring prop, in wstring attr, in wstring value, out wstring firstHas, out wstring anyHas, out wstring allHas);
  void SetBodyAttribute(in wstring attr, in wstring value);
  void SetBackgroundColor(in wstring color);

  void ApplyStyleSheet(in wstring url);
    
  /* Utility */
  wstring GetLocalFileURL(in nsIDOMWindow parent, in wstring filterType);

  void BeginBatchChanges();
  void EndBatchChanges();
  void RunUnitTests();

  void StartLogging(in nsIFileSpec logFile);
  void StopLogging();
};


%{C++
extern nsresult
NS_NewEditorShell(nsIEditorShell** aEditorShell);
%}

