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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-08-20 15:00:01 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-08-20 16:44:18 +0300
commit61ff578eab16ab627415e06c2a81b339d4be0f99 (patch)
tree6de272ee530948ab5782ec826215642f4a65b097 /release
parente6a81ad61ed60384762ef4f28d62bbad65bc8814 (diff)
UI: add URL presets
This adds a url-preset operator to simplify opening re-usable links. - Standard websites have their own tool-tip. - De-duplicate logic to get URL's that include version information. - Reporting bugs no longer needs to have all information included in the URL. D5498 by @luisbg with edits.
Diffstat (limited to 'release')
-rw-r--r--release/scripts/modules/bl_ui_utils/bug_report_url.py5
-rw-r--r--release/scripts/startup/bl_operators/wm.py106
-rw-r--r--release/scripts/startup/bl_ui/space_topbar.py32
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py14
4 files changed, 103 insertions, 54 deletions
diff --git a/release/scripts/modules/bl_ui_utils/bug_report_url.py b/release/scripts/modules/bl_ui_utils/bug_report_url.py
index be94b45c8ac..008eafc2c46 100644
--- a/release/scripts/modules/bl_ui_utils/bug_report_url.py
+++ b/release/scripts/modules/bl_ui_utils/bug_report_url.py
@@ -64,10 +64,7 @@ def url_prefill_from_blender(addon_info=None):
"\n"
"**Addon Information**\n"
)
- fh.write((
- "Name: {name} {version}\n"
- "Author: {author}\n").format(**addon_info)
- )
+ fh.write(addon_info)
fh.write(
"\n"
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index 67dcf37d89d..bf1c79e766f 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -846,6 +846,86 @@ class WM_OT_url_open(Operator):
return {'FINISHED'}
+class WM_OT_url_open_preset(Operator):
+ """Open a preset website in the web-browser"""
+ bl_idname = "wm.url_open_preset"
+ bl_label = "Open Preset Website"
+ bl_options = {'INTERNAL'}
+
+ type: EnumProperty(
+ name="Site",
+ items=lambda self, _context: (
+ item for (item, _) in WM_OT_url_open_preset.preset_items
+ ),
+ )
+
+ id: StringProperty(
+ name="Identifier",
+ description="Optional identifier",
+ )
+
+ def _url_from_bug(self, _context):
+ from bl_ui_utils.bug_report_url import url_prefill_from_blender
+ return url_prefill_from_blender()
+
+ def _url_from_bug_addon(self, _context):
+ from bl_ui_utils.bug_report_url import url_prefill_from_blender
+ return url_prefill_from_blender(addon_info=self.id)
+
+ def _url_from_release_notes(self, _context):
+ return "https://www.blender.org/download/releases/%d-%d/" % bpy.app.version[:2]
+
+ def _url_from_manual(self, _context):
+ if bpy.app.version_cycle in {"rc", "release"}:
+ manual_version = "%d.%d" % bpy.app.version[:2]
+ else:
+ manual_version = "dev"
+ return "https://docs.blender.org/manual/en/" + manual_version + "/"
+
+ # This list is: (enum_item, url) pairs.
+ # Allow dynamically extending.
+ preset_items = [
+ # Dynamic URL's.
+ (('BUG', "Bug",
+ "Report a bug with pre-filled version information"),
+ _url_from_bug),
+ (('BUG_ADDON', "Add-On Bug",
+ "Report a bug in an add-on"),
+ _url_from_bug_addon),
+ (('RELEASE_NOTES', "Release Notes",
+ "Read about whats new in this version of Blender"),
+ _url_from_release_notes),
+ (('MANUAL', "Manual",
+ "The reference manual for this version of Blender"),
+ _url_from_manual),
+
+ # Static URL's.
+ (('FUND', "Development Fund",
+ "The donation program to support maintenance and improvements"),
+ "https://fund.blender.org"),
+ (('BLENDER', "blender.org",
+ "Blender's official web-site"),
+ "https://www.blender.org"),
+ (('CREDITS', "Credits",
+ "Lists committers to Blender's source code"),
+ "https://www.blender.org/about/credits/"),
+ ]
+
+ def execute(self, context):
+ url = None
+ type = self.type
+ for (item_id, _, _), url in self.preset_items:
+ if item_id == type:
+ if callable(url):
+ url = url(self, context)
+ break
+
+ import webbrowser
+ webbrowser.open(url)
+
+ return {'FINISHED'}
+
+
class WM_OT_path_open(Operator):
"""Open a path in a file browser"""
bl_idname = "wm.path_open"
@@ -1808,23 +1888,13 @@ class WM_MT_splash(Menu):
if found_recent:
col2_title.label(text="Recent Files")
else:
- if bpy.app.version_cycle in {'rc', 'release'}:
- manual_version = '%d.%d' % bpy.app.version[:2]
- else:
- manual_version = 'dev'
# Links if no recent files
col2_title.label(text="Getting Started")
- col2.operator(
- "wm.url_open", text="Manual", icon='URL'
- ).url = "https://docs.blender.org/manual/en/" + manual_version + "/"
- col2.operator(
- "wm.url_open", text="Blender Website", icon='URL',
- ).url = "https://www.blender.org"
- col2.operator(
- "wm.url_open", text="Credits", icon='URL',
- ).url = "https://www.blender.org/about/credits/"
+ col2.operator("wm.url_open_preset", text="Manual", icon='URL').type = 'MANUAL'
+ col2.operator("wm.url_open_preset", text="Blender Website", icon='URL').type = 'BLENDER'
+ col2.operator("wm.url_open_preset", text="Credits", icon='URL').type = 'CREDITS'
layout.separator()
@@ -1837,12 +1907,9 @@ class WM_MT_splash(Menu):
col1.operator("wm.recover_last_session", icon='RECOVER_LAST')
col2 = split.column()
- col2.operator(
- "wm.url_open", text="Release Notes", icon='URL',
- ).url = "https://www.blender.org/download/releases/%d-%d/" % bpy.app.version[:2]
- col2.operator(
- "wm.url_open", text="Development Fund", icon='FUND'
- ).url = "https://fund.blender.org"
+
+ col2.operator("wm.url_open_preset", text="Release Notes", icon='URL').type = 'RELEASE_NOTES'
+ col2.operator("wm.url_open_preset", text="Development Fund", icon='FUND').type = 'FUND'
layout.separator()
layout.separator()
@@ -1908,6 +1975,7 @@ classes = (
WM_OT_owner_disable,
WM_OT_owner_enable,
WM_OT_url_open,
+ WM_OT_url_open_preset,
WM_OT_tool_set_by_id,
WM_OT_tool_set_by_index,
WM_OT_toolbar,
diff --git a/release/scripts/startup/bl_ui/space_topbar.py b/release/scripts/startup/bl_ui/space_topbar.py
index f735e7b770f..d0ad9a8f31e 100644
--- a/release/scripts/startup/bl_ui/space_topbar.py
+++ b/release/scripts/startup/bl_ui/space_topbar.py
@@ -344,18 +344,12 @@ class TOPBAR_MT_app_about(Menu):
def draw(self, _context):
layout = self.layout
- layout.operator(
- "wm.url_open", text="Release Notes", icon='URL',
- ).url = "https://www.blender.org/download/releases/%d-%d/" % bpy.app.version[:2]
+ layout.operator("wm.url_open_preset", text="Release Notes", icon='URL').type = 'RELEASE_NOTES'
layout.separator()
- layout.operator(
- "wm.url_open", text="Blender Website", icon='URL',
- ).url = "https://www.blender.org/"
- layout.operator(
- "wm.url_open", text="Credits", icon='URL',
- ).url = "https://www.blender.org/about/credits/"
+ layout.operator("wm.url_open_preset", text="Blender Website", icon='URL').type = 'BLENDER'
+ layout.operator("wm.url_open", text="Credits", icon='URL').type = 'CREDITS'
layout.separator()
@@ -370,9 +364,7 @@ class TOPBAR_MT_app_support(Menu):
def draw(self, _context):
layout = self.layout
- layout.operator(
- "wm.url_open", text="Development Fund", icon='FUND',
- ).url = "https://fund.blender.org"
+ layout.operator("wm.url_open_preset", text="Development Fund", icon='FUND').type = 'FUND'
layout.separator()
@@ -565,23 +557,13 @@ class TOPBAR_MT_help(Menu):
bl_label = "Help"
def draw(self, context):
- # If 'url_prefill_from_blender' becomes slow it could be made into a separate operator
- # to avoid constructing the bug report just to show this menu.
- from bl_ui_utils.bug_report_url import url_prefill_from_blender
-
layout = self.layout
show_developer = context.preferences.view.show_developer_ui
- if bpy.app.version_cycle in {'rc', 'release'}:
- manual_version = '%d.%d' % bpy.app.version[:2]
- else:
- manual_version = 'dev'
+ layout.operator("wm.url_open_preset", text="Manual", icon='HELP',).type = 'MANUAL'
layout.operator(
- "wm.url_open", text="Manual", icon='HELP',
- ).url = "https://docs.blender.org/manual/en/" + manual_version + "/"
- layout.operator(
"wm.url_open", text="Tutorials", icon='URL',
).url = "https://www.blender.org/tutorials"
layout.operator(
@@ -612,9 +594,7 @@ class TOPBAR_MT_help(Menu):
layout.separator()
- layout.operator(
- "wm.url_open", text="Report a Bug", icon='URL',
- ).url = url_prefill_from_blender()
+ layout.operator("wm.url_open_preset", text="Report a Bug", icon='URL').type = 'BUG'
layout.separator()
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index ce4a6fb835e..8ed8eb04898 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -1708,7 +1708,6 @@ class USERPREF_PT_addons(Panel):
def draw(self, context):
import os
import addon_utils
- from bl_ui_utils.bug_report_url import url_prefill_from_blender
layout = self.layout
@@ -1887,13 +1886,18 @@ class USERPREF_PT_addons(Panel):
).url = info["wiki_url"]
# Only add "Report a Bug" button if tracker_url is set
# or the add-on is bundled (use official tracker then).
- if info.get("tracker_url") or not user_addon:
+ if info.get("tracker_url"):
sub.operator(
"wm.url_open", text="Report a Bug", icon='URL',
- ).url = info.get(
- "tracker_url",
- url_prefill_from_blender(info),
+ ).url = info["tracker_url"]
+ elif not user_addon:
+ addon_info = ("Name: {} {}\nAuthor: {}\n").format(
+ info["name"], info["version"], info["author"])
+ props = sub.operator(
+ "wm.url_open_preset", text="Report a Bug", icon='URL',
)
+ props.type = 'BUG_ADDON'
+ props.id = addon_info
if user_addon:
sub.operator(
"preferences.addon_remove", text="Remove", icon='CANCEL',