From 482455bd83d47d18b96d53330bb7dce80c914d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Jim=C3=A9nez=20Mateo?= Date: Tue, 7 Jun 2022 18:00:25 -0500 Subject: [PATCH 1/3] fix(backend): Renamed class files This fixes an issue in Godot 3.4.4 when using Windows. --- addons/calendar_button/class/{Calendar.gd => calendar.gd} | 0 addons/calendar_button/class/{Date.gd => date.gd} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename addons/calendar_button/class/{Calendar.gd => calendar.gd} (100%) rename addons/calendar_button/class/{Date.gd => date.gd} (100%) diff --git a/addons/calendar_button/class/Calendar.gd b/addons/calendar_button/class/calendar.gd similarity index 100% rename from addons/calendar_button/class/Calendar.gd rename to addons/calendar_button/class/calendar.gd diff --git a/addons/calendar_button/class/Date.gd b/addons/calendar_button/class/date.gd similarity index 100% rename from addons/calendar_button/class/Date.gd rename to addons/calendar_button/class/date.gd From eb0631513e7aade85fadd39199d09895ad2ebfe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Jim=C3=A9nez=20Mateo?= Date: Tue, 7 Jun 2022 18:19:02 -0500 Subject: [PATCH 2/3] feat(backend): Removes an image warning From [here](https://github.com/ivanskodje-godotengine/godot-plugin-calendar-button/pull/8) Godot 3.4.x throws a warning to load image textures directly instead of loading them dynamically as it may not work in exported games. The Godot documentation also warns against this. see https://docs.godotengine.org/en/stable/classes/class_imagetexture.html --- addons/calendar_button/scripts/calendar_script.gd | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/addons/calendar_button/scripts/calendar_script.gd b/addons/calendar_button/scripts/calendar_script.gd index 7e34fa2..2685778 100644 --- a/addons/calendar_button/scripts/calendar_script.gd +++ b/addons/calendar_button/scripts/calendar_script.gd @@ -19,18 +19,8 @@ func _enter_tree(): refresh_data() func setup_calendar_icon(): - var normal_texture := create_button_texture("btn_32x32_03.png") - set_normal_texture(normal_texture) - - var pressed_texture := create_button_texture("btn_32x32_04.png") - set_pressed_texture(pressed_texture) - -func create_button_texture(var image_name : String) -> ImageTexture: - var image_normal := Image.new() - image_normal.load("res://addons/calendar_button/btn_img/" + image_name) - var image_texture_normal := ImageTexture.new() - image_texture_normal.create_from_image(image_normal) - return image_texture_normal + texture_normal = load("res://addons/calendar_button/btn_img/btn_32x32_03.png") + texture_pressed = load("res://addons/calendar_button/btn_img/btn_32x32_04.png") func create_popup_scene() -> Popup: return preload("res://addons/calendar_button/popup.tscn").instance() as Popup From 4ba2d41ca517f0f771fff03571f8706c6bc3f2b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Jim=C3=A9nez=20Mateo?= Date: Tue, 7 Jun 2022 19:16:54 -0500 Subject: [PATCH 3/3] feat(all): We can now choose if the week stars in monday --- addons/calendar_button/class/calendar.gd | 9 ++++++-- addons/calendar_button/plugin.cfg | 2 +- addons/calendar_button/popup.tscn | 14 ++++++------ .../scripts/calendar_buttons.gd | 11 +++++++--- .../scripts/calendar_script.gd | 22 +++++++++++++++++-- 5 files changed, 43 insertions(+), 15 deletions(-) diff --git a/addons/calendar_button/class/calendar.gd b/addons/calendar_button/class/calendar.gd index f1f7633..7b0e941 100644 --- a/addons/calendar_button/class/calendar.gd +++ b/addons/calendar_button/class/calendar.gd @@ -10,7 +10,12 @@ const MONTH_NAME = [ const WEEKDAY_NAME = [ "Sunday", "Monday", "Tuesday", "Wednesday", - "Thursday", "Friday", "Saturday" ] + "Thursday", "Friday", "Saturday", "Sunday" ] + +var week_starts_on_sunday : bool + +func _init(var week_starts_on_sunday : bool): + self.week_starts_on_sunday = week_starts_on_sunday func get_days_in_month(month : int, year : int) -> int: var number_of_days : int @@ -36,7 +41,7 @@ func get_weekday(day : int, month : int, year : int) -> int: func get_weekday_name(day : int, month : int, year : int) -> String: var day_num = get_weekday(day, month, year) - return WEEKDAY_NAME[day_num] + return WEEKDAY_NAME[day_num + int(!week_starts_on_sunday)] func get_month_name(month : int) -> String: return MONTH_NAME[month - 1] diff --git a/addons/calendar_button/plugin.cfg b/addons/calendar_button/plugin.cfg index 18ed496..26fee4f 100644 --- a/addons/calendar_button/plugin.cfg +++ b/addons/calendar_button/plugin.cfg @@ -3,5 +3,5 @@ name="Calendar Button" description="Calendar Button plugin is a CalendarButton node that will display a popup window for selecting a date in an easy and efficient way." author="Ivan Skodje" -version="2.0.0" +version="2.1.0" script="calendar_button.gd" diff --git a/addons/calendar_button/popup.tscn b/addons/calendar_button/popup.tscn index 2db7df3..6a8c668 100644 --- a/addons/calendar_button/popup.tscn +++ b/addons/calendar_button/popup.tscn @@ -77,14 +77,14 @@ margin_bottom = 57.0 custom_constants/hseparation = 10 columns = 7 -[node name="label_sunday" type="Label" parent="PanelContainer/vbox/hbox_label_days"] +[node name="label_first" type="Label" parent="PanelContainer/vbox/hbox_label_days"] margin_right = 30.0 margin_bottom = 15.0 rect_min_size = Vector2( 30, 15 ) text = "Sun" align = 1 -[node name="label_monday" type="Label" parent="PanelContainer/vbox/hbox_label_days"] +[node name="label_second" type="Label" parent="PanelContainer/vbox/hbox_label_days"] margin_left = 40.0 margin_right = 70.0 margin_bottom = 15.0 @@ -92,14 +92,14 @@ rect_min_size = Vector2( 30, 15 ) text = "Mon" align = 1 -[node name="label_thuesday" type="Label" parent="PanelContainer/vbox/hbox_label_days"] +[node name="label_third" type="Label" parent="PanelContainer/vbox/hbox_label_days"] margin_left = 80.0 margin_right = 103.0 margin_bottom = 14.0 text = "Tue" align = 1 -[node name="label_wednesday" type="Label" parent="PanelContainer/vbox/hbox_label_days"] +[node name="label_fourth" type="Label" parent="PanelContainer/vbox/hbox_label_days"] margin_left = 113.0 margin_right = 143.0 margin_bottom = 15.0 @@ -107,7 +107,7 @@ rect_min_size = Vector2( 30, 15 ) text = "Wed" align = 1 -[node name="label_thursday" type="Label" parent="PanelContainer/vbox/hbox_label_days"] +[node name="label_fifth" type="Label" parent="PanelContainer/vbox/hbox_label_days"] margin_left = 153.0 margin_right = 183.0 margin_bottom = 15.0 @@ -115,7 +115,7 @@ rect_min_size = Vector2( 30, 15 ) text = "Thu" align = 1 -[node name="label_friday" type="Label" parent="PanelContainer/vbox/hbox_label_days"] +[node name="label_sixth" type="Label" parent="PanelContainer/vbox/hbox_label_days"] margin_left = 193.0 margin_right = 223.0 margin_bottom = 15.0 @@ -123,7 +123,7 @@ rect_min_size = Vector2( 30, 15 ) text = "Fri" align = 1 -[node name="label_saturday" type="Label" parent="PanelContainer/vbox/hbox_label_days"] +[node name="label_seventh" type="Label" parent="PanelContainer/vbox/hbox_label_days"] margin_left = 233.0 margin_right = 252.0 margin_bottom = 14.0 diff --git a/addons/calendar_button/scripts/calendar_buttons.gd b/addons/calendar_button/scripts/calendar_buttons.gd index aa52190..d867676 100644 --- a/addons/calendar_button/scripts/calendar_buttons.gd +++ b/addons/calendar_button/scripts/calendar_buttons.gd @@ -1,11 +1,14 @@ class_name CalendarButtons const BUTTONS_COUNT = 42 -var calendar = load("res://addons/calendar_button/class/calendar.gd").new() +var calendar : Calendar var buttons_container : GridContainer +var week_starts_on_sunday : bool -func _init(var calendar_script, var buttons_container : GridContainer): +func _init(var calendar_script, var buttons_container : GridContainer, var calendar : Calendar, var week_starts_on_sunday : bool): self.buttons_container = buttons_container + self.calendar = calendar + self.week_starts_on_sunday = week_starts_on_sunday setup_button_signals(calendar_script) func setup_button_signals(var calendar_script): @@ -17,7 +20,9 @@ func update_calendar_buttons(var selected_date : Date): _clear_calendar_buttons() var days_in_month : int = calendar.get_days_in_month(selected_date.month(), selected_date.year()) - var start_day_of_week : int = calendar.get_weekday(1, selected_date.month(), selected_date.year()) + + var start_day_of_week : int = calendar.get_weekday(int(week_starts_on_sunday), selected_date.month(), selected_date.year()) + for i in range(days_in_month): var btn_node : Button = buttons_container.get_node("btn_" + str(i + start_day_of_week)) btn_node.set_text(str(i + 1)) diff --git a/addons/calendar_button/scripts/calendar_script.gd b/addons/calendar_button/scripts/calendar_script.gd index 2685778..a1f133e 100644 --- a/addons/calendar_button/scripts/calendar_script.gd +++ b/addons/calendar_button/scripts/calendar_script.gd @@ -1,9 +1,11 @@ tool extends TextureButton +export var week_starts_on_sunday = true + signal date_selected(date_obj) -var calendar := Calendar.new() +var calendar := Calendar.new(week_starts_on_sunday) var selected_date := Date.new() var window_restrictor := WindowRestrictor.new() @@ -17,6 +19,7 @@ func _enter_tree(): calendar_buttons = create_calendar_buttons() setup_month_and_year_signals(popup) refresh_data() + setup_day_labels() func setup_calendar_icon(): texture_normal = load("res://addons/calendar_button/btn_img/btn_32x32_03.png") @@ -27,7 +30,7 @@ func create_popup_scene() -> Popup: func create_calendar_buttons() -> CalendarButtons: var calendar_container : GridContainer = popup.get_node("PanelContainer/vbox/hbox_days") - return CalendarButtons.new(self, calendar_container) + return CalendarButtons.new(self, calendar_container, calendar, week_starts_on_sunday) func setup_month_and_year_signals(popup : Popup): var month_year_path = "PanelContainer/vbox/hbox_month_year/" @@ -36,6 +39,21 @@ func setup_month_and_year_signals(popup : Popup): popup.get_node(month_year_path + "button_prev_year").connect("pressed",self,"go_prev_year") popup.get_node(month_year_path + "button_next_year").connect("pressed",self,"go_next_year") +func setup_day_labels(): + + var hbox_label_days = "PanelContainer/vbox/hbox_label_days/" + var hbox_label_days_node = popup.get_node(hbox_label_days) + + + var day_index = int(!week_starts_on_sunday) # 1 if starts on monday, 0 on sunday + + for day in hbox_label_days_node.get_children(): + print(day.get_name(), " ", day.text) + + day.text = calendar.WEEKDAY_NAME[day_index].substr(0, 3) + + day_index += 1 + func set_popup_title(title : String): var label_month_year_node := popup.get_node("PanelContainer/vbox/hbox_month_year/label_month_year") as Label label_month_year_node.set_text(title)