mirror of
https://github.com/Relintai/pandemonium_cms.git
synced 2024-11-12 09:35:02 +01:00
Added an WebPageEntryImage with an editor.
This commit is contained in:
parent
45e6a5238b
commit
bf267a5a1a
@ -1,9 +1,10 @@
|
||||
[gd_scene load_steps=9 format=2]
|
||||
[gd_scene load_steps=11 format=2]
|
||||
|
||||
[ext_resource path="res://Main.gd" type="Script" id=1]
|
||||
[ext_resource path="res://addons/web_pages/classes/WebPage.gd" type="Script" id=2]
|
||||
[ext_resource path="res://addons/web_pages/classes/post_entries/WebPageEntryTitleText.gd" type="Script" id=3]
|
||||
[ext_resource path="res://addons/web_pages/classes/post_entries/WebPageEntryText.gd" type="Script" id=4]
|
||||
[ext_resource path="res://addons/web_pages/classes/post_entries/WebPageEntryImage.gd" type="Script" id=5]
|
||||
|
||||
[sub_resource type="Resource" id=1]
|
||||
script = ExtResource( 3 )
|
||||
@ -20,7 +21,15 @@ asda
|
||||
TEST
|
||||
|
||||
|
||||
A"
|
||||
A
|
||||
"
|
||||
|
||||
[sub_resource type="Resource" id=5]
|
||||
script = ExtResource( 5 )
|
||||
image_path = "res://test_img/icon.png"
|
||||
image_url = "img"
|
||||
alt = "Addalt"
|
||||
image_size = Vector2i( 100, 100 )
|
||||
|
||||
[sub_resource type="Resource" id=3]
|
||||
script = ExtResource( 3 )
|
||||
@ -44,4 +53,4 @@ data = "<a href=\"/page\">Page</a>"
|
||||
[node name="page" type="WebNode" parent="WebRoot"]
|
||||
uri_segment = "page"
|
||||
script = ExtResource( 2 )
|
||||
entries = [ SubResource( 1 ), SubResource( 4 ), SubResource( 3 ), SubResource( 2 ) ]
|
||||
entries = [ SubResource( 1 ), SubResource( 4 ), SubResource( 5 ), SubResource( 3 ), SubResource( 2 ) ]
|
||||
|
@ -9,6 +9,13 @@ export(Array, Resource) var entries : Array
|
||||
signal entries_changed()
|
||||
|
||||
func _handle_request(request : WebServerRequest):
|
||||
if request.get_remaining_segment_count() > 0:
|
||||
for i in range(entries.size()):
|
||||
var e : WebPageEntry = entries[i]
|
||||
|
||||
if e && e.handle_request(request):
|
||||
return
|
||||
|
||||
if sohuld_render_menu:
|
||||
render_menu(request)
|
||||
|
||||
|
@ -2,6 +2,12 @@ tool
|
||||
extends Resource
|
||||
class_name WebPageEntry, "res://addons/web_pages/icons/icon_web_page_entry.svg"
|
||||
|
||||
func handle_request(request : WebServerRequest) -> bool:
|
||||
return _handle_request(request)
|
||||
|
||||
func _handle_request(request : WebServerRequest) -> bool:
|
||||
return false
|
||||
|
||||
func render(request : WebServerRequest):
|
||||
_render(request)
|
||||
|
||||
|
@ -0,0 +1,45 @@
|
||||
tool
|
||||
extends "res://addons/web_pages/classes/WebPageEntry.gd"
|
||||
class_name WebPageEntryImage, "res://addons/web_pages/icons/icon_web_page_entry_image.svg"
|
||||
|
||||
export(String) var image_path : String
|
||||
export(String) var image_url : String
|
||||
export(String) var alt : String
|
||||
export(Vector2i) var image_size : Vector2i = Vector2i()
|
||||
|
||||
func _handle_request(request : WebServerRequest) -> bool:
|
||||
if image_url.empty() || image_path.empty():
|
||||
return false
|
||||
|
||||
var file : File = File.new()
|
||||
|
||||
#if !file.file_exists(image_path):
|
||||
# return false
|
||||
|
||||
if request.get_current_path_segment() == image_url:
|
||||
request.send_file(image_path)
|
||||
# handled
|
||||
return true
|
||||
|
||||
return false
|
||||
|
||||
func _render(request : WebServerRequest):
|
||||
if image_url.empty() || image_path.empty():
|
||||
return
|
||||
|
||||
request.body += '<img src="' + request.get_url_root() + image_url + '"'
|
||||
|
||||
if !alt.empty():
|
||||
request.body += ' alt="' + alt + '"'
|
||||
|
||||
if image_size.x > 0:
|
||||
request.body += ' width="' + str(image_size.x) + '"'
|
||||
|
||||
if image_size.y > 0:
|
||||
request.body += ' height="' + str(image_size.y) + '"'
|
||||
|
||||
request.body += '>'
|
||||
|
||||
func get_page_entry_class_name() -> String:
|
||||
return "WebPageEntryImage"
|
||||
|
@ -13,6 +13,7 @@ func _notification(what):
|
||||
get_ok().set_text("Close")
|
||||
get_node("VBC/AddTitleTextButton").connect("pressed", self, "_add_title_text_button_pressed")
|
||||
get_node("VBC/AddTextButton").connect("pressed", self, "_add_text_button_pressed")
|
||||
get_node("VBC/AddimageButton").connect("pressed", self, "_add_image_button_pressed")
|
||||
|
||||
func _add_title_text_button_pressed() -> void:
|
||||
emit_signal("on_entry_class_selected" , "WebPageEntryTitleText")
|
||||
@ -21,3 +22,7 @@ func _add_title_text_button_pressed() -> void:
|
||||
func _add_text_button_pressed() -> void:
|
||||
emit_signal("on_entry_class_selected" , "WebPageEntryText")
|
||||
hide()
|
||||
|
||||
func _add_image_button_pressed() -> void:
|
||||
emit_signal("on_entry_class_selected" , "WebPageEntryImage")
|
||||
hide()
|
||||
|
@ -179,7 +179,9 @@ func _on_add_entry_class_selected(cls_name : String) -> void:
|
||||
entry = WebPageEntryTitleText.new()
|
||||
elif cls_name == "WebPageEntryText":
|
||||
entry = WebPageEntryText.new()
|
||||
|
||||
elif cls_name == "WebPageEntryImage":
|
||||
entry = WebPageEntryImage.new()
|
||||
|
||||
if !entry:
|
||||
PLogger.log_error("PageEditor: Couldn't create entry for: " + cls_name)
|
||||
return
|
||||
|
@ -1,9 +1,10 @@
|
||||
[gd_scene load_steps=5 format=2]
|
||||
[gd_scene load_steps=6 format=2]
|
||||
|
||||
[ext_resource path="res://addons/web_pages/editor/PageEditor.gd" type="Script" id=1]
|
||||
[ext_resource path="res://addons/web_pages/icons/icon_web_page_entry_title_text.svg" type="Texture" id=2]
|
||||
[ext_resource path="res://addons/web_pages/editor/AddEntryPopup.gd" type="Script" id=3]
|
||||
[ext_resource path="res://addons/web_pages/icons/icon_web_page_entry_text.svg" type="Texture" id=4]
|
||||
[ext_resource path="res://addons/web_pages/icons/icon_web_page_entry_image.svg" type="Texture" id=5]
|
||||
|
||||
[node name="PostEditor" type="PanelContainer"]
|
||||
anchor_right = 1.0
|
||||
@ -100,7 +101,7 @@ script = ExtResource( 3 )
|
||||
margin_left = 8.0
|
||||
margin_top = 8.0
|
||||
margin_right = 192.0
|
||||
margin_bottom = 56.0
|
||||
margin_bottom = 82.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
@ -116,3 +117,10 @@ margin_right = 184.0
|
||||
margin_bottom = 48.0
|
||||
text = "Text"
|
||||
icon = ExtResource( 4 )
|
||||
|
||||
[node name="AddimageButton" type="Button" parent="Popups/AddEntryPopup/VBC"]
|
||||
margin_top = 52.0
|
||||
margin_right = 184.0
|
||||
margin_bottom = 74.0
|
||||
text = "Image"
|
||||
icon = ExtResource( 5 )
|
||||
|
@ -10,6 +10,7 @@ var _editor : Control = null
|
||||
|
||||
var WebPageEntryTitleTextEditor : PackedScene = null
|
||||
var WebPageEntryTextEditor : PackedScene = null
|
||||
var WebPageEntryImageEditor : PackedScene = null
|
||||
|
||||
signal entry_add_requested_after(entry)
|
||||
signal entry_move_up_requested(entry)
|
||||
@ -26,6 +27,8 @@ func set_entry(entry : WebPageEntry, undo_redo : UndoRedo) -> void:
|
||||
_editor = WebPageEntryTitleTextEditor.instance()
|
||||
elif cls == "WebPageEntryText":
|
||||
_editor = WebPageEntryTextEditor.instance()
|
||||
elif cls == "WebPageEntryImage":
|
||||
_editor = WebPageEntryImageEditor.instance()
|
||||
|
||||
if _editor:
|
||||
_editor.set_entry(entry, undo_redo)
|
||||
@ -47,6 +50,7 @@ func _notification(what):
|
||||
if what == NOTIFICATION_INSTANCED:
|
||||
WebPageEntryTitleTextEditor = ResourceLoader.load("res://addons/web_pages/editor/post_entries/WebPageEntryTitleTextEditor.tscn", "PackedScene")
|
||||
WebPageEntryTextEditor = ResourceLoader.load("res://addons/web_pages/editor/post_entries/WebPageEntryTextEditor.tscn", "PackedScene")
|
||||
WebPageEntryImageEditor = ResourceLoader.load("res://addons/web_pages/editor/post_entries/WebPageEntryImageEditor.tscn", "PackedScene")
|
||||
|
||||
_entry_type_label = get_node("PC/VBC/TopBar/EntryTypeLabel")
|
||||
_main_container = get_node("PC/VBC/MainContainer")
|
||||
|
@ -0,0 +1,114 @@
|
||||
tool
|
||||
extends MarginContainer
|
||||
|
||||
var _entry : WebPageEntryImage = null
|
||||
var undo_redo : UndoRedo = null
|
||||
|
||||
var _image_path_line_edit : LineEdit = null
|
||||
var _image_url_line_edit : LineEdit = null
|
||||
var _image_alt_line_edit : LineEdit = null
|
||||
var _image_width_sb : SpinBox = null
|
||||
var _image_heigth_sb : SpinBox = null
|
||||
var _image_preview : TextureRect = null
|
||||
|
||||
func set_entry(entry : WebPageEntryImage, pundo_redo : UndoRedo) -> void:
|
||||
undo_redo = pundo_redo
|
||||
_entry = entry
|
||||
|
||||
_image_path_line_edit.text = _entry.image_path
|
||||
_image_url_line_edit.text = _entry.image_url
|
||||
_image_alt_line_edit.text = _entry.alt
|
||||
_image_width_sb.value = _entry.image_size.x
|
||||
_image_heigth_sb.value = _entry.image_size.y
|
||||
|
||||
refresh_image()
|
||||
|
||||
func refresh_image() -> void:
|
||||
_image_preview.texture = null
|
||||
|
||||
if _entry.image_path.empty():
|
||||
return
|
||||
|
||||
var file : File = File.new()
|
||||
|
||||
if !file.file_exists(_entry.image_path):
|
||||
PLogger.log_warning("Image Editor: Image file doesn't exists.")
|
||||
return
|
||||
|
||||
var img : Image = ResourceLoader.load(_entry.image_path, "Image")
|
||||
|
||||
if !img:
|
||||
PLogger.log_warning("Image Editor: Couldn't load Image file!")
|
||||
return
|
||||
|
||||
var t : ImageTexture = ImageTexture.new()
|
||||
t.create_from_image(img)
|
||||
|
||||
_image_preview.texture = t
|
||||
|
||||
|
||||
func _notification(what):
|
||||
if what == NOTIFICATION_INSTANCED:
|
||||
_image_path_line_edit = get_node("VBoxContainer/ImagePath/ImagePathLE")
|
||||
_image_url_line_edit = get_node("VBoxContainer/ImageURL/ImageURLLE")
|
||||
_image_alt_line_edit = get_node("VBoxContainer/ImageAlt/ImageAltLE")
|
||||
_image_width_sb = get_node("VBoxContainer/ImageWH/ImageWidthSB")
|
||||
_image_heigth_sb = get_node("VBoxContainer/ImageWH/ImageHeigthSB")
|
||||
_image_preview = get_node("VBoxContainer/HBoxContainer/ImagePreview")
|
||||
|
||||
_image_path_line_edit.connect("text_entered", self, "_on_image_path_le_text_entered")
|
||||
_image_url_line_edit.connect("text_entered", self, "_on_image_url_le_text_entered")
|
||||
_image_alt_line_edit.connect("text_entered", self, "_on_image_alt_le_text_entered")
|
||||
_image_width_sb.connect("value_changed", self, "_image_width_sb_value_changed")
|
||||
_image_heigth_sb.connect("value_changed", self, "_image_heigth_sb_value_changed")
|
||||
|
||||
func _on_image_path_le_text_entered(text : String) -> void:
|
||||
undo_redo.create_action("Image path text changed")
|
||||
undo_redo.add_do_property(_entry, "image_path", text)
|
||||
undo_redo.add_undo_property(_entry, "image_path", _entry.image_path)
|
||||
undo_redo.add_do_property(_image_path_line_edit, "text", text)
|
||||
undo_redo.add_undo_property(_image_path_line_edit, "text", _entry.image_path)
|
||||
undo_redo.commit_action()
|
||||
|
||||
refresh_image()
|
||||
|
||||
func _on_image_url_le_text_entered(text : String) -> void:
|
||||
undo_redo.create_action("Image URL text changed")
|
||||
undo_redo.add_do_property(_entry, "image_url", text)
|
||||
undo_redo.add_undo_property(_entry, "image_url", _entry.image_url)
|
||||
undo_redo.add_do_property(_image_url_line_edit, "text", text)
|
||||
undo_redo.add_undo_property(_image_url_line_edit, "text", _entry.image_url)
|
||||
undo_redo.commit_action()
|
||||
|
||||
func _on_image_alt_le_text_entered(text : String) -> void:
|
||||
undo_redo.create_action("Image alt text changed")
|
||||
undo_redo.add_do_property(_entry, "alt", text)
|
||||
undo_redo.add_undo_property(_entry, "alt", _entry.alt)
|
||||
undo_redo.add_do_property(_image_alt_line_edit, "text", text)
|
||||
undo_redo.add_undo_property(_image_alt_line_edit, "text", _entry.alt)
|
||||
undo_redo.commit_action()
|
||||
|
||||
func _image_width_sb_value_changed(val : float) -> void:
|
||||
var imgsize_orig : Vector2i = _entry.image_size
|
||||
var imgsize_new : Vector2i = _entry.image_size
|
||||
imgsize_new.x = val
|
||||
|
||||
undo_redo.create_action("Image width changed")
|
||||
undo_redo.add_do_property(_entry, "image_size", imgsize_new)
|
||||
undo_redo.add_undo_property(_entry, "image_size", imgsize_orig)
|
||||
undo_redo.add_do_property(_image_alt_line_edit, "value", imgsize_new.x)
|
||||
undo_redo.add_undo_property(_image_alt_line_edit, "value", imgsize_orig.x)
|
||||
undo_redo.commit_action()
|
||||
|
||||
func _image_heigth_sb_value_changed(val : float) -> void:
|
||||
var imgsize_orig : Vector2i = _entry.image_size
|
||||
var imgsize_new : Vector2i = _entry.image_size
|
||||
imgsize_new.y = val
|
||||
|
||||
undo_redo.create_action("Image width changed")
|
||||
undo_redo.add_do_property(_entry, "image_size", imgsize_new)
|
||||
undo_redo.add_undo_property(_entry, "image_size", imgsize_orig)
|
||||
undo_redo.add_do_property(_image_alt_line_edit, "value", imgsize_new.y)
|
||||
undo_redo.add_undo_property(_image_alt_line_edit, "value", imgsize_orig.y)
|
||||
undo_redo.commit_action()
|
||||
|
@ -0,0 +1,104 @@
|
||||
[gd_scene load_steps=2 format=2]
|
||||
|
||||
[ext_resource path="res://addons/web_pages/editor/post_entries/WebPageEntryImageEditor.gd" type="Script" id=1]
|
||||
|
||||
[node name="WebPageEntryTitleTextEditor" type="MarginContainer"]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 600.0
|
||||
|
||||
[node name="ImagePath" type="HBoxContainer" parent="VBoxContainer"]
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 24.0
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer/ImagePath"]
|
||||
margin_top = 5.0
|
||||
margin_right = 75.0
|
||||
margin_bottom = 19.0
|
||||
text = "image Path:"
|
||||
|
||||
[node name="ImagePathLE" type="LineEdit" parent="VBoxContainer/ImagePath"]
|
||||
margin_left = 79.0
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 24.0
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="ImageURL" type="HBoxContainer" parent="VBoxContainer"]
|
||||
margin_top = 28.0
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 52.0
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer/ImageURL"]
|
||||
margin_top = 5.0
|
||||
margin_right = 72.0
|
||||
margin_bottom = 19.0
|
||||
text = "image URL:"
|
||||
|
||||
[node name="ImageURLLE" type="LineEdit" parent="VBoxContainer/ImageURL"]
|
||||
margin_left = 76.0
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 24.0
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="ImageAlt" type="HBoxContainer" parent="VBoxContainer"]
|
||||
margin_top = 56.0
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 80.0
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer/ImageAlt"]
|
||||
margin_top = 5.0
|
||||
margin_right = 127.0
|
||||
margin_bottom = 19.0
|
||||
text = "image alt (optional):"
|
||||
|
||||
[node name="ImageAltLE" type="LineEdit" parent="VBoxContainer/ImageAlt"]
|
||||
margin_left = 131.0
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 24.0
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="ImageWH" type="HBoxContainer" parent="VBoxContainer"]
|
||||
margin_top = 84.0
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 108.0
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer/ImageWH"]
|
||||
margin_top = 5.0
|
||||
margin_right = 153.0
|
||||
margin_bottom = 19.0
|
||||
text = "Image Width (Optional):"
|
||||
|
||||
[node name="ImageWidthSB" type="SpinBox" parent="VBoxContainer/ImageWH"]
|
||||
margin_left = 157.0
|
||||
margin_right = 508.0
|
||||
margin_bottom = 24.0
|
||||
size_flags_horizontal = 3
|
||||
max_value = 999999.0
|
||||
rounded = true
|
||||
|
||||
[node name="Label2" type="Label" parent="VBoxContainer/ImageWH"]
|
||||
margin_left = 512.0
|
||||
margin_top = 5.0
|
||||
margin_right = 669.0
|
||||
margin_bottom = 19.0
|
||||
text = "Image Heigth (Optional):"
|
||||
|
||||
[node name="ImageHeigthSB" type="SpinBox" parent="VBoxContainer/ImageWH"]
|
||||
margin_left = 673.0
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 24.0
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
|
||||
margin_top = 112.0
|
||||
margin_right = 1024.0
|
||||
margin_bottom = 112.0
|
||||
alignment = 1
|
||||
|
||||
[node name="ImagePreview" type="TextureRect" parent="VBoxContainer/HBoxContainer"]
|
||||
margin_left = 512.0
|
||||
margin_right = 512.0
|
@ -20,6 +20,11 @@ _global_script_classes=[ {
|
||||
"path": "res://addons/web_pages/classes/WebPageEntry.gd"
|
||||
}, {
|
||||
"base": "Resource",
|
||||
"class": @"WebPageEntryImage",
|
||||
"language": @"GDScript",
|
||||
"path": "res://addons/web_pages/classes/post_entries/WebPageEntryImage.gd"
|
||||
}, {
|
||||
"base": "Resource",
|
||||
"class": @"WebPageEntryText",
|
||||
"language": @"GDScript",
|
||||
"path": "res://addons/web_pages/classes/post_entries/WebPageEntryText.gd"
|
||||
@ -39,6 +44,7 @@ _global_script_class_icons={
|
||||
@"WebPageEntryTitleText": "",
|
||||
@"WebPageEntry": "res://addons/web_pages/icons/icon_web_page_entry.svg",
|
||||
@"WebPageList": "res://addons/web_page_list/icons/icon_web_page_list.svg",
|
||||
@"WebPageEntryImage": "res://addons/web_pages/icons/icon_web_page_entry_image.svg",
|
||||
@"WebPageEntryText": "res://addons/web_pages/icons/icon_web_page_entry_text.svg"
|
||||
}
|
||||
|
||||
|
BIN
game/test_img/icon.png
Normal file
BIN
game/test_img/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
13
game/test_img/icon.png.import
Normal file
13
game/test_img/icon.png.import
Normal file
@ -0,0 +1,13 @@
|
||||
[remap]
|
||||
|
||||
importer="image"
|
||||
type="Image"
|
||||
path="res://.import/icon.png-a9f6ae2dfab32494edeefa50d716973d.image"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://test_img/icon.png"
|
||||
dest_files=[ "res://.import/icon.png-a9f6ae2dfab32494edeefa50d716973d.image" ]
|
||||
|
||||
[params]
|
||||
|
Loading…
Reference in New Issue
Block a user