Browse Source

Implement generic list add/remove operators

Currently, this only takes the place of the texture operators. Once the
generic UI code is done, this will be propagated throughout.
pull/104/head
Adam Johnson 6 years ago
parent
commit
1f37fae4a9
Signed by: Hoikas
GPG Key ID: 0B6515D6FF6F271E
  1. 2
      korman/operators/__init__.py
  2. 61
      korman/operators/op_texture.py
  3. 89
      korman/operators/op_ui.py
  4. 17
      korman/ui/ui_texture.py

2
korman/operators/__init__.py

@ -19,8 +19,8 @@ from . import op_mesh as mesh
from . import op_modifier as modifier
from . import op_nodes as nodes
from . import op_sound as sound
from . import op_texture as texture
from . import op_toolbox as toolbox
from . import op_ui as ui
from . import op_world as world
def register():

61
korman/operators/op_texture.py

@ -1,61 +0,0 @@
# This file is part of Korman.
#
# Korman is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Korman is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Korman. If not, see <http://www.gnu.org/licenses/>.
import bpy
from bpy.props import *
class TextureOperator:
@classmethod
def poll(cls, context):
return context.scene.render.engine == "PLASMA_GAME" and context.texture
class TextureCollectionAddOperator(TextureOperator, bpy.types.Operator):
bl_idname = "texture.plasma_collection_add"
bl_label = "Add Item"
bl_description = "Adds an item to the collection"
group = StringProperty(name="Modifier", description="Attribute name of the PropertyGroup")
collection = StringProperty(name="Collection", description="Attribute name of the collection property")
name_prefix = StringProperty(name="Name Prefix", description="Prefix for autogenerated item names", default="Item")
name_prop = StringProperty(name="Name Property", description="Attribute name of the item name property")
def execute(self, context):
mod = getattr(context.texture, self.group)
collection = getattr(mod, self.collection)
idx = len(collection)
collection.add()
if self.name_prop:
setattr(collection[idx], self.name_prop, "{} {}".format(self.name_prefix, idx+1))
return {"FINISHED"}
class TextureCollectionRemoveOperator(TextureOperator, bpy.types.Operator):
bl_idname = "texture.plasma_collection_remove"
bl_label = "Remove Item"
bl_description = "Removes an item from the collection"
group = StringProperty(name="Modifier", description="Attribute name of the PropertyGroup")
collection = StringProperty(name="Collection", description="Attribute name of the collection property")
index = IntProperty(name="Index", description="Item index to remove")
def execute(self, context):
mod = getattr(context.texture, self.group)
collection = getattr(mod, self.collection)
if len(collection) > self.index:
collection.remove(self.index)
return {"FINISHED"}
else:
return {"CANCELLED"}

89
korman/operators/op_ui.py

@ -0,0 +1,89 @@
# This file is part of Korman.
#
# Korman is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Korman is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Korman. If not, see <http://www.gnu.org/licenses/>.
import bpy
from bpy.props import *
class UIOperator:
@classmethod
def poll(cls, context):
return context.scene.render.engine == "PLASMA_GAME"
class CollectionAddOperator(UIOperator, bpy.types.Operator):
bl_idname = "ui.plasma_collection_add"
bl_label = "Add Item"
bl_description = "Adds an item to the collection"
context = StringProperty(name="ID Path",
description="Path to the relevant datablock from the current context",
options=set())
group_path = StringProperty(name="Property Group Path",
description="Path to the property group from the ID",
options=set())
collection_prop = StringProperty(name="Collection Property",
description="Name of the collection property",
options=set())
index_prop = StringProperty(name="Index Property",
description="Name of the active element index property",
options=set())
name_prefix = StringProperty(name="Name Prefix",
description="Prefix for autogenerated item names",
default="Item",
options=set())
name_prop = StringProperty(name="Name Property",
description="Attribute name of the item name property",
options=set())
def execute(self, context):
props = getattr(context, self.context).path_resolve(self.group_path)
collection = getattr(props, self.collection_prop)
idx = len(collection)
collection.add()
if self.name_prop:
setattr(collection[idx], self.name_prop, "{} {}".format(self.name_prefix, idx+1))
if self.index_prop:
setattr(props, self.index_prop, idx)
return {"FINISHED"}
class CollectionRemoveOperator(UIOperator, bpy.types.Operator):
bl_idname = "ui.plasma_collection_remove"
bl_label = "Remove Item"
bl_description = "Removes an item from the collection"
context = StringProperty(name="ID Path",
description="Path to the relevant datablock from the current context",
options=set())
group_path = StringProperty(name="Property Group Path",
description="Path to the property group from the ID",
options=set())
collection_prop = StringProperty(name="Collection Property",
description="Name of the collection property",
options=set())
index_prop = StringProperty(name="Index Property",
description="Name of the active element index property",
options=set())
def execute(self, context):
props = getattr(context, self.context).path_resolve(self.group_path)
collection = getattr(props, self.collection_prop)
index = getattr(props, self.index_prop)
if len(collection) > index:
collection.remove(index)
setattr(props, self.index_prop, index - 1)
return {"FINISHED"}
else:
return {"CANCELLED"}

17
korman/ui/ui_texture.py

@ -46,13 +46,16 @@ class PlasmaEnvMapPanel(TextureButtonsPanel, bpy.types.Panel):
row.template_list("VisRegionListUI", "vis_regions", layer_props, "vis_regions", layer_props, "active_region_index",
rows=2, maxrows=3)
col = row.column(align=True)
op = col.operator("texture.plasma_collection_add", icon="ZOOMIN", text="")
op.group = "plasma_layer"
op.collection = "vis_regions"
op = col.operator("texture.plasma_collection_remove", icon="ZOOMOUT", text="")
op.group = "plasma_layer"
op.collection = "vis_regions"
op.index = layer_props.active_region_index
op = col.operator("ui.plasma_collection_add", icon="ZOOMIN", text="")
op.context = "texture"
op.group_path = "plasma_layer"
op.collection_prop = "vis_regions"
op.index_prop = "active_region_index"
op = col.operator("ui.plasma_collection_remove", icon="ZOOMOUT", text="")
op.context = "texture"
op.group_path = "plasma_layer"
op.collection_prop = "vis_regions"
op.index_prop = "active_region_index"
rgns = layer_props.vis_regions
if layer_props.vis_regions:
layout.prop(rgns[layer_props.active_region_index], "control_region")

Loading…
Cancel
Save