Skip to content
Snippets Groups Projects
ui_panels.py 82.9 KiB
Newer Older
Vilem Duha's avatar
Vilem Duha committed
# ##### 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 #####

from blenderkit import paths, ratings, ratings_utils, utils, download, categories, icons, search, resolutions, ui, \
    tasks_queue, \
    autothumb, upload
Vilem Duha's avatar
Vilem Duha committed

from bpy.types import (
    Panel
)
from bpy.props import (
    IntProperty,
    FloatProperty,
    FloatVectorProperty,
    StringProperty,
    EnumProperty,
    BoolProperty,
    PointerProperty,
)
Vilem Duha's avatar
Vilem Duha committed

import bpy
import os
import random
Vilém Duha's avatar
Vilém Duha committed
import logging
Vilém Duha's avatar
Vilém Duha committed
bk_logger = logging.getLogger('blenderkit')

Vilem Duha's avatar
Vilem Duha committed

#   this was moved to separate interface:

def draw_ratings(layout, context, asset):
Vilem Duha's avatar
Vilem Duha committed
    # layout.operator("wm.url_open", text="Read rating instructions", icon='QUESTION').url = 'https://support.google.com/?hl=en'
Vilém Duha's avatar
Vilém Duha committed
    # the following shouldn't happen at all in an optimal case,
    # this function should run only when asset was already checked to be existing
    if asset == None:
        return;
Vilém Duha's avatar
Vilém Duha committed

    col = layout.column()
Vilem Duha's avatar
Vilem Duha committed
    bkit_ratings = asset.bkit_ratings

    # layout.template_icon_view(bkit_ratings, property, show_labels=False, scale=6.0, scale_popup=5.0)

    row = col.row()
    row.prop(bkit_ratings, 'rating_quality_ui', expand=True, icon_only=True, emboss=False)
    if bkit_ratings.rating_quality > 0:
        col.separator()
        col.prop(bkit_ratings, 'rating_work_hours')
    # w = context.region.width
Vilém Duha's avatar
Vilém Duha committed
    # layout.label(text='problems')
    # layout.prop(bkit_ratings, 'rating_problems', text='')
    # layout.label(text='compliments')
    # layout.prop(bkit_ratings, 'rating_compliments', text='')
    # row = layout.row()
    # op = row.operator("object.blenderkit_rating_upload", text="Send rating", icon='URL')
    # return op
Vilém Duha's avatar
Vilém Duha committed
    # re-enable layout if included in longer panel
def draw_not_logged_in(source, message='Please Login/Signup to use this feature'):
    title = "You aren't logged in"
Vilém Duha's avatar
Vilém Duha committed
    def draw_message(source, context):
        layout = source.layout
        utils.label_multiline(layout, text=message)
Vilém Duha's avatar
Vilém Duha committed
        draw_login_buttons(layout)
Vilém Duha's avatar
Vilém Duha committed
    bpy.context.window_manager.popup_menu(draw_message, title=title, icon='INFO')
Vilem Duha's avatar
Vilem Duha committed
def draw_upload_common(layout, props, asset_type, context):
    op = layout.operator("wm.url_open", text=f"Read {asset_type.lower()} upload instructions",
Vilem Duha's avatar
Vilem Duha committed
                         icon='QUESTION')
    if asset_type == 'MODEL':
        op.url = paths.BLENDERKIT_MODEL_UPLOAD_INSTRUCTIONS_URL
    if asset_type == 'MATERIAL':
        op.url = paths.BLENDERKIT_MATERIAL_UPLOAD_INSTRUCTIONS_URL
    if asset_type == 'BRUSH':
        op.url = paths.BLENDERKIT_BRUSH_UPLOAD_INSTRUCTIONS_URL
    if asset_type == 'SCENE':
        op.url = paths.BLENDERKIT_SCENE_UPLOAD_INSTRUCTIONS_URL
    if asset_type == 'HDR':
        op.url = paths.BLENDERKIT_HDR_UPLOAD_INSTRUCTIONS_URL
