B.py
# -*- coding: utf-8 -*-
# noinspection PyUnresolvedReferences
from bpy.props import StringProperty,IntProperty,BoolProperty,CollectionProperty,PointerProperty
import bpy, os
from . import drives
character_rigs = []
expanded_directories = []
toggle = True
folders = None
class Selection_Toggle( bpy.types.Operator ):
bl_idname = "scene.track_toggle"
bl_label = ""
bl_option = {'REGISTER'}
type = StringProperty( name='Selection Type' )
def invoke( this, context, event ):
Type = this.properties.type
CS_Tracks = context.scene.CS_Tracks
if Type=='all':
for track in CS_Tracks.tracks: track.export = True
if Type=='none':
for track in CS_Tracks.tracks: track.export = False
if Type=='inverse':
for track in CS_Tracks.tracks: track.export = not track.export
return {'RUNNING_MODAL'}
def recurse(directory,level=0):
global folders
for entry in os.listdir(directory):
fullpath=( '%s%s' if directory[-1]=='/' else '%s/%s' )%(directory,entry)
if os.path.isdir(fullpath):
folder=folders.add()
folder.path=fullpath
folder.name=entry
folder.level=level
if fullpath in expanded_directories:
recurse(fullpath,level+1)
folder.expand=True
def expand_toggle(folder,context):
global toggle,folders,expanded_directories
# NOTE: folder.expand is set before getting here
if toggle: # this should ONLY be True when folder.expand is clicked (not set)
if folder.expand: expanded_directories.append( folder.path )
elif folder.path in expanded_directories: expanded_directories.remove( folder.path )
# NOTE: the initial invoke of the dialog class does the same thing as here (no recursion).
folders.clear() # why doesn't this clear the UI?
toggle=False # don't update when setting `folder.expand`
for drive in drives:
folder=folders.add()
folder.path=drive
folder.name=drive.split('/')[-1] or '/'
folder.level=0 # drives are the roots
if drive in expanded_directories:
recurse(drive,1)
folder.expand=True # this would call this function (recursion depth error)
toggle=True
def character_toggle(character,context):
pass
class EXPORT_ACTION_UL_CS_Characters( bpy.types.UIList ):
def draw_item( self, context, layout, data, item, icon, active_data, active_propname, index ):
layout.alignment='LEFT'
layout.prop( item, "export", text=item.name, emboss=False, translate=False, icon='OUTLINER_OB_ARMATURE' )
class Character( bpy.types.PropertyGroup ):
name = StringProperty( name="Character Name" )
export = BoolProperty( name="Export", description="Export this character", default=True, update=character_toggle )
class EXPORT_ACTION_UL_CS_Tracks( bpy.types.UIList ):
def draw_item( self, context, layout, data, item, icon, active_data, active_propname, index ):
layout.alignment='LEFT'
layout.prop( item, "export", text='%s : %s'%(item.armature,item.name), emboss=False, translate=False, icon='NLA' )
class Track( bpy.types.PropertyGroup ):
armature, name = StringProperty( name="Armature Name" ), StringProperty( name="Track Name" )
export = BoolProperty( name="Export", description="Export this track", default=True )
class EXPORT_ACTION_UL_CS_Folders( bpy.types.UIList ):
def draw_item( self, context, layout, data, item, icon, active_data, active_propname, index ):
layout.alignment='LEFT'
for i in range(item.level): layout.label(text='')
layout.prop( item, "expand", text='', emboss=False, translate=False, icon='TRIA_DOWN' if item.expand else 'TRIA_RIGHT', icon_only=True, )
layout.label(text=item.name, icon='FILE_FOLDER' if item.level else 'DISK_DRIVE')
class Folder( bpy.types.PropertyGroup ):
name=StringProperty( name="Folder Name" )
path=StringProperty( name="Path" )
expand=BoolProperty( name="Expand", description="", default=False, update=expand_toggle)
level=IntProperty()
class CSCEData( bpy.types.PropertyGroup ):
# template_list wrapper (since collections don't come with a required index property)
characters = CollectionProperty( name="Characters", type=Character, description="Select characters to export" )
character_index = IntProperty()
tracks = CollectionProperty( name="Tracks", type=Track, description="Select tracks to export" )
track_index = IntProperty()
folders=CollectionProperty( name="Folders", type=Folder, description="Select a folder" )
folder_index=IntProperty()