# THIS FILE IS A PART OF VCStudio # PYTHON 3 import os import datetime # 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 project_manager import pm_project #UI modules from UI import UI_elements from UI import UI_color # Studio from studio import studio_dialogs from studio import analytics def layer(win): # 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() UI_color.set(layer, win, "node_background") UI_elements.roundrect(layer, win, win.current["w"]/2-250, 100, 500, win.current["h"]-200, 10) # Exit button def do(): win.url = "story_editor" win.textactive = "" UI_elements.roundrect(layer, win, win.current["w"]/2+210, win.current["h"]-140, 40, 40, 10, button=do, icon="cancel", tip=talk.text("cancel")) # Clipping everything UI_elements.roundrect(layer, win, win.current["w"]/2-250, 100, 500, win.current["h"]-260, 10, fill=False) layer.clip() clip = [ win.current["w"]/2-250, 100, 500, win.current["h"]-260] # Setting up the scroll if "studio_settings" not in win.scroll: win.scroll["studio_settings"] = 0 current_Y = 0 # The max scroll value # Projectname UI_elements.image(layer, win, "settings/themes/"\ +win.settings["Theme"]+"/icons/analytics.png", win.current["w"]/2-240, 110 + current_Y + win.scroll["studio_settings"], 40, 40) UI_elements.text(layer, win, "Project_Name_setting", win.current["w"]/2-190, 110 + current_Y + win.scroll["studio_settings"], 420, 40, set_text=win.analytics["name"], tip=talk.text("project_name")) if win.text["Project_Name_setting"]["text"] != win.analytics["name"]: def do(): win.analytics["name"] = win.text["Project_Name_setting"]["text"] UI_elements.roundrect(layer, win, win.current["w"]/2-240+430, 110 + current_Y + win.scroll["studio_settings"], 40, 40, 10, button=do, icon="ok", tip=talk.text("checked")) current_Y += 50 # Director UI_elements.image(layer, win, "settings/themes/"\ +win.settings["Theme"]+"/icons/analytics.png", win.current["w"]/2-240, 110 + current_Y + win.scroll["studio_settings"], 40, 40) UI_elements.text(layer, win, "Project_Director_setting", win.current["w"]/2-190, 110 + current_Y + win.scroll["studio_settings"], 420, 40, set_text=win.analytics["director"], tip=talk.text("project_director")) if win.text["Project_Director_setting"]["text"] != win.analytics["director"]: def do(): win.analytics["director"] = win.text["Project_Director_setting"]["text"] UI_elements.roundrect(layer, win, win.current["w"]/2-240+430, 110 + current_Y + win.scroll["studio_settings"], 40, 40, 10, button=do, icon="ok", tip=talk.text("checked")) current_Y += 50 # Project Comment UI_elements.image(layer, win, "settings/themes/"\ +win.settings["Theme"]+"/icons/analytics.png", win.current["w"]/2-240, 110 + current_Y + win.scroll["studio_settings"], 40, 40) UI_elements.text(layer, win, "Project_status_setting", win.current["w"]/2-190, 110 + current_Y + win.scroll["studio_settings"], 420, 40, set_text=win.analytics["status"], tip=talk.text("project_status")) if win.text["Project_status_setting"]["text"] != win.analytics["status"]: def do(): win.analytics["status"] = win.text["Project_status_setting"]["text"] UI_elements.roundrect(layer, win, win.current["w"]/2-240+430, 110 + current_Y + win.scroll["studio_settings"], 40, 40, 10, button=do, icon="ok", tip=talk.text("checked")) current_Y += 50 # Banner / Background image settings. if os.path.exists(win.project+"/set/banner.png"): UI_elements.image(layer, win, win.project+"/set/banner.png", win.current["w"]/2-240, 110 + current_Y + win.scroll["studio_settings"], 480, 200, cell="settings_background") elif os.path.exists(win.project+"/py_data/banner.png"): UI_elements.image(layer, win, win.project+"/py_data/banner.png", win.current["w"]/2-240, 110 + current_Y + win.scroll["studio_settings"], 480, 200, cell="settings_background") else: UI_elements.image(layer, win, "icon.png", win.current["w"]/2-240, 110 + current_Y + win.scroll["studio_settings"], 480, 200, cell="settings_background") def do(): def after(win, var): try: if var: # Let's check that the selected if an image. for f in fileformats.images: if var.endswith(f): # Now let's copy the picture from whereever it is to be the new # banner. For this first of all I need to check whether it exists # inside the project. if os.path.exists(win.project+"/"+var): fr = win.project+"/"+var else: fr = var with open(fr, "rb") as in_file, open(win.project+"/set/banner.png", "wb") as out_file: out_file.write(in_file.read()) # Refrashing images win.images = {} break except: raise() studio_dialogs.file_select(win, "banner_editing", after, force=True) UI_elements.roundrect(layer, win, win.current["w"]/2-250, 100 + current_Y + win.scroll["studio_settings"], 500, 220, 10, button=do, fill=False, tip=talk.text("project_banner")) layer.stroke() current_Y += 220 # Start date and Deadline UI_elements.image(layer, win, "settings/themes/"\ +win.settings["Theme"]+"/icons/schedule.png", win.current["w"]/2-240, 110 + current_Y + win.scroll["studio_settings"], 40, 40) UI_elements.text(layer, win, "Project_startdate_setting", win.current["w"]/2-190, 110 + current_Y + win.scroll["studio_settings"], 200, 40, set_text=win.analytics["startdate"], tip=talk.text("project_startdate")) if win.text["Project_startdate_setting"]["text"] != win.analytics["startdate"]\ and analytics.ifdate(win.text["Project_startdate_setting"]["text"]): def do(): win.analytics["startdate"] = win.text["Project_startdate_setting"]["text"] # Refrashing the analytics analytics.save(win.project, win.analytics) win.analytics = analytics.load(win.project) UI_elements.roundrect(layer, win, win.current["w"]/2-240+210, 110 + current_Y + win.scroll["studio_settings"], 40, 40, 10, button=do, icon="ok", tip=talk.text("checked")) UI_elements.text(layer, win, "Project_deadline_setting", win.current["w"]/2-190+210, 110 + current_Y + win.scroll["studio_settings"], 200, 40, set_text=win.analytics["deadline"], tip=talk.text("project_deadline")) if win.text["Project_deadline_setting"]["text"] != win.analytics["deadline"]\ and analytics.ifdate(win.text["Project_deadline_setting"]["text"]): def do(): win.analytics["deadline"] = win.text["Project_deadline_setting"]["text"] # Refrashing the analytics analytics.save(win.project, win.analytics) win.analytics = analytics.load(win.project) UI_elements.roundrect(layer, win, win.current["w"]/2-240+420, 110 + current_Y + win.scroll["studio_settings"], 40, 40, 10, button=do, icon="ok", tip=talk.text("checked")) current_Y += 100 # Username UI_elements.image(layer, win, "settings/themes/"\ +win.settings["Theme"]+"/icons/user.png", win.current["w"]/2-240, 110 + current_Y + win.scroll["studio_settings"], 40, 40) UI_elements.text(layer, win, "Username_setting", win.current["w"]/2-190, 110 + current_Y + win.scroll["studio_settings"], 420, 40, set_text=win.settings["Username"], tip=talk.text("username")) if win.text["Username_setting"]["text"] != win.settings["Username"]: def do(): win.settings["Username"] = win.text["Username_setting"]["text"] settings.write("Username", win.settings["Username"]) UI_elements.roundrect(layer, win, win.current["w"]/2-240+430, 110 + current_Y + win.scroll["studio_settings"], 40, 40, 10, button=do, icon="ok", tip=talk.text("checked")) current_Y += 50 # Preparing lists. if "settings_lists" not in win.current: win.current["settings_lists"] = {} win.current["settings_lists"]["languages"] = settings.list_languages() win.current["settings_lists"]["languages_open"] = False # Languages def do(): win.current["settings_lists"]["languages_open"] = \ not win.current["settings_lists"]["languages_open"] UI_elements.roundrect(layer, win, win.current["w"]/2-240, 110 + current_Y + win.scroll["studio_settings"], 450, 40, 10, button=do, icon="font", tip=talk.text("change_language")) UI_color.set(layer, win, "text_normal") layer.set_font_size(20) layer.move_to(win.current["w"]/2-180, current_Y + win.scroll["studio_settings"] + 135) layer.show_text(win.settings["Language"]) current_Y += 50 if win.current["settings_lists"]["languages_open"]: for lang in win.current["settings_lists"]["languages"]: if lang != win.settings["Language"]: UI_color.set(layer, win, "button_active") layer.move_to(win.current["w"]/2-227, 102 + current_Y + win.scroll["studio_settings"]) layer.line_to(win.current["w"]/2-227, 152 + current_Y + win.scroll["studio_settings"]) layer.stroke() def do(): win.settings["Language"] = lang settings.write("Language", lang) win.current["settings_lists"]["languages_open"] = False UI_elements.roundrect(layer, win, win.current["w"]/2-220, 110 + current_Y + win.scroll["studio_settings"], 430, 40, 10, button=do, icon="font", tip=talk.text("set_language")+lang) UI_color.set(layer, win, "text_normal") layer.set_font_size(20) layer.move_to(win.current["w"]/2-150, current_Y + win.scroll["studio_settings"] + 135) layer.show_text(lang) current_Y += 50 # BLUR blur_ok = "unchecked" if win.settings["Blur"]: blur_ok = "checked" def do(): win.settings["Blur"] = not win.settings["Blur"] settings.write("Blur", win.settings["Blur"]) UI_elements.roundrect(layer, win, win.current["w"]/2-240, 110 + current_Y + win.scroll["studio_settings"], 450, 40, 10, button=do, icon=blur_ok, tip=talk.text("Blur")) UI_color.set(layer, win, "text_normal") layer.set_font_size(20) layer.move_to(win.current["w"]/2-180, current_Y + win.scroll["studio_settings"] + 135) layer.show_text(talk.text("Blur")) current_Y += 50 if win.settings["Blur"]: ablur_ok = "unchecked" if win.settings["Auto_De-Blur"]: ablur_ok = "checked" def do(): win.settings["Auto_De-Blur"] = not win.settings["Auto_De-Blur"] settings.write("Auto_De-Blur", win.settings["Auto_De-Blur"]) UI_elements.roundrect(layer, win, win.current["w"]/2-240, 110 + current_Y + win.scroll["studio_settings"], 450, 40, 10, button=do, icon=ablur_ok, tip=talk.text("Auto_De-Blur")) UI_color.set(layer, win, "text_normal") layer.set_font_size(20) layer.move_to(win.current["w"]/2-180, current_Y + win.scroll["studio_settings"] + 135) layer.show_text(talk.text("Auto_De-Blur")) current_Y += 50 UI_elements.scroll_area(layer, win, "studio_settings", int(win.current["w"]/2-250), 100, 500, win.current["h"]-260, current_Y, bar=True, mmb=True, url="settings_layer" ) return surface