""".. versionadded:: 0.0.2
Control the macOS Calculator application using JXA-like syntax.
"""
from PyXA import XABase
[docs]
class XACalculatorApplication(XABase.XAApplication):
"""A class for managing and interacting with Calculator.app.
.. versionadded:: 0.0.2
"""
def __init__(self, properties):
super().__init__(properties)
self.__xa_btns = None
def __load_buttons(self):
"""Loads references to primary buttons of the calculator.
.. versionadded:: 0.0.2
"""
buttons = self.front_window.groups()[-1].buttons()
self.__xa_btns = {
"0": buttons[4],
"1": buttons[5],
"2": buttons[0],
"3": buttons[2],
"4": buttons[10],
"5": buttons[7],
"6": buttons[11],
"7": buttons[15],
"8": buttons[14],
"9": buttons[3],
".": buttons[9],
"+": buttons[12],
"-": buttons[6],
"*": buttons[8],
"/": buttons[17],
"%": buttons[13],
"~": buttons[18],
"=": buttons[1],
"c": buttons[16],
}
## Menu Bar
# Calculator Menu
[docs]
def open_about_panel(self):
"""Opens the "About Calculator" panel. Mimics clicking File->About Calculator.
.. versionadded:: 0.0.2
"""
self.menu_bars()[0].menu_bar_items()[1].menus()[0].menu_items()[0].press()
# File Menu
[docs]
def save_tape(self):
"""Opens the "save tape" dialog. Mimics clicking File->Save Tape As...
.. versionadded:: 0.0.2
"""
self.menu_bars()[0].menu_bar_items()[2].menus()[0].menu_items()[2].press()
[docs]
def open_page_setup(self):
"""Opens the page setup dialog. Mimics clicking File->Page Setup...
.. versionadded:: 0.0.2
"""
self.menu_bars()[0].menu_bar_items()[2].menus()[0].menu_items()[4].press()
[docs]
def print_tape(self):
"""Opens the print tape dialog. Mimics clicking File->Print Tape...
.. versionadded:: 0.0.2
"""
self.menu_bars()[0].menu_bar_items()[2].menus()[0].menu_items()[5].press()
# Edit Menu
[docs]
def copy_value(self):
"""Copies the current value of the calculator result. Mimics clicking Edit->Copy.
.. versionadded:: 0.0.2
"""
self.menu_bars()[0].menu_bar_items()[3].menus()[0].menu_items()[4].press()
# View Menu
[docs]
def show_basic_calculator(self):
"""Switches the view to the basic calculator. Mimics clicking View->Basic.
.. versionadded:: 0.0.2
"""
self.menu_bars()[0].menu_bar_items()[4].menus()[0].menu_items()[0].press()
[docs]
def show_scientific_calculator(self):
"""Switches the view to the scientific calculator. Mimics clicking View->Scientific.
.. versionadded:: 0.0.2
"""
self.menu_bars()[0].menu_bar_items()[4].menus()[0].menu_items()[1].press()
[docs]
def show_programmer_calculator(self):
"""Switches the view to the programmer calculator. Mimics clicking View->Programmer.
.. versionadded:: 0.0.2
"""
self.menu_bars()[0].menu_bar_items()[4].menus()[0].menu_items()[2].press()
[docs]
def toggle_thousands_separators(self):
"""Toggles whether comma separators are shown at thousand intervals. Mimics clicking View->Show Thousands Separators.
.. versionadded:: 0.0.2
"""
self.menu_bars()[0].menu_bar_items()[4].menus()[0].menu_items()[4].press()
[docs]
def toggle_RPN_mode(self):
"""Toggles Reverse Polish Notation. Mimics clicking View->RPN Mode.
.. versionadded:: 0.0.2
"""
self.menu_bars()[0].menu_bar_items()[4].menus()[0].menu_items()[6].press()
# Window Menu
[docs]
def show_paper_tape(self):
"""Opens the paper tape window. Mimics clicking Window->Show Paper Tape.
.. versionadded:: 0.0.2
"""
self.menu_bars()[0].menu_bar_items()[7].menus()[0].menu_items()[6].press()
# Help Menu
[docs]
def show_help(self):
"""Opens the Calculator help window. Mimics clicking Help->Calculator Help.add()
.. versionadded:: 0.0.2
"""
self.menu_bars()[0].menu_bar_items()[8].menus()[0].menu_items()[1].press()
# Actions
[docs]
def clear_value(self):
"""Clears the current calculator output. Mimics clicking the "C" (clear) button.
.. versionadded:: 0.0.2
"""
if self.__xa_btns is None:
self.__load_buttons()
self.__xa_btns["c"].press()
# Misc Methods
[docs]
def current_value(self) -> float:
"""Retrieves the current value of the calculator output.
:return: The calculator's current displayed value
:rtype: float
.. versionadded:: 0.0.2
"""
return float(self.front_window.groups()[0].static_texts()[0].value.get())