diff options
Diffstat (limited to 'libs/gtkmm2/atk/atkmm/text.h')
-rw-r--r-- | libs/gtkmm2/atk/atkmm/text.h | 687 |
1 files changed, 687 insertions, 0 deletions
diff --git a/libs/gtkmm2/atk/atkmm/text.h b/libs/gtkmm2/atk/atkmm/text.h new file mode 100644 index 0000000000..86dee7ee39 --- /dev/null +++ b/libs/gtkmm2/atk/atkmm/text.h @@ -0,0 +1,687 @@ +// -*- c++ -*- +// Generated by gtkmmproc -- DO NOT MODIFY! +#ifndef _ATKMM_TEXT_H +#define _ATKMM_TEXT_H + +#include <glibmm.h> + +/* $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 <atkmm/component.h> /* for Atk::CoordType */ +#include <atk/atktext.h> + + +#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<CTypeNonConst>(item)); } +}; + +typedef Glib::SListHandle<Attribute, AttributeTraits> 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<Atk::BuiltinTextAttribute> : public Glib::Value_Enum<Atk::BuiltinTextAttribute> +{ +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<Atk::TextAttribute> : public Glib::Value_Enum<Atk::TextAttribute> +{ +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<Atk::TextBoundary> : public Glib::Value_Enum<Atk::TextBoundary> +{ +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<Atk::TextClipType> : public Glib::Value_Enum<Atk::TextClipType> +{ +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<AtkText*>(gobject_); } + + ///Provides access to the underlying C GObject. + const AtkText* gobj() const { return reinterpret_cast<AtkText*>(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 <tt>true</tt> if success, <tt>false</tt> 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 <tt>true</tt> if success, <tt>false</tt> 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 <tt>true</tt> if success, <tt>false</tt> 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 <tt>true</tt> if success, <tt>false</tt> 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 <tt>0</tt>. + */ + 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<Atk::Text> wrap(AtkText* object, bool take_copy = false); + +} // namespace Glib + +#endif /* _ATKMM_TEXT_H */ + |