Rapicorn - Experimental UI Toolkit - Source Code  13.07.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines
text-editor.hh
Go to the documentation of this file.
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__ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines