import bpy
from ..graphics.load import load_image_file
from .utils import add_list_items, toggle_help, toggle_mods
from .ui_forms import Mods_Panel_Form, Main_Panel_Form
class Preset_A():
def __init__(self, create):
self.create = create
self.db = self.create.db
self.images = []
# Main Window
self.main_window = None
self.main_window_text = None
self.loaded_images = {}
# Help Window
self.help_window = None
# Mods Window
self.mod_window = None
self.mods_tab_text_elem = None
self.main_window_mods_text_elem = None
self.scroll_widget = None
self.setup()
def setup(self):
# Load Images
self.images.append(load_image_file(filename="logo_red"))
# Create windows
self.main_window = self.create.window(window_key="Main")
self.main_window_layout()
self.help_window = self.create.window(window_key="Help")
self.help_window_layout()
self.mod_window = self.create.window(window_key="Mods")
self.mod_window_layout()
########################
# Create Skeletons
########################
def main_window_layout(self):
'''Create the main window skeleton.'''
# Header
self.create.window_header_layout(window=self.main_window, header_height_percent=20, min_max_height=(10, 40))
header_layout = self.main_window.header_layout
self.create.row(layout=header_layout, height_percent=100)
self.create.column(layout=header_layout, width_percent=20)
self.create.cell(layout=header_layout, hover_highlight=False)
self.create.element_image(layout=header_layout, image=self.images[0], scale=.8, force_fit=False)
self.create.element_border(layout=header_layout, line_width=1)
self.create.column(layout=header_layout, width_percent=40)
self.create.cell(layout=header_layout, hover_highlight=True)
self.create.element_text(layout=header_layout, text="Help", target_size=12)
self.create.element_border(layout=header_layout, line_width=1)
self.create.event_call_back(layout=header_layout, func=toggle_help, positive_args=(self.db,))
self.create.column(layout=header_layout, width_percent=40)
self.create.cell(layout=header_layout, hover_highlight=True)
self.main_window_mods_text_elem = self.create.element_text(layout=header_layout, text="Modifiers", target_size=12)
self.create.element_border(layout=header_layout, line_width=1)
self.create.event_call_back(layout=header_layout, func=toggle_mods, positive_args=(self.db,))
# self.create.column(layout=header_layout, width_percent=80)
# self.create.cell(layout=header_layout, hover_highlight=False)
# self.main_window_text = self.create.element_text(layout=header_layout, text="Main Window", target_size=24)
# self.create.element_border(layout=header_layout, line_width=3)
# Body
# Panel 1
self.create.panel(window=self.main_window, x_split_percent=100, y_split_percent=100)
# Widget
self.create.widget_text(panel=self.main_window.panels[-1], win_key="Help")
widget = self.main_window.panels[-1].widget
self.create.widget_body_layout(widget=widget)
body_layout = widget.layout
def help_window_layout(self):
'''Create the help window skeleton.'''
# Body
# Panel 1
self.create.panel(window=self.help_window, x_split_percent=100, y_split_percent=100)
# Widget
self.create.widget_scroll(panel=self.help_window.panels[-1], win_key="Help")
widget = self.help_window.panels[-1].widget
# Widget Header
self.create.widget_header_layout(widget=widget, header_height_percent=20)
header_layout = widget.header_layout
self.create.row(layout=header_layout, height_percent=100)
self.create.column(layout=header_layout, width_percent=100)
self.create.cell(layout=header_layout, hover_highlight=False)
self.create.element_text(layout=header_layout, text="Help")
self.create.element_border(layout=header_layout, line_width=2)
self.create.widget_body_layout(widget=widget)
body_layout = widget.layout
def mod_window_layout(self):
'''Create the mods window skeleton.'''
# Body
self.create.panel(window=self.mod_window, x_split_percent=100, y_split_percent=100)
# Widget
self.scroll_widget = self.create.widget_scroll(panel=self.mod_window.panels[-1], win_key="Mods")
widget = self.mod_window.panels[-1].widget
# Widget Header
self.create.widget_header_layout(widget=widget, header_height_percent=20)
header_layout = widget.header_layout
self.create.row(layout=header_layout, height_percent=100)
self.create.column(layout=header_layout, width_percent=100)
self.create.cell(layout=header_layout, hover_highlight=False)
self.mods_tab_text_elem = self.create.element_text(layout=header_layout, text="Modifiers")
self.create.element_border(layout=header_layout, line_width=2)
self.create.widget_body_layout(widget=widget)
body_layout = widget.layout
########################
# Populate Skeletons
########################
def build_main(self, win_dict, window_name, win_form):
widget = self.main_window.panels[0].widget
layout = widget.layout
# New style of inserting data
if type(win_form) == Main_Panel_Form:
self.create.row(layout=layout, height_percent=100)
#--- ONE ---#
if win_form.one_ON:
self.create.column(layout=layout, width_percent=win_form.one_width_percent)
if win_form.one_func == None:
self.create.cell(layout=layout, hover_highlight=False, dims_override=(4,-4,0,0))
else:
self.create.cell(layout=layout, hover_highlight=True, dims_override=(4,-4,0,0))
if win_form.one_drag:
self.create.event_call_drag(layout=layout, func=win_form.one_func, positive_args=win_form.one_positive_args, negative_args=win_form.one_negative_args)
else:
self.create.event_call_back(layout=layout, func=win_form.one_func, positive_args=win_form.one_positive_args, negative_args=win_form.one_negative_args)
self.create.element_background(layout=layout, primary=False, bevel=True)
self.create.element_border(layout=layout, line_width=1)
if win_form.one_image != "":
if win_form.one_image not in self.loaded_images:
self.loaded_images[win_form.one_image] = load_image_file(filename=win_form.one_image)
if self.loaded_images[win_form.one_image] != None:
self.create.element_image(layout=layout, image=self.loaded_images[win_form.one_image], scale=.8, force_fit=False)
if win_form.one_text != "":
self.create.element_text(layout=layout, text=win_form.one_text)
#--- TWO ---#
if win_form.two_ON:
if win_form.two_func == None:
self.create.cell(layout=layout, hover_highlight=False)
else:
self.create.cell(layout=layout, hover_highlight=True)
if win_form.two_drag:
self.create.event_call_drag(layout=layout, func=win_form.two_func, positive_args=win_form.two_positive_args, negative_args=win_form.two_negative_args)
else:
self.create.event_call_back(layout=layout, func=win_form.two_func, positive_args=win_form.two_positive_args, negative_args=win_form.two_negative_args)
self.create.element_background(layout=layout, primary=False, bevel=True)
self.create.element_border(layout=layout, line_width=1)
if win_form.two_image != "":
if win_form.two_image not in self.loaded_images:
self.loaded_images[win_form.two_image] = load_image_file(filename=win_form.two_image)
if self.loaded_images[win_form.two_image] != None:
self.create.element_image(layout=layout, image=self.loaded_images[win_form.two_image], scale=.8, force_fit=False)
if win_form.two_text != "":
self.create.element_text(layout=layout, text=win_form.two_text)
#--- THREE ---#
if win_form.three_ON:
self.create.column(layout=layout, width_percent=win_form.three_width_percent)
if win_form.three_func == None:
self.create.cell(layout=layout, hover_highlight=False)
else:
self.create.cell(layout=layout, hover_highlight=True)
if win_form.three_drag:
self.create.event_call_drag(layout=layout, func=win_form.three_func, positive_args=win_form.three_positive_args, negative_args=win_form.three_negative_args)
else:
self.create.event_call_back(layout=layout, func=win_form.three_func, positive_args=win_form.three_positive_args, negative_args=win_form.three_negative_args)
self.create.element_background(layout=layout, primary=False, bevel=True)
self.create.element_border(layout=layout, line_width=1)
if win_form.three_image != "":
if win_form.three_image not in self.loaded_images:
self.loaded_images[win_form.three_image] = load_image_file(filename=win_form.three_image)
if self.loaded_images[win_form.three_image] != None:
self.create.element_image(layout=layout, image=self.loaded_images[win_form.three_image], scale=.8, force_fit=False)
if win_form.three_text != "":
self.create.element_text(layout=layout, text=win_form.three_text)
#--- FOUR ---#
if win_form.four_ON:
if win_form.four_func == None:
self.create.cell(layout=layout, hover_highlight=False)
else:
self.create.cell(layout=layout, hover_highlight=True)
if win_form.four_drag:
self.create.event_call_drag(layout=layout, func=win_form.four_func, positive_args=win_form.four_positive_args, negative_args=win_form.four_negative_args)
else:
self.create.event_call_back(layout=layout, func=win_form.four_func, positive_args=win_form.four_positive_args, negative_args=win_form.four_negative_args)
self.create.element_background(layout=layout, primary=False, bevel=True)
self.create.element_border(layout=layout, line_width=1)
if win_form.four_image != "":
if win_form.four_image not in self.loaded_images:
self.loaded_images[win_form.four_image] = load_image_file(filename=win_form.four_image)
if self.loaded_images[win_form.four_image] != None:
self.create.element_image(layout=layout, image=self.loaded_images[win_form.four_image], scale=.8, force_fit=False)
if win_form.four_text != "":
self.create.element_text(layout=layout, text=win_form.four_text)
#--- FIVE ---#
if win_form.five_ON:
self.create.column(layout=layout, width_percent=win_form.five_width_percent)
if win_form.five_func == None:
self.create.cell(layout=layout, hover_highlight=False)
else:
self.create.cell(layout=layout, hover_highlight=True)
if win_form.five_drag:
self.create.event_call_drag(layout=layout, func=win_form.five_func, positive_args=win_form.five_positive_args, negative_args=win_form.five_negative_args)
else:
self.create.event_call_back(layout=layout, func=win_form.five_func, positive_args=win_form.five_positive_args, negative_args=win_form.five_negative_args)
self.create.element_background(layout=layout, primary=False, bevel=True)
self.create.element_border(layout=layout, line_width=1)
if win_form.five_image != "":
if win_form.five_image not in self.loaded_images:
self.loaded_images[win_form.five_image] = load_image_file(filename=win_form.five_image)
if self.loaded_images[win_form.five_image] != None:
self.create.element_image(layout=layout, image=self.loaded_images[win_form.five_image], scale=.8, force_fit=False)
if win_form.five_text != "":
self.create.element_text(layout=layout, text=win_form.five_text)
#--- SIX ---#
if win_form.six_ON:
if win_form.six_func == None:
self.create.cell(layout=layout, hover_highlight=False)
else:
self.create.cell(layout=layout, hover_highlight=True)
if win_form.six_drag:
self.create.event_call_drag(layout=layout, func=win_form.six_func, positive_args=win_form.six_positive_args, negative_args=win_form.six_negative_args)
else:
self.create.event_call_back(layout=layout, func=win_form.six_func, positive_args=win_form.six_positive_args, negative_args=win_form.six_negative_args)
self.create.element_background(layout=layout, primary=False, bevel=True)
self.create.element_border(layout=layout, line_width=1)
if win_form.six_image != "":
if win_form.six_image not in self.loaded_images:
self.loaded_images[win_form.six_image] = load_image_file(filename=win_form.six_image)
if self.loaded_images[win_form.six_image] != None:
self.create.element_image(layout=layout, image=self.loaded_images[win_form.six_image], scale=.8, force_fit=False)
if win_form.six_text != "":
self.create.element_text(layout=layout, text=win_form.six_text)
# TODO: Remove old style of inserting ui data
else:
#self.main_window_text.text = window_name
self.create.row(layout=layout, height_percent=100)
self.create.column(layout=layout, width_percent=20)
if win_dict["main_count"] != []:
self.create.cell(layout=layout, hover_highlight=True, dims_override=(4,-4,-4,4))
self.create.element_background(layout=layout, primary=False, bevel=True)
add_list_items(create=self.create, layout=layout, dict_val=win_dict["main_count"], color_select=1, target_size=18, scrollable=True)
self.create.column(layout=layout, width_percent=40)
if win_dict["last_col_cell_1"] != []:
self.create.cell(layout=layout, hover_highlight=True, dims_override=(0,-4,0,4))
self.create.element_background(layout=layout, primary=False, bevel=True)
add_list_items(create=self.create, layout=layout, dict_val=win_dict["last_col_cell_1"], color_select=1, scrollable=True)
if win_dict["header_sub_text"] != []:
self.create.cell(layout=layout, hover_highlight=True, dims_override=(0,-4,-4,0))
self.create.element_background(layout=layout, primary=False, bevel=True)
add_list_items(create=self.create, layout=layout, dict_val=win_dict["header_sub_text"], color_select=1, scrollable=True)
self.create.column(layout=layout, width_percent=40)
padding = 0
if win_dict["last_col_cell_3"] == []:
padding = -4
if win_dict["last_col_cell_2"] != []:
self.create.cell(layout=layout, hover_highlight=True, dims_override=(0,-4,padding,4))
self.create.element_background(layout=layout, primary=False, bevel=True)
add_list_items(create=self.create, layout=layout, dict_val=win_dict["last_col_cell_2"], color_select=1, scrollable=True)
if win_dict["last_col_cell_3"] != []:
self.create.cell(layout=layout, hover_highlight=True, dims_override=(0,-4,-4,0))
self.create.element_background(layout=layout, primary=False, bevel=True)
add_list_items(create=self.create, layout=layout, dict_val=win_dict["last_col_cell_3"], color_select=1, scrollable=True)
def build_help(self, hot_keys_dict, quick_ops_dict):
widget = self.help_window.panels[0].widget
layout = widget.layout
rows = len(hot_keys_dict)
row_percent = 100 / rows if rows > 0 else 100
primary = True
target_size = 12
drag = False
for key, val in hot_keys_dict.items():
# Add key
self.create.row(layout=layout, height_percent=row_percent)
self.create.column(layout=layout, width_percent=30)
self.create.cell(layout=layout, hover_highlight=True, dims_override=(0,-6,0,0))
self.create.element_background(layout=layout, primary=False, bevel=True)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=key, color_select=1)
if type(val) == str:
# Add description
self.create.column(layout=layout, width_percent=70)
self.create.cell(layout=layout, hover_highlight=False)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=val, color_select=0, target_size=target_size)
if len(val) > 0:
if len(val) == 1:
# Add description
self.create.column(layout=layout, width_percent=70)
self.create.cell(layout=layout, hover_highlight=False)
self.create.element_text(layout=layout, text=val[0], color_select=0, target_size=target_size)
if len(val) == 2:
if drag:
self.create.event_call_drag(layout=layout, func=val[1])
else:
self.create.event_call_back(layout=layout, func=val[1])
# Add description
self.create.column(layout=layout, width_percent=70)
self.create.cell(layout=layout, hover_highlight=False)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=val[0], color_select=0, target_size=target_size)
elif len(val) == 3:
if drag:
self.create.event_call_drag(layout=layout, func=val[1], positive_args=val[2])
else:
self.create.event_call_back(layout=layout, func=val[1], positive_args=val[2])
# Add description
self.create.column(layout=layout, width_percent=70)
self.create.cell(layout=layout, hover_highlight=False)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=val[0], color_select=0, target_size=target_size)
elif len(val) == 4:
if drag:
self.create.event_call_drag(layout=layout, func=val[1], positive_args=val[2], negative_args=val[3])
else:
self.create.event_call_back(layout=layout, func=val[1], positive_args=val[2], negative_args=val[3])
# Add description
self.create.column(layout=layout, width_percent=70)
self.create.cell(layout=layout, hover_highlight=False)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=val[0], color_select=0, target_size=target_size)
def build_mods(self, win_dict, active_mod_name, rename_window="", body_scroll=True):
widget = self.mod_window.panels[0].widget
widget.full_body_scroll_detection = body_scroll
layout = widget.layout
rows = len(win_dict)
row_percent = 100 / rows if rows > 0 else 100
# Rename the mods window tab
if rename_window != "":
if self.mods_tab_text_elem != None:
self.mods_tab_text_elem.text = rename_window
if self.main_window_mods_text_elem != None:
self.main_window_mods_text_elem.text = rename_window
count = len(win_dict)
for key, val in win_dict.items():
# Clickable inserts
if type(val) == Mods_Panel_Form:
# Row
self.create.row(layout=layout, height_percent=row_percent)
#--- Col : LEFT ---#
if val.left_text != "":
self.create.column(layout=layout, width_percent=val.left_width_percent)
# Can cell show highlight
if val.left_func == None:
self.create.cell(layout=layout, hover_highlight=False)
else:
self.create.cell(layout=layout, hover_highlight=True)
# Add call backs
if val.left_drag:
self.create.event_call_drag(layout=layout, func=val.left_func, positive_args=val.left_positive_args, negative_args=val.left_negative_args)
else:
self.create.event_call_back(layout=layout, func=val.left_func, positive_args=val.left_positive_args, negative_args=val.left_negative_args)
# Highlight for active
if val.left_text == active_mod_name:
self.create.element_background(layout=layout, primary=False, bevel=True)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=val.left_text, color_select=2)
# Non Highlight
else:
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=val.left_text)
#--- Col : CENTER ---#
if val.center_text != "":
self.create.column(layout=layout, width_percent=val.center_width_percent)
# Can cell show highlight
if val.center_func == None:
self.create.cell(layout=layout, hover_highlight=False)
else:
self.create.cell(layout=layout, hover_highlight=True)
# Add call backs
if val.center_drag:
self.create.event_call_drag(layout=layout, func=val.center_func, positive_args=val.center_positive_args, negative_args=val.center_negative_args)
else:
self.create.event_call_back(layout=layout, func=val.center_func, positive_args=val.center_positive_args, negative_args=val.center_negative_args)
# Highlight for active
if val.center_text == active_mod_name:
self.create.element_background(layout=layout, primary=False, bevel=True)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=val.center_text, color_select=2)
# Non Highlight
else:
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=val.center_text)
#--- Col : RIGHT ---#
if val.right_text != "":
self.create.column(layout=layout, width_percent=val.right_width_percent)
# Can cell show highlight
if val.right_func == None:
self.create.cell(layout=layout, hover_highlight=False)
else:
self.create.cell(layout=layout, hover_highlight=True)
# Add call backs
if val.right_drag:
self.create.event_call_drag(layout=layout, func=val.right_func, positive_args=val.right_positive_args, negative_args=val.right_negative_args)
else:
self.create.event_call_back(layout=layout, func=val.right_func, positive_args=val.right_positive_args, negative_args=val.right_negative_args)
# Highlight for active
if val.right_text == active_mod_name:
self.create.element_background(layout=layout, primary=False, bevel=True)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=val.right_text, color_select=2)
# Non Highlight
else:
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=val.right_text)
# Text only insert
else:
if key == active_mod_name:
# Row
self.create.row(layout=layout, height_percent=row_percent)
# Col
self.create.column(layout=layout, width_percent=10)
self.create.cell(layout=layout, hover_highlight=False)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=str(count))
# Col
self.create.column(layout=layout, width_percent=65)
self.create.cell(layout=layout, hover_highlight=False)
self.create.element_background(layout=layout, primary=False, bevel=True)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=key, color_select=2)
# Col
self.create.column(layout=layout, width_percent=25)
self.create.cell(layout=layout, hover_highlight=False)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=val)
else:
# Row
self.create.row(layout=layout, height_percent=row_percent)
# Col
self.create.column(layout=layout, width_percent=10)
self.create.cell(layout=layout, hover_highlight=False)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=str(count))
# Col
self.create.column(layout=layout, width_percent=65)
self.create.cell(layout=layout, hover_highlight=False)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=key)
# Col
self.create.column(layout=layout, width_percent=25)
self.create.cell(layout=layout, hover_highlight=False)
self.create.element_border(layout=layout, line_width=1)
self.create.element_text(layout=layout, text=val)
count -= 1
def destroy(self):
# Unload images
if self.images != []:
for image in self.images:
if image != None:
try:
bpy.data.images.remove(image)
except:
pass
if self.loaded_images != {}:
for key, image in self.loaded_images.items():
if image != None:
try:
bpy.data.images.remove(image)
except:
pass