From addb2f0ea7693e78b2a52dc8b3fbabfdcf59e92d Mon Sep 17 00:00:00 2001 From: Tim Wo Date: Tue, 2 Dec 2003 07:20:04 +0000 Subject: a11y implementations for ECellText. new functions to support corresponding 2003-12-02 Tim Wo * gal/a11y/e-table/gal-a11y-e-cell-text.c: (ect_get_text), (ect_get_character_at_offset), (ect_get_caret_offset), (ect_get_character_count), (ect_get_n_selections), (ect_get_selection), (ect_add_selection), (ect_remove_selection), (ect_set_selection), (ect_set_caret_offset), (ect_set_text_contents), (ect_insert_text), (ect_copy_text), (ect_delete_text), (ect_cut_text), (ect_paste_text), (ect_class_init): a11y implementations for ECellText. * gal/e-table/e-cell-text.c: (e_cell_text_set_selection), (e_cell_text_get_selection), (e_cell_text_copy_clipboard), (e_cell_text_paste_clipboard), (e_cell_text_delete_selection): new functions to support corresponding atk operations. * gal/e-table/e-cell-text.h: some APIs added to support atk operations. svn path=/trunk/; revision=23568 --- widgets/table/e-cell-text.c | 180 ++++++++++++++++++++++++++++++++++++++++++++ widgets/table/e-cell-text.h | 15 ++++ 2 files changed, 195 insertions(+) (limited to 'widgets') diff --git a/widgets/table/e-cell-text.c b/widgets/table/e-cell-text.c index 5a0da69a7c..11c5429754 100644 --- a/widgets/table/e-cell-text.c +++ b/widgets/table/e-cell-text.c @@ -2574,3 +2574,183 @@ e_cell_text_get_color (ECellTextView *cell_view, gchar *color_spec) return color; } +/** + * e_cell_text_set_selection: + * @cell_view: the given cell view + * @col: column of the given cell in the view + * @row: row of the given cell in the view + * @start: start offset of the selection + * @end: end offset of the selection + * + * Sets the selection of given text cell. + * If the current editing cell is not the given cell, this function + * will return FALSE; + * + * If success, the [start, end) part of the text will be selected. + * + * This API is most likely to be used by a11y implementations. + * + * Returns: whether the action is successful. + */ +gboolean +e_cell_text_set_selection (ECellView *cell_view, + gint col, + gint row, + gint start, + gint end) +{ + ECellTextView *ectv; + CellEdit *edit; + ETextEventProcessorCommand command1, command2; + + ectv = (ECellTextView *)cell_view; + edit = ectv->edit; + if (!edit) + return FALSE; + + if (edit->view_col != col || edit->row != row) + return FALSE; + + command1.action = E_TEP_MOVE; + command1.position = E_TEP_VALUE; + command1.value = start; + e_cell_text_view_command (edit->tep, &command1, edit); + + command2.action = E_TEP_SELECT; + command2.position = E_TEP_VALUE; + command2.value = end; + e_cell_text_view_command (edit->tep, &command2, edit); + + return TRUE; +} + +/** + * e_cell_text_get_selection: + * @cell_view: the given cell view + * @col: column of the given cell in the view + * @row: row of the given cell in the view + * @start: a pointer to an int value indicates the start offset of the selection + * @end: a pointer to an int value indicates the end offset of the selection + * + * Gets the selection of given text cell. + * If the current editing cell is not the given cell, this function + * will return FALSE; + * + * This API is most likely to be used by a11y implementations. + * + * Returns: whether the action is successful. + */ +gboolean +e_cell_text_get_selection (ECellView *cell_view, + gint col, + gint row, + gint *start, + gint *end) +{ + ECellTextView *ectv; + CellEdit *edit; + + ectv = (ECellTextView *)cell_view; + edit = ectv->edit; + if (!edit) + return FALSE; + + if (edit->view_col != col || edit->row != row) + return FALSE; + + if (start) + *start = edit->selection_start; + if (end) + *end = edit->selection_end; + return TRUE; +} + +/** + * e_cell_text_copy_clipboard: + * @cell_view: the given cell view + * @col: column of the given cell in the view + * @row: row of the given cell in the view + * + * Copys the selected text to clipboard. + * + * This API is most likely to be used by a11y implementations. + */ +void +e_cell_text_copy_clipboard (ECellView *cell_view, gint col, gint row) +{ + ECellTextView *ectv; + CellEdit *edit; + ETextEventProcessorCommand command; + + ectv = (ECellTextView *)cell_view; + edit = ectv->edit; + if (!edit) + return; + + if (edit->view_col != col || edit->row != row) + return; + + command.action = E_TEP_COPY; + command.time = GDK_CURRENT_TIME; + e_cell_text_view_command (edit->tep, &command, edit); +} + +/** + * e_cell_text_paste_clipboard: + * @cell_view: the given cell view + * @col: column of the given cell in the view + * @row: row of the given cell in the view + * + * Pastes the text from the clipboardt. + * + * This API is most likely to be used by a11y implementations. + */ +void +e_cell_text_paste_clipboard (ECellView *cell_view, gint col, gint row) +{ + ECellTextView *ectv; + CellEdit *edit; + ETextEventProcessorCommand command; + + ectv = (ECellTextView *)cell_view; + edit = ectv->edit; + if (!edit) + return; + + if (edit->view_col != col || edit->row != row) + return; + + command.action = E_TEP_PASTE; + command.time = GDK_CURRENT_TIME; + e_cell_text_view_command (edit->tep, &command, edit); +} + +/** + * e_cell_text_delete_selection: + * @cell_view: the given cell view + * @col: column of the given cell in the view + * @row: row of the given cell in the view + * + * Deletes the selected text of the cell. + * + * This API is most likely to be used by a11y implementations. + */ +void +e_cell_text_delete_selection (ECellView *cell_view, gint col, gint row) +{ + ECellTextView *ectv; + CellEdit *edit; + ETextEventProcessorCommand command; + + ectv = (ECellTextView *)cell_view; + edit = ectv->edit; + if (!edit) + return; + + if (edit->view_col != col || edit->row != row) + return; + + command.action = E_TEP_DELETE; + command.position = E_TEP_SELECTION; + e_cell_text_view_command (edit->tep, &command, edit); +} diff --git a/widgets/table/e-cell-text.h b/widgets/table/e-cell-text.h index 6c51f32fd8..5310ffc5f9 100644 --- a/widgets/table/e-cell-text.h +++ b/widgets/table/e-cell-text.h @@ -101,6 +101,21 @@ void e_cell_text_free_text (ECellText *cell, char *text); /* Sets the ETableModel value, based on the given string. */ void e_cell_text_set_value (ECellText *cell, ETableModel *model, int col, int row, const char *text); +/* Sets the selection of given text cell */ +gboolean e_cell_text_set_selection (ECellView *cell_view, gint col, gint row, gint start, gint end); + +/* Gets the selection of given text cell */ +gboolean e_cell_text_get_selection (ECellView *cell_view, gint col, gint row, gint *start, gint *end); + +/* Copys the selected text to the clipboard */ +void e_cell_text_copy_clipboard (ECellView *cell_view, gint col, gint row); + +/* Pastes the text from the clipboard */ +void e_cell_text_paste_clipboard (ECellView *cell_view, gint col, gint row); + +/* Deletes selected text */ +void e_cell_text_delete_selection (ECellView *cell_view, gint col, gint row); + G_END_DECLS #endif /* _E_CELL_TEXT_H_ */ -- cgit