initial code for namespace prefix lists

This commit is contained in:
Pullusb
2022-10-03 00:08:10 +02:00
parent 050e8a405e
commit 43a28876d1
3 changed files with 165 additions and 6 deletions
+139 -3
View File
@@ -4,7 +4,7 @@ bl_info = {
"name": "GP toolbox",
"description": "Tool set for Grease Pencil in animation production",
"author": "Samuel Bernou, Christophe Seux",
"version": (2, 0, 3),
"version": (2, 0, 4),
"blender": (2, 91, 0),
"location": "Sidebar (N menu) > Gpencil > Toolbox / Gpencil properties",
"warning": "",
@@ -52,14 +52,21 @@ from .OP_pseudo_tint import GPT_OT_auto_tint_gp_layers
from . import UI_tools
from .properties import GP_PG_ToolsSettings, GP_PG_FixSettings
from .properties import (
GP_PG_ToolsSettings,
GP_PG_FixSettings,
GP_PG_namespace_props,
GP_PG_namespaces,
)
from bpy.props import (FloatProperty,
BoolProperty,
EnumProperty,
StringProperty,
IntProperty)
IntProperty,
PointerProperty
)
import bpy
import os
@@ -103,6 +110,110 @@ def remap_on_save_update(self, context):
# kmi.active = self.use_precise_eraser
class GPTB_OT_add_namespace_prefix(bpy.types.Operator):
bl_idname = "gptb.add_namespace_prefix"
bl_label = "Add"
bl_description = "Add item in list"
bl_options = {'REGISTER', 'INTERNAL'}
idx : bpy.props.IntProperty()
new : bpy.props.BoolProperty(default=True, options={'SKIP_SAVE'})
def invoke(self, context, event):
self.pg = get_addon_prefs().user_prefixes
# self.pg.namespaces.add()
# return {'FINISHED'}# can just add empty entry and leave...
if self.new:
self.pg.namespaces.add()
self.idx = len(self.pg.namespaces) - 1
return context.window_manager.invoke_props_dialog(self, width=650)
def draw(self, context):
import re
layout = self.layout
# layout.use_property_split = True
item = self.pg.namespaces[self.idx]
layout.label(text='Enter prefix:', icon='INFO')
layout.prop(item, 'prefix')
if item.prefix and not re.match(r'^[A-Z]{2}$', item.prefix):
layout.label(text='Prefix are preferably two capital letter (ex: CO)', icon='ERROR')
layout.separator()
layout.label(text='Provide a name (Optional):', icon='INFO')
layout.prop(item, 'name')
def execute(self, context):
item = self.pg.namespaces[self.idx]
## Here can perform post add checks
# (check for duplicate ?)
# all_prefix = [n.prefix for i, n in enumerate(self.pg.namespaces) if i != self.pg.idx]
if self.new:
# in case of new addition, remove just added if nothing specified
if not item.prefix and not item.name:
self.pg.dirs.remove(self.idx)
context.area.tag_redraw()
return {'FINISHED'}
class GPTB_OT_move_item(bpy.types.Operator):
bl_idname = "gptb.move_item"
bl_label = "Move Item"
bl_description = "Move item in list up or down"
bl_options = {'REGISTER', 'INTERNAL'}
# direction : bpy.props.IntProperty(default=1)
direction : bpy.props.EnumProperty(
items=(
('UP', 'Move Up', 'Move up'),
('DOWN', 'Move down', 'Move down'),
),
default='UP',
)
# prop_name : bpy.props.StringProperty()
def execute(self, context):
pg = get_addon_prefs().user_prefixes
# uilist = getattr(pg, self.prop_name)
uilist = pg.namespaces
index = pg.idx
neighbor = index + (-1 if self.direction == 'UP' else 1)
uilist.move(neighbor, index)
list_length = len(uilist) - 1 # (index starts at 0)
new_index = index + (-1 if self.direction == 'UP' else 1)
list_index = max(0, min(new_index, list_length))
# index = list_index
# setattr(pg, self.prop_name + '_idx', list_index)
setattr(pg, 'idx', list_index)
return {'FINISHED'}
class GPTB_UL_namespace_list(bpy.types.UIList):
# show_desc : BoolProperty(name="Show Description", default=True,
# description="Display Description")
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
# self.use_filter_show = True # force open/close the search feature
# prefs = get_addon_prefs()
# split = layout.split(align=False, factor=0.3)
row = layout.row()
ico = 'HIDE_ON' if item.hide else 'HIDE_OFF'
row.prop(item, 'hide', text='', icon=ico, invert_checkbox=True)
row.prop(item, 'prefix', text='')
row.prop(item, 'name', text='')
# row = layout.split(align=False)
# row.label(text=item.prefix)
# row.label(text=item.name)
# if self.show_desc:
# row.label(text=item.description)
# row.operator('sbam.open_online_repo', text='', icon='URL')
class GPTB_prefs(bpy.types.AddonPreferences):
bl_idname = __name__
@@ -213,6 +324,9 @@ class GPTB_prefs(bpy.types.AddonPreferences):
name="Layers Prefixes",
description="List of prefixes (two capital letters) available for layers(ex: AN,CO,CL)",
default="", maxlen=0)
# user_prefixes : PointerProperty(type=GP_PG_namespaces)
### proj_prefixes : PointerProperty(type=GP_PG_namespaces) # Store in the same list ?
suffixes : StringProperty(
name="Layers Suffixes",
@@ -397,6 +511,7 @@ class GPTB_prefs(bpy.types.AddonPreferences):
subbox.label(text='Namespace:')
subbox.prop(self, 'separator')
subbox.prop(self, 'show_prefix_buttons', text='Use Prefixes Toggles')
if self.show_prefix_buttons:
# subbox.prop(self, 'use_env_namespace')
row = subbox.row()
@@ -405,6 +520,22 @@ class GPTB_prefs(bpy.types.AddonPreferences):
row = subbox.row()
row.prop(self, 'suffixes')
row.operator('prefs.reset_gp_toolbox_env', text='', icon='LOOP_BACK').mode = 'SUFFIXES'
## Collection UI list version # WIP # TODO
"""
pg = self.user_prefixes
row = subbox.row(align=True)
row.template_list("GPTB_UL_namespace_list", "", pg, "namespaces", pg, "idx", rows=6)
subcol = row.column(align=True) # Lateral right
subcol.operator("gptb.add_namespace_prefix", icon="PLUS", text="")
subcol.separator()
op_move = subcol.operator("gptb.move_item", icon="TRIA_UP", text="")
# op_move.prop_name = 'namespaces'
op_move.direction = 'UP'
op_move = subcol.operator("gptb.move_item", icon="TRIA_DOWN", text="")
# op_move.prop_name = 'namespaces'
op_move.direction = 'DOWN'
"""
### TODO add render settings
@@ -677,6 +808,11 @@ class GPTB_set_env_settings(bpy.types.Operator):
classes = (
# GP_PG_namespace_props,
# GP_PG_namespaces,
# GPTB_OT_add_namespace_prefix,
# GPTB_OT_move_item,
# GPTB_UL_namespace_list,
GP_PG_FixSettings,
GP_PG_ToolsSettings,
GPTB_set_env_settings,