From 34882c3d4b812eee388cf451072ba8b98b56687b Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Tue, 13 Feb 2024 19:45:43 +0300 Subject: [PATCH] finish first version --- .gitignore | 5 + Makefile | 14 + assets/add.png | Bin 0 -> 10566 bytes assets/add.png.import | 34 +++ assets/close.png | Bin 0 -> 8350 bytes assets/close.png.import | 34 +++ assets/save.png | Bin 0 -> 7080 bytes assets/save.png.import | 34 +++ components/edit_note_item/edit_note_item.gd | 25 ++ components/edit_note_item/edit_note_item.tscn | 41 +++ components/note_item/note_item.gd | 3 + data/change_note.gd | 15 ++ data/note.gd | 11 +- export_presets.cfg | 239 ++++++++++++++++++ main.gd | 113 ++++++--- main.tscn | 74 +----- pages/edit_note_page/edit_note_page.gd | 58 +++++ pages/edit_note_page/edit_note_page.tscn | 83 ++++++ pages/note_page/note_page.gd | 38 +++ pages/note_page/note_page.tscn | 72 ++++++ project.godot | 3 + save_manager/save_manager.gd | 2 + styles/app_theme.tres | 26 +- 23 files changed, 814 insertions(+), 110 deletions(-) create mode 100644 Makefile create mode 100644 assets/add.png create mode 100644 assets/add.png.import create mode 100644 assets/close.png create mode 100644 assets/close.png.import create mode 100644 assets/save.png create mode 100644 assets/save.png.import create mode 100644 components/edit_note_item/edit_note_item.gd create mode 100644 components/edit_note_item/edit_note_item.tscn create mode 100644 data/change_note.gd create mode 100644 export_presets.cfg create mode 100644 pages/edit_note_page/edit_note_page.gd create mode 100644 pages/edit_note_page/edit_note_page.tscn create mode 100644 pages/note_page/note_page.gd create mode 100644 pages/note_page/note_page.tscn diff --git a/.gitignore b/.gitignore index 4709183..6a52a51 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ # Godot 4+ specific ignores .godot/ + +# Android +android/ +*.apk +*.apk.idsig diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..eee2f5c --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +ANDROID_PACKAGE_NAME = ru.pleshevski.boronotes +ANDROID_DEBUG_FILE = Boronotes.apk + +help: + cat Makefile + +android-build-debug: + godot4 --headless --export-debug "Android" $(ANDROID_DEBUG_FILE) + +android-install: android-build + adb install $(ANDROID_DEBUG_FILE) + +android-uninstall: + adb shell pm uninstall $(ANDROID_PACKAGE_NAME) diff --git a/assets/add.png b/assets/add.png new file mode 100644 index 0000000000000000000000000000000000000000..a2ead82ceffef7ebac110fc0412a7fc32b1ec2f7 GIT binary patch literal 10566 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 literal 0 HcmV?d00001 diff --git a/assets/add.png.import b/assets/add.png.import new file mode 100644 index 0000000..02ea655 --- /dev/null +++ b/assets/add.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b5djp0ut3b0ck" +path="res://.godot/imported/add.png-49fe8db0fedbecae82b656c4501f68bc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/add.png" +dest_files=["res://.godot/imported/add.png-49fe8db0fedbecae82b656c4501f68bc.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/close.png b/assets/close.png new file mode 100644 index 0000000000000000000000000000000000000000..a9413831d91aed81a7fe9944150e0985e935beb8 GIT binary patch literal 8350 zcmYLP3pmu-`#*zXyRfzkqNdHb6d}4OlhIZ*5nWwMOoVNTi89TSnQGfEZZ+gmn6|d; zE@D$+-KOnk5bfV?lH0TmYK0nw$(Z?{%jDPd^bFtk^ZA_jyyrdVyzh6M-RkK!bK1OV z0DzgyO&hiYpaFl>06J6Q$A_bTe}W%cG2bwE>cD^TI{VMS-@jmQ@{0jL-wFMv?6=t3 z3?CXD-spRHM^xxx&c5gnz~OLg4n&5>1n*;q*hEE#T^^**17IOwZdkYTXwE?A-ohg8 zzPa!EB0{g&HM(38th95`@NEB9v&@(AbXrly>^VhSF1>h=ns~$9e97+Ms{i}jeZ`8G zC$e^if4AbsykzeOw{ILjZvXdg4}FE@d}rm>?~gBjs=M{axl?VQ`88%cjOUb&boK9T z9)CY>=EeUyN6}h&KOyg9P54mE()^DnXnK2_6VvG9-{)mZhnWec;$Y^2>byXv?7`V) z9q^c)AwB+f%@D_|!d5(dtG~Lt{^qE&Q2MIvNSAh6{C_)7SFU_7RNbO=Uy!DnbGO7^ z=jjXGWiiaIZ0W&PRrNX`GRZZQ-)Gh=t?U|K&&-Rt$9VOM*>z#>&_pZk)tSD_9f<

