1
0
mirror of https://github.com/azure-rtos/guix.git synced 2025-02-04 07:13:17 +08:00

3392 lines
119 KiB
Python

# -*- coding: utf-8 -*-
import os
import sys
import argparse
import ctypes
import time
import test_utils
from subprocess import Popen
import winreg
import logging
import test_constants
import filecmp
import shutil
from io import StringIO
try:
from junit_xml import TestCase
except ImportError:
print("junit_xml module not found. Please install it by running 'pip install junit_xml' if you want to generate JUnit XML report.")
user32 = ctypes.windll.user32
studio_exe_path = "../../../guix_studio/build/vs_2019/Release/guix_studio.exe"
top_windows = []
WM_CLOSE = 0x0010
reset_map_format = False
change_color_table = False
Debug = False
props_ctrl_ids = {}
widget_types = {}
color_formats = {}
font_formats = {}
group_ids = {}
folder_ids = {}
resource_item_types = {}
palette_types = {}
border_types = {}
trigger_types = {}
animation_param_ids = {}
#dictionary of studio window name : handle
studio_windows = {
'main_frame':0,
'Properties Win':0,
'Project View':0,
'Target Screen':0,
'Target View':0,
'Resource View':0,
}
CREATE_NEW_PROJECT_DIALOG = 'Create New Project'
CONFIGURE_PROJECT_DIALOG = 'Configure Project'
SYNERGY_SETTINGS_DIALOG = 'Renesas Graphics Advanced Settings'
CONFIGURE_THEME_DIALOG = 'Configure Themes'
CONFIGURE_LANGUAGE_DIALOG = 'Configure Languages'
EDIT_FONT_DIALOG = 'Edit Font'
EDIT_COLOR_DIALOG = 'Edit Color'
EDIT_PIXELMAP_DIALOG = 'Edit Pixelmap(s)'
STRING_TABLE_EDITOR_DIALOG = 'String Table Editor'
STRING_EXPORT_CONTROL_DIALOG = 'XLIFF/CSV Export Control'
NOTIFICATION_DIALOG = 'Notification'
ERROR_DIALOG = 'Error'
PLEASE_CONFIRM_DIALOG = 'Please Confirm'
RECORD_MACRO_DIALOG = 'Record Macro'
PLAYBACK_MACRO_DIALOG = 'Playback Macro'
EDIT_FOLDER_NAME_DIALOG = 'Edit Folder Name'
GRID_SNAP_SETTING_DIALOG = 'Grid and Snap Settings'
RESOURCE_EXPORT_DIALOG = 'Select Export Resources'
STRING_SCROLL_WHEEL_EDIT_DIALOG = 'String Scroll Wheel Edit'
IMPORT_PROJECT_DIALOG = 'Import Project'
OPTION_DIALOG='Warning'
WAIT_DIALOG='Please Wait...'
EDIT_PALETTE_DIALOG='Edit Palette'
SCREEN_FLOW_EDIT_DIALOG='Edit Screen Flow'
TRIGGER_LIST_EDIT_DIALOG='Edit Trigger List'
TRIGGER_EDIT_DIALOG='trigger edit dialog'
TRIGGER_ACTION_EDIT_DIALOG='trigger action edit dialog'
TRIGGER_ACTION_SELECT_DIALOG='Select Action'
EASING_FUNCTION_SELECT_DIALOG='Select Easing Function'
RICH_TEXT_EDIT_DIALOG='Edit Rich Text'
SPRITE_FRAME_EDIT_DIALOG='Edit Sprite Frames'
SPRITE_FRAME_IMPORT_DIALOG='Import Sprite Frames'
APP_EXECUTION_WINDOW='GUIX'
GW_CHILD = 5
GW_HWNDNEXT = 2
active_dialog_stack = []
#dictionary of studio dialog name: handle
studio_dialogs = {
CREATE_NEW_PROJECT_DIALOG:0,
CONFIGURE_PROJECT_DIALOG:0,
SYNERGY_SETTINGS_DIALOG:0,
CONFIGURE_THEME_DIALOG:0,
CONFIGURE_LANGUAGE_DIALOG:0,
EDIT_FONT_DIALOG:0,
EDIT_COLOR_DIALOG:0,
EDIT_PIXELMAP_DIALOG:0,
STRING_TABLE_EDITOR_DIALOG:0,
STRING_EXPORT_CONTROL_DIALOG:0,
NOTIFICATION_DIALOG:0,
ERROR_DIALOG:0,
PLEASE_CONFIRM_DIALOG:0,
RECORD_MACRO_DIALOG:0,
PLAYBACK_MACRO_DIALOG:0,
EDIT_FOLDER_NAME_DIALOG:0,
GRID_SNAP_SETTING_DIALOG:0,
RESOURCE_EXPORT_DIALOG:0,
STRING_SCROLL_WHEEL_EDIT_DIALOG:0,
IMPORT_PROJECT_DIALOG:0,
OPTION_DIALOG:0,
WAIT_DIALOG:0,
EDIT_PALETTE_DIALOG:0,
SCREEN_FLOW_EDIT_DIALOG:0,
TRIGGER_LIST_EDIT_DIALOG:0,
TRIGGER_EDIT_DIALOG:0,
TRIGGER_ACTION_EDIT_DIALOG:0,
TRIGGER_ACTION_SELECT_DIALOG:0,
EASING_FUNCTION_SELECT_DIALOG:0,
RICH_TEXT_EDIT_DIALOG:0,
SPRITE_FRAME_EDIT_DIALOG:0,
SPRITE_FRAME_IMPORT_DIALOG:0,
APP_EXECUTION_WINDOW:0
}
STUDIO_TEST_MESG = 0x0402
studio_test_index = 0
DEFAULT_TEST_FAILURE_PATH = 'test_failures/'
DEFAULT_OUTPUT_FILE_PATH = "output_files/"
DEFAULT_GOLDEN_FILE_PATH = 'golden_files/'
gen_golden_file_pathname = ""
test_name = ""
gen_golden_file = False
gen_screenshot = False
good_results = []
result_count = [0, 0]
total_failures = 0
CLOSE_WAIT = 0
CLOSE_NO_WAIT = 1
CLOSE_NOTIFICATION_MSG = True
CLOSE_ERROR_MSG = True
selected_screen_name = ""
test_start_time = 0
test_cases = []
test_log_stream = StringIO()
test_log_txt = None
test_log_xml = None
def get_total_failures():
global total_failures
return total_failures
#Compile studio
def studio_compile(msbuild_exe_path, project_sln_path):
#Ensure msbuild exists
if not os.path.isfile(msbuild_exe_path):
raise Exception('Msbuild.exe not found. path=' + msbuild_exe_path)
#Ensure solution file exists
if not os.path.isfile(msbuild_exe_path):
raise Exception('studiox.sln not found. path=' + project_sln_path)
os.system("msbuild " + project_sln_path + " /p:Configuration=Release")
#generate resource files
def generate(gxp_project, studio_release):
path = os.path.realpath(DEFAULT_OUTPUT_FILE_PATH)
if os.path.exists(path) == False:
os.makedirs(path)
if not os.path.isfile(gxp_project):
raise Exception('gxp project not found. path=' + studio_release)
if not os.path.isfile(studio_release):
raise Exception('guix_studio.exe not found. path=' + studio_release)
absolute_path = os.path.abspath(gxp_project)
os.system(os.path.abspath(studio_release) + " -p " + absolute_path + " -n")
#compare two resource files
def compare_file(pathname_1, pathname_2, encoding = "", compare_start_string = "", skip_line = ""):
logging.info('Comparing: %s and %s', pathname_1, pathname_2)
# check if files exist
if not os.path.isfile(pathname_1):
logging.error("** ERROR ** %s does not exist", pathname_1)
return False
if not os.path.isfile(pathname_2):
logging.error("** ERROR ** %s does not exist", pathname_2)
return False
# open comparing files
if encoding != "":
file_1 = open(pathname_1,'r', encoding=encoding)
file_2 = open(pathname_2, 'r', encoding=encoding)
else:
file_1 = open(pathname_1,'r')
file_2 = open(pathname_2, 'r')
# read files into lists
list_1 = file_1.readlines()
list_2 = file_2.readlines()
start_row_1 = 0
start_row_2 = 0
if compare_start_string != "":
# find the line where comparing starts
for line in list_1:
if compare_start_string in line:
start_row_1 = list_1.index(line)
break;
for line in list_2:
if compare_start_string in line:
start_row_2 = list_1.index(line)
break;
# compare from the start line
list_1 = list_1[start_row_1:]
list_2 = list_2[start_row_2:]
for line_1,line_2 in zip(list_1,list_2):
# If the skip line string is not empty, skip the line if it contains the skip_line string
if skip_line != "" and skip_line in line_1:
continue
if line_1 != line_2:
logging.error("** ERROR ** Does Not Match:\n%s\n%s" %(line_1, line_2))
return False
logging.info("Match success.")
return True
def compare_output_file(pathname_1, pathname_2):
return compare_file(pathname_1, pathname_2, '', '#include')
def compare_xliff_file(pathname_1, pathname_2):
return compare_file(pathname_1, pathname_2, 'utf-8', '', '<file')
def compare_xml_file(pathname_1, pathname_2):
return compare_file(pathname_1, pathname_2, 'utf-8', '', '<studio_version>')
def compare_normal_file(pathname_1, pathname_2):
return compare_file(pathname_1, pathname_2, 'utf-8')
def cmp_files(output_file_lists, compare_func, output_file_path = DEFAULT_OUTPUT_FILE_PATH, golden_file_path = DEFAULT_GOLDEN_FILE_PATH):
global studio_test_index
if gen_golden_file == True:
golden_file = open(gen_golden_file_pathname, "a+")
if studio_test_index == 0:
golden_file.write("good_results = [\n")
#save golden values
golden_file.write(" 0, #test %d, comparing files\n" %(studio_test_index))
else:
result = True
for file in output_file_lists:
golden_file = golden_file_path + file
output_file = output_file_path + file
if compare_func(output_file, golden_file) == False:
result = False
if result == True:
print('Test %d passed' %studio_test_index)
logging.info("Test #%d, compare output files- Passed." %studio_test_index)
result_count[0] += 1
else:
print('** Test %d failed **' %studio_test_index)
logging.info("Test #%d, compare output files- Failed." %studio_test_index)
result_count[1] += 1
studio_test_index += 1
def cmp_output_files(output_file_lists, output_file_path = DEFAULT_OUTPUT_FILE_PATH, golden_file_path = DEFAULT_GOLDEN_FILE_PATH):
cmp_files(output_file_lists, compare_output_file, output_file_path, golden_file_path)
def cmp_normal_files(normal_file_lists, output_file_path = DEFAULT_OUTPUT_FILE_PATH, golden_file_path = DEFAULT_GOLDEN_FILE_PATH):
cmp_files(normal_file_lists, compare_normal_file, output_file_path, golden_file_path)
def cmp_xml_files(xml_file_lists, output_file_path = DEFAULT_OUTPUT_FILE_PATH, golden_file_path = DEFAULT_GOLDEN_FILE_PATH):
cmp_files(xml_file_lists, compare_xml_file, output_file_path, golden_file_path)
# run the Studio executable
def run_studio():
absolute_path = os.path.abspath(studio_exe_path)
if not os.path.isfile(absolute_path):
raise Exception("Unable to locate Studio executable.")
Popen(os.path.abspath(absolute_path))
time.sleep(5)
def wait_for_key(prompt = ''):
if Debug:
if prompt:
print('%s' %prompt)
input("\nPress Enter to continue")
def enum_callback(hwnd, lParam):
if user32.IsWindowVisible(hwnd):
length = user32.GetWindowTextLengthW(hwnd) + 1
if length > 1:
buffer = ctypes.create_unicode_buffer(length)
user32.GetWindowTextW(hwnd, buffer, length)
top_windows.append((hwnd, buffer.value))
return True
# search for named child windows, save handles for those that we want to send
# test events
def get_window_tree(hwnd):
# get the first child window
child = user32.GetWindow(hwnd, GW_CHILD)
while child:
length = user32.GetWindowTextLengthW(child) + 1
if length > 1:
buffer = ctypes.create_unicode_buffer(length)
user32.GetWindowTextW(child, buffer, length)
if buffer.value in studio_windows:
studio_windows[buffer.value] = child
get_window_tree(child)
# get the next child window
child = user32.GetWindow(child, GW_HWNDNEXT)
#send a test event to the requested Studio window
def send_to_studio(handle, cmd, param):
result = 0
if type(param) == str:
with open('c:\\temp\\guix_param0.txt', 'w', encoding="utf-8") as fparam:
fparam.write(param)
fparam.close()
result = user32.SendMessageA(handle, STUDIO_TEST_MESG, cmd, None)
else:
result = user32.SendMessageA(handle, STUDIO_TEST_MESG, cmd, param)
return result
def post_to_studio(handle, cmd, param):
result = 0
if type(param) == str:
with open('c:\\temp\\guix_param1.txt', 'w', encoding="utf-8") as fparam:
fparam.write(param)
fparam.close()
result = user32.PostMessageA(handle, STUDIO_TEST_MESG, cmd, None)
else:
result = user32.PostMessageA(handle, STUDIO_TEST_MESG, cmd, param)
return result
def delete_temp_files():
if (os.path.exists("c:\\temp\\guix_param1.txt")):
os.remove("c:\\temp\\guix_param1.txt")
if (os.path.exists("c:\\temp\\guix_param0.txt")):
os.remove("c:\\temp\\guix_param0.txt")
# locate the Studio windows and store handles
def find_studio_handles():
a = ctypes.WINFUNCTYPE(ctypes.c_bool,
ctypes.POINTER(ctypes.c_int),
ctypes.POINTER(ctypes.c_int))(enum_callback)
user32.EnumWindows(a, 0)
found_studio = False
for hwnd, name in top_windows:
if 'GUIX Studio' in name:
found_studio = True
studio_windows['main_frame'] = ctypes.c_void_p.from_buffer(hwnd).value
get_window_tree(hwnd)
if found_studio:
for name in studio_windows:
if studio_windows[name] == 0:
print('Unable to find Studio window named: %s' %name)
return False
else:
print('Found Studio Window: %s' %name)
return found_studio
# find dialog handle
def find_dialog(name, owner = 0, class_name = '#32770'):
if class_name == 'GUIX':
owner = 0
elif owner == 0:
owner = studio_windows['main_frame']
param = class_name + ';'
param += name + ';'
param += str(owner)
studio_dialogs[name] = send_to_main_frame('CMD_FIND_DIALOG', param)
return studio_dialogs[name]
def close_dialog(name, owner = 0):
retries = 0
wait_dialog_open(name, owner)
while retries < 3:
user32.PostMessageA(studio_dialogs[name], WM_CLOSE, None, None)
if wait_dialog_close(name, owner) is True:
return
retries += 1
raise Exception('Unable to close %s dialog' %name)
def close_window(name, owner = 0):
user32.PostMessageA(studio_windows[name], WM_CLOSE, None, None)
def wait_dialog_open(name, owner = 0, class_name = '#32770'):
time_start = time.time()
logging.debug("wait dialog open: %s", name)
if owner == 0 and len(active_dialog_stack) > 0:
logging.debug("dialog parent: %s", active_dialog_stack[-1])
owner = studio_dialogs[active_dialog_stack[-1]]
while find_dialog(name, owner, class_name) == 0:
time.sleep(1)
interval = time.time() - time_start
if interval > 300:
raise Exception('Unable to open %s dialog' %name)
break
active_dialog_stack.append(name)
logging.debug("push active dialog: %s", name)
logging.debug("active dialog list: %s", active_dialog_stack)
time.sleep(1)
def wait_dialog_close(name, owner = 0, class_name = '#32770'):
#wait popup dialog close
time_start = time.time()
if owner == 0 and len(active_dialog_stack) > 1:
owner = studio_dialogs[active_dialog_stack[-2]]
while find_dialog(name, owner, class_name) != studio_dialogs[name]:
time.sleep(1)
interval = time.time() - time_start
if interval > 300:
return False
time.sleep(1)
active_dialog_stack.pop()
logging.debug("pop active dialog: %s", name)
logging.debug("active dialog list: %s", active_dialog_stack)
return True
# compare canvas crc32 value with known good value, or
# print value if it's a new index
def compare_result():
global studio_test_index
result = get_result()
if result == 0:
return True
while is_wait_dialog_running() == True:
time.sleep(5)
#generate screen shot
if gen_screenshot == True:
path = os.path.realpath(DEFAULT_OUTPUT_FILE_PATH + "/" + test_name)
if os.path.exists(path) == False:
os.makedirs(path)
filename = path + "/test_" + str(studio_test_index) + ".bmp"
generate_screenshot(filename)
if gen_golden_file == True:
golden_file = open(gen_golden_file_pathname, "a+")
if studio_test_index == 0:
golden_file.write("good_results = [\n")
#save golden values
golden_file.write(" %#x, #test %d\n" %(result, studio_test_index))
print('Generate CRC32 for test %d' %studio_test_index)
logging.info("test %d. Golden value: %#x.\n" %(studio_test_index, result)) #print golden values
studio_test_index += 1
else:
if len(good_results) > studio_test_index and good_results[studio_test_index] != 0:
if good_results[studio_test_index] == result:
print('Test %d passed' %studio_test_index)
logging.info("Test #%d, compute CRC32 on canvas memory- Passed.\n" %studio_test_index)
result_count[0] += 1
studio_test_index += 1
return True
else:
#generate failure screen shots
path = os.path.realpath(DEFAULT_TEST_FAILURE_PATH)
if os.path.exists(path) == False:
os.makedirs(path)
filename = path + "/" + test_name +"_" + str(studio_test_index) + ".bmp"
generate_screenshot(filename)
print('** Test %d failed **' %studio_test_index)
logging.error("CRC32 failure on test %d. Golden value: %#x Result Value: %#x\n" %(studio_test_index, good_results[studio_test_index], result))
result_count[1] += 1
studio_test_index += 1
#this will make the script wait here until the user inputs a CR key
#input()
return False
else:
logging.info('Result for index %d is %#x' %(studio_test_index, result))
studio_test_index += 1
return True
def set_test_results(passed, test_type, error_msg):
global studio_test_index
if gen_golden_file == True:
golden_file = open(gen_golden_file_pathname, "a+")
if studio_test_index == 0:
golden_file.write("good_results = [\n")
golden_file.write(" 0, #test %d, %s\n" %(studio_test_index, test_type))
else:
if passed == True:
print('Test %d passed' %studio_test_index)
logging.info("Test #%d, %s- Passed.\n", studio_test_index, test_type)
result_count[0] += 1
else:
print('** Test %d failed **' %studio_test_index)
logging.info("Test #%d, %s- Failed.\n", studio_test_index, test_type)
logging.info(error_msg)
result_count[1] += 1
studio_test_index += 1
def output_test_header(header_notes):
global test_start_time
test_start_time = time.time()
global test_log_stream
test_log_stream.truncate(0)
test_log_stream.seek(0)
logging.info("*******************************************************")
logging.info(header_notes)
logging.info("* *")
logging.info("*******************************************************")
logging.info("Test date: %s\n", time.asctime())
def clean_up():
path = os.path.realpath(DEFAULT_TEST_FAILURE_PATH)
print(path)
if os.path.exists(path):
shutil.rmtree(path)
path = os.path.realpath(DEFAULT_OUTPUT_FILE_PATH)
print(path)
if os.path.exists(path):
shutil.rmtree(path)
def setup(generate, screenshot, golden_file):
test_utils.gen_golden_file = generate
test_utils.gen_screenshot = screenshot
global studio_test_index
studio_test_index = 0;
global test_name
test_name = golden_file.replace("_golden_file", "")
if os.path.exists(DEFAULT_OUTPUT_FILE_PATH) == False:
os.makedirs(DEFAULT_OUTPUT_FILE_PATH)
if generate:
global gen_golden_file_pathname
if golden_file is not None:
gen_golden_file_pathname = DEFAULT_OUTPUT_FILE_PATH + golden_file + ".py"
#delete old golden file
if os.path.exists(gen_golden_file_pathname):
os.remove(gen_golden_file_pathname)
print("golden file path: %s" %gen_golden_file_pathname)
else:
module = __import__("golden_files.%s" %(golden_file), fromlist=["golden_files"])
global good_results
good_results = module.good_results
global active_dialog_stack
active_dialog_stack = []
def write_end(test_name):
global good_results
global total_failures
global test_log_xml
global test_cases
if gen_golden_file == True:
golden_file = open(gen_golden_file_pathname, "a+")
golden_file.write("]")
else:
if len(good_results):
failures = len(good_results) - result_count[0]
else:
failures = result_count[1]
total_failures += failures
logging.info("********************************************************************")
logging.info("** Test %s completed." %test_name)
logging.info('** Tests Passed: %d Tests Failed %d' %(result_count[0], failures))
logging.info("********************************************************************")
logging.info("Total Faiures: %d\n", total_failures)
logging.info("\n\n\n")
print('\nTest %s completed. \nTests Passed: %d\nTests Failed: %d\n' %(test_name, result_count[0], failures))
print('Total Failures: %d\n' %(total_failures))
result_count[0] = 0
result_count[1] = 0
studio_test_index = 0
good_results = []
test_time = time.time() - test_start_time
test_log_txt.write(test_log_stream.getvalue())
if test_log_xml is not None:
test = TestCase(test_name, "", test_time, test_log_stream.getvalue(), None)
if failures:
test.add_failure_info("Failed.")
test_cases.append(test)
# read c++ type defines into a python dictionary
def read_defines(file_path, prefix):
if os.path.exists(file_path) is False:
print("** ERROR ** %s does not exist" %file_path)
return False
logging.info("read '%s' defines from %s", prefix, file_path)
file = open(file_path, 'r')
lines = file.readlines()
# read defines into string
defines = {}
for line in lines:
if '#define' in line and prefix in line:
line = ' '.join(line.split())
list = line.split()
defines[list[1]] = int(list[2], 0)
return defines
# read c++ type enum structure into a python dictionary
def read_enum(file_path, variable_name):
if os.path.exists(file_path) is False:
print("** ERROR ** %s does not exist" %file_path)
return False
logging.info("read '%s' enum structure from %s", variable_name, file_path)
file = open(file_path, 'r')
lines = file.readlines()
start_read = False
# read enum structure into string
enum_str = ''
for line in lines:
if 'enum' in line and variable_name in line:
start_read = True
if start_read:
enum_str += line
index = line.find('}')
if index >= 0:
break
# remove braces
index = enum_str.find('{')
if index >= 0:
enum_str = enum_str[index + 1:]
index = enum_str.find('}')
if index >= 0:
enum_str = enum_str[:index - 1]
# remove line breaks
enum_str = enum_str.replace('\n', '')
enum_str = enum_str.replace('\r', '')
# read enums into a dictionary of {"ID", value} pair
enum = {}
enum_index = 0
index = enum_str.find(',')
while len(enum_str) > 0:
if index == -1:
temp = enum_str
enum_str = ''
else:
temp = enum_str[0:index]
enum_str = enum_str[index + 1:]
index = temp.find('=')
if index >= 0:
if index == 0:
temp = ''
else:
enum_index = int(temp[index + 1:])
temp = temp[0:index - 1]
temp = temp.replace(' ', '')
if len(temp) > 0:
enum[temp] = enum_index
enum_index += 1
index = enum_str.find(',')
return enum
def read_constants():
logging.info("*******************************************************")
logging.info("* Reading Constants *")
logging.info("* *")
logging.info("*******************************************************")
print('Reading Constants')
gx_api_h = '..//..//..//common//inc//gx_api.h'
studioxproject_h = '..//..//..//guix_studio//StudioXProject.h'
properties_win_cpp = '..//..//..//guix_studio//properties_win.cpp'
trigger_edit_dlg_h = '..//..//..//guix_studio//trigger_edit_dlg.h'
trigger_action_edit_dlg_h = '..//..//..//guix_studio//trigger_action_edit_dlg.h'
# read property control ids
global props_ctrl_ids
props_ctrl_ids = read_enum(properties_win_cpp, 'CONTROL_IDS')
# read widget types
global widget_types
widget_types = read_defines(gx_api_h, 'GX_TYPE')
# read color formats
global color_formats
color_formats = read_defines(gx_api_h, 'GX_COLOR_FORMAT')
# read font formats
global font_formats
font_formats = read_defines(gx_api_h, 'GX_FONT_FORMAT')
global resource_item_types
resource_item_types = read_enum(studioxproject_h, 'resource_item_types')
global group_ids
group_ids = read_enum(studioxproject_h, 'GROUP_IDS')
global folder_ids
folder_ids = read_enum(studioxproject_h, 'FolderIds')
global palette_types
palette_types = read_enum(studioxproject_h, 'PALETTE_TYPES')
global trigger_types
trigger_types = read_enum(trigger_edit_dlg_h, 'TRIGGER_TYPE')
global animation_param_ids
animation_param_ids = read_enum(trigger_action_edit_dlg_h, 'TRIGGER_ACTION_EDIT_CONTROL_IDS')
logging.info("\n")
#================================================================#
# Send Commands to Main Frame #
#================================================================#
main_frame_test_commands=[
'',
'CMD_ZOOM_IN',
'CMD_TOOLBAR_CREATE',
'CMD_TOOLBAR_OPEN',
'CMD_TOOLBAR_SAVE',
'CMD_TOOLBAR_CUT',
'CMD_TOOLBAR_COPY',
'CMD_TOOLBAR_PASTE',
'CMD_TOOLBAR_ALIGN_LEFT',
'CMD_TOOLBAR_ALIGN_RIGHT',
'CMD_TOOLBAR_ALIGN_TOP',
'CMD_TOOLBAR_ALIGN_BOTTOM',
'CMD_TOOLBAR_VSPACE_EQUALLY',
'CMD_TOOLBAR_HSPACE_EQUALLY',
'CMD_TOOLBAR_EQUAL_WIDTH',
'CMD_TOOLBAR_EQUAL_HEIGHT',
'CMD_TOOLBAR_MOVE_TO_FRONT',
'CMD_TOOLBAR_MOVE_TO_BACK',
'CMD_TOOLBAR_SIZE_TO_FIT',
'CMD_TOOLBAR_ZOOM_IN',
'CMD_TOOLBAR_ZOOM_OUT',
'CMD_TOOLBAR_RECORD_MACRO',
'CMD_TOOLBAR_PLAYBACK_MACRO',
'CMD_TOOLBAR_ABOUT',
'CMD_UNDO',
'CMD_CONFIGURE_LANGUAGES',
'CMD_CONFIGURE_PROJECT',
'CMD_CONFIGURE_THEMES',
'CMD_CONFIGURE_SCREEN_FLOW',
'CMD_GENERATE_ALL',
'CMD_GENERATE_RESOURCES',
'CMD_GET_MENU_STATUS',
'CMD_GRID_SNAP_SETTING',
'CMD_FIND_DIALOG',
'CMD_LOCK_UNLOCK_WIDGET_POSITIONS',
'CMD_RUN_APPLICATION',
'CMD_IS_WAIT_DIALOG_RUNNING'
]
#send a test command to the main frame
def send_to_main_frame(cmd, param):
handle = studio_windows['main_frame']
command = main_frame_test_commands.index(cmd)
return(send_to_studio(handle,command, param))
#post a test command to the main frame
def post_to_main_frame(cmd, param):
handle = studio_windows['main_frame']
command = main_frame_test_commands.index(cmd)
return(post_to_studio(handle, command, param))
# command the main frame to click toolbar button
def toolbar_create():
logging.info('create new project')
post_to_main_frame('CMD_TOOLBAR_CREATE', 0)
wait_dialog_open(CREATE_NEW_PROJECT_DIALOG)
def toolbar_save():
logging.info('save project')
send_to_main_frame('CMD_TOOLBAR_SAVE', 0)
def toolbar_cut():
logging.info('click toolbar button: cut')
send_to_main_frame('CMD_TOOLBAR_CUT', 0)
compare_result()
time.sleep(1)
def toolbar_copy():
logging.info('click toolbar button: copy')
send_to_main_frame('CMD_TOOLBAR_COPY', 0)
compare_result()
time.sleep(1)
def toolbar_paste(do_deselect = 1):
logging.info('click toolbar button: paste')
send_to_main_frame('CMD_TOOLBAR_PASTE', 0)
if do_deselect:
deselect()
dirty_root_window()
compare_result()
def toolbar_paste_no_wait():
logging.info('click toolbar button: paste')
post_to_main_frame('CMD_TOOLBAR_PASTE', 0)
def toolbar_align_left():
logging.info('click toolbar button: align left')
send_to_main_frame('CMD_TOOLBAR_ALIGN_LEFT', 0)
compare_result()
time.sleep(1)
def toolbar_align_right():
logging.info('click toolbar button: align right')
send_to_main_frame('CMD_TOOLBAR_ALIGN_RIGHT', 0)
compare_result()
time.sleep(1)
def toolbar_align_top():
logging.info('click toolbar button: align top')
send_to_main_frame('CMD_TOOLBAR_ALIGN_TOP', 0)
compare_result()
time.sleep(1)
def toolbar_align_bottom():
logging.info('click toolbar button: align bottom')
send_to_main_frame('CMD_TOOLBAR_ALIGN_BOTTOM', 0)
compare_result()
time.sleep(1)
def toolbar_vspace_equally():
logging.info('click toolbar button: vertical space equally')
send_to_main_frame('CMD_TOOLBAR_VSPACE_EQUALLY', 0)
compare_result()
time.sleep(1)
def toolbar_hspace_equally():
logging.info('click toolbar button: horizontal space equally')
send_to_main_frame('CMD_TOOLBAR_HSPACE_EQUALLY', 0)
compare_result()
time.sleep(1)
def toolbar_equal_width():
logging.info('click toolbar button: equal width')
send_to_main_frame('CMD_TOOLBAR_EQUAL_WIDTH', 0)
compare_result()
time.sleep(1)
def toolbar_equal_height():
logging.info('click toolbar button: equal height')
send_to_main_frame('CMD_TOOLBAR_EQUAL_HEIGHT', 0)
compare_result()
time.sleep(1)
def toolbar_move_to_front():
logging.info('click toolbar button: move to front')
send_to_main_frame('CMD_TOOLBAR_MOVE_TO_FRONT', 0)
compare_result()
time.sleep(1)
def toolbar_move_to_back():
logging.info('click toolbar button: move to back')
send_to_main_frame('CMD_TOOLBAR_MOVE_TO_BACK', 0)
compare_result()
time.sleep(1)
def toolbar_size_to_fit():
logging.info('click toolbar button: size to fit')
send_to_main_frame('CMD_TOOLBAR_SIZE_TO_FIT', 0)
compare_result()
time.sleep(1)
def toolbar_zoom_in():
logging.info('click toolbar button: zoom in')
send_to_main_frame('CMD_TOOLBAR_ZOOM_IN', 0)
compare_result()
time.sleep(1)
def toolbar_zoom_out():
logging.info('click toolbar button: zoom out')
send_to_main_frame('CMD_TOOLBAR_ZOOM_OUT', 0)
compare_result()
time.sleep(1)
def toolbar_record_macro():
logging.info('click toolbar button: record macro')
post_to_main_frame('CMD_TOOLBAR_RECORD_MACRO', 0)
def toolbar_playback_macro():
logging.info('click toolbar button: playback macro')
post_to_main_frame('CMD_TOOLBAR_PLAYBACK_MACRO', 0)
def toolbar_about():
logging.info('click toolbar button: about')
post_to_main_frame('CMD_TOOLBAR_ABOUT', 0)
def undo():
logging.info('click edit menu: undo')
send_to_main_frame('CMD_UNDO', 0)
time.sleep(1)
compare_result()
# command to main frame to generate all output files
def generate_all():
logging.info("generate all output files.")
post_to_main_frame('CMD_GENERATE_ALL', 0)
wait_dialog_open(RESOURCE_EXPORT_DIALOG)
def generate_resources():
logging.info("generate resources")
post_to_main_frame('CMD_GENERATE_RESOURCES', 0)
wait_dialog_open(RESOURCE_EXPORT_DIALOG)
def configure_project():
logging.info('configure project')
post_to_main_frame('CMD_CONFIGURE_PROJECT', 0)
wait_dialog_open(CONFIGURE_PROJECT_DIALOG)
def configure_themes():
logging.info('configure themes')
post_to_main_frame('CMD_CONFIGURE_THEMES', 0)
wait_dialog_open(CONFIGURE_THEME_DIALOG)
# command the main frame to popup language configure dialog
def configure_languages():
logging.info('configure languages')
post_to_main_frame('CMD_CONFIGURE_LANGUAGES', 0)
wait_dialog_open(CONFIGURE_LANGUAGE_DIALOG)
def configure_screen_flow():
logging.info('configure screen flow')
post_to_main_frame('CMD_CONFIGURE_SCREEN_FLOW', 0)
wait_dialog_open(SCREEN_FLOW_EDIT_DIALOG)
def get_menu_status(string):
return send_to_main_frame('CMD_GET_MENU_STATUS', string)
def grid_snap_setting():
logging.info('grid and snap setting')
post_to_main_frame('CMD_GRID_SNAP_SETTING', 0)
wait_dialog_open(GRID_SNAP_SETTING_DIALOG)
def lock_unlock_widget_positions(lock):
if lock:
logging.info('lock widget positions')
else:
logging.info('unlock widget positions')
send_to_main_frame('CMD_LOCK_UNLOCK_WIDGET_POSITIONS', lock)
def run_application():
logging.info('run application')
send_to_main_frame('CMD_RUN_APPLICATION', 0)
wait_dialog_open('GUIX', 0, 'GUIX')
def is_wait_dialog_running():
logging.info('check if wait dialog is running')
return send_to_main_frame('CMD_IS_WAIT_DIALOG_RUNNING', 0)
#================================================================#
# Send Commands to Target Screen #
#================================================================#
target_screen_test_commands = [
'',
'CMD_GENERATE_CHECKSUM',
'CMD_GENERATE_SCREENSHOT',
'CMD_DESELECT',
'CMD_DIRTY_ROOT_WINDOW',
'CMD_MOVE_WINDOW',
'CMD_MOVE_SELECTED',
'CMD_ADD_WIDGET',
'CMD_ADD_TEMPLATE',
'CMD_ZOOM_IN',
'CMD_LBUTTON_DOWN',
'CMD_LBUTTON_UP',
'CMD_MOUSEMOVE',
'CMD_MOUSEMOVE_POST'
]
#send a test command to the target screen
def send_to_target_screen(cmd, param):
handle = studio_windows['Target Screen']
command = target_screen_test_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_target_screen(cmd, param):
handle = studio_windows['Target Screen']
command = target_screen_test_commands.index(cmd)
return(post_to_studio(handle, command, param))
#ask the target screen for current canvas crc32 value
def get_result():
result= send_to_target_screen('CMD_GENERATE_CHECKSUM', None)
return result
def generate_screenshot(filename):
logging.info('generate screen shot, image file name = %s', filename)
send_to_target_screen('CMD_GENERATE_SCREENSHOT', filename);
def deselect():
logging.info('Deselect')
send_to_target_screen('CMD_DESELECT', 0)
def dirty_root_window():
logging.info('dirty root window')
send_to_target_screen('CMD_DIRTY_ROOT_WINDOW', 0)
# command the target screen to shift the main window
def move_window(shift):
logging.info('move top-level window to force redraw')
send_to_target_screen('CMD_MOVE_WINDOW', shift)
compare_result()
time.sleep(1)
# command the target screen to shift the selected widget
def move_selected(shift):
logging.info('move the selected widget')
send_to_target_screen('CMD_MOVE_SELECTED', shift)
compare_result()
time.sleep(1)
# command the target screen to add widget
def add_widget(typename):
if typename in widget_types:
logging.info('add a widget, type = %s' %typename)
send_to_target_screen('CMD_ADD_WIDGET', widget_types[typename])
else:
raise Exception("Invalid widget type: %s" %typename)
time.sleep(1)
# command to target screen to add template
def add_template(base_name, display = 0):
param = str(base_name) + ',' + str(display)
send_to_target_screen('CMD_ADD_TEMPLATE', param)
logging.info('add a widget using template %s' %base_name)
time.sleep(1)
def zoom_in(scale):
send_to_target_screen('CMD_ZOOM_IN', scale)
logging.info('zoom in target view by %d percent' %scale)
compare_result()
def left_button_down(x, y):
param = str(x) + ',' + str(y)
send_to_target_screen('CMD_LBUTTON_DOWN', param)
logging.info('simulate left button down on (%d, %d)', x, y)
def left_button_up(x, y):
param = str(x) + ',' + str(y)
send_to_target_screen('CMD_LBUTTON_UP', param)
logging.info('simulate left button up on (%d, %d)', x, y)
def mousemove(x, y, close_notification = False):
param = str(x) + ',' + str(y)
if close_notification == False:
send_to_target_screen('CMD_MOUSEMOVE', param)
logging.info('simulate mousemove on (%d, %d)', x, y)
else:
post_to_target_screen('CMD_MOUSEMOVE_POST', param)
logging.info('simulate mousemove on (%d, %d)', x, y)
close_message_dialog()
#================================================================#
# Send Commands to Properties Screen #
#================================================================#
properties_win_test_commands = [
'',
'CMD_EDIT_WIDGET_PROPS',
'CMD_EDIT_WIDGET_PROPS_POST'
]
#send a test command to the properties view
def send_to_properties_screen(cmd, param):
handle = studio_windows['Properties Win']
command = properties_win_test_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_properties_screen(cmd, param):
handle = studio_windows['Properties Win']
command = properties_win_test_commands.index(cmd)
return(post_to_studio(handle, command, param))
def edit_widget_props(id_str, prop_val):
control_id = props_ctrl_ids[id_str];
param = str(control_id) + "," + str(prop_val)
prop_string = str(prop_val)
logging.info("editing property: %s, control_id = %d, val = %s" %(id_str, control_id, prop_string.encode(sys.stdout.encoding, 'replace')))
send_to_properties_screen('CMD_EDIT_WIDGET_PROPS', param)
def edit_widget_props_post(id_str, prop_val):
control_id = props_ctrl_ids[id_str];
param = str(control_id) + "," + str(prop_val)
prop_string = str(prop_val)
logging.info("editing property: %s, control_id = %d, val = %s" %(id_str, control_id, prop_string.encode(sys.stdout.encoding, 'replace')))
post_to_properties_screen('CMD_EDIT_WIDGET_PROPS_POST', param)
#================================================================#
# Send Commands to Project View #
#================================================================#
project_view_test_commands = [
'',
'CMD_OPEN_PROJECT',
'CMD_CLOSE_PROJECT',
'CMD_IMPORT_PROJECT',
'CMD_SELECT_PROJECT_TREE_NODE',
'CMD_SELECT_PROJECT_TREE_FOLDER',
'CMD_SELECT_CHILD_WIDGET',
'CMD_SELECT_MULTI_WIDGETS',
'CMD_DELETE_WIDGET',
'CMD_GET_WIDGET_LEFT',
'CMD_GET_WIDGET_TOP',
'CMD_GET_WIDGET_RIGHT',
'CMD_GET_WIDGET_BOTTOM',
'CMD_INSERT_FOLDER',
'CMD_EDIT_FOLDER_PROPERTIES',
'CMD_DELETE_FOLDER',
'CMD_TERMINATE_APP_EXECUTION'
]
#send a test command to the project view
def send_to_project_view(cmd, param):
handle = studio_windows['Project View']
command = project_view_test_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_project_view(cmd, param):
handle = studio_windows['Project View']
command = project_view_test_commands.index(cmd)
return(post_to_studio(handle, command, param))
# tell the Studio project view to open a project
def open_project(path, compare = 1):
if not os.path.isfile(path):
raise Exception('Test project is missing: %s' %path)
abs_path = os.path.abspath(path)
logging.info("open project: %s", abs_path)
global default_map
send_to_project_view('CMD_OPEN_PROJECT', abs_path)
if compare == 1:
compare_result()
def import_project(pathname):
logging.info("import project:%s", pathname)
post_to_project_view('CMD_IMPORT_PROJECT', pathname)
wait_dialog_open(IMPORT_PROJECT_DIALOG)
# tell the Studio project view to close a project
def close_project(save_change = 0):
logging.info('close current project')
if save_change == 1:
post_to_project_view('CMD_CLOSE_PROJECT', save_change)
else:
send_to_project_view('CMD_CLOSE_PROJECT', save_change)
# command the project view to select a widget
def select_project_tree_node(name):
while is_wait_dialog_running() == True:
time.sleep(5)
logging.info('select "%s"' %name)
result = send_to_project_view('CMD_SELECT_PROJECT_TREE_NODE', name)
time.sleep(1)
return result
# command the project view to select a folder
def select_project_tree_folder(display_name, folder_name):
logging.info('select display, folder "%s", "%s"' %(display_name, folder_name))
param = display_name + ',' + folder_name
result = send_to_project_view('CMD_SELECT_PROJECT_TREE_FOLDER', param)
def select_project_tree_child():
logging.info('select project tree child widget')
result = send_to_project_view('CMD_SELECT_CHILD_WIDGET')
# command the project view to select multiple widgets
def select_multi_widgets(name):
logging.info('select "%s" with Shift-Key down' %name)
send_to_project_view('CMD_SELECT_MULTI_WIDGETS', name)
time.sleep(1)
# command the project view to delete a widget
def delete_widget(do_compare = 1):
logging.info('delete current selected widget')
send_to_project_view('CMD_DELETE_WIDGET', 0)
if do_compare:
compare_result()
time.sleep(1)
def post_delete_widget():
logging.info('post delete widget message')
post_to_project_view('CMD_DELETE_WIDGET', 0)
def get_widget_left(widget_name):
return send_to_project_view('CMD_GET_WIDGET_LEFT', widget_name)
def get_widget_top(widget_name):
return send_to_project_view('CMD_GET_WIDGET_TOP', widget_name)
def get_widget_right(widget_name):
return send_to_project_view('CMD_GET_WIDGET_RIGHT', widget_name)
def get_widget_bottom(widget_name):
return send_to_project_view('CMD_GET_WIDGET_BOTTOM', widget_name)
def drag_left(widget_name, delta_x, close_notification = False):
logging.info('drag left of widget "%s"', widget_name)
left = get_widget_left(widget_name) - 1
top = get_widget_top(widget_name) - 1
bottom = get_widget_bottom(widget_name) + 1
y = (top + bottom) / 2
left_button_down(left, y)
mousemove(left + delta_x, y, close_notification)
left_button_up(left + delta_x, y)
def drag_right(widget_name, delta_x, close_notification = False):
logging.info('drag right of widget "%s"', widget_name)
right = get_widget_right(widget_name) + 1
top = get_widget_top(widget_name) - 1
bottom = get_widget_bottom(widget_name) + 1
y = (top + bottom) / 2
left_button_down(right, y)
mousemove(right + delta_x, y, close_notification)
left_button_up(right + delta_x, y)
def drag_top(widget_name, delta_y, close_notification = False):
logging.info('drag top of widget "%s"', widget_name)
left = get_widget_left(widget_name) - 1
right = get_widget_right(widget_name) + 1
top = get_widget_top(widget_name) - 1
x = (left + right) / 2
left_button_down(x, top)
mousemove(x, top + delta_y, close_notification)
left_button_up(x, top + delta_y)
def drag_bottom(widget_name, delta_y, close_notification = False):
logging.info('drag bottom of widget "%s"', widget_name)
left = get_widget_left(widget_name) - 1
right = get_widget_right(widget_name) + 1
bottom = get_widget_bottom(widget_name) + 1
x = (left + right) / 2
left_button_down(x, bottom)
mousemove(x, bottom + delta_y, close_notification)
left_button_up(x, bottom + delta_y)
def drag_left_top(widget_name, delta_x, delta_y, close_notification = False):
logging.info('drag left top of widget "%s"', widget_name)
left = get_widget_left(widget_name) - 1
top = get_widget_top(widget_name) - 1
left_button_down(left, top)
mousemove(left + delta_x, top + delta_y, close_notification)
left_button_up(left + delta_x, top + delta_y)
def drag_right_top(widget_name, delta_x, delta_y, close_notification = False):
logging.info('drag right top of widget "%s"', widget_name)
right = get_widget_right(widget_name) + 1
top = get_widget_top(widget_name) - 1
left_button_down(right, top)
mousemove(right + delta_x, top + delta_y, close_notification)
left_button_up(right + delta_x, top + delta_y)
def drag_left_bottom(widget_name, delta_x, delta_y, close_notification = False):
logging.info('drag left bottom of widget "%s"', widget_name)
left = get_widget_left(widget_name) - 1
bottom = get_widget_bottom(widget_name) + 1
left_button_down(left, bottom)
mousemove(left + delta_x, bottom + delta_y, close_notification)
left_button_up(left + delta_x, bottom + delta_y)
def drag_right_bottom(widget_name, delta_x, delta_y, close_notification = False):
logging.info('drag right bottom of widget "%s"', widget_name)
right = get_widget_right(widget_name) + 1
bottom = get_widget_bottom(widget_name) + 1
left_button_down(right, bottom)
mousemove(right + delta_x, bottom + delta_y, close_notification)
left_button_up(right + delta_x, bottom + delta_y)
def drag_move(widget_name, delta_x, delta_y, close_notification = False):
logging.info('move widget "%s"', widget_name)
left = get_widget_left(widget_name)
right = get_widget_right(widget_name)
top = get_widget_top(widget_name)
bottom = get_widget_bottom(widget_name)
x = (left + right) / 2
y = (top + bottom) / 2
left_button_down(x, y)
mousemove(x + delta_x, y + delta_y, close_notification)
left_button_up(x + delta_x, y + delta_y)
def insert_folder():
send_to_project_view('CMD_INSERT_FOLDER',0)
def edit_folder_properties():
post_to_project_view('CMD_EDIT_FOLDER_PROPERTIES', 0)
wait_dialog_open(EDIT_FOLDER_NAME_DIALOG)
def rename_folder(new_name):
edit_folder_properties()
set_folder_name(new_name)
save_folder_name_edit()
def delete_folder(do_compare = 1):
logging.info('delete selected folder')
send_to_project_view('CMD_DELETE_FOLDER', 0)
if do_compare:
compare_result()
def post_delete_folder():
logging.info('post delete folder message')
post_to_project_view('CMD_DELETE_FOLDER', 0)
def terminate_app_execution():
logging.info('terminate app execution')
send_to_project_view('CMD_TERMINATE_APP_EXECUTION', 0)
active_dialog_stack.pop()
logging.debug("pop active dialog: %s", APP_EXECUTION_WINDOW)
#================================================================#
# Send Commands to Resource View #
#================================================================#
resource_view_test_commands = [
'',
'CMD_CLICK_RESOURCE_GROUP',
'CMD_CLICK_PIXELMAP_FOLDER',
'CMD_CLICK_RESOURCE_ITEM',
'CMD_ADD_COLOR',
'CMD_EDIT_COLOR',
'CMD_DELETE_COLOR',
'CMD_ADD_FONT',
'CMD_EDIT_FONT',
'CMD_DELETE_FONT',
'CMD_ADD_PIXELMAPS',
'CMD_EDIT_PIXELMAP',
'CMD_EDIT_PIXELMAPS',
'CMD_DELETE_PIXELMAP',
'CMD_ENABLE_PIXELMAP',
'CMD_DISABLE_PIXELMAP',
'CMD_ADD_PIXELMAP_FOLDER',
'CMD_REMOVE_PIXELMAP_FOLDER',
'CMD_ENABLE_PIXELMAP_FOLDER',
'CMD_DISABLE_PIXELMAP_FOLDER',
'CMD_SET_FOLDER_NAME',
'CMD_SAVE_FOLDER_NAME_EDIT',
'CMD_EDIT_STRING',
'CMD_INCREMENT_ACTIVE_LANGUAGE_INDEX',
'CMD_DECREMENT_ACTIVE_LANGUAGE_INDEX',
'CMD_GENERATE_XML'
]
#send a test command to resource view
def send_to_resource_view(cmd, param):
handle = studio_windows['Resource View']
command = resource_view_test_commands.index(cmd)
return(send_to_studio(handle, command, param))
#post a test command to resource view
def post_to_resource_view(cmd, param):
handle = studio_windows['Resource View']
command = resource_view_test_commands.index(cmd)
return(post_to_studio(handle, command, param))
def click_resource_group(name):
logging.info('click resource group: %s', name)
send_to_resource_view('CMD_CLICK_RESOURCE_GROUP', group_ids[name])
def click_pixelmap_folder(folder_id, name):
logging.info('click resource folder: %s', name)
param = str(folder_ids[folder_id]) + ',' + name
send_to_resource_view('CMD_CLICK_PIXELMAP_FOLDER', param)
# command the resource view to open color resource folder
def click_resource_item(type, name):
param = str(resource_item_types[type]) + ',' + name
send_to_resource_view('CMD_CLICK_RESOURCE_ITEM', param)
# command the resource view to open font edit dialog
def add_font():
logging.info('add a font')
post_to_resource_view('CMD_ADD_FONT', 0)
wait_dialog_open(EDIT_FONT_DIALOG)
def edit_font(id_name):
click_resource_item('RES_TYPE_FONT', id_name)
logging.info('edit font: %s', id_name)
post_to_resource_view('CMD_EDIT_FONT', 0)
wait_dialog_open(EDIT_FONT_DIALOG)
def delete_font(id_name):
click_resource_item('RES_TYPE_FONT', id_name)
logging.info('delete font: %s', id_name)
send_to_resource_view('CMD_DELETE_FONT', 0)
# command the resource view to open color edit dialog
def add_color():
logging.info('add a color')
post_to_resource_view('CMD_ADD_COLOR', 0)
wait_dialog_open(EDIT_COLOR_DIALOG)
def edit_color(id_name):
click_resource_item('RES_TYPE_COLOR', id_name)
logging.info('edit color: %s', id_name)
post_to_resource_view('CMD_EDIT_COLOR', 0)
wait_dialog_open(EDIT_COLOR_DIALOG)
def delete_color(id_name):
click_resource_item('RES_TYPE_COLOR', id_name)
logging.info('delete color: %s', id_name)
send_to_resource_view('CMD_DELETE_COLOR', 0)
# command the resource view to add images
def add_pixelmaps(folder_name, path, name_array, wait = CLOSE_WAIT):
while is_wait_dialog_running() == True:
time.sleep(5)
path = os.path.realpath(path) + '\\'
logging.info("add pixelmaps, folder name = %s, path = %s, names = %s", folder_name, path, name_array)
param = folder_name + ','
param += path + ','
param += name_array
post_to_resource_view('CMD_ADD_PIXELMAPS', param)
time.sleep(1)
if wait == CLOSE_WAIT and find_dialog(WAIT_DIALOG):
wait_dialog_close(WAIT_DIALOG)
click_pixelmap_folder('CUSTOM_PIXELMAP_FOLDER', folder_name)
def delete_pixelmap(id_name):
click_resource_item('RES_TYPE_PIXELMAP', id_name)
logging.info('delete pixelmap: %s', id_name)
send_to_resource_view('CMD_DELETE_PIXELMAP', 0)
def enable_pixelmap(id_name):
click_resource_item('RES_TYPE_PIXELMAP', id_name)
logging.info('enable pixelmap: %s', id_name)
send_to_resource_view('CMD_ENABLE_PIXELMAP', 0)
def disable_pixelmap(id_name):
click_resource_item('RES_TYPE_PIXELMAP', id_name)
logging.info('disable pixelmap: %s', id_name)
send_to_resource_view('CMD_DISABLE_PIXELMAP', 0)
# command the resoruce view to edit a pixelmap
def edit_pixelmap(id_name):
click_resource_item('RES_TYPE_PIXELMAP', id_name)
logging.info('edit pixelmap: %s', id_name)
post_to_resource_view('CMD_EDIT_PIXELMAP', 0)
wait_dialog_open(EDIT_PIXELMAP_DIALOG)
# command the resoruce view to edit pixelmaps under pixelmap group/folder
def edit_pixelmaps():
logging.info('edit pixelmaps')
post_to_resource_view('CMD_EDIT_PIXELMAPS', 0)
wait_dialog_open(EDIT_PIXELMAP_DIALOG)
# command the resource view to show string edit dialog
def edit_string():
logging.info("edit string table")
post_to_resource_view('CMD_EDIT_STRING', 0)
wait_dialog_open(STRING_TABLE_EDITOR_DIALOG)
def add_pixelmap_folder():
logging.info('add a pixelmap folder')
test_utils.click_resource_group('PIXELMAP_GROUP')
post_to_resource_view('CMD_ADD_PIXELMAP_FOLDER', 0)
wait_dialog_open(EDIT_FOLDER_NAME_DIALOG)
test_utils.click_resource_group('PIXELMAP_GROUP')
def remove_pixelmap_folder(name):
click_pixelmap_folder('CUSTOM_PIXELMAP_FOLDER', name)
logging.info('remove pixelmap folder: %s', name)
send_to_resource_view('CMD_REMOVE_PIXELMAP_FOLDER', 0)
def enable_pixelmap_folder():
logging.info('enable pixelmap folder')
send_to_resource_view('CMD_ENABLE_PIXELMAP_FOLDER', 0)
def disable_pixelmap_folder():
logging.info('disable pixelmap folder')
send_to_resource_view('CMD_DISABLE_PIXELMAP_FOLDER', 0)
def increment_active_language_index():
logging.info('increase active language index')
send_to_resource_view('CMD_INCREMENT_ACTIVE_LANGUAGE_INDEX', 0)
def decrement_active_language_index():
logging.info('decrease active language index')
send_to_resource_view('CMD_DECREMENT_ACTIVE_LANGUAGE_INDEX', 0)
def generate_xml(name):
logging.info('generate xml file: %s', name)
name = os.path.abspath(name)
send_to_resource_view('CMD_GENERATE_XML', name)
#================================================================#
# Send Commands to Message Dialog #
#================================================================#
message_dialog_commands = [
'',
'CMD_YES_TO_MESSAGE_DIALOG',
'CMD_NO_TO_MESSAGE_DIALOG',
'CMD_CLOSE_MESSAGE_DIALOG'
]
def post_to_message_dialog(cmd, param):
handle = studio_dialogs[NOTIFICATION_DIALOG]
command = message_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def click_yes_to_message_dialog():
wait_dialog_open(NOTIFICATION_DIALOG)
logging.info('click yes button of message dialog.')
post_to_message_dialog('CMD_YES_TO_MESSAGE_DIALOG', 0)
wait_dialog_close(NOTIFICATION_DIALOG)
def click_no_to_message_dialog():
wait_dialog_open(NOTIFICATION_DIALOG)
logging.info('click no button of message dialog.')
post_to_message_dialog('CMD_NO_TO_MESSAGE_DIALOG', 0)
wait_dialog_close(NOTIFICATION_DIALOG)
def close_message_dialog(owner = 0):
retries = 0
wait_dialog_open(NOTIFICATION_DIALOG, owner)
logging.info('close notification dialog.')
while retries < 3:
post_to_message_dialog('CMD_CLOSE_MESSAGE_DIALOG', 0)
if wait_dialog_close(NOTIFICATION_DIALOG) is True:
return;
retries += 1
def post_to_error_dialog(cmd, param):
handle = studio_dialogs[ERROR_DIALOG]
command = message_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def close_error_dialog(owner = 0):
retries = 0
logging.info('close error dialog.')
wait_dialog_open(ERROR_DIALOG, owner)
while retries < 3:
post_to_error_dialog('CMD_CLOSE_MESSAGE_DIALOG', 0)
if wait_dialog_close(ERROR_DIALOG) is True:
return;
retries += 1
def post_to_please_confirm_dialog(cmd, param):
handle = studio_dialogs[PLEASE_CONFIRM_DIALOG]
command = message_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def click_yes_to_please_confirm_dialog():
wait_dialog_open(PLEASE_CONFIRM_DIALOG)
logging.info('click yes button of please confirm dialog.')
post_to_please_confirm_dialog('CMD_YES_TO_MESSAGE_DIALOG', 0)
wait_dialog_close(PLEASE_CONFIRM_DIALOG)
def click_no_to_please_confirm_dialog():
wait_dialog_open(PLEASE_CONFIRM_DIALOG)
logging.info('click no button of please confirm dialog.')
post_to_please_confirm_dialog('CMD_NO_TO_MESSAGE_DIALOG', 0)
wait_dialog_close(PLEASE_CONFIRM_DIALOG)
#================================================================#
# Send Commands to Language Configure Dialog #
#================================================================#
language_configure_commands = [
'',
'CMD_ADD_LANGUAGE',
'CMD_DELETE_LANGUAGE',
'CMD_SELECT_LANGUAGE_INDEX',
'CMD_SELECT_LANGUAGE_ID',
'CMD_CHECK_SUPPORT_BIDI_TEXT',
'CMD_CHECK_REORDER_BIDI_TEXT',
'CMD_CHECK_SUPPORT_THAI_SHAPING',
'CMD_CHECK_GEN_ADJUSTED_THAI',
'CMD_SAVE_LANGUAGE_CONFIGURE',
'CMD_CANCEL_LANGUAGE_CONFIGURE'
]
def send_to_language_configure_dialog(cmd, param):
handle = studio_dialogs[CONFIGURE_LANGUAGE_DIALOG]
command = language_configure_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_language_configure_dialog(cmd, param):
handle = studio_dialogs[CONFIGURE_LANGUAGE_DIALOG]
command = language_configure_commands.index(cmd)
return(post_to_studio(handle, command, param))
# command the language configure dialog to add a language
def add_language():
logging.info('add a language')
send_to_language_configure_dialog('CMD_ADD_LANGUAGE', 0)
# command the language configure dialog to delete a language
def delete_language():
logging.info('delete a language')
send_to_language_configure_dialog('CMD_DELETE_LANGUAGE', 0)
# command the languge configure dialog to select a language index
def select_language_index(language_index):
logging.info('select language index: %d', language_index)
send_to_language_configure_dialog('CMD_SELECT_LANGUAGE_INDEX', language_index)
# command the language configure dialog to select a language id
def select_language_id(language):
logging.info('select language id: %s', language)
send_to_language_configure_dialog('CMD_SELECT_LANGUAGE_ID', language)
def check_support_bidi_text(check):
if check:
logging.info('check on support bidi text box')
else:
logging.info('check off support bidi text box')
send_to_language_configure_dialog('CMD_CHECK_SUPPORT_BIDI_TEXT', check)
def check_reorder_bidi_text(check):
if check:
logging.info('check on reorder bidi text box')
else:
logging.info('check off reorder bidi text box')
send_to_language_configure_dialog('CMD_CHECK_REORDER_BIDI_TEXT', check)
def check_support_thai_glyph_shapping(check):
if check:
logging.debug('check on support support thai glyph shaping box')
else:
logging.debug('check off support support thai glyph shaping box')
send_to_language_configure_dialog('CMD_CHECK_SUPPORT_THAI_SHAPING', check)
def check_gen_adjusted_thai_string(check):
if check:
logging.debug('check on generate adjusted thai string box')
else:
logging.debug('check off generate adjusted thai string box')
send_to_language_configure_dialog('CMD_CHECK_GEN_ADJUSTED_THAI', check)
# command the languge configure dialog to save the changes
def save_language_configure():
logging.info('save language configuration')
post_to_language_configure_dialog('CMD_SAVE_LANGUAGE_CONFIGURE', 0)
wait_dialog_close(CONFIGURE_LANGUAGE_DIALOG)
# command the language configure dialog to cancel the changes
def cancel_language_configure():
logging.info('cancel language configuration')
post_to_language_configure_dialog('CMD_CANCEL_LANGUAGE_CONFIGURE', 0)
wait_dialog_close(CONFIGURE_LANGUAGE_DIALOG)
#================================================================#
# Send Commands to Project Configure Dialog #
#================================================================#
project_configure_commands = [
'',
'CMD_CONFIGURE_SOURCE_PATH',
'CMD_CONFIGURE_HEADER_PATH',
'CMD_CONFIGURE_RESOURCE_PATH',
'CMD_CONFIGURE_X_RES',
'CMD_CONFIGURE_Y_RES',
'CMD_CONFIGURE_DISPLAY_NUM',
'CMD_SELECT_DISPLAY_INDEX',
'CMD_CONFIGURE_DISPLAY_NAME',
'CMD_CONFIGURE_DISPLAY_COLOR_FORMAT',
'CMD_CONFIGURE_DISPLAY_COLOR_DEPTH',
'CMD_CONFIGURE_DISPLAY_RGB_BITS',
'CMD_CONFIGURE_MINOR_VERSION',
'CMD_CONFIGURE_SERVICE_PACK',
'CMD_CONFIGURE_CANVAS_ALLOCATE',
'CMD_CONFIGURE_CPU_TYPE',
'CMD_CONFIGURE_BIG_ENDIAN',
'CMD_SAVE_PROJECT_CONFIGURE',
'CMD_CANCEL_PROJECT_CONFIGURE',
'CMD_IS_DEFAULT_MAP_FORMAT',
'CMD_GET_CPU_TYPE',
'CMD_GET_DISPLAY_COLOR_FORMAT',
'CMD_GET_DISPLAY_COLOR_DEPTH',
'CMD_IS_1555_FORMAT',
'CMD_IS_4444_FORAMT',
'CMD_IS_332_FORMAT',
'CMD_IS_NEW_PROJECT',
'CMD_OPEN_ADVANCED_SETTINGS',
'CMD_SET_AA_TEXT_COLORS'
]
def send_to_project_configure_dialog(cmd, param):
handle = studio_dialogs[CONFIGURE_PROJECT_DIALOG]
command = project_configure_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_project_configure_dialog(cmd, param):
handle = studio_dialogs[CONFIGURE_PROJECT_DIALOG]
command = project_configure_commands.index(cmd)
return(post_to_studio(handle, command, param))
def is_default_map_format():
return send_to_project_configure_dialog('CMD_IS_DEFAULT_MAP_FORMAT', 0)
def get_cpu_type():
return send_to_project_configure_dialog('CMD_GET_CPU_TYPE', 0)
def get_display_color_format():
return send_to_project_configure_dialog('CMD_GET_DISPLAY_COLOR_FORMAT', 0)
def get_display_color_depth():
return send_to_project_configure_dialog('CMD_GET_DISPLAY_COLOR_DEPTH', 0)
def is_1555_format():
return send_to_project_configure_dialog('CMD_IS_1555_FORMAT', 0)
def is_4444_format():
return send_to_project_configure_dialog('CMD_IS_4444_FORAMT', 0)
def is_332_format():
return send_to_project_configure_dialog('CMD_IS_332_FORMAT', 0)
def is_new_project():
return send_to_project_configure_dialog('CMD_IS_NEW_PROJECT', 0)
def set_aa_text_colors(count):
param = str(count)
logging.info('set palette mode aa text colors = %d', count)
send_to_project_configure_dialog('CMD_SET_AA_TEXT_COLORS', param)
def configure_source_path(path):
path = os.path.realpath(path)
if os.path.exists(path) == False:
os.makedirs(path)
logging.info('set source files path: %s', path)
send_to_project_configure_dialog('CMD_CONFIGURE_SOURCE_PATH', path)
def configure_header_path(path):
path = os.path.realpath(path)
if os.path.exists(path) == False:
os.makedirs(path)
logging.info('set header files path: %s', path)
send_to_project_configure_dialog('CMD_CONFIGURE_HEADER_PATH', path)
def configure_resource_path(path):
path = os.path.realpath(path)
if os.path.exists(path) == False:
os.makedirs(path)
logging.info('set resource files path: %s', path)
send_to_project_configure_dialog('CMD_CONFIGURE_RESOURCE_PATH', path)
def configure_x_res(x_res):
logging.info('set x resolution to "%d"' %x_res)
send_to_project_configure_dialog('CMD_CONFIGURE_X_RES', str(x_res))
def configure_y_res(y_res):
logging.info('set y resolution to "%d"' %y_res)
send_to_project_configure_dialog('CMD_CONFIGURE_Y_RES', str(y_res))
def configure_display_num(display_num):
logging.info('set display num: %d', display_num)
send_to_project_configure_dialog('CMD_CONFIGURE_DISPLAY_NUM', display_num)
def select_display_index(display_index):
logging.info('select display index: %d', display_index)
send_to_project_configure_dialog('CMD_SELECT_DISPLAY_INDEX', display_index)
def configure_display_name(name):
logging.info('set display name to "%s"' %name)
send_to_project_configure_dialog('CMD_CONFIGURE_DISPLAY_NAME', name)
def configure_display_color_format(format):
global reset_map_format
global change_color_table
if (get_display_color_format() != color_formats[format]) and (not is_new_project()):
reset_map_format = True
change_color_table = True
else:
reset_map_format = False
change_color_table = False
logging.info('set display color format to "%s"' %format)
send_to_project_configure_dialog('CMD_CONFIGURE_DISPLAY_COLOR_FORMAT', color_formats[format])
def configure_display_color_depth(color_depth):
logging.info('set display color depth to "%s"' %color_depth)
status = send_to_project_configure_dialog('CMD_CONFIGURE_DISPLAY_COLOR_DEPTH', color_depth)
if (status == 0) and (not is_new_project()): #means set color depth success
logging.info('set display color depth to "%s" successfully.' %color_depth)
global reset_map_format
global change_color_table
reset_map_format = True
change_color_table = True
def configure_display_rgb_bits(rgb_bits):
logging.info('set checkbox rgb bits to "%s"' %rgb_bits)
send_to_project_configure_dialog('CMD_CONFIGURE_DISPLAY_RGB_BITS', rgb_bits)
def configure_minor_version(minor_version):
logging.info('set minor version to "%d"' %minor_version)
send_to_project_configure_dialog('CMD_CONFIGURE_MINOR_VERSION', minor_version)
def configure_service_pack(service_pack):
logging.info('set service pack to "%d"' %service_pack)
send_to_project_configure_dialog('CMD_CONFIGURE_SERVICE_PACK', service_pack)
def configure_canvas_allocate(check):
if check:
logging.info('check on "Allocate Canvas"')
else:
logging.info('check off "Allocate Canvas"')
send_to_project_configure_dialog('CMD_CONFIGURE_CANVAS_ALLOCATE', check)
def configure_cpu_type(type):
global reset_map_format
if get_cpu_type() != test_constants.cpu_types[type]:
reset_map_format = True
else:
reset_map_format = False
logging.info('set cpu type: %s', type)
send_to_project_configure_dialog('CMD_CONFIGURE_CPU_TYPE', test_constants.cpu_types[type])
def configure_big_endian(check):
if check:
logging.info('check on "big endian"')
else:
logging.info('check off "big endian"')
send_to_project_configure_dialog('CMD_CONFIGURE_BIG_ENDIAN', check)
def open_advanced_settings():
logging.info('open synergy advanced settings dialog')
post_to_project_configure_dialog('CMD_OPEN_ADVANCED_SETTINGS', 0)
wait_dialog_open(SYNERGY_SETTINGS_DIALOG, studio_dialogs[CONFIGURE_PROJECT_DIALOG])
def save_project_configure(wait_close = CLOSE_WAIT):
logging.info("save project configure")
# check if all pixelmaps are default color format
is_default_map = is_default_map_format()
post_to_project_configure_dialog('CMD_SAVE_PROJECT_CONFIGURE', 0)
global reset_map_format
global change_color_table
if change_color_table == True:
logging.info('Close warning dialog about reset color table')
close_message_dialog(studio_dialogs[CONFIGURE_PROJECT_DIALOG])
change_color_table = False
if is_default_map == False and reset_map_format == True:
# a notification message is popup, close it
logging.info('Close warning dialog about reset pixelmap format')
close_message_dialog(studio_dialogs[CONFIGURE_PROJECT_DIALOG])
reset_map_format = False
if wait_close == CLOSE_WAIT:
wait_dialog_close(CONFIGURE_PROJECT_DIALOG)
def cancel_project_configure():
logging.info("cance project configure")
post_to_project_configure_dialog('CMD_CANCEL_PROJECT_CONFIGURE', 0)
wait_dialog_close(CONFIGURE_PROJECT_DIALOG)
#================================================================#
# Send Commands to Color Edit Dialog #
#================================================================#
color_edit_commands = [
'',
'CMD_SET_COLOR_NAME',
'CMD_SET_COLOR_RED',
'CMD_SET_COLOR_GREEN',
'CMD_SET_COLOR_BLUE',
'CMD_SET_COLOR_HUE',
'CMD_SET_COLOR_SAT',
'CMD_SET_COLOR_LUM',
'CMD_PALETTE_COLOR_INDEX',
'CMD_SAVE_COLOR_EDIT',
'CMD_CANCEL_COLOR_EDIT'
]
def send_to_color_edit_dialog(cmd, param):
handle = studio_dialogs[EDIT_COLOR_DIALOG]
command = color_edit_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_color_edit_dialog(cmd, param):
handle = studio_dialogs[EDIT_COLOR_DIALOG]
command = color_edit_commands.index(cmd)
return(post_to_studio(handle, command, param))
# command the color edit dialog to set color name
def set_color_name(name):
logging.info('set color name: %s', name)
send_to_color_edit_dialog('CMD_SET_COLOR_NAME', name)
# command the color edit dialog to set value of red channel
def set_color_red(red):
logging.info('set red value: %d', red)
send_to_color_edit_dialog('CMD_SET_COLOR_RED', str(red))
# command the color edit dialog to set value of green channel
def set_color_green(green):
logging.info('set green value: %d', green)
send_to_color_edit_dialog('CMD_SET_COLOR_GREEN', str(green))
# command the color edit dialog to set value of blue channel
def set_color_blue(blue):
logging.info('set blue value: %d', blue)
send_to_color_edit_dialog('CMD_SET_COLOR_BLUE', str(blue))
# command the color edit dialog to set value of hue channel
def set_color_hue(hue):
logging.info('set hue value: %d', hue)
send_to_color_edit_dialog('CMD_SET_COLOR_HUE', str(hue))
# command the color edit dialog to set value of saturation channel
def set_color_sat(sat):
logging.info('set sat value: %d', sat)
send_to_color_edit_dialog('CMD_SET_COLOR_SAT', str(sat))
# command the color edit dialog to set value of luminance channel
def set_color_lum(lum):
logging.info('set lum value: %d', lum)
send_to_color_edit_dialog('CMD_SET_COLOR_LUM', str(lum))
def set_palette_color_index(index):
logging.info('set palette color index: %d', index)
send_to_color_edit_dialog('CMD_PALETTE_COLOR_INDEX', index)
# command the color edit dialog to save color edit
def save_color_edit(wait_close = CLOSE_WAIT):
logging.info('save color edit')
post_to_color_edit_dialog('CMD_SAVE_COLOR_EDIT', 0)
if wait_close == CLOSE_WAIT:
wait_dialog_close(EDIT_COLOR_DIALOG)
# command the color edit dialog to cancel color edit
def cancel_color_edit():
logging.info('cancel color edit')
post_to_color_edit_dialog('CMD_CANCEL_COLOR_EDIT', 0)
wait_dialog_close(EDIT_COLOR_DIALOG)
#================================================================#
# Send Commands to Font Edit Dialog #
#================================================================#
font_edit_commands = [
'',
'CMD_SET_FONT_PATH',
'CMD_SET_FONT_NAME',
'CMD_SET_FONT_HEIGHT',
'CMD_SET_FONT_HEIGHT_POST',
'CMD_SET_FONT_FORMAT',
'CMD_SET_FONT_COMPRESSION',
'CMD_SET_FONT_GENERATE_KERNING',
'CMD_SET_PAGE_RANGE',
'CMD_CHECK_EXTENDED_UNICODE',
'CMD_CHECK_CUSTOM_OUTPUT',
'CMD_SET_CUSTOM_OUTPUT_FILE',
'CMD_SAVE_FONT_EDIT',
'CMD_CANCEL_FONT_EDIT'
]
def send_to_font_edit_dialog(cmd, param):
handle = studio_dialogs[EDIT_FONT_DIALOG]
command = font_edit_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_font_edit_dialog(cmd, param):
handle = studio_dialogs[EDIT_FONT_DIALOG]
command = font_edit_commands.index(cmd)
return(post_to_studio(handle, command, param))
# command the font edit dialog to set font path
def set_font_path(font_path):
logging.info('set truetype path: %s', font_path)
send_to_font_edit_dialog('CMD_SET_FONT_PATH', font_path)
# command the font edit dialog to set font name
def set_font_name(font_name):
logging.info('set font name: %s', font_name)
send_to_font_edit_dialog('CMD_SET_FONT_NAME', font_name)
# command the font edit dialog to set font format
def set_font_format(format):
logging.info('set font format: %d', font_formats[format])
send_to_font_edit_dialog('CMD_SET_FONT_FORMAT', font_formats[format])
# command the font edit dialog to set font height
def set_font_height(height):
logging.info('set font height: %d', height)
send_to_font_edit_dialog('CMD_SET_FONT_HEIGHT', str(height))
def set_font_height_post(height, close_notification = False):
logging.info('set font height: %d', height)
post_to_font_edit_dialog('CMD_SET_FONT_HEIGHT_POST', str(height))
if close_notification == True:
close_message_dialog(studio_dialogs[EDIT_FONT_DIALOG])
# command the font edit dialog to set font compression
def set_font_compression(compress):
logging.info('set font compression: %d', compress)
send_to_font_edit_dialog('CMD_SET_FONT_COMPRESSION', compress)
def set_font_generate_kerning(kerning):
logging.info('set font generate kerning info: %d', kerning)
send_to_font_edit_dialog('CMD_SET_FONT_GENERATE_KERNING', kerning)
# command the font edit dialog to set page range information
def set_page_range(range_index, range_enabled, range_start, range_end):
logging.info('set page range, range_index %d, range_enabled, %d range_start %s, range_end %s',
range_index, range_enabled, range_start, range_end)
param = str(range_index) + ','
param += str(range_enabled) + ','
param += str(range_start) + ','
param += str(range_end)
send_to_font_edit_dialog('CMD_SET_PAGE_RANGE', param)
# command the font edit dialog to check on/off extended unicode support
def check_extended_unicode(check):
logging.info('check extended unicode support: %d', check)
send_to_font_edit_dialog('CMD_CHECK_EXTENDED_UNICODE', check)
def check_font_custom_output(check):
logging.info('check font custom output: %d', check)
send_to_font_edit_dialog('CMD_CHECK_CUSTOM_OUTPUT', check)
def set_font_custom_output_file(filename):
logging.info('set font custom output file: %s', filename)
send_to_font_edit_dialog('CMD_SET_CUSTOM_OUTPUT_FILE', filename)
# command the font edit dialog to save modifications
def save_font_edit(wait_close = CLOSE_WAIT):
logging.info('save font edit')
post_to_font_edit_dialog('CMD_SAVE_FONT_EDIT', 0)
if wait_close == CLOSE_WAIT:
wait_dialog_close(EDIT_FONT_DIALOG)
# command the font edit dialog to cancel modifications
def cancel_font_edit():
logging.info('cancel font edit')
post_to_font_edit_dialog('CMD_CANCEL_FONT_EDIT', 0)
wait_dialog_close(EDIT_FONT_DIALOG)
#================================================================#
# Send Commands to Pixelmap Edit Dialog #
#================================================================#
pixelmap_edit_commands = [
"",
'CMD_SET_IMAGE_PATH',
'CMD_SET_IMAGE_NAME',
'CMD_CHECK_CUSTOM_OUTPUT',
'CMD_SET_CUSTOM_OUTPUT_FILE',
'CMD_CHECK_RAW_FORMAT',
'CMD_CHECK_COMPRESS',
'CMD_CHECK_ALPHA',
'CMD_CHECK_DITHER',
'CMD_SET_OUTPUT_FORMAT',
'CMD_SET_PALETTE_TYPE',
'CMD_SAVE_PIXELMAP_EDIT',
'CMD_CANCEL_PIXELMAP_EDIT'
]
def send_to_pixelmap_edit_dialog(cmd, param):
handle = studio_dialogs[EDIT_PIXELMAP_DIALOG]
command = pixelmap_edit_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_pixelmap_edit_dialog(cmd, param):
handle = studio_dialogs[EDIT_PIXELMAP_DIALOG]
command = pixelmap_edit_commands.index(cmd)
return(post_to_studio(handle, command, param))
def set_image_path(path):
logging.info('set image path: %s', path)
send_to_pixelmap_edit_dialog('CMD_SET_IMAGE_PATH', path)
def set_image_id_name(id_name):
logging.info('set image id name: %s', id_name)
send_to_pixelmap_edit_dialog('CMD_SET_IMAGE_NAME', id_name)
def check_custom_output(check):
logging.info('check custom output: %d', check)
send_to_pixelmap_edit_dialog('CMD_CHECK_CUSTOM_OUTPUT', check)
def set_custom_output_file(filename):
logging.info('set custom output file: %s', filename)
send_to_pixelmap_edit_dialog('CMD_SET_CUSTOM_OUTPUT_FILE', filename)
def check_raw_format(check, close_edit_dialog = False):
logging.info('check raw format: %d', check)
if(close_edit_dialog == True):
post_to_pixelmap_edit_dialog('CMD_CHECK_RAW_FORMAT', check)
close_error_dialog(studio_dialogs[EDIT_PIXELMAP_DIALOG])
else:
send_to_pixelmap_edit_dialog('CMD_CHECK_RAW_FORMAT', check)
def check_compress(check):
logging.info('check compress: %d', check)
send_to_pixelmap_edit_dialog('CMD_CHECK_COMPRESS', check)
def check_alpha(check):
logging.info('check compress: %d', check)
send_to_pixelmap_edit_dialog('CMD_CHECK_ALPHA', check)
def check_dither(check):
logging.info('check dither: %d', check)
send_to_pixelmap_edit_dialog('CMD_CHECK_DITHER', check)
def set_output_format(format):
logging.info('set output format: %s', format)
send_to_pixelmap_edit_dialog('CMD_SET_OUTPUT_FORMAT', color_formats[format])
def set_palette_type(type):
logging.info('set palette type: %s', format)
send_to_pixelmap_edit_dialog('CMD_SET_PALETTE_TYPE', palette_types[type])
def save_pixelmap_edit(wait_close = CLOSE_WAIT):
logging.info('save pixelmap edit')
post_to_pixelmap_edit_dialog('CMD_SAVE_PIXELMAP_EDIT', 0)
if wait_close == CLOSE_WAIT:
wait_dialog_close(EDIT_PIXELMAP_DIALOG)
def cancel_pixelmap_edit():
logging.info('cancel pixelmap edit')
post_to_pixelmap_edit_dialog('CMD_CANCEL_PIXELMAP_EDIT', 0)
wait_dialog_close(EDIT_PIXELMAP_DIALOG)
#================================================================#
# Send Commands to Folder Name Dialog #
#================================================================#
folder_name_commands=[
'',
'CMD_SET_FOLDER_NAME',
'CMD_SAVE_FOLDER_NAME_EDIT',
'CMD_CHECK_SPECIFY_OUTPUT_FILE',
'CMD_SET_FOLDER_OUTPUT_FILE_NAME',
]
def send_to_folder_name_dialog(cmd, param):
handle = studio_dialogs[EDIT_FOLDER_NAME_DIALOG]
command = folder_name_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_folder_name_dialog(cmd, param):
handle = studio_dialogs[EDIT_FOLDER_NAME_DIALOG]
command = folder_name_commands.index(cmd)
return(post_to_studio(handle, command, param))
def set_folder_name(name):
logging.info('set folder name to "%s"', name)
send_to_folder_name_dialog('CMD_SET_FOLDER_NAME', name)
def save_folder_name_edit():
logging.info('save folder name edit')
post_to_folder_name_dialog('CMD_SAVE_FOLDER_NAME_EDIT', 0)
wait_dialog_close(EDIT_FOLDER_NAME_DIALOG)
def check_specify_output_file(check):
logging.info('set folder name to "%d"', check)
send_to_folder_name_dialog('CMD_CHECK_SPECIFY_OUTPUT_FILE', check)
def set_folder_output_file_name(name):
logging.info('set folder output file name to "%s"', name)
send_to_folder_name_dialog('CMD_SET_FOLDER_OUTPUT_FILE_NAME', name)
#================================================================#
# Send Commands to New Project Dialog #
#================================================================#
new_project_commands = [
'',
'CMD_SET_NEW_PROJECT_PATH',
'CMD_SET_NEW_PROJECT_NAME',
'CMD_SAVE_NEW_PROJECT_CREATE',
'CMD_CANCEL_NEW_PROJECT_CREATE'
]
def send_to_new_project_dialog(cmd, param):
handle = studio_dialogs[CREATE_NEW_PROJECT_DIALOG]
command = new_project_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_new_project_dialog(cmd, param):
handle = studio_dialogs[CREATE_NEW_PROJECT_DIALOG]
command = new_project_commands.index(cmd)
return(post_to_studio(handle, command, param))
def set_new_project_path(path):
path = os.path.realpath(path)
if os.path.exists(path) == False:
os.makedirs(path)
logging.info('set project path to "%s"', path)
send_to_new_project_dialog('CMD_SET_NEW_PROJECT_PATH', path)
def set_new_project_name(name):
logging.info('set project name to "%s"', name)
send_to_new_project_dialog('CMD_SET_NEW_PROJECT_NAME', name)
def save_new_project_create():
logging.info('save new project create')
post_to_new_project_dialog('CMD_SAVE_NEW_PROJECT_CREATE', 0)
wait_dialog_close(CREATE_NEW_PROJECT_DIALOG)
# wait for project configure dialog show up
wait_dialog_open(test_utils.CONFIGURE_PROJECT_DIALOG)
# save configure
save_project_configure()
def cancel_new_project_create():
logging.info('cancel new project create')
post_to_new_project_dialog('CMD_CANCEL_NEW_PROJECT_CREATE', 0)
wait_dialog_close(CREATE_NEW_PROJECT_DIALOG)
#================================================================#
# Send Commands to String Table Dialog #
#================================================================#
string_edit_commands = [
'',
'CMD_GET_STRING_COUNT',
'CMD_ADD_STRING',
'CMD_DELETE_STRING',
'CMD_IMPORT_STRING',
'CMD_EXPORT_STRING',
'CMD_TOGGLE_THREE_COLUMN_MODE',
'CMD_INCREMENT_TRANS_LANGUAGE',
'CMD_DECREMENT_TRANS_LANGUAGE',
'CMD_EDIT_TOP_STRING',
'CMD_EDIT_BOTTOM_STRING',
'CMD_EDIT_STRING_ID',
'CMD_SELECT_STRING',
'CMD_SAVE_STRING_EDIT',
'CMD_CANCEL_STRING_EDIT',
'CMD_SORT_STRING'
]
def send_to_string_edit_dialog(cmd, param):
handle = studio_dialogs[STRING_TABLE_EDITOR_DIALOG]
command = string_edit_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_string_edit_dialog(cmd, param):
handle = studio_dialogs[STRING_TABLE_EDITOR_DIALOG]
command = string_edit_commands.index(cmd)
return(post_to_studio(handle, command, param))
# command the string table edit dialog to get string count
def get_string_count():
return send_to_string_edit_dialog('CMD_GET_STRING_COUNT', 0)
# command the string table edit dialog to add a string
def add_string():
logging.info('add a string')
send_to_string_edit_dialog('CMD_ADD_STRING', 0)
# command the string table edit dialog to delete a string
def delete_string():
logging.info('delete a string')
send_to_string_edit_dialog('CMD_DELETE_STRING', 0)
# command the string table edit dialog to import a xliff file
def import_string(filename):
filename = os.path.realpath(filename)
logging.info('import string file: %s', filename)
post_to_string_edit_dialog('CMD_IMPORT_STRING', filename)
close_message_dialog(studio_dialogs[STRING_TABLE_EDITOR_DIALOG])
# command the string table edit dialog to export a xliff file
def export_string():
logging.info('export to string file')
post_to_string_edit_dialog('CMD_EXPORT_STRING', 0)
wait_dialog_open(STRING_EXPORT_CONTROL_DIALOG, studio_dialogs[STRING_TABLE_EDITOR_DIALOG])
# command the string table edit dialog to toggole three column mode
def toggle_three_column_mode():
logging.info('toggle three column mode')
send_to_string_edit_dialog('CMD_TOGGLE_THREE_COLUMN_MODE', 0)
# command the string table edit dialog to increment transfer language
def increment_trans_language():
logging.info('increment transfer language')
send_to_string_edit_dialog('CMD_INCREMENT_TRANS_LANGUAGE', 0)
# command the string table edit dialog to decrement transfer language
def decrement_trans_language():
logging.info('decrement transfer language')
send_to_string_edit_dialog('CMD_DECREMENT_TRANS_LANGUAGE', 0)
# command the string table edit dialog to edit top string
def edit_top_string(string):
logging.info('edit top string: %s', string.encode(sys.stdout.encoding, 'replace'))
send_to_string_edit_dialog('CMD_EDIT_TOP_STRING', string)
# command the string table edit dialog to edit bottom string
def edit_bottom_string(string):
logging.info('edit bottom string: %s', string.encode(sys.stdout.encoding, 'replace'))
send_to_string_edit_dialog('CMD_EDIT_BOTTOM_STRING', string)
# command the string table edit dialog to edit string id
def edit_string_id(id_name):
logging.info('edit string id: %s', id_name)
send_to_string_edit_dialog('CMD_EDIT_STRING_ID', id_name)
# command the string table edit dialog to select a string
def select_string(row_index):
logging.info('select string row: %d', row_index)
send_to_string_edit_dialog('CMD_SELECT_STRING', row_index)
# command the string table edit dialog to save the string table changes
def save_string_edit(wait_close = CLOSE_WAIT):
logging.info('save string edit')
post_to_string_edit_dialog('CMD_SAVE_STRING_EDIT', 0)
if wait_close == CLOSE_WAIT:
wait_dialog_close(STRING_TABLE_EDITOR_DIALOG)
# command the string table edit dialog to close dialog
def cancel_string_edit():
logging.info('cancel string edit')
post_to_string_edit_dialog('CMD_CANCEL_STRING_EDIT', 0)
wait_dialog_close(STRING_TABLE_EDITOR_DIALOG)
def sort_string(type):
logging.info('sort string by: %s', type)
send_to_string_edit_dialog('CMD_SORT_STRING', type)
#================================================================#
# Send Commands to String Export Dialog #
#================================================================#
string_export_commands = [
'',
'CMD_SET_STRING_EXPORT_SRC_LANGUAGE',
'CMD_SET_STRING_EXPORT_TARGET_LANGUAGE',
'CMD_SET_XLIFF_VERSION',
'CMD_SET_STRING_EXPORT_FILENAME',
'CMD_SET_STRING_EXPORT_PATH',
'CMD_SELECT_STRING_EXPORT_FORMAT',
'CMD_SAVE_STRING_EXPORT',
'CMD_CANCEL_STRING_EXPORT'
]
def send_to_string_export_dialog(cmd, param):
handle = studio_dialogs[STRING_EXPORT_CONTROL_DIALOG]
command = string_export_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_string_export_dialog(cmd, param):
handle = studio_dialogs[STRING_EXPORT_CONTROL_DIALOG]
command = string_export_commands.index(cmd)
return(post_to_studio(handle, command, param))
# command the string export control dialog to set source language
def set_string_export_src_language(language):
logging.info('set source language: %s', language)
send_to_string_export_dialog('CMD_SET_STRING_EXPORT_SRC_LANGUAGE', language)
# command the string export control dialog to set target language
def set_string_export_target_language(language):
logging.info('set target language: %s', language)
send_to_string_export_dialog('CMD_SET_STRING_EXPORT_TARGET_LANGUAGE', language)
# command the string export control dialog to set xliff version
def set_xliff_version(version):
logging.info('set XLIFF version: %s', test_constants.xliff_versions[version])
send_to_string_export_dialog('CMD_SET_XLIFF_VERSION', test_constants.xliff_versions[version])
# command the string export control dialog to set string export filename
def set_string_export_filename(filename):
logging.info('set string export filename: %s', filename)
send_to_string_export_dialog('CMD_SET_STRING_EXPORT_FILENAME', filename)
# command the string export control dialog to set string export filepath
def set_string_export_path(path):
path = os.path.realpath(path)
if os.path.exists(path) == False:
os.makedirs(path)
logging.info('set string export file path: %s', path)
send_to_string_export_dialog('CMD_SET_STRING_EXPORT_PATH', path)
def select_string_export_format(format_type):
logging.info('set string export format to: %s', test_constants.string_export_types[format_type])
send_to_string_export_dialog('CMD_SELECT_STRING_EXPORT_FORMAT', test_constants.string_export_types[format_type])
# command the string export control dialog to save string export
def save_string_export():
logging.info('save string export')
post_to_string_export_dialog('CMD_SAVE_STRING_EXPORT', 0)
wait_dialog_close(STRING_EXPORT_CONTROL_DIALOG, studio_dialogs[STRING_TABLE_EDITOR_DIALOG])
close_message_dialog(studio_dialogs[STRING_TABLE_EDITOR_DIALOG])
# command the string export control dialog to cancel string export
def cancel_string_export():
logging.info('cancel string export')
post_to_string_export_dialog('CMD_CANCEL_STRING_EXPORT', 0)
wait_dialog_close(STRING_EXPORT_CONTROL_DIALOG, studio_dialogs[STRING_TABLE_EDITOR_DIALOG])
#================================================================#
# Send Commands to Grid Snap Setting Dialog #
#================================================================#
grid_snap_setting_commands = [
'',
'CMD_CHECK_SHOW_GRID',
'CMD_CHECK_SNAP',
'CMD_SET_GRID_SPACING',
'CMD_SET_SNAP_SPACING',
'CMD_SAVE',
'CMD_CANCEL'
]
def send_to_grid_snap_setting_dialog(cmd, param):
handle = studio_dialogs[GRID_SNAP_SETTING_DIALOG]
command = grid_snap_setting_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_grid_snap_setting_dialog(cmd, param):
handle = studio_dialogs[GRID_SNAP_SETTING_DIALOG]
command = grid_snap_setting_commands.index(cmd)
return(post_to_studio(handle, command, param))
def check_show_grid(check):
if check:
logging.info('check on show grid')
else:
logging.info('check off show grid')
send_to_grid_snap_setting_dialog('CMD_CHECK_SHOW_GRID', check)
def check_snap(check):
if check:
logging.info('check on snap to grid')
else:
logging.info('check off snap to grid')
send_to_grid_snap_setting_dialog('CMD_CHECK_SNAP', check)
def set_grid_spacing(spacing):
logging.info('set grid spacing to: %d', spacing)
send_to_grid_snap_setting_dialog('CMD_SET_GRID_SPACING', spacing)
def set_snap_spacing(spacing):
logging.info('set snap spacing to: %d', spacing)
send_to_grid_snap_setting_dialog('CMD_SET_SNAP_SPACING', spacing)
def save_grid_snap_setting():
logging.info('save grid snap setting')
post_to_grid_snap_setting_dialog('CMD_SAVE', 0)
wait_dialog_close(GRID_SNAP_SETTING_DIALOG)
def cancel_grid_snap_setting():
logging.info('save grid snap setting')
post_to_grid_snap_setting_dialog('CMD_CANCEL', 0)
wait_dialog_close(GRID_SNAP_SETTING_DIALOG)
#================================================================#
# Send Commands to Resource Export Dialog #
#================================================================#
resource_export_dialog_commands = [
'',
'CMD_CHECK_BINARY_MODE',
'CMD_CHECK_RES_HEADER_GEN',
'CMD_CHECK_RESOURCE',
'CMD_SET_CUSTOM_RESOURCE_NAME',
'CMD_GENERATE',
'CMD_CANCEL'
]
def send_to_resource_export_dialog(cmd, param):
handle = studio_dialogs[RESOURCE_EXPORT_DIALOG]
command = resource_export_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_resource_export_dialog(cmd, param):
handle = studio_dialogs[RESOURCE_EXPORT_DIALOG]
command = resource_export_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def check_binary_mode(check):
if check:
logging.info('check on binary mode')
else:
logging.info('check off binary mode')
send_to_resource_export_dialog('CMD_CHECK_BINARY_MODE', check)
def check_res_header_gen(check):
if check:
logging.info('check on resource header generation')
else:
logging.info('check off resource header genearation')
send_to_resource_export_dialog('CMD_CHECK_RES_HEADER_GEN', check)
def check_resource(parent_name, resource_name, check):
if check:
logging.info('check on %s/%s', parent_name, resource_name)
else:
logging.info('check off %s/%s', parent_name, resource_name)
param = parent_name + ','
param += resource_name + ','
param += str(check)
send_to_resource_export_dialog('CMD_CHECK_RESOURCE', param)
def set_custom_resource_name(custom_name):
logging.info('set ')
send_to_resource_export_dialog('CMD_SET_CUSTOM_RESOURCE_NAME', custom_name)
def click_generate_button(close_notification = 1):
logging.info('click generate button')
post_to_resource_export_dialog('CMD_GENERATE', 0)
wait_dialog_close(RESOURCE_EXPORT_DIALOG)
if close_notification:
close_message_dialog()
def cancel_resource_generation():
logging.info('cance resource generation')
post_to_resource_export_dialog('CMD_CANCEL', 0)
wait_dialog_close(RESOURCE_EXPORT_DIALOG)
#================================================================#
# Send Commands to Configure Theme Dialog #
#================================================================#
configure_theme_dialog_commands = [
'',
'CMD_SELECT_DISPLAY_NAME',
'CMD_ADD_THEME',
'CMD_DELETE_THEME',
'CMD_SET_ACTIVE_THEME',
'CMD_SELECT_THEME_INDEX',
'CMD_SET_THEME_NAME',
'CMD_EDIT_PALETTE',
'CMD_CANCEL_THEME_CONFIGURE',
'CMD_SAVE_THEME_CONFIGURE'
]
def send_to_configure_theme_dialog(cmd, param):
handle = studio_dialogs[CONFIGURE_THEME_DIALOG]
command = configure_theme_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_configure_theme_dialog(cmd, param):
handle = studio_dialogs[CONFIGURE_THEME_DIALOG]
command = configure_theme_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def select_display_name(display_name):
logging.info("select display name: %s", display_name)
send_to_configure_theme_dialog('CMD_SELECT_DISPLAY_NAME', display_name)
def add_theme():
logging.info("increate theme number")
send_to_configure_theme_dialog('CMD_ADD_THEME', 0)
def delete_theme():
logging.info("decrease theme number")
send_to_configure_theme_dialog('CMD_DELETE_THEME', 0)
def set_active_theme(theme_name):
logging.info("set active theme: %s", theme_name)
send_to_configure_theme_dialog('CMD_SET_ACTIVE_THEME', theme_name)
def select_theme_index(index):
logging.info("select theme index: %d", index)
send_to_configure_theme_dialog('CMD_SELECT_THEME_INDEX', index)
def post_select_theme_index(index):
logging.info("post select theme index: %d", index)
post_to_configure_theme_dialog('CMD_SELECT_THEME_INDEX', index)
def set_theme_name(theme_name):
logging.info("set theme name: %s", theme_name)
send_to_configure_theme_dialog('CMD_SET_THEME_NAME', theme_name)
def edit_palette():
logging.info("edit palette")
post_to_configure_theme_dialog('CMD_EDIT_PALETTE', 0)
wait_dialog_open(EDIT_PALETTE_DIALOG, studio_dialogs[CONFIGURE_THEME_DIALOG])
def cancel_theme_configure():
logging.info("cancel theme configure")
post_to_configure_theme_dialog('CMD_CANCEL_THEME_CONFIGURE', 0)
wait_dialog_close(CONFIGURE_THEME_DIALOG)
def save_theme_configure(wait_close = CLOSE_WAIT):
logging.info("save theme configure")
post_to_configure_theme_dialog('CMD_SAVE_THEME_CONFIGURE', 0)
if wait_close == CLOSE_WAIT:
wait_dialog_close(CONFIGURE_THEME_DIALOG)
#================================================================#
# Send Commands to Edit palette #
#================================================================#
palette_layout_dialog_commands = [
'',
'CMD_SET_PREDEFINED_PALETTE_ENTRY',
'CMD_SET_PALETTE_COLOR',
'CMD_SAVE_PALETTE_EDIT',
'CMD_CANCEL_PALETTE_EDIT'
]
def send_to_palette_layout_dialog(cmd, param):
handle = studio_dialogs[EDIT_PALETTE_DIALOG]
command = palette_layout_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_palette_layout_dialog(cmd, param):
handle = studio_dialogs[EDIT_PALETTE_DIALOG]
command = palette_layout_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def set_predefined_palette_entry(count):
logging.info("set predefined palette entry to %d", count)
send_to_palette_layout_dialog('CMD_SET_PREDEFINED_PALETTE_ENTRY', count)
def set_palette_color(index, red, green, blue):
color = (red << 16) | (green << 8) | blue
logging.info("set color[%d] to %x", index, color)
param = str(index) + ',' + str(color)
send_to_palette_layout_dialog('CMD_SET_PALETTE_COLOR', param)
def save_palette_edit():
logging.info("save palette edit")
post_to_palette_layout_dialog('CMD_SAVE_PALETTE_EDIT', 0)
wait_dialog_close(EDIT_PALETTE_DIALOG, studio_dialogs[CONFIGURE_THEME_DIALOG])
def cancel_palette_edit():
logging.info("cancel palette edit")
post_to_palette_layout_dialog('CMD_CANCEL_PALETTE_EDIT', 0)
wait_dialog_close(EDIT_PALETTE_DIALOG, studio_dialogs[CONFIGURE_THEME_DIALOG])
#================================================================#
# Send Commands to String Scroll Wheel Edit Dialog #
#================================================================#
string_scroll_wheel_edit_dialog_commands = [
'',
'CMD_SET_STRING',
'CMD_SAVE',
'CMD_CANCEL'
]
def send_to_string_scroll_wheel_edit_dialog(cmd, param):
handle = studio_dialogs[STRING_SCROLL_WHEEL_EDIT_DIALOG]
command = string_scroll_wheel_edit_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_string_scroll_wheel_edit_dialog(cmd, param):
handle = studio_dialogs[STRING_SCROLL_WHEEL_EDIT_DIALOG]
command = string_scroll_wheel_edit_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def edit_string_scroll_wheel_string(id, string):
logging.info("edit string list: row = %d, string = %s", id, string)
param = str(id) + ',' + string
send_to_string_scroll_wheel_edit_dialog('CMD_SET_STRING', param)
def cancel_string_scroll_wheel_edit():
logging.info("cancel string scroll wheel edit")
post_to_string_scroll_wheel_edit_dialog('CMD_CANCEL', 0)
wait_dialog_close(STRING_SCROLL_WHEEL_EDIT_DIALOG)
def save_string_scroll_wheel_edit():
logging.info("save string scroll wheel edit")
post_to_string_scroll_wheel_edit_dialog('CMD_SAVE', 0)
wait_dialog_close(STRING_SCROLL_WHEEL_EDIT_DIALOG)
#================================================================#
# Send Commands to String Scroll Wheel Edit Dialog #
#================================================================#
string_scroll_wheel_edit_dialog_commands = [
'',
'CMD_SET_STRING',
'CMD_SAVE',
'CMD_CANCEL'
]
def send_to_string_scroll_wheel_edit_dialog(cmd, param):
handle = studio_dialogs[STRING_SCROLL_WHEEL_EDIT_DIALOG]
command = string_scroll_wheel_edit_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_string_scroll_wheel_edit_dialog(cmd, param):
handle = studio_dialogs[STRING_SCROLL_WHEEL_EDIT_DIALOG]
command = string_scroll_wheel_edit_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def edit_string_scroll_wheel_string(id, string):
logging.info("edit string list: row = %d, string = %s", id, string)
param = str(id) + ',' + string
send_to_string_scroll_wheel_edit_dialog('CMD_SET_STRING', param)
def cancel_string_scroll_wheel_edit():
logging.info("cancel string scroll wheel edit")
post_to_string_scroll_wheel_edit_dialog('CMD_CANCEL', 0)
wait_dialog_close(STRING_SCROLL_WHEEL_EDIT_DIALOG)
def save_string_scroll_wheel_edit():
logging.info("save string scroll wheel edit")
post_to_string_scroll_wheel_edit_dialog('CMD_SAVE', 0)
wait_dialog_close(STRING_SCROLL_WHEEL_EDIT_DIALOG)
#================================================================#
# Send Commands to String Scroll Wheel Edit Dialog #
#================================================================#
string_scroll_wheel_edit_dialog_commands = [
'',
'CMD_SET_STRING',
'CMD_SAVE',
'CMD_CANCEL'
]
def send_to_string_scroll_wheel_edit_dialog(cmd, param):
handle = studio_dialogs[STRING_SCROLL_WHEEL_EDIT_DIALOG]
command = string_scroll_wheel_edit_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_string_scroll_wheel_edit_dialog(cmd, param):
handle = studio_dialogs[STRING_SCROLL_WHEEL_EDIT_DIALOG]
command = string_scroll_wheel_edit_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def edit_string_scroll_wheel_string(id, string):
logging.info("edit string list: row = %d, string = %s", id, string)
param = str(id) + ',' + string
send_to_string_scroll_wheel_edit_dialog('CMD_SET_STRING', param)
def cancel_string_scroll_wheel_edit():
logging.info("cancel string scroll wheel edit")
post_to_string_scroll_wheel_edit_dialog('CMD_CANCEL', 0)
wait_dialog_close(STRING_SCROLL_WHEEL_EDIT_DIALOG)
def save_string_scroll_wheel_edit():
logging.info("save string scroll wheel edit")
post_to_string_scroll_wheel_edit_dialog('CMD_SAVE', 0)
wait_dialog_close(STRING_SCROLL_WHEEL_EDIT_DIALOG)
#================================================================#
# Send Commands to Project Import Dialog #
#================================================================#
project_import_dialog_commands = [
'',
'CMD_IMPORT',
'CMD_CANCEL',
'CMD_CHECK_SCREEN'
]
def send_to_project_import_dialog(cmd, param):
handle = studio_dialogs[IMPORT_PROJECT_DIALOG]
command = project_import_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_project_import_dialog(cmd, param):
handle = studio_dialogs[IMPORT_PROJECT_DIALOG]
command = project_import_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def check_import_screen(parent_name, screen_name, check):
if check:
logging.info('check on %s/%s', parent_name, screen_name)
else:
logging.info('check off %s/%s', parent_name, screen_name)
param = parent_name + ','
param += screen_name + ','
param += str(check)
send_to_project_import_dialog('CMD_CHECK_SCREEN', param)
def cancel_project_import_dialog(wait_close = CLOSE_WAIT):
logging.info("cancel project import")
post_to_project_import_dialog('CMD_CANCEL', 0)
if wait_close == CLOSE_WAIT:
wait_dialog_close(IMPORT_PROJECT_DIALOG)
def save_project_import_dialog(wait_close = CLOSE_WAIT):
logging.info("save project import")
post_to_project_import_dialog('CMD_IMPORT', 0)
if wait_close == CLOSE_WAIT:
wait_dialog_close(IMPORT_PROJECT_DIALOG)
#================================================================#
# Send Commands to Option Dialog #
#================================================================#
option_dialog_commands = [
'',
'CMD_SELECT_OPTION'
]
def post_to_option_dialog(cmd, param):
handle = studio_dialogs[OPTION_DIALOG]
command = option_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def select_option(option_index):
wait_dialog_open(OPTION_DIALOG, studio_windows['main_frame'])
logging.info("select option %d", option_index)
post_to_option_dialog('CMD_SELECT_OPTION', option_index)
wait_dialog_close(OPTION_DIALOG, studio_windows['main_frame'])
#================================================================#
# Send Commands to Screen Flow Edit Dialog #
#================================================================#
screen_flow_edit_dialog_commands = [
'',
'CMD_EDIT_TRIGGER_LIST',
'CMD_SAVE_SCREEN_FLOW_EDIT',
'CMD_CANCEL_SCREEN_FLOW_EDIT'
]
def send_to_screen_flow_edit_dialog(cmd, param):
handle = studio_dialogs[SCREEN_FLOW_EDIT_DIALOG]
command = screen_flow_edit_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_screen_flow_edit_dialog(cmd, param):
handle = studio_dialogs[SCREEN_FLOW_EDIT_DIALOG]
command = screen_flow_edit_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def edit_trigger_list(screen_name):
global selected_screen_name;
selected_screen_name = screen_name;
logging.info('edit trigger list: %s', screen_name)
post_to_screen_flow_edit_dialog('CMD_EDIT_TRIGGER_LIST', screen_name)
wait_dialog_open(TRIGGER_LIST_EDIT_DIALOG, studio_dialogs[SCREEN_FLOW_EDIT_DIALOG])
def cancel_screen_flow_edit_dialog():
logging.info("cancel screen flow edit")
post_to_screen_flow_edit_dialog('CMD_CANCEL_SCREEN_FLOW_EDIT', 0)
wait_dialog_close(SCREEN_FLOW_EDIT_DIALOG)
def save_screen_flow_edit_dialog():
logging.info("save screen flow edit")
post_to_screen_flow_edit_dialog('CMD_SAVE_SCREEN_FLOW_EDIT', 0)
wait_dialog_close(SCREEN_FLOW_EDIT_DIALOG)
#================================================================#
# Send Commands to Trigger List Edit Dialog #
#================================================================#
trigger_list_edit_dialog_commands = [
'',
'CMD_ADD_TRIGGER',
'CMD_DELETE_TRIGGER',
'CMD_EDIT_TRIGGER',
'CMD_EDIT_ACTION',
'CMD_SELETE_ROW',
'CMD_SAVE_TRIGGER_LIST_EDIT',
'CMD_CANCEL_TRIGGER_LIST_EDIT'
]
def send_to_trigger_list_edit_dialog(cmd, param):
handle = studio_dialogs[TRIGGER_LIST_EDIT_DIALOG]
command = trigger_list_edit_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_trigger_list_edit_dialog(cmd, param):
handle = studio_dialogs[TRIGGER_LIST_EDIT_DIALOG]
command = trigger_list_edit_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def add_trigger():
logging.info('add trigger')
post_to_trigger_list_edit_dialog('CMD_ADD_TRIGGER', 0)
global TRIGGER_EDIT_DIALOG
TRIGGER_EDIT_DIALOG = 'Add Trigger for [' + selected_screen_name +']'
wait_dialog_open(TRIGGER_EDIT_DIALOG, studio_dialogs[TRIGGER_LIST_EDIT_DIALOG])
def delete_trigger():
logging.info('delete trigger')
send_to_trigger_list_edit_dialog('CMD_DELETE_TRIGGER', 0)
def edit_trigger():
logging.info('edit trigger')
post_to_trigger_list_edit_dialog('CMD_EDIT_TRIGGER', 0)
global TRIGGER_EDIT_DIALOG
TRIGGER_EDIT_DIALOG = 'Edit Trigger for [' + selected_screen_name + ']'
wait_dialog_open(TRIGGER_EDIT_DIALOG, studio_dialogs[TRIGGER_LIST_EDIT_DIALOG])
def edit_action(trigger_name):
logging.info('edit action')
post_to_trigger_list_edit_dialog('CMD_EDIT_ACTION', 0)
global TRIGGER_ACTION_EDIT_DIALOG
TRIGGER_ACTION_EDIT_DIALOG = 'Edit Actions for Trigger [on_' + trigger_name + ']'
wait_dialog_open(TRIGGER_ACTION_EDIT_DIALOG, studio_dialogs[TRIGGER_LIST_EDIT_DIALOG])
def select_trigger_list_row(row):
logging.info('selete trigger list row: %d', row)
send_to_trigger_list_edit_dialog('CMD_SELETE_ROW', row)
def cancel_trigger_list_edit_dialog():
logging.info("cancel trigger list edit")
post_to_trigger_list_edit_dialog('CMD_CANCEL_TRIGGER_LIST_EDIT', 0)
wait_dialog_close(TRIGGER_LIST_EDIT_DIALOG)
def save_trigger_list_edit_dialog():
logging.info("save trigger list edit")
post_to_trigger_list_edit_dialog('CMD_SAVE_TRIGGER_LIST_EDIT', 0)
wait_dialog_close(TRIGGER_LIST_EDIT_DIALOG)
#================================================================#
# Send Commands to Trigger Edit Dialog #
#================================================================#
trigger_edit_dialog_commands = [
'',
'CMD_SET_TRIGGER_TYPE',
'CMD_SET_EVENT_TYPE',
'CMD_SAVE_TRIGGER_EDIT',
'CMD_CANCEL_TRIGGER_EDIT'
]
def send_to_trigger_edit_dialog(cmd, param):
handle = studio_dialogs[TRIGGER_EDIT_DIALOG]
command = trigger_edit_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_trigger_edit_dialog(cmd, param):
handle = studio_dialogs[TRIGGER_EDIT_DIALOG]
command = trigger_edit_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def set_trigger_type(type_string):
logging.info('set trigger type to %s', type_string)
send_to_trigger_edit_dialog('CMD_SET_TRIGGER_TYPE', trigger_types[type_string])
def set_event_type(type_string):
logging.info('set event type to \"%s\"', type_string)
send_to_trigger_edit_dialog('CMD_SET_EVENT_TYPE', type_string)
def cancel_trigger_edit_dialog():
logging.info("cancel trigger edit dialog")
post_to_trigger_edit_dialog('CMD_CANCEL_TRIGGER_EDIT', 0)
wait_dialog_close(TRIGGER_EDIT_DIALOG)
def save_trigger_edit_dialog(wait = CLOSE_WAIT):
logging.info("save trigger edit dialog")
post_to_trigger_edit_dialog('CMD_SAVE_TRIGGER_EDIT', 0)
if wait == CLOSE_WAIT:
wait_dialog_close(TRIGGER_EDIT_DIALOG)
#================================================================#
# Send Commands to Trigger Action Edit Dialog #
#================================================================#
trigger_action_edit_dialog_commands = [
'',
'CMD_ADD_ACTION',
'CMD_SELECT_ACTION',
'CMD_DELETE_ACTION',
'CMD_SELECT_TARGET',
'CMD_SELECT_PARENT',
'CMD_TARGET_SHOW_CHILD_WIDGETS',
'CMD_PARENT_SHOW_CHILD_WIDGETS',
'CMD_EDIT_ACTION_NAME',
'CMD_EDIT_ANIMATION_INFO',
'CMD_CHECK_DETACH_TARGET',
'CMD_CONFIGURE_EASING_FUNCTION',
'CMD_SAVE_TRIGGER_ACTION_EDIT',
'CMD_CANCEL_TRIGGER_ACTION_EDIT'
]
def send_to_trigger_action_edit_dialog(cmd, param):
handle = studio_dialogs[TRIGGER_ACTION_EDIT_DIALOG]
command = trigger_action_edit_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_trigger_action_edit_dialog(cmd, param):
handle = studio_dialogs[TRIGGER_ACTION_EDIT_DIALOG]
command = trigger_action_edit_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def add_action(action_type):
logging.info('set action type to %s', action_type)
post_to_trigger_action_edit_dialog('CMD_ADD_ACTION', 0)
wait_dialog_open(TRIGGER_ACTION_SELECT_DIALOG, studio_dialogs[TRIGGER_ACTION_EDIT_DIALOG])
action_select_dlg_select_action(action_type)
save_action_select_dialog()
def select_action(action_name):
logging.info('select action: %s', action_name)
send_to_trigger_action_edit_dialog('CMD_SELECT_ACTION', action_name)
#def select_action()
def delete_action():
logging.info('delete current selected action')
send_to_trigger_action_edit_dialog('CMD_DELETE_ACTION', 0)
def select_target(target_name):
logging.info('select target \"%s\"', target_name)
send_to_trigger_action_edit_dialog('CMD_SELECT_TARGET', target_name)
def select_parent(parent_name):
logging.info('select parent \"%s\"', parent_name)
send_to_trigger_action_edit_dialog('CMD_SELECT_PARENT', parent_name)
def check_target_show_child_widgets(check):
if check:
logging.info('check on target show child widgets')
else:
logging.info('check off target show child widgets')
send_to_trigger_action_edit_dialog('CMD_TARGET_SHOW_CHILD_WIDGETS', check)
def check_parent_show_child_widgets(check):
if check:
logging.info('check on parent show child widgets')
else:
logging.info('check off parent show child widgets')
send_to_trigger_action_edit_dialog('CMD_PARENT_SHOW_CHILD_WIDGETS', check)
def edit_action_name(name):
logging.info('set action name to \"%s\"', name)
send_to_trigger_action_edit_dialog('CMD_EDIT_ACTION_NAME', name)
def edit_animation_info(control_id, string):
control_id = 'ID_' + control_id
logging.info('set %s = %s', control_id, string)
param = str(animation_param_ids[control_id]) + ',' + string
send_to_trigger_action_edit_dialog('CMD_EDIT_ANIMATION_INFO', param)
def check_detach_target(check):
if check:
logging.info('check on detach target')
else:
logging.info('check off detach target')
send_to_trigger_action_edit_dialog('CMD_CHECK_DETACH_TARGET', check)
def configure_easing_function():
logging.info('click on easing function button')
post_to_trigger_action_edit_dialog('CMD_CONFIGURE_EASING_FUNCTION', 0)
wait_dialog_open(EASING_FUNCTION_SELECT_DIALOG, studio_dialogs[TRIGGER_ACTION_EDIT_DIALOG])
def cancel_trigger_action_edit_dialog():
logging.info("cancel trigger action edit dialog")
post_to_trigger_action_edit_dialog('CMD_CANCEL_TRIGGER_ACTION_EDIT', 0)
wait_dialog_close(TRIGGER_ACTION_EDIT_DIALOG)
def save_trigger_action_edit_dialog(wait = CLOSE_WAIT):
logging.info("save trigger action edit dialog")
post_to_trigger_action_edit_dialog('CMD_SAVE_TRIGGER_ACTION_EDIT', 0)
if wait == CLOSE_WAIT:
wait_dialog_close(TRIGGER_ACTION_EDIT_DIALOG)
#================================================================#
# Send Commands to Trigger Action Select Dialog #
#================================================================#
action_select_dialog_commands = [
'',
'CMD_SELECT_ACTION',
'CMD_SAVE_ACTION_SELECT',
'CMD_CANCEL_ACTION_SELECT'
]
def send_to_action_select_dialog(cmd, param):
handle = studio_dialogs[TRIGGER_ACTION_SELECT_DIALOG]
command = action_select_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_action_select_dialog(cmd, param):
handle = studio_dialogs[TRIGGER_ACTION_SELECT_DIALOG]
command = action_select_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def action_select_dlg_select_action(type):
logging.info('select action type: %s', type)
send_to_action_select_dialog('CMD_SELECT_ACTION', type)
def cancel_action_select_dialog():
logging.info("cancel action select dialog")
post_to_action_select_dialog('CMD_CANCEL_ACTION_SELECT', 0)
wait_dialog_close(TRIGGER_ACTION_SELECT_DIALOG)
def save_action_select_dialog():
logging.info("save action select dialog")
post_to_action_select_dialog('CMD_SAVE_ACTION_SELECT', 0)
wait_dialog_close(TRIGGER_ACTION_SELECT_DIALOG)
#================================================================#
# Send Commands to Easing Function Select Dialog #
#================================================================#
easing_function_select_dialog_commands = [
'',
'CMD_SELECT_EASING_FUNCTION',
'CMD_SAVE_EASING_FUNCTION_SELECT',
'CMD_CANCEL_EASING_FUNCTION_SELECT'
]
def send_to_easing_function_select_dialog(cmd, param):
handle = studio_dialogs[EASING_FUNCTION_SELECT_DIALOG]
command = easing_function_select_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_easing_function_select_dialog(cmd, param):
handle = studio_dialogs[EASING_FUNCTION_SELECT_DIALOG]
command = easing_function_select_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def select_easing_function(name):
logging.info('select easing function: %s', name)
send_to_easing_function_select_dialog('CMD_SELECT_EASING_FUNCTION', name)
def cancel_easing_function_select_dialog():
logging.info("cancel easing function select dialog")
post_to_easing_function_select_dialog('CMD_CANCEL_EASING_FUNCTION_SELECT', 0)
wait_dialog_close(EASING_FUNCTION_SELECT_DIALOG)
def save_easing_function_select_dialog():
logging.info("save easing function select dialog")
post_to_easing_function_select_dialog('CMD_SAVE_EASING_FUNCTION_SELECT', 0)
wait_dialog_close(EASING_FUNCTION_SELECT_DIALOG)
#================================================================#
# Send Commands to Synergy Settings Dialog #
#================================================================#
synergy_settings_dialog_commands = [
'',
'CMD_CHECK_2D_DRAWING_ENGINE',
'CMD_SAVE_SYNERGY_SETTING',
'CMD_CANCEL_SYNERGY_SETTING'
]
def send_to_synergy_settings_dialog(cmd, param):
handle = studio_dialogs[SYNERGY_SETTINGS_DIALOG]
command = synergy_settings_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_synergy_settings_dialog(cmd, param):
handle = studio_dialogs[SYNERGY_SETTINGS_DIALOG]
command = synergy_settings_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def check_2d_drawing_engine(enabled):
logging.info('check 2d drawing engine: %d', enabled)
send_to_synergy_settings_dialog('CMD_CHECK_2D_DRAWING_ENGINE', enabled)
def cancel_synergy_settings_dialog():
logging.info("cancel synergy settings dialog")
post_to_synergy_settings_dialog('CMD_CANCEL_SYNERGY_SETTING', 0)
wait_dialog_close(EASING_FUNCTION_SELECT_DIALOG, studio_dialogs[CONFIGURE_PROJECT_DIALOG])
def save_synergy_settings_dialog():
logging.info("save synergy settings dialog")
post_to_synergy_settings_dialog('CMD_SAVE_SYNERGY_SETTING', 0)
wait_dialog_close(EASING_FUNCTION_SELECT_DIALOG, studio_dialogs[CONFIGURE_PROJECT_DIALOG])
#================================================================#
# Send Commands to Rich Text Edit Dialog #
#================================================================#
rich_text_edit_dialog_commands = [
'',
'CMD_SET_STRING',
'CMD_SAVE',
'CMD_CANCEL'
]
def send_to_rich_text_edit_dialog(cmd, param):
handle = studio_dialogs[RICH_TEXT_EDIT_DIALOG]
command = rich_text_edit_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_rich_text_edit_dialog(cmd, param):
handle = studio_dialogs[RICH_TEXT_EDIT_DIALOG]
command = rich_text_edit_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def edit_rich_text_view_string(string):
logging.info("edit rich text view string: %s", string)
send_to_rich_text_edit_dialog('CMD_SET_STRING', string)
def cancel_rich_text_edit():
logging.info("cancel rich text edit")
post_to_rich_text_edit_dialog('CMD_CANCEL', 0)
wait_dialog_close(RICH_TEXT_EDIT_DIALOG)
def save_rich_text_edit():
logging.info("save rich text edit")
post_to_rich_text_edit_dialog('CMD_SAVE', 0)
wait_dialog_close(RICH_TEXT_EDIT_DIALOG)
#================================================================#
# Send Commands to Edit Sprite Frames Dialog #
#================================================================#
sprite_frame_edit_dialog_commands = [
'',
'CMD_EDIT_FRAME',
'CMD_EDIT_NUM_FRAMES',
'CMD_SET_ALPHA',
'CMD_SET_XOFFSET',
'CMD_SET_YOFFSET',
'CMD_SET_DELAY',
'CMD_CHECK_APPLY_TO_ALL_FRAMES',
'CMD_IMPORT_FRAMES',
'CMD_SAVE',
'CMD_CANCEL'
]
def send_to_sprite_frame_edit_dialog(cmd, param):
handle = studio_dialogs[SPRITE_FRAME_EDIT_DIALOG]
command = sprite_frame_edit_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_sprite_frame_edit_dialog(cmd, param):
handle = studio_dialogs[SPRITE_FRAME_EDIT_DIALOG]
command = sprite_frame_edit_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def edit_sprite_frame(frame_id, pixelmap_string):
logging.info("edit sprite frame: (%d, %s)", frame_id, pixelmap_string)
string = str(frame_id) + ',' + pixelmap_string
send_to_sprite_frame_edit_dialog('CMD_EDIT_FRAME', string)
def edit_sprite_total_frames(frame_count):
logging.info("edit sprite total frames: %d", frame_count)
send_to_sprite_frame_edit_dialog('CMD_EDIT_NUM_FRAMES', frame_count)
def edit_sprite_frame_alpha(value):
logging.info("edit sprite frame alpha: %d", value)
send_to_sprite_frame_edit_dialog('CMD_SET_ALPHA', value)
def edit_sprite_frame_xoffset(xoffset):
logging.info("edit sprite frame x offset: %d", xoffset)
send_to_sprite_frame_edit_dialog('CMD_SET_XOFFSET', xoffset)
def edit_sprite_frame_yoffset(yoffset):
logging.info("edit sprite frame y offset: %d", yoffset)
send_to_sprite_frame_edit_dialog('CMD_SET_YOFFSET', yoffset)
def edit_sprite_frame_delay(delay):
logging.info("edit sprite frame delay: %d", delay)
send_to_sprite_frame_edit_dialog('CMD_SET_DELAY', delay)
def check_apply_to_all_frames(check):
logging.info("check apply to all frames: %d", check)
send_to_sprite_frame_edit_dialog('CMD_CHECK_APPLY_TO_ALL_FRAMES', check)
def import_sprite_frames():
logging.info("import sprite frames")
post_to_sprite_frame_edit_dialog('CMD_IMPORT_FRAMES', 0)
wait_dialog_open(SPRITE_FRAME_IMPORT_DIALOG)
def cancel_sprite_frame_edit():
logging.info("cancel sprite frame edit")
post_to_sprite_frame_edit_dialog('CMD_CANCEL', 0)
wait_dialog_close(SPRITE_FRAME_EDIT_DIALOG)
def save_sprite_frame_edit():
logging.info("save sprite frame edit")
post_to_sprite_frame_edit_dialog('CMD_SAVE', 0)
wait_dialog_close(SPRITE_FRAME_EDIT_DIALOG)
#================================================================#
# Send Commands to Import Sprite Frames Dialog #
#================================================================#
sprite_frame_import_dialog_commands = [
'',
'CMD_SAVE',
'CMD_CANCEL'
]
def send_to_sprite_frame_import_dialog(cmd, param):
handle = studio_dialogs[SPRITE_FRAME_IMPORT_DIALOG]
command = sprite_frame_import_dialog_commands.index(cmd)
return(send_to_studio(handle, command, param))
def post_to_sprite_frame_import_dialog(cmd, param):
handle = studio_dialogs[SPRITE_FRAME_IMPORT_DIALOG]
command = sprite_frame_import_dialog_commands.index(cmd)
return(post_to_studio(handle, command, param))
def cancel_sprite_frame_import_edit():
logging.info("cancel sprite frame import")
post_to_sprite_frame_import_dialog('CMD_CANCEL', 0)
wait_dialog_close(SPRITE_FRAME_IMPORT_DIALOG)
def save_sprite_frame_import_edit():
logging.info("save sprite frame import")
post_to_sprite_frame_import_dialog('CMD_SAVE', 0)
wait_dialog_close(SPRITE_FRAME_IMPORT_DIALOG)