/* ATK - The Accessibility Toolkit for GTK+ * Copyright 2001 Sun Microsystems Inc. * * 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., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include "config.h" #include "atkeditabletext.h" /** * AtkEditableText: * * The ATK interface implemented by components containing user-editable text content. * * #AtkEditableText should be implemented by UI components which * contain text which the user can edit, via the #AtkObject * corresponding to that component (see #AtkObject). * * #AtkEditableText is a subclass of #AtkText, and as such, an object * which implements #AtkEditableText is by definition an #AtkText * implementor as well. * * See [iface@AtkText] */ GType atk_editable_text_get_type (void) { static GType type = 0; if (!type) { static const GTypeInfo tinfo = { sizeof (AtkEditableTextIface), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, }; type = g_type_register_static (G_TYPE_INTERFACE, "AtkEditableText", &tinfo, 0); } return type; } /** *atk_editable_text_set_run_attributes: *@text: an #AtkEditableText *@attrib_set: an #AtkAttributeSet *@start_offset: start of range in which to set attributes *@end_offset: end of range in which to set attributes * *Sets the attributes for a specified range. See the ATK_ATTRIBUTE *macros (such as #ATK_ATTRIBUTE_LEFT_MARGIN) for examples of attributes *that can be set. Note that other attributes that do not have corresponding *ATK_ATTRIBUTE macros may also be set for certain text widgets. * *Returns: %TRUE if attributes successfully set for the specified *range, otherwise %FALSE **/ gboolean atk_editable_text_set_run_attributes (AtkEditableText *text, AtkAttributeSet *attrib_set, gint start_offset, gint end_offset) { AtkEditableTextIface *iface; g_return_val_if_fail (ATK_IS_EDITABLE_TEXT (text), FALSE); iface = ATK_EDITABLE_TEXT_GET_IFACE (text); if (iface->set_run_attributes) { return (*(iface->set_run_attributes)) (text, attrib_set, start_offset, end_offset); } else { return FALSE; } } /** * atk_editable_text_set_text_contents: * @text: an #AtkEditableText * @string: string to set for text contents of @text * * Set text contents of @text. **/ void atk_editable_text_set_text_contents (AtkEditableText *text, const gchar *string) { AtkEditableTextIface *iface; g_return_if_fail (ATK_IS_EDITABLE_TEXT (text)); iface = ATK_EDITABLE_TEXT_GET_IFACE (text); if (iface->set_text_contents) (*(iface->set_text_contents)) (text, string); } /** * atk_editable_text_insert_text: * @text: an #AtkEditableText * @string: the text to insert * @length: the length of text to insert, in bytes * @position: The caller initializes this to * the position at which to insert the text. After the call it * points at the position after the newly inserted text. * * Insert text at a given position. **/ void atk_editable_text_insert_text (AtkEditableText *text, const gchar *string, gint length, gint *position) { AtkEditableTextIface *iface; g_return_if_fail (ATK_IS_EDITABLE_TEXT (text)); iface = ATK_EDITABLE_TEXT_GET_IFACE (text); if (iface->insert_text) (*(iface->insert_text)) (text, string, length, position); } /** * atk_editable_text_copy_text: * @text: an #AtkEditableText * @start_pos: start position * @end_pos: end position * * Copy text from @start_pos up to, but not including @end_pos * to the clipboard. **/ void atk_editable_text_copy_text (AtkEditableText *text, gint start_pos, gint end_pos) { AtkEditableTextIface *iface; g_return_if_fail (ATK_IS_EDITABLE_TEXT (text)); iface = ATK_EDITABLE_TEXT_GET_IFACE (text); if (iface->copy_text) (*(iface->copy_text)) (text, start_pos, end_pos); } /** * atk_editable_text_cut_text: * @text: an #AtkEditableText * @start_pos: start position * @end_pos: end position * * Copy text from @start_pos up to, but not including @end_pos * to the clipboard and then delete from the widget. **/ void atk_editable_text_cut_text (AtkEditableText *text, gint start_pos, gint end_pos) { AtkEditableTextIface *iface; g_return_if_fail (ATK_IS_EDITABLE_TEXT (text)); iface = ATK_EDITABLE_TEXT_GET_IFACE (text); if (iface->cut_text) (*(iface->cut_text)) (text, start_pos, end_pos); } /** * atk_editable_text_delete_text: * @text: an #AtkEditableText * @start_pos: start position * @end_pos: end position * * Delete text @start_pos up to, but not including @end_pos. **/ void atk_editable_text_delete_text (AtkEditableText *text, gint start_pos, gint end_pos) { AtkEditableTextIface *iface; g_return_if_fail (ATK_IS_EDITABLE_TEXT (text)); iface = ATK_EDITABLE_TEXT_GET_IFACE (text); if (iface->delete_text) (*(iface->delete_text)) (text, start_pos, end_pos); } /** * atk_editable_text_paste_text: * @text: an #AtkEditableText * @position: position to paste * * Paste text from clipboard to specified @position. **/ void atk_editable_text_paste_text (AtkEditableText *text, gint position) { AtkEditableTextIface *iface; g_return_if_fail (ATK_IS_EDITABLE_TEXT (text)); iface = ATK_EDITABLE_TEXT_GET_IFACE (text); if (iface->paste_text) (*(iface->paste_text)) (text, position); }