Vilem Duha's avatar
Vilem Duha committed

    row = layout.row(align=True)
    if props.upload_state != '':
        utils.label_multiline(layout, text=props.upload_state, width=context.region.width)
Vilem Duha's avatar
Vilem Duha committed
    if props.uploading:
        op = layout.operator('object.kill_bg_process', text="", icon='CANCEL')
        op.process_source = asset_type
        op.process_type = 'UPLOAD'
        layout = layout.column()
        layout.enabled = False
    # if props.upload_state.find('Error') > -1:
    #     layout.label(text = props.upload_state)

    if props.asset_base_id == '':
        optext = 'Upload %s' % asset_type.lower()
        op = layout.operator("object.blenderkit_upload", text=optext, icon='EXPORT')
        op.asset_type = asset_type
        op.reupload = False
        # make sure everything gets uploaded.
        op.main_file = True
        op.metadata = True
        op.thumbnail = True
Vilem Duha's avatar
Vilem Duha committed

    if props.asset_base_id != '':
        op = layout.operator("object.blenderkit_upload", text='Reupload asset', icon='EXPORT')
Vilem Duha's avatar
Vilem Duha committed
        op.asset_type = asset_type
        op.reupload = True

Vilem Duha's avatar
Vilem Duha committed
        op = layout.operator("object.blenderkit_upload", text='Upload as new asset', icon='EXPORT')
        op.asset_type = asset_type
        op.reupload = False
        # layout.label(text = 'asset id, overwrite only for reuploading')
        layout.label(text='asset has a version online.')
        # row = layout.row()
        # row.enabled = False
        # row.prop(props, 'asset_base_id', icon='FILE_TICK')
        # row = layout.row()
        # row.enabled = False
        # row.prop(props, 'id', icon='FILE_TICK')
Vilem Duha's avatar
Vilem Duha committed
    layout.prop(props, 'category')
    if props.category != 'NONE' and props.subcategory != 'NONE':
Vilem Duha's avatar
Vilem Duha committed
        layout.prop(props, 'subcategory')
    if props.subcategory != 'NONE' and props.subcategory1 != 'NONE':
        layout.prop(props, 'subcategory1')
    layout.prop(props, 'is_private', expand=True)
    if props.is_private == 'PUBLIC':
        layout.prop(props, 'license')
        layout.prop(props, 'is_free', expand=True)
    prop_needed(layout, props, 'name', props.name)
    if props.is_private == 'PUBLIC':
        prop_needed(layout, props, 'description', props.description)
        prop_needed(layout, props, 'tags', props.tags)
    else:
        layout.prop(props, 'description')
        layout.prop(props, 'tags')
Vilém Duha's avatar
Vilém Duha committed

Vilem Duha's avatar
Vilem Duha committed
def poll_local_panels():
    user_preferences = bpy.context.preferences.addons['blenderkit'].preferences
    return user_preferences.panel_behaviour == 'BOTH' or user_preferences.panel_behaviour == 'LOCAL'


def prop_needed(layout, props, name, value='', is_not_filled=''):
Vilem Duha's avatar
Vilem Duha committed
    row = layout.row()
    if value == is_not_filled:
        # row.label(text='', icon = 'ERROR')
        icon = 'ERROR'
        row.alert = True
Vilém Duha's avatar
Vilém Duha committed
        row.prop(props, name)  # , icon=icon)
        row.alert = False
Vilem Duha's avatar
Vilem Duha committed
    else:
        # row.label(text='', icon = 'FILE_TICK')
        icon = None
        row.prop(props, name)

def draw_panel_hdr_upload(self, context):
    layout = self.layout
    ui_props = bpy.context.scene.blenderkitUI

    # layout.prop_search(ui_props, "hdr_upload_image", bpy.data, "images")
    layout.prop(ui_props, "hdr_upload_image")

    hdr = utils.get_active_HDR()

    if hdr is not None:
        props = hdr.blenderkit

        layout = self.layout

        draw_upload_common(layout, props, 'HDR', context)


def draw_panel_hdr_search(self, context):
    s = context.scene
    props = s.blenderkit_HDR

Loading
Loading full blame...