--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/lineeditor/inc/line_editor.h Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,203 @@
+// line_editor.h
+//
+// Copyright (c) 2006 - 2010 Accenture. All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Accenture - Initial contribution
+//
+
+#ifndef __LINE_EDITOR_H__
+#define __LINE_EDITOR_H__
+
+#include <e32std.h>
+#include <e32base.h>
+#include <e32keys.h>
+#include <fshell/line_editor_observer.h>
+#include <fshell/abstract_console_writer.h>
+#include <fshell/ioutils.h>
+
+const TInt KMaxLineLength = 256;
+#define CTRL(x) ((x)-'a'+1)
+
+class CLineHistory;
+
+//
+// MConsoleScrollObserver.
+//
+
+class MConsoleScrollObserver
+ {
+public:
+ virtual void CsoHandleConsoleScrolled() = 0;
+ };
+
+//
+// RConsole.
+//
+
+class RConsole
+ {
+public:
+ enum TCursorMode
+ {
+ EInsert,
+ EOverwrite
+ };
+public:
+ RConsole(MAbstractConsoleWriter& aStdout);
+ void Close();
+ void Start();
+ void Refresh();
+ void Write(const TDesC& aDes);
+ void SetCursorPosAbs(const TPoint& aPoint);
+ void SetCursorPosRel(const TPoint& aPoint);
+ void MoveCursorLeft();
+ void MoveCursorRight();
+ void NewLine();
+ void SetCursorMode(TCursorMode aMode);
+ void SetCursorVisible(TBool aVisible);
+ void ClearToEndOfLine();
+ void Clear();
+ TPoint PosFrom(const TPoint& aStartPos, TInt aLength) const;
+ TPoint CursorPos() const;
+ TInt AddObserver(MConsoleScrollObserver& aObserver);
+ void RemoveObserver(MConsoleScrollObserver& aObserver);
+ TSize Size() const;
+private:
+ void CursorLeft();
+ void CursorRight();
+ void LineFeed();
+ void CarriageReturn();
+ void NotifyScrollObservers();
+private:
+ TSize iSize;
+ MAbstractConsoleWriter& iStdout;
+ RPointerArray<MConsoleScrollObserver> iScrollObservers;
+ TPoint iCursorPos;
+ TCursorMode iCursorMode;
+ TBool iCursorVisible;
+ };
+
+
+//
+// TConsoleLine.
+//
+
+class TConsoleLine : public MConsoleScrollObserver
+ {
+public:
+ IMPORT_C TConsoleLine(RConsole& aConsole);
+ IMPORT_C void Start(const TDesC& aPrompt);
+ IMPORT_C void Start(const TDesC& aPrompt, const TDesC& aInitialInput);
+ IMPORT_C void Replace(const TDesC& aDes);
+ IMPORT_C void Replace(TInt aFrom, const TDesC& aDes);
+ IMPORT_C void Insert(TChar aChar);
+ IMPORT_C void Overwrite(TChar aChar);
+ IMPORT_C void Redraw();
+ IMPORT_C void End();
+ IMPORT_C void DeleteLeft();
+ IMPORT_C void DeleteRight();
+ IMPORT_C void CursorLeft();
+ IMPORT_C void CursorRight();
+ IMPORT_C void CursorPreviousWord();
+ IMPORT_C void CursorNextWord();
+ IMPORT_C void CursorBeginning();
+ IMPORT_C void CursorEnd();
+ IMPORT_C void PrintCompletionPossibilitiesL(const TDesC& aPossibilities);
+ IMPORT_C TPtrC Contents() const;
+ IMPORT_C TPtrC ContentsToCursor() const;
+public:
+ void Hide();
+ void Show();
+ void SetCursorPosition(TInt aPosition);
+ void Abort();
+private:
+ void Restart(const TDesC& aPrompt);
+private: // From MConsoleScrollObserver.
+ virtual void CsoHandleConsoleScrolled();
+private:
+ RConsole& iConsole;
+ TBuf<KMaxLineLength> iBuf;
+ TInt iPromptLength;
+ TInt iBufPos;
+ TPoint iStartPos;
+ TBool iStarted;
+ TBool iHidden;
+ };
+
+
+//
+// CLineEditor.
+//
+
+class CLineEditor : public CBase
+ {
+public:
+ IMPORT_C static CLineEditor* NewL( RFs& aFs,
+ MAbstractConsoleWriter& aStdout,
+ MLineEditorObserver& aObserver,
+ MLineCompleter& aCompleter,
+ const TDesC& aConsoleHistoryFile);
+ IMPORT_C ~CLineEditor();
+ IMPORT_C void HandleKey(TUint aKeyCode, TUint aModifiers);
+ IMPORT_C void Start(const TDesC& aPrompt);
+ IMPORT_C void Start(const TDesC& aPrompt, const TDesC& aInitialInput);
+ IMPORT_C void Abort();
+
+ IMPORT_C void Redraw();
+ IMPORT_C void RemovePromptAndUserInput();
+ IMPORT_C void ReinstatePromptAndUserInput();
+private:
+ CLineEditor(MAbstractConsoleWriter& aStdout, MLineEditorObserver& aObserver, MLineCompleter& aCompleter);
+ void ConstructL(RFs& aFs, const TDesC& aConsoleHistoryFile);
+ void InsertChar(TChar aChar);
+ void HandleEnter();
+ void HandleBackspace();
+ void HandleTab();
+ void HandleTabL();
+ void HandleDelete();
+ void HandleLeftArrow();
+ void HandleRightArrow();
+ void HandleUpArrow();
+ void HandleDownArrow();
+ void HandlePreviousWord();
+ void HandleNextWord();
+ void HandleHome();
+ void HandleEnd();
+ void HandlePageUp();
+ void HandlePageDown();
+ void HandleInsert();
+ void HandleEscape();
+ void HandleF8Completion(); // DOS-style F8 line completion
+ void ReplaceLine(const TDesC& aNewLine);
+private:
+ enum TState
+ {
+ EIdle,
+ EEditing,
+ ERecallingHistory
+ };
+ enum TMode
+ {
+ EInsert,
+ EOverwrite
+ };
+private:
+ void SetState(TState aState);
+private:
+ MLineEditorObserver& iObserver;
+ MLineCompleter& iCompleter;
+ RConsole iConsole;
+ TConsoleLine iLine;
+ TBuf<KMaxLineLength> iLineBackup;
+ CLineHistory* iHistory;
+ TState iState;
+ TMode iMode;
+ };
+
+
+#endif // __LINE_EDITOR_H__