Skip to content

Commit

Permalink
Feature #29 : Add presets to addon preferences
Browse files Browse the repository at this point in the history
  • Loading branch information
Gorgious56 committed Apr 26, 2022
1 parent d2d9fe2 commit 0f8855d
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 9 deletions.
18 changes: 17 additions & 1 deletion core/cache/prop.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from asset_browser_utilities.core.operator.operation import OperationSettings
from bpy.types import PropertyGroup
from bpy.props import PointerProperty
from bpy.props import PointerProperty, BoolProperty

from asset_browser_utilities.filter.main import AssetFilterSettings
from asset_browser_utilities.library.prop import LibraryExportSettings
Expand All @@ -17,6 +17,8 @@ class Cache(PropertyGroup):
catalog_settings: PointerProperty(type=CatalogExportSettings)
smart_tag_settings: PointerProperty(type=SmartTagPG)

show: BoolProperty()

def set(self, value):
for prop_name in self.__annotations__:
prop = getattr(self, prop_name)
Expand All @@ -28,3 +30,17 @@ def get(self, _type):
prop = getattr(self, prop_name)
if isinstance(prop, _type):
return prop

def draw(self, layout, context, header=None, rename=False):
if header is None:
header = self.name
row = layout.row(align=True)
if rename:
row.prop(self, "name")
row.prop(self, "show", toggle=True, text=header)
if self.show:
for attr in self.__annotations__:
default_setting = getattr(self, attr)
if hasattr(default_setting, "draw"):
default_setting.draw(layout, context)

24 changes: 24 additions & 0 deletions core/preferences/operator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from bpy.types import Operator
from bpy.props import IntProperty

from asset_browser_utilities.core.preferences.tool import get_preferences


class ABU_OT_presets_add_or_remove(Operator):
bl_idname = "abu.presets_add_or_remove"
bl_label = "Add Preset"
index: IntProperty()

def execute(self, context):
presets = get_preferences(context).presets
if self.index < 0:
new = presets.add()
new.name = "New Preset"
new.asset_filter_settings.filter_selection.allow = True
new.asset_filter_settings.filter_catalog_allow = True
else:
try:
presets.remove(self.index)
except IndexError:
pass
return {"FINISHED"}
21 changes: 13 additions & 8 deletions core/preferences/ui.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from bpy.types import AddonPreferences
from bpy.props import PointerProperty, BoolProperty
from bpy.props import PointerProperty, BoolProperty, CollectionProperty

from asset_browser_utilities.core.cache.prop import Cache

Expand All @@ -9,7 +9,7 @@ class AssetBrowserUtilitiesAddonPreferences(AddonPreferences):

cache: PointerProperty(type=Cache, options={"HIDDEN"})
defaults: PointerProperty(type=Cache)
show_defaults: BoolProperty(name="Set Operator Defaults")
presets: CollectionProperty(type=Cache)
show_custom_props: BoolProperty(
default=True,
name="Show Asset Custom Properties",
Expand All @@ -24,9 +24,14 @@ def draw(self, context):
self.defaults.asset_filter_settings.filter_catalog_allow = True

box = layout.box()
box.prop(self, "show_defaults", toggle=True)
if self.show_defaults:
for attr in self.defaults.__annotations__:
default_setting = getattr(self.defaults, attr)
if hasattr(default_setting, "draw"):
default_setting.draw(box, context)
self.defaults.draw(box, context, header="Set Defaults")

box = layout.box()
row = box.row(align=True)
row.label(text="Presets")
row.operator("abu.presets_add_or_remove", text="", icon="ADD").index = -1
for i, preset in enumerate(self.presets):
lay = box if preset.show else box.row(align=True)
preset.draw(lay, context, header="Expand", rename=True)
if not preset.show:
lay.operator("abu.presets_add_or_remove", text="", icon="REMOVE").index = i

0 comments on commit 0f8855d

Please sign in to comment.