From 453d9dc7347d1fde885f8068347c620946b4cc46 Mon Sep 17 00:00:00 2001 From: Iceflower Date: Mon, 11 Sep 2023 19:39:41 +0200 Subject: [PATCH] [plugin|qr] Make eci value optional Close #4 --- README.md | 8 ++++++++ addons/qr_code/plugin.cfg | 2 +- addons/qr_code/qr_code.gd | 14 +++++++++++--- addons/qr_code/qr_code_rect.gd | 34 +++++++++++++++++++++++++++++++-- doc/qr_code.png | Bin 27886 -> 26671 bytes examples/qr_code/main.gd | 19 +++++++++--------- examples/qr_code/main.tscn | 25 +++++++++--------------- 7 files changed, 70 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 8b26c5c..a3fed44 100644 --- a/README.md +++ b/README.md @@ -317,6 +317,8 @@ QR Code generation either with the included `QRCodeRect` node or use the encodin - `mode: QRCode.Mode` - `error_correction: QRCode.ErrorCorrection` +- `use_eci: bool` + Use Extended Channel Interpretation (ECI) - `eci_value: int` Extended Channel Interpretation (ECI) Value - `data: Variant` @@ -363,6 +365,8 @@ QRCode class to generate QR Codes. - `mode: Mode` - `error_correction: ErrorCorrection` +- `use_eci: bool` + Use Extended Channel Interpretation (ECI) - `eci_value: int` Extended Channel Interpretation (ECI) Value - `auto_version: bool` @@ -404,6 +408,10 @@ Shift JIS encoding utility. ### Changelog +#### 0.3.0 + +- Make ECI value optional + #### 0.2.0 - Added quiet zone size property diff --git a/addons/qr_code/plugin.cfg b/addons/qr_code/plugin.cfg index 13088a5..840ffe5 100644 --- a/addons/qr_code/plugin.cfg +++ b/addons/qr_code/plugin.cfg @@ -3,5 +3,5 @@ name="QR Code" description="QR Code generator. - MIT License" author="Iceflower S" -version="0.2.0" +version="0.3.0" script="plugin.gd" diff --git a/addons/qr_code/qr_code.gd b/addons/qr_code/qr_code.gd index 2733f61..c220f4f 100644 --- a/addons/qr_code/qr_code.gd +++ b/addons/qr_code/qr_code.gd @@ -696,10 +696,12 @@ var mode: Mode = Mode.NUMERIC: ## Error Correction var error_correction: ErrorCorrection = ErrorCorrection.LOW: set = set_error_correction -## Extended Channel Interpretation (ECI) Value. +## Set to true if you want to specify an ECI value. +var use_eci: bool = false: + set = set_use_eci +## Extended Channel Interpretation (ECI) Value. Is only used if `use_eci` is true. var eci_value: int = ECI.ISO_8859_1: set = set_eci_value - ## Use automatically the smallest version var auto_version: bool = true: set = set_auto_version @@ -743,6 +745,12 @@ func set_mode(new_mode: Mode) -> void: self._input_data = PackedByteArray() self._clear_cache() +func set_use_eci(new_use_eci: bool) -> void: + if new_use_eci == use_eci: + return + use_eci = new_use_eci + self._clear_cache() + func set_eci_value(new_eci_value: int) -> void: if new_eci_value == eci_value: return @@ -967,7 +975,7 @@ func _encode_data() -> BitStream: var stream: BitStream = BitStream.new() # add ECI header - if self.eci_value != int(ECI.ISO_8859_1): + if self.use_eci: stream.append(0b0111, 4) if self.eci_value <= 127: stream.append(0, 1) diff --git a/addons/qr_code/qr_code_rect.gd b/addons/qr_code/qr_code_rect.gd index 4e029f3..6d889ba 100644 --- a/addons/qr_code/qr_code_rect.gd +++ b/addons/qr_code/qr_code_rect.gd @@ -14,8 +14,12 @@ var _qr: QRCode = QRCode.new() @export var error_correction: QRCode.ErrorCorrection: set = set_error_correction, get = get_error_correction +## Use Extended Channel Interpretation (ECI). +var use_eci: bool: + set = set_use_eci, + get = get_use_eci ## Extended Channel Interpretation (ECI) Value. -@export var eci_value: QRCode.ECI: +var eci_value: int: set = set_eci_value, get = get_eci_value var data: Variant = "": @@ -67,6 +71,14 @@ func set_error_correction(new_error_correction: QRCode.ErrorCorrection) -> void: func get_error_correction() -> QRCode.ErrorCorrection: return self._qr.error_correction +func set_use_eci(new_use_eci: bool) -> void: + self._qr.use_eci = new_use_eci + self.notify_property_list_changed() + self._update_qr() + +func get_use_eci() -> bool: + return self._qr.use_eci + func set_eci_value(new_eci_value: int) -> void: self._qr.eci_value = new_eci_value self.notify_property_list_changed() @@ -181,6 +193,16 @@ func _set(property: StringName, value: Variant) -> bool: return false func _get_property_list() -> Array[Dictionary]: + var eci_value_prop: Dictionary = { + "name": "eci_value", + "type": TYPE_INT, + "usage": PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_STORAGE, + "hint": PROPERTY_HINT_ENUM, + "hint_string": "Code Page 437:2,ISO 8859-1:3,ISO 8859-2:4,ISO 8859-3:5,ISO 8859-4:6,ISO 8859-5:7,ISO 8859-6:8,ISO 8859-7:9,ISO 8859-8:10,ISO 8859-9:11,ISO 8859-10:12,ISO 8859-11:13,ISO 8859-12:14,ISO 8859-13:15,ISO 8859-14:16,ISO 8859-15:17,ISO 8859-16:18,Shift JIS:20,Windows 1250:21,Windows 1251:22,Windows 1252:23,Windows 1256:24,UTF-16:25,UTF-8:26,US ASCII:27,BIG 5:28,GB 18030:29,EUC KR:30" + } + if !self.use_eci: + eci_value_prop["usage"] = (eci_value_prop["usage"] | PROPERTY_USAGE_READ_ONLY) & ~PROPERTY_USAGE_STORAGE + var data_prop: Dictionary = { "name": "data", "usage": PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_STORAGE, @@ -230,6 +252,12 @@ func _get_property_list() -> Array[Dictionary]: module_px_size_prop["usage"] = (module_px_size_prop["usage"] | PROPERTY_USAGE_READ_ONLY) & ~PROPERTY_USAGE_STORAGE return [ + { + "name": "use_eci", + "type": TYPE_BOOL, + "usage": PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_STORAGE, + }, + eci_value_prop, data_prop, { "name": "auto_version", @@ -273,10 +301,12 @@ func _get_property_list() -> Array[Dictionary]: ] func _property_can_revert(property: StringName) -> bool: - return property in ["auto_version", "auto_mask_pattern", "light_module_color", "dark_module_color", "auto_module_px_size", "quiet_zone_size"] + return property in ["eci_value", "auto_version", "auto_mask_pattern", "light_module_color", "dark_module_color", "auto_module_px_size", "quiet_zone_size"] func _property_get_revert(property: StringName) -> Variant: match property: + "eci_value": + return QRCode.ECI.ISO_8859_1 "auto_version": return true "auto_mask_pattern": diff --git a/doc/qr_code.png b/doc/qr_code.png index 1dbc8b4bb26723b910e041a158d3655fde7d7a04..5c973e02eccb713973a82cc25c62452643007929 100644 GIT binary patch literal 26671 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

