From d57cdaa93c61be7d1c712bba0d628727044abf96 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Fri, 21 Apr 2023 00:16:47 +0100 Subject: [PATCH 01/23] fixed bundle id check --- flameMenuKITSU.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index df7bcf9..c1eb1f5 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -351,11 +351,13 @@ def save_prefs(self): return True def check_bundle_id(self): - bundle_path = self.site_packages_folder - bundle_id_file_path = os.path.isfile(os.path.join(bundle_path, 'bundle_id')) + bundle_id_file_path = os.path.join( + os.path.dirname(self.site_packages_folder), + 'bundle_id' + ) bundle_id = self.version - if (os.path.isdir(bundle_path) and os.path.isfile(bundle_id_file_path)): + if (os.path.isdir(self.site_packages_folder) and os.path.isfile(bundle_id_file_path)): self.log('checking existing bundle id %s' % bundle_id_file_path) try: with open(bundle_id_file_path, 'r') as bundle_id_file: @@ -369,8 +371,8 @@ def check_bundle_id(self): except Exception as e: self.log(pformat(e)) return False - elif not os.path.isdir(bundle_path): - self.log('site packages folder does not exist: %s' % bundle_path) + elif not os.path.isdir(self.site_packages_folder): + self.log('site packages folder does not exist: %s' % self.site_packages_folder) return False elif not os.path.isfile(bundle_id_file_path): self.log('site packages bundle id file does not exist: %s' % bundle_id_file_path) @@ -2969,6 +2971,9 @@ def build_menu(self): user_only = not self.prefs['show_all'] filter_out = ['Project', 'Sequence'] found_entities = self.get_entities(user_only, filter_out) + + pprint (found_entities) + menu_main_body = [] if not found_entities: From 43e0caae94888add88de024b4308a041ed044e10 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Fri, 21 Apr 2023 11:06:19 +0100 Subject: [PATCH 02/23] project tada gets collected --- flameMenuKITSU.py | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index c1eb1f5..19c4c98 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -16,7 +16,7 @@ from pprint import pprint from pprint import pformat -__version__ = 'v0.0.3' +__version__ = 'v0.0.4 dev 001' menu_group_name = 'KITSU' app_name = 'flameMenuKITSU' @@ -726,6 +726,7 @@ def __init__(self, framework): self.threads = True self.loops.append(threading.Thread(target=self.cache_short_loop, args=(8, ))) self.loops.append(threading.Thread(target=self.cache_long_loop, args=(8, ))) + self.loops.append(threading.Thread(target=self.cache_utility_loop, args=(1, ))) for loop in self.loops: loop.daemon = True @@ -994,6 +995,7 @@ def check_linked_project(self, *args, **kwargs): def init_pipeline_data(self): self.pipeline_data = {} + self.pipeline_data['current_project'] = {} self.pipeline_data['project_tasks_for_person'] = [] self.pipeline_data['all_episodes_for_project'] = [] self.pipeline_data['all_sequences_for_project'] = [] @@ -1127,12 +1129,36 @@ def cache_long_loop(self, timeout): else: self.loop_timeout(timeout, start) + def cache_utility_loop(self, timeout): + while self.threads: + start = time.time() + + if (not self.user) and (not self.linked_project_id): + time.sleep(1) + continue + + pprint (self.pipeline_data['current_project']) + + self.loop_timeout(timeout, start) + def collect_pipeline_data(self, current_project = None, current_client = None): + if not self.linked_project_id: + return if not current_project: current_project = {'id': self.linked_project_id} if not current_client: current_client = self.gazu_client + # query requests defined as functions + + def get_current_project(): + try: + current_project = self.gazu.project.get_project(self.linked_project_id, client=current_client) + self.pipeline_data['current_project'] = dict(current_project) + self.pipeline_data['entity_by_id'][current_project.get('id')] = dict(current_project) + except Exception as e: + self.log(pformat(e)) + def project_tasks_for_person(): try: all_tasks_for_person = self.gazu.task.all_tasks_for_person(self.user, client=current_client) @@ -1225,6 +1251,7 @@ def all_task_statuses_for_project(): self.log(pformat(e)) requests = [] + requests.append(threading.Thread(target=get_current_project, args=())) requests.append(threading.Thread(target=project_tasks_for_person, args=())) requests.append(threading.Thread(target=all_episodes_for_project, args=())) requests.append(threading.Thread(target=all_assets_for_project, args=())) @@ -2971,11 +2998,11 @@ def build_menu(self): user_only = not self.prefs['show_all'] filter_out = ['Project', 'Sequence'] found_entities = self.get_entities(user_only, filter_out) - - pprint (found_entities) - menu_main_body = [] + pprint(found_entities) + # pprint (self.connector.pipeline_data.get('all_episodes_for_project')) + if not found_entities: menu_item = {} menu_item['name'] = '- [ Assets ] [+]' From b56e5976986aa157b8c55c6738f49a573e70c8d0 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sat, 22 Apr 2023 18:49:59 +0100 Subject: [PATCH 03/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 19c4c98..e7bdba8 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -16,11 +16,11 @@ from pprint import pprint from pprint import pformat -__version__ = 'v0.0.4 dev 001' +__version__ = 'v0.0.4 dev 002' menu_group_name = 'KITSU' app_name = 'flameMenuKITSU' -DEBUG = False +DEBUG = True default_storage_root = '/media/dirtylooks_vfx' @@ -1137,7 +1137,7 @@ def cache_utility_loop(self, timeout): time.sleep(1) continue - pprint (self.pipeline_data['current_project']) + # pprint (self.pipeline_data['current_project']) self.loop_timeout(timeout, start) @@ -1178,7 +1178,26 @@ def all_episodes_for_project(): all_episodes_for_project = self.gazu.shot.all_episodes_for_project(current_project, client=current_client) if not isinstance(all_episodes_for_project, list): all_episodes_for_project = [] - self.pipeline_data['all_episodes_for_project'] = all_episodes_for_project + + episodes = [] + for episode in all_episodes_for_project: + episode_assets = self.gazu.asset.all_assets_for_episode(episode, client=current_client) + if not isinstance(episode_assets, list): + episode_assets = [] + episode_assets_by_id = {x.get('id'):x for x in episode_assets} + episode['assets'] = episode_assets + episode['assets_by_id'] = episode_assets_by_id + + episode_shots = self.gazu.shot.all_shots_for_episode(episode, client=current_client) + if not isinstance(episode_shots, list): + episode_shots = [] + episode_shots_by_id = {x.get('id'):x for x in episode_shots} + episode['shots'] = episode_shots + episode['shots_by_id'] = episode_shots_by_id + + episodes.append(episode) + + self.pipeline_data['all_episodes_for_project'] = list(episodes) for entity in all_episodes_for_project: self.pipeline_data['entitiy_keys'].add((entity.get('type'), entity.get('id'))) self.pipeline_data['entity_by_id'][entity.get('id')] = entity From ba2c9a21ca04d3695c6833881088f8ceabd608f5 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sat, 22 Apr 2023 20:45:25 +0100 Subject: [PATCH 04/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 53 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index e7bdba8..a555c84 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -20,7 +20,7 @@ menu_group_name = 'KITSU' app_name = 'flameMenuKITSU' -DEBUG = True +DEBUG = False default_storage_root = '/media/dirtylooks_vfx' @@ -2990,7 +2990,7 @@ def build_menu(self): for batch_group in self.flame.project.current_project.current_workspace.desktop.batch_groups: batch_groups.append(batch_group.name.get_value()) - menu = {'actions': []} + menu = {'actions': [], 'hierarchy': []} menu['name'] = self.menu_group_name + ' Create new batch:' menu_item_order = 0 @@ -3017,11 +3017,9 @@ def build_menu(self): user_only = not self.prefs['show_all'] filter_out = ['Project', 'Sequence'] found_entities = self.get_entities(user_only, filter_out) + pprint (found_entities) menu_main_body = [] - pprint(found_entities) - # pprint (self.connector.pipeline_data.get('all_episodes_for_project')) - if not found_entities: menu_item = {} menu_item['name'] = '- [ Assets ] [+]' @@ -3146,6 +3144,46 @@ def build_menu(self): return menu def get_entities(self, user_only = True, filter_out=[]): + # this block is to add episode id and name to shot or asset + # it might be moved over to utility loop + episodes = self.connector.pipeline_data.get('all_episodes_for_project') + episodes_by_id = {x.get('id'):x for x in episodes} + episode_id_by_entity_id = {} + for episode in episodes: + episode_id = episode.get('id') + if not episode_id: + continue + episode_assets_by_id = episode.get('assets_by_id') + if not episode_assets_by_id: + episode_assets_by_id = {} + for asset_id in episode_assets_by_id.keys(): + episode_id_by_entity_id[asset_id] = episode_id + episode_shots_by_id = episode.get('shots_by_id') + if not episode_shots_by_id: + episode_shots_by_id = {} + for shot_id in episode_shots_by_id.keys(): + episode_id_by_entity_id[shot_id] = episode_id + all_assets_for_project = self.connector.pipeline_data.get('all_assets_for_project') + for asset in all_assets_for_project: + asset_episode_id = episode_id_by_entity_id.get(asset.get('id')) + asset_episode_name = None + if asset_episode_id: + asset_episode = episodes_by_id.get(asset_episode_id) + if asset_episode: + asset_episode_name = asset_episode.get('name') + asset['episode_id'] = asset_episode_id + asset['episode_name'] = asset_episode_name + all_shots_for_project = self.connector.pipeline_data.get('all_shots_for_project') + for shot in all_shots_for_project: + shot_episode_id = episode_id_by_entity_id.get(shot.get('id')) + shot_episode_name = None + if shot_episode_id: + shot_episode = episodes_by_id.get(shot_episode_id) + if shot_episode: + shot_episode_name = shot_episode.get('name') + shot['episode_id'] = shot_episode_id + shot['episode_name'] = shot_episode_name + if user_only: cached_tasks = self.connector.pipeline_data.get('project_tasks_for_person') if not isinstance(cached_tasks, list): @@ -3164,6 +3202,10 @@ def get_entities(self, user_only = True, filter_out=[]): if not shots: shots = [] for shot in shots: + shot_id = shot.get('id') + if not shot_id: + continue + if shot.get('id') in cached_tasks_by_entity_id.keys(): entities['Shot'].append(shot) assets = self.connector.pipeline_data.get('all_assets_for_project') @@ -3173,6 +3215,7 @@ def get_entities(self, user_only = True, filter_out=[]): if asset.get('id') in cached_tasks_by_entity_id.keys(): entities['Asset'].append(asset) return entities + else: shots = self.connector.pipeline_data.get('all_shots_for_project') if not isinstance(shots, list): From 0e7f8bda3e92243875ced44c80ec6165af149f03 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sat, 22 Apr 2023 20:50:10 +0100 Subject: [PATCH 05/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 78 +++++++++++++++++++++++------------------------ 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index a555c84..3ac8ec2 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -1286,6 +1286,44 @@ def all_task_statuses_for_project(): for request in requests: request.join() + # this block is to add episode id and name to shot or asset + episodes = self.connector.pipeline_data.get('all_episodes_for_project') + episodes_by_id = {x.get('id'):x for x in episodes} + episode_id_by_entity_id = {} + for episode in episodes: + episode_id = episode.get('id') + if not episode_id: + continue + episode_assets_by_id = episode.get('assets_by_id') + if not episode_assets_by_id: + episode_assets_by_id = {} + for asset_id in episode_assets_by_id.keys(): + episode_id_by_entity_id[asset_id] = episode_id + episode_shots_by_id = episode.get('shots_by_id') + if not episode_shots_by_id: + episode_shots_by_id = {} + for shot_id in episode_shots_by_id.keys(): + episode_id_by_entity_id[shot_id] = episode_id + for asset in self.connector.pipeline_data.get('all_assets_for_project'): + asset_episode_id = episode_id_by_entity_id.get(asset.get('id')) + asset_episode_name = None + if asset_episode_id: + asset_episode = episodes_by_id.get(asset_episode_id) + if asset_episode: + asset_episode_name = asset_episode.get('name') + asset['episode_id'] = asset_episode_id + asset['episode_name'] = asset_episode_name + for shot in self.connector.pipeline_data.get('all_shots_for_project'): + shot_episode_id = episode_id_by_entity_id.get(shot.get('id')) + shot_episode_name = None + if shot_episode_id: + shot_episode = episodes_by_id.get(shot_episode_id) + if shot_episode: + shot_episode_name = shot_episode.get('name') + shot['episode_id'] = shot_episode_id + shot['episode_name'] = shot_episode_name + + def collect_entity_linked_info(self, entity_key, current_client = None): if not current_client: current_client = self.gazu_client @@ -3144,46 +3182,6 @@ def build_menu(self): return menu def get_entities(self, user_only = True, filter_out=[]): - # this block is to add episode id and name to shot or asset - # it might be moved over to utility loop - episodes = self.connector.pipeline_data.get('all_episodes_for_project') - episodes_by_id = {x.get('id'):x for x in episodes} - episode_id_by_entity_id = {} - for episode in episodes: - episode_id = episode.get('id') - if not episode_id: - continue - episode_assets_by_id = episode.get('assets_by_id') - if not episode_assets_by_id: - episode_assets_by_id = {} - for asset_id in episode_assets_by_id.keys(): - episode_id_by_entity_id[asset_id] = episode_id - episode_shots_by_id = episode.get('shots_by_id') - if not episode_shots_by_id: - episode_shots_by_id = {} - for shot_id in episode_shots_by_id.keys(): - episode_id_by_entity_id[shot_id] = episode_id - all_assets_for_project = self.connector.pipeline_data.get('all_assets_for_project') - for asset in all_assets_for_project: - asset_episode_id = episode_id_by_entity_id.get(asset.get('id')) - asset_episode_name = None - if asset_episode_id: - asset_episode = episodes_by_id.get(asset_episode_id) - if asset_episode: - asset_episode_name = asset_episode.get('name') - asset['episode_id'] = asset_episode_id - asset['episode_name'] = asset_episode_name - all_shots_for_project = self.connector.pipeline_data.get('all_shots_for_project') - for shot in all_shots_for_project: - shot_episode_id = episode_id_by_entity_id.get(shot.get('id')) - shot_episode_name = None - if shot_episode_id: - shot_episode = episodes_by_id.get(shot_episode_id) - if shot_episode: - shot_episode_name = shot_episode.get('name') - shot['episode_id'] = shot_episode_id - shot['episode_name'] = shot_episode_name - if user_only: cached_tasks = self.connector.pipeline_data.get('project_tasks_for_person') if not isinstance(cached_tasks, list): From 239e1d6b62ab110c7d04f227f932cf2805984591 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 15:37:20 +0100 Subject: [PATCH 06/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 254 +- menu_tests/custom_menu_structure.py | 138 + menu_tests/flameMenuTEST.py | 8077 +++++++++++++++++++++++ menu_tests/generate_static_actions.py | 6 + menu_tests/generate_static_functions.py | 3 + 5 files changed, 8375 insertions(+), 103 deletions(-) create mode 100755 menu_tests/custom_menu_structure.py create mode 100644 menu_tests/flameMenuTEST.py create mode 100644 menu_tests/generate_static_actions.py create mode 100644 menu_tests/generate_static_functions.py diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 3ac8ec2..505d8fa 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -1323,7 +1323,6 @@ def all_task_statuses_for_project(): shot['episode_id'] = shot_episode_id shot['episode_name'] = shot_episode_name - def collect_entity_linked_info(self, entity_key, current_client = None): if not current_client: current_client = self.gazu_client @@ -2987,12 +2986,13 @@ def __init__(self, framework, connector): if not self.prefs.master.get(self.name): self.prefs['show_all'] = True self.prefs['current_page'] = 0 - self.prefs['menu_max_items_per_page'] = 64 + self.prefs['menu_max_items_per_page'] = 128 self.prefs['last_sequence_used'] = {} def __getattr__(self, name): def method(*args, **kwargs): + pprint (name) entity = self.dynamic_menu_data.get(name) if entity: self.create_new_batch(entity) @@ -3055,29 +3055,40 @@ def build_menu(self): user_only = not self.prefs['show_all'] filter_out = ['Project', 'Sequence'] found_entities = self.get_entities(user_only, filter_out) - pprint (found_entities) - menu_main_body = [] + found_assets = found_entities.get('Asset') + if not found_assets: + found_assets = [] + found_shots = found_entities.get('Shot') + if not found_shots: + found_shots = [] + entities_with_no_episode = {'Shot': [], 'Asset': []} + found_entity_episodes = {} + for asset in found_assets: + entity_episode_name = asset.get('episode_name') + if entity_episode_name: + if entity_episode_name not in found_entity_episodes.keys(): + found_entity_episodes[entity_episode_name] = {} + if not isinstance(found_entity_episodes[entity_episode_name].get('Asset'), list): + found_entity_episodes[entity_episode_name]['Asset'] = [] + found_entity_episodes[entity_episode_name]['Asset'].append(asset) + else: + entities_with_no_episode['Asset'].append(asset) + for shot in found_shots: + entity_episode_name = shot.get('episode_name') + if entity_episode_name: + if entity_episode_name not in found_entity_episodes.keys(): + found_entity_episodes[entity_episode_name] = {} + if not isinstance(found_entity_episodes[entity_episode_name].get('Shot'), list): + found_entity_episodes[entity_episode_name]['Shot'] = [] + found_entity_episodes[entity_episode_name]['Shot'].append(shot) + else: + entities_with_no_episode['Shot'].append(shot) + # found_entities = entities_with_no_episode - if not found_entities: - menu_item = {} - menu_item['name'] = '- [ Assets ] [+]' - menu_item['order'] = menu_item_order - menu_item_order += 1 - menu_item['separator'] = 'above' - menu_item['execute'] = self.create_asset_dialog - menu_item['waitCursor'] = False - menu_main_body.append(menu_item) + def build_menu_body(menu, found_entities, menu_item_order = 1): + menu_main_body = [] - menu_item = {} - menu_item['name'] = '- [ Shots ] [+]' - menu_item['order'] = menu_item_order - menu_item_order += 1 - menu_item['execute'] = self.create_shot_dialog - menu_item['waitCursor'] = False - menu_main_body.append(menu_item) - - if len(found_entities.keys()) == 1: - if 'Shot' in found_entities.keys(): + if not found_entities: menu_item = {} menu_item['name'] = '- [ Assets ] [+]' menu_item['order'] = menu_item_order @@ -3087,99 +3098,136 @@ def build_menu(self): menu_item['waitCursor'] = False menu_main_body.append(menu_item) - menu_ctrls_len = len(menu) - menu_lenght = menu_ctrls_len - menu_lenght += len(found_entities.keys()) - for entity_type in found_entities.keys(): - menu_lenght += len(found_entities.get(entity_type)) - max_menu_lenght = self.prefs.get('menu_max_items_per_page') - - for index, entity_type in enumerate(sorted(found_entities.keys())): - menu_item = {} - menu_item['name'] = '- [ ' + entity_type + 's ] [+]' - if entity_type == 'Asset': - menu_item['execute'] = self.create_asset_dialog - elif entity_type == 'Shot': - menu_item['execute'] = self.create_shot_dialog - else: - menu_item['execute'] = self.rescan - menu_item['waitCursor'] = False - menu_main_body.append(menu_item) - - entities_by_name = {} - for entity in found_entities[entity_type]: - entities_by_name[entity.get('code')] = entity - for entity_name in sorted(entities_by_name.keys()): - entity = entities_by_name.get(entity_name) - menu_item = {} - if entity.get('code') in batch_groups: - menu_item['name'] = ' * ' + entity.get('code') - else: - menu_item['name'] = ' ' + entity.get('code') - - self.dynamic_menu_data[str(id(entity))] = entity - menu_item['execute'] = getattr(self, str(id(entity))) - menu_main_body.append(menu_item) - - if len(found_entities.keys()) == 1: - if 'Asset' in found_entities.keys(): menu_item = {} menu_item['name'] = '- [ Shots ] [+]' - menu_item['execute'] = self.create_shot_dialog - menu_item['waitCursor'] = False menu_item['order'] = menu_item_order menu_item_order += 1 + menu_item['execute'] = self.create_shot_dialog + menu_item['waitCursor'] = False menu_main_body.append(menu_item) - - if menu_lenght < max_menu_lenght: - # controls and entites fits within menu size - # we do not need additional page switch controls - for menu_item in menu_main_body: - menu_item['order'] = menu_item_order - menu_item_order += 1 - menu['actions'].append(menu_item) - - else: - # round up number of pages and get current page - num_of_pages = ((menu_lenght) + max_menu_lenght - 1) // max_menu_lenght - curr_page = self.prefs.get('current_page') - # decorate top with move backward control - # if we're not on the first page - if curr_page > 0: + if len(found_entities.keys()) == 1: + if 'Shot' in found_entities.keys(): + menu_item = {} + menu_item['name'] = '- [ Assets ] [+]' + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu_item['separator'] = 'above' + menu_item['execute'] = self.create_asset_dialog + menu_item['waitCursor'] = False + menu_main_body.append(menu_item) + + menu_ctrls_len = len(menu) + menu_lenght = menu_ctrls_len + menu_lenght += len(found_entities.keys()) + for entity_type in found_entities.keys(): + menu_lenght += len(found_entities.get(entity_type)) + max_menu_lenght = self.prefs.get('menu_max_items_per_page') + + for index, entity_type in enumerate(sorted(found_entities.keys())): menu_item = {} - menu_item['name'] = '<<[ prev page ' + str(curr_page) + ' of ' + str(num_of_pages) + ' ]' - menu_item['execute'] = self.page_bkw - menu_item['order'] = menu_item_order - menu_item_order += 1 - menu['actions'].append(menu_item) + menu_item['name'] = '- [ ' + entity_type + 's ] [+]' + if entity_type == 'Asset': + menu_item['execute'] = self.create_asset_dialog + elif entity_type == 'Shot': + menu_item['execute'] = self.create_shot_dialog + else: + menu_item['execute'] = self.rescan + menu_item['waitCursor'] = False + menu_main_body.append(menu_item) + + entities_by_name = {} + for entity in found_entities[entity_type]: + entities_by_name[entity.get('code')] = entity + for entity_name in sorted(entities_by_name.keys()): + entity = entities_by_name.get(entity_name) + menu_item = {} + if entity.get('code') in batch_groups: + menu_item['name'] = ' * ' + entity.get('code') + else: + menu_item['name'] = ' ' + entity.get('code') - # calculate the start and end position of a window - # and append items to the list - menu_used_space = menu_ctrls_len + 2 # two more controls for page flip - window_size = max_menu_lenght - menu_used_space - start_index = window_size*curr_page + min(1*curr_page, 1) - end_index = window_size*curr_page+window_size + ((curr_page+1) // num_of_pages) + self.dynamic_menu_data[str(id(entity))] = entity + menu_item['execute'] = getattr(self, str(id(entity))) + menu_main_body.append(menu_item) - for menu_item in menu_main_body[start_index:end_index]: - menu_item['order'] = menu_item_order - menu_item_order += 1 - menu['actions'].append(menu_item) + if len(found_entities.keys()) == 1: + if 'Asset' in found_entities.keys(): + menu_item = {} + menu_item['name'] = '- [ Shots ] [+]' + menu_item['execute'] = self.create_shot_dialog + menu_item['waitCursor'] = False + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu_main_body.append(menu_item) + + if menu_lenght < max_menu_lenght: + # controls and entites fits within menu size + # we do not need additional page switch controls + for menu_item in menu_main_body: + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu['actions'].append(menu_item) + + else: + # round up number of pages and get current page + num_of_pages = ((menu_lenght) + max_menu_lenght - 1) // max_menu_lenght + curr_page = self.prefs.get('current_page', 0) + + # decorate top with move backward control + # if we're not on the first page + if curr_page > 0: + menu_item = {} + menu_item['name'] = '<<[ prev page ' + str(curr_page) + ' of ' + str(num_of_pages) + ' ]' + menu_item['execute'] = self.page_bkw + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu['actions'].append(menu_item) + + # calculate the start and end position of a window + # and append items to the list + menu_used_space = menu_ctrls_len + 2 # two more controls for page flip + window_size = max_menu_lenght - menu_used_space + start_index = window_size*curr_page + min(1*curr_page, 1) + end_index = window_size*curr_page+window_size + ((curr_page+1) // num_of_pages) + + for menu_item in menu_main_body[start_index:end_index]: + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu['actions'].append(menu_item) + + # decorate bottom with move forward control + # if we're not on the last page + if curr_page < (num_of_pages - 1): + menu_item = {} + menu_item['name'] = '[ next page ' + str(curr_page+2) + ' of ' + str(num_of_pages) + ' ]>>' + menu_item['execute'] = getattr(self, 'pg_fwd ' + str(menu.get('name'))) + # menu_item['execute'] = self.page_fwd + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu['actions'].append(menu_item) - # decorate bottom with move forward control - # if we're not on the last page - if curr_page < (num_of_pages - 1): - menu_item = {} - menu_item['name'] = '[ next page ' + str(curr_page+2) + ' of ' + str(num_of_pages) + ' ]>>' - menu_item['execute'] = self.page_fwd - menu_item['order'] = menu_item_order - menu_item_order += 1 - menu['actions'].append(menu_item) + return menu + + build_menu_body (menu, entities_with_no_episode, menu_item_order=menu_item_order) + menu_item_order = len(menu['actions']) # for action in menu['actions']: # action['isVisible'] = self.scope_desktop + + menu_combined = [menu] - return menu + for episode_name in sorted(found_entity_episodes.keys()): + menu_episode = {} + menu_episode['name'] = episode_name + menu_episode['order'] = menu_item_order + menu_item_order += 1 + menu_episode['actions'] = [] + menu_episode['hierarchy'] = [menu['name']] + build_menu_body(menu_episode, found_entity_episodes.get(episode_name)) + menu_combined.append(menu_episode) + + return menu_combined def get_entities(self, user_only = True, filter_out=[]): if user_only: @@ -6150,7 +6198,7 @@ def scope_clip(selection): if scope_desktop(selection) or (not selection): app_menu = app.build_menu() if app_menu: - menu.append(app_menu) + menu.extend(app_menu) if app.__class__.__name__ == 'flameMenuPublisher': if scope_clip(selection): diff --git a/menu_tests/custom_menu_structure.py b/menu_tests/custom_menu_structure.py new file mode 100755 index 0000000..edda6a3 --- /dev/null +++ b/menu_tests/custom_menu_structure.py @@ -0,0 +1,138 @@ +################################################################################ +# +# Filename: custom_menu_structure.py +# +# Copyright (c) 2022 Autodesk, Inc. +# All rights reserved. +# +# Use of this software is subject to the terms of the Autodesk license +# agreement provided at the time of installation or download, or which +# otherwise accompanies this software in either electronic or hard copy form. +################################################################################ + +""" +Examples of how you can define two different menu structures for the same custom actions. +""" + +def get_batch_custom_ui_actions(): + import flame + + cursor = flame.batch.cursor_position + + def scope_schematic(selection): + '''This scoping makes the menu/actions appear when you click in the background of a Batch Schematic.''' + return len(selection) == 0 + + def add_render(selection): + render = flame.batch.create_node("Render") + render.pos_x = cursor[0] + render.pos_y = cursor[1] + + def add_write(selection): + write = flame.batch.create_node("Write File") + write.pos_x = cursor[0] + write.pos_y = cursor[1] + + def add_resize(selection): + resize = flame.batch.create_node("Resize") + resize.pos_x = cursor[0] + resize.pos_y = cursor[1] + + def add_mono(selection): + mono = flame.batch.create_node("Mono") + mono.pos_x = cursor[0] + mono.pos_y = cursor[1] + + return [ + # The following will create the pre-2023.2 Update structure for your functions. + # The hierarchy, order, and separator attributes must not be set. + # Make sure that maximumVersion is set at 2023.1.0.0 for all actions. + { + "name": "Examples / Add Nodes", + "actions": [ + { + "name": "Add Resize", + "isVisible": scope_schematic, + "maximumVersion": "2023.1.0.0", + "execute": add_resize + }, + { + "name": "Add Mono", + "isVisible": scope_schematic, + "maximumVersion": "2023.1.0.0", + "execute": add_mono + }, + { + "name": "Add Render", + "isVisible": scope_schematic, + "maximumVersion": "2023.1.0.0", + "execute": add_render + }, + { + "name": "Add Write", + "isVisible": scope_schematic, + "maximumVersion": "2023.1.0.0", + "execute": add_write + } + ] + }, + # This structure calls the same functions as above but uses the new features available in 2023.2 Update. + # You can use hierarchy, order, and separator attributes. + # Make sure that minimumVersion is set at 2023.2.0.0 for all actions. + { + # This entry creates a submenu at the first level of a contextual menu. + # There is no action specified because we are only creating the submenu to be used for the hierarchy later on. + "name": "Example / Add Nodes", + "hierarchy": [], + "actions": [ + ] + }, + { + # This entry adds two custom actions in a Tools submenu. + # hierarchy is used to put the Tools submenu inside the Add Nodes submenu defined above. + # order is used to enforce in which order the different submenus and actions will be displayed. + # separator is used to add a separator below the Tools submenu. They can also be added between actions. + "name": "Tools", + "hierarchy": ["Example / Add Nodes"], + "order": 1, + "separator": "below", + "actions": [ + { + "name": "Add Resize", + "order": 1, + "isVisible": scope_schematic, + "minimumVersion": "2023.2.0.0", + "execute": add_resize + }, + { + "name": "Add Mono", + "order": 2, + "isVisible": scope_schematic, + "minimumVersion": "2023.2.0.0", + "execute": add_mono + } + ] + }, + { + # This entry adds another submenu inside the Add Nodes submenu. + "name": "Outputs", + "hierarchy": ["Example / Add Nodes"], + "order": 2, + "actions": [ + { + "name": "Add Render", + "order": 1, + "isVisible": scope_schematic, + "minimumVersion": "2023.2.0.0", + "execute": add_render + }, + { + "name": "Add Write File", + "order": 2, + "isVisible": scope_schematic, + "minimumVersion": "2023.2.0.0", + "execute": add_write + } + ] + } + ] diff --git a/menu_tests/flameMenuTEST.py b/menu_tests/flameMenuTEST.py new file mode 100644 index 0000000..d9e17a5 --- /dev/null +++ b/menu_tests/flameMenuTEST.py @@ -0,0 +1,8077 @@ +def get_media_panel_custom_ui_actions(): + def message(msg): + from PySide2 import QtWidgets + mbox = QtWidgets.QMessageBox() + mbox.setText(msg) + mbox.exec_() + + def menu_001(selection): + message("Menu Item 001") + + def menu_002(selection): + message("Menu Item 002") + + def menu_003(selection): + message("Menu Item 003") + + def menu_004(selection): + message("Menu Item 004") + + def menu_005(selection): + message("Menu Item 005") + + def menu_006(selection): + message("Menu Item 006") + + def menu_007(selection): + message("Menu Item 007") + + def menu_008(selection): + message("Menu Item 008") + + def menu_009(selection): + message("Menu Item 009") + + def menu_010(selection): + message("Menu Item 010") + + def menu_011(selection): + message("Menu Item 011") + + def menu_012(selection): + message("Menu Item 012") + + def menu_013(selection): + message("Menu Item 013") + + def menu_014(selection): + message("Menu Item 014") + + def menu_015(selection): + message("Menu Item 015") + + def menu_016(selection): + message("Menu Item 016") + + def menu_017(selection): + message("Menu Item 017") + + def menu_018(selection): + message("Menu Item 018") + + def menu_019(selection): + message("Menu Item 019") + + def menu_020(selection): + message("Menu Item 020") + + def menu_021(selection): + message("Menu Item 021") + + def menu_022(selection): + message("Menu Item 022") + + def menu_023(selection): + message("Menu Item 023") + + def menu_024(selection): + message("Menu Item 024") + + def menu_025(selection): + message("Menu Item 025") + + def menu_026(selection): + message("Menu Item 026") + + def menu_027(selection): + message("Menu Item 027") + + def menu_028(selection): + message("Menu Item 028") + + def menu_029(selection): + message("Menu Item 029") + + def menu_030(selection): + message("Menu Item 030") + + def menu_031(selection): + message("Menu Item 031") + + def menu_032(selection): + message("Menu Item 032") + + def menu_033(selection): + message("Menu Item 033") + + def menu_034(selection): + message("Menu Item 034") + + def menu_035(selection): + message("Menu Item 035") + + def menu_036(selection): + message("Menu Item 036") + + def menu_037(selection): + message("Menu Item 037") + + def menu_038(selection): + message("Menu Item 038") + + def menu_039(selection): + message("Menu Item 039") + + def menu_040(selection): + message("Menu Item 040") + + def menu_041(selection): + message("Menu Item 041") + + def menu_042(selection): + message("Menu Item 042") + + def menu_043(selection): + message("Menu Item 043") + + def menu_044(selection): + message("Menu Item 044") + + def menu_045(selection): + message("Menu Item 045") + + def menu_046(selection): + message("Menu Item 046") + + def menu_047(selection): + message("Menu Item 047") + + def menu_048(selection): + message("Menu Item 048") + + def menu_049(selection): + message("Menu Item 049") + + def menu_050(selection): + message("Menu Item 050") + + def menu_051(selection): + message("Menu Item 051") + + def menu_052(selection): + message("Menu Item 052") + + def menu_053(selection): + message("Menu Item 053") + + def menu_054(selection): + message("Menu Item 054") + + def menu_055(selection): + message("Menu Item 055") + + def menu_056(selection): + message("Menu Item 056") + + def menu_057(selection): + message("Menu Item 057") + + def menu_058(selection): + message("Menu Item 058") + + def menu_059(selection): + message("Menu Item 059") + + def menu_060(selection): + message("Menu Item 060") + + def menu_061(selection): + message("Menu Item 061") + + def menu_062(selection): + message("Menu Item 062") + + def menu_063(selection): + message("Menu Item 063") + + def menu_064(selection): + message("Menu Item 064") + + def menu_065(selection): + message("Menu Item 065") + + def menu_066(selection): + message("Menu Item 066") + + def menu_067(selection): + message("Menu Item 067") + + def menu_068(selection): + message("Menu Item 068") + + def menu_069(selection): + message("Menu Item 069") + + def menu_070(selection): + message("Menu Item 070") + + def menu_071(selection): + message("Menu Item 071") + + def menu_072(selection): + message("Menu Item 072") + + def menu_073(selection): + message("Menu Item 073") + + def menu_074(selection): + message("Menu Item 074") + + def menu_075(selection): + message("Menu Item 075") + + def menu_076(selection): + message("Menu Item 076") + + def menu_077(selection): + message("Menu Item 077") + + def menu_078(selection): + message("Menu Item 078") + + def menu_079(selection): + message("Menu Item 079") + + def menu_080(selection): + message("Menu Item 080") + + def menu_081(selection): + message("Menu Item 081") + + def menu_082(selection): + message("Menu Item 082") + + def menu_083(selection): + message("Menu Item 083") + + def menu_084(selection): + message("Menu Item 084") + + def menu_085(selection): + message("Menu Item 085") + + def menu_086(selection): + message("Menu Item 086") + + def menu_087(selection): + message("Menu Item 087") + + def menu_088(selection): + message("Menu Item 088") + + def menu_089(selection): + message("Menu Item 089") + + def menu_090(selection): + message("Menu Item 090") + + def menu_091(selection): + message("Menu Item 091") + + def menu_092(selection): + message("Menu Item 092") + + def menu_093(selection): + message("Menu Item 093") + + def menu_094(selection): + message("Menu Item 094") + + def menu_095(selection): + message("Menu Item 095") + + def menu_096(selection): + message("Menu Item 096") + + def menu_097(selection): + message("Menu Item 097") + + def menu_098(selection): + message("Menu Item 098") + + def menu_099(selection): + message("Menu Item 099") + + def menu_100(selection): + message("Menu Item 100") + + def menu_101(selection): + message("Menu Item 101") + + def menu_102(selection): + message("Menu Item 102") + + def menu_103(selection): + message("Menu Item 103") + + def menu_104(selection): + message("Menu Item 104") + + def menu_105(selection): + message("Menu Item 105") + + def menu_106(selection): + message("Menu Item 106") + + def menu_107(selection): + message("Menu Item 107") + + def menu_108(selection): + message("Menu Item 108") + + def menu_109(selection): + message("Menu Item 109") + + def menu_110(selection): + message("Menu Item 110") + + def menu_111(selection): + message("Menu Item 111") + + def menu_112(selection): + message("Menu Item 112") + + def menu_113(selection): + message("Menu Item 113") + + def menu_114(selection): + message("Menu Item 114") + + def menu_115(selection): + message("Menu Item 115") + + def menu_116(selection): + message("Menu Item 116") + + def menu_117(selection): + message("Menu Item 117") + + def menu_118(selection): + message("Menu Item 118") + + def menu_119(selection): + message("Menu Item 119") + + def menu_120(selection): + message("Menu Item 120") + + def menu_121(selection): + message("Menu Item 121") + + def menu_122(selection): + message("Menu Item 122") + + def menu_123(selection): + message("Menu Item 123") + + def menu_124(selection): + message("Menu Item 124") + + def menu_125(selection): + message("Menu Item 125") + + def menu_126(selection): + message("Menu Item 126") + + def menu_127(selection): + message("Menu Item 127") + + def menu_128(selection): + message("Menu Item 128") + + def menu_129(selection): + message("Menu Item 129") + + def menu_130(selection): + message("Menu Item 130") + + def menu_131(selection): + message("Menu Item 131") + + def menu_132(selection): + message("Menu Item 132") + + def menu_133(selection): + message("Menu Item 133") + + def menu_134(selection): + message("Menu Item 134") + + def menu_135(selection): + message("Menu Item 135") + + def menu_136(selection): + message("Menu Item 136") + + def menu_137(selection): + message("Menu Item 137") + + def menu_138(selection): + message("Menu Item 138") + + def menu_139(selection): + message("Menu Item 139") + + def menu_140(selection): + message("Menu Item 140") + + def menu_141(selection): + message("Menu Item 141") + + def menu_142(selection): + message("Menu Item 142") + + def menu_143(selection): + message("Menu Item 143") + + def menu_144(selection): + message("Menu Item 144") + + def menu_145(selection): + message("Menu Item 145") + + def menu_146(selection): + message("Menu Item 146") + + def menu_147(selection): + message("Menu Item 147") + + def menu_148(selection): + message("Menu Item 148") + + def menu_149(selection): + message("Menu Item 149") + + def menu_150(selection): + message("Menu Item 150") + + def menu_151(selection): + message("Menu Item 151") + + def menu_152(selection): + message("Menu Item 152") + + def menu_153(selection): + message("Menu Item 153") + + def menu_154(selection): + message("Menu Item 154") + + def menu_155(selection): + message("Menu Item 155") + + def menu_156(selection): + message("Menu Item 156") + + def menu_157(selection): + message("Menu Item 157") + + def menu_158(selection): + message("Menu Item 158") + + def menu_159(selection): + message("Menu Item 159") + + def menu_160(selection): + message("Menu Item 160") + + def menu_161(selection): + message("Menu Item 161") + + def menu_162(selection): + message("Menu Item 162") + + def menu_163(selection): + message("Menu Item 163") + + def menu_164(selection): + message("Menu Item 164") + + def menu_165(selection): + message("Menu Item 165") + + def menu_166(selection): + message("Menu Item 166") + + def menu_167(selection): + message("Menu Item 167") + + def menu_168(selection): + message("Menu Item 168") + + def menu_169(selection): + message("Menu Item 169") + + def menu_170(selection): + message("Menu Item 170") + + def menu_171(selection): + message("Menu Item 171") + + def menu_172(selection): + message("Menu Item 172") + + def menu_173(selection): + message("Menu Item 173") + + def menu_174(selection): + message("Menu Item 174") + + def menu_175(selection): + message("Menu Item 175") + + def menu_176(selection): + message("Menu Item 176") + + def menu_177(selection): + message("Menu Item 177") + + def menu_178(selection): + message("Menu Item 178") + + def menu_179(selection): + message("Menu Item 179") + + def menu_180(selection): + message("Menu Item 180") + + def menu_181(selection): + message("Menu Item 181") + + def menu_182(selection): + message("Menu Item 182") + + def menu_183(selection): + message("Menu Item 183") + + def menu_184(selection): + message("Menu Item 184") + + def menu_185(selection): + message("Menu Item 185") + + def menu_186(selection): + message("Menu Item 186") + + def menu_187(selection): + message("Menu Item 187") + + def menu_188(selection): + message("Menu Item 188") + + def menu_189(selection): + message("Menu Item 189") + + def menu_190(selection): + message("Menu Item 190") + + def menu_191(selection): + message("Menu Item 191") + + def menu_192(selection): + message("Menu Item 192") + + def menu_193(selection): + message("Menu Item 193") + + def menu_194(selection): + message("Menu Item 194") + + def menu_195(selection): + message("Menu Item 195") + + def menu_196(selection): + message("Menu Item 196") + + def menu_197(selection): + message("Menu Item 197") + + def menu_198(selection): + message("Menu Item 198") + + def menu_199(selection): + message("Menu Item 199") + + def menu_200(selection): + message("Menu Item 200") + + def menu_201(selection): + message("Menu Item 201") + + def menu_202(selection): + message("Menu Item 202") + + def menu_203(selection): + message("Menu Item 203") + + def menu_204(selection): + message("Menu Item 204") + + def menu_205(selection): + message("Menu Item 205") + + def menu_206(selection): + message("Menu Item 206") + + def menu_207(selection): + message("Menu Item 207") + + def menu_208(selection): + message("Menu Item 208") + + def menu_209(selection): + message("Menu Item 209") + + def menu_210(selection): + message("Menu Item 210") + + def menu_211(selection): + message("Menu Item 211") + + def menu_212(selection): + message("Menu Item 212") + + def menu_213(selection): + message("Menu Item 213") + + def menu_214(selection): + message("Menu Item 214") + + def menu_215(selection): + message("Menu Item 215") + + def menu_216(selection): + message("Menu Item 216") + + def menu_217(selection): + message("Menu Item 217") + + def menu_218(selection): + message("Menu Item 218") + + def menu_219(selection): + message("Menu Item 219") + + def menu_220(selection): + message("Menu Item 220") + + def menu_221(selection): + message("Menu Item 221") + + def menu_222(selection): + message("Menu Item 222") + + def menu_223(selection): + message("Menu Item 223") + + def menu_224(selection): + message("Menu Item 224") + + def menu_225(selection): + message("Menu Item 225") + + def menu_226(selection): + message("Menu Item 226") + + def menu_227(selection): + message("Menu Item 227") + + def menu_228(selection): + message("Menu Item 228") + + def menu_229(selection): + message("Menu Item 229") + + def menu_230(selection): + message("Menu Item 230") + + def menu_231(selection): + message("Menu Item 231") + + def menu_232(selection): + message("Menu Item 232") + + def menu_233(selection): + message("Menu Item 233") + + def menu_234(selection): + message("Menu Item 234") + + def menu_235(selection): + message("Menu Item 235") + + def menu_236(selection): + message("Menu Item 236") + + def menu_237(selection): + message("Menu Item 237") + + def menu_238(selection): + message("Menu Item 238") + + def menu_239(selection): + message("Menu Item 239") + + def menu_240(selection): + message("Menu Item 240") + + def menu_241(selection): + message("Menu Item 241") + + def menu_242(selection): + message("Menu Item 242") + + def menu_243(selection): + message("Menu Item 243") + + def menu_244(selection): + message("Menu Item 244") + + def menu_245(selection): + message("Menu Item 245") + + def menu_246(selection): + message("Menu Item 246") + + def menu_247(selection): + message("Menu Item 247") + + def menu_248(selection): + message("Menu Item 248") + + def menu_249(selection): + message("Menu Item 249") + + def menu_250(selection): + message("Menu Item 250") + + def menu_251(selection): + message("Menu Item 251") + + def menu_252(selection): + message("Menu Item 252") + + def menu_253(selection): + message("Menu Item 253") + + def menu_254(selection): + message("Menu Item 254") + + def menu_255(selection): + message("Menu Item 255") + + def menu_256(selection): + message("Menu Item 256") + + def menu_257(selection): + message("Menu Item 257") + + def menu_258(selection): + message("Menu Item 258") + + def menu_259(selection): + message("Menu Item 259") + + def menu_260(selection): + message("Menu Item 260") + + def menu_261(selection): + message("Menu Item 261") + + def menu_262(selection): + message("Menu Item 262") + + def menu_263(selection): + message("Menu Item 263") + + def menu_264(selection): + message("Menu Item 264") + + def menu_265(selection): + message("Menu Item 265") + + def menu_266(selection): + message("Menu Item 266") + + def menu_267(selection): + message("Menu Item 267") + + def menu_268(selection): + message("Menu Item 268") + + def menu_269(selection): + message("Menu Item 269") + + def menu_270(selection): + message("Menu Item 270") + + def menu_271(selection): + message("Menu Item 271") + + def menu_272(selection): + message("Menu Item 272") + + def menu_273(selection): + message("Menu Item 273") + + def menu_274(selection): + message("Menu Item 274") + + def menu_275(selection): + message("Menu Item 275") + + def menu_276(selection): + message("Menu Item 276") + + def menu_277(selection): + message("Menu Item 277") + + def menu_278(selection): + message("Menu Item 278") + + def menu_279(selection): + message("Menu Item 279") + + def menu_280(selection): + message("Menu Item 280") + + def menu_281(selection): + message("Menu Item 281") + + def menu_282(selection): + message("Menu Item 282") + + def menu_283(selection): + message("Menu Item 283") + + def menu_284(selection): + message("Menu Item 284") + + def menu_285(selection): + message("Menu Item 285") + + def menu_286(selection): + message("Menu Item 286") + + def menu_287(selection): + message("Menu Item 287") + + def menu_288(selection): + message("Menu Item 288") + + def menu_289(selection): + message("Menu Item 289") + + def menu_290(selection): + message("Menu Item 290") + + def menu_291(selection): + message("Menu Item 291") + + def menu_292(selection): + message("Menu Item 292") + + def menu_293(selection): + message("Menu Item 293") + + def menu_294(selection): + message("Menu Item 294") + + def menu_295(selection): + message("Menu Item 295") + + def menu_296(selection): + message("Menu Item 296") + + def menu_297(selection): + message("Menu Item 297") + + def menu_298(selection): + message("Menu Item 298") + + def menu_299(selection): + message("Menu Item 299") + + def menu_300(selection): + message("Menu Item 300") + + def menu_301(selection): + message("Menu Item 301") + + def menu_302(selection): + message("Menu Item 302") + + def menu_303(selection): + message("Menu Item 303") + + def menu_304(selection): + message("Menu Item 304") + + def menu_305(selection): + message("Menu Item 305") + + def menu_306(selection): + message("Menu Item 306") + + def menu_307(selection): + message("Menu Item 307") + + def menu_308(selection): + message("Menu Item 308") + + def menu_309(selection): + message("Menu Item 309") + + def menu_310(selection): + message("Menu Item 310") + + def menu_311(selection): + message("Menu Item 311") + + def menu_312(selection): + message("Menu Item 312") + + def menu_313(selection): + message("Menu Item 313") + + def menu_314(selection): + message("Menu Item 314") + + def menu_315(selection): + message("Menu Item 315") + + def menu_316(selection): + message("Menu Item 316") + + def menu_317(selection): + message("Menu Item 317") + + def menu_318(selection): + message("Menu Item 318") + + def menu_319(selection): + message("Menu Item 319") + + def menu_320(selection): + message("Menu Item 320") + + def menu_321(selection): + message("Menu Item 321") + + def menu_322(selection): + message("Menu Item 322") + + def menu_323(selection): + message("Menu Item 323") + + def menu_324(selection): + message("Menu Item 324") + + def menu_325(selection): + message("Menu Item 325") + + def menu_326(selection): + message("Menu Item 326") + + def menu_327(selection): + message("Menu Item 327") + + def menu_328(selection): + message("Menu Item 328") + + def menu_329(selection): + message("Menu Item 329") + + def menu_330(selection): + message("Menu Item 330") + + def menu_331(selection): + message("Menu Item 331") + + def menu_332(selection): + message("Menu Item 332") + + def menu_333(selection): + message("Menu Item 333") + + def menu_334(selection): + message("Menu Item 334") + + def menu_335(selection): + message("Menu Item 335") + + def menu_336(selection): + message("Menu Item 336") + + def menu_337(selection): + message("Menu Item 337") + + def menu_338(selection): + message("Menu Item 338") + + def menu_339(selection): + message("Menu Item 339") + + def menu_340(selection): + message("Menu Item 340") + + def menu_341(selection): + message("Menu Item 341") + + def menu_342(selection): + message("Menu Item 342") + + def menu_343(selection): + message("Menu Item 343") + + def menu_344(selection): + message("Menu Item 344") + + def menu_345(selection): + message("Menu Item 345") + + def menu_346(selection): + message("Menu Item 346") + + def menu_347(selection): + message("Menu Item 347") + + def menu_348(selection): + message("Menu Item 348") + + def menu_349(selection): + message("Menu Item 349") + + def menu_350(selection): + message("Menu Item 350") + + def menu_351(selection): + message("Menu Item 351") + + def menu_352(selection): + message("Menu Item 352") + + def menu_353(selection): + message("Menu Item 353") + + def menu_354(selection): + message("Menu Item 354") + + def menu_355(selection): + message("Menu Item 355") + + def menu_356(selection): + message("Menu Item 356") + + def menu_357(selection): + message("Menu Item 357") + + def menu_358(selection): + message("Menu Item 358") + + def menu_359(selection): + message("Menu Item 359") + + def menu_360(selection): + message("Menu Item 360") + + def menu_361(selection): + message("Menu Item 361") + + def menu_362(selection): + message("Menu Item 362") + + def menu_363(selection): + message("Menu Item 363") + + def menu_364(selection): + message("Menu Item 364") + + def menu_365(selection): + message("Menu Item 365") + + def menu_366(selection): + message("Menu Item 366") + + def menu_367(selection): + message("Menu Item 367") + + def menu_368(selection): + message("Menu Item 368") + + def menu_369(selection): + message("Menu Item 369") + + def menu_370(selection): + message("Menu Item 370") + + def menu_371(selection): + message("Menu Item 371") + + def menu_372(selection): + message("Menu Item 372") + + def menu_373(selection): + message("Menu Item 373") + + def menu_374(selection): + message("Menu Item 374") + + def menu_375(selection): + message("Menu Item 375") + + def menu_376(selection): + message("Menu Item 376") + + def menu_377(selection): + message("Menu Item 377") + + def menu_378(selection): + message("Menu Item 378") + + def menu_379(selection): + message("Menu Item 379") + + def menu_380(selection): + message("Menu Item 380") + + def menu_381(selection): + message("Menu Item 381") + + def menu_382(selection): + message("Menu Item 382") + + def menu_383(selection): + message("Menu Item 383") + + def menu_384(selection): + message("Menu Item 384") + + def menu_385(selection): + message("Menu Item 385") + + def menu_386(selection): + message("Menu Item 386") + + def menu_387(selection): + message("Menu Item 387") + + def menu_388(selection): + message("Menu Item 388") + + def menu_389(selection): + message("Menu Item 389") + + def menu_390(selection): + message("Menu Item 390") + + def menu_391(selection): + message("Menu Item 391") + + def menu_392(selection): + message("Menu Item 392") + + def menu_393(selection): + message("Menu Item 393") + + def menu_394(selection): + message("Menu Item 394") + + def menu_395(selection): + message("Menu Item 395") + + def menu_396(selection): + message("Menu Item 396") + + def menu_397(selection): + message("Menu Item 397") + + def menu_398(selection): + message("Menu Item 398") + + def menu_399(selection): + message("Menu Item 399") + + def menu_400(selection): + message("Menu Item 400") + + def menu_401(selection): + message("Menu Item 401") + + def menu_402(selection): + message("Menu Item 402") + + def menu_403(selection): + message("Menu Item 403") + + def menu_404(selection): + message("Menu Item 404") + + def menu_405(selection): + message("Menu Item 405") + + def menu_406(selection): + message("Menu Item 406") + + def menu_407(selection): + message("Menu Item 407") + + def menu_408(selection): + message("Menu Item 408") + + def menu_409(selection): + message("Menu Item 409") + + def menu_410(selection): + message("Menu Item 410") + + def menu_411(selection): + message("Menu Item 411") + + def menu_412(selection): + message("Menu Item 412") + + def menu_413(selection): + message("Menu Item 413") + + def menu_414(selection): + message("Menu Item 414") + + def menu_415(selection): + message("Menu Item 415") + + def menu_416(selection): + message("Menu Item 416") + + def menu_417(selection): + message("Menu Item 417") + + def menu_418(selection): + message("Menu Item 418") + + def menu_419(selection): + message("Menu Item 419") + + def menu_420(selection): + message("Menu Item 420") + + def menu_421(selection): + message("Menu Item 421") + + def menu_422(selection): + message("Menu Item 422") + + def menu_423(selection): + message("Menu Item 423") + + def menu_424(selection): + message("Menu Item 424") + + def menu_425(selection): + message("Menu Item 425") + + def menu_426(selection): + message("Menu Item 426") + + def menu_427(selection): + message("Menu Item 427") + + def menu_428(selection): + message("Menu Item 428") + + def menu_429(selection): + message("Menu Item 429") + + def menu_430(selection): + message("Menu Item 430") + + def menu_431(selection): + message("Menu Item 431") + + def menu_432(selection): + message("Menu Item 432") + + def menu_433(selection): + message("Menu Item 433") + + def menu_434(selection): + message("Menu Item 434") + + def menu_435(selection): + message("Menu Item 435") + + def menu_436(selection): + message("Menu Item 436") + + def menu_437(selection): + message("Menu Item 437") + + def menu_438(selection): + message("Menu Item 438") + + def menu_439(selection): + message("Menu Item 439") + + def menu_440(selection): + message("Menu Item 440") + + def menu_441(selection): + message("Menu Item 441") + + def menu_442(selection): + message("Menu Item 442") + + def menu_443(selection): + message("Menu Item 443") + + def menu_444(selection): + message("Menu Item 444") + + def menu_445(selection): + message("Menu Item 445") + + def menu_446(selection): + message("Menu Item 446") + + def menu_447(selection): + message("Menu Item 447") + + def menu_448(selection): + message("Menu Item 448") + + def menu_449(selection): + message("Menu Item 449") + + def menu_450(selection): + message("Menu Item 450") + + def menu_451(selection): + message("Menu Item 451") + + def menu_452(selection): + message("Menu Item 452") + + def menu_453(selection): + message("Menu Item 453") + + def menu_454(selection): + message("Menu Item 454") + + def menu_455(selection): + message("Menu Item 455") + + def menu_456(selection): + message("Menu Item 456") + + def menu_457(selection): + message("Menu Item 457") + + def menu_458(selection): + message("Menu Item 458") + + def menu_459(selection): + message("Menu Item 459") + + def menu_460(selection): + message("Menu Item 460") + + def menu_461(selection): + message("Menu Item 461") + + def menu_462(selection): + message("Menu Item 462") + + def menu_463(selection): + message("Menu Item 463") + + def menu_464(selection): + message("Menu Item 464") + + def menu_465(selection): + message("Menu Item 465") + + def menu_466(selection): + message("Menu Item 466") + + def menu_467(selection): + message("Menu Item 467") + + def menu_468(selection): + message("Menu Item 468") + + def menu_469(selection): + message("Menu Item 469") + + def menu_470(selection): + message("Menu Item 470") + + def menu_471(selection): + message("Menu Item 471") + + def menu_472(selection): + message("Menu Item 472") + + def menu_473(selection): + message("Menu Item 473") + + def menu_474(selection): + message("Menu Item 474") + + def menu_475(selection): + message("Menu Item 475") + + def menu_476(selection): + message("Menu Item 476") + + def menu_477(selection): + message("Menu Item 477") + + def menu_478(selection): + message("Menu Item 478") + + def menu_479(selection): + message("Menu Item 479") + + def menu_480(selection): + message("Menu Item 480") + + def menu_481(selection): + message("Menu Item 481") + + def menu_482(selection): + message("Menu Item 482") + + def menu_483(selection): + message("Menu Item 483") + + def menu_484(selection): + message("Menu Item 484") + + def menu_485(selection): + message("Menu Item 485") + + def menu_486(selection): + message("Menu Item 486") + + def menu_487(selection): + message("Menu Item 487") + + def menu_488(selection): + message("Menu Item 488") + + def menu_489(selection): + message("Menu Item 489") + + def menu_490(selection): + message("Menu Item 490") + + def menu_491(selection): + message("Menu Item 491") + + def menu_492(selection): + message("Menu Item 492") + + def menu_493(selection): + message("Menu Item 493") + + def menu_494(selection): + message("Menu Item 494") + + def menu_495(selection): + message("Menu Item 495") + + def menu_496(selection): + message("Menu Item 496") + + def menu_497(selection): + message("Menu Item 497") + + def menu_498(selection): + message("Menu Item 498") + + def menu_499(selection): + message("Menu Item 499") + + def menu_500(selection): + message("Menu Item 500") + + def menu_501(selection): + message("Menu Item 501") + + def menu_502(selection): + message("Menu Item 502") + + def menu_503(selection): + message("Menu Item 503") + + def menu_504(selection): + message("Menu Item 504") + + def menu_505(selection): + message("Menu Item 505") + + def menu_506(selection): + message("Menu Item 506") + + def menu_507(selection): + message("Menu Item 507") + + def menu_508(selection): + message("Menu Item 508") + + def menu_509(selection): + message("Menu Item 509") + + def menu_510(selection): + message("Menu Item 510") + + def menu_511(selection): + message("Menu Item 511") + + def menu_512(selection): + message("Menu Item 512") + + def menu_513(selection): + message("Menu Item 513") + + def menu_514(selection): + message("Menu Item 514") + + def menu_515(selection): + message("Menu Item 515") + + def menu_516(selection): + message("Menu Item 516") + + def menu_517(selection): + message("Menu Item 517") + + def menu_518(selection): + message("Menu Item 518") + + def menu_519(selection): + message("Menu Item 519") + + def menu_520(selection): + message("Menu Item 520") + + def menu_521(selection): + message("Menu Item 521") + + def menu_522(selection): + message("Menu Item 522") + + def menu_523(selection): + message("Menu Item 523") + + def menu_524(selection): + message("Menu Item 524") + + def menu_525(selection): + message("Menu Item 525") + + def menu_526(selection): + message("Menu Item 526") + + def menu_527(selection): + message("Menu Item 527") + + def menu_528(selection): + message("Menu Item 528") + + def menu_529(selection): + message("Menu Item 529") + + def menu_530(selection): + message("Menu Item 530") + + def menu_531(selection): + message("Menu Item 531") + + def menu_532(selection): + message("Menu Item 532") + + def menu_533(selection): + message("Menu Item 533") + + def menu_534(selection): + message("Menu Item 534") + + def menu_535(selection): + message("Menu Item 535") + + def menu_536(selection): + message("Menu Item 536") + + def menu_537(selection): + message("Menu Item 537") + + def menu_538(selection): + message("Menu Item 538") + + def menu_539(selection): + message("Menu Item 539") + + def menu_540(selection): + message("Menu Item 540") + + def menu_541(selection): + message("Menu Item 541") + + def menu_542(selection): + message("Menu Item 542") + + def menu_543(selection): + message("Menu Item 543") + + def menu_544(selection): + message("Menu Item 544") + + def menu_545(selection): + message("Menu Item 545") + + def menu_546(selection): + message("Menu Item 546") + + def menu_547(selection): + message("Menu Item 547") + + def menu_548(selection): + message("Menu Item 548") + + def menu_549(selection): + message("Menu Item 549") + + def menu_550(selection): + message("Menu Item 550") + + def menu_551(selection): + message("Menu Item 551") + + def menu_552(selection): + message("Menu Item 552") + + def menu_553(selection): + message("Menu Item 553") + + def menu_554(selection): + message("Menu Item 554") + + def menu_555(selection): + message("Menu Item 555") + + def menu_556(selection): + message("Menu Item 556") + + def menu_557(selection): + message("Menu Item 557") + + def menu_558(selection): + message("Menu Item 558") + + def menu_559(selection): + message("Menu Item 559") + + def menu_560(selection): + message("Menu Item 560") + + def menu_561(selection): + message("Menu Item 561") + + def menu_562(selection): + message("Menu Item 562") + + def menu_563(selection): + message("Menu Item 563") + + def menu_564(selection): + message("Menu Item 564") + + def menu_565(selection): + message("Menu Item 565") + + def menu_566(selection): + message("Menu Item 566") + + def menu_567(selection): + message("Menu Item 567") + + def menu_568(selection): + message("Menu Item 568") + + def menu_569(selection): + message("Menu Item 569") + + def menu_570(selection): + message("Menu Item 570") + + def menu_571(selection): + message("Menu Item 571") + + def menu_572(selection): + message("Menu Item 572") + + def menu_573(selection): + message("Menu Item 573") + + def menu_574(selection): + message("Menu Item 574") + + def menu_575(selection): + message("Menu Item 575") + + def menu_576(selection): + message("Menu Item 576") + + def menu_577(selection): + message("Menu Item 577") + + def menu_578(selection): + message("Menu Item 578") + + def menu_579(selection): + message("Menu Item 579") + + def menu_580(selection): + message("Menu Item 580") + + def menu_581(selection): + message("Menu Item 581") + + def menu_582(selection): + message("Menu Item 582") + + def menu_583(selection): + message("Menu Item 583") + + def menu_584(selection): + message("Menu Item 584") + + def menu_585(selection): + message("Menu Item 585") + + def menu_586(selection): + message("Menu Item 586") + + def menu_587(selection): + message("Menu Item 587") + + def menu_588(selection): + message("Menu Item 588") + + def menu_589(selection): + message("Menu Item 589") + + def menu_590(selection): + message("Menu Item 590") + + def menu_591(selection): + message("Menu Item 591") + + def menu_592(selection): + message("Menu Item 592") + + def menu_593(selection): + message("Menu Item 593") + + def menu_594(selection): + message("Menu Item 594") + + def menu_595(selection): + message("Menu Item 595") + + def menu_596(selection): + message("Menu Item 596") + + def menu_597(selection): + message("Menu Item 597") + + def menu_598(selection): + message("Menu Item 598") + + def menu_599(selection): + message("Menu Item 599") + + def menu_600(selection): + message("Menu Item 600") + + def menu_601(selection): + message("Menu Item 601") + + def menu_602(selection): + message("Menu Item 602") + + def menu_603(selection): + message("Menu Item 603") + + def menu_604(selection): + message("Menu Item 604") + + def menu_605(selection): + message("Menu Item 605") + + def menu_606(selection): + message("Menu Item 606") + + def menu_607(selection): + message("Menu Item 607") + + def menu_608(selection): + message("Menu Item 608") + + def menu_609(selection): + message("Menu Item 609") + + def menu_610(selection): + message("Menu Item 610") + + def menu_611(selection): + message("Menu Item 611") + + def menu_612(selection): + message("Menu Item 612") + + def menu_613(selection): + message("Menu Item 613") + + def menu_614(selection): + message("Menu Item 614") + + def menu_615(selection): + message("Menu Item 615") + + def menu_616(selection): + message("Menu Item 616") + + def menu_617(selection): + message("Menu Item 617") + + def menu_618(selection): + message("Menu Item 618") + + def menu_619(selection): + message("Menu Item 619") + + def menu_620(selection): + message("Menu Item 620") + + def menu_621(selection): + message("Menu Item 621") + + def menu_622(selection): + message("Menu Item 622") + + def menu_623(selection): + message("Menu Item 623") + + def menu_624(selection): + message("Menu Item 624") + + def menu_625(selection): + message("Menu Item 625") + + def menu_626(selection): + message("Menu Item 626") + + def menu_627(selection): + message("Menu Item 627") + + def menu_628(selection): + message("Menu Item 628") + + def menu_629(selection): + message("Menu Item 629") + + def menu_630(selection): + message("Menu Item 630") + + def menu_631(selection): + message("Menu Item 631") + + def menu_632(selection): + message("Menu Item 632") + + def menu_633(selection): + message("Menu Item 633") + + def menu_634(selection): + message("Menu Item 634") + + def menu_635(selection): + message("Menu Item 635") + + def menu_636(selection): + message("Menu Item 636") + + def menu_637(selection): + message("Menu Item 637") + + def menu_638(selection): + message("Menu Item 638") + + def menu_639(selection): + message("Menu Item 639") + + def menu_640(selection): + message("Menu Item 640") + + def menu_641(selection): + message("Menu Item 641") + + def menu_642(selection): + message("Menu Item 642") + + def menu_643(selection): + message("Menu Item 643") + + def menu_644(selection): + message("Menu Item 644") + + def menu_645(selection): + message("Menu Item 645") + + def menu_646(selection): + message("Menu Item 646") + + def menu_647(selection): + message("Menu Item 647") + + def menu_648(selection): + message("Menu Item 648") + + def menu_649(selection): + message("Menu Item 649") + + def menu_650(selection): + message("Menu Item 650") + + def menu_651(selection): + message("Menu Item 651") + + def menu_652(selection): + message("Menu Item 652") + + def menu_653(selection): + message("Menu Item 653") + + def menu_654(selection): + message("Menu Item 654") + + def menu_655(selection): + message("Menu Item 655") + + def menu_656(selection): + message("Menu Item 656") + + def menu_657(selection): + message("Menu Item 657") + + def menu_658(selection): + message("Menu Item 658") + + def menu_659(selection): + message("Menu Item 659") + + def menu_660(selection): + message("Menu Item 660") + + def menu_661(selection): + message("Menu Item 661") + + def menu_662(selection): + message("Menu Item 662") + + def menu_663(selection): + message("Menu Item 663") + + def menu_664(selection): + message("Menu Item 664") + + def menu_665(selection): + message("Menu Item 665") + + def menu_666(selection): + message("Menu Item 666") + + def menu_667(selection): + message("Menu Item 667") + + def menu_668(selection): + message("Menu Item 668") + + def menu_669(selection): + message("Menu Item 669") + + def menu_670(selection): + message("Menu Item 670") + + def menu_671(selection): + message("Menu Item 671") + + def menu_672(selection): + message("Menu Item 672") + + def menu_673(selection): + message("Menu Item 673") + + def menu_674(selection): + message("Menu Item 674") + + def menu_675(selection): + message("Menu Item 675") + + def menu_676(selection): + message("Menu Item 676") + + def menu_677(selection): + message("Menu Item 677") + + def menu_678(selection): + message("Menu Item 678") + + def menu_679(selection): + message("Menu Item 679") + + def menu_680(selection): + message("Menu Item 680") + + def menu_681(selection): + message("Menu Item 681") + + def menu_682(selection): + message("Menu Item 682") + + def menu_683(selection): + message("Menu Item 683") + + def menu_684(selection): + message("Menu Item 684") + + def menu_685(selection): + message("Menu Item 685") + + def menu_686(selection): + message("Menu Item 686") + + def menu_687(selection): + message("Menu Item 687") + + def menu_688(selection): + message("Menu Item 688") + + def menu_689(selection): + message("Menu Item 689") + + def menu_690(selection): + message("Menu Item 690") + + def menu_691(selection): + message("Menu Item 691") + + def menu_692(selection): + message("Menu Item 692") + + def menu_693(selection): + message("Menu Item 693") + + def menu_694(selection): + message("Menu Item 694") + + def menu_695(selection): + message("Menu Item 695") + + def menu_696(selection): + message("Menu Item 696") + + def menu_697(selection): + message("Menu Item 697") + + def menu_698(selection): + message("Menu Item 698") + + def menu_699(selection): + message("Menu Item 699") + + def menu_700(selection): + message("Menu Item 700") + + def menu_701(selection): + message("Menu Item 701") + + def menu_702(selection): + message("Menu Item 702") + + def menu_703(selection): + message("Menu Item 703") + + def menu_704(selection): + message("Menu Item 704") + + def menu_705(selection): + message("Menu Item 705") + + def menu_706(selection): + message("Menu Item 706") + + def menu_707(selection): + message("Menu Item 707") + + def menu_708(selection): + message("Menu Item 708") + + def menu_709(selection): + message("Menu Item 709") + + def menu_710(selection): + message("Menu Item 710") + + def menu_711(selection): + message("Menu Item 711") + + def menu_712(selection): + message("Menu Item 712") + + def menu_713(selection): + message("Menu Item 713") + + def menu_714(selection): + message("Menu Item 714") + + def menu_715(selection): + message("Menu Item 715") + + def menu_716(selection): + message("Menu Item 716") + + def menu_717(selection): + message("Menu Item 717") + + def menu_718(selection): + message("Menu Item 718") + + def menu_719(selection): + message("Menu Item 719") + + def menu_720(selection): + message("Menu Item 720") + + def menu_721(selection): + message("Menu Item 721") + + def menu_722(selection): + message("Menu Item 722") + + def menu_723(selection): + message("Menu Item 723") + + def menu_724(selection): + message("Menu Item 724") + + def menu_725(selection): + message("Menu Item 725") + + def menu_726(selection): + message("Menu Item 726") + + def menu_727(selection): + message("Menu Item 727") + + def menu_728(selection): + message("Menu Item 728") + + def menu_729(selection): + message("Menu Item 729") + + def menu_730(selection): + message("Menu Item 730") + + def menu_731(selection): + message("Menu Item 731") + + def menu_732(selection): + message("Menu Item 732") + + def menu_733(selection): + message("Menu Item 733") + + def menu_734(selection): + message("Menu Item 734") + + def menu_735(selection): + message("Menu Item 735") + + def menu_736(selection): + message("Menu Item 736") + + def menu_737(selection): + message("Menu Item 737") + + def menu_738(selection): + message("Menu Item 738") + + def menu_739(selection): + message("Menu Item 739") + + def menu_740(selection): + message("Menu Item 740") + + def menu_741(selection): + message("Menu Item 741") + + def menu_742(selection): + message("Menu Item 742") + + def menu_743(selection): + message("Menu Item 743") + + def menu_744(selection): + message("Menu Item 744") + + def menu_745(selection): + message("Menu Item 745") + + def menu_746(selection): + message("Menu Item 746") + + def menu_747(selection): + message("Menu Item 747") + + def menu_748(selection): + message("Menu Item 748") + + def menu_749(selection): + message("Menu Item 749") + + def menu_750(selection): + message("Menu Item 750") + + def menu_751(selection): + message("Menu Item 751") + + def menu_752(selection): + message("Menu Item 752") + + def menu_753(selection): + message("Menu Item 753") + + def menu_754(selection): + message("Menu Item 754") + + def menu_755(selection): + message("Menu Item 755") + + def menu_756(selection): + message("Menu Item 756") + + def menu_757(selection): + message("Menu Item 757") + + def menu_758(selection): + message("Menu Item 758") + + def menu_759(selection): + message("Menu Item 759") + + def menu_760(selection): + message("Menu Item 760") + + def menu_761(selection): + message("Menu Item 761") + + def menu_762(selection): + message("Menu Item 762") + + def menu_763(selection): + message("Menu Item 763") + + def menu_764(selection): + message("Menu Item 764") + + def menu_765(selection): + message("Menu Item 765") + + def menu_766(selection): + message("Menu Item 766") + + def menu_767(selection): + message("Menu Item 767") + + def menu_768(selection): + message("Menu Item 768") + + def menu_769(selection): + message("Menu Item 769") + + def menu_770(selection): + message("Menu Item 770") + + def menu_771(selection): + message("Menu Item 771") + + def menu_772(selection): + message("Menu Item 772") + + def menu_773(selection): + message("Menu Item 773") + + def menu_774(selection): + message("Menu Item 774") + + def menu_775(selection): + message("Menu Item 775") + + def menu_776(selection): + message("Menu Item 776") + + def menu_777(selection): + message("Menu Item 777") + + def menu_778(selection): + message("Menu Item 778") + + def menu_779(selection): + message("Menu Item 779") + + def menu_780(selection): + message("Menu Item 780") + + def menu_781(selection): + message("Menu Item 781") + + def menu_782(selection): + message("Menu Item 782") + + def menu_783(selection): + message("Menu Item 783") + + def menu_784(selection): + message("Menu Item 784") + + def menu_785(selection): + message("Menu Item 785") + + def menu_786(selection): + message("Menu Item 786") + + def menu_787(selection): + message("Menu Item 787") + + def menu_788(selection): + message("Menu Item 788") + + def menu_789(selection): + message("Menu Item 789") + + def menu_790(selection): + message("Menu Item 790") + + def menu_791(selection): + message("Menu Item 791") + + def menu_792(selection): + message("Menu Item 792") + + def menu_793(selection): + message("Menu Item 793") + + def menu_794(selection): + message("Menu Item 794") + + def menu_795(selection): + message("Menu Item 795") + + def menu_796(selection): + message("Menu Item 796") + + def menu_797(selection): + message("Menu Item 797") + + def menu_798(selection): + message("Menu Item 798") + + def menu_799(selection): + message("Menu Item 799") + + def menu_800(selection): + message("Menu Item 800") + + def menu_801(selection): + message("Menu Item 801") + + def menu_802(selection): + message("Menu Item 802") + + def menu_803(selection): + message("Menu Item 803") + + def menu_804(selection): + message("Menu Item 804") + + def menu_805(selection): + message("Menu Item 805") + + def menu_806(selection): + message("Menu Item 806") + + def menu_807(selection): + message("Menu Item 807") + + def menu_808(selection): + message("Menu Item 808") + + def menu_809(selection): + message("Menu Item 809") + + def menu_810(selection): + message("Menu Item 810") + + def menu_811(selection): + message("Menu Item 811") + + def menu_812(selection): + message("Menu Item 812") + + def menu_813(selection): + message("Menu Item 813") + + def menu_814(selection): + message("Menu Item 814") + + def menu_815(selection): + message("Menu Item 815") + + def menu_816(selection): + message("Menu Item 816") + + def menu_817(selection): + message("Menu Item 817") + + def menu_818(selection): + message("Menu Item 818") + + def menu_819(selection): + message("Menu Item 819") + + def menu_820(selection): + message("Menu Item 820") + + def menu_821(selection): + message("Menu Item 821") + + def menu_822(selection): + message("Menu Item 822") + + def menu_823(selection): + message("Menu Item 823") + + def menu_824(selection): + message("Menu Item 824") + + def menu_825(selection): + message("Menu Item 825") + + def menu_826(selection): + message("Menu Item 826") + + def menu_827(selection): + message("Menu Item 827") + + def menu_828(selection): + message("Menu Item 828") + + def menu_829(selection): + message("Menu Item 829") + + def menu_830(selection): + message("Menu Item 830") + + def menu_831(selection): + message("Menu Item 831") + + def menu_832(selection): + message("Menu Item 832") + + def menu_833(selection): + message("Menu Item 833") + + def menu_834(selection): + message("Menu Item 834") + + def menu_835(selection): + message("Menu Item 835") + + def menu_836(selection): + message("Menu Item 836") + + def menu_837(selection): + message("Menu Item 837") + + def menu_838(selection): + message("Menu Item 838") + + def menu_839(selection): + message("Menu Item 839") + + def menu_840(selection): + message("Menu Item 840") + + def menu_841(selection): + message("Menu Item 841") + + def menu_842(selection): + message("Menu Item 842") + + def menu_843(selection): + message("Menu Item 843") + + def menu_844(selection): + message("Menu Item 844") + + def menu_845(selection): + message("Menu Item 845") + + def menu_846(selection): + message("Menu Item 846") + + def menu_847(selection): + message("Menu Item 847") + + def menu_848(selection): + message("Menu Item 848") + + def menu_849(selection): + message("Menu Item 849") + + def menu_850(selection): + message("Menu Item 850") + + def menu_851(selection): + message("Menu Item 851") + + def menu_852(selection): + message("Menu Item 852") + + def menu_853(selection): + message("Menu Item 853") + + def menu_854(selection): + message("Menu Item 854") + + def menu_855(selection): + message("Menu Item 855") + + def menu_856(selection): + message("Menu Item 856") + + def menu_857(selection): + message("Menu Item 857") + + def menu_858(selection): + message("Menu Item 858") + + def menu_859(selection): + message("Menu Item 859") + + def menu_860(selection): + message("Menu Item 860") + + def menu_861(selection): + message("Menu Item 861") + + def menu_862(selection): + message("Menu Item 862") + + def menu_863(selection): + message("Menu Item 863") + + def menu_864(selection): + message("Menu Item 864") + + def menu_865(selection): + message("Menu Item 865") + + def menu_866(selection): + message("Menu Item 866") + + def menu_867(selection): + message("Menu Item 867") + + def menu_868(selection): + message("Menu Item 868") + + def menu_869(selection): + message("Menu Item 869") + + def menu_870(selection): + message("Menu Item 870") + + def menu_871(selection): + message("Menu Item 871") + + def menu_872(selection): + message("Menu Item 872") + + def menu_873(selection): + message("Menu Item 873") + + def menu_874(selection): + message("Menu Item 874") + + def menu_875(selection): + message("Menu Item 875") + + def menu_876(selection): + message("Menu Item 876") + + def menu_877(selection): + message("Menu Item 877") + + def menu_878(selection): + message("Menu Item 878") + + def menu_879(selection): + message("Menu Item 879") + + def menu_880(selection): + message("Menu Item 880") + + def menu_881(selection): + message("Menu Item 881") + + def menu_882(selection): + message("Menu Item 882") + + def menu_883(selection): + message("Menu Item 883") + + def menu_884(selection): + message("Menu Item 884") + + def menu_885(selection): + message("Menu Item 885") + + def menu_886(selection): + message("Menu Item 886") + + def menu_887(selection): + message("Menu Item 887") + + def menu_888(selection): + message("Menu Item 888") + + def menu_889(selection): + message("Menu Item 889") + + def menu_890(selection): + message("Menu Item 890") + + def menu_891(selection): + message("Menu Item 891") + + def menu_892(selection): + message("Menu Item 892") + + def menu_893(selection): + message("Menu Item 893") + + def menu_894(selection): + message("Menu Item 894") + + def menu_895(selection): + message("Menu Item 895") + + def menu_896(selection): + message("Menu Item 896") + + def menu_897(selection): + message("Menu Item 897") + + def menu_898(selection): + message("Menu Item 898") + + def menu_899(selection): + message("Menu Item 899") + + def menu_900(selection): + message("Menu Item 900") + + def menu_901(selection): + message("Menu Item 901") + + def menu_902(selection): + message("Menu Item 902") + + def menu_903(selection): + message("Menu Item 903") + + def menu_904(selection): + message("Menu Item 904") + + def menu_905(selection): + message("Menu Item 905") + + def menu_906(selection): + message("Menu Item 906") + + def menu_907(selection): + message("Menu Item 907") + + def menu_908(selection): + message("Menu Item 908") + + def menu_909(selection): + message("Menu Item 909") + + def menu_910(selection): + message("Menu Item 910") + + def menu_911(selection): + message("Menu Item 911") + + def menu_912(selection): + message("Menu Item 912") + + def menu_913(selection): + message("Menu Item 913") + + def menu_914(selection): + message("Menu Item 914") + + def menu_915(selection): + message("Menu Item 915") + + def menu_916(selection): + message("Menu Item 916") + + def menu_917(selection): + message("Menu Item 917") + + def menu_918(selection): + message("Menu Item 918") + + def menu_919(selection): + message("Menu Item 919") + + def menu_920(selection): + message("Menu Item 920") + + def menu_921(selection): + message("Menu Item 921") + + def menu_922(selection): + message("Menu Item 922") + + def menu_923(selection): + message("Menu Item 923") + + def menu_924(selection): + message("Menu Item 924") + + def menu_925(selection): + message("Menu Item 925") + + def menu_926(selection): + message("Menu Item 926") + + def menu_927(selection): + message("Menu Item 927") + + def menu_928(selection): + message("Menu Item 928") + + def menu_929(selection): + message("Menu Item 929") + + def menu_930(selection): + message("Menu Item 930") + + def menu_931(selection): + message("Menu Item 931") + + def menu_932(selection): + message("Menu Item 932") + + def menu_933(selection): + message("Menu Item 933") + + def menu_934(selection): + message("Menu Item 934") + + def menu_935(selection): + message("Menu Item 935") + + def menu_936(selection): + message("Menu Item 936") + + def menu_937(selection): + message("Menu Item 937") + + def menu_938(selection): + message("Menu Item 938") + + def menu_939(selection): + message("Menu Item 939") + + def menu_940(selection): + message("Menu Item 940") + + def menu_941(selection): + message("Menu Item 941") + + def menu_942(selection): + message("Menu Item 942") + + def menu_943(selection): + message("Menu Item 943") + + def menu_944(selection): + message("Menu Item 944") + + def menu_945(selection): + message("Menu Item 945") + + def menu_946(selection): + message("Menu Item 946") + + def menu_947(selection): + message("Menu Item 947") + + def menu_948(selection): + message("Menu Item 948") + + def menu_949(selection): + message("Menu Item 949") + + def menu_950(selection): + message("Menu Item 950") + + def menu_951(selection): + message("Menu Item 951") + + def menu_952(selection): + message("Menu Item 952") + + def menu_953(selection): + message("Menu Item 953") + + def menu_954(selection): + message("Menu Item 954") + + def menu_955(selection): + message("Menu Item 955") + + def menu_956(selection): + message("Menu Item 956") + + def menu_957(selection): + message("Menu Item 957") + + def menu_958(selection): + message("Menu Item 958") + + def menu_959(selection): + message("Menu Item 959") + + def menu_960(selection): + message("Menu Item 960") + + def menu_961(selection): + message("Menu Item 961") + + def menu_962(selection): + message("Menu Item 962") + + def menu_963(selection): + message("Menu Item 963") + + def menu_964(selection): + message("Menu Item 964") + + def menu_965(selection): + message("Menu Item 965") + + def menu_966(selection): + message("Menu Item 966") + + def menu_967(selection): + message("Menu Item 967") + + def menu_968(selection): + message("Menu Item 968") + + def menu_969(selection): + message("Menu Item 969") + + def menu_970(selection): + message("Menu Item 970") + + def menu_971(selection): + message("Menu Item 971") + + def menu_972(selection): + message("Menu Item 972") + + def menu_973(selection): + message("Menu Item 973") + + def menu_974(selection): + message("Menu Item 974") + + def menu_975(selection): + message("Menu Item 975") + + def menu_976(selection): + message("Menu Item 976") + + def menu_977(selection): + message("Menu Item 977") + + def menu_978(selection): + message("Menu Item 978") + + def menu_979(selection): + message("Menu Item 979") + + def menu_980(selection): + message("Menu Item 980") + + def menu_981(selection): + message("Menu Item 981") + + def menu_982(selection): + message("Menu Item 982") + + def menu_983(selection): + message("Menu Item 983") + + def menu_984(selection): + message("Menu Item 984") + + def menu_985(selection): + message("Menu Item 985") + + def menu_986(selection): + message("Menu Item 986") + + def menu_987(selection): + message("Menu Item 987") + + def menu_988(selection): + message("Menu Item 988") + + def menu_989(selection): + message("Menu Item 989") + + def menu_990(selection): + message("Menu Item 990") + + def menu_991(selection): + message("Menu Item 991") + + def menu_992(selection): + message("Menu Item 992") + + def menu_993(selection): + message("Menu Item 993") + + def menu_994(selection): + message("Menu Item 994") + + def menu_995(selection): + message("Menu Item 995") + + def menu_996(selection): + message("Menu Item 996") + + def menu_997(selection): + message("Menu Item 997") + + def menu_998(selection): + message("Menu Item 998") + + def menu_999(selection): + message("Menu Item 999") + + return [ + { + "name": "Example / Test Menu Items", + "hierarchy": [], + "actions": [ + ] + }, + { + "name": "001 - 099", + "hierarchy": ["Example / Test Menu Items"], + "order": 1, + "actions": [ + { + "name": "Menu Item 001", + "order": 1, + "execute": menu_001, + }, + { + "name": "Menu Item 002", + "order": 2, + "execute": menu_002, + }, + { + "name": "Menu Item 003", + "order": 3, + "execute": menu_003, + }, + { + "name": "Menu Item 004", + "order": 4, + "execute": menu_004, + }, + { + "name": "Menu Item 005", + "order": 5, + "execute": menu_005, + }, + { + "name": "Menu Item 006", + "order": 6, + "execute": menu_006, + }, + { + "name": "Menu Item 007", + "order": 7, + "execute": menu_007, + }, + { + "name": "Menu Item 008", + "order": 8, + "execute": menu_008, + }, + { + "name": "Menu Item 009", + "order": 9, + "execute": menu_009, + }, + { + "name": "Menu Item 010", + "order": 10, + "execute": menu_010, + }, + { + "name": "Menu Item 011", + "order": 11, + "execute": menu_011, + }, + { + "name": "Menu Item 012", + "order": 12, + "execute": menu_012, + }, + { + "name": "Menu Item 013", + "order": 13, + "execute": menu_013, + }, + { + "name": "Menu Item 014", + "order": 14, + "execute": menu_014, + }, + { + "name": "Menu Item 015", + "order": 15, + "execute": menu_015, + }, + { + "name": "Menu Item 016", + "order": 16, + "execute": menu_016, + }, + { + "name": "Menu Item 017", + "order": 17, + "execute": menu_017, + }, + { + "name": "Menu Item 018", + "order": 18, + "execute": menu_018, + }, + { + "name": "Menu Item 019", + "order": 19, + "execute": menu_019, + }, + { + "name": "Menu Item 020", + "order": 20, + "execute": menu_020, + }, + { + "name": "Menu Item 021", + "order": 21, + "execute": menu_021, + }, + { + "name": "Menu Item 022", + "order": 22, + "execute": menu_022, + }, + { + "name": "Menu Item 023", + "order": 23, + "execute": menu_023, + }, + { + "name": "Menu Item 024", + "order": 24, + "execute": menu_024, + }, + { + "name": "Menu Item 025", + "order": 25, + "execute": menu_025, + }, + { + "name": "Menu Item 026", + "order": 26, + "execute": menu_026, + }, + { + "name": "Menu Item 027", + "order": 27, + "execute": menu_027, + }, + { + "name": "Menu Item 028", + "order": 28, + "execute": menu_028, + }, + { + "name": "Menu Item 029", + "order": 29, + "execute": menu_029, + }, + { + "name": "Menu Item 030", + "order": 30, + "execute": menu_030, + }, + { + "name": "Menu Item 031", + "order": 31, + "execute": menu_031, + }, + { + "name": "Menu Item 032", + "order": 32, + "execute": menu_032, + }, + { + "name": "Menu Item 033", + "order": 33, + "execute": menu_033, + }, + { + "name": "Menu Item 034", + "order": 34, + "execute": menu_034, + }, + { + "name": "Menu Item 035", + "order": 35, + "execute": menu_035, + }, + { + "name": "Menu Item 036", + "order": 36, + "execute": menu_036, + }, + { + "name": "Menu Item 037", + "order": 37, + "execute": menu_037, + }, + { + "name": "Menu Item 038", + "order": 38, + "execute": menu_038, + }, + { + "name": "Menu Item 039", + "order": 39, + "execute": menu_039, + }, + { + "name": "Menu Item 040", + "order": 40, + "execute": menu_040, + }, + { + "name": "Menu Item 041", + "order": 41, + "execute": menu_041, + }, + { + "name": "Menu Item 042", + "order": 42, + "execute": menu_042, + }, + { + "name": "Menu Item 043", + "order": 43, + "execute": menu_043, + }, + { + "name": "Menu Item 044", + "order": 44, + "execute": menu_044, + }, + { + "name": "Menu Item 045", + "order": 45, + "execute": menu_045, + }, + { + "name": "Menu Item 046", + "order": 46, + "execute": menu_046, + }, + { + "name": "Menu Item 047", + "order": 47, + "execute": menu_047, + }, + { + "name": "Menu Item 048", + "order": 48, + "execute": menu_048, + }, + { + "name": "Menu Item 049", + "order": 49, + "execute": menu_049, + }, + { + "name": "Menu Item 050", + "order": 50, + "execute": menu_050, + }, + { + "name": "Menu Item 051", + "order": 51, + "execute": menu_051, + }, + { + "name": "Menu Item 052", + "order": 52, + "execute": menu_052, + }, + { + "name": "Menu Item 053", + "order": 53, + "execute": menu_053, + }, + { + "name": "Menu Item 054", + "order": 54, + "execute": menu_054, + }, + { + "name": "Menu Item 055", + "order": 55, + "execute": menu_055, + }, + { + "name": "Menu Item 056", + "order": 56, + "execute": menu_056, + }, + { + "name": "Menu Item 057", + "order": 57, + "execute": menu_057, + }, + { + "name": "Menu Item 058", + "order": 58, + "execute": menu_058, + }, + { + "name": "Menu Item 059", + "order": 59, + "execute": menu_059, + }, + { + "name": "Menu Item 060", + "order": 60, + "execute": menu_060, + }, + { + "name": "Menu Item 061", + "order": 61, + "execute": menu_061, + }, + { + "name": "Menu Item 062", + "order": 62, + "execute": menu_062, + }, + { + "name": "Menu Item 063", + "order": 63, + "execute": menu_063, + }, + { + "name": "Menu Item 064", + "order": 64, + "execute": menu_064, + }, + { + "name": "Menu Item 065", + "order": 65, + "execute": menu_065, + }, + { + "name": "Menu Item 066", + "order": 66, + "execute": menu_066, + }, + { + "name": "Menu Item 067", + "order": 67, + "execute": menu_067, + }, + { + "name": "Menu Item 068", + "order": 68, + "execute": menu_068, + }, + { + "name": "Menu Item 069", + "order": 69, + "execute": menu_069, + }, + { + "name": "Menu Item 070", + "order": 70, + "execute": menu_070, + }, + { + "name": "Menu Item 071", + "order": 71, + "execute": menu_071, + }, + { + "name": "Menu Item 072", + "order": 72, + "execute": menu_072, + }, + { + "name": "Menu Item 073", + "order": 73, + "execute": menu_073, + }, + { + "name": "Menu Item 074", + "order": 74, + "execute": menu_074, + }, + { + "name": "Menu Item 075", + "order": 75, + "execute": menu_075, + }, + { + "name": "Menu Item 076", + "order": 76, + "execute": menu_076, + }, + { + "name": "Menu Item 077", + "order": 77, + "execute": menu_077, + }, + { + "name": "Menu Item 078", + "order": 78, + "execute": menu_078, + }, + { + "name": "Menu Item 079", + "order": 79, + "execute": menu_079, + }, + { + "name": "Menu Item 080", + "order": 80, + "execute": menu_080, + }, + { + "name": "Menu Item 081", + "order": 81, + "execute": menu_081, + }, + { + "name": "Menu Item 082", + "order": 82, + "execute": menu_082, + }, + { + "name": "Menu Item 083", + "order": 83, + "execute": menu_083, + }, + { + "name": "Menu Item 084", + "order": 84, + "execute": menu_084, + }, + { + "name": "Menu Item 085", + "order": 85, + "execute": menu_085, + }, + { + "name": "Menu Item 086", + "order": 86, + "execute": menu_086, + }, + { + "name": "Menu Item 087", + "order": 87, + "execute": menu_087, + }, + { + "name": "Menu Item 088", + "order": 88, + "execute": menu_088, + }, + { + "name": "Menu Item 089", + "order": 89, + "execute": menu_089, + }, + { + "name": "Menu Item 090", + "order": 90, + "execute": menu_090, + }, + { + "name": "Menu Item 091", + "order": 91, + "execute": menu_091, + }, + { + "name": "Menu Item 092", + "order": 92, + "execute": menu_092, + }, + { + "name": "Menu Item 093", + "order": 93, + "execute": menu_093, + }, + { + "name": "Menu Item 094", + "order": 94, + "execute": menu_094, + }, + { + "name": "Menu Item 095", + "order": 95, + "execute": menu_095, + }, + { + "name": "Menu Item 096", + "order": 96, + "execute": menu_096, + }, + { + "name": "Menu Item 097", + "order": 97, + "execute": menu_097, + }, + { + "name": "Menu Item 098", + "order": 98, + "execute": menu_098, + }, + { + "name": "Menu Item 099", + "order": 99, + "execute": menu_099, + } + ] + }, + { + "name": "100 - 199", + "hierarchy": ["Example / Test Menu Items"], + "order": 2, + "actions": [ + { + "name": "Menu Item 100", + "order": 100, + "execute": menu_100, + }, + { + "name": "Menu Item 101", + "order": 101, + "execute": menu_101, + }, + { + "name": "Menu Item 102", + "order": 102, + "execute": menu_102, + }, + { + "name": "Menu Item 103", + "order": 103, + "execute": menu_103, + }, + { + "name": "Menu Item 104", + "order": 104, + "execute": menu_104, + }, + { + "name": "Menu Item 105", + "order": 105, + "execute": menu_105, + }, + { + "name": "Menu Item 106", + "order": 106, + "execute": menu_106, + }, + { + "name": "Menu Item 107", + "order": 107, + "execute": menu_107, + }, + { + "name": "Menu Item 108", + "order": 108, + "execute": menu_108, + }, + { + "name": "Menu Item 109", + "order": 109, + "execute": menu_109, + }, + { + "name": "Menu Item 110", + "order": 110, + "execute": menu_110, + }, + { + "name": "Menu Item 111", + "order": 111, + "execute": menu_111, + }, + { + "name": "Menu Item 112", + "order": 112, + "execute": menu_112, + }, + { + "name": "Menu Item 113", + "order": 113, + "execute": menu_113, + }, + { + "name": "Menu Item 114", + "order": 114, + "execute": menu_114, + }, + { + "name": "Menu Item 115", + "order": 115, + "execute": menu_115, + }, + { + "name": "Menu Item 116", + "order": 116, + "execute": menu_116, + }, + { + "name": "Menu Item 117", + "order": 117, + "execute": menu_117, + }, + { + "name": "Menu Item 118", + "order": 118, + "execute": menu_118, + }, + { + "name": "Menu Item 119", + "order": 119, + "execute": menu_119, + }, + { + "name": "Menu Item 120", + "order": 120, + "execute": menu_120, + }, + { + "name": "Menu Item 121", + "order": 121, + "execute": menu_121, + }, + { + "name": "Menu Item 122", + "order": 122, + "execute": menu_122, + }, + { + "name": "Menu Item 123", + "order": 123, + "execute": menu_123, + }, + { + "name": "Menu Item 124", + "order": 124, + "execute": menu_124, + }, + { + "name": "Menu Item 125", + "order": 125, + "execute": menu_125, + }, + { + "name": "Menu Item 126", + "order": 126, + "execute": menu_126, + }, + { + "name": "Menu Item 127", + "order": 127, + "execute": menu_127, + }, + { + "name": "Menu Item 128", + "order": 128, + "execute": menu_128, + }, + { + "name": "Menu Item 129", + "order": 129, + "execute": menu_129, + }, + { + "name": "Menu Item 130", + "order": 130, + "execute": menu_130, + }, + { + "name": "Menu Item 131", + "order": 131, + "execute": menu_131, + }, + { + "name": "Menu Item 132", + "order": 132, + "execute": menu_132, + }, + { + "name": "Menu Item 133", + "order": 133, + "execute": menu_133, + }, + { + "name": "Menu Item 134", + "order": 134, + "execute": menu_134, + }, + { + "name": "Menu Item 135", + "order": 135, + "execute": menu_135, + }, + { + "name": "Menu Item 136", + "order": 136, + "execute": menu_136, + }, + { + "name": "Menu Item 137", + "order": 137, + "execute": menu_137, + }, + { + "name": "Menu Item 138", + "order": 138, + "execute": menu_138, + }, + { + "name": "Menu Item 139", + "order": 139, + "execute": menu_139, + }, + { + "name": "Menu Item 140", + "order": 140, + "execute": menu_140, + }, + { + "name": "Menu Item 141", + "order": 141, + "execute": menu_141, + }, + { + "name": "Menu Item 142", + "order": 142, + "execute": menu_142, + }, + { + "name": "Menu Item 143", + "order": 143, + "execute": menu_143, + }, + { + "name": "Menu Item 144", + "order": 144, + "execute": menu_144, + }, + { + "name": "Menu Item 145", + "order": 145, + "execute": menu_145, + }, + { + "name": "Menu Item 146", + "order": 146, + "execute": menu_146, + }, + { + "name": "Menu Item 147", + "order": 147, + "execute": menu_147, + }, + { + "name": "Menu Item 148", + "order": 148, + "execute": menu_148, + }, + { + "name": "Menu Item 149", + "order": 149, + "execute": menu_149, + }, + { + "name": "Menu Item 150", + "order": 150, + "execute": menu_150, + }, + { + "name": "Menu Item 151", + "order": 151, + "execute": menu_151, + }, + { + "name": "Menu Item 152", + "order": 152, + "execute": menu_152, + }, + { + "name": "Menu Item 153", + "order": 153, + "execute": menu_153, + }, + { + "name": "Menu Item 154", + "order": 154, + "execute": menu_154, + }, + { + "name": "Menu Item 155", + "order": 155, + "execute": menu_155, + }, + { + "name": "Menu Item 156", + "order": 156, + "execute": menu_156, + }, + { + "name": "Menu Item 157", + "order": 157, + "execute": menu_157, + }, + { + "name": "Menu Item 158", + "order": 158, + "execute": menu_158, + }, + { + "name": "Menu Item 159", + "order": 159, + "execute": menu_159, + }, + { + "name": "Menu Item 160", + "order": 160, + "execute": menu_160, + }, + { + "name": "Menu Item 161", + "order": 161, + "execute": menu_161, + }, + { + "name": "Menu Item 162", + "order": 162, + "execute": menu_162, + }, + { + "name": "Menu Item 163", + "order": 163, + "execute": menu_163, + }, + { + "name": "Menu Item 164", + "order": 164, + "execute": menu_164, + }, + { + "name": "Menu Item 165", + "order": 165, + "execute": menu_165, + }, + { + "name": "Menu Item 166", + "order": 166, + "execute": menu_166, + }, + { + "name": "Menu Item 167", + "order": 167, + "execute": menu_167, + }, + { + "name": "Menu Item 168", + "order": 168, + "execute": menu_168, + }, + { + "name": "Menu Item 169", + "order": 169, + "execute": menu_169, + }, + { + "name": "Menu Item 170", + "order": 170, + "execute": menu_170, + }, + { + "name": "Menu Item 171", + "order": 171, + "execute": menu_171, + }, + { + "name": "Menu Item 172", + "order": 172, + "execute": menu_172, + }, + { + "name": "Menu Item 173", + "order": 173, + "execute": menu_173, + }, + { + "name": "Menu Item 174", + "order": 174, + "execute": menu_174, + }, + { + "name": "Menu Item 175", + "order": 175, + "execute": menu_175, + }, + { + "name": "Menu Item 176", + "order": 176, + "execute": menu_176, + }, + { + "name": "Menu Item 177", + "order": 177, + "execute": menu_177, + }, + { + "name": "Menu Item 178", + "order": 178, + "execute": menu_178, + }, + { + "name": "Menu Item 179", + "order": 179, + "execute": menu_179, + }, + { + "name": "Menu Item 180", + "order": 180, + "execute": menu_180, + }, + { + "name": "Menu Item 181", + "order": 181, + "execute": menu_181, + }, + { + "name": "Menu Item 182", + "order": 182, + "execute": menu_182, + }, + { + "name": "Menu Item 183", + "order": 183, + "execute": menu_183, + }, + { + "name": "Menu Item 184", + "order": 184, + "execute": menu_184, + }, + { + "name": "Menu Item 185", + "order": 185, + "execute": menu_185, + }, + { + "name": "Menu Item 186", + "order": 186, + "execute": menu_186, + }, + { + "name": "Menu Item 187", + "order": 187, + "execute": menu_187, + }, + { + "name": "Menu Item 188", + "order": 188, + "execute": menu_188, + }, + { + "name": "Menu Item 189", + "order": 189, + "execute": menu_189, + }, + { + "name": "Menu Item 190", + "order": 190, + "execute": menu_190, + }, + { + "name": "Menu Item 191", + "order": 191, + "execute": menu_191, + }, + { + "name": "Menu Item 192", + "order": 192, + "execute": menu_192, + }, + { + "name": "Menu Item 193", + "order": 193, + "execute": menu_193, + }, + { + "name": "Menu Item 194", + "order": 194, + "execute": menu_194, + }, + { + "name": "Menu Item 195", + "order": 195, + "execute": menu_195, + }, + { + "name": "Menu Item 196", + "order": 196, + "execute": menu_196, + }, + { + "name": "Menu Item 197", + "order": 197, + "execute": menu_197, + }, + { + "name": "Menu Item 198", + "order": 198, + "execute": menu_198, + }, + { + "name": "Menu Item 199", + "order": 199, + "execute": menu_199, + } + ] + }, + { + "name": "200 - 299", + "hierarchy": ["Example / Test Menu Items"], + "order": 3, + "actions": [ + { + "name": "Menu Item 200", + "order": 200, + "execute": menu_200, + }, + { + "name": "Menu Item 201", + "order": 201, + "execute": menu_201, + }, + { + "name": "Menu Item 202", + "order": 202, + "execute": menu_202, + }, + { + "name": "Menu Item 203", + "order": 203, + "execute": menu_203, + }, + { + "name": "Menu Item 204", + "order": 204, + "execute": menu_204, + }, + { + "name": "Menu Item 205", + "order": 205, + "execute": menu_205, + }, + { + "name": "Menu Item 206", + "order": 206, + "execute": menu_206, + }, + { + "name": "Menu Item 207", + "order": 207, + "execute": menu_207, + }, + { + "name": "Menu Item 208", + "order": 208, + "execute": menu_208, + }, + { + "name": "Menu Item 209", + "order": 209, + "execute": menu_209, + }, + { + "name": "Menu Item 210", + "order": 210, + "execute": menu_210, + }, + { + "name": "Menu Item 211", + "order": 211, + "execute": menu_211, + }, + { + "name": "Menu Item 212", + "order": 212, + "execute": menu_212, + }, + { + "name": "Menu Item 213", + "order": 213, + "execute": menu_213, + }, + { + "name": "Menu Item 214", + "order": 214, + "execute": menu_214, + }, + { + "name": "Menu Item 215", + "order": 215, + "execute": menu_215, + }, + { + "name": "Menu Item 216", + "order": 216, + "execute": menu_216, + }, + { + "name": "Menu Item 217", + "order": 217, + "execute": menu_217, + }, + { + "name": "Menu Item 218", + "order": 218, + "execute": menu_218, + }, + { + "name": "Menu Item 219", + "order": 219, + "execute": menu_219, + }, + { + "name": "Menu Item 220", + "order": 220, + "execute": menu_220, + }, + { + "name": "Menu Item 221", + "order": 221, + "execute": menu_221, + }, + { + "name": "Menu Item 222", + "order": 222, + "execute": menu_222, + }, + { + "name": "Menu Item 223", + "order": 223, + "execute": menu_223, + }, + { + "name": "Menu Item 224", + "order": 224, + "execute": menu_224, + }, + { + "name": "Menu Item 225", + "order": 225, + "execute": menu_225, + }, + { + "name": "Menu Item 226", + "order": 226, + "execute": menu_226, + }, + { + "name": "Menu Item 227", + "order": 227, + "execute": menu_227, + }, + { + "name": "Menu Item 228", + "order": 228, + "execute": menu_228, + }, + { + "name": "Menu Item 229", + "order": 229, + "execute": menu_229, + }, + { + "name": "Menu Item 230", + "order": 230, + "execute": menu_230, + }, + { + "name": "Menu Item 231", + "order": 231, + "execute": menu_231, + }, + { + "name": "Menu Item 232", + "order": 232, + "execute": menu_232, + }, + { + "name": "Menu Item 233", + "order": 233, + "execute": menu_233, + }, + { + "name": "Menu Item 234", + "order": 234, + "execute": menu_234, + }, + { + "name": "Menu Item 235", + "order": 235, + "execute": menu_235, + }, + { + "name": "Menu Item 236", + "order": 236, + "execute": menu_236, + }, + { + "name": "Menu Item 237", + "order": 237, + "execute": menu_237, + }, + { + "name": "Menu Item 238", + "order": 238, + "execute": menu_238, + }, + { + "name": "Menu Item 239", + "order": 239, + "execute": menu_239, + }, + { + "name": "Menu Item 240", + "order": 240, + "execute": menu_240, + }, + { + "name": "Menu Item 241", + "order": 241, + "execute": menu_241, + }, + { + "name": "Menu Item 242", + "order": 242, + "execute": menu_242, + }, + { + "name": "Menu Item 243", + "order": 243, + "execute": menu_243, + }, + { + "name": "Menu Item 244", + "order": 244, + "execute": menu_244, + }, + { + "name": "Menu Item 245", + "order": 245, + "execute": menu_245, + }, + { + "name": "Menu Item 246", + "order": 246, + "execute": menu_246, + }, + { + "name": "Menu Item 247", + "order": 247, + "execute": menu_247, + }, + { + "name": "Menu Item 248", + "order": 248, + "execute": menu_248, + }, + { + "name": "Menu Item 249", + "order": 249, + "execute": menu_249, + }, + { + "name": "Menu Item 250", + "order": 250, + "execute": menu_250, + }, + { + "name": "Menu Item 251", + "order": 251, + "execute": menu_251, + }, + { + "name": "Menu Item 252", + "order": 252, + "execute": menu_252, + }, + { + "name": "Menu Item 253", + "order": 253, + "execute": menu_253, + }, + { + "name": "Menu Item 254", + "order": 254, + "execute": menu_254, + }, + { + "name": "Menu Item 255", + "order": 255, + "execute": menu_255, + }, + { + "name": "Menu Item 256", + "order": 256, + "execute": menu_256, + }, + { + "name": "Menu Item 257", + "order": 257, + "execute": menu_257, + }, + { + "name": "Menu Item 258", + "order": 258, + "execute": menu_258, + }, + { + "name": "Menu Item 259", + "order": 259, + "execute": menu_259, + }, + { + "name": "Menu Item 260", + "order": 260, + "execute": menu_260, + }, + { + "name": "Menu Item 261", + "order": 261, + "execute": menu_261, + }, + { + "name": "Menu Item 262", + "order": 262, + "execute": menu_262, + }, + { + "name": "Menu Item 263", + "order": 263, + "execute": menu_263, + }, + { + "name": "Menu Item 264", + "order": 264, + "execute": menu_264, + }, + { + "name": "Menu Item 265", + "order": 265, + "execute": menu_265, + }, + { + "name": "Menu Item 266", + "order": 266, + "execute": menu_266, + }, + { + "name": "Menu Item 267", + "order": 267, + "execute": menu_267, + }, + { + "name": "Menu Item 268", + "order": 268, + "execute": menu_268, + }, + { + "name": "Menu Item 269", + "order": 269, + "execute": menu_269, + }, + { + "name": "Menu Item 270", + "order": 270, + "execute": menu_270, + }, + { + "name": "Menu Item 271", + "order": 271, + "execute": menu_271, + }, + { + "name": "Menu Item 272", + "order": 272, + "execute": menu_272, + }, + { + "name": "Menu Item 273", + "order": 273, + "execute": menu_273, + }, + { + "name": "Menu Item 274", + "order": 274, + "execute": menu_274, + }, + { + "name": "Menu Item 275", + "order": 275, + "execute": menu_275, + }, + { + "name": "Menu Item 276", + "order": 276, + "execute": menu_276, + }, + { + "name": "Menu Item 277", + "order": 277, + "execute": menu_277, + }, + { + "name": "Menu Item 278", + "order": 278, + "execute": menu_278, + }, + { + "name": "Menu Item 279", + "order": 279, + "execute": menu_279, + }, + { + "name": "Menu Item 280", + "order": 280, + "execute": menu_280, + }, + { + "name": "Menu Item 281", + "order": 281, + "execute": menu_281, + }, + { + "name": "Menu Item 282", + "order": 282, + "execute": menu_282, + }, + { + "name": "Menu Item 283", + "order": 283, + "execute": menu_283, + }, + { + "name": "Menu Item 284", + "order": 284, + "execute": menu_284, + }, + { + "name": "Menu Item 285", + "order": 285, + "execute": menu_285, + }, + { + "name": "Menu Item 286", + "order": 286, + "execute": menu_286, + }, + { + "name": "Menu Item 287", + "order": 287, + "execute": menu_287, + }, + { + "name": "Menu Item 288", + "order": 288, + "execute": menu_288, + }, + { + "name": "Menu Item 289", + "order": 289, + "execute": menu_289, + }, + { + "name": "Menu Item 290", + "order": 290, + "execute": menu_290, + }, + { + "name": "Menu Item 291", + "order": 291, + "execute": menu_291, + }, + { + "name": "Menu Item 292", + "order": 292, + "execute": menu_292, + }, + { + "name": "Menu Item 293", + "order": 293, + "execute": menu_293, + }, + { + "name": "Menu Item 294", + "order": 294, + "execute": menu_294, + }, + { + "name": "Menu Item 295", + "order": 295, + "execute": menu_295, + }, + { + "name": "Menu Item 296", + "order": 296, + "execute": menu_296, + }, + { + "name": "Menu Item 297", + "order": 297, + "execute": menu_297, + }, + { + "name": "Menu Item 298", + "order": 298, + "execute": menu_298, + }, + { + "name": "Menu Item 299", + "order": 299, + "execute": menu_299, + } + ] + }, + { + "name": "300 - 399", + "hierarchy": ["Example / Test Menu Items"], + "order": 4, + "actions": [ + { + "name": "Menu Item 300", + "order": 300, + "execute": menu_300, + }, + { + "name": "Menu Item 301", + "order": 301, + "execute": menu_301, + }, + { + "name": "Menu Item 302", + "order": 302, + "execute": menu_302, + }, + { + "name": "Menu Item 303", + "order": 303, + "execute": menu_303, + }, + { + "name": "Menu Item 304", + "order": 304, + "execute": menu_304, + }, + { + "name": "Menu Item 305", + "order": 305, + "execute": menu_305, + }, + { + "name": "Menu Item 306", + "order": 306, + "execute": menu_306, + }, + { + "name": "Menu Item 307", + "order": 307, + "execute": menu_307, + }, + { + "name": "Menu Item 308", + "order": 308, + "execute": menu_308, + }, + { + "name": "Menu Item 309", + "order": 309, + "execute": menu_309, + }, + { + "name": "Menu Item 310", + "order": 310, + "execute": menu_310, + }, + { + "name": "Menu Item 311", + "order": 311, + "execute": menu_311, + }, + { + "name": "Menu Item 312", + "order": 312, + "execute": menu_312, + }, + { + "name": "Menu Item 313", + "order": 313, + "execute": menu_313, + }, + { + "name": "Menu Item 314", + "order": 314, + "execute": menu_314, + }, + { + "name": "Menu Item 315", + "order": 315, + "execute": menu_315, + }, + { + "name": "Menu Item 316", + "order": 316, + "execute": menu_316, + }, + { + "name": "Menu Item 317", + "order": 317, + "execute": menu_317, + }, + { + "name": "Menu Item 318", + "order": 318, + "execute": menu_318, + }, + { + "name": "Menu Item 319", + "order": 319, + "execute": menu_319, + }, + { + "name": "Menu Item 320", + "order": 320, + "execute": menu_320, + }, + { + "name": "Menu Item 321", + "order": 321, + "execute": menu_321, + }, + { + "name": "Menu Item 322", + "order": 322, + "execute": menu_322, + }, + { + "name": "Menu Item 323", + "order": 323, + "execute": menu_323, + }, + { + "name": "Menu Item 324", + "order": 324, + "execute": menu_324, + }, + { + "name": "Menu Item 325", + "order": 325, + "execute": menu_325, + }, + { + "name": "Menu Item 326", + "order": 326, + "execute": menu_326, + }, + { + "name": "Menu Item 327", + "order": 327, + "execute": menu_327, + }, + { + "name": "Menu Item 328", + "order": 328, + "execute": menu_328, + }, + { + "name": "Menu Item 329", + "order": 329, + "execute": menu_329, + }, + { + "name": "Menu Item 330", + "order": 330, + "execute": menu_330, + }, + { + "name": "Menu Item 331", + "order": 331, + "execute": menu_331, + }, + { + "name": "Menu Item 332", + "order": 332, + "execute": menu_332, + }, + { + "name": "Menu Item 333", + "order": 333, + "execute": menu_333, + }, + { + "name": "Menu Item 334", + "order": 334, + "execute": menu_334, + }, + { + "name": "Menu Item 335", + "order": 335, + "execute": menu_335, + }, + { + "name": "Menu Item 336", + "order": 336, + "execute": menu_336, + }, + { + "name": "Menu Item 337", + "order": 337, + "execute": menu_337, + }, + { + "name": "Menu Item 338", + "order": 338, + "execute": menu_338, + }, + { + "name": "Menu Item 339", + "order": 339, + "execute": menu_339, + }, + { + "name": "Menu Item 340", + "order": 340, + "execute": menu_340, + }, + { + "name": "Menu Item 341", + "order": 341, + "execute": menu_341, + }, + { + "name": "Menu Item 342", + "order": 342, + "execute": menu_342, + }, + { + "name": "Menu Item 343", + "order": 343, + "execute": menu_343, + }, + { + "name": "Menu Item 344", + "order": 344, + "execute": menu_344, + }, + { + "name": "Menu Item 345", + "order": 345, + "execute": menu_345, + }, + { + "name": "Menu Item 346", + "order": 346, + "execute": menu_346, + }, + { + "name": "Menu Item 347", + "order": 347, + "execute": menu_347, + }, + { + "name": "Menu Item 348", + "order": 348, + "execute": menu_348, + }, + { + "name": "Menu Item 349", + "order": 349, + "execute": menu_349, + }, + { + "name": "Menu Item 350", + "order": 350, + "execute": menu_350, + }, + { + "name": "Menu Item 351", + "order": 351, + "execute": menu_351, + }, + { + "name": "Menu Item 352", + "order": 352, + "execute": menu_352, + }, + { + "name": "Menu Item 353", + "order": 353, + "execute": menu_353, + }, + { + "name": "Menu Item 354", + "order": 354, + "execute": menu_354, + }, + { + "name": "Menu Item 355", + "order": 355, + "execute": menu_355, + }, + { + "name": "Menu Item 356", + "order": 356, + "execute": menu_356, + }, + { + "name": "Menu Item 357", + "order": 357, + "execute": menu_357, + }, + { + "name": "Menu Item 358", + "order": 358, + "execute": menu_358, + }, + { + "name": "Menu Item 359", + "order": 359, + "execute": menu_359, + }, + { + "name": "Menu Item 360", + "order": 360, + "execute": menu_360, + }, + { + "name": "Menu Item 361", + "order": 361, + "execute": menu_361, + }, + { + "name": "Menu Item 362", + "order": 362, + "execute": menu_362, + }, + { + "name": "Menu Item 363", + "order": 363, + "execute": menu_363, + }, + { + "name": "Menu Item 364", + "order": 364, + "execute": menu_364, + }, + { + "name": "Menu Item 365", + "order": 365, + "execute": menu_365, + }, + { + "name": "Menu Item 366", + "order": 366, + "execute": menu_366, + }, + { + "name": "Menu Item 367", + "order": 367, + "execute": menu_367, + }, + { + "name": "Menu Item 368", + "order": 368, + "execute": menu_368, + }, + { + "name": "Menu Item 369", + "order": 369, + "execute": menu_369, + }, + { + "name": "Menu Item 370", + "order": 370, + "execute": menu_370, + }, + { + "name": "Menu Item 371", + "order": 371, + "execute": menu_371, + }, + { + "name": "Menu Item 372", + "order": 372, + "execute": menu_372, + }, + { + "name": "Menu Item 373", + "order": 373, + "execute": menu_373, + }, + { + "name": "Menu Item 374", + "order": 374, + "execute": menu_374, + }, + { + "name": "Menu Item 375", + "order": 375, + "execute": menu_375, + }, + { + "name": "Menu Item 376", + "order": 376, + "execute": menu_376, + }, + { + "name": "Menu Item 377", + "order": 377, + "execute": menu_377, + }, + { + "name": "Menu Item 378", + "order": 378, + "execute": menu_378, + }, + { + "name": "Menu Item 379", + "order": 379, + "execute": menu_379, + }, + { + "name": "Menu Item 380", + "order": 380, + "execute": menu_380, + }, + { + "name": "Menu Item 381", + "order": 381, + "execute": menu_381, + }, + { + "name": "Menu Item 382", + "order": 382, + "execute": menu_382, + }, + { + "name": "Menu Item 383", + "order": 383, + "execute": menu_383, + }, + { + "name": "Menu Item 384", + "order": 384, + "execute": menu_384, + }, + { + "name": "Menu Item 385", + "order": 385, + "execute": menu_385, + }, + { + "name": "Menu Item 386", + "order": 386, + "execute": menu_386, + }, + { + "name": "Menu Item 387", + "order": 387, + "execute": menu_387, + }, + { + "name": "Menu Item 388", + "order": 388, + "execute": menu_388, + }, + { + "name": "Menu Item 389", + "order": 389, + "execute": menu_389, + }, + { + "name": "Menu Item 390", + "order": 390, + "execute": menu_390, + }, + { + "name": "Menu Item 391", + "order": 391, + "execute": menu_391, + }, + { + "name": "Menu Item 392", + "order": 392, + "execute": menu_392, + }, + { + "name": "Menu Item 393", + "order": 393, + "execute": menu_393, + }, + { + "name": "Menu Item 394", + "order": 394, + "execute": menu_394, + }, + { + "name": "Menu Item 395", + "order": 395, + "execute": menu_395, + }, + { + "name": "Menu Item 396", + "order": 396, + "execute": menu_396, + }, + { + "name": "Menu Item 397", + "order": 397, + "execute": menu_397, + }, + { + "name": "Menu Item 398", + "order": 398, + "execute": menu_398, + }, + { + "name": "Menu Item 399", + "order": 399, + "execute": menu_399, + } + ] + }, + { + "name": "400 - 499", + "hierarchy": ["Example / Test Menu Items"], + "order": 5, + "actions": [ + { + "name": "Menu Item 400", + "order": 400, + "execute": menu_400, + }, + { + "name": "Menu Item 401", + "order": 401, + "execute": menu_401, + }, + { + "name": "Menu Item 402", + "order": 402, + "execute": menu_402, + }, + { + "name": "Menu Item 403", + "order": 403, + "execute": menu_403, + }, + { + "name": "Menu Item 404", + "order": 404, + "execute": menu_404, + }, + { + "name": "Menu Item 405", + "order": 405, + "execute": menu_405, + }, + { + "name": "Menu Item 406", + "order": 406, + "execute": menu_406, + }, + { + "name": "Menu Item 407", + "order": 407, + "execute": menu_407, + }, + { + "name": "Menu Item 408", + "order": 408, + "execute": menu_408, + }, + { + "name": "Menu Item 409", + "order": 409, + "execute": menu_409, + }, + { + "name": "Menu Item 410", + "order": 410, + "execute": menu_410, + }, + { + "name": "Menu Item 411", + "order": 411, + "execute": menu_411, + }, + { + "name": "Menu Item 412", + "order": 412, + "execute": menu_412, + }, + { + "name": "Menu Item 413", + "order": 413, + "execute": menu_413, + }, + { + "name": "Menu Item 414", + "order": 414, + "execute": menu_414, + }, + { + "name": "Menu Item 415", + "order": 415, + "execute": menu_415, + }, + { + "name": "Menu Item 416", + "order": 416, + "execute": menu_416, + }, + { + "name": "Menu Item 417", + "order": 417, + "execute": menu_417, + }, + { + "name": "Menu Item 418", + "order": 418, + "execute": menu_418, + }, + { + "name": "Menu Item 419", + "order": 419, + "execute": menu_419, + }, + { + "name": "Menu Item 420", + "order": 420, + "execute": menu_420, + }, + { + "name": "Menu Item 421", + "order": 421, + "execute": menu_421, + }, + { + "name": "Menu Item 422", + "order": 422, + "execute": menu_422, + }, + { + "name": "Menu Item 423", + "order": 423, + "execute": menu_423, + }, + { + "name": "Menu Item 424", + "order": 424, + "execute": menu_424, + }, + { + "name": "Menu Item 425", + "order": 425, + "execute": menu_425, + }, + { + "name": "Menu Item 426", + "order": 426, + "execute": menu_426, + }, + { + "name": "Menu Item 427", + "order": 427, + "execute": menu_427, + }, + { + "name": "Menu Item 428", + "order": 428, + "execute": menu_428, + }, + { + "name": "Menu Item 429", + "order": 429, + "execute": menu_429, + }, + { + "name": "Menu Item 430", + "order": 430, + "execute": menu_430, + }, + { + "name": "Menu Item 431", + "order": 431, + "execute": menu_431, + }, + { + "name": "Menu Item 432", + "order": 432, + "execute": menu_432, + }, + { + "name": "Menu Item 433", + "order": 433, + "execute": menu_433, + }, + { + "name": "Menu Item 434", + "order": 434, + "execute": menu_434, + }, + { + "name": "Menu Item 435", + "order": 435, + "execute": menu_435, + }, + { + "name": "Menu Item 436", + "order": 436, + "execute": menu_436, + }, + { + "name": "Menu Item 437", + "order": 437, + "execute": menu_437, + }, + { + "name": "Menu Item 438", + "order": 438, + "execute": menu_438, + }, + { + "name": "Menu Item 439", + "order": 439, + "execute": menu_439, + }, + { + "name": "Menu Item 440", + "order": 440, + "execute": menu_440, + }, + { + "name": "Menu Item 441", + "order": 441, + "execute": menu_441, + }, + { + "name": "Menu Item 442", + "order": 442, + "execute": menu_442, + }, + { + "name": "Menu Item 443", + "order": 443, + "execute": menu_443, + }, + { + "name": "Menu Item 444", + "order": 444, + "execute": menu_444, + }, + { + "name": "Menu Item 445", + "order": 445, + "execute": menu_445, + }, + { + "name": "Menu Item 446", + "order": 446, + "execute": menu_446, + }, + { + "name": "Menu Item 447", + "order": 447, + "execute": menu_447, + }, + { + "name": "Menu Item 448", + "order": 448, + "execute": menu_448, + }, + { + "name": "Menu Item 449", + "order": 449, + "execute": menu_449, + }, + { + "name": "Menu Item 450", + "order": 450, + "execute": menu_450, + }, + { + "name": "Menu Item 451", + "order": 451, + "execute": menu_451, + }, + { + "name": "Menu Item 452", + "order": 452, + "execute": menu_452, + }, + { + "name": "Menu Item 453", + "order": 453, + "execute": menu_453, + }, + { + "name": "Menu Item 454", + "order": 454, + "execute": menu_454, + }, + { + "name": "Menu Item 455", + "order": 455, + "execute": menu_455, + }, + { + "name": "Menu Item 456", + "order": 456, + "execute": menu_456, + }, + { + "name": "Menu Item 457", + "order": 457, + "execute": menu_457, + }, + { + "name": "Menu Item 458", + "order": 458, + "execute": menu_458, + }, + { + "name": "Menu Item 459", + "order": 459, + "execute": menu_459, + }, + { + "name": "Menu Item 460", + "order": 460, + "execute": menu_460, + }, + { + "name": "Menu Item 461", + "order": 461, + "execute": menu_461, + }, + { + "name": "Menu Item 462", + "order": 462, + "execute": menu_462, + }, + { + "name": "Menu Item 463", + "order": 463, + "execute": menu_463, + }, + { + "name": "Menu Item 464", + "order": 464, + "execute": menu_464, + }, + { + "name": "Menu Item 465", + "order": 465, + "execute": menu_465, + }, + { + "name": "Menu Item 466", + "order": 466, + "execute": menu_466, + }, + { + "name": "Menu Item 467", + "order": 467, + "execute": menu_467, + }, + { + "name": "Menu Item 468", + "order": 468, + "execute": menu_468, + }, + { + "name": "Menu Item 469", + "order": 469, + "execute": menu_469, + }, + { + "name": "Menu Item 470", + "order": 470, + "execute": menu_470, + }, + { + "name": "Menu Item 471", + "order": 471, + "execute": menu_471, + }, + { + "name": "Menu Item 472", + "order": 472, + "execute": menu_472, + }, + { + "name": "Menu Item 473", + "order": 473, + "execute": menu_473, + }, + { + "name": "Menu Item 474", + "order": 474, + "execute": menu_474, + }, + { + "name": "Menu Item 475", + "order": 475, + "execute": menu_475, + }, + { + "name": "Menu Item 476", + "order": 476, + "execute": menu_476, + }, + { + "name": "Menu Item 477", + "order": 477, + "execute": menu_477, + }, + { + "name": "Menu Item 478", + "order": 478, + "execute": menu_478, + }, + { + "name": "Menu Item 479", + "order": 479, + "execute": menu_479, + }, + { + "name": "Menu Item 480", + "order": 480, + "execute": menu_480, + }, + { + "name": "Menu Item 481", + "order": 481, + "execute": menu_481, + }, + { + "name": "Menu Item 482", + "order": 482, + "execute": menu_482, + }, + { + "name": "Menu Item 483", + "order": 483, + "execute": menu_483, + }, + { + "name": "Menu Item 484", + "order": 484, + "execute": menu_484, + }, + { + "name": "Menu Item 485", + "order": 485, + "execute": menu_485, + }, + { + "name": "Menu Item 486", + "order": 486, + "execute": menu_486, + }, + { + "name": "Menu Item 487", + "order": 487, + "execute": menu_487, + }, + { + "name": "Menu Item 488", + "order": 488, + "execute": menu_488, + }, + { + "name": "Menu Item 489", + "order": 489, + "execute": menu_489, + }, + { + "name": "Menu Item 490", + "order": 490, + "execute": menu_490, + }, + { + "name": "Menu Item 491", + "order": 491, + "execute": menu_491, + }, + { + "name": "Menu Item 492", + "order": 492, + "execute": menu_492, + }, + { + "name": "Menu Item 493", + "order": 493, + "execute": menu_493, + }, + { + "name": "Menu Item 494", + "order": 494, + "execute": menu_494, + }, + { + "name": "Menu Item 495", + "order": 495, + "execute": menu_495, + }, + { + "name": "Menu Item 496", + "order": 496, + "execute": menu_496, + }, + { + "name": "Menu Item 497", + "order": 497, + "execute": menu_497, + }, + { + "name": "Menu Item 498", + "order": 498, + "execute": menu_498, + }, + { + "name": "Menu Item 499", + "order": 499, + "execute": menu_499, + } + ] + }, + { + "name": "500 - 599", + "hierarchy": ["Example / Test Menu Items"], + "order": 6, + "actions": [ + { + "name": "Menu Item 500", + "order": 500, + "execute": menu_500, + }, + { + "name": "Menu Item 501", + "order": 501, + "execute": menu_501, + }, + { + "name": "Menu Item 502", + "order": 502, + "execute": menu_502, + }, + { + "name": "Menu Item 503", + "order": 503, + "execute": menu_503, + }, + { + "name": "Menu Item 504", + "order": 504, + "execute": menu_504, + }, + { + "name": "Menu Item 505", + "order": 505, + "execute": menu_505, + }, + { + "name": "Menu Item 506", + "order": 506, + "execute": menu_506, + }, + { + "name": "Menu Item 507", + "order": 507, + "execute": menu_507, + }, + { + "name": "Menu Item 508", + "order": 508, + "execute": menu_508, + }, + { + "name": "Menu Item 509", + "order": 509, + "execute": menu_509, + }, + { + "name": "Menu Item 510", + "order": 510, + "execute": menu_510, + }, + { + "name": "Menu Item 511", + "order": 511, + "execute": menu_511, + }, + { + "name": "Menu Item 512", + "order": 512, + "execute": menu_512, + }, + { + "name": "Menu Item 513", + "order": 513, + "execute": menu_513, + }, + { + "name": "Menu Item 514", + "order": 514, + "execute": menu_514, + }, + { + "name": "Menu Item 515", + "order": 515, + "execute": menu_515, + }, + { + "name": "Menu Item 516", + "order": 516, + "execute": menu_516, + }, + { + "name": "Menu Item 517", + "order": 517, + "execute": menu_517, + }, + { + "name": "Menu Item 518", + "order": 518, + "execute": menu_518, + }, + { + "name": "Menu Item 519", + "order": 519, + "execute": menu_519, + }, + { + "name": "Menu Item 520", + "order": 520, + "execute": menu_520, + }, + { + "name": "Menu Item 521", + "order": 521, + "execute": menu_521, + }, + { + "name": "Menu Item 522", + "order": 522, + "execute": menu_522, + }, + { + "name": "Menu Item 523", + "order": 523, + "execute": menu_523, + }, + { + "name": "Menu Item 524", + "order": 524, + "execute": menu_524, + }, + { + "name": "Menu Item 525", + "order": 525, + "execute": menu_525, + }, + { + "name": "Menu Item 526", + "order": 526, + "execute": menu_526, + }, + { + "name": "Menu Item 527", + "order": 527, + "execute": menu_527, + }, + { + "name": "Menu Item 528", + "order": 528, + "execute": menu_528, + }, + { + "name": "Menu Item 529", + "order": 529, + "execute": menu_529, + }, + { + "name": "Menu Item 530", + "order": 530, + "execute": menu_530, + }, + { + "name": "Menu Item 531", + "order": 531, + "execute": menu_531, + }, + { + "name": "Menu Item 532", + "order": 532, + "execute": menu_532, + }, + { + "name": "Menu Item 533", + "order": 533, + "execute": menu_533, + }, + { + "name": "Menu Item 534", + "order": 534, + "execute": menu_534, + }, + { + "name": "Menu Item 535", + "order": 535, + "execute": menu_535, + }, + { + "name": "Menu Item 536", + "order": 536, + "execute": menu_536, + }, + { + "name": "Menu Item 537", + "order": 537, + "execute": menu_537, + }, + { + "name": "Menu Item 538", + "order": 538, + "execute": menu_538, + }, + { + "name": "Menu Item 539", + "order": 539, + "execute": menu_539, + }, + { + "name": "Menu Item 540", + "order": 540, + "execute": menu_540, + }, + { + "name": "Menu Item 541", + "order": 541, + "execute": menu_541, + }, + { + "name": "Menu Item 542", + "order": 542, + "execute": menu_542, + }, + { + "name": "Menu Item 543", + "order": 543, + "execute": menu_543, + }, + { + "name": "Menu Item 544", + "order": 544, + "execute": menu_544, + }, + { + "name": "Menu Item 545", + "order": 545, + "execute": menu_545, + }, + { + "name": "Menu Item 546", + "order": 546, + "execute": menu_546, + }, + { + "name": "Menu Item 547", + "order": 547, + "execute": menu_547, + }, + { + "name": "Menu Item 548", + "order": 548, + "execute": menu_548, + }, + { + "name": "Menu Item 549", + "order": 549, + "execute": menu_549, + }, + { + "name": "Menu Item 550", + "order": 550, + "execute": menu_550, + }, + { + "name": "Menu Item 551", + "order": 551, + "execute": menu_551, + }, + { + "name": "Menu Item 552", + "order": 552, + "execute": menu_552, + }, + { + "name": "Menu Item 553", + "order": 553, + "execute": menu_553, + }, + { + "name": "Menu Item 554", + "order": 554, + "execute": menu_554, + }, + { + "name": "Menu Item 555", + "order": 555, + "execute": menu_555, + }, + { + "name": "Menu Item 556", + "order": 556, + "execute": menu_556, + }, + { + "name": "Menu Item 557", + "order": 557, + "execute": menu_557, + }, + { + "name": "Menu Item 558", + "order": 558, + "execute": menu_558, + }, + { + "name": "Menu Item 559", + "order": 559, + "execute": menu_559, + }, + { + "name": "Menu Item 560", + "order": 560, + "execute": menu_560, + }, + { + "name": "Menu Item 561", + "order": 561, + "execute": menu_561, + }, + { + "name": "Menu Item 562", + "order": 562, + "execute": menu_562, + }, + { + "name": "Menu Item 563", + "order": 563, + "execute": menu_563, + }, + { + "name": "Menu Item 564", + "order": 564, + "execute": menu_564, + }, + { + "name": "Menu Item 565", + "order": 565, + "execute": menu_565, + }, + { + "name": "Menu Item 566", + "order": 566, + "execute": menu_566, + }, + { + "name": "Menu Item 567", + "order": 567, + "execute": menu_567, + }, + { + "name": "Menu Item 568", + "order": 568, + "execute": menu_568, + }, + { + "name": "Menu Item 569", + "order": 569, + "execute": menu_569, + }, + { + "name": "Menu Item 570", + "order": 570, + "execute": menu_570, + }, + { + "name": "Menu Item 571", + "order": 571, + "execute": menu_571, + }, + { + "name": "Menu Item 572", + "order": 572, + "execute": menu_572, + }, + { + "name": "Menu Item 573", + "order": 573, + "execute": menu_573, + }, + { + "name": "Menu Item 574", + "order": 574, + "execute": menu_574, + }, + { + "name": "Menu Item 575", + "order": 575, + "execute": menu_575, + }, + { + "name": "Menu Item 576", + "order": 576, + "execute": menu_576, + }, + { + "name": "Menu Item 577", + "order": 577, + "execute": menu_577, + }, + { + "name": "Menu Item 578", + "order": 578, + "execute": menu_578, + }, + { + "name": "Menu Item 579", + "order": 579, + "execute": menu_579, + }, + { + "name": "Menu Item 580", + "order": 580, + "execute": menu_580, + }, + { + "name": "Menu Item 581", + "order": 581, + "execute": menu_581, + }, + { + "name": "Menu Item 582", + "order": 582, + "execute": menu_582, + }, + { + "name": "Menu Item 583", + "order": 583, + "execute": menu_583, + }, + { + "name": "Menu Item 584", + "order": 584, + "execute": menu_584, + }, + { + "name": "Menu Item 585", + "order": 585, + "execute": menu_585, + }, + { + "name": "Menu Item 586", + "order": 586, + "execute": menu_586, + }, + { + "name": "Menu Item 587", + "order": 587, + "execute": menu_587, + }, + { + "name": "Menu Item 588", + "order": 588, + "execute": menu_588, + }, + { + "name": "Menu Item 589", + "order": 589, + "execute": menu_589, + }, + { + "name": "Menu Item 590", + "order": 590, + "execute": menu_590, + }, + { + "name": "Menu Item 591", + "order": 591, + "execute": menu_591, + }, + { + "name": "Menu Item 592", + "order": 592, + "execute": menu_592, + }, + { + "name": "Menu Item 593", + "order": 593, + "execute": menu_593, + }, + { + "name": "Menu Item 594", + "order": 594, + "execute": menu_594, + }, + { + "name": "Menu Item 595", + "order": 595, + "execute": menu_595, + }, + { + "name": "Menu Item 596", + "order": 596, + "execute": menu_596, + }, + { + "name": "Menu Item 597", + "order": 597, + "execute": menu_597, + }, + { + "name": "Menu Item 598", + "order": 598, + "execute": menu_598, + }, + { + "name": "Menu Item 599", + "order": 599, + "execute": menu_599, + } + ] + }, + { + "name": "600 - 699", + "hierarchy": ["Example / Test Menu Items"], + "order": 7, + "actions": [ + { + "name": "Menu Item 600", + "order": 600, + "execute": menu_600, + }, + { + "name": "Menu Item 601", + "order": 601, + "execute": menu_601, + }, + { + "name": "Menu Item 602", + "order": 602, + "execute": menu_602, + }, + { + "name": "Menu Item 603", + "order": 603, + "execute": menu_603, + }, + { + "name": "Menu Item 604", + "order": 604, + "execute": menu_604, + }, + { + "name": "Menu Item 605", + "order": 605, + "execute": menu_605, + }, + { + "name": "Menu Item 606", + "order": 606, + "execute": menu_606, + }, + { + "name": "Menu Item 607", + "order": 607, + "execute": menu_607, + }, + { + "name": "Menu Item 608", + "order": 608, + "execute": menu_608, + }, + { + "name": "Menu Item 609", + "order": 609, + "execute": menu_609, + }, + { + "name": "Menu Item 610", + "order": 610, + "execute": menu_610, + }, + { + "name": "Menu Item 611", + "order": 611, + "execute": menu_611, + }, + { + "name": "Menu Item 612", + "order": 612, + "execute": menu_612, + }, + { + "name": "Menu Item 613", + "order": 613, + "execute": menu_613, + }, + { + "name": "Menu Item 614", + "order": 614, + "execute": menu_614, + }, + { + "name": "Menu Item 615", + "order": 615, + "execute": menu_615, + }, + { + "name": "Menu Item 616", + "order": 616, + "execute": menu_616, + }, + { + "name": "Menu Item 617", + "order": 617, + "execute": menu_617, + }, + { + "name": "Menu Item 618", + "order": 618, + "execute": menu_618, + }, + { + "name": "Menu Item 619", + "order": 619, + "execute": menu_619, + }, + { + "name": "Menu Item 620", + "order": 620, + "execute": menu_620, + }, + { + "name": "Menu Item 621", + "order": 621, + "execute": menu_621, + }, + { + "name": "Menu Item 622", + "order": 622, + "execute": menu_622, + }, + { + "name": "Menu Item 623", + "order": 623, + "execute": menu_623, + }, + { + "name": "Menu Item 624", + "order": 624, + "execute": menu_624, + }, + { + "name": "Menu Item 625", + "order": 625, + "execute": menu_625, + }, + { + "name": "Menu Item 626", + "order": 626, + "execute": menu_626, + }, + { + "name": "Menu Item 627", + "order": 627, + "execute": menu_627, + }, + { + "name": "Menu Item 628", + "order": 628, + "execute": menu_628, + }, + { + "name": "Menu Item 629", + "order": 629, + "execute": menu_629, + }, + { + "name": "Menu Item 630", + "order": 630, + "execute": menu_630, + }, + { + "name": "Menu Item 631", + "order": 631, + "execute": menu_631, + }, + { + "name": "Menu Item 632", + "order": 632, + "execute": menu_632, + }, + { + "name": "Menu Item 633", + "order": 633, + "execute": menu_633, + }, + { + "name": "Menu Item 634", + "order": 634, + "execute": menu_634, + }, + { + "name": "Menu Item 635", + "order": 635, + "execute": menu_635, + }, + { + "name": "Menu Item 636", + "order": 636, + "execute": menu_636, + }, + { + "name": "Menu Item 637", + "order": 637, + "execute": menu_637, + }, + { + "name": "Menu Item 638", + "order": 638, + "execute": menu_638, + }, + { + "name": "Menu Item 639", + "order": 639, + "execute": menu_639, + }, + { + "name": "Menu Item 640", + "order": 640, + "execute": menu_640, + }, + { + "name": "Menu Item 641", + "order": 641, + "execute": menu_641, + }, + { + "name": "Menu Item 642", + "order": 642, + "execute": menu_642, + }, + { + "name": "Menu Item 643", + "order": 643, + "execute": menu_643, + }, + { + "name": "Menu Item 644", + "order": 644, + "execute": menu_644, + }, + { + "name": "Menu Item 645", + "order": 645, + "execute": menu_645, + }, + { + "name": "Menu Item 646", + "order": 646, + "execute": menu_646, + }, + { + "name": "Menu Item 647", + "order": 647, + "execute": menu_647, + }, + { + "name": "Menu Item 648", + "order": 648, + "execute": menu_648, + }, + { + "name": "Menu Item 649", + "order": 649, + "execute": menu_649, + }, + { + "name": "Menu Item 650", + "order": 650, + "execute": menu_650, + }, + { + "name": "Menu Item 651", + "order": 651, + "execute": menu_651, + }, + { + "name": "Menu Item 652", + "order": 652, + "execute": menu_652, + }, + { + "name": "Menu Item 653", + "order": 653, + "execute": menu_653, + }, + { + "name": "Menu Item 654", + "order": 654, + "execute": menu_654, + }, + { + "name": "Menu Item 655", + "order": 655, + "execute": menu_655, + }, + { + "name": "Menu Item 656", + "order": 656, + "execute": menu_656, + }, + { + "name": "Menu Item 657", + "order": 657, + "execute": menu_657, + }, + { + "name": "Menu Item 658", + "order": 658, + "execute": menu_658, + }, + { + "name": "Menu Item 659", + "order": 659, + "execute": menu_659, + }, + { + "name": "Menu Item 660", + "order": 660, + "execute": menu_660, + }, + { + "name": "Menu Item 661", + "order": 661, + "execute": menu_661, + }, + { + "name": "Menu Item 662", + "order": 662, + "execute": menu_662, + }, + { + "name": "Menu Item 663", + "order": 663, + "execute": menu_663, + }, + { + "name": "Menu Item 664", + "order": 664, + "execute": menu_664, + }, + { + "name": "Menu Item 665", + "order": 665, + "execute": menu_665, + }, + { + "name": "Menu Item 666", + "order": 666, + "execute": menu_666, + }, + { + "name": "Menu Item 667", + "order": 667, + "execute": menu_667, + }, + { + "name": "Menu Item 668", + "order": 668, + "execute": menu_668, + }, + { + "name": "Menu Item 669", + "order": 669, + "execute": menu_669, + }, + { + "name": "Menu Item 670", + "order": 670, + "execute": menu_670, + }, + { + "name": "Menu Item 671", + "order": 671, + "execute": menu_671, + }, + { + "name": "Menu Item 672", + "order": 672, + "execute": menu_672, + }, + { + "name": "Menu Item 673", + "order": 673, + "execute": menu_673, + }, + { + "name": "Menu Item 674", + "order": 674, + "execute": menu_674, + }, + { + "name": "Menu Item 675", + "order": 675, + "execute": menu_675, + }, + { + "name": "Menu Item 676", + "order": 676, + "execute": menu_676, + }, + { + "name": "Menu Item 677", + "order": 677, + "execute": menu_677, + }, + { + "name": "Menu Item 678", + "order": 678, + "execute": menu_678, + }, + { + "name": "Menu Item 679", + "order": 679, + "execute": menu_679, + }, + { + "name": "Menu Item 680", + "order": 680, + "execute": menu_680, + }, + { + "name": "Menu Item 681", + "order": 681, + "execute": menu_681, + }, + { + "name": "Menu Item 682", + "order": 682, + "execute": menu_682, + }, + { + "name": "Menu Item 683", + "order": 683, + "execute": menu_683, + }, + { + "name": "Menu Item 684", + "order": 684, + "execute": menu_684, + }, + { + "name": "Menu Item 685", + "order": 685, + "execute": menu_685, + }, + { + "name": "Menu Item 686", + "order": 686, + "execute": menu_686, + }, + { + "name": "Menu Item 687", + "order": 687, + "execute": menu_687, + }, + { + "name": "Menu Item 688", + "order": 688, + "execute": menu_688, + }, + { + "name": "Menu Item 689", + "order": 689, + "execute": menu_689, + }, + { + "name": "Menu Item 690", + "order": 690, + "execute": menu_690, + }, + { + "name": "Menu Item 691", + "order": 691, + "execute": menu_691, + }, + { + "name": "Menu Item 692", + "order": 692, + "execute": menu_692, + }, + { + "name": "Menu Item 693", + "order": 693, + "execute": menu_693, + }, + { + "name": "Menu Item 694", + "order": 694, + "execute": menu_694, + }, + { + "name": "Menu Item 695", + "order": 695, + "execute": menu_695, + }, + { + "name": "Menu Item 696", + "order": 696, + "execute": menu_696, + }, + { + "name": "Menu Item 697", + "order": 697, + "execute": menu_697, + }, + { + "name": "Menu Item 698", + "order": 698, + "execute": menu_698, + }, + { + "name": "Menu Item 699", + "order": 699, + "execute": menu_699, + } + ] + }, + { + "name": "700 - 799", + "hierarchy": ["Example / Test Menu Items"], + "order": 8, + "actions": [ + { + "name": "Menu Item 700", + "order": 700, + "execute": menu_700, + }, + { + "name": "Menu Item 701", + "order": 701, + "execute": menu_701, + }, + { + "name": "Menu Item 702", + "order": 702, + "execute": menu_702, + }, + { + "name": "Menu Item 703", + "order": 703, + "execute": menu_703, + }, + { + "name": "Menu Item 704", + "order": 704, + "execute": menu_704, + }, + { + "name": "Menu Item 705", + "order": 705, + "execute": menu_705, + }, + { + "name": "Menu Item 706", + "order": 706, + "execute": menu_706, + }, + { + "name": "Menu Item 707", + "order": 707, + "execute": menu_707, + }, + { + "name": "Menu Item 708", + "order": 708, + "execute": menu_708, + }, + { + "name": "Menu Item 709", + "order": 709, + "execute": menu_709, + }, + { + "name": "Menu Item 710", + "order": 710, + "execute": menu_710, + }, + { + "name": "Menu Item 711", + "order": 711, + "execute": menu_711, + }, + { + "name": "Menu Item 712", + "order": 712, + "execute": menu_712, + }, + { + "name": "Menu Item 713", + "order": 713, + "execute": menu_713, + }, + { + "name": "Menu Item 714", + "order": 714, + "execute": menu_714, + }, + { + "name": "Menu Item 715", + "order": 715, + "execute": menu_715, + }, + { + "name": "Menu Item 716", + "order": 716, + "execute": menu_716, + }, + { + "name": "Menu Item 717", + "order": 717, + "execute": menu_717, + }, + { + "name": "Menu Item 718", + "order": 718, + "execute": menu_718, + }, + { + "name": "Menu Item 719", + "order": 719, + "execute": menu_719, + }, + { + "name": "Menu Item 720", + "order": 720, + "execute": menu_720, + }, + { + "name": "Menu Item 721", + "order": 721, + "execute": menu_721, + }, + { + "name": "Menu Item 722", + "order": 722, + "execute": menu_722, + }, + { + "name": "Menu Item 723", + "order": 723, + "execute": menu_723, + }, + { + "name": "Menu Item 724", + "order": 724, + "execute": menu_724, + }, + { + "name": "Menu Item 725", + "order": 725, + "execute": menu_725, + }, + { + "name": "Menu Item 726", + "order": 726, + "execute": menu_726, + }, + { + "name": "Menu Item 727", + "order": 727, + "execute": menu_727, + }, + { + "name": "Menu Item 728", + "order": 728, + "execute": menu_728, + }, + { + "name": "Menu Item 729", + "order": 729, + "execute": menu_729, + }, + { + "name": "Menu Item 730", + "order": 730, + "execute": menu_730, + }, + { + "name": "Menu Item 731", + "order": 731, + "execute": menu_731, + }, + { + "name": "Menu Item 732", + "order": 732, + "execute": menu_732, + }, + { + "name": "Menu Item 733", + "order": 733, + "execute": menu_733, + }, + { + "name": "Menu Item 734", + "order": 734, + "execute": menu_734, + }, + { + "name": "Menu Item 735", + "order": 735, + "execute": menu_735, + }, + { + "name": "Menu Item 736", + "order": 736, + "execute": menu_736, + }, + { + "name": "Menu Item 737", + "order": 737, + "execute": menu_737, + }, + { + "name": "Menu Item 738", + "order": 738, + "execute": menu_738, + }, + { + "name": "Menu Item 739", + "order": 739, + "execute": menu_739, + }, + { + "name": "Menu Item 740", + "order": 740, + "execute": menu_740, + }, + { + "name": "Menu Item 741", + "order": 741, + "execute": menu_741, + }, + { + "name": "Menu Item 742", + "order": 742, + "execute": menu_742, + }, + { + "name": "Menu Item 743", + "order": 743, + "execute": menu_743, + }, + { + "name": "Menu Item 744", + "order": 744, + "execute": menu_744, + }, + { + "name": "Menu Item 745", + "order": 745, + "execute": menu_745, + }, + { + "name": "Menu Item 746", + "order": 746, + "execute": menu_746, + }, + { + "name": "Menu Item 747", + "order": 747, + "execute": menu_747, + }, + { + "name": "Menu Item 748", + "order": 748, + "execute": menu_748, + }, + { + "name": "Menu Item 749", + "order": 749, + "execute": menu_749, + }, + { + "name": "Menu Item 750", + "order": 750, + "execute": menu_750, + }, + { + "name": "Menu Item 751", + "order": 751, + "execute": menu_751, + }, + { + "name": "Menu Item 752", + "order": 752, + "execute": menu_752, + }, + { + "name": "Menu Item 753", + "order": 753, + "execute": menu_753, + }, + { + "name": "Menu Item 754", + "order": 754, + "execute": menu_754, + }, + { + "name": "Menu Item 755", + "order": 755, + "execute": menu_755, + }, + { + "name": "Menu Item 756", + "order": 756, + "execute": menu_756, + }, + { + "name": "Menu Item 757", + "order": 757, + "execute": menu_757, + }, + { + "name": "Menu Item 758", + "order": 758, + "execute": menu_758, + }, + { + "name": "Menu Item 759", + "order": 759, + "execute": menu_759, + }, + { + "name": "Menu Item 760", + "order": 760, + "execute": menu_760, + }, + { + "name": "Menu Item 761", + "order": 761, + "execute": menu_761, + }, + { + "name": "Menu Item 762", + "order": 762, + "execute": menu_762, + }, + { + "name": "Menu Item 763", + "order": 763, + "execute": menu_763, + }, + { + "name": "Menu Item 764", + "order": 764, + "execute": menu_764, + }, + { + "name": "Menu Item 765", + "order": 765, + "execute": menu_765, + }, + { + "name": "Menu Item 766", + "order": 766, + "execute": menu_766, + }, + { + "name": "Menu Item 767", + "order": 767, + "execute": menu_767, + }, + { + "name": "Menu Item 768", + "order": 768, + "execute": menu_768, + }, + { + "name": "Menu Item 769", + "order": 769, + "execute": menu_769, + }, + { + "name": "Menu Item 770", + "order": 770, + "execute": menu_770, + }, + { + "name": "Menu Item 771", + "order": 771, + "execute": menu_771, + }, + { + "name": "Menu Item 772", + "order": 772, + "execute": menu_772, + }, + { + "name": "Menu Item 773", + "order": 773, + "execute": menu_773, + }, + { + "name": "Menu Item 774", + "order": 774, + "execute": menu_774, + }, + { + "name": "Menu Item 775", + "order": 775, + "execute": menu_775, + }, + { + "name": "Menu Item 776", + "order": 776, + "execute": menu_776, + }, + { + "name": "Menu Item 777", + "order": 777, + "execute": menu_777, + }, + { + "name": "Menu Item 778", + "order": 778, + "execute": menu_778, + }, + { + "name": "Menu Item 779", + "order": 779, + "execute": menu_779, + }, + { + "name": "Menu Item 780", + "order": 780, + "execute": menu_780, + }, + { + "name": "Menu Item 781", + "order": 781, + "execute": menu_781, + }, + { + "name": "Menu Item 782", + "order": 782, + "execute": menu_782, + }, + { + "name": "Menu Item 783", + "order": 783, + "execute": menu_783, + }, + { + "name": "Menu Item 784", + "order": 784, + "execute": menu_784, + }, + { + "name": "Menu Item 785", + "order": 785, + "execute": menu_785, + }, + { + "name": "Menu Item 786", + "order": 786, + "execute": menu_786, + }, + { + "name": "Menu Item 787", + "order": 787, + "execute": menu_787, + }, + { + "name": "Menu Item 788", + "order": 788, + "execute": menu_788, + }, + { + "name": "Menu Item 789", + "order": 789, + "execute": menu_789, + }, + { + "name": "Menu Item 790", + "order": 790, + "execute": menu_790, + }, + { + "name": "Menu Item 791", + "order": 791, + "execute": menu_791, + }, + { + "name": "Menu Item 792", + "order": 792, + "execute": menu_792, + }, + { + "name": "Menu Item 793", + "order": 793, + "execute": menu_793, + }, + { + "name": "Menu Item 794", + "order": 794, + "execute": menu_794, + }, + { + "name": "Menu Item 795", + "order": 795, + "execute": menu_795, + }, + { + "name": "Menu Item 796", + "order": 796, + "execute": menu_796, + }, + { + "name": "Menu Item 797", + "order": 797, + "execute": menu_797, + }, + { + "name": "Menu Item 798", + "order": 798, + "execute": menu_798, + }, + { + "name": "Menu Item 799", + "order": 799, + "execute": menu_799, + } + ] + }, + { + "name": "800 - 899", + "hierarchy": ["Example / Test Menu Items"], + "order": 9, + "actions": [ + { + "name": "Menu Item 800", + "order": 800, + "execute": menu_800, + }, + { + "name": "Menu Item 801", + "order": 801, + "execute": menu_801, + }, + { + "name": "Menu Item 802", + "order": 802, + "execute": menu_802, + }, + { + "name": "Menu Item 803", + "order": 803, + "execute": menu_803, + }, + { + "name": "Menu Item 804", + "order": 804, + "execute": menu_804, + }, + { + "name": "Menu Item 805", + "order": 805, + "execute": menu_805, + }, + { + "name": "Menu Item 806", + "order": 806, + "execute": menu_806, + }, + { + "name": "Menu Item 807", + "order": 807, + "execute": menu_807, + }, + { + "name": "Menu Item 808", + "order": 808, + "execute": menu_808, + }, + { + "name": "Menu Item 809", + "order": 809, + "execute": menu_809, + }, + { + "name": "Menu Item 810", + "order": 810, + "execute": menu_810, + }, + { + "name": "Menu Item 811", + "order": 811, + "execute": menu_811, + }, + { + "name": "Menu Item 812", + "order": 812, + "execute": menu_812, + }, + { + "name": "Menu Item 813", + "order": 813, + "execute": menu_813, + }, + { + "name": "Menu Item 814", + "order": 814, + "execute": menu_814, + }, + { + "name": "Menu Item 815", + "order": 815, + "execute": menu_815, + }, + { + "name": "Menu Item 816", + "order": 816, + "execute": menu_816, + }, + { + "name": "Menu Item 817", + "order": 817, + "execute": menu_817, + }, + { + "name": "Menu Item 818", + "order": 818, + "execute": menu_818, + }, + { + "name": "Menu Item 819", + "order": 819, + "execute": menu_819, + }, + { + "name": "Menu Item 820", + "order": 820, + "execute": menu_820, + }, + { + "name": "Menu Item 821", + "order": 821, + "execute": menu_821, + }, + { + "name": "Menu Item 822", + "order": 822, + "execute": menu_822, + }, + { + "name": "Menu Item 823", + "order": 823, + "execute": menu_823, + }, + { + "name": "Menu Item 824", + "order": 824, + "execute": menu_824, + }, + { + "name": "Menu Item 825", + "order": 825, + "execute": menu_825, + }, + { + "name": "Menu Item 826", + "order": 826, + "execute": menu_826, + }, + { + "name": "Menu Item 827", + "order": 827, + "execute": menu_827, + }, + { + "name": "Menu Item 828", + "order": 828, + "execute": menu_828, + }, + { + "name": "Menu Item 829", + "order": 829, + "execute": menu_829, + }, + { + "name": "Menu Item 830", + "order": 830, + "execute": menu_830, + }, + { + "name": "Menu Item 831", + "order": 831, + "execute": menu_831, + }, + { + "name": "Menu Item 832", + "order": 832, + "execute": menu_832, + }, + { + "name": "Menu Item 833", + "order": 833, + "execute": menu_833, + }, + { + "name": "Menu Item 834", + "order": 834, + "execute": menu_834, + }, + { + "name": "Menu Item 835", + "order": 835, + "execute": menu_835, + }, + { + "name": "Menu Item 836", + "order": 836, + "execute": menu_836, + }, + { + "name": "Menu Item 837", + "order": 837, + "execute": menu_837, + }, + { + "name": "Menu Item 838", + "order": 838, + "execute": menu_838, + }, + { + "name": "Menu Item 839", + "order": 839, + "execute": menu_839, + }, + { + "name": "Menu Item 840", + "order": 840, + "execute": menu_840, + }, + { + "name": "Menu Item 841", + "order": 841, + "execute": menu_841, + }, + { + "name": "Menu Item 842", + "order": 842, + "execute": menu_842, + }, + { + "name": "Menu Item 843", + "order": 843, + "execute": menu_843, + }, + { + "name": "Menu Item 844", + "order": 844, + "execute": menu_844, + }, + { + "name": "Menu Item 845", + "order": 845, + "execute": menu_845, + }, + { + "name": "Menu Item 846", + "order": 846, + "execute": menu_846, + }, + { + "name": "Menu Item 847", + "order": 847, + "execute": menu_847, + }, + { + "name": "Menu Item 848", + "order": 848, + "execute": menu_848, + }, + { + "name": "Menu Item 849", + "order": 849, + "execute": menu_849, + }, + { + "name": "Menu Item 850", + "order": 850, + "execute": menu_850, + }, + { + "name": "Menu Item 851", + "order": 851, + "execute": menu_851, + }, + { + "name": "Menu Item 852", + "order": 852, + "execute": menu_852, + }, + { + "name": "Menu Item 853", + "order": 853, + "execute": menu_853, + }, + { + "name": "Menu Item 854", + "order": 854, + "execute": menu_854, + }, + { + "name": "Menu Item 855", + "order": 855, + "execute": menu_855, + }, + { + "name": "Menu Item 856", + "order": 856, + "execute": menu_856, + }, + { + "name": "Menu Item 857", + "order": 857, + "execute": menu_857, + }, + { + "name": "Menu Item 858", + "order": 858, + "execute": menu_858, + }, + { + "name": "Menu Item 859", + "order": 859, + "execute": menu_859, + }, + { + "name": "Menu Item 860", + "order": 860, + "execute": menu_860, + }, + { + "name": "Menu Item 861", + "order": 861, + "execute": menu_861, + }, + { + "name": "Menu Item 862", + "order": 862, + "execute": menu_862, + }, + { + "name": "Menu Item 863", + "order": 863, + "execute": menu_863, + }, + { + "name": "Menu Item 864", + "order": 864, + "execute": menu_864, + }, + { + "name": "Menu Item 865", + "order": 865, + "execute": menu_865, + }, + { + "name": "Menu Item 866", + "order": 866, + "execute": menu_866, + }, + { + "name": "Menu Item 867", + "order": 867, + "execute": menu_867, + }, + { + "name": "Menu Item 868", + "order": 868, + "execute": menu_868, + }, + { + "name": "Menu Item 869", + "order": 869, + "execute": menu_869, + }, + { + "name": "Menu Item 870", + "order": 870, + "execute": menu_870, + }, + { + "name": "Menu Item 871", + "order": 871, + "execute": menu_871, + }, + { + "name": "Menu Item 872", + "order": 872, + "execute": menu_872, + }, + { + "name": "Menu Item 873", + "order": 873, + "execute": menu_873, + }, + { + "name": "Menu Item 874", + "order": 874, + "execute": menu_874, + }, + { + "name": "Menu Item 875", + "order": 875, + "execute": menu_875, + }, + { + "name": "Menu Item 876", + "order": 876, + "execute": menu_876, + }, + { + "name": "Menu Item 877", + "order": 877, + "execute": menu_877, + }, + { + "name": "Menu Item 878", + "order": 878, + "execute": menu_878, + }, + { + "name": "Menu Item 879", + "order": 879, + "execute": menu_879, + }, + { + "name": "Menu Item 880", + "order": 880, + "execute": menu_880, + }, + { + "name": "Menu Item 881", + "order": 881, + "execute": menu_881, + }, + { + "name": "Menu Item 882", + "order": 882, + "execute": menu_882, + }, + { + "name": "Menu Item 883", + "order": 883, + "execute": menu_883, + }, + { + "name": "Menu Item 884", + "order": 884, + "execute": menu_884, + }, + { + "name": "Menu Item 885", + "order": 885, + "execute": menu_885, + }, + { + "name": "Menu Item 886", + "order": 886, + "execute": menu_886, + }, + { + "name": "Menu Item 887", + "order": 887, + "execute": menu_887, + }, + { + "name": "Menu Item 888", + "order": 888, + "execute": menu_888, + }, + { + "name": "Menu Item 889", + "order": 889, + "execute": menu_889, + }, + { + "name": "Menu Item 890", + "order": 890, + "execute": menu_890, + }, + { + "name": "Menu Item 891", + "order": 891, + "execute": menu_891, + }, + { + "name": "Menu Item 892", + "order": 892, + "execute": menu_892, + }, + { + "name": "Menu Item 893", + "order": 893, + "execute": menu_893, + }, + { + "name": "Menu Item 894", + "order": 894, + "execute": menu_894, + }, + { + "name": "Menu Item 895", + "order": 895, + "execute": menu_895, + }, + { + "name": "Menu Item 896", + "order": 896, + "execute": menu_896, + }, + { + "name": "Menu Item 897", + "order": 897, + "execute": menu_897, + }, + { + "name": "Menu Item 898", + "order": 898, + "execute": menu_898, + }, + { + "name": "Menu Item 899", + "order": 899, + "execute": menu_899, + } + ] + }, + { + "name": "900 - 999", + "hierarchy": ["Example / Test Menu Items"], + "order": 10, + "actions": [ + { + "name": "Menu Item 900", + "order": 900, + "execute": menu_900, + }, + { + "name": "Menu Item 901", + "order": 901, + "execute": menu_901, + }, + { + "name": "Menu Item 902", + "order": 902, + "execute": menu_902, + }, + { + "name": "Menu Item 903", + "order": 903, + "execute": menu_903, + }, + { + "name": "Menu Item 904", + "order": 904, + "execute": menu_904, + }, + { + "name": "Menu Item 905", + "order": 905, + "execute": menu_905, + }, + { + "name": "Menu Item 906", + "order": 906, + "execute": menu_906, + }, + { + "name": "Menu Item 907", + "order": 907, + "execute": menu_907, + }, + { + "name": "Menu Item 908", + "order": 908, + "execute": menu_908, + }, + { + "name": "Menu Item 909", + "order": 909, + "execute": menu_909, + }, + { + "name": "Menu Item 910", + "order": 910, + "execute": menu_910, + }, + { + "name": "Menu Item 911", + "order": 911, + "execute": menu_911, + }, + { + "name": "Menu Item 912", + "order": 912, + "execute": menu_912, + }, + { + "name": "Menu Item 913", + "order": 913, + "execute": menu_913, + }, + { + "name": "Menu Item 914", + "order": 914, + "execute": menu_914, + }, + { + "name": "Menu Item 915", + "order": 915, + "execute": menu_915, + }, + { + "name": "Menu Item 916", + "order": 916, + "execute": menu_916, + }, + { + "name": "Menu Item 917", + "order": 917, + "execute": menu_917, + }, + { + "name": "Menu Item 918", + "order": 918, + "execute": menu_918, + }, + { + "name": "Menu Item 919", + "order": 919, + "execute": menu_919, + }, + { + "name": "Menu Item 920", + "order": 920, + "execute": menu_920, + }, + { + "name": "Menu Item 921", + "order": 921, + "execute": menu_921, + }, + { + "name": "Menu Item 922", + "order": 922, + "execute": menu_922, + }, + { + "name": "Menu Item 923", + "order": 923, + "execute": menu_923, + }, + { + "name": "Menu Item 924", + "order": 924, + "execute": menu_924, + }, + { + "name": "Menu Item 925", + "order": 925, + "execute": menu_925, + }, + { + "name": "Menu Item 926", + "order": 926, + "execute": menu_926, + }, + { + "name": "Menu Item 927", + "order": 927, + "execute": menu_927, + }, + { + "name": "Menu Item 928", + "order": 928, + "execute": menu_928, + }, + { + "name": "Menu Item 929", + "order": 929, + "execute": menu_929, + }, + { + "name": "Menu Item 930", + "order": 930, + "execute": menu_930, + }, + { + "name": "Menu Item 931", + "order": 931, + "execute": menu_931, + }, + { + "name": "Menu Item 932", + "order": 932, + "execute": menu_932, + }, + { + "name": "Menu Item 933", + "order": 933, + "execute": menu_933, + }, + { + "name": "Menu Item 934", + "order": 934, + "execute": menu_934, + }, + { + "name": "Menu Item 935", + "order": 935, + "execute": menu_935, + }, + { + "name": "Menu Item 936", + "order": 936, + "execute": menu_936, + }, + { + "name": "Menu Item 937", + "order": 937, + "execute": menu_937, + }, + { + "name": "Menu Item 938", + "order": 938, + "execute": menu_938, + }, + { + "name": "Menu Item 939", + "order": 939, + "execute": menu_939, + }, + { + "name": "Menu Item 940", + "order": 940, + "execute": menu_940, + }, + { + "name": "Menu Item 941", + "order": 941, + "execute": menu_941, + }, + { + "name": "Menu Item 942", + "order": 942, + "execute": menu_942, + }, + { + "name": "Menu Item 943", + "order": 943, + "execute": menu_943, + }, + { + "name": "Menu Item 944", + "order": 944, + "execute": menu_944, + }, + { + "name": "Menu Item 945", + "order": 945, + "execute": menu_945, + }, + { + "name": "Menu Item 946", + "order": 946, + "execute": menu_946, + }, + { + "name": "Menu Item 947", + "order": 947, + "execute": menu_947, + }, + { + "name": "Menu Item 948", + "order": 948, + "execute": menu_948, + }, + { + "name": "Menu Item 949", + "order": 949, + "execute": menu_949, + }, + { + "name": "Menu Item 950", + "order": 950, + "execute": menu_950, + }, + { + "name": "Menu Item 951", + "order": 951, + "execute": menu_951, + }, + { + "name": "Menu Item 952", + "order": 952, + "execute": menu_952, + }, + { + "name": "Menu Item 953", + "order": 953, + "execute": menu_953, + }, + { + "name": "Menu Item 954", + "order": 954, + "execute": menu_954, + }, + { + "name": "Menu Item 955", + "order": 955, + "execute": menu_955, + }, + { + "name": "Menu Item 956", + "order": 956, + "execute": menu_956, + }, + { + "name": "Menu Item 957", + "order": 957, + "execute": menu_957, + }, + { + "name": "Menu Item 958", + "order": 958, + "execute": menu_958, + }, + { + "name": "Menu Item 959", + "order": 959, + "execute": menu_959, + }, + { + "name": "Menu Item 960", + "order": 960, + "execute": menu_960, + }, + { + "name": "Menu Item 961", + "order": 961, + "execute": menu_961, + }, + { + "name": "Menu Item 962", + "order": 962, + "execute": menu_962, + }, + { + "name": "Menu Item 963", + "order": 963, + "execute": menu_963, + }, + { + "name": "Menu Item 964", + "order": 964, + "execute": menu_964, + }, + { + "name": "Menu Item 965", + "order": 965, + "execute": menu_965, + }, + { + "name": "Menu Item 966", + "order": 966, + "execute": menu_966, + }, + { + "name": "Menu Item 967", + "order": 967, + "execute": menu_967, + }, + { + "name": "Menu Item 968", + "order": 968, + "execute": menu_968, + }, + { + "name": "Menu Item 969", + "order": 969, + "execute": menu_969, + }, + { + "name": "Menu Item 970", + "order": 970, + "execute": menu_970, + }, + { + "name": "Menu Item 971", + "order": 971, + "execute": menu_971, + }, + { + "name": "Menu Item 972", + "order": 972, + "execute": menu_972, + }, + { + "name": "Menu Item 973", + "order": 973, + "execute": menu_973, + }, + { + "name": "Menu Item 974", + "order": 974, + "execute": menu_974, + }, + { + "name": "Menu Item 975", + "order": 975, + "execute": menu_975, + }, + { + "name": "Menu Item 976", + "order": 976, + "execute": menu_976, + }, + { + "name": "Menu Item 977", + "order": 977, + "execute": menu_977, + }, + { + "name": "Menu Item 978", + "order": 978, + "execute": menu_978, + }, + { + "name": "Menu Item 979", + "order": 979, + "execute": menu_979, + }, + { + "name": "Menu Item 980", + "order": 980, + "execute": menu_980, + }, + { + "name": "Menu Item 981", + "order": 981, + "execute": menu_981, + }, + { + "name": "Menu Item 982", + "order": 982, + "execute": menu_982, + }, + { + "name": "Menu Item 983", + "order": 983, + "execute": menu_983, + }, + { + "name": "Menu Item 984", + "order": 984, + "execute": menu_984, + }, + { + "name": "Menu Item 985", + "order": 985, + "execute": menu_985, + }, + { + "name": "Menu Item 986", + "order": 986, + "execute": menu_986, + }, + { + "name": "Menu Item 987", + "order": 987, + "execute": menu_987, + }, + { + "name": "Menu Item 988", + "order": 988, + "execute": menu_988, + }, + { + "name": "Menu Item 989", + "order": 989, + "execute": menu_989, + }, + { + "name": "Menu Item 990", + "order": 990, + "execute": menu_990, + }, + { + "name": "Menu Item 991", + "order": 991, + "execute": menu_991, + }, + { + "name": "Menu Item 992", + "order": 992, + "execute": menu_992, + }, + { + "name": "Menu Item 993", + "order": 993, + "execute": menu_993, + }, + { + "name": "Menu Item 994", + "order": 994, + "execute": menu_994, + }, + { + "name": "Menu Item 995", + "order": 995, + "execute": menu_995, + }, + { + "name": "Menu Item 996", + "order": 996, + "execute": menu_996, + }, + { + "name": "Menu Item 997", + "order": 997, + "execute": menu_997, + }, + { + "name": "Menu Item 998", + "order": 998, + "execute": menu_998, + }, + { + "name": "Menu Item 999", + "order": 999, + "execute": menu_999, + } + ] + } + ] diff --git a/menu_tests/generate_static_actions.py b/menu_tests/generate_static_actions.py new file mode 100644 index 0000000..62c407a --- /dev/null +++ b/menu_tests/generate_static_actions.py @@ -0,0 +1,6 @@ +for i in range(1, 1000): + text = '{\n' + ' '*4 + '"name": "Menu Item ' + str(i).zfill(3) + '",\n' + text += ' '*4 + '"order": ' + str(i) + ',\n' + text += ' '*4 + '"execute": menu_' + str(i).zfill(3) + ',\n' + text += '},' + print (text) \ No newline at end of file diff --git a/menu_tests/generate_static_functions.py b/menu_tests/generate_static_functions.py new file mode 100644 index 0000000..af88c62 --- /dev/null +++ b/menu_tests/generate_static_functions.py @@ -0,0 +1,3 @@ +for i in range(1, 1000): + text = 'def menu_' + str(i).zfill(3) + '(selection):\n' + ' '*4 + 'message("Menu Item ' + str(i).zfill(3) + '")\n' + print (text) \ No newline at end of file From bc80493e04f0b55a15b9ffbe40c09ad0dea3c32b Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 16:27:05 +0100 Subject: [PATCH 07/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 505d8fa..f54e269 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -13,8 +13,7 @@ import inspect import re import traceback -from pprint import pprint -from pprint import pformat +from pprint import pprint, pformat __version__ = 'v0.0.4 dev 002' @@ -2992,7 +2991,6 @@ def __init__(self, framework, connector): def __getattr__(self, name): def method(*args, **kwargs): - pprint (name) entity = self.dynamic_menu_data.get(name) if entity: self.create_new_batch(entity) @@ -3024,6 +3022,8 @@ def build_menu(self): if not self.flame: return [] + total_menu_itmes = 0 + batch_groups = [] for batch_group in self.flame.project.current_project.current_workspace.desktop.batch_groups: batch_groups.append(batch_group.name.get_value()) @@ -3211,6 +3211,7 @@ def build_menu_body(menu, found_entities, menu_item_order = 1): build_menu_body (menu, entities_with_no_episode, menu_item_order=menu_item_order) menu_item_order = len(menu['actions']) + total_menu_itmes = menu_item_order # for action in menu['actions']: # action['isVisible'] = self.scope_desktop @@ -3225,8 +3226,10 @@ def build_menu_body(menu, found_entities, menu_item_order = 1): menu_episode['actions'] = [] menu_episode['hierarchy'] = [menu['name']] build_menu_body(menu_episode, found_entity_episodes.get(episode_name)) + total_menu_itmes += len(menu_episode['actions']) menu_combined.append(menu_episode) + pprint (total_menu_itmes) return menu_combined def get_entities(self, user_only = True, filter_out=[]): From 4f349d547cdcfb684390aba372bb98147af1339e Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 16:56:36 +0100 Subject: [PATCH 08/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 1 + 1 file changed, 1 insertion(+) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index f54e269..34ba68f 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -2991,6 +2991,7 @@ def __init__(self, framework, connector): def __getattr__(self, name): def method(*args, **kwargs): + pprint (name) entity = self.dynamic_menu_data.get(name) if entity: self.create_new_batch(entity) From a6b8bfec20d5c3e8391f31dc2d35363142ffce65 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 17:09:41 +0100 Subject: [PATCH 09/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 34ba68f..2aa003b 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -2991,7 +2991,8 @@ def __init__(self, framework, connector): def __getattr__(self, name): def method(*args, **kwargs): - pprint (name) + if str(name).startswith('pg_fwd'): + self.page_fwd(menu_name = name.replace('pg_fwd ', '')) entity = self.dynamic_menu_data.get(name) if entity: self.create_new_batch(entity) @@ -3922,7 +3923,11 @@ def flip_assigned(self, *args, **kwargs): # self.rescan() def page_fwd(self, *args, **kwargs): - self.prefs['current_page'] += 1 + pprint (kwargs) + if kwargs.get('menu_name'): + self.prefs['current_page_' + kwargs.get('menu_name')] += 1 + else: + self.prefs['current_page'] += 1 def page_bkw(self, *args, **kwargs): self.prefs['current_page'] = max(self.prefs['current_page'] - 1, 0) From 6a9356d7a6bd0acc40f7f497a944d4b57a98e052 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 17:14:26 +0100 Subject: [PATCH 10/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 2aa003b..24e81bb 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -3925,7 +3925,10 @@ def flip_assigned(self, *args, **kwargs): def page_fwd(self, *args, **kwargs): pprint (kwargs) if kwargs.get('menu_name'): - self.prefs['current_page_' + kwargs.get('menu_name')] += 1 + if not self.prefs.get('current_page_' + kwargs.get('menu_name'): + self.prefs['current_page_' + kwargs.get('menu_name')] = 1 + else: + self.prefs['current_page_' + kwargs.get('menu_name')] += 1 else: self.prefs['current_page'] += 1 From cbf4103bf0667396535a627c361d88c04cd6bba9 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 17:15:52 +0100 Subject: [PATCH 11/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 24e81bb..2872852 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -3925,7 +3925,7 @@ def flip_assigned(self, *args, **kwargs): def page_fwd(self, *args, **kwargs): pprint (kwargs) if kwargs.get('menu_name'): - if not self.prefs.get('current_page_' + kwargs.get('menu_name'): + if not self.prefs.get('current_page_' + kwargs.get('menu_name')): self.prefs['current_page_' + kwargs.get('menu_name')] = 1 else: self.prefs['current_page_' + kwargs.get('menu_name')] += 1 From aace88c5bf26ef868fcfcdc4f0750c987b05b5dc Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 17:25:58 +0100 Subject: [PATCH 12/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 2872852..7a4b701 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -2991,8 +2991,12 @@ def __init__(self, framework, connector): def __getattr__(self, name): def method(*args, **kwargs): + if str(name).startswith('pg_fwd'): self.page_fwd(menu_name = name.replace('pg_fwd ', '')) + if str(name).startswith('pg_bkw'): + self.page_bkw(menu_name = name.replace('pg_bkw ', '')) + entity = self.dynamic_menu_data.get(name) if entity: self.create_new_batch(entity) @@ -3174,6 +3178,7 @@ def build_menu_body(menu, found_entities, menu_item_order = 1): else: # round up number of pages and get current page num_of_pages = ((menu_lenght) + max_menu_lenght - 1) // max_menu_lenght + pprint (menu.get('name')) curr_page = self.prefs.get('current_page', 0) # decorate top with move backward control @@ -3181,7 +3186,7 @@ def build_menu_body(menu, found_entities, menu_item_order = 1): if curr_page > 0: menu_item = {} menu_item['name'] = '<<[ prev page ' + str(curr_page) + ' of ' + str(num_of_pages) + ' ]' - menu_item['execute'] = self.page_bkw + menu_item['execute'] = getattr(self, 'pg_bkw ' + str(menu.get('name'))) menu_item['order'] = menu_item_order menu_item_order += 1 menu['actions'].append(menu_item) @@ -3923,7 +3928,6 @@ def flip_assigned(self, *args, **kwargs): # self.rescan() def page_fwd(self, *args, **kwargs): - pprint (kwargs) if kwargs.get('menu_name'): if not self.prefs.get('current_page_' + kwargs.get('menu_name')): self.prefs['current_page_' + kwargs.get('menu_name')] = 1 @@ -3933,6 +3937,11 @@ def page_fwd(self, *args, **kwargs): self.prefs['current_page'] += 1 def page_bkw(self, *args, **kwargs): + if kwargs.get('menu_name'): + if not self.prefs.get('current_page_' + kwargs.get('menu_name')): + self.prefs['current_page_' + kwargs.get('menu_name')] = 0 + else: + self.prefs['current_page_' + kwargs.get('menu_name')] += max(self.prefs['current_page_' + kwargs.get('menu_name')], -1, 0) self.prefs['current_page'] = max(self.prefs['current_page'] - 1, 0) def rescan(self, *args, **kwargs): From 3a304866f93be9fcade726f7e16b8a1829ae6f1b Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 17:29:48 +0100 Subject: [PATCH 13/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 7a4b701..164c9f9 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -3178,8 +3178,7 @@ def build_menu_body(menu, found_entities, menu_item_order = 1): else: # round up number of pages and get current page num_of_pages = ((menu_lenght) + max_menu_lenght - 1) // max_menu_lenght - pprint (menu.get('name')) - curr_page = self.prefs.get('current_page', 0) + curr_page = self.prefs.get('current_page_' + menu.get('name'), 0) # decorate top with move backward control # if we're not on the first page @@ -3925,6 +3924,7 @@ def scope_desktop(self, selection): def flip_assigned(self, *args, **kwargs): self.prefs['show_all'] = not self.prefs['show_all'] + self.framework.save_prefs() # self.rescan() def page_fwd(self, *args, **kwargs): From b69c90c89ec36dfb8db7a74cf03c16ef6219bb47 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 17:32:46 +0100 Subject: [PATCH 14/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 164c9f9..169e18d 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -3941,7 +3941,7 @@ def page_bkw(self, *args, **kwargs): if not self.prefs.get('current_page_' + kwargs.get('menu_name')): self.prefs['current_page_' + kwargs.get('menu_name')] = 0 else: - self.prefs['current_page_' + kwargs.get('menu_name')] += max(self.prefs['current_page_' + kwargs.get('menu_name')], -1, 0) + self.prefs['current_page_' + kwargs.get('menu_name')] += max(self.prefs['current_page_' + kwargs.get('menu_name')] -1, 0) self.prefs['current_page'] = max(self.prefs['current_page'] - 1, 0) def rescan(self, *args, **kwargs): From a71c5df7c8bc025f3adac060b5ab0aa514f066c5 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 17:35:08 +0100 Subject: [PATCH 15/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 169e18d..9bab126 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -3935,6 +3935,7 @@ def page_fwd(self, *args, **kwargs): self.prefs['current_page_' + kwargs.get('menu_name')] += 1 else: self.prefs['current_page'] += 1 + self.framework.save_prefs() def page_bkw(self, *args, **kwargs): if kwargs.get('menu_name'): @@ -3942,7 +3943,9 @@ def page_bkw(self, *args, **kwargs): self.prefs['current_page_' + kwargs.get('menu_name')] = 0 else: self.prefs['current_page_' + kwargs.get('menu_name')] += max(self.prefs['current_page_' + kwargs.get('menu_name')] -1, 0) - self.prefs['current_page'] = max(self.prefs['current_page'] - 1, 0) + else: + self.prefs['current_page'] = max(self.prefs['current_page'] - 1, 0) + self.framework.save_prefs() def rescan(self, *args, **kwargs): if not self.flame: From bd8f76806ac56d8c48755272f5d1f27365ae5a70 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 17:38:39 +0100 Subject: [PATCH 16/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 9bab126..3a9d396 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -3938,10 +3938,13 @@ def page_fwd(self, *args, **kwargs): self.framework.save_prefs() def page_bkw(self, *args, **kwargs): + pprint (kwargs) + pprint (self.prefs.get('current_page_' + kwargs.get('menu_name'))) if kwargs.get('menu_name'): if not self.prefs.get('current_page_' + kwargs.get('menu_name')): self.prefs['current_page_' + kwargs.get('menu_name')] = 0 else: + pprint (max(self.prefs['current_page_' + kwargs.get('menu_name')] -1, 0)) self.prefs['current_page_' + kwargs.get('menu_name')] += max(self.prefs['current_page_' + kwargs.get('menu_name')] -1, 0) else: self.prefs['current_page'] = max(self.prefs['current_page'] - 1, 0) From 7a92e2b5590d207238e117ed9d79c1dea8f2c198 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 17:40:06 +0100 Subject: [PATCH 17/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 3a9d396..2d340e0 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -3179,6 +3179,8 @@ def build_menu_body(menu, found_entities, menu_item_order = 1): # round up number of pages and get current page num_of_pages = ((menu_lenght) + max_menu_lenght - 1) // max_menu_lenght curr_page = self.prefs.get('current_page_' + menu.get('name'), 0) + if curr_page > num_of_pages: + curr_page = num_of_pages # decorate top with move backward control # if we're not on the first page From cae2a1811055a280ac5aac983bd19722ee4485c7 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 17:42:02 +0100 Subject: [PATCH 18/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 2d340e0..04dcdc5 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -3947,7 +3947,7 @@ def page_bkw(self, *args, **kwargs): self.prefs['current_page_' + kwargs.get('menu_name')] = 0 else: pprint (max(self.prefs['current_page_' + kwargs.get('menu_name')] -1, 0)) - self.prefs['current_page_' + kwargs.get('menu_name')] += max(self.prefs['current_page_' + kwargs.get('menu_name')] -1, 0) + self.prefs['current_page_' + kwargs.get('menu_name')] = max(self.prefs['current_page_' + kwargs.get('menu_name')] -1, 0) else: self.prefs['current_page'] = max(self.prefs['current_page'] - 1, 0) self.framework.save_prefs() From 83bb0dc108d25e5c3b99f169ed0a8b70f47c1491 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 18:09:00 +0100 Subject: [PATCH 19/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 70 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 62 insertions(+), 8 deletions(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 04dcdc5..e4f9af6 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -1166,7 +1166,7 @@ def project_tasks_for_person(): for x in all_tasks_for_person: if x.get('project_id') == self.linked_project_id: project_tasks_for_person.append(x) - self.pipeline_data['project_tasks_for_person'] = project_tasks_for_person + self.pipeline_data['project_tasks_for_person'] = list[project_tasks_for_person] for task in project_tasks_for_person: self.pipeline_data['entitiy_keys'].add((task.get('entity_type_name'), task.get('entity_id'))) except Exception as e: @@ -1207,6 +1207,7 @@ def all_assets_for_project(): try: assets_with_modified_code = [] all_assets_for_project = self.gazu.asset.all_assets_for_project(current_project, client=current_client) + for asset in all_assets_for_project: asset['code'] = asset['name'] if self.shot_code_field: @@ -1216,6 +1217,34 @@ def all_assets_for_project(): if code: asset['code'] = code assets_with_modified_code.append(asset) + + episodes = self.connector.pipeline_data.get('all_episodes_for_project') + episodes_by_id = {x.get('id'):x for x in episodes} + episode_id_by_entity_id = {} + for episode in episodes: + episode_id = episode.get('id') + if not episode_id: + continue + episode_assets_by_id = episode.get('assets_by_id') + if not episode_assets_by_id: + episode_assets_by_id = {} + for asset_id in episode_assets_by_id.keys(): + episode_id_by_entity_id[asset_id] = episode_id + episode_shots_by_id = episode.get('shots_by_id') + if not episode_shots_by_id: + episode_shots_by_id = {} + for shot_id in episode_shots_by_id.keys(): + episode_id_by_entity_id[shot_id] = episode_id + for asset in assets_with_modified_code: + asset_episode_id = episode_id_by_entity_id.get(asset.get('id')) + asset_episode_name = None + if asset_episode_id: + asset_episode = episodes_by_id.get(asset_episode_id) + if asset_episode: + asset_episode_name = asset_episode.get('name') + asset['episode_id'] = asset_episode_id + asset['episode_name'] = asset_episode_name + self.pipeline_data['all_assets_for_project'] = list(assets_with_modified_code) for entity in assets_with_modified_code: @@ -1237,6 +1266,35 @@ def all_shots_for_project(): if code: shot['code'] = code shots_with_modified_code.append(shot) + + episodes = self.connector.pipeline_data.get('all_episodes_for_project') + episodes_by_id = {x.get('id'):x for x in episodes} + episode_id_by_entity_id = {} + for episode in episodes: + episode_id = episode.get('id') + if not episode_id: + continue + episode_assets_by_id = episode.get('assets_by_id') + if not episode_assets_by_id: + episode_assets_by_id = {} + for asset_id in episode_assets_by_id.keys(): + episode_id_by_entity_id[asset_id] = episode_id + episode_shots_by_id = episode.get('shots_by_id') + if not episode_shots_by_id: + episode_shots_by_id = {} + for shot_id in episode_shots_by_id.keys(): + episode_id_by_entity_id[shot_id] = episode_id + + for shot in shots_with_modified_code: + shot_episode_id = episode_id_by_entity_id.get(shot.get('id')) + shot_episode_name = None + if shot_episode_id: + shot_episode = episodes_by_id.get(shot_episode_id) + if shot_episode: + shot_episode_name = shot_episode.get('name') + shot['episode_id'] = shot_episode_id + shot['episode_name'] = shot_episode_name + self.pipeline_data['all_shots_for_project'] = list(shots_with_modified_code) for entity in shots_with_modified_code: self.pipeline_data['entitiy_keys'].add((entity.get('type'), entity.get('id'))) @@ -1247,7 +1305,7 @@ def all_shots_for_project(): def all_sequences_for_project(): try: all_sequences_for_project = self.gazu.shot.all_sequences_for_project(current_project, client=current_client) - self.pipeline_data['all_sequences_for_project'] = all_sequences_for_project + self.pipeline_data['all_sequences_for_project'] = list(all_sequences_for_project) for entity in all_sequences_for_project: self.pipeline_data['entitiy_keys'].add((entity.get('type'), entity.get('id'))) self.pipeline_data['entity_by_id'][entity.get('id')] = entity @@ -1257,14 +1315,14 @@ def all_sequences_for_project(): def all_task_types_for_project(): try: all_task_types_for_project = self.connector.gazu.task.all_task_types_for_project(current_project, client=current_client) - self.pipeline_data['all_task_types_for_project'] = all_task_types_for_project + self.pipeline_data['all_task_types_for_project'] = list(all_task_types_for_project) except Exception as e: self.log(pformat(e)) def all_task_statuses_for_project(): try: all_task_types_for_project = self.connector.gazu.task.all_task_statuses_for_project(current_project, client=current_client) - self.pipeline_data['all_task_statuses_for_project'] = all_task_types_for_project + self.pipeline_data['all_task_statuses_for_project'] = list(all_task_types_for_project) except Exception as e: self.log(pformat(e)) @@ -3237,7 +3295,6 @@ def build_menu_body(menu, found_entities, menu_item_order = 1): total_menu_itmes += len(menu_episode['actions']) menu_combined.append(menu_episode) - pprint (total_menu_itmes) return menu_combined def get_entities(self, user_only = True, filter_out=[]): @@ -3940,13 +3997,10 @@ def page_fwd(self, *args, **kwargs): self.framework.save_prefs() def page_bkw(self, *args, **kwargs): - pprint (kwargs) - pprint (self.prefs.get('current_page_' + kwargs.get('menu_name'))) if kwargs.get('menu_name'): if not self.prefs.get('current_page_' + kwargs.get('menu_name')): self.prefs['current_page_' + kwargs.get('menu_name')] = 0 else: - pprint (max(self.prefs['current_page_' + kwargs.get('menu_name')] -1, 0)) self.prefs['current_page_' + kwargs.get('menu_name')] = max(self.prefs['current_page_' + kwargs.get('menu_name')] -1, 0) else: self.prefs['current_page'] = max(self.prefs['current_page'] - 1, 0) From 9227ace56b9ffacb734a2952162685d273f08a9b Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 18:17:33 +0100 Subject: [PATCH 20/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 188 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index e4f9af6..21ef6d5 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -3295,8 +3295,196 @@ def build_menu_body(menu, found_entities, menu_item_order = 1): total_menu_itmes += len(menu_episode['actions']) menu_combined.append(menu_episode) + if total_menu_itmes > self.prefs.get('menu_max_items_per_page'): + return self.build_menu_classic() + return menu_combined + def build_menu_classic(self): + ''' + # --------------------------------- + # menu build time debug code + + number_of_menu_itmes = 256 + menu = {'name': self.name, 'actions': []} + for i in xrange(1, number_of_menu_itmes+1): + menu['actions'].append({ + 'name': 'Test selection ' + str(i), + # 'isVisible': self.scope_reel, + 'execute': getattr(self, 'menu_item_' + str(i)) + }) + return menu + + # --------------------------------- + # menu build time debug code + ''' + + if not self.connector.user: + return [] + if not self.connector.linked_project_id: + return [] + if not self.flame: + return [] + + batch_groups = [] + for batch_group in self.flame.project.current_project.current_workspace.desktop.batch_groups: + batch_groups.append(batch_group.name.get_value()) + + menu = {'actions': []} + menu['name'] = self.menu_group_name + ' Create new batch:' + menu_item_order = 0 + + menu_item = {} + menu_item['name'] = '~ Rescan' + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu_item['execute'] = self.rescan + menu['actions'].append(menu_item) + + menu_item = {} + if self.prefs['show_all']: + menu_item['name'] = '~ Show Assigned Only' + else: + menu_item['name'] = '~ Show All Avaliable' + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu_item['separator'] = 'below' + menu_item['execute'] = self.flip_assigned + menu['actions'].append(menu_item) + + # found entities menu + + user_only = not self.prefs['show_all'] + filter_out = ['Project', 'Sequence'] + found_entities = self.get_entities(user_only, filter_out) + menu_main_body = [] + + if not found_entities: + menu_item = {} + menu_item['name'] = '- [ Assets ] [+]' + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu_item['separator'] = 'above' + menu_item['execute'] = self.create_asset_dialog + menu_item['waitCursor'] = False + menu_main_body.append(menu_item) + + menu_item = {} + menu_item['name'] = '- [ Shots ] [+]' + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu_item['execute'] = self.create_shot_dialog + menu_item['waitCursor'] = False + menu_main_body.append(menu_item) + + if len(found_entities.keys()) == 1: + if 'Shot' in found_entities.keys(): + menu_item = {} + menu_item['name'] = '- [ Assets ] [+]' + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu_item['separator'] = 'above' + menu_item['execute'] = self.create_asset_dialog + menu_item['waitCursor'] = False + menu_main_body.append(menu_item) + + menu_ctrls_len = len(menu) + menu_lenght = menu_ctrls_len + menu_lenght += len(found_entities.keys()) + for entity_type in found_entities.keys(): + menu_lenght += len(found_entities.get(entity_type)) + max_menu_lenght = self.prefs.get('menu_max_items_per_page') + + for index, entity_type in enumerate(sorted(found_entities.keys())): + menu_item = {} + menu_item['name'] = '- [ ' + entity_type + 's ] [+]' + if entity_type == 'Asset': + menu_item['execute'] = self.create_asset_dialog + elif entity_type == 'Shot': + menu_item['execute'] = self.create_shot_dialog + else: + menu_item['execute'] = self.rescan + menu_item['waitCursor'] = False + menu_main_body.append(menu_item) + + entities_by_name = {} + for entity in found_entities[entity_type]: + entities_by_name[entity.get('code')] = entity + for entity_name in sorted(entities_by_name.keys()): + entity = entities_by_name.get(entity_name) + menu_item = {} + episode_name = entity.get('episode_name', '') + + if entity.get('code') in batch_groups: + menu_item['name'] = ' * ' + episode_name + ': ' + entity.get('code') + else: + menu_item['name'] = ' ' + episode_name + ': ' + entity.get('code') + + self.dynamic_menu_data[str(id(entity))] = entity + menu_item['execute'] = getattr(self, str(id(entity))) + menu_main_body.append(menu_item) + + if len(found_entities.keys()) == 1: + if 'Asset' in found_entities.keys(): + menu_item = {} + menu_item['name'] = '- [ Shots ] [+]' + menu_item['execute'] = self.create_shot_dialog + menu_item['waitCursor'] = False + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu_main_body.append(menu_item) + + if menu_lenght < max_menu_lenght: + # controls and entites fits within menu size + # we do not need additional page switch controls + for menu_item in menu_main_body: + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu['actions'].append(menu_item) + + else: + # round up number of pages and get current page + num_of_pages = ((menu_lenght) + max_menu_lenght - 1) // max_menu_lenght + curr_page = self.prefs.get('current_page') + + # decorate top with move backward control + # if we're not on the first page + if curr_page > 0: + menu_item = {} + menu_item['name'] = '<<[ prev page ' + str(curr_page) + ' of ' + str(num_of_pages) + ' ]' + menu_item['execute'] = self.page_bkw + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu['actions'].append(menu_item) + + # calculate the start and end position of a window + # and append items to the list + menu_used_space = menu_ctrls_len + 2 # two more controls for page flip + window_size = max_menu_lenght - menu_used_space + start_index = window_size*curr_page + min(1*curr_page, 1) + end_index = window_size*curr_page+window_size + ((curr_page+1) // num_of_pages) + + for menu_item in menu_main_body[start_index:end_index]: + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu['actions'].append(menu_item) + + # decorate bottom with move forward control + # if we're not on the last page + if curr_page < (num_of_pages - 1): + menu_item = {} + menu_item['name'] = '[ next page ' + str(curr_page+2) + ' of ' + str(num_of_pages) + ' ]>>' + menu_item['execute'] = self.page_fwd + menu_item['order'] = menu_item_order + menu_item_order += 1 + menu['actions'].append(menu_item) + + # for action in menu['actions']: + # action['isVisible'] = self.scope_desktop + + return [menu] + + def get_entities(self, user_only = True, filter_out=[]): if user_only: cached_tasks = self.connector.pipeline_data.get('project_tasks_for_person') From d4f5af1a3bdeb85624b04a521739045a66c1c896 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 18:21:50 +0100 Subject: [PATCH 21/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 21ef6d5..705c300 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -3409,7 +3409,7 @@ def build_menu_classic(self): entities_by_name = {} for entity in found_entities[entity_type]: - entities_by_name[entity.get('code')] = entity + entities_by_name[entity.get('episode_name', '') + ' ' + entity.get('code')] = entity for entity_name in sorted(entities_by_name.keys()): entity = entities_by_name.get(entity_name) menu_item = {} From 95b0f60951c5bdebcf4223542fdc3b3317a83c88 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 18:26:48 +0100 Subject: [PATCH 22/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index 705c300..fe8d494 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -1166,7 +1166,7 @@ def project_tasks_for_person(): for x in all_tasks_for_person: if x.get('project_id') == self.linked_project_id: project_tasks_for_person.append(x) - self.pipeline_data['project_tasks_for_person'] = list[project_tasks_for_person] + self.pipeline_data['project_tasks_for_person'] = list(project_tasks_for_person) for task in project_tasks_for_person: self.pipeline_data['entitiy_keys'].add((task.get('entity_type_name'), task.get('entity_id'))) except Exception as e: @@ -3491,7 +3491,7 @@ def get_entities(self, user_only = True, filter_out=[]): if not isinstance(cached_tasks, list): # try to collect pipeline data in foreground self.connector.collect_pipeline_data() - cached_tasks = self.connector.pipeline_data('project_tasks_for_person') + cached_tasks = self.connector.pipeline_data.get('project_tasks_for_person') if not isinstance(cached_tasks, list): # give up return {} From 505534dbfdfb9586645a5651cb9b3a921f609bb5 Mon Sep 17 00:00:00 2001 From: Andriy Toloshny Date: Sun, 30 Apr 2023 18:30:36 +0100 Subject: [PATCH 23/23] update flameMenuKITSU.py --- flameMenuKITSU.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flameMenuKITSU.py b/flameMenuKITSU.py index fe8d494..b92ef09 100755 --- a/flameMenuKITSU.py +++ b/flameMenuKITSU.py @@ -15,7 +15,7 @@ import traceback from pprint import pprint, pformat -__version__ = 'v0.0.4 dev 002' +__version__ = 'v0.0.4' menu_group_name = 'KITSU' app_name = 'flameMenuKITSU'