J6-bF!@=UZT5#bnk6B&Oj%URP^E3y=udL0 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 T?fbSHngDa7=Z2f#uul9x0v3b9 literal 0 HcmV?d00001 diff --git a/assets/close.png.import b/assets/close.png.import new file mode 100644 index 0000000..55f2686 --- /dev/null +++ b/assets/close.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c56dek8bl3vq0" +path="res://.godot/imported/close.png-5dfda58792925f4ecef1b7dd0e814906.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/close.png" +dest_files=["res://.godot/imported/close.png-5dfda58792925f4ecef1b7dd0e814906.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/save.png b/assets/save.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9f6cea5cb5c45fb039cc183d0b63ae0651b13d GIT binary patch literal 7080 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 literal 0 HcmV?d00001 diff --git a/assets/save.png.import b/assets/save.png.import new file mode 100644 index 0000000..378b8cc --- /dev/null +++ b/assets/save.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cwnsbx7xl0syt" +path="res://.godot/imported/save.png-9622b5303508ebb9968ebd80fc3666f1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/save.png" +dest_files=["res://.godot/imported/save.png-9622b5303508ebb9968ebd80fc3666f1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/components/edit_note_item/edit_note_item.gd b/components/edit_note_item/edit_note_item.gd new file mode 100644 index 0000000..4e9df5d --- /dev/null +++ b/components/edit_note_item/edit_note_item.gd @@ -0,0 +1,25 @@ +class_name EditNoteItem +extends PanelContainer + +signal deleted(note: Note) + +@export var note: Note : + set(new_note): + if note != new_note: + note = new_note + if line_edit: + line_edit.text = note.title + +@onready var line_edit: LineEdit = %LineEdit + + +func _ready(): + line_edit.text = note.title + + +func _on_line_edit_text_changed(new_text: String): + note.title = new_text + + +func _on_delete_button_pressed(): + deleted.emit(note) diff --git a/components/edit_note_item/edit_note_item.tscn b/components/edit_note_item/edit_note_item.tscn new file mode 100644 index 0000000..7cad615 --- /dev/null +++ b/components/edit_note_item/edit_note_item.tscn @@ -0,0 +1,41 @@ +[gd_scene load_steps=4 format=3 uid="uid://cy7qciptrj71w"] + +[ext_resource type="Script" path="res://components/edit_note_item/edit_note_item.gd" id="1_0fnc8"] +[ext_resource type="Texture2D" uid="uid://c56dek8bl3vq0" path="res://assets/close.png" id="2_gotov"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_q7ab1"] +bg_color = Color(1, 1, 1, 0.784314) +corner_radius_top_left = 6 +corner_radius_top_right = 6 +corner_radius_bottom_right = 6 +corner_radius_bottom_left = 6 + +[node name="EditNoteItem" type="PanelContainer"] +theme_override_styles/panel = SubResource("StyleBoxFlat_q7ab1") +script = ExtResource("1_0fnc8") + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 2 +theme_override_constants/margin_left = 9 +theme_override_constants/margin_top = 6 +theme_override_constants/margin_right = 9 +theme_override_constants/margin_bottom = 6 + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"] +layout_mode = 2 + +[node name="LineEdit" type="LineEdit" parent="MarginContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "Введите заметку" + +[node name="DeleteButton" type="Button" parent="MarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +icon = ExtResource("2_gotov") +flat = true +expand_icon = true + +[connection signal="text_changed" from="MarginContainer/HBoxContainer/LineEdit" to="." method="_on_line_edit_text_changed"] +[connection signal="pressed" from="MarginContainer/HBoxContainer/DeleteButton" to="." method="_on_delete_button_pressed"] diff --git a/components/note_item/note_item.gd b/components/note_item/note_item.gd index ee6608a..5b73cc3 100644 --- a/components/note_item/note_item.gd +++ b/components/note_item/note_item.gd @@ -17,5 +17,8 @@ func _ready(): button.text = note.title + func _on_button_pressed(): pressed.emit(note) + + diff --git a/data/change_note.gd b/data/change_note.gd new file mode 100644 index 0000000..0aca182 --- /dev/null +++ b/data/change_note.gd @@ -0,0 +1,15 @@ +class_name ChangeNote +extends Resource + +enum Kind { + ADDED, + CHANGED, + DELETED, +} + +@export var kind: Kind +@export var note: Note + +func _init(change_kind: Kind, change_note: Note): + kind = change_kind + note = change_note diff --git a/data/note.gd b/data/note.gd index 389db2b..afe6fda 100644 --- a/data/note.gd +++ b/data/note.gd @@ -8,8 +8,9 @@ const uuid = preload("res://utils/uuid.gd") @export var title: String -func _init(note_title: String, note_parent_id: String = ""): - id = uuid.v4() - title = note_title - parent_id = note_parent_id - +static func create(note_title: String, note_parent_id: String = "") -> Note: + var note = Note.new() + note.id = uuid.v4() + note.title = note_title + note.parent_id = note_parent_id + return note diff --git a/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..a9e30c3 --- /dev/null +++ b/export_presets.cfg @@ -0,0 +1,239 @@ +[preset.0] + +name="Android" +platform="Android" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +gradle_build/use_gradle_build=false +gradle_build/export_format=0 +gradle_build/min_sdk="" +gradle_build/target_sdk="" +architectures/armeabi-v7a=false +architectures/arm64-v8a=true +architectures/x86=false +architectures/x86_64=false +version/code=1 +version/name="" +package/unique_name="com.example.$genname" +package/name="" +package/signed=true +package/app_category=2 +package/retain_data_on_uninstall=false +package/exclude_from_recents=false +package/show_in_android_tv=false +package/show_in_app_library=true +package/show_as_launcher_app=false +launcher_icons/main_192x192="" +launcher_icons/adaptive_foreground_432x432="" +launcher_icons/adaptive_background_432x432="" +graphics/opengl_debug=false +xr_features/xr_mode=0 +screen/immersive_mode=true +screen/support_small=true +screen/support_normal=true +screen/support_large=true +screen/support_xlarge=true +user_data_backup/allow=false +command_line/extra_args="" +apk_expansion/enable=false +apk_expansion/SALT="" +apk_expansion/public_key="" +permissions/custom_permissions=PackedStringArray() +permissions/access_checkin_properties=false +permissions/access_coarse_location=false +permissions/access_fine_location=false +permissions/access_location_extra_commands=false +permissions/access_mock_location=false +permissions/access_network_state=false +permissions/access_surface_flinger=false +permissions/access_wifi_state=false +permissions/account_manager=false +permissions/add_voicemail=false +permissions/authenticate_accounts=false +permissions/battery_stats=false +permissions/bind_accessibility_service=false +permissions/bind_appwidget=false +permissions/bind_device_admin=false +permissions/bind_input_method=false +permissions/bind_nfc_service=false +permissions/bind_notification_listener_service=false +permissions/bind_print_service=false +permissions/bind_remoteviews=false +permissions/bind_text_service=false +permissions/bind_vpn_service=false +permissions/bind_wallpaper=false +permissions/bluetooth=false +permissions/bluetooth_admin=false +permissions/bluetooth_privileged=false +permissions/brick=false +permissions/broadcast_package_removed=false +permissions/broadcast_sms=false +permissions/broadcast_sticky=false +permissions/broadcast_wap_push=false +permissions/call_phone=false +permissions/call_privileged=false +permissions/camera=false +permissions/capture_audio_output=false +permissions/capture_secure_video_output=false +permissions/capture_video_output=false +permissions/change_component_enabled_state=false +permissions/change_configuration=false +permissions/change_network_state=false +permissions/change_wifi_multicast_state=false +permissions/change_wifi_state=false +permissions/clear_app_cache=false +permissions/clear_app_user_data=false +permissions/control_location_updates=false +permissions/delete_cache_files=false +permissions/delete_packages=false +permissions/device_power=false +permissions/diagnostic=false +permissions/disable_keyguard=false +permissions/dump=false +permissions/expand_status_bar=false +permissions/factory_test=false +permissions/flashlight=false +permissions/force_back=false +permissions/get_accounts=false +permissions/get_package_size=false +permissions/get_tasks=false +permissions/get_top_activity_info=false +permissions/global_search=false +permissions/hardware_test=false +permissions/inject_events=false +permissions/install_location_provider=false +permissions/install_packages=false +permissions/install_shortcut=false +permissions/internal_system_window=false +permissions/internet=false +permissions/kill_background_processes=false +permissions/location_hardware=false +permissions/manage_accounts=false +permissions/manage_app_tokens=false +permissions/manage_documents=false +permissions/manage_external_storage=false +permissions/master_clear=false +permissions/media_content_control=false +permissions/modify_audio_settings=false +permissions/modify_phone_state=false +permissions/mount_format_filesystems=false +permissions/mount_unmount_filesystems=false +permissions/nfc=false +permissions/persistent_activity=false +permissions/process_outgoing_calls=false +permissions/read_calendar=false +permissions/read_call_log=false +permissions/read_contacts=false +permissions/read_external_storage=false +permissions/read_frame_buffer=false +permissions/read_history_bookmarks=false +permissions/read_input_state=false +permissions/read_logs=false +permissions/read_phone_state=false +permissions/read_profile=false +permissions/read_sms=false +permissions/read_social_stream=false +permissions/read_sync_settings=false +permissions/read_sync_stats=false +permissions/read_user_dictionary=false +permissions/reboot=false +permissions/receive_boot_completed=false +permissions/receive_mms=false +permissions/receive_sms=false +permissions/receive_wap_push=false +permissions/record_audio=false +permissions/reorder_tasks=false +permissions/restart_packages=false +permissions/send_respond_via_message=false +permissions/send_sms=false +permissions/set_activity_watcher=false +permissions/set_alarm=false +permissions/set_always_finish=false +permissions/set_animation_scale=false +permissions/set_debug_app=false +permissions/set_orientation=false +permissions/set_pointer_speed=false +permissions/set_preferred_applications=false +permissions/set_process_limit=false +permissions/set_time=false +permissions/set_time_zone=false +permissions/set_wallpaper=false +permissions/set_wallpaper_hints=false +permissions/signal_persistent_processes=false +permissions/status_bar=false +permissions/subscribed_feeds_read=false +permissions/subscribed_feeds_write=false +permissions/system_alert_window=false +permissions/transmit_ir=false +permissions/uninstall_shortcut=false +permissions/update_device_stats=false +permissions/use_credentials=false +permissions/use_sip=false +permissions/vibrate=false +permissions/wake_lock=false +permissions/write_apn_settings=false +permissions/write_calendar=false +permissions/write_call_log=false +permissions/write_contacts=false +permissions/write_external_storage=false +permissions/write_gservices=false +permissions/write_history_bookmarks=false +permissions/write_profile=false +permissions/write_secure_settings=false +permissions/write_settings=false +permissions/write_sms=false +permissions/write_social_stream=false +permissions/write_sync_settings=false +permissions/write_user_dictionary=false + +[preset.1] + +name="Web" +platform="Web" +runnable=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="web/Boronotes.html" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false + +[preset.1.options] + +custom_template/debug="" +custom_template/release="" +variant/extensions_support=false +vram_texture_compression/for_desktop=false +vram_texture_compression/for_mobile=false +html/export_icon=true +html/custom_html_shell="" +html/head_include="" +html/canvas_resize_policy=2 +html/focus_canvas_on_start=true +html/experimental_virtual_keyboard=false +progressive_web_app/enabled=true +progressive_web_app/offline_page="" +progressive_web_app/display=1 +progressive_web_app/orientation=2 +progressive_web_app/icon_144x144="" +progressive_web_app/icon_180x180="" +progressive_web_app/icon_512x512="" +progressive_web_app/background_color=Color(0, 0, 0, 1) diff --git a/main.gd b/main.gd index 3412f36..acb3f31 100644 --- a/main.gd +++ b/main.gd @@ -1,65 +1,96 @@ class_name Main extends Control +@onready var note_page: NotePage = %NotePage +@onready var edit_note_page: EditNotePage = %EditNotePage +@onready var save_manager = $Utils/SaveManager + +var editing: bool = false : + set(value): + editing = value + note_page.visible = not editing + edit_note_page.visible = editing + var notes: Array[Note] = [] var previous_notes: Array[Note] = [] var current_note: Note -@onready var back_button: Button = %BackButton -@onready var page_title: Label = %PageTitle -@onready var notes_container: VBoxContainer = %NotesContainer -const NOTE_ITEM = preload("res://components/note_item/note_item.tscn") - -func display_note() -> void: - back_button.disabled = previous_notes.size() == 0 - - page_title.text = current_note.title if current_note else "Главная" - - for child in notes_container.get_children(): - notes_container.remove_child(child) - +func display_page() -> void: + var note_title = current_note.title if current_note else "Главная" var display_notes = notes.filter(func (note): return note.parent_id == (current_note.id if current_note else "")) - - for note in display_notes: - var note_item = NOTE_ITEM.instantiate() - note_item.note = note - notes_container.add_child(note_item) - note_item.pressed.connect(_on_note_item_pressed) + if editing: + edit_note_page.display( + current_note.id if current_note else "", + note_title, + display_notes + ) + else: + note_page.display(note_title, display_notes) func _ready(): - var note_1 = Note.new("Тест 1") - var note_2 = Note.new("Тест 2") - var note_3 = Note.new("Тест 3") - var note_1_1 = Note.new("Тест 1 1", note_1.id) - var note_1_2 = Note.new("Тест 1 2", note_1.id) - var note_1_2_1 = Note.new("Тест 1 2 1", note_1_2.id) - var note_2_1 = Note.new("Тест 2 1", note_2.id) + save_manager.load_data() - notes = [ - note_1, - note_2, - note_3, - note_1_1, - note_1_2, - note_1_2_1, - note_2_1, - ] - - display_note() + display_page() -func _on_back_button_pressed(): +func _on_note_page_back_pressed(): current_note = previous_notes.pop_back() - display_note() + note_page.back_button.disabled = previous_notes.size() == 0 + display_page() -func _on_note_item_pressed(note: Note) -> void: +func _on_note_page_edit_pressed(): + editing = true + display_page() + + +func _on_note_page_note_pressed(note: Note) -> void: previous_notes.append(current_note) current_note = note - display_note() + note_page.back_button.disabled = false + display_page() func _on_save_manager_load_notes(loaded_notes): + editing = false notes = loaded_notes + print(loaded_notes) + display_page() + + +func _on_edit_button_pressed(): + editing = true + display_page() + + +func _on_edit_note_page_canceled(): + editing = false + + +func _on_edit_note_page_saved(changed_notes: Array[ChangeNote]): + editing = false + for changed_note in changed_notes: + match changed_note.kind: + ChangeNote.Kind.ADDED: + if changed_note.note.title.strip_edges(): + notes.append(changed_note.note) + ChangeNote.Kind.DELETED: + notes.erase(changed_note.note) + display_page() + save_manager.save_data(notes) + + +func _notification(what: int) -> void: + match what: + NOTIFICATION_WM_GO_BACK_REQUEST: + if editing: + editing = false + elif previous_notes.size(): + _on_note_page_back_pressed() + else: + get_tree().quit() + + + diff --git a/main.tscn b/main.tscn index 773ccfb..4624800 100644 --- a/main.tscn +++ b/main.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=5 format=3 uid="uid://3snttmw814qx"] [ext_resource type="Script" path="res://main.gd" id="1_nrdxj"] -[ext_resource type="Texture2D" uid="uid://byohq4ewrecgx" path="res://assets/back.png" id="1_rigm4"] -[ext_resource type="Texture2D" uid="uid://bel5s26rbieoi" path="res://assets/edit.png" id="2_grsek"] +[ext_resource type="PackedScene" uid="uid://cfqcqoc8kxmde" path="res://pages/note_page/note_page.tscn" id="2_jvvy0"] +[ext_resource type="PackedScene" uid="uid://bjv84skijj764" path="res://pages/edit_note_page/edit_note_page.tscn" id="3_801py"] [ext_resource type="Script" path="res://save_manager/save_manager.gd" id="5_o2kvf"] [node name="Main" type="Control"] @@ -14,73 +14,23 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_nrdxj") -[node name="PanelContainer" type="PanelContainer" parent="."] +[node name="NotePage" parent="." instance=ExtResource("2_jvvy0")] +unique_name_in_owner = true layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"] -layout_mode = 2 - -[node name="PanelContainer" type="PanelContainer" parent="PanelContainer/VBoxContainer"] -layout_mode = 2 - -[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/VBoxContainer/PanelContainer"] -layout_mode = 2 -theme_override_constants/margin_left = 16 -theme_override_constants/margin_top = 16 -theme_override_constants/margin_right = 16 -theme_override_constants/margin_bottom = 16 - -[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/VBoxContainer/PanelContainer/MarginContainer"] -layout_mode = 2 - -[node name="BackButton" type="Button" parent="PanelContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer"] +[node name="EditNotePage" parent="." instance=ExtResource("3_801py")] unique_name_in_owner = true -custom_minimum_size = Vector2(64, 64) -layout_mode = 2 -icon = ExtResource("1_rigm4") -flat = true -expand_icon = true - -[node name="PageTitle" type="Label" parent="PanelContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -size_flags_horizontal = 3 -text = "Главная" - -[node name="EditButton" type="Button" parent="PanelContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer"] -custom_minimum_size = Vector2(64, 64) -layout_mode = 2 -icon = ExtResource("2_grsek") -flat = true -expand_icon = true - -[node name="ScrollContainer" type="ScrollContainer" parent="PanelContainer/VBoxContainer"] -layout_mode = 2 -size_flags_vertical = 3 - -[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/VBoxContainer/ScrollContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 -theme_override_constants/margin_left = 16 -theme_override_constants/margin_top = 16 -theme_override_constants/margin_right = 16 -theme_override_constants/margin_bottom = 16 - -[node name="NotesContainer" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ScrollContainer/MarginContainer"] -unique_name_in_owner = true -layout_mode = 2 -theme_override_constants/separation = 8 +visible = false +layout_mode = 1 [node name="Utils" type="Node" parent="."] [node name="SaveManager" type="Node" parent="Utils"] script = ExtResource("5_o2kvf") -[connection signal="pressed" from="PanelContainer/VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/BackButton" to="." method="_on_back_button_pressed"] +[connection signal="back_pressed" from="NotePage" to="." method="_on_note_page_back_pressed"] +[connection signal="edit_pressed" from="NotePage" to="." method="_on_note_page_edit_pressed"] +[connection signal="note_pressed" from="NotePage" to="." method="_on_note_page_note_pressed"] +[connection signal="canceled" from="EditNotePage" to="." method="_on_edit_note_page_canceled"] +[connection signal="saved" from="EditNotePage" to="." method="_on_edit_note_page_saved"] [connection signal="load_notes" from="Utils/SaveManager" to="." method="_on_save_manager_load_notes"] diff --git a/pages/edit_note_page/edit_note_page.gd b/pages/edit_note_page/edit_note_page.gd new file mode 100644 index 0000000..b8bf086 --- /dev/null +++ b/pages/edit_note_page/edit_note_page.gd @@ -0,0 +1,58 @@ +class_name EditNotePage +extends PanelContainer + +signal canceled() +signal saved(changed_notes: Array[ChangeNote]) + +@onready var page_title: Label = %PageTitle +@onready var notes_container: VBoxContainer = %NotesContainer + +const EDIT_NOTE_ITEM = preload("res://components/edit_note_item/edit_note_item.tscn") + +var _current_note_id: String +var _changes: Array[ChangeNote] = [] + + +func display_notes(): + for child in notes_container.get_children(): + notes_container.remove_child(child) + + for change_note in _changes: + if change_note.kind == ChangeNote.Kind.DELETED: + continue + var note_item = EDIT_NOTE_ITEM.instantiate() + note_item.note = change_note.note + notes_container.add_child(note_item) + note_item.deleted.connect(_on_edit_node_item_deleted) + + +func display(current_note_id: String, title: String, notes: Array[Note]): + _current_note_id = current_note_id + page_title.text = title + + _changes = [] + for note in notes: + _changes.append(ChangeNote.new(ChangeNote.Kind.CHANGED, note)) + + display_notes() + + +func _on_edit_node_item_deleted(note: Note): + for changed_note in _changes: + if changed_note.note == note: + changed_note.kind = ChangeNote.Kind.DELETED + display_notes() + break + + +func _on_cancel_button_pressed(): + canceled.emit() + + +func _on_save_button_pressed(): + saved.emit(_changes) + + +func _on_add_note_button_pressed(): + _changes.append(ChangeNote.new(ChangeNote.Kind.ADDED, Note.create("", _current_note_id))) + display_notes() diff --git a/pages/edit_note_page/edit_note_page.tscn b/pages/edit_note_page/edit_note_page.tscn new file mode 100644 index 0000000..247f2d7 --- /dev/null +++ b/pages/edit_note_page/edit_note_page.tscn @@ -0,0 +1,83 @@ +[gd_scene load_steps=5 format=3 uid="uid://bjv84skijj764"] + +[ext_resource type="Texture2D" uid="uid://c56dek8bl3vq0" path="res://assets/close.png" id="1_4wdhj"] +[ext_resource type="Script" path="res://pages/edit_note_page/edit_note_page.gd" id="1_41gfg"] +[ext_resource type="Texture2D" uid="uid://cwnsbx7xl0syt" path="res://assets/save.png" id="2_pkfdj"] +[ext_resource type="Texture2D" uid="uid://b5djp0ut3b0ck" path="res://assets/add.png" id="3_ca8sq"] + +[node name="EditNotePage" type="PanelContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_41gfg") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 2 + +[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer"] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/PanelContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 32 +theme_override_constants/margin_top = 32 +theme_override_constants/margin_right = 32 +theme_override_constants/margin_bottom = 32 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/PanelContainer/MarginContainer"] +layout_mode = 2 + +[node name="CancelButton" type="Button" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(64, 64) +layout_mode = 2 +icon = ExtResource("1_4wdhj") +flat = true +expand_icon = true + +[node name="PageTitle" type="Label" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +text = "Главная" + +[node name="SaveButton" type="Button" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(64, 64) +layout_mode = 2 +icon = ExtResource("2_pkfdj") +flat = true +expand_icon = true + +[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/margin_left = 32 +theme_override_constants/margin_top = 32 +theme_override_constants/margin_right = 32 +theme_override_constants/margin_bottom = 32 + +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/ScrollContainer/MarginContainer"] +layout_mode = 2 +theme_override_constants/separation = 16 + +[node name="NotesContainer" type="VBoxContainer" parent="VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_constants/separation = 16 + +[node name="AddNoteButton" type="Button" parent="VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Добавить Запись" +icon = ExtResource("3_ca8sq") +alignment = 0 +expand_icon = true + +[connection signal="pressed" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/CancelButton" to="." method="_on_cancel_button_pressed"] +[connection signal="pressed" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/SaveButton" to="." method="_on_save_button_pressed"] +[connection signal="pressed" from="VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/AddNoteButton" to="." method="_on_add_note_button_pressed"] diff --git a/pages/note_page/note_page.gd b/pages/note_page/note_page.gd new file mode 100644 index 0000000..905ad3b --- /dev/null +++ b/pages/note_page/note_page.gd @@ -0,0 +1,38 @@ +class_name NotePage +extends PanelContainer + +signal edit_pressed() +signal back_pressed() +signal note_pressed(note: Note) + +const NOTE_ITEM = preload("res://components/note_item/note_item.tscn") + +@onready var back_button = %BackButton + +@onready var page_title: Label = %PageTitle +@onready var notes_container: VBoxContainer = %NotesContainer + + +func display(title: String, notes: Array[Note]) -> void: + page_title.text = title + + for child in notes_container.get_children(): + notes_container.remove_child(child) + + for note in notes: + var note_item = NOTE_ITEM.instantiate() + note_item.note = note + notes_container.add_child(note_item) + note_item.pressed.connect(_on_note_item_pressed) + + +func _on_note_item_pressed(note: Note) -> void: + note_pressed.emit(note) + + +func _on_back_button_pressed(): + back_pressed.emit() + + +func _on_edit_button_pressed(): + edit_pressed.emit() diff --git a/pages/note_page/note_page.tscn b/pages/note_page/note_page.tscn new file mode 100644 index 0000000..f55550c --- /dev/null +++ b/pages/note_page/note_page.tscn @@ -0,0 +1,72 @@ +[gd_scene load_steps=4 format=3 uid="uid://cfqcqoc8kxmde"] + +[ext_resource type="Texture2D" uid="uid://byohq4ewrecgx" path="res://assets/back.png" id="1_oquw8"] +[ext_resource type="Script" path="res://pages/note_page/note_page.gd" id="1_toc5b"] +[ext_resource type="Texture2D" uid="uid://bel5s26rbieoi" path="res://assets/edit.png" id="2_gvek1"] + +[node name="NotePage" type="PanelContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_toc5b") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 2 + +[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer"] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/PanelContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 32 +theme_override_constants/margin_top = 32 +theme_override_constants/margin_right = 32 +theme_override_constants/margin_bottom = 32 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/PanelContainer/MarginContainer"] +layout_mode = 2 + +[node name="BackButton" type="Button" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(64, 64) +layout_mode = 2 +disabled = true +icon = ExtResource("1_oquw8") +flat = true +expand_icon = true + +[node name="PageTitle" type="Label" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +text = "Главная" + +[node name="EditButton" type="Button" parent="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(64, 64) +layout_mode = 2 +icon = ExtResource("2_gvek1") +flat = true +expand_icon = true + +[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/margin_left = 32 +theme_override_constants/margin_top = 32 +theme_override_constants/margin_right = 32 +theme_override_constants/margin_bottom = 32 + +[node name="NotesContainer" type="VBoxContainer" parent="VBoxContainer/ScrollContainer/MarginContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_constants/separation = 16 + +[connection signal="pressed" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/BackButton" to="." method="_on_back_button_pressed"] +[connection signal="pressed" from="VBoxContainer/PanelContainer/MarginContainer/HBoxContainer/EditButton" to="." method="_on_edit_button_pressed"] diff --git a/project.godot b/project.godot index 3abe619..2fdede1 100644 --- a/project.godot +++ b/project.godot @@ -13,6 +13,7 @@ config_version=5 config/name="Boronotes" config/version="0.0.1" run/main_scene="res://main.tscn" +config/quit_on_go_back=false config/features=PackedStringArray("4.2", "Mobile") config/icon="res://icon.svg" @@ -22,6 +23,7 @@ window/size/viewport_width=900 window/size/viewport_height=1600 window/size/resizable=false window/stretch/mode="canvas_items" +window/stretch/aspect="expand" window/handheld/orientation=1 [gui] @@ -31,3 +33,4 @@ theme/custom="res://styles/app_theme.tres" [rendering] renderer/rendering_method="mobile" +textures/vram_compression/import_etc2_astc=true diff --git a/save_manager/save_manager.gd b/save_manager/save_manager.gd index 7154747..d46089e 100644 --- a/save_manager/save_manager.gd +++ b/save_manager/save_manager.gd @@ -8,6 +8,7 @@ var file_name: String = "user://save_notes.tres" func save_data(notes: Array[Note]) -> void: var saved_data = SavedData.new() + print(notes.size()) saved_data.notes = notes ResourceSaver.save(saved_data, file_name) @@ -15,5 +16,6 @@ func save_data(notes: Array[Note]) -> void: func load_data() -> void: if ResourceLoader.exists(file_name): var saved_data = ResourceLoader.load(file_name) as SavedData + print(saved_data.notes.size()) load_notes.emit(saved_data.notes) diff --git a/styles/app_theme.tres b/styles/app_theme.tres index 32b83d7..b1d8141 100644 --- a/styles/app_theme.tres +++ b/styles/app_theme.tres @@ -1,7 +1,24 @@ -[gd_resource type="Theme" load_steps=2 format=3 uid="uid://dhg5k56ynipbp"] +[gd_resource type="Theme" load_steps=4 format=3 uid="uid://dhg5k56ynipbp"] [ext_resource type="StyleBox" uid="uid://bfvw2cfuiduki" path="res://styles/white_panel_flat.tres" id="1_rasl3"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3hlj0"] +bg_color = Color(1, 1, 1, 0.784314) +border_width_left = 8 +border_width_top = 8 +border_width_right = 8 +border_width_bottom = 8 +border_color = Color(1, 1, 1, 0.784314) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_r70c8"] +bg_color = Color(1, 1, 1, 0.784314) +border_width_bottom = 2 +border_color = Color(0, 0.309804, 0.819608, 1) + [resource] Button/colors/font_color = Color(0, 0, 0, 1) Button/colors/font_focus_color = Color(0, 0, 0, 1) @@ -10,7 +27,12 @@ Button/colors/font_hover_pressed_color = Color(0, 0, 0, 1) Button/colors/font_outline_color = Color(0, 0, 0, 1) Button/colors/font_pressed_color = Color(0, 0, 0, 1) Button/font_sizes/font_size = 18 -Button/styles/normal = null +Button/styles/normal = SubResource("StyleBoxFlat_3hlj0") Label/colors/font_color = Color(0, 0, 0, 1) Label/font_sizes/font_size = 30 +LineEdit/colors/caret_color = Color(0.521569, 0.521569, 0.521569, 1) +LineEdit/colors/clear_button_color = Color(0.521569, 0.521569, 0.521569, 1) +LineEdit/colors/font_color = Color(0, 0, 0, 1) +LineEdit/colors/font_placeholder_color = Color(0.54902, 0.54902, 0.54902, 0.6) +LineEdit/styles/normal = SubResource("StyleBoxFlat_r70c8") PanelContainer/styles/panel = ExtResource("1_rasl3")