0ZN8HgaMTF8H1u>S!HM;~};pKPD_&udLT8$MXS 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 R;YWTDr&P6%=crf&|36J65g7mg literal 27886 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 diff --git a/examples/qr_code/main.gd b/examples/qr_code/main.gd index 86dff6c..e2c7018 100644 --- a/examples/qr_code/main.gd +++ b/examples/qr_code/main.gd @@ -5,16 +5,10 @@ const QRCode = preload("res://addons/qr_code/qr_code.gd") @export var _input_data_text: TextEdit @export var _encoding: OptionButton @export var _error_correction: OptionButton -@export var _eci_indicator: OptionButton -@export var _auto_version: CheckBox +@export var _eci_value: OptionButton @export var _version: SpinBox -@export var _auto_mask_pattern: CheckBox @export var _mask_pattern: SpinBox -@export var _light_module_color: ColorPickerButton -@export var _dark_module_color: ColorPickerButton -@export var _auto_module_px_size: CheckBox @export var _module_px_size: SpinBox -@export var _quiet_zone_size: SpinBox @export var _qr_rect: QRCodeRect @@ -44,8 +38,13 @@ func _on_error_correction_item_selected(_index: int) -> void: self._qr_rect.error_correction = self._error_correction.get_selected_id() as QRCode.ErrorCorrection self._update_values() -func _on_eci_indicator_item_selected(_index: int) -> void: - self._qr_rect.eci_value = self._eci_indicator.get_selected_id() as QRCode.ECI +func _on_use_eci_toggled(button_pressed: bool) -> void: + self._qr_rect.use_eci = button_pressed + self._eci_value.disabled = !button_pressed + self._update_values() + +func _on_eci_value_item_selected(_index: int) -> void: + self._qr_rect.eci_value = self._eci_value.get_selected_id() as QRCode.ECI self._update_values() func _on_auto_version_toggled(button_pressed: bool) -> void: @@ -83,6 +82,6 @@ func _on_module_px_size_value_changed(value: float) -> void: self._qr_rect.module_px_size = int(value) self._update_values() -func _on_quiet_zone_size_value_changed(value: float): +func _on_quiet_zone_size_value_changed(value: float) -> void: self._qr_rect.quiet_zone_size = int(value) self._update_values() diff --git a/examples/qr_code/main.tscn b/examples/qr_code/main.tscn index 4a02007..fd867a2 100644 --- a/examples/qr_code/main.tscn +++ b/examples/qr_code/main.tscn @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://examples/qr_code/main.gd" id="1_55tdt"] [ext_resource type="Script" path="res://addons/qr_code/qr_code_rect.gd" id="1_t1m1p"] -[node name="HBoxContainer" type="HBoxContainer" node_paths=PackedStringArray("_input_data_text", "_encoding", "_error_correction", "_eci_indicator", "_auto_version", "_version", "_auto_mask_pattern", "_mask_pattern", "_light_module_color", "_dark_module_color", "_auto_module_px_size", "_module_px_size", "_qr_rect")] +[node name="HBoxContainer" type="HBoxContainer" node_paths=PackedStringArray("_input_data_text", "_encoding", "_error_correction", "_eci_value", "_version", "_mask_pattern", "_module_px_size", "_qr_rect")] anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 @@ -13,14 +13,9 @@ script = ExtResource("1_55tdt") _input_data_text = NodePath("MarginContainer2/VBoxContainer/InputDataText") _encoding = NodePath("MarginContainer2/VBoxContainer/options/Encoding") _error_correction = NodePath("MarginContainer2/VBoxContainer/options/ErrorCorrection") -_eci_indicator = NodePath("MarginContainer2/VBoxContainer/options/ECIIndicator") -_auto_version = NodePath("MarginContainer2/VBoxContainer/options/AutoVersion") +_eci_value = NodePath("MarginContainer2/VBoxContainer/options/ECIValue") _version = NodePath("MarginContainer2/VBoxContainer/options/Version") -_auto_mask_pattern = NodePath("MarginContainer2/VBoxContainer/options/AutoMaskPattern") _mask_pattern = NodePath("MarginContainer2/VBoxContainer/options/MaskPattern") -_light_module_color = NodePath("MarginContainer2/VBoxContainer/options/LightModuleColor") -_dark_module_color = NodePath("MarginContainer2/VBoxContainer/options/DarkModuleColor") -_auto_module_px_size = NodePath("MarginContainer2/VBoxContainer/options/AutoModulePxSize") _module_px_size = NodePath("MarginContainer2/VBoxContainer/options/ModulePxSize") _qr_rect = NodePath("MarginContainer/QRCodeRect") @@ -93,17 +88,14 @@ popup/item_3/id = 2 [node name="ECIModeLabel" type="Label" parent="MarginContainer2/VBoxContainer/options"] layout_mode = 2 -text = "ECI Indicator" +text = "ECI Value" -[node name="ECIModeLabelTip" type="Label" parent="MarginContainer2/VBoxContainer/options"] +[node name="UseECI" type="CheckBox" parent="MarginContainer2/VBoxContainer/options"] layout_mode = 2 -tooltip_text = "For ECI other than ISO 8859-1, choose BYTE encoding." -mouse_filter = 0 -text = "*" -horizontal_alignment = 1 -[node name="ECIIndicator" type="OptionButton" parent="MarginContainer2/VBoxContainer/options"] +[node name="ECIValue" type="OptionButton" parent="MarginContainer2/VBoxContainer/options"] layout_mode = 2 +disabled = true alignment = 1 item_count = 5 selected = 0 @@ -220,7 +212,7 @@ stretch_mode = 5 script = ExtResource("1_t1m1p") mode = 1 error_correction = 1 -eci_value = 3 +use_eci = false data = "" auto_version = true auto_mask_pattern = true @@ -235,7 +227,8 @@ layout_mode = 2 [connection signal="text_changed" from="MarginContainer2/VBoxContainer/InputDataText" to="." method="_on_input_data_text_text_changed"] [connection signal="item_selected" from="MarginContainer2/VBoxContainer/options/Encoding" to="." method="_on_encoding_item_selected"] [connection signal="item_selected" from="MarginContainer2/VBoxContainer/options/ErrorCorrection" to="." method="_on_error_correction_item_selected"] -[connection signal="item_selected" from="MarginContainer2/VBoxContainer/options/ECIIndicator" to="." method="_on_eci_indicator_item_selected"] +[connection signal="toggled" from="MarginContainer2/VBoxContainer/options/UseECI" to="." method="_on_use_eci_toggled"] +[connection signal="item_selected" from="MarginContainer2/VBoxContainer/options/ECIValue" to="." method="_on_eci_value_item_selected"] [connection signal="toggled" from="MarginContainer2/VBoxContainer/options/AutoVersion" to="." method="_on_auto_version_toggled"] [connection signal="value_changed" from="MarginContainer2/VBoxContainer/options/Version" to="." method="_on_version_value_changed"] [connection signal="toggled" from="MarginContainer2/VBoxContainer/options/AutoMaskPattern" to="." method="_on_auto_mask_pattern_toggled"]