Rapicorn - Experimental UI Toolkit - Source Code
13.07.0
|
00001 // Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html 00002 #ifndef __RAPICORN_TEXT_EDITOR_HH__ 00003 #define __RAPICORN_TEXT_EDITOR_HH__ 00004 00005 #include <ui/container.hh> 00006 00007 namespace Rapicorn { 00008 namespace Text { 00009 00010 struct ParaState { 00011 AlignType align; 00012 EllipsizeType ellipsize; 00013 double line_spacing; 00014 double indent; 00015 String font_family; 00016 double font_size; /* absolute font size */ 00017 explicit ParaState(); 00018 }; 00019 00020 struct AttrState { 00021 String font_family; 00022 double font_scale; /* relative font size */ 00023 bool bold; 00024 bool italic; 00025 bool underline; 00026 bool small_caps; 00027 bool strike_through; 00028 Color foreground; 00029 Color background; 00030 explicit AttrState(); 00031 }; 00032 00033 class Editor : public virtual ContainerImpl { 00034 protected: 00035 virtual const PropertyList& __aida_properties__(); 00036 public: 00037 /* Text::Editor::Client */ 00038 class Client { 00039 protected: 00040 const PropertyList& client_property_list(); 00041 virtual String save_markup () const = 0; 00042 virtual void load_markup (const String &markup) = 0; 00043 public: 00044 virtual ~Client (); 00045 virtual const char* peek_text (int *byte_length) = 0; 00046 virtual ParaState para_state () const = 0; 00047 virtual void para_state (const ParaState &pstate) = 0; 00048 virtual AttrState attr_state () const = 0; 00049 virtual void attr_state (const AttrState &astate) = 0; 00050 /* properties */ 00051 virtual String markup_text () const; 00052 virtual void markup_text (const String &markup); 00053 virtual String plain_text () const; 00054 virtual void plain_text (const String &ptext); 00055 virtual TextMode text_mode () const = 0; 00056 virtual void text_mode (TextMode text_mode) = 0; 00057 /* size negotiation */ 00058 virtual double text_requisition (uint n_chars, 00059 uint n_digits) = 0; 00060 /* mark handling */ 00061 virtual int mark () const = 0; /* byte_index */ 00062 virtual void mark (int byte_index) = 0; 00063 virtual bool mark_at_end () const = 0; 00064 virtual bool mark_to_coord (double x, double y) = 0; 00065 virtual void step_mark (int visual_direction) = 0; 00066 virtual void mark2cursor () = 0; 00067 virtual void hide_cursor () = 0; 00068 virtual void mark_delete (uint n_utf8_chars) = 0; 00069 virtual void mark_insert (String utf8string, 00070 const AttrState *astate = NULL) = 0; 00071 }; 00072 public: 00073 /* Text::Editor */ 00074 virtual void text (const String &text) = 0; 00075 virtual String text () const = 0; 00076 virtual TextMode text_mode () const = 0; 00077 virtual void text_mode (TextMode text_mode) = 0; 00078 virtual String markup_text () const = 0; 00079 virtual void markup_text (const String &markup) = 0; 00080 virtual String plain_text () const = 0; 00081 virtual void plain_text (const String &ptext) = 0; 00082 virtual uint request_chars () const = 0; 00083 virtual void request_chars (uint nc) = 0; 00084 virtual uint request_digits () const = 0; 00085 virtual void request_digits (uint nd) = 0; 00086 }; 00087 00088 } // Text 00089 } // Rapicorn 00090 00091 #endif /* __RAPICORN_TEXT_EDITOR_HH__ */