mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-10 15:22:04 +00:00
116 lines
4 KiB
Python
116 lines
4 KiB
Python
# vim:ts=4:et
|
|
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
#
|
|
# This program 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 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program 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 this program; if not, write to the Free Software Foundation,
|
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
#
|
|
# ##### END GPL LICENSE BLOCK #####
|
|
|
|
# copied from io_scene_obj
|
|
|
|
# <pep8 compliant>
|
|
|
|
bl_info = {
|
|
"name": "Quake map format",
|
|
"author": "Bill Currie",
|
|
"blender": (2, 80, 0),
|
|
"api": 35622,
|
|
"location": "File > Import-Export",
|
|
"description": "Import-Export Quake maps",
|
|
"warning": "not even alpha",
|
|
"wiki_url": "",
|
|
"tracker_url": "",
|
|
# "support": 'OFFICIAL',
|
|
"category": "Import-Export"}
|
|
|
|
submodule_names = (
|
|
"entity",
|
|
"entityclass",
|
|
"export_map",
|
|
"import_map",
|
|
"init",
|
|
"map",
|
|
"qfplist",
|
|
"quakechr",
|
|
"quakepal",
|
|
"wad",
|
|
)
|
|
|
|
import bpy
|
|
from bpy.props import PointerProperty
|
|
from bpy.utils import register_class, unregister_class
|
|
|
|
import importlib
|
|
import sys
|
|
|
|
registered_submodules = []
|
|
|
|
# When the addon is reloaded, this module gets reloaded, however none
|
|
# of the other modules from this addon get reloaded. As a result, they
|
|
# don't call register_submodules (only run when the module is loaded) and
|
|
# thus they don't end up registering everything.
|
|
#
|
|
# This is set before any loading starts (in register), to a set of all the
|
|
# names of the modules loaded as of when loading starts. While doing the
|
|
# module loading, check if a module is present in this list. If so, reload
|
|
# it and remove it from the set (to prevent it from getting reloaded twice).
|
|
preloaded_modules = None
|
|
|
|
def register_submodules(name, submodule_names):
|
|
global preloaded_modules
|
|
module = __import__(name=name, fromlist=submodule_names)
|
|
submodules = [getattr(module, name) for name in submodule_names]
|
|
for mod in submodules:
|
|
# Look through the modules present when register was called. If this
|
|
# module was already loaded, then reload it.
|
|
if mod.__name__ in preloaded_modules:
|
|
mod = importlib.reload(mod)
|
|
# Prevent the module from getting reloaded more than once
|
|
preloaded_modules.remove(mod.__name__)
|
|
m = [(),(),()]
|
|
if hasattr(mod, "classes_to_register"):
|
|
m[0] = mod.classes_to_register
|
|
for cls in mod.classes_to_register:
|
|
register_class(cls)
|
|
if hasattr(mod, "menus_to_register"):
|
|
m[1] = mod.menus_to_register
|
|
for menu in mod.menus_to_register:
|
|
menu[0].append(menu[1])
|
|
if hasattr(mod, "custom_properties_to_register"):
|
|
for prop in mod.custom_properties_to_register:
|
|
setattr(prop[0], prop[1], PointerProperty(type=prop[2]))
|
|
if hasattr(mod, "handlers_to_register"):
|
|
m[2] = mod.handlers_to_register
|
|
for handler in mod.handlers_to_register:
|
|
getattr(bpy.app.handlers, handler[0]).append(handler[1])
|
|
if m[0] or m[1] or m[2]:
|
|
registered_submodules.append(m)
|
|
|
|
def register():
|
|
global preloaded_modules
|
|
preloaded_modules = set(sys.modules.keys())
|
|
register_submodules(__name__, submodule_names)
|
|
preloaded_modules = None
|
|
|
|
def unregister():
|
|
for mod in reversed(registered_submodules):
|
|
for handler in reversed(mod[2]):
|
|
getattr(bpy.app.handlers, handler[0]).remove(handler[1])
|
|
for menu in reversed(mod[1]):
|
|
menu[0].remove(menu[1])
|
|
for cls in reversed(mod[0]):
|
|
unregister_class(cls)
|
|
|
|
if __name__ == "__main__":
|
|
register()
|