%PDF- %PDF-
Direktori : /lib/python3/dist-packages/orca/ |
Current File : //lib/python3/dist-packages/orca/ax_utilities_role.py |
# Utilities for obtaining role-related information. # # Copyright 2023 Igalia, S.L. # Author: Joanmarie Diggs <jdiggs@igalia.com> # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., Franklin Street, Fifth Floor, # Boston MA 02110-1301 USA. """ Utilities for obtaining role-related information. These utilities are app-type- and toolkit-agnostic. Utilities that might have different implementations or results depending on the type of app (e.g. terminal, chat, web) or toolkit (e.g. Qt, Gtk) should be in script_utilities.py file(s). N.B. There are currently utilities that should never have custom implementations that live in script_utilities.py files. These will be moved over time. """ __id__ = "$Id$" __version__ = "$Revision$" __date__ = "$Date$" __copyright__ = "Copyright (c) 2023 Igalia, S.L." __license__ = "LGPL" import gi gi.require_version("Atspi", "2.0") from gi.repository import Atspi from .ax_object import AXObject class AXUtilitiesRole: """Utilities for obtaining role-related information.""" @staticmethod def get_dialog_roles(include_alert_as_dialog=True): """Returns the list of roles we consider documents""" roles = [Atspi.Role.COLOR_CHOOSER, Atspi.Role.DIALOG, Atspi.Role.FILE_CHOOSER] if include_alert_as_dialog: roles.append(Atspi.Role.ALERT) return roles @staticmethod def get_document_roles(): """Returns the list of roles we consider documents""" roles = [Atspi.Role.DOCUMENT_EMAIL, Atspi.Role.DOCUMENT_FRAME, Atspi.Role.DOCUMENT_PRESENTATION, Atspi.Role.DOCUMENT_SPREADSHEET, Atspi.Role.DOCUMENT_TEXT, Atspi.Role.DOCUMENT_WEB] return roles @staticmethod def get_form_field_roles(): """Returns the list of roles we consider form fields""" roles = [Atspi.Role.CHECK_BOX, Atspi.Role.RADIO_BUTTON, Atspi.Role.COMBO_BOX, Atspi.Role.DOCUMENT_FRAME, # rich text editing pred recommended Atspi.Role.TEXT, # predicate recommended to check it is editable Atspi.Role.LIST_BOX, Atspi.Role.ENTRY, Atspi.Role.PASSWORD_TEXT, Atspi.Role.PUSH_BUTTON, Atspi.Role.SPIN_BUTTON] return roles @staticmethod def get_menu_item_roles(): """Returns the list of roles we consider menu items""" roles = [Atspi.Role.MENU_ITEM, Atspi.Role.CHECK_MENU_ITEM, Atspi.Role.RADIO_MENU_ITEM, Atspi.Role.TEAROFF_MENU_ITEM] return roles @staticmethod def get_menu_related_roles(): """Returns the list of roles we consider menu related""" roles = [Atspi.Role.MENU, Atspi.Role.MENU_BAR, Atspi.Role.POPUP_MENU, Atspi.Role.MENU_ITEM, Atspi.Role.CHECK_MENU_ITEM, Atspi.Role.RADIO_MENU_ITEM, Atspi.Role.TEAROFF_MENU_ITEM] return roles @staticmethod def get_roles_to_exclude_from_clickables_list(): """Returns the list of roles we want to exclude from the list of clickables""" roles = [Atspi.Role.COMBO_BOX, Atspi.Role.ENTRY, Atspi.Role.LIST_BOX, Atspi.Role.MENU, Atspi.Role.MENU_ITEM, Atspi.Role.CHECK_MENU_ITEM, Atspi.Role.RADIO_MENU_ITEM, Atspi.Role.PAGE_TAB, Atspi.Role.PAGE_TAB_LIST, Atspi.Role.PASSWORD_TEXT, Atspi.Role.PROGRESS_BAR, Atspi.Role.SLIDER, Atspi.Role.SPIN_BUTTON, Atspi.Role.TOOL_BAR, Atspi.Role.TREE_ITEM, Atspi.Role.TREE_TABLE, Atspi.Role.TREE] return roles @staticmethod def get_set_container_roles(): """Returns the list of roles we consider a set container""" roles = [Atspi.Role.LIST, Atspi.Role.MENU, Atspi.Role.PAGE_TAB_LIST, Atspi.Role.TABLE, Atspi.Role.TREE, Atspi.Role.TREE_TABLE] return roles @staticmethod def get_table_cell_roles(include_headers=True): """Returns the list of roles we consider table cells""" roles = [Atspi.Role.TABLE_CELL] if include_headers: roles.extend([Atspi.Role.TABLE_COLUMN_HEADER, Atspi.Role.TABLE_ROW_HEADER, Atspi.Role.COLUMN_HEADER, Atspi.Role.ROW_HEADER]) return roles @staticmethod def get_table_header_roles(): """Returns the list of roles we consider table headers""" roles = [Atspi.Role.TABLE_COLUMN_HEADER, Atspi.Role.TABLE_ROW_HEADER, Atspi.Role.COLUMN_HEADER, Atspi.Role.ROW_HEADER] return roles @staticmethod def get_table_related_roles(include_caption=False): """Returns the list of roles we consider table related""" roles = [Atspi.Role.TABLE, Atspi.Role.TABLE_CELL, Atspi.Role.TABLE_COLUMN_HEADER, Atspi.Role.TABLE_ROW_HEADER, Atspi.Role.COLUMN_HEADER, Atspi.Role.ROW_HEADER] if include_caption: roles.append(Atspi.Role.CAPTION) return roles @staticmethod def get_tree_related_roles(): """Returns the list of roles we consider tree related""" roles = [Atspi.Role.TREE, Atspi.Role.TREE_ITEM, Atspi.Role.TREE_TABLE] return roles @staticmethod def get_widget_roles(): """Returns the list of roles we consider widgets""" roles = [Atspi.Role.CHECK_BOX, Atspi.Role.COMBO_BOX, Atspi.Role.ENTRY, Atspi.Role.PASSWORD_TEXT, Atspi.Role.PUSH_BUTTON, Atspi.Role.RADIO_BUTTON, Atspi.Role.SLIDER, Atspi.Role.SPIN_BUTTON, Atspi.Role.TEXT, # predicate recommended to check it is editable Atspi.Role.TOGGLE_BUTTON] return roles @staticmethod def have_same_role(obj1, obj2): """Returns True if obj1 and obj2 have the same role""" return AXObject.get_role(obj1) == AXObject.get_role(obj2) @staticmethod def is_accelerator_label(obj, role=None): """Returns True if obj has the accelerator label role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.ACCELERATOR_LABEL @staticmethod def is_alert(obj, role=None): """Returns True if obj has the alert role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.ALERT @staticmethod def is_animation(obj, role=None): """Returns True if obj has the animation role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.ANIMATION @staticmethod def is_application(obj, role=None): """Returns True if obj has the application role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.APPLICATION @staticmethod def is_arrow(obj, role=None): """Returns True if obj has the arrow role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.ARROW @staticmethod def is_article(obj, role=None): """Returns True if obj has the article role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.ARTICLE @staticmethod def is_audio(obj, role=None): """Returns True if obj has the audio role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.AUDIO @staticmethod def is_autocomplete(obj, role=None): """Returns True if obj has the autocomplete role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.AUTOCOMPLETE @staticmethod def is_block_quote(obj, role=None): """Returns True if obj has the block quote role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.BLOCK_QUOTE @staticmethod def is_button(obj, role=None): """Returns True if obj has the push- or toggle-button role""" if role is None: role = AXObject.get_role(obj) return role in [Atspi.Role.PUSH_BUTTON, Atspi.Role.TOGGLE_BUTTON] @staticmethod def is_calendar(obj, role=None): """Returns True if obj has the calendar role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.CALENDAR @staticmethod def is_canvas(obj, role=None): """Returns True if obj has the canvas role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.CANVAS @staticmethod def is_caption(obj, role=None): """Returns True if obj has the caption role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.CAPTION @staticmethod def is_chart(obj, role=None): """Returns True if obj has the chart role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.CHART @staticmethod def is_check_box(obj, role=None): """Returns True if obj has the checkbox role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.CHECK_BOX @staticmethod def is_check_menu_item(obj, role=None): """Returns True if obj has the check menuitem role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.CHECK_MENU_ITEM @staticmethod def is_color_chooser(obj, role=None): """Returns True if obj has the color_chooser role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.COLOR_CHOOSER @staticmethod def is_column_header(obj, role=None): """Returns True if obj has the column header role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.COLUMN_HEADER @staticmethod def is_combo_box(obj, role=None): """Returns True if obj has the combobox role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.COMBO_BOX @staticmethod def is_comment(obj, role=None): """Returns True if obj has the comment role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.COMMENT @staticmethod def is_content_deletion(obj, role=None): """Returns True if obj has the content deletion role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.CONTENT_DELETION @staticmethod def is_content_insertion(obj, role=None): """Returns True if obj has the content insertion role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.CONTENT_INSERTION @staticmethod def is_date_editor(obj, role=None): """Returns True if obj has the date editor role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DATE_EDITOR @staticmethod def is_default_button(obj, role=None): """Returns True if obj has the push button role the is-default state""" return AXUtilitiesRole.is_push_button(obj, role) \ and AXObject.has_state(obj, Atspi.StateType.IS_DEFAULT) @staticmethod def is_definition(obj, role=None): """Returns True if obj has the definition role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DEFINITION @staticmethod def is_description_list(obj, role=None): """Returns True if obj has the description list role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DESCRIPTION_LIST @staticmethod def is_description_term(obj, role=None): """Returns True if obj has the description term role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DESCRIPTION_TERM @staticmethod def is_description_value(obj, role=None): """Returns True if obj has the description value role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DESCRIPTION_VALUE @staticmethod def is_desktop_frame(obj, role=None): """Returns True if obj has the desktop frame role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DESKTOP_FRAME @staticmethod def is_desktop_icon(obj, role=None): """Returns True if obj has the desktop icon role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DESKTOP_ICON @staticmethod def is_dial(obj, role=None): """Returns True if obj has the dial role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DIAL @staticmethod def is_dialog(obj, role=None): """Returns True if obj has the dialog role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DIALOG @staticmethod def is_dialog_or_alert(obj, role=None): """Returns True if obj has any dialog or alert role""" roles = AXUtilitiesRole.get_dialog_roles(True) if role is None: role = AXObject.get_role(obj) return role in roles @staticmethod def is_directory_pane(obj, role=None): """Returns True if obj has the directory pane role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DIRECTORY_PANE @staticmethod def is_document(obj, role=None): """Returns True if obj has any document-related role""" roles = AXUtilitiesRole.get_document_roles() if role is None: role = AXObject.get_role(obj) return role in roles @staticmethod def is_document_email(obj, role=None): """Returns True if obj has the document email role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DOCUMENT_EMAIL @staticmethod def is_document_frame(obj, role=None): """Returns True if obj has the document frame role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DOCUMENT_FRAME @staticmethod def is_document_presentation(obj, role=None): """Returns True if obj has the document presentation role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DOCUMENT_PRESENTATION @staticmethod def is_document_spreadsheet(obj, role=None): """Returns True if obj has the document spreadsheet role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DOCUMENT_SPREADSHEET @staticmethod def is_document_text(obj, role=None): """Returns True if obj has the document text role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DOCUMENT_TEXT @staticmethod def is_document_web(obj, role=None): """Returns True if obj has the document web role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DOCUMENT_WEB @staticmethod def is_drawing_area(obj, role=None): """Returns True if obj has the drawing area role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.DRAWING_AREA @staticmethod def is_editbar(obj, role=None): """Returns True if obj has the editbar role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.EDITBAR @staticmethod def is_embedded(obj, role=None): """Returns True if obj has the embedded role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.EMBEDDED @staticmethod def is_entry(obj, role=None): """Returns True if obj has the entry role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.ENTRY @staticmethod def is_extended(obj, role=None): """Returns True if obj has the extended role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.EXTENDED @staticmethod def is_file_chooser(obj, role=None): """Returns True if obj has the file chooser role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.FILE_CHOOSER @staticmethod def is_filler(obj, role=None): """Returns True if obj has the filler role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.FILLER @staticmethod def is_focus_traversable(obj, role=None): """Returns True if obj has the focus traversable role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.FOCUS_TRAVERSABLE @staticmethod def is_font_chooser(obj, role=None): """Returns True if obj has the font chooser role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.FONT_CHOOSER @staticmethod def is_footer(obj, role=None): """Returns True if obj has the footer role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.FOOTER @staticmethod def is_footnote(obj, role=None): """Returns True if obj has the footnote role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.FOOTNOTE @staticmethod def is_form(obj, role=None): """Returns True if obj has the form role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.FORM @staticmethod def is_frame(obj, role=None): """Returns True if obj has the frame role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.FRAME @staticmethod def is_glass_pane(obj, role=None): """Returns True if obj has the glass pane role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.GLASS_PANE @staticmethod def is_grouping(obj, role=None): """Returns True if obj has the grouping role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.GROUPING @staticmethod def is_header(obj, role=None): """Returns True if obj has the header role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.HEADER @staticmethod def is_heading(obj, role=None): """Returns True if obj has the heading role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.HEADING @staticmethod def is_html_container(obj, role=None): """Returns True if obj has the html container role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.HTML_CONTAINER @staticmethod def is_horizontal_scrollbar(obj, role=None): """Returns True if obj is a horizontal scrollbar""" return AXUtilitiesRole.is_scroll_bar(obj, role) \ and AXObject.has_state(obj, Atspi.StateType.HORIZONTAL) @staticmethod def is_horizontal_separator(obj, role=None): """Returns True if obj is a horizontal separator""" return AXUtilitiesRole.is_separator(obj, role) \ and AXObject.has_state(obj, Atspi.StateType.HORIZONTAL) @staticmethod def is_horizontal_slider(obj, role=None): """Returns True if obj is a horizontal slider""" return AXUtilitiesRole.is_slider(obj, role) \ and AXObject.has_state(obj, Atspi.StateType.HORIZONTAL) @staticmethod def is_icon(obj, role=None): """Returns True if obj has the icon role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.ICON @staticmethod def is_icon_or_canvas(obj, role=None): """Returns True if obj has the icon or canvas role""" if role is None: role = AXObject.get_role(obj) return role in [Atspi.Role.ICON, Atspi.Role.CANVAS] @staticmethod def is_image(obj, role=None): """Returns True if obj has the image role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.IMAGE @staticmethod def is_image_or_canvas(obj, role=None): """Returns True if obj has the image or canvas role""" if role is None: role = AXObject.get_role(obj) return role in [Atspi.Role.IMAGE, Atspi.Role.CANVAS] @staticmethod def is_image_map(obj, role=None): """Returns True if obj has the image map role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.IMAGE_MAP @staticmethod def is_info_bar(obj, role=None): """Returns True if obj has the info bar role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.INFO_BAR @staticmethod def is_input_method_window(obj, role=None): """Returns True if obj has the input method window role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.INPUT_METHOD_WINDOW @staticmethod def is_internal_frame(obj, role=None): """Returns True if obj has the internal frame role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.INTERNAL_FRAME @staticmethod def is_invalid_role(obj, role=None): """Returns True if obj has the invalid role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.INVALID @staticmethod def is_label(obj, role=None): """Returns True if obj has the label role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.LABEL @staticmethod def is_label_or_caption(obj, role=None): """Returns True if obj has the label or caption role""" if role is None: role = AXObject.get_role(obj) return role in [Atspi.Role.LABEL, Atspi.Role.CAPTION] @staticmethod def is_landmark(obj, role=None): """Returns True if obj has the landmark role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.LANDMARK @staticmethod def is_layered_pane(obj, role=None): """Returns True if obj has the layered pane role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.LAYERED_PANE @staticmethod def is_level_bar(obj, role=None): """Returns True if obj has the level bar role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.LEVEL_BAR @staticmethod def is_link(obj, role=None): """Returns True if obj has the link role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.LINK @staticmethod def is_list(obj, role=None): """Returns True if obj has the list role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.LIST @staticmethod def is_list_box(obj, role=None): """Returns True if obj has the list box role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.LIST_BOX @staticmethod def is_list_item(obj, role=None): """Returns True if obj has the list item role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.LIST_ITEM @staticmethod def is_log(obj, role=None): """Returns True if obj has the log role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.LOG @staticmethod def is_mark(obj, role=None): """Returns True if obj has the mark role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.MARK @staticmethod def is_marquee(obj, role=None): """Returns True if obj has the marquee role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.MARQUEE @staticmethod def is_math(obj, role=None): """Returns True if obj has the math role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.MATH @staticmethod def is_math_fraction(obj, role=None): """Returns True if obj has the math fraction role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.MATH_FRACTION @staticmethod def is_math_root(obj, role=None): """Returns True if obj has the math root role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.MATH_ROOT @staticmethod def is_menu(obj, role=None): """Returns True if obj has the menu role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.MENU @staticmethod def is_menu_bar(obj, role=None): """Returns True if obj has the menubar role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.MENU_BAR @staticmethod def is_menu_item(obj, role=None): """Returns True if obj has the menu item role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.MENU_ITEM @staticmethod def is_menu_item_of_any_kind(obj, role=None): """Returns True if obj has any menu item role""" roles = AXUtilitiesRole.get_menu_item_roles() if role is None: role = AXObject.get_role(obj) return role in roles @staticmethod def is_menu_related(obj, role=None): """Returns True if obj has any menu-related role""" roles = AXUtilitiesRole.get_menu_related_roles() if role is None: role = AXObject.get_role(obj) return role in roles @staticmethod def is_modal_dialog(obj, role=None): """Returns True if obj has the alert or dialog role and modal state""" return AXUtilitiesRole.is_dialog_or_alert(obj, role) \ and AXObject.has_state(obj, Atspi.StateType.MODAL) @staticmethod def is_multi_line_entry(obj, role=None): """Returns True if obj has the entry role and multiline state""" return AXUtilitiesRole.is_entry(obj, role) \ and AXObject.has_state(obj, Atspi.StateType.MULTI_LINE) @staticmethod def is_notification(obj, role=None): """Returns True if obj has the notification role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.NOTIFICATION @staticmethod def is_option_pane(obj, role=None): """Returns True if obj has the option pane role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.OPTION_PANE @staticmethod def is_page(obj, role=None): """Returns True if obj has the page role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.PAGE @staticmethod def is_page_tab(obj, role=None): """Returns True if obj has the page tab role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.PAGE_TAB @staticmethod def is_page_tab_list(obj, role=None): """Returns True if obj has the page tab list role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.PAGE_TAB_LIST @staticmethod def is_page_tab_list_related(obj, role=None): """Returns True if obj has the page tab or page tab list role""" roles = [Atspi.Role.PAGE_TAB_LIST, Atspi.Role.PAGE_TAB] if role is None: role = AXObject.get_role(obj) return role in roles @staticmethod def is_panel(obj, role=None): """Returns True if obj has the panel role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.PANEL @staticmethod def is_paragraph(obj, role=None): """Returns True if obj has the paragraph role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.PARAGRAPH @staticmethod def is_password_text(obj, role=None): """Returns True if obj has the password text role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.PASSWORD_TEXT @staticmethod def is_popup_menu(obj, role=None): """Returns True if obj has the popup menu role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.POPUP_MENU @staticmethod def is_progress_bar(obj, role=None): """Returns True if obj has the progress bar role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.PROGRESS_BAR @staticmethod def is_push_button(obj, role=None): """Returns True if obj has the push button role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.PUSH_BUTTON @staticmethod def is_push_button_menu(obj, role=None): """Returns True if obj has the push button menu role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.PUSH_BUTTON_MENU @staticmethod def is_radio_button(obj, role=None): """Returns True if obj has the radio button role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.RADIO_BUTTON @staticmethod def is_radio_menu_item(obj, role=None): """Returns True if obj has the radio menu item role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.RADIO_MENU_ITEM @staticmethod def is_rating(obj, role=None): """Returns True if obj has the rating role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.RATING @staticmethod def is_redundant_object(obj, role=None): """Returns True if obj has the redundant object role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.REDUNDANT_OBJECT @staticmethod def is_root_pane(obj, role=None): """Returns True if obj has the root pane role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.ROOT_PANE @staticmethod def is_row_header(obj, role=None): """Returns True if obj has the row header role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.ROW_HEADER @staticmethod def is_ruler(obj, role=None): """Returns True if obj has the ruler role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.RULER @staticmethod def is_scroll_bar(obj, role=None): """Returns True if obj has the scrollbar role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.SCROLL_BAR @staticmethod def is_scroll_pane(obj, role=None): """Returns True if obj has the scroll pane role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.SCROLL_PANE @staticmethod def is_section(obj, role=None): """Returns True if obj has the section role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.SECTION @staticmethod def is_separator(obj, role=None): """Returns True if obj has the separator role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.SEPARATOR @staticmethod def is_single_line_entry(obj, role=None): """Returns True if obj has the entry role and multiline state""" return AXUtilitiesRole.is_entry(obj, role) \ and AXObject.has_state(obj, Atspi.StateType.SINGLE_LINE) @staticmethod def is_slider(obj, role=None): """Returns True if obj has the slider role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.SLIDER @staticmethod def is_spin_button(obj, role=None): """Returns True if obj has the spin button role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.SPIN_BUTTON @staticmethod def is_split_pane(obj, role=None): """Returns True if obj has the split pane role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.SPLIT_PANE @staticmethod def is_static(obj, role=None): """Returns True if obj has the static role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.STATIC @staticmethod def is_status_bar(obj, role=None): """Returns True if obj has the statusbar role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.STATUS_BAR @staticmethod def is_subscript(obj, role=None): """Returns True if obj has the subscript role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.SUBSCRIPT @staticmethod def is_subscript_or_superscript(obj, role=None): """Returns True if obj has the subscript or superscript role""" if role is None: role = AXObject.get_role(obj) return role in [Atspi.Role.SUBSCRIPT, Atspi.Role.SUPERSCRIPT] @staticmethod def is_suggestion(obj, role=None): """Returns True if obj has the suggestion role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.SUGGESTION @staticmethod def is_superscript(obj, role=None): """Returns True if obj has the superscript role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.SUPERSCRIPT @staticmethod def is_table(obj, role=None): """Returns True if obj has the table role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TABLE @staticmethod def is_table_cell(obj, role=None): """Returns True if obj has the table cell role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TABLE_CELL @staticmethod def is_table_cell_or_header(obj, role=None): """Returns True if obj has the table cell or a header-related role""" roles = AXUtilitiesRole.get_table_cell_roles() if role is None: role = AXObject.get_role(obj) return role in roles @staticmethod def is_table_column_header(obj, role=None): """Returns True if obj has the table column header role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TABLE_COLUMN_HEADER @staticmethod def is_table_header(obj, role=None): """Returns True if obj has a table header related role""" roles = AXUtilitiesRole.get_table_header_roles() if role is None: role = AXObject.get_role(obj) return role in roles @staticmethod def is_table_related(obj, role=None, include_caption=False): """Returns True if obj has a table-related role""" roles = AXUtilitiesRole.get_table_related_roles(include_caption) if role is None: role = AXObject.get_role(obj) return role in roles @staticmethod def is_table_row(obj, role=None): """Returns True if obj has the table row role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TABLE_ROW @staticmethod def is_table_row_header(obj, role=None): """Returns True if obj has the table row header role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TABLE_ROW_HEADER @staticmethod def is_tearoff_menu_item(obj, role=None): """Returns True if obj has the tearoff menu item role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TEAROFF_MENU_ITEM @staticmethod def is_terminal(obj, role=None): """Returns True if obj has the terminal role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TERMINAL @staticmethod def is_text(obj, role=None): """Returns True if obj has the text role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TEXT @staticmethod def is_text_input(obj, role=None): """Returns True if obj has any role associated with textual input""" roles = [Atspi.Role.ENTRY, Atspi.Role.PASSWORD_TEXT, Atspi.Role.SPIN_BUTTON] if role is None: role = AXObject.get_role(obj) return role in roles @staticmethod def is_timer(obj, role=None): """Returns True if obj has the timer role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TIMER @staticmethod def is_title_bar(obj, role=None): """Returns True if obj has the titlebar role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TITLE_BAR @staticmethod def is_toggle_button(obj, role=None): """Returns True if obj has the toggle button role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TOGGLE_BUTTON @staticmethod def is_tool_bar(obj, role=None): """Returns True if obj has the toolbar role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TOOL_BAR @staticmethod def is_tool_tip(obj, role=None): """Returns True if obj has the tooltip role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TOOL_TIP @staticmethod def is_tree(obj, role=None): """Returns True if obj has the tree role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TREE @staticmethod def is_tree_or_tree_table(obj, role=None): """Returns True if obj has the tree or tree table role""" if role is None: role = AXObject.get_role(obj) return role in [Atspi.Role.TREE, Atspi.Role.TREE_TABLE] @staticmethod def is_tree_related(obj, role=None): """Returns True if obj has a tree-related role""" roles = [Atspi.Role.TREE, Atspi.Role.TREE_ITEM, Atspi.Role.TREE_TABLE] if role is None: role = AXObject.get_role(obj) return role in roles @staticmethod def is_tree_item(obj, role=None): """Returns True if obj has the tree item role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TREE_ITEM @staticmethod def is_tree_table(obj, role=None): """Returns True if obj has the tree table role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.TREE_TABLE @staticmethod def is_unknown(obj, role=None): """Returns True if obj has the unknown role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.UNKNOWN @staticmethod def is_unknown_or_redundant(obj, role=None): """Returns True if obj has the unknown or redundant object role""" if role is None: role = AXObject.get_role(obj) return role in [Atspi.Role.UNKNOWN, Atspi.Role.REDUNDANT_OBJECT] @staticmethod def is_vertical_scrollbar(obj, role=None): """Returns True if obj is a vertical scrollbar""" return AXUtilitiesRole.is_scroll_bar(obj, role) \ and AXObject.has_state(obj, Atspi.StateType.VERTICAL) @staticmethod def is_vertical_separator(obj, role=None): """Returns True if obj is a vertical separator""" return AXUtilitiesRole.is_separator(obj, role) \ and AXObject.has_state(obj, Atspi.StateType.VERTICAL) @staticmethod def is_vertical_slider(obj, role=None): """Returns True if obj is a vertical slider""" return AXUtilitiesRole.is_slider(obj, role) \ and AXObject.has_state(obj, Atspi.StateType.VERTICAL) @staticmethod def is_video(obj, role=None): """Returns True if obj has the video role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.VIDEO @staticmethod def is_viewport(obj, role=None): """Returns True if obj has the viewport role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.VIEWPORT @staticmethod def is_window(obj, role=None): """Returns True if obj has the window role""" if role is None: role = AXObject.get_role(obj) return role == Atspi.Role.WINDOW