Added custom cloud icon

This commit is contained in:
Sybren A. Stüvel 2016-07-08 17:00:44 +02:00
parent 2e617287fd
commit 250939dc32
3 changed files with 55 additions and 14 deletions

View File

@ -4,6 +4,7 @@ Separated from __init__.py so that we can import & run from non-Blender environm
""" """
import logging import logging
import os.path
import bpy import bpy
from bpy.types import AddonPreferences, Operator, WindowManager, Scene, PropertyGroup from bpy.types import AddonPreferences, Operator, WindowManager, Scene, PropertyGroup
@ -17,6 +18,8 @@ PILLAR_SERVER_URL = 'https://cloudapi.blender.org/'
ADDON_NAME = 'blender_cloud' ADDON_NAME = 'blender_cloud'
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
icons = None
def redraw(self, context): def redraw(self, context):
context.area.tag_redraw() context.area.tag_redraw()
@ -120,28 +123,28 @@ class BlenderCloudPreferences(AddonPreferences):
blender_id_profile = blender_id.get_active_profile() blender_id_profile = blender_id.get_active_profile()
if blender_id is None: if blender_id is None:
icon = 'ERROR' msg_icon = 'ERROR'
text = 'This add-on requires Blender ID' text = 'This add-on requires Blender ID'
help_text = 'Make sure that the Blender ID add-on is installed and activated' help_text = 'Make sure that the Blender ID add-on is installed and activated'
elif not blender_id_profile: elif not blender_id_profile:
icon = 'ERROR' msg_icon = 'ERROR'
text = 'You are logged out.' text = 'You are logged out.'
help_text = 'To login, go to the Blender ID add-on preferences.' help_text = 'To login, go to the Blender ID add-on preferences.'
elif bpy.app.debug and pillar.SUBCLIENT_ID not in blender_id_profile.subclients: elif bpy.app.debug and pillar.SUBCLIENT_ID not in blender_id_profile.subclients:
icon = 'QUESTION' msg_icon = 'QUESTION'
text = 'No Blender Cloud credentials.' text = 'No Blender Cloud credentials.'
help_text = ('You are logged in on Blender ID, but your credentials have not ' help_text = ('You are logged in on Blender ID, but your credentials have not '
'been synchronized with Blender Cloud yet. Press the Update ' 'been synchronized with Blender Cloud yet. Press the Update '
'Credentials button.') 'Credentials button.')
else: else:
icon = 'WORLD_DATA' msg_icon = 'WORLD_DATA'
text = 'You are logged in as %s.' % blender_id_profile.username text = 'You are logged in as %s.' % blender_id_profile.username
help_text = ('To logout or change profile, ' help_text = ('To logout or change profile, '
'go to the Blender ID add-on preferences.') 'go to the Blender ID add-on preferences.')
# Authentication stuff # Authentication stuff
auth_box = layout.box() auth_box = layout.box()
auth_box.label(text=text, icon=icon) auth_box.label(text=text, icon=msg_icon)
help_lines = textwrap.wrap(help_text, 80) help_lines = textwrap.wrap(help_text, 80)
for line in help_lines: for line in help_lines:
@ -151,18 +154,18 @@ class BlenderCloudPreferences(AddonPreferences):
# Texture browser stuff # Texture browser stuff
texture_box = layout.box() texture_box = layout.box()
texture_box.enabled = icon != 'ERROR' texture_box.enabled = msg_icon != 'ERROR'
sub = texture_box.column() sub = texture_box.column()
sub.label(text='Local directory for downloaded textures') sub.label(text='Local directory for downloaded textures', icon_value=icon('CLOUD'))
sub.prop(self, "local_texture_dir", text='Default') sub.prop(self, "local_texture_dir", text='Default')
sub.prop(context.scene, "local_texture_dir", text='Current scene') sub.prop(context.scene, "local_texture_dir", text='Current scene')
# Blender Sync stuff # Blender Sync stuff
bss = context.window_manager.blender_sync_status bss = context.window_manager.blender_sync_status
bsync_box = layout.box() bsync_box = layout.box()
bsync_box.enabled = icon != 'ERROR' bsync_box.enabled = msg_icon != 'ERROR'
row = bsync_box.row().split(percentage=0.33) row = bsync_box.row().split(percentage=0.33)
row.label('Blender Sync with Blender Cloud') row.label('Blender Sync with Blender Cloud', icon_value=icon('CLOUD'))
icon_for_level = { icon_for_level = {
'INFO': 'NONE', 'INFO': 'NONE',
@ -170,9 +173,9 @@ class BlenderCloudPreferences(AddonPreferences):
'ERROR': 'ERROR', 'ERROR': 'ERROR',
'SUBSCRIBE': 'ERROR', 'SUBSCRIBE': 'ERROR',
} }
icon = icon_for_level[bss.level] if bss.message else 'NONE' msg_icon = icon_for_level[bss.level] if bss.message else 'NONE'
message_container = row.row() message_container = row.row()
message_container.label(bss.message, icon=icon) message_container.label(bss.message, icon=msg_icon)
sub = bsync_box.column() sub = bsync_box.column()
@ -182,8 +185,8 @@ class BlenderCloudPreferences(AddonPreferences):
# Image Share stuff # Image Share stuff
share_box = layout.box() share_box = layout.box()
share_box.label('Image Sharing on Blender Cloud') share_box.label('Image Sharing on Blender Cloud', icon_value=icon('CLOUD'))
texture_box.enabled = icon != 'ERROR' texture_box.enabled = msg_icon != 'ERROR'
share_box.prop(self, 'open_browser_after_share') share_box.prop(self, 'open_browser_after_share')
def draw_subscribe_button(self, layout): def draw_subscribe_button(self, layout):
@ -284,6 +287,39 @@ def preferences() -> BlenderCloudPreferences:
return bpy.context.user_preferences.addons[ADDON_NAME].preferences return bpy.context.user_preferences.addons[ADDON_NAME].preferences
def load_custom_icons():
global icons
if icons is not None:
# Already loaded
return
import bpy.utils.previews
icons = bpy.utils.previews.new()
my_icons_dir = os.path.join(os.path.dirname(__file__), 'icons')
icons.load('CLOUD', os.path.join(my_icons_dir, 'icon-cloud.png'), 'IMAGE')
def unload_custom_icons():
global icons
if icons is None:
# Already unloaded
return
bpy.utils.previews.remove(icons)
icons = None
def icon(icon_name: str) -> int:
"""Returns the icon ID for the named icon.
Use with layout.operator('pillar.image_share', icon_value=icon('CLOUD'))
"""
return icons[icon_name].icon_id
def register(): def register():
bpy.utils.register_class(BlenderCloudPreferences) bpy.utils.register_class(BlenderCloudPreferences)
bpy.utils.register_class(PillarCredentialsUpdate) bpy.utils.register_class(PillarCredentialsUpdate)
@ -310,8 +346,12 @@ def register():
WindowManager.blender_sync_status = PointerProperty(type=SyncStatusProperties) WindowManager.blender_sync_status = PointerProperty(type=SyncStatusProperties)
load_custom_icons()
def unregister(): def unregister():
unload_custom_icons()
gui.unregister() gui.unregister()
bpy.utils.unregister_class(PillarCredentialsUpdate) bpy.utils.unregister_class(PillarCredentialsUpdate)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -256,7 +256,8 @@ def image_editor_menu(self, context):
box.enabled = False box.enabled = False
text = 'Save image before sharing on Blender Cloud' text = 'Save image before sharing on Blender Cloud'
props = box.operator(PILLAR_OT_image_share.bl_idname, text=text) props = box.operator(PILLAR_OT_image_share.bl_idname, text=text,
icon_value=blender.icon('CLOUD'))
props.target = 'DATABLOCK' props.target = 'DATABLOCK'
props.name = image.name props.name = image.name