Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'materials_utils/warning_messages_utils.py')
-rw-r--r--materials_utils/warning_messages_utils.py177
1 files changed, 177 insertions, 0 deletions
diff --git a/materials_utils/warning_messages_utils.py b/materials_utils/warning_messages_utils.py
new file mode 100644
index 00000000..595e0e31
--- /dev/null
+++ b/materials_utils/warning_messages_utils.py
@@ -0,0 +1,177 @@
+# gpl: author lijenstina
+# -*- coding: utf-8 -*-
+
+import bpy
+
+# -----------------------------------------------------------------------------
+# Globals #
+
+# change the name for the properties settings
+MAT_SPEC_NAME = "materials_specials"
+
+# collect messages for the report operator
+COLLECT_REPORT = []
+
+
+# -----------------------------------------------------------------------------
+# Functions #
+
+def warning_messages(operator=None, warn='DEFAULT', object_name="", is_mat=None, fake=""):
+ # Enter warning messages to the message dictionary
+ # warn - if nothing passed falls back to DEFAULT
+ # a list of strings can be passed and concatenated in obj_name too
+ # is_mat a switch to change to materials or textures for obj_name('MAT','TEX', 'FILE', None)
+ # fake - optional string that can be passed
+ # MAX_COUNT - max members of an list to be displayed
+
+ # pass the show_warnings bool to enable/disable them
+ addon = bpy.context.user_preferences.addons[MAT_SPEC_NAME]
+ show_warn = (addon.preferences.show_warnings if addon else False)
+
+ if show_warn and operator:
+ obj_name = ""
+ MAX_COUNT = 6
+ gramma_s, gramma_p = " - has ", " - have "
+
+ if is_mat:
+ if is_mat in ('MAT'):
+ gramma_s, gramma_p = " - Material has ", " - Materials have "
+ elif is_mat in ('TEX'):
+ gramma_s, gramma_p = " - Texture has ", " - Textures have "
+ elif is_mat in ('FILE'):
+ gramma_s, gramma_p = " - File ", " - Files "
+
+ # print the whole list in the console if abbreviated
+ obj_size_big = False
+
+ if object_name:
+ if type(object_name) is list:
+ obj_name = ", ".join(object_name)
+ obj_size = len(object_name)
+
+ # compare string list size
+ if (1 < obj_size <= MAX_COUNT):
+ obj_name = "{}{}".format(obj_name, gramma_p)
+ elif (obj_size > MAX_COUNT):
+ abbrevation = ("(Multiple)" if is_mat else "(Multiple Objects)")
+ obj_size_big = True
+ obj_name = "{}{}".format(abbrevation, gramma_p)
+ elif (obj_size == 1):
+ obj_name = "{}{}".format(obj_name, gramma_s)
+ else:
+ obj_name = "{}{}".format(object_name, gramma_s)
+
+ message = {
+ 'DEFAULT': "No editable selected objects, could not finish",
+ 'PLACEHOLDER': "{}{}".format(warn, " - Message key is not present in the warning_message_utils"),
+ 'RMV_EDIT': "{}{}".format(obj_name, "Unable to remove material slot in edit mode)"),
+ 'A_OB_MIX_NO_MAT': "{}{}".format(obj_name, "No Material applied. Object type can't have materials"),
+ 'A_MAT_NAME_EDIT': "{}{}".format(obj_name, " been applied to selection"),
+ 'C_OB_NO_MAT': "{}{}".format(obj_name, "No Materials. Unused material slots are "
+ "not cleaned"),
+ 'C_OB_MIX_NO_MAT': "{}{}".format(obj_name, "No Materials or an Object type that "
+ "can't have Materials (Clean Material Slots)"),
+ 'R_OB_NO_MAT': "{}{}".format(obj_name, "No Materials. Nothing to remove"),
+ 'R_OB_FAIL_MAT': "{}{}".format(obj_name, "Failed to remove materials - (Operator Error)"),
+ 'R_NO_SL_MAT': "No Selection. Material slots are not removed",
+ 'R_ALL_SL_MAT': "All materials removed from selected objects",
+ 'R_ALL_NO_MAT': "Object(s) have no materials to remove",
+ 'R_ACT_MAT': "{}{}".format(obj_name, "Removed active Material"),
+ 'R_ACT_MAT_ALL': "{}{}".format(obj_name, "Removed all Material from the Object"),
+ 'SL_MAT_BY_NAME': "{}{}{}".format("Objects with the Material ", obj_name, "been selected"),
+ 'OB_CANT_MAT': "{}{}".format(obj_name, "Object type that can't have Materials"),
+ 'REP_MAT_NONE': "Replace Material: No materials replaced",
+ 'FAKE_SET_ON': "{}{}{}".format(obj_name, "set Fake user ", fake),
+ 'FAKE_SET_OFF': "{}{}{}".format(obj_name, "disabled Fake user ", fake),
+ 'FAKE_NO_MAT': "Fake User Settings: Object(s) with no Materials or no changes needed",
+ 'CPY_MAT_MIX_OB': "Copy Materials to others: Some of the Object types can't have Materials",
+ 'CPY_MAT_ONE_OB': "Copy Materials to others: Only one object selected",
+ 'CPY_MAT_FAIL': "Copy Materials to others: (Operator Error)",
+ 'CPY_MAT_DONE': "Materials are copied from active to selected objects",
+ 'TEX_MAT_NO_SL': "Texface to Material: No Selected Objects",
+ 'TEX_MAT_NO_CRT': "{}{}".format(obj_name, "not met the conditions for the tool (UVs, Active Images)"),
+ 'MAT_TEX_NO_SL': "Material to Texface: No Selected Objects",
+ 'MAT_TEX_NO_MESH': "{}{}".format(obj_name, "not met the conditions for the tool (Mesh)"),
+ 'MAT_TEX_NO_MAT': "{}{}".format(obj_name, "not met the conditions for the tool (Material)"),
+ 'BI_SW_NODES_OFF': "Switching to Blender Render, Use Nodes disabled",
+ 'BI_SW_NODES_ON': "Switching to Blender Render, Use Nodes enabled",
+ 'CYC_SW_NODES_ON': "Switching back to Cycles, Use Nodes enabled",
+ 'CYC_SW_NODES_OFF': "Switching back to Cycles, Use Nodes disabled",
+ 'TEX_RENAME_F': "{}{}".format(obj_name, "no Images assigned, skipping"),
+ 'NO_TEX_RENAME': "No Textures in Data, nothing to rename",
+ 'DIR_PATH_W_ERROR': "ERROR: Directory without writing privileges",
+ 'DIR_PATH_N_ERROR': "ERROR: Directory not existing",
+ 'DIR_PATH_A_ERROR': "ERROR: Directory not accessible",
+ 'DIR_PATH_W_OK': "Directory has writing privileges",
+ 'DIR_PATH_CONVERT': "Conversion Cancelled. Problem with chosen Directory, check System Console",
+ 'MAT_LINK_ERROR': "{}{}".format(obj_name, "not be renamed or set as Base(s)"),
+ 'MAT_LINK_NO_NAME': "No Base name given, No changes applied",
+ 'MOVE_SLOT_UP': "{}{}".format(obj_name, "been moved on top of the stack"),
+ 'MOVE_SLOT_DOWN': "{}{}".format(obj_name, "been moved to the bottom of the stack"),
+ 'MAT_TRNSP_BACK': "{}{}".format(obj_name, "been set with Alpha connected to Front/Back Geometry node"),
+ 'E_MAT_TRNSP_BACK': "Transparent back (BI): Failure to set the action",
+ 'CONV_NO_OBJ_MAT': "{}{}".format(obj_name, "has no Materials. Nothing to convert"),
+ 'CONV_NO_SC_MAT': "No Materials in the Scene. Nothing to convert",
+ 'CONV_NO_SEL_MAT': "No Materials on Selected Objects. Nothing to convert",
+ }
+
+ # doh! did we passed an non existing dict key
+ warn = (warn if warn in message else 'PLACEHOLDER')
+
+ operator.report({'INFO'}, message[warn])
+
+ if obj_size_big is True:
+ print("\n** MATERIAL SPECIALS **: \n Full list for the Info message is: \n",
+ ", ".join(object_name), "\n")
+
+
+def collect_report(collection="", is_start=False, is_final=False):
+ # collection passes a string for appending to COLLECT_REPORT global
+ # is_final swithes to the final report with the operator in __init__
+ global COLLECT_REPORT
+
+ if is_start:
+ # there was a crash somewhere before the is_final call
+ COLLECT_REPORT = []
+
+ if collection and type(collection) is str:
+ COLLECT_REPORT.append(collection)
+ print(collection)
+
+ if is_final:
+ # final operator pass uses * as delimiter for splitting into new lines
+ messages = "*".join(COLLECT_REPORT)
+ bpy.ops.mat_converter.reports('INVOKE_DEFAULT', message=messages)
+ COLLECT_REPORT = []
+
+
+# -----------------------------------------------------------------------------
+# utility functions:
+
+def c_is_cycles_addon_enabled():
+ # checks if Cycles is enabled
+ # thanks to ideasman42
+ return ('cycles' in bpy.context.user_preferences.addons.keys())
+
+
+def c_data_has_materials():
+ # check for material presence in data
+ return (len(bpy.data.materials) > 0)
+
+
+def c_data_has_images():
+ # check for image presence in data
+ return (len(bpy.data.images) > 0)
+
+
+def register():
+ bpy.utils.register_module(__name__)
+ pass
+
+
+def unregister():
+ bpy.utils.unregister_module(__name__)
+ pass
+
+if __name__ == "__main__":
+ register()