def _draw_path_settings_panel(scene, layout, scs_globals): """Draw global path settings panel. :param layout: :type layout: bpy.types.Layout :return: :rtype: """ layout_box = layout.box() if scene.scs_props.global_paths_settings_expand: layout_box_row = layout_box.row() layout_box_row.prop(scene.scs_props, 'global_paths_settings_expand', text="Path Settings:", icon='TRIA_DOWN', icon_only=True, emboss=False) layout_box_row.label('') layout_box_col = layout_box.column(align=True) # SCS Project Path (DIR_PATH - absolute) icon = 'SNAP_ON' if _get_scs_globals( ).use_alternative_bases else 'SNAP_OFF' layout_box_col.label('SCS Project Base Path:', icon='FILE_FOLDER') layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not os.path.isdir(scs_globals.scs_project_path) layout_box_row.prop(scs_globals, 'scs_project_path', text='', icon='PACKAGE') layout_box_row.prop(scs_globals, 'use_alternative_bases', icon=icon, icon_only=True) layout_box_row.operator('scene.select_scs_project_path', text='', icon='FILESEL') # Divide labels and sub paths to columns sub_paths_layout = layout_box_col.row().split(percentage=0.3) sub_paths_left_col = sub_paths_layout.column(align=True) sub_paths_right_col = sub_paths_layout.column(align=True) # Trigger Actions File (FILE_PATH - relative) icon = 'SNAP_ON' if _get_scs_globals( ).trigger_actions_use_infixed else 'SNAP_OFF' sub_paths_left_col.label("Trigger Action Lib:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_trigger_actions_rel_path( ) sub_path_right_col_row.prop(scs_globals, 'trigger_actions_rel_path', text='', icon='FILE_SCRIPT') sub_path_right_col_row.prop(scs_globals, 'trigger_actions_use_infixed', icon=icon, icon_only=True) sub_path_right_col_row.operator( 'scene.select_trigger_actions_rel_path', text='', icon='FILESEL') # Sign Library Directory (FILE_PATH - relative) icon = 'SNAP_ON' if _get_scs_globals( ).sign_library_use_infixed else 'SNAP_OFF' sub_paths_left_col.label("Sign Library:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_sign_library_rel_path( ) sub_path_right_col_row.prop(scs_globals, 'sign_library_rel_path', text='', icon='FILE_SCRIPT') sub_path_right_col_row.prop(scs_globals, 'sign_library_use_infixed', icon=icon, icon_only=True) sub_path_right_col_row.operator('scene.select_sign_library_rel_path', text='', icon='FILESEL') # Traffic Semaphore Profile Library Directory (FILE_PATH - relative) icon = 'SNAP_ON' if _get_scs_globals( ).tsem_library_use_infixed else 'SNAP_OFF' sub_paths_left_col.label("Semaphore Lib:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_tsem_library_rel_path( ) sub_path_right_col_row.prop(scs_globals, 'tsem_library_rel_path', text='', icon='FILE_SCRIPT') sub_path_right_col_row.prop(scs_globals, 'tsem_library_use_infixed', icon=icon, icon_only=True) sub_path_right_col_row.operator('scene.select_tsem_library_rel_path', text='', icon='FILESEL') # Traffic Rules Library Directory (FILE_PATH - relative) icon = 'SNAP_ON' if _get_scs_globals( ).traffic_rules_library_use_infixed else 'SNAP_OFF' sub_paths_left_col.label("Traffic Rules Lib:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_traffic_rules_library_rel_path( ) sub_path_right_col_row.prop(scs_globals, 'traffic_rules_library_rel_path', text='', icon='FILE_SCRIPT') sub_path_right_col_row.prop(scs_globals, 'traffic_rules_library_use_infixed', icon=icon, icon_only=True) sub_path_right_col_row.operator( 'scene.select_traffic_rules_library_rel_path', text='', icon='FILESEL') # Hookup Library Directory (DIR_PATH - relative) sub_paths_left_col.label("Hookup Lib Dir:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_hookup_library_rel_path( ) sub_path_right_col_row.prop(scs_globals, 'hookup_library_rel_path', text='', icon='FILE_FOLDER') sub_path_right_col_row.operator('scene.select_hookup_library_rel_path', text='', icon='FILESEL') # Material Substance Library Directory (FILE_PATH - relative) sub_paths_left_col.label("Mat Substance Lib:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_matsubs_library_rel_path( ) sub_path_right_col_row.prop(scs_globals, 'matsubs_library_rel_path', text='', icon='FILE_SCRIPT') sub_path_right_col_row.operator( 'scene.select_matsubs_library_rel_path', text='', icon='FILESEL') layout_box_row = layout_box_col.row() layout_box_row.separator() # Shader Presets File (FILE_PATH) layout_box_col.label('Shader Presets Library:', icon='FILE_TEXT') layout_box_row = layout_box_col.row(align=True) if _path_utils.is_valid_shader_presets_library_path(): layout_box_row.alert = False else: layout_box_row.alert = True layout_box_row.prop(scs_globals, 'shader_presets_filepath', text='', icon='NONE') layout_box_row.operator('scene.select_shader_presets_filepath', text='', icon='FILESEL') # CONVERSION TOOLS PATH layout_box_col.label("Conversion Tools Path:", icon="FILE_FOLDER") layout_box_row = layout_box_col.row(align=True) valid = (os.path.isdir(scs_globals.conv_hlpr_converters_path) and os.path.isfile( os.path.join(scs_globals.conv_hlpr_converters_path, "extra_mount.txt")) and os.path.isfile( os.path.join(scs_globals.conv_hlpr_converters_path, "convert.cmd"))) layout_box_row.alert = not valid layout_box_row.prop(scs_globals, "conv_hlpr_converters_path", text="") else: layout_box_row = layout_box.row() layout_box_row.prop(scene.scs_props, 'global_paths_settings_expand', text="Path Settings:", icon='TRIA_RIGHT', icon_only=True, emboss=False) layout_box_row.label('')
def _draw_path_settings_panel(scene, layout, scs_globals): """Draw global path settings panel. :param layout: :type layout: bpy.types.Layout :return: :rtype: """ layout_box = layout.box() if scene.scs_props.global_paths_settings_expand: layout_box_row = layout_box.row() layout_box_row.prop( scene.scs_props, 'global_paths_settings_expand', text="Path Settings:", icon='TRIA_DOWN', icon_only=True, emboss=False ) layout_box_row.label('') layout_box_col = layout_box.column() # SCS Project Path (DIR_PATH - absolute) layout_box_col.label('SCS Project Base Path:', icon='FILE_FOLDER') layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not os.path.isdir(scs_globals.scs_project_path) layout_box_row.prop(scs_globals, 'scs_project_path', text='', icon='PACKAGE') layout_box_row.operator('scene.select_scs_project_path', text='', icon='FILESEL') # Divide labels and sub paths to columns sub_paths_layout = layout_box_col.row().split(percentage=0.3) sub_paths_left_col = sub_paths_layout.column() sub_paths_right_col = sub_paths_layout.column() # Trigger Actions File (FILE_PATH - relative) icon = 'SNAP_ON' if _get_scs_globals().trigger_actions_use_infixed else 'SNAP_OFF' sub_paths_left_col.label("Trigger Action Lib:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_trigger_actions_rel_path() sub_path_right_col_row.prop(scs_globals, 'trigger_actions_rel_path', text='', icon='FILE_SCRIPT') sub_path_right_col_row.prop(scs_globals, 'trigger_actions_use_infixed', icon=icon, icon_only=True) sub_path_right_col_row.operator('scene.select_trigger_actions_rel_path', text='', icon='FILESEL') # Sign Library Directory (FILE_PATH - relative) icon = 'SNAP_ON' if _get_scs_globals().sign_library_use_infixed else 'SNAP_OFF' sub_paths_left_col.label("Sign Library:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_sign_library_rel_path() sub_path_right_col_row.prop(scs_globals, 'sign_library_rel_path', text='', icon='FILE_SCRIPT') sub_path_right_col_row.prop(scs_globals, 'sign_library_use_infixed', icon=icon, icon_only=True) sub_path_right_col_row.operator('scene.select_sign_library_rel_path', text='', icon='FILESEL') # Traffic Semaphore Profile Library Directory (FILE_PATH - relative) icon = 'SNAP_ON' if _get_scs_globals().tsem_library_use_infixed else 'SNAP_OFF' sub_paths_left_col.label("Semaphore Lib:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_tsem_library_rel_path() sub_path_right_col_row.prop(scs_globals, 'tsem_library_rel_path', text='', icon='FILE_SCRIPT') sub_path_right_col_row.prop(scs_globals, 'tsem_library_use_infixed', icon=icon, icon_only=True) sub_path_right_col_row.operator('scene.select_tsem_library_rel_path', text='', icon='FILESEL') # Traffic Rules Library Directory (FILE_PATH - relative) icon = 'SNAP_ON' if _get_scs_globals().traffic_rules_library_use_infixed else 'SNAP_OFF' sub_paths_left_col.label("Traffic Rules Lib:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_traffic_rules_library_rel_path() sub_path_right_col_row.prop(scs_globals, 'traffic_rules_library_rel_path', text='', icon='FILE_SCRIPT') sub_path_right_col_row.prop(scs_globals, 'traffic_rules_library_use_infixed', icon=icon, icon_only=True) sub_path_right_col_row.operator('scene.select_traffic_rules_library_rel_path', text='', icon='FILESEL') # Hookup Library Directory (DIR_PATH - relative) sub_paths_left_col.label("Hookup Lib Dir:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_hookup_library_rel_path() sub_path_right_col_row.prop(scs_globals, 'hookup_library_rel_path', text='', icon='FILE_FOLDER') sub_path_right_col_row.operator('scene.select_hookup_library_rel_path', text='', icon='FILESEL') # Material Substance Library Directory (FILE_PATH - relative) sub_paths_left_col.label("Mat Substance Lib:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_matsubs_library_rel_path() sub_path_right_col_row.prop(scs_globals, 'matsubs_library_rel_path', text='', icon='FILE_SCRIPT') sub_path_right_col_row.operator('scene.select_matsubs_library_rel_path', text='', icon='FILESEL') layout_box_row = layout_box_col.row() layout_box_row.separator() # Shader Presets File (FILE_PATH) layout_box_col.label('Shader Presets Library:', icon='FILE_TEXT') layout_box_row = layout_box_col.row(align=True) if _path_utils.is_valid_shader_presets_library_path(): layout_box_row.alert = False else: layout_box_row.alert = True layout_box_row.prop(scs_globals, 'shader_presets_filepath', text='', icon='NONE') layout_box_row.operator('scene.select_shader_presets_filepath', text='', icon='FILESEL') else: layout_box_row = layout_box.row() layout_box_row.prop( scene.scs_props, 'global_paths_settings_expand', text="Path Settings:", icon='TRIA_RIGHT', icon_only=True, emboss=False ) layout_box_row.label('')
def _draw_path_settings_panel(scene, layout, scs_globals): """Draw global path settings panel. :param layout: :type layout: bpy.types.Layout :return: :rtype: """ layout_box = layout.box() if scene.scs_props.global_paths_settings_expand: layout_box_row = layout_box.row() layout_box_row.prop( scene.scs_props, 'global_paths_settings_expand', text="Path Settings:", icon='TRIA_DOWN', icon_only=True, emboss=False ) layout_box_row.label('') layout_box_col = layout_box.column() # SCS Project Path (DIR_PATH - absolute) layout_box_col.label('SCS Project Base Path:', icon='FILE_FOLDER') layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not os.path.isdir(scs_globals.scs_project_path) layout_box_row.prop(scs_globals, 'scs_project_path', text='', icon='PACKAGE') layout_box_row.operator('scene.select_scs_project_path', text='', icon='FILESEL') # Sign Library Directory (FILE_PATH - relative) layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not _path_utils.is_valid_sign_library_rel_path() layout_box_row.prop(scs_globals, 'sign_library_rel_path', icon='FILE_SCRIPT') layout_box_row.operator('scene.select_sign_library_rel_path', text='', icon='FILESEL') # Traffic Semaphore Profile Library Directory (FILE_PATH - relative) layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not _path_utils.is_valid_tsem_library_rel_path() layout_box_row.prop(scs_globals, 'tsem_library_rel_path', text="Semaphore Lib", icon='FILE_SCRIPT') layout_box_row.operator('scene.select_tsem_library_rel_path', text='', icon='FILESEL') # Traffic Rules Library Directory (FILE_PATH - relative) layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not _path_utils.is_valid_traffic_rules_library_rel_path() layout_box_row.prop(scs_globals, 'traffic_rules_library_rel_path', text="Traffic Rules Lib", icon='FILE_SCRIPT') layout_box_row.operator('scene.select_traffic_rules_library_rel_path', text='', icon='FILESEL') # Hookup Library Directory (DIR_PATH - relative) layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not _path_utils.is_valid_hookup_library_rel_path() layout_box_row.prop(scs_globals, 'hookup_library_rel_path', text="Hookup Lib Dir", icon='FILE_FOLDER') layout_box_row.operator('scene.select_hookup_library_rel_path', text='', icon='FILESEL') # Material Substance Library Directory (FILE_PATH - relative) layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not _path_utils.is_valid_matsubs_library_rel_path() layout_box_row.prop(scs_globals, 'matsubs_library_rel_path', text="Mat Substance Lib", icon='FILE_SCRIPT') layout_box_row.operator('scene.select_matsubs_library_rel_path', text='', icon='FILESEL') layout_box_row = layout_box_col.row() layout_box_row.separator() # Shader Presets File (FILE_PATH) layout_box_col.label('Shader Presets Library:', icon='FILE_TEXT') layout_box_row = layout_box_col.row(align=True) if _path_utils.is_valid_shader_presets_library_path(): layout_box_row.alert = False else: layout_box_row.alert = True layout_box_row.prop(scs_globals, 'shader_presets_filepath', text='', icon='NONE') layout_box_row.operator('scene.select_shader_presets_filepath', text='', icon='FILESEL') # ## CgFX Templates File (FILE_PATH) # layout_box_row = layout_box_col.row(align=True) # if utils.is_valid_cgfx_template_library_path(): # layout_box_row.alert = False # else: # layout_box_row.alert = True # layout_box_row.prop(scs_globals, 'cgfx_templates_filepath', icon='FILE_TEXT') # layout_box_row.operator('scene.select_cgfx_templates_filepath', text='', icon='FILESEL') # # ## CgFX Library Directory (DIR_PATH - relative) # layout_box_row = layout_box_col.row(align=True) # if utils.is_valid_cgfx_library_rel_path(): # layout_box_row.alert = False # else: # layout_box_row.alert = True # layout_box_row.prop(scs_globals, 'cgfx_library_rel_path', icon='FILE_FOLDER') # layout_box_row.operator('scene.select_cgfx_library_rel_path', text='', icon='FILESEL') else: layout_box_row = layout_box.row() layout_box_row.prop( scene.scs_props, 'global_paths_settings_expand', text="Path Settings:", icon='TRIA_RIGHT', icon_only=True, emboss=False ) layout_box_row.label('')
def _draw_path_settings_panel(scene, layout, scs_globals): """Draw global path settings panel. :param layout: :type layout: bpy.types.Layout :return: :rtype: """ layout_box = layout.box() if scene.scs_props.global_paths_settings_expand: layout_box_row = layout_box.row() layout_box_row.prop(scene.scs_props, 'global_paths_settings_expand', text="Path Settings:", icon='TRIA_DOWN', icon_only=True, emboss=False) layout_box_row.label('') layout_box_col = layout_box.column() # SCS Project Path (DIR_PATH - absolute) layout_box_col.label('SCS Project Base Path:', icon='FILE_FOLDER') layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not os.path.isdir(scs_globals.scs_project_path) layout_box_row.prop(scs_globals, 'scs_project_path', text='', icon='PACKAGE') layout_box_row.operator('scene.select_scs_project_path', text='', icon='FILESEL') # Sign Library Directory (FILE_PATH - relative) layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not _path_utils.is_valid_sign_library_rel_path() layout_box_row.prop(scs_globals, 'sign_library_rel_path', icon='FILE_SCRIPT') layout_box_row.operator('scene.select_sign_library_rel_path', text='', icon='FILESEL') # Traffic Semaphore Profile Library Directory (FILE_PATH - relative) layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not _path_utils.is_valid_tsem_library_rel_path() layout_box_row.prop(scs_globals, 'tsem_library_rel_path', text="Semaphore Lib", icon='FILE_SCRIPT') layout_box_row.operator('scene.select_tsem_library_rel_path', text='', icon='FILESEL') # Traffic Rules Library Directory (FILE_PATH - relative) layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not _path_utils.is_valid_traffic_rules_library_rel_path( ) layout_box_row.prop(scs_globals, 'traffic_rules_library_rel_path', text="Traffic Rules Lib", icon='FILE_SCRIPT') layout_box_row.operator('scene.select_traffic_rules_library_rel_path', text='', icon='FILESEL') # Hookup Library Directory (DIR_PATH - relative) layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not _path_utils.is_valid_hookup_library_rel_path( ) layout_box_row.prop(scs_globals, 'hookup_library_rel_path', text="Hookup Lib Dir", icon='FILE_FOLDER') layout_box_row.operator('scene.select_hookup_library_rel_path', text='', icon='FILESEL') # Material Substance Library Directory (FILE_PATH - relative) layout_box_row = layout_box_col.row(align=True) layout_box_row.alert = not _path_utils.is_valid_matsubs_library_rel_path( ) layout_box_row.prop(scs_globals, 'matsubs_library_rel_path', text="Mat Substance Lib", icon='FILE_SCRIPT') layout_box_row.operator('scene.select_matsubs_library_rel_path', text='', icon='FILESEL') layout_box_row = layout_box_col.row() layout_box_row.separator() # Shader Presets File (FILE_PATH) layout_box_col.label('Shader Presets Library:', icon='FILE_TEXT') layout_box_row = layout_box_col.row(align=True) if _path_utils.is_valid_shader_presets_library_path(): layout_box_row.alert = False else: layout_box_row.alert = True layout_box_row.prop(scs_globals, 'shader_presets_filepath', text='', icon='NONE') layout_box_row.operator('scene.select_shader_presets_filepath', text='', icon='FILESEL') # ## CgFX Templates File (FILE_PATH) # layout_box_row = layout_box_col.row(align=True) # if utils.is_valid_cgfx_template_library_path(): # layout_box_row.alert = False # else: # layout_box_row.alert = True # layout_box_row.prop(scs_globals, 'cgfx_templates_filepath', icon='FILE_TEXT') # layout_box_row.operator('scene.select_cgfx_templates_filepath', text='', icon='FILESEL') # # ## CgFX Library Directory (DIR_PATH - relative) # layout_box_row = layout_box_col.row(align=True) # if utils.is_valid_cgfx_library_rel_path(): # layout_box_row.alert = False # else: # layout_box_row.alert = True # layout_box_row.prop(scs_globals, 'cgfx_library_rel_path', icon='FILE_FOLDER') # layout_box_row.operator('scene.select_cgfx_library_rel_path', text='', icon='FILESEL') else: layout_box_row = layout_box.row() layout_box_row.prop(scene.scs_props, 'global_paths_settings_expand', text="Path Settings:", icon='TRIA_RIGHT', icon_only=True, emboss=False) layout_box_row.label('')
def draw(self, context): layout = self.get_layout() scs_globals = _get_scs_globals() # scs tools main panel if config is being updated layout.enabled = not scs_globals.config_update_lock # SCS Project Path (DIR_PATH - absolute) icon = 'SNAP_ON' if _get_scs_globals().use_alternative_bases else 'SNAP_OFF' layout.label(text="SCS Project Base Path:", icon='FILE_FOLDER') row = layout.row(align=True) row.alert = not os.path.isdir(scs_globals.scs_project_path) row.prop(scs_globals, 'scs_project_path', text="") row.prop(scs_globals, 'use_alternative_bases', icon=icon, icon_only=True) row.operator('scene.scs_tools_select_project_path', text="", icon='FILEBROWSER') # Divide labels and sub paths to columns sub_paths_layout = layout.row().split(factor=0.35) sub_paths_left_col = sub_paths_layout.column(align=True) sub_paths_right_col = sub_paths_layout.column(align=True) # Trigger Actions File (FILE_PATH - relative) icon = 'SNAP_ON' if _get_scs_globals().trigger_actions_use_infixed else 'SNAP_OFF' sub_paths_left_col.label(text="Trigger Action Lib:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_trigger_actions_rel_path() sub_path_right_col_row.prop(scs_globals, 'trigger_actions_rel_path', text="", icon='FILE_CACHE') sub_path_right_col_row.prop(scs_globals, 'trigger_actions_use_infixed', icon=icon, icon_only=True) sub_path_right_col_row.operator('scene.scs_tools_select_trigger_actions_lib_path', text="", icon='FILEBROWSER') # Sign Library Directory (FILE_PATH - relative) icon = 'SNAP_ON' if _get_scs_globals().sign_library_use_infixed else 'SNAP_OFF' sub_paths_left_col.label(text="Sign Library:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_sign_library_rel_path() sub_path_right_col_row.prop(scs_globals, 'sign_library_rel_path', text="", icon='FILE_CACHE') sub_path_right_col_row.prop(scs_globals, 'sign_library_use_infixed', icon=icon, icon_only=True) sub_path_right_col_row.operator('scene.scs_tools_select_sign_lib_path', text="", icon='FILEBROWSER') # Traffic Semaphore Profile Library Directory (FILE_PATH - relative) icon = 'SNAP_ON' if _get_scs_globals().tsem_library_use_infixed else 'SNAP_OFF' sub_paths_left_col.label(text="Semaphore Lib:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_tsem_library_rel_path() sub_path_right_col_row.prop(scs_globals, 'tsem_library_rel_path', text="", icon='FILE_CACHE') sub_path_right_col_row.prop(scs_globals, 'tsem_library_use_infixed', icon=icon, icon_only=True) sub_path_right_col_row.operator('scene.scs_tools_select_semaphore_lib_path', text="", icon='FILEBROWSER') # Traffic Rules Library Directory (FILE_PATH - relative) icon = 'SNAP_ON' if _get_scs_globals().traffic_rules_library_use_infixed else 'SNAP_OFF' sub_paths_left_col.label(text="Traffic Rules Lib:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_traffic_rules_library_rel_path() sub_path_right_col_row.prop(scs_globals, 'traffic_rules_library_rel_path', text="", icon='FILE_CACHE') sub_path_right_col_row.prop(scs_globals, 'traffic_rules_library_use_infixed', icon=icon, icon_only=True) sub_path_right_col_row.operator('scene.scs_tools_select_traffic_rules_lib_path', text="", icon='FILEBROWSER') # Hookup Library Directory (DIR_PATH - relative) sub_paths_left_col.label(text="Hookup Lib Dir:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_hookup_library_rel_path() sub_path_right_col_row.prop(scs_globals, 'hookup_library_rel_path', text="", icon='FILE_FOLDER') sub_path_right_col_row.operator('scene.scs_tools_select_hookup_lib_path', text="", icon='FILEBROWSER') # Material Substance Library Directory (FILE_PATH - relative) sub_paths_left_col.label(text="Mat Substance Lib:") sub_path_right_col_row = sub_paths_right_col.row(align=True) sub_path_right_col_row.alert = not _path_utils.is_valid_matsubs_library_rel_path() sub_path_right_col_row.prop(scs_globals, 'matsubs_library_rel_path', text="", icon='FILE_CACHE') sub_path_right_col_row.operator('scene.scs_tools_select_matsubs_lib_path', text="", icon='FILEBROWSER') row = layout.row() row.separator() # Shader Presets File (FILE_PATH) layout.label(text="Shader Presets Library:", icon='FILE_TEXT') row = layout.row(align=True) row.prop(scs_globals, 'shader_presets_use_custom', text="") custom_path_row = row.row(align=True) custom_path_row.enabled = scs_globals.shader_presets_use_custom custom_path_row.alert = not _path_utils.is_valid_shader_presets_library_path() custom_path_row.prop(scs_globals, 'shader_presets_filepath', text="") custom_path_row.operator('scene.scs_tools_select_shader_presets_path', text="", icon='FILEBROWSER')