// -*- c++ -*- // Generated by gtkmmproc -- DO NOT MODIFY! #ifndef _ATKMM_TEXT_H #define _ATKMM_TEXT_H #include /* $Id$ */ /* Copyright (C) 2002 The gtkmm Development Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include /* for Atk::CoordType */ #include #ifndef DOXYGEN_SHOULD_SKIP_THIS typedef struct _AtkText AtkText; typedef struct _AtkTextClass AtkTextClass; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ namespace Atk { class Text_Class; } // namespace Atk namespace Atk { class Attribute { public: #ifndef DOXYGEN_SHOULD_SKIP_THIS typedef Attribute CppObjectType; typedef AtkAttribute BaseObjectType; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ private: public: Attribute(); Attribute(const Glib::ustring& name, const Glib::ustring& value); explicit Attribute(const AtkAttribute* gobject); ~Attribute(); Attribute(const Attribute& other); Attribute& operator=(const Attribute& other); void swap(Attribute& other); Glib::ustring get_name() const; Glib::ustring get_value() const; /// Provides access to the underlying C GObject. AtkAttribute* gobj() { return &gobject_; } /// Provides access to the underlying C GObject. const AtkAttribute* gobj() const { return &gobject_; } protected: AtkAttribute gobject_; }; /** @relates Atk::Attribute */ inline void swap(Attribute& lhs, Attribute& rhs) { lhs.swap(rhs); } struct AttributeTraits { typedef Atk::Attribute CppType; typedef const AtkAttribute* CType; typedef AtkAttribute* CTypeNonConst; static CType to_c_type(CType item) { return item; } static CType to_c_type(const CppType& item) { return item.gobj(); } static CppType to_cpp_type(CType item) { return CppType(item); } static void release_c_type(CType item) { g_free(const_cast(item)); } }; typedef Glib::SListHandle AttributeSet; /** @addtogroup atkmmEnums Enums and Flags */ /** * @ingroup atkmmEnums */ enum BuiltinTextAttribute { TEXT_ATTR_INVALID, TEXT_ATTR_LEFT_MARGIN, TEXT_ATTR_RIGHT_MARGIN, TEXT_ATTR_INDENT, TEXT_ATTR_INVISIBLE, TEXT_ATTR_EDITABLE, TEXT_ATTR_PIXELS_ABOVE_LINES, TEXT_ATTR_PIXELS_BELOW_LINES, TEXT_ATTR_PIXELS_INSIDE_WRAP, TEXT_ATTR_BG_FULL_HEIGHT, TEXT_ATTR_RISE, TEXT_ATTR_UNDERLINE, TEXT_ATTR_STRIKETHROUGH, TEXT_ATTR_SIZE, TEXT_ATTR_SCALE, TEXT_ATTR_WEIGHT, TEXT_ATTR_LANGUAGE, TEXT_ATTR_FAMILY_NAME, TEXT_ATTR_BG_COLOR, TEXT_ATTR_FG_COLOR, TEXT_ATTR_BG_STIPPLE, TEXT_ATTR_FG_STIPPLE, TEXT_ATTR_WRAP_MODE, TEXT_ATTR_DIRECTION, TEXT_ATTR_JUSTIFICATION, TEXT_ATTR_STRETCH, TEXT_ATTR_VARIANT, TEXT_ATTR_STYLE, TEXT_ATTR_LAST_DEFINED }; } // namespace Atk #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace Glib { template <> class Value : public Glib::Value_Enum { public: static GType value_type() G_GNUC_CONST; }; } // namespace Glib #endif /* DOXYGEN_SHOULD_SKIP_THIS */ namespace Atk { class TextAttribute { private: int attribute_; public: TextAttribute() : attribute_ (0) {} TextAttribute(BuiltinTextAttribute attribute) : attribute_ (attribute) {} // Behave like an ordinary enum. explicit TextAttribute(int attribute) : attribute_ (attribute) {} operator int() const { return attribute_; } static TextAttribute for_name(const Glib::ustring& name); static Glib::ustring get_name(TextAttribute attribute); static Glib::ustring get_value(TextAttribute attribute, int index); }; } // namespace Atk #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace Glib { template <> class Value : public Glib::Value_Enum { public: static GType value_type() G_GNUC_CONST; }; } // namespace Glib #endif /* DOXYGEN_SHOULD_SKIP_THIS */ namespace Atk { /** * @ingroup atkmmEnums */ enum TextBoundary { TEXT_BOUNDARY_CHAR, TEXT_BOUNDARY_WORD_START, TEXT_BOUNDARY_WORD_END, TEXT_BOUNDARY_SENTENCE_START, TEXT_BOUNDARY_SENTENCE_END, TEXT_BOUNDARY_LINE_START, TEXT_BOUNDARY_LINE_END }; } // namespace Atk #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace Glib { template <> class Value : public Glib::Value_Enum { public: static GType value_type() G_GNUC_CONST; }; } // namespace Glib #endif /* DOXYGEN_SHOULD_SKIP_THIS */ namespace Atk { /** * @ingroup atkmmEnums */ enum TextClipType { TEXT_CLIP_NONE, TEXT_CLIP_MIN, TEXT_CLIP_MAX, TEXT_CLIP_BOTH }; } // namespace Atk #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace Glib { template <> class Value : public Glib::Value_Enum { public: static GType value_type() G_GNUC_CONST; }; } // namespace Glib #endif /* DOXYGEN_SHOULD_SKIP_THIS */ namespace Atk { /** The ATK interface implemented by components with text content. * This should be implemented by Atk::Objects on behalf of widgets that have text content which is either attributed * or otherwise non-trivial. Atk::Objects whose text content is simple, unattributed, and very brief may expose that * content via Atk::Object::get_name() instead; however if the text is editable, multi-line, typically longer than * three or four words, attributed, selectable, or if the object already uses the 'name' ATK property for other * information, this Text interface should be used to expose the text content. In the case of editable text content, * Atk::EditableText (a subtype of the Atk::Text interface) should be implemented instead. * * Atk::Text provides not only traversal facilities and change notification for text content, but also caret tracking * and glyph bounding box calculations. Note that the text strings are exposed as UTF-8, and are therefore potentially * multi-byte, and caret-to-byte offset mapping makes no assumptions about the character length; also bounding box * glyph-to-offset mapping may be complex for languages which use ligatures. */ class Text : public Glib::Interface { #ifndef DOXYGEN_SHOULD_SKIP_THIS public: typedef Text CppObjectType; typedef Text_Class CppClassType; typedef AtkText BaseObjectType; typedef AtkTextIface BaseClassType; private: friend class Text_Class; static CppClassType text_class_; // noncopyable Text(const Text&); Text& operator=(const Text&); protected: Text(); // you must derive from this class explicit Text(AtkText* castitem); #endif /* DOXYGEN_SHOULD_SKIP_THIS */ public: virtual ~Text(); static void add_interface(GType gtype_implementer); #ifndef DOXYGEN_SHOULD_SKIP_THIS static GType get_type() G_GNUC_CONST; static GType get_base_type() G_GNUC_CONST; #endif ///Provides access to the underlying C GObject. AtkText* gobj() { return reinterpret_cast(gobject_); } ///Provides access to the underlying C GObject. const AtkText* gobj() const { return reinterpret_cast(gobject_); } private: public: /** Gets the specified text. * @param start_offset Start position. * @param end_offset End position. * @return The text from @a start_offset up to, but not including @a end_offset . */ Glib::ustring get_text(int start_offset, int end_offset) const; /** Gets the specified text. * @param offset Position. * @return The character at @a offset . */ gunichar get_character_at_offset(int offset) const; /** Gets the specified text. * * If the boundary_type if ATK_TEXT_BOUNDARY_CHAR the character after the * offset is returned. * * If the boundary_type is ATK_TEXT_BOUNDARY_WORD_START the returned string * is from the word start after the offset to the next word start. * * The returned string will contain the word after the offset if the offset * is inside a word or if the offset is not inside a word. * * If the boundary_type is ATK_TEXT_BOUNDARY_WORD_END the returned string * is from the word end at or after the offset to the next work end. * * The returned string will contain the word after the offset if the offset * is inside a word and will contain the word after the word after the offset * if the offset is not inside a word. * * If the boundary type is ATK_TEXT_BOUNDARY_SENTENCE_START the returned * string is from the sentence start after the offset to the next sentence * start. * * The returned string will contain the sentence after the offset if the offset * is inside a sentence or if the offset is not inside a sentence. * * If the boundary_type is ATK_TEXT_BOUNDARY_SENTENCE_END the returned string * is from the sentence end at or after the offset to the next sentence end. * * The returned string will contain the sentence after the offset if the offset * is inside a sentence and will contain the sentence after the sentence * after the offset if the offset is not inside a sentence. * * If the boundary type is ATK_TEXT_BOUNDARY_LINE_START the returned * string is from the line start after the offset to the next line start. * * If the boundary_type is ATK_TEXT_BOUNDARY_LINE_END the returned string * is from the line end at or after the offset to the next line start. * @param offset Position. * @param boundary_type An Atk::TextBoundary. * @param start_offset The start offset of the returned string. * @param end_offset The end offset of the returned string. * @return The text after @a offset bounded by the specified @a boundary_type . */ Glib::ustring get_text_after_offset(int offset, TextBoundary boundary_type, int& start_offset, int& end_offset) const; /** Gets the specified text. * * If the boundary_type if ATK_TEXT_BOUNDARY_CHAR the character at the * offset is returned. * * If the boundary_type is ATK_TEXT_BOUNDARY_WORD_START the returned string * is from the word start at or before the offset to the word start after * the offset. * * The returned string will contain the word at the offset if the offset * is inside a word and will contain the word before the offset if the * offset is not inside a word. * * If the boundary_type is ATK_TEXT_BOUNDARY_WORD_END the returned string * is from the word end before the offset to the word end at or after the * offset. * * The returned string will contain the word at the offset if the offset * is inside a word and will contain the word after to the offset if the * offset is not inside a word. * * If the boundary type is ATK_TEXT_BOUNDARY_SENTENCE_START the returned * string is from the sentence start at or before the offset to the sentence * start after the offset. * * The returned string will contain the sentence at the offset if the offset * is inside a sentence and will contain the sentence before the offset * if the offset is not inside a sentence. * * If the boundary_type is ATK_TEXT_BOUNDARY_SENTENCE_END the returned string * is from the sentence end before the offset to the sentence end at or * after the offset. * * The returned string will contain the sentence at the offset if the offset * is inside a sentence and will contain the sentence after the offset * if the offset is not inside a sentence. * * If the boundary type is ATK_TEXT_BOUNDARY_LINE_START the returned * string is from the line start at or before the offset to the line * start after the offset. * * If the boundary_type is ATK_TEXT_BOUNDARY_LINE_END the returned string * is from the line end before the offset to the line end at or after * the offset. * @param offset Position. * @param boundary_type An Atk::TextBoundary. * @param start_offset The start offset of the returned string. * @param end_offset The end offset of the returned string. * @return The text at @a offset bounded by the specified @a boundary_type . */ Glib::ustring get_text_at_offset(int offset, TextBoundary boundary_type, int& start_offset, int& end_offset) const; /** Gets the specified text. * * If the boundary_type if ATK_TEXT_BOUNDARY_CHAR the character before the * offset is returned. * * If the boundary_type is ATK_TEXT_BOUNDARY_WORD_START the returned string * is from the word start before the word start before the offset to * the word start before the offset. * * The returned string will contain the word before the offset if the offset * is inside a word and will contain the word before the word before the * offset if the offset is not inside a word. * * If the boundary_type is ATK_TEXT_BOUNDARY_WORD_END the returned string * is from the word end before the word end at or before the offset to the * word end at or before the offset. * * The returned string will contain the word before the offset if the offset * is inside a word or if the offset is not inside a word. * * If the boundary type is ATK_TEXT_BOUNDARY_SENTENCE_START the returned * string is from the sentence start before the sentence start before * the offset to the sentence start before the offset. * * The returned string will contain the sentence before the offset if the * offset is inside a sentence and will contain the sentence before the * sentence before the offset if the offset is not inside a sentence. * * If the boundary_type is ATK_TEXT_BOUNDARY_SENTENCE_END the returned string * is from the sentence end before the sentence end at or before the offset to * the sentence end at or before the offset. * * The returned string will contain the sentence before the offset if the * offset is inside a sentence or if the offset is not inside a sentence. * * If the boundary type is ATK_TEXT_BOUNDARY_LINE_START the returned * string is from the line start before the line start ar or before the offset * to the line start ar or before the offset. * * If the boundary_type is ATK_TEXT_BOUNDARY_LINE_END the returned string * is from the line end before the line end before the offset to the * line end before the offset. * @param offset Position. * @param boundary_type An Atk::TextBoundary. * @param start_offset The start offset of the returned string. * @param end_offset The end offset of the returned string. * @return The text before @a offset bounded by the specified @a boundary_type . */ Glib::ustring get_text_before_offset(int offset, TextBoundary boundary_type, int& start_offset, int& end_offset) const; /** Gets the offset position of the caret (cursor). * @return The offset position of the caret (cursor). */ int get_caret_offset() const; /** Get the bounding box containing the glyph representing the character at * a particular text offset. * @param offset The offset of the text character for which bounding information is required. * @param x Pointer for the x cordinate of the bounding box. * @param y Pointer for the y cordinate of the bounding box. * @param width Pointer for the width of the bounding box. * @param height Pointer for the height of the bounding box. * @param coords Specify whether coordinates are relative to the screen or widget window. */ void get_character_extents(int offset, int& x, int& y, int& width, int& height, CoordType coords) const; /** Creates an Atk::AttributeSet which consists of the attributes explicitly * set at the position @a offset in the text. @a start_offset and @a end_offset are * set to the start and end of the range around @a offset where the attributes are * invariant. See the enum AtkTextAttribute for types of text attributes that * can be returned. Note that other attributes may also be returned. * @param offset The offset at which to get the attributes. * @param start_offset The address to put the start offset of the range. * @param end_offset The address to put the end offset of the range. * @return An Atk::AttributeSet which contains the attributes explicitly set * at @a offset . */ AttributeSet get_run_attributes(int offset, int& start_offset, int& end_offset) const; /** Creates an Atk::AttributeSet which consists of the default values of * attributes for the text. See the enum AtkTextAttribute for types of text * attributes that can be returned. Note that other attributes may also be * returned. * @return An Atk::AttributeSet which contains the default values of attributes. * at @a offset . */ AttributeSet get_default_attributes() const; /** Gets the character count. * @return The number of characters. */ int get_character_count() const; /** Gets the offset of the character located at coordinates @a x and @a y . @a x and @a y * are interpreted as being relative to the screen or this widget's window * depending on @a coords . * @param x Screen x-position of character. * @param y Screen y-position of character. * @param coords Specify whether coordinates are relative to the screen or * widget window. * @return The offset to the character which is located at * the specified @a x and @a y coordinates. */ int get_offset_at_point(int x, int y, CoordType coords) const; /** Gets the number of selected regions. * @return The number of selected regions, or -1 if a failure * occurred. */ int get_n_selections() const; /** Gets the text from the specified selection. * @param selection_num The selection number. The selected regions are * assigned numbers that correspond to how far the region is from the * start of the text. The selected region closest to the beginning * of the text region is assigned the number 0, etc. Note that adding, * moving or deleting a selected region can change the numbering. * @param start_offset Passes back the start position of the selected region. * @param end_offset Passes back the end position of the selected region. * @return The selected text. */ Glib::ustring get_selection(int selection_num, int& start_offset, int& end_offset) const; /** Adds a selection bounded by the specified offsets. * @param start_offset The start position of the selected region. * @param end_offset The end position of the selected region. * @return true if success, false otherwise. */ bool add_selection(int start_offset, int end_offset); /** Removes the specified selection. * @param selection_num The selection number. The selected regions are * assigned numbers that correspond to how far the region is from the * start of the text. The selected region closest to the beginning * of the text region is assigned the number 0, etc. Note that adding, * moving or deleting a selected region can change the numbering. * @return true if success, false otherwise. */ bool remove_selection(int selection_num); /** Changes the start and end offset of the specified selection. * @param selection_num The selection number. The selected regions are * assigned numbers that correspond to how far the region is from the * start of the text. The selected region closest to the beginning * of the text region is assigned the number 0, etc. Note that adding, * moving or deleting a selected region can change the numbering. * @param start_offset The new start position of the selection. * @param end_offset The new end position of the selection. * @return true if success, false otherwise. */ bool set_selection(int selection_num, int start_offset, int end_offset); /** Sets the caret (cursor) position to the specified @a offset . * @param offset Position. * @return true if success, false otherwise. */ bool set_caret_offset(int offset); typedef AtkTextRectangle Rectangle; /** Get the bounding box for text within the specified range. * @param start_offset The offset of the first text character for which boundary * information is required. * @param end_offset The offset of the text character after the last character * for which boundary information is required. * @param coord_type Specify whether coordinates are relative to the screen or widget window. * @param rect A pointer to a AtkTextRectangle which is filled in by this function. */ void get_range_extents(int start_offset, int end_offset, CoordType coord_type, Rectangle& rect); /** Get the ranges of text in the specified bounding box. * @param rect An AtkTextRectagle giving the dimensions of the bounding box. * @param coord_type Specify whether coordinates are relative to the screen or widget window. * @param x_clip_type Specify the horizontal clip type. * @param y_clip_type Specify the vertical clip type. * @return Array of AtkTextRange. The last element of the array returned * by this function will be 0. */ AtkTextRange** get_bounded_ranges(const Rectangle& rect, CoordType coord_type, TextClipType x_clip_type, TextClipType y_clip_type); Glib::SignalProxy2< void,int,int > signal_text_changed(); Glib::SignalProxy1< void,int > signal_text_caret_moved(); Glib::SignalProxy0< void > signal_text_selection_changed(); Glib::SignalProxy0< void > signal_text_attributes_changed(); protected: virtual Glib::ustring get_text_vfunc(int start_offset, int end_offset) const; virtual gunichar get_character_at_offset_vfunc(int offset) const; virtual Glib::ustring get_text_after_offset_vfunc(int offset, TextBoundary boundary_type, int& start_offset, int& end_offset) const; virtual Glib::ustring get_text_at_offset_vfunc(int offset, TextBoundary boundary_type, int& start_offset, int& end_offset) const; virtual Glib::ustring get_text_before_offset_vfunc(int offset, TextBoundary boundary_type, int& start_offset, int& end_offset) const; virtual int get_caret_offset_vfunc() const; virtual void get_character_extents_vfunc(int offset, int& x, int& y, int& width, int& height, CoordType coords) const; virtual AtkAttributeSet* get_run_attributes_vfunc(int offset, int& start_offset, int& end_offset) const; virtual AtkAttributeSet* get_default_attributes_vfunc() const; virtual int get_character_count_vfunc() const; virtual int get_offset_at_point_vfunc(int x, int y, CoordType coords) const; virtual int get_n_selections_vfunc() const; virtual Glib::ustring get_selection_vfunc(int selection_num, int& start_offset, int& end_offset) const; virtual bool add_selection_vfunc(int start_offset, int end_offset); virtual bool remove_selection_vfunc(int selection_num); virtual bool set_selection_vfunc(int selection_num, int start_offset, int end_offset); virtual bool set_caret_offset_vfunc(int offset); //TODO: Add get_range_extents(), and get_bounded_ranges() vfuncs when we can break ABI. public: public: //C++ methods used to invoke GTK+ virtual functions: protected: //GTK+ Virtual Functions (override these to change behaviour): //Default Signal Handlers:: virtual void on_text_changed(int position, int length); virtual void on_text_caret_moved(int location); virtual void on_text_selection_changed(); virtual void on_text_attributes_changed(); }; } // namespace Atk namespace Glib { /** @relates Atk::Text * @param object The C instance * @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref. * @result A C++ instance that wraps this C instance. */ Glib::RefPtr wrap(AtkText* object, bool take_copy = false); } // namespace Glib #endif /* _ATKMM_TEXT_H */