148 lines
4.2 KiB
GDScript
148 lines
4.2 KiB
GDScript
@tool
|
|
class_name PixelPenState
|
|
extends Object
|
|
|
|
|
|
signal theme_changed
|
|
|
|
signal debug_log(key, value)
|
|
signal project_file_changed
|
|
signal project_saved(is_saved)
|
|
signal palette_changed
|
|
signal color_picked(color)
|
|
signal layer_image_changed(layer_uid)
|
|
signal layer_active_changed(layer_uid)
|
|
signal layer_visibility_changed(layer_uid, visible)
|
|
signal layer_items_changed
|
|
signal thumbnail_changed
|
|
signal edit_mode_changed(mode)
|
|
signal shorcut_changed
|
|
|
|
signal request_new_project
|
|
signal request_open_project
|
|
signal request_import_image
|
|
signal request_save_project
|
|
signal request_save_as_project
|
|
signal request_layer_properties(layer_uid)
|
|
|
|
signal tool_changed(tool_grup, tool_type, grab_active)
|
|
signal toolbox_just_changed(tool_type)
|
|
signal toolbox_shift_mode(active)
|
|
|
|
signal animation_about_to_play
|
|
|
|
# Minimum project version can be handle by current app version
|
|
# [project.compatibility_version < MIN_COMPATIBILITY ] > FAIL
|
|
const MIN_COMPATIBILITY = 3
|
|
const EDITOR_TITTLE = "Pixel Pen"
|
|
|
|
# load gif exporter module
|
|
var GIFExporter = load("res://addons/net.yarvis.pixel_pen/thirdparty/gdgifexporter/exporter.gd")
|
|
# load quantization module that you want to use
|
|
var MedianCutQuantization = load("res://addons/net.yarvis.pixel_pen/thirdparty/gdgifexporter/quantization/median_cut.gd")
|
|
|
|
|
|
var current_project : PixelPenProject:
|
|
set(v):
|
|
current_project = v
|
|
if v != null and v.file_path != "":
|
|
save_cache_project_config()
|
|
|
|
var userconfig : UserConfig:
|
|
get:
|
|
if userconfig == null:
|
|
userconfig = UserConfig.load_data()
|
|
return userconfig as UserConfig
|
|
|
|
## Call this when closing PixelPen editor window
|
|
func disconnect_all_signal():
|
|
var signals : Array[String] = [
|
|
"theme_changed",
|
|
"debug_log",
|
|
"project_file_changed",
|
|
"project_saved",
|
|
"palette_changed",
|
|
"color_picked",
|
|
"layer_image_changed",
|
|
"layer_active_changed",
|
|
"layer_visibility_changed",
|
|
"layer_items_changed",
|
|
"thumbnail_changed",
|
|
"edit_mode_changed",
|
|
"shorcut_changed",
|
|
"request_new_project",
|
|
"request_open_project",
|
|
"request_import_image",
|
|
"request_save_project",
|
|
"request_save_as_project",
|
|
"request_layer_properties",
|
|
"tool_changed",
|
|
"toolbox_just_changed",
|
|
"toolbox_shift_mode",
|
|
"animation_about_to_play"]
|
|
for i in range(signals.size()):
|
|
var connection_list : Array[Dictionary] = get_signal_connection_list(signals[i])
|
|
for connection in connection_list:
|
|
connection["signal"].disconnect(connection["callable"])
|
|
|
|
|
|
func load_project(file : String)->bool:
|
|
var erase_recent = func(file_path : String):
|
|
if userconfig.recent_projects.has(file_path):
|
|
userconfig.recent_projects.erase(file_path)
|
|
userconfig.save()
|
|
if file.get_extension() == "res":
|
|
if not ResourceLoader.exists(file):
|
|
erase_recent.call(file)
|
|
return false
|
|
for dependencies in ResourceLoader.get_dependencies(file):
|
|
if not ResourceLoader.exists(dependencies):
|
|
erase_recent.call(file)
|
|
return false
|
|
var res = ProjectPacker.load_project(file)
|
|
if res == null:
|
|
erase_recent.call(file)
|
|
return false
|
|
elif res and res is PixelPenProject:
|
|
var project_compat_version = res.get("compatibility_version")
|
|
if project_compat_version == null or MIN_COMPATIBILITY > project_compat_version:
|
|
erase_recent.call(file)
|
|
return false
|
|
current_project = res
|
|
current_project.is_saved = true
|
|
userconfig.insert_recent_projects(file)
|
|
current_project.sync_gui_palette(true)
|
|
project_file_changed.emit()
|
|
return true
|
|
erase_recent.call(file)
|
|
return false
|
|
|
|
|
|
func save_cache_project_config():
|
|
var p_path = ""
|
|
if current_project != null:
|
|
p_path = current_project.file_path
|
|
userconfig.last_open_path = p_path
|
|
userconfig.save()
|
|
|
|
|
|
func load_cache_project() -> bool:
|
|
if userconfig.last_open_path != "":
|
|
return load_project(userconfig.last_open_path)
|
|
return false
|
|
|
|
## Prevent running in development mode
|
|
func need_connection(window : Window):
|
|
var need := false
|
|
if window.has_method("is_window_running"):
|
|
need = window.is_window_running()
|
|
return need or not Engine.is_editor_hint()
|
|
|
|
|
|
func get_directory():
|
|
if current_project == null or current_project.file_path == "" or current_project.file_path.get_base_dir() == "":
|
|
if userconfig.default_workspace == null or userconfig.default_workspace == "":
|
|
return OS.get_system_dir(OS.SYSTEM_DIR_DOCUMENTS)
|
|
return userconfig.default_workspace
|
|
return current_project.file_path.get_base_dir()
|