*added "insert" menu to text view properties: it lists snippets from POV-Ray installation and inserts them at cursor's location when clicked

Probably needs Linux testing and will need subpaths to be more comfortable to use
This commit is contained in:
Maurice Raybaud 2017-06-26 23:03:37 +02:00
parent 809b3771f9
commit 1dd6f2a7e0
2 changed files with 108 additions and 3 deletions

View File

@ -40,7 +40,7 @@ if "bpy" in locals():
else:
import bpy
import addon_utils # To use some other addons
#import addon_utils # To use some other addons
import nodeitems_utils #for Nodes
from nodeitems_utils import NodeCategory, NodeItem #for Nodes
from bpy.types import (
@ -67,6 +67,7 @@ else:
def string_strip_hyphen(name):
return name.replace("-", "")
###############################################################################
# Scene POV properties.
###############################################################################
@ -2154,10 +2155,16 @@ class PovrayPreferences(AddonPreferences):
description="Path to renderer executable",
subtype='FILE_PATH',
)
docpath_povray = StringProperty(
name="Includes Location",
description="Path to Insert Menu files",
subtype='FILE_PATH',
)
def draw(self, context):
layout = self.layout
layout.prop(self, "branch_feature_set_povray")
layout.prop(self, "filepath_povray")
layout.prop(self, "docpath_povray")

View File

@ -19,6 +19,9 @@
# <pep8 compliant>
import bpy
import sys #really import here and in render.py?
import os #really import here and in render.py?
from os.path import isfile
# Use some of the existing buttons.
from bl_ui import properties_render
@ -181,6 +184,39 @@ def check_add_mesh_extra_objects():
if "add_mesh_extra_objects" in bpy.context.user_preferences.addons.keys():
return True
return False
def locate_docpath():
addon_prefs = bpy.context.user_preferences.addons[__package__].preferences
# Use the system preference if its set.
pov_documents = addon_prefs.docpath_povray
if pov_documents:
if os.path.exists(pov_documents):
return pov_documents
else:
print("User Preferences path to povray documents %r NOT FOUND, checking $PATH" % pov_documents)
# Windows Only
if sys.platform[:3] == "win":
import winreg
try:
win_reg_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
"Software\\POV-Ray\\v3.7\\Windows")
win_docpath = winreg.QueryValueEx(win_reg_key, "DocPath")[0]
pov_documents = os.path.join(win_docpath, "Insert Menu")
if os.path.exists(pov_documents):
return pov_documents
except FileNotFoundError:
return""
# search the path all os's
pov_documents_default = "include"
os_path_ls = os.getenv("PATH").split(':') + [""]
for dir_name in os_path_ls:
pov_documents = os.path.join(dir_name, pov_documents_default)
if os.path.exists(pov_documents):
return pov_documents
return ""
class RenderButtonsPanel():
bl_space_type = 'PROPERTIES'
@ -1761,6 +1797,54 @@ class CAMERA_PT_povray_replacement_text(CameraDataButtonsPanel, bpy.types.Panel)
col.label(text="Replace properties with:")
col.prop(cam.pov, "replacement_text", text="")
###############################################################################
# Text Povray Settings
###############################################################################
class TEXT_OT_povray_insert(bpy.types.Operator):
"""Tooltip"""
bl_idname = "text.povray_insert"
bl_label = "Insert"
filepath = bpy.props.StringProperty(name="Filepath", subtype='FILE_PATH')
@classmethod
def poll(cls, context):
# context.area.type == 'TEXT_EDITOR'
return bpy.ops.text.insert.poll()
def execute(self, context):
if self.filepath and isfile(self.filepath):
file = open(self.filepath, "r")
bpy.ops.text.insert(text=file.read())
# places the cursor at the end without scrolling -.-
# context.space_data.text.write(file.read())
file.close()
return {'FINISHED'}
def validinsert(ext):
return ext in {".txt",".inc",".pov"}
class TEXT_MT_insert(bpy.types.Menu):
bl_label = "Insert"
bl_idname = "TEXT_MT_insert"
def draw(self, context):
pov_documents = locate_docpath()
prop = self.layout.operator("wm.path_open", text="Open folder", icon='FILE_FOLDER')
prop.filepath = pov_documents
self.layout.separator()
list=[]
for root,dirs,files in os.walk(pov_documents):
list.append(root)
print(list)
self.path_menu(list,
"text.povray_insert",
#{"internal": True},
filter_ext= validinsert
)
class TEXT_PT_povray_custom_code(TextButtonsPanel, bpy.types.Panel):
bl_label = "POV-Ray"
@ -1773,9 +1857,23 @@ class TEXT_PT_povray_custom_code(TextButtonsPanel, bpy.types.Panel):
if text:
layout.prop(text.pov, "custom_code", text="Add as POV code")
pov_documents = locate_docpath()
if not pov_documents :
layout.label(text="Please configure ", icon="INFO")
layout.label(text="default pov include path ")
layout.label(text="in addon preferences")
#layout.separator()
layout.operator("wm.addon_userpref_show",
text="Go to Render: POV-Ray addon",
icon="PREFERENCES").module = "render_povray"
###############################################"
# Text editor templates.
#layout.separator()
else:
#print(pov_documents)
layout.menu(TEXT_MT_insert.bl_idname)
###############################################
# Text editor templates from header menu
class TEXT_MT_templates_pov(bpy.types.Menu):
bl_label = "POV-Ray"