Blender-Pipeline/UI/UI_helpDialog.py

430 lines
12 KiB
Python

####################################
# #
# COPYRIGHT NOTICE #
# #
# This file is a part of Victori- #
# ous Children Studio Organizer. #
# Or simply VCStudio. Copyright #
# of J.Y.Amihud. But don't be sad #
# because I released the entire #
# project under a GNU GPL license. #
# You may use Version 3 or later. #
# See www.gnu.org/licenses if your #
# copy has no License file. Please #
# note. Ones I used the GPL v2 for #
# it. It's no longer the case. #
# #
####################################
import os
import datetime
import json
from subprocess import *
# GTK module ( Graphical interface
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import GLib
from gi.repository import Gdk
import cairo
# Own modules
from settings import settings
from settings import talk
from settings import fileformats
from settings import oscalls
from project_manager import pm_project
#UI modules
from UI import UI_elements
from UI import UI_color
from UI import UI_math
from UI import UI_Markdown
# Studio
from studio import studio_dialogs
from studio import analytics
from studio import story
def layer(win, call):
##########################################################################
# This file will give the user documentation about various part of VCStudio
##########################################################################
# Determening whether we are in a Tiny mode or not. Whether to shrink
# everything or keep it full screen.
tiny = False
if win.current["w"] < 1280:
tiny = True
# Making the layer
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, win.current['w'],
win.current['h'])
layer = cairo.Context(surface)
#text setting
layer.select_font_face("Monospace", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
UI_color.set(layer, win, "dark_overdrop")
layer.rectangle(
0,
0,
win.current["w"],
win.current["h"],
)
layer.fill()
nodeX = 500
if tiny:
nodeX = 100
UI_color.set(layer, win, "node_background")
UI_elements.roundrect(layer, win,
100,
100,
nodeX,
win.current["h"]-200,
10)
# Exit button
def do():
win.current["calls"][call]["var"] = False
exitX = 560
if tiny:
exitX = 150
UI_elements.roundrect(layer, win,
exitX,
win.current["h"]-140,
40,
40,
10,
button=do,
icon="cancel",
tip=talk.text("cancel"))
x = 110
y = 170
width = nodeX - 20
height = win.current["h"]-270
# Search
if not tiny:
UI_elements.image(layer, win, "settings/themes/"\
+win.settings["Theme"]+"/icons/search.png",
x+width/4,
y-50,
40,
40)
UI_elements.text(layer, win, "in_help",
x+width/4+50,
y-50,
width/2-50,
40)
### MARKDOWN
UI_Markdown.draw(layer, win, "help_markdown",
nodeX+200,
100,
win.current["w"]-(nodeX+300),
win.current["h"]-200)
# Clip
UI_elements.roundrect(layer, win,
x,
y,
width,
height-60,
10,
fill=False)
layer.clip()
clip = [
x,
y,
width,
height-60]
# Little testing thing. Make it True to see where it's clipping.
if False:
# Background
UI_color.set(layer, win, "dark_overdrop")
layer.rectangle(x,y,width, height)
layer.fill()
# Setting up the scroll
if "help" not in win.scroll:
win.scroll["help"] = 0
current_Y = 0
# So for the help dialog there will be basically a list of documentations
# With links to the various documentation peaces. for this I will need to
# create a little dictionary
documentations = {
talk.text("readme"):[
["Markdown", "README.md"],
["icon", "scene"]
],
talk.text("license"):[
["Markdown", "LICENSE.md"],
["icon", "scene"]
],
talk.text("documentation_installation"):[
["Markdown", "wiki/docs/Installation.md"],
["video", "https://open.lbry.com/@blender-organizer:5/rnd0001-4061:1?r=7YADjAZEbHJg8n4qV5rAuBh5Hca7cZQK"],
["icon", "new"]
],
talk.text("documentation_project_manager"):[
["Markdown", "wiki/docs/Project-Manager.md"],
["video", "https://open.lbry.com/@blender-organizer:5/Victorious-Children-Studio-Organizer-%28-VCStudio-%29---Project-Manager-Tutorial---Creating-Projects---Scanning-the-OS---Settings:7?r=7YADjAZEbHJg8n4qV5rAuBh5Hca7cZQK"],
["icon", "configure_file"]
],
talk.text("documentation_story_editor"):[
["Markdown", "wiki/docs/Story-Editor.md"],
["icon", "node"]
],
talk.text("documentation_script_writer"):[
["Markdown", "wiki/docs/Script-Writer.md"],
["icon", "frase"]
],
talk.text("documentation_analytics"):[
["Markdown", "wiki/docs/Analytics.md"],
["icon", "analytics"]
],
talk.text("documentation_assets"):[
["Markdown", "wiki/docs/Assets.md"],
["update", "https://notabug.org/jyamihud/VCStudio/wiki/Version+20.1211+%28Asset+Manager+Alpha+++Default+Blend+Files++Project%27s+Settings%29"],
["icon", "obj"]
],
talk.text("documentation_link_assets"):[
["Markdown", "wiki/docs/LinkingAssets.md"],
["update", "https://notabug.org/jyamihud/VCStudio/wiki/Version+20.1263+%28+Linking+Assets+++Configuring+Assets+%29"],
["icon", "link"]
],
talk.text("documentation_render"):[
["Markdown", "wiki/docs/Rendering.md"],
["update", "https://notabug.org/jyamihud/VCStudio/wiki/Version+20.1266+%28+Rendering+Of+Shots+%29"],
["icon", "render"]
],
talk.text("documentation_multiuser"):[
["Markdown", "wiki/docs/Multiuser.md"],
["update", "https://notabug.org/jyamihud/VCStudio/wiki/Version+21.0"],
["icon", "multiuser"]
]
}
# Okay let's draw this crazy behimith.
if "current_help_selected" not in win.current:
win.current["current_help_selected"] = False
for name in documentations:
# Let's make the search work.
# First I want it to automatically select the stuff with the right name
if win.text["in_help"]["text"].lower() == name.lower():
win.current["current_help_selected"] = name
win.text["in_help"]["text"] = ""
# Now let's ignore all those not in the search
if win.text["in_help"]["text"] and win.text["in_help"]["text"].lower() not in name.lower():
continue
# let's simplify the name
doc = documentations[name]
# There will be a simple button. That will open one up.
def do():
win.text["in_help"]["text"] = ""
win.scroll["markdown"] = 0
if name != win.current["current_help_selected"]:
win.current["current_help_selected"] = name
else:
win.current["current_help_selected"] = False
# I want to make sure that there is no icon before making it
# be "question"
showicon = "question"
for entry in doc:
if entry[0] == "icon":
showicon = entry[1]
UI_elements.roundrect(layer, win,
x,
y+current_Y + win.scroll["help"],
width,
40,
10,
icon=showicon,
button=do,
tip=name)
# And a text. The name of the entry
if not tiny:
UI_color.set(layer, win, "text_normal")
layer.set_font_size(20)
layer.move_to(x+50,
y+current_Y + win.scroll["help"]+25)
layer.show_text(name)
# Now if it's selected we going to see what links are inside.
if name == win.current["current_help_selected"]:
# But first let's draw a roundrect arround the douche
UI_color.set(layer, win, "progress_background")
UI_elements.roundrect(layer, win,
x,
y+current_Y + win.scroll["help"],
width,
40,
10,
fill=False)
layer.stroke()
current_Y = current_Y + 50
# Let's not list all the entries.
for entry in doc:
if entry[0] == "Markdown":
win.current["mdfs"]["help_markdown"] = entry[1]
#win.current["current_help_selected"] = ""
continue
# icon do not show
elif entry[0] == "icon":
continue
# Launch button
def do():
oscalls.Open(entry[-1])
UI_elements.roundrect(layer, win,
x+10,
y+current_Y + win.scroll["help"],
width-20,
40,
10,
icon=entry[0],
button=do,
tip=entry[-1])
# And a text. The name of the entry
if not tiny:
UI_color.set(layer, win, "text_normal")
layer.set_font_size(20)
layer.move_to(x+70,
y+current_Y + win.scroll["help"]+25)
layer.show_text(talk.text("documentation_type_"+entry[0]))
current_Y = current_Y + 50
else:
current_Y = current_Y + 50
# Call
def do():
os.system("xdg-open https://meet.jit.si/VCStudioDevelopmentConference")
UI_elements.roundrect(layer, win,
x,
y+current_Y + win.scroll["help"],
width,
40,
10,
button=do,
icon="call",
tip=talk.text("contact_us_tip"))
UI_color.set(layer, win, "text_normal")
layer.set_font_size(20)
layer.move_to(x+50,
y+current_Y + win.scroll["help"]+25)
layer.show_text(talk.text("contact_us_now"))
current_Y = current_Y + 50
# Report Bug Button
def do():
os.system("xdg-open https://notabug.org/jyamihud/VCStudio/issues")
UI_elements.roundrect(layer, win,
x,
y+current_Y + win.scroll["help"],
width,
40,
10,
button=do,
icon="bug",
tip=talk.text("report_bug_tip"))
UI_color.set(layer, win, "text_normal")
layer.set_font_size(20)
layer.move_to(x+50,
y+current_Y + win.scroll["help"]+25)
layer.show_text(talk.text("report_bug_now"))
current_Y = current_Y + 50
###########################
UI_elements.scroll_area(layer, win, "help",
x,
y,
width,
height-60,
current_Y,
bar=True,
mmb=True,
url="help"
)
return surface