text: // Scintilla source code edit control
  /** @file ScintillaBase.h
   ** Defines an enhanced subclass of Editor with calltips, autocomplete and context menu.
   **/
  // Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
  // The License.txt file describes the conditions under which this software may be distributed.
  
  #ifndef SCINTILLABASE_H
  #define SCINTILLABASE_H
  
  #ifdef SCI_NAMESPACE
  namespace Scintilla {
  #endif
  
  #ifdef SCI_LEXER
  class LexState;
  #endif
  
  /**
   */
  class ScintillaBase : public Editor {
  	// Private so ScintillaBase objects can not be copied
  	ScintillaBase(const ScintillaBase &);
  	ScintillaBase &operator=(const ScintillaBase &);
  
  protected:
  	/** Enumeration of commands and child windows. */
  	enum {
  		idCallTip=1,
  		idAutoComplete=2,
  
  		idcmdUndo=10,
  		idcmdRedo=11,
  		idcmdCut=12,
  		idcmdCopy=13,
  		idcmdPaste=14,
  		idcmdDelete=15,
  		idcmdSelectAll=16
  	};
  
  	enum { maxLenInputIME = 200 };
  
  	bool displayPopupMenu;
  	Menu popup;
  	AutoComplete ac;
  
  	CallTip ct;
  
  	int listType;			///< 0 is an autocomplete list
  	int maxListWidth;		/// Maximum width of list, in average character widths
  	int multiAutoCMode; /// Mode for autocompleting when multiple selections are present
  
  #ifdef SCI_LEXER
  	LexState *DocumentLexState();
  	void SetLexer(uptr_t wParam);
  	void SetLexerLanguage(const char *languageName);
  	void Colourise(int start, int end);
  #endif
  
  	ScintillaBase();
  	virtual ~ScintillaBase();
  	virtual void Initialise() = 0;
  	virtual void Finalise();
  
  	virtual void AddCharUTF(const char *s, unsigned int len, bool treatAsDBCS=false);
  	void Command(int cmdId);
  	virtual void CancelModes();
  	virtual int KeyCommand(unsigned int iMessage);
  
  	void AutoCompleteInsert(Position startPos, int removeLen, const char *text, int textLen);
  	void AutoCompleteStart(int lenEntered, const char *list);
  	void AutoCompleteCancel();
  	void AutoCompleteMove(int delta);
  	int AutoCompleteGetCurrent() const;
  	int AutoCompleteGetCurrentText(char *buffer) const;
  	void AutoCompleteCharacterAdded(char ch);
  	void AutoCompleteCharacterDeleted();
  	void AutoCompleteCompleted();
  	void AutoCompleteMoveToCurrentWord();
  	static void AutoCompleteDoubleClick(void *p);
  
  	void CallTipClick();
  	void CallTipShow(Point pt, const char *defn);
  	virtual void CreateCallTipWindow(PRectangle rc) = 0;
  
  	virtual void AddToPopUp(const char *label, int cmd=0, bool enabled=true) = 0;
  	void ContextMenu(Point pt);
  
  	virtual void ButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers);
  	virtual void ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt);
  
  	void NotifyStyleToNeeded(int endStyleNeeded);
  	void NotifyLexerChanged(Document *doc, void *userData);
  
  public:
  	// Public so scintilla_send_message can use it
  	virtual sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
  };
  
  #ifdef SCI_NAMESPACE
  }
  #endif
  
  #endif
  