summaryrefslogtreecommitdiff
path: root/inputmethods/dasher/DashEdit.h
Side-by-side diff
Diffstat (limited to 'inputmethods/dasher/DashEdit.h') (more/less context) (ignore whitespace changes)
-rw-r--r--inputmethods/dasher/DashEdit.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/inputmethods/dasher/DashEdit.h b/inputmethods/dasher/DashEdit.h
new file mode 100644
index 0000000..dc14d15
--- a/dev/null
+++ b/inputmethods/dasher/DashEdit.h
@@ -0,0 +1,163 @@
+//! Class definition for an edit box
+// DashEdit.h
+//
+/////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2002 Iain Murray
+//
+/////////////////////////////////////////////////////////////////////////////
+
+/*
+An abstract DashEditbox class is described here.
+An implementation will handle interaction between Dasher and an actual Edit control.
+e.g. - output characters to the edit control
+ - tapping on the edit box updates the Dasher display
+*/
+
+#ifndef __DashEdit_h__
+#define __DashEdit_h__
+
+#include "DasherWidgetInterface.h"
+
+namespace Dasher {class CDashEditbox;}
+class Dasher::CDashEditbox
+{
+public:
+ CDashEditbox() : m_iFlushed(0), m_DasherInterface(0), m_dirty(false) {}
+
+ //! Provide the Editbox with a widget interface
+ virtual void SetInterface(CDasherWidgetInterface* DasherInterface) {m_DasherInterface = DasherInterface;}
+
+ //! Write some buffered output to a file
+ virtual void write_to_file()=0;
+
+ //! Set the number of flushed characters
+ //
+ //! Set the number of flushed characters to an arbitrary number.
+ //! Usually used to reset it to 0 after unflushing
+ void set_flushed(int i) {m_iFlushed=i;}
+
+ //! Provide context from the editbox for the core
+ //
+ //! Provide the context at the current position within the editbox to
+ //! the core. Set str to up to max characters before
+ //! the cursor position within the editbox.
+ virtual void get_new_context(std::string& str, int max)=0;
+
+ //! Delete flushed text from the editbox
+ virtual inline void unflush()=0;
+
+ //! Enter a the character Symbol into the text box
+ virtual void output(symbol Symbol)=0;
+
+ //! Delete the previous symbol from the text box
+ virtual void deletetext()=0;
+
+ //! Enter a character into the text box and remember that it is flushed
+ //
+ //! Output the character and increment m_iFlushed. When unflush is
+ //! called, remove the previous m_iFlushed characters
+ virtual void flush(symbol Symbol)=0;
+
+ // File I/O (optional)
+
+ //! If Value is true, timestamp all new files (optional)
+ //
+ //! If switched on, all new files should be timestamped, either in the
+ //! filename or in file metadata
+ virtual void TimeStampNewFiles(bool Value) {}
+
+ //! Return true if any text has been modified since the last save (optional)
+ bool IsDirty() {return m_dirty;}
+
+ //! Generate a new file (optional)
+ //
+ //! New file - provide a file save dialogue and return the filename in
+ //! filename, or provide a blank filename and present a file
+ //! save dialogue when Save() is called
+ virtual void New(const std::string& filename) {}; // filename can be "", but you cannot call Save() without having set a filename.
+
+ //! Open a file (optional)
+ //
+ //! Provide a file open dialogue and set filename to the
+ //! filename. Return true if a file is chosen and opened successfully,
+ //! false otherwise
+ virtual bool Open(const std::string& filename) {return false;};
+
+ //! Open a file and append to it (optional)
+ //
+ //! Provide a file open dialogue and set filename to the
+ //! filename. The file will then have any new text appended to it.
+ //! Return true if a file is chosen and opened successfully, false
+ //! otherwise
+ virtual bool OpenAppendMode(const std::string& filename) {return false;};
+ //! Save a file as a provided filename (optional)
+ //
+ //! Provide a file save dialogue and set filename to the
+ //! filename. Return true if a file is chosen and saved successfully,
+ //! false otherwise
+ virtual bool SaveAs(const std::string& filename) {return false;};
+
+ //! Save the current file (optional)
+ //
+ //! Save file to the current filename. If there is no current filename,
+ //! or if saving fails, return false
+ virtual bool Save() {return false;}; // returns false if there is no filename set, or if saving fails
+
+ // Clipboard (optional)
+ //! Cut selected text (optional)
+ //
+ //! Copy the selected text to the clipboard and remove it from the
+ //! editbox
+ virtual void Cut() {};
+
+ //! Copy selected text (optional)
+ //
+ //! Copy the selected text to the clipboard
+ virtual void Copy() {};
+
+ //! Copy all text (optional)
+ //
+ //! Copy all text in the editbox to the clipboard
+ virtual void CopyAll() {};
+
+ //! Paste text from clipboard (optional)
+ //
+ //! Paste text from the clipboard into the editbox at the current
+ //! position
+ virtual void Paste() {};
+
+ //! Select all text in the editbox (optional)
+ virtual void SelectAll() {};
+
+ //! Clear all text from the editbox (REQUIRED)
+ virtual void Clear()=0; // Must at least be able to clear edit box
+
+ //! Set the file encoding
+ //
+ //! Set the file encoding to the provided encoding Encoding.
+ //! The editbox is responsible for saving the file in the encoding
+ //! desired by the user. As Dasher is internally UTF8, it may well be
+ //! necessary to save in an alternative format based on locale and OS.
+ virtual void SetEncoding(Opts::FileEncodingFormats Encoding)=0;
+
+ //! Set the font used in the editbox
+ //
+ //! Set the font used in the editbox to Name and size
+ //! Size (in points)
+ virtual void SetFont(std::string Name, long Size)=0;
+
+// TODO sort relationship between CDashEditbox and derived classes
+protected:
+ //! Have the contents of the editbox been altered since the last save?
+ bool m_dirty;
+
+ //! Record the number of characters that have been flushed
+ int m_iFlushed; // how many characters have been flushed
+
+ //! Pointer to a DasherWidgetInterface for communication with the core
+ CDasherWidgetInterface* m_DasherInterface;
+};
+
+
+#endif /* #ifndef __DashEdit_h__ */