mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-07-24 19:32:18 +00:00
Merge remote-tracking branch 'origin/main' into feature/protobuf_config_and_dynamic_ui
Reconcile main's config changes with the protobuf codegen: - New settings ported to proto schema (already present) and verified in generated PrintConfigDef/Preset_options/TabLayout + PrintConfig.hpp: small_support_perimeter_speed, small_support_perimeter_threshold, top_layer_direction, bottom_layer_direction, hole_to_polyhole_max_edges - Ported main's label/tooltip updates for adaptive_pressure_advance_overhangs and adaptive_pressure_advance_bridges into filament.proto (were dropped in the conflict resolution) and regenerated. - Kept main's non-generated logic (Preset.cpp nullable filament override force-emit). Codegen validated (python tools/run_codegen.py --validate-only): PASSED.
This commit is contained in:
@@ -85,6 +85,7 @@ def mode_to_cpp(mode_val):
|
||||
meta_pb2.MODE_SIMPLE: "comSimple",
|
||||
meta_pb2.MODE_ADVANCED: "comAdvanced",
|
||||
meta_pb2.MODE_DEVELOP: "comDevelop",
|
||||
meta_pb2.MODE_EXPERT: "comExpert",
|
||||
}.get(mode_val, "comAdvanced")
|
||||
|
||||
|
||||
@@ -128,7 +129,8 @@ def proto_type_to_co_type(field_desc, is_nullable=False):
|
||||
if ftype == TYPE_MESSAGE:
|
||||
if "FloatOrPercent" in type_name:
|
||||
if is_repeated:
|
||||
return ("coFloatsOrPercents", "ConfigOptionFloatsOrPercents", True)
|
||||
cls = "ConfigOptionFloatsOrPercentsNullable" if is_nullable else "ConfigOptionFloatsOrPercents"
|
||||
return ("coFloatsOrPercents", cls, True)
|
||||
return ("coFloatOrPercent", "ConfigOptionFloatOrPercent", False)
|
||||
elif "Point2D" in type_name:
|
||||
if is_repeated:
|
||||
@@ -518,10 +520,11 @@ class CodeGenerator:
|
||||
cls = "ConfigOptionEnumsGenericNullable" if is_nullable else "ConfigOptionEnumsGeneric"
|
||||
return f"new {cls}{{}}"
|
||||
NULLABLE_LIST_CLASS = {
|
||||
"coFloats": "ConfigOptionFloatsNullable",
|
||||
"coInts": "ConfigOptionIntsNullable",
|
||||
"coBools": "ConfigOptionBoolsNullable",
|
||||
"coPercents": "ConfigOptionPercentsNullable",
|
||||
"coFloats": "ConfigOptionFloatsNullable",
|
||||
"coInts": "ConfigOptionIntsNullable",
|
||||
"coBools": "ConfigOptionBoolsNullable",
|
||||
"coPercents": "ConfigOptionPercentsNullable",
|
||||
"coFloatsOrPercents": "ConfigOptionFloatsOrPercentsNullable",
|
||||
}
|
||||
all_classes = {**SCALAR_CLASS, **LIST_CLASS}
|
||||
if is_nullable and co_type in NULLABLE_LIST_CLASS:
|
||||
@@ -533,6 +536,12 @@ class CodeGenerator:
|
||||
if co_type in SCALAR_CLASS:
|
||||
return f"new {SCALAR_CLASS[co_type]}({args})"
|
||||
|
||||
if co_type == "coFloatsOrPercents":
|
||||
# Vector default is a single FloatOrPercent element (broadcast across
|
||||
# extruders for nullable per-extruder configs). args e.g. "0, false".
|
||||
cls = "ConfigOptionFloatsOrPercentsNullable" if is_nullable else "ConfigOptionFloatsOrPercents"
|
||||
return f"new {cls}{{FloatOrPercent({args})}}"
|
||||
|
||||
if co_type in LIST_CLASS:
|
||||
NULLABLE_LIST_CLASS = {
|
||||
"coFloats": "ConfigOptionFloatsNullable",
|
||||
@@ -736,7 +745,8 @@ def _extract_field_paths(tab_layout_cpp):
|
||||
return mapping
|
||||
|
||||
|
||||
def generate_tab_layout(layout_yaml_path, output_path, existing_cpp_path=None):
|
||||
def generate_tab_layout(layout_yaml_path, output_path, existing_cpp_path=None,
|
||||
variant_fields=None):
|
||||
"""
|
||||
Generate TabLayout_generated.cpp from layout.yaml.
|
||||
|
||||
@@ -763,6 +773,15 @@ def generate_tab_layout(layout_yaml_path, output_path, existing_cpp_path=None):
|
||||
# Bootstrap: extract existing field→path mappings so yaml doesn't need them all
|
||||
path_map = _extract_field_paths(existing_cpp_path) if existing_cpp_path else {}
|
||||
|
||||
variant_fields = variant_fields or set()
|
||||
|
||||
def _line_args(key, path):
|
||||
"""Build the trailing args for append_single_option_line(key, path, idx).
|
||||
Emits the variant opt index (0) for per-extruder multi-variant fields."""
|
||||
if key in variant_fields:
|
||||
return f', "{path}", 0' # path may be empty; idx=0 marks variant-aware
|
||||
return f', "{path}"' if path else ''
|
||||
|
||||
lines = [
|
||||
"// ===== AUTO-GENERATED by tools/config_codegen.py from layout.yaml =====",
|
||||
"// DO NOT EDIT MANUALLY. Edit layout.yaml and re-run: python tools/run_codegen.py",
|
||||
@@ -838,12 +857,15 @@ def generate_tab_layout(layout_yaml_path, output_path, existing_cpp_path=None):
|
||||
# Regular group: generate append_single_option_line / multi-option line
|
||||
for field in fields:
|
||||
if isinstance(field, list):
|
||||
# Multi-option line: [key1, key2, ...]
|
||||
# Multi-option line: [key1, key2, ...]. Variant fields
|
||||
# take the opt index via get_option(key, 0).
|
||||
lines.append(" {")
|
||||
first = field[0]
|
||||
lines.append(f" Line line_{{optgroup->get_option(\"{first}\").opt.label, optgroup->get_option(\"{first}\").opt.tooltip}};")
|
||||
first_idx = ", 0" if first in variant_fields else ""
|
||||
lines.append(f" Line line_{{optgroup->get_option(\"{first}\"{first_idx}).opt.label, optgroup->get_option(\"{first}\"{first_idx}).opt.tooltip}};")
|
||||
for k in field:
|
||||
lines.append(f" line_.append_option(optgroup->get_option(\"{k}\"));")
|
||||
k_idx = ", 0" if k in variant_fields else ""
|
||||
lines.append(f" line_.append_option(optgroup->get_option(\"{k}\"{k_idx}));")
|
||||
lines.append(" optgroup->append_line(line_);")
|
||||
lines.append(" }")
|
||||
elif isinstance(field, str):
|
||||
@@ -851,13 +873,11 @@ def generate_tab_layout(layout_yaml_path, output_path, existing_cpp_path=None):
|
||||
lines.append(" optgroup->append_separator();")
|
||||
else:
|
||||
path = path_map.get(field, '')
|
||||
path_arg = f', "{path}"' if path else ''
|
||||
lines.append(f" optgroup->append_single_option_line(\"{field}\"{path_arg});")
|
||||
lines.append(f" optgroup->append_single_option_line(\"{field}\"{_line_args(field, path)});")
|
||||
elif isinstance(field, dict):
|
||||
# {key: path} explicit path
|
||||
for key, path in field.items():
|
||||
path_arg = f', "{path}"' if path else ''
|
||||
lines.append(f" optgroup->append_single_option_line(\"{key}\"{path_arg});")
|
||||
lines.append(f" optgroup->append_single_option_line(\"{key}\"{_line_args(key, path)});")
|
||||
|
||||
lines.append(" }")
|
||||
|
||||
@@ -1016,7 +1036,14 @@ def main():
|
||||
if layout_yaml.exists():
|
||||
tab_layout_out = output_dir / "TabLayout_generated.cpp"
|
||||
existing = tab_layout_out if tab_layout_out.exists() else None
|
||||
generate_tab_layout(str(layout_yaml), str(tab_layout_out), str(existing) if existing else None)
|
||||
# Per-extruder multi-variant fields = nullable PRESET_PRINT settings.
|
||||
# These get the variant opt index so the generated layout binds them to
|
||||
# the extruder/variant switch (filament nullable overrides use a separate
|
||||
# checkbox mechanism and must NOT get an index).
|
||||
variant_fields = {f.name for f in gen.fields
|
||||
if f.is_nullable and f.preset == meta_pb2.PRESET_PRINT}
|
||||
generate_tab_layout(str(layout_yaml), str(tab_layout_out),
|
||||
str(existing) if existing else None, variant_fields)
|
||||
else:
|
||||
print(f" NOTE: layout.yaml not found at {layout_yaml}, skipping tab layout generation")
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ _sym_db = _symbol_database.Default()
|
||||
from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x63onfig_metadata.proto\x12\x04orca\x1a google/protobuf/descriptor.proto\"0\n\x0e\x46loatOrPercent\x12\r\n\x05value\x18\x01 \x01(\x01\x12\x0f\n\x07percent\x18\x02 \x01(\x08\"\x1f\n\x07Point2D\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01*B\n\nConfigMode\x12\x0f\n\x0bMODE_SIMPLE\x10\x00\x12\x11\n\rMODE_ADVANCED\x10\x01\x12\x10\n\x0cMODE_DEVELOP\x10\x02*G\n\nPresetType\x12\x10\n\x0cPRESET_PRINT\x10\x00\x12\x13\n\x0fPRESET_FILAMENT\x10\x01\x12\x12\n\x0ePRESET_PRINTER\x10\x02*\xaa\x01\n\x10InvalidationStep\x12\x15\n\x11STEP_GCODE_EXPORT\x10\x00\x12\x13\n\x0fSTEP_SKIRT_BRIM\x10\x01\x12\x13\n\x0fSTEP_WIPE_TOWER\x10\x02\x12\x0e\n\nSTEP_SLICE\x10\x03\x12\x13\n\x0fSTEP_PERIMETERS\x10\x04\x12\x0f\n\x0bSTEP_INFILL\x10\x05\x12\x10\n\x0cSTEP_SUPPORT\x10\x06\x12\r\n\tSTEP_NONE\x10\x07*\x81\x01\n\x14OptionListMembership\x12\r\n\tLIST_NONE\x10\x00\x12\x1d\n\x19LIST_EXTRUDER_OPTION_KEYS\x10\x01\x12\x1d\n\x19LIST_FILAMENT_OPTION_KEYS\x10\x02\x12\x1c\n\x18LIST_VARIANT_OPTION_KEYS\x10\x03*\\\n\nCoTypeHint\x12\x16\n\x12\x43O_TYPE_HINT_UNSET\x10\x00\x12\r\n\tcoPercent\x10\x01\x12\x0e\n\ncoPercents\x10\x02\x12\n\n\x06\x63oEnum\x10\x03\x12\x0b\n\x07\x63oEnums\x10\x04*\x83\x01\n\x07GuiType\x12\x12\n\x0eGUI_TYPE_UNSET\x10\x00\x12\x0f\n\x0bi_enum_open\x10\x01\x12\x0f\n\x0b\x66_enum_open\x10\x02\x12\t\n\x05\x63olor\x10\x03\x12\x0f\n\x0bselect_open\x10\x04\x12\n\n\x06slider\x10\x05\x12\n\n\x06legend\x10\x06\x12\x0e\n\none_string\x10\x07:.\n\x05label\x12\x1d.google.protobuf.FieldOptions\x18\xd1\x86\x03 \x01(\t:3\n\nfull_label\x12\x1d.google.protobuf.FieldOptions\x18\xd2\x86\x03 \x01(\t:0\n\x07tooltip\x12\x1d.google.protobuf.FieldOptions\x18\xd3\x86\x03 \x01(\t:1\n\x08\x63\x61tegory\x12\x1d.google.protobuf.FieldOptions\x18\xd4\x86\x03 \x01(\t:1\n\x08sidetext\x12\x1d.google.protobuf.FieldOptions\x18\xd5\x86\x03 \x01(\t:2\n\tmin_value\x12\x1d.google.protobuf.FieldOptions\x18\xd6\x86\x03 \x01(\x01:2\n\tmax_value\x12\x1d.google.protobuf.FieldOptions\x18\xd7\x86\x03 \x01(\x01:4\n\x0bmax_literal\x12\x1d.google.protobuf.FieldOptions\x18\xd8\x86\x03 \x01(\x01:?\n\x04mode\x12\x1d.google.protobuf.FieldOptions\x18\xd9\x86\x03 \x01(\x0e\x32\x10.orca.ConfigMode:3\n\nratio_over\x12\x1d.google.protobuf.FieldOptions\x18\xda\x86\x03 \x01(\t:2\n\tmultiline\x12\x1d.google.protobuf.FieldOptions\x18\xdd\x86\x03 \x01(\x08:3\n\nfull_width\x12\x1d.google.protobuf.FieldOptions\x18\xde\x86\x03 \x01(\x08:/\n\x06height\x12\x1d.google.protobuf.FieldOptions\x18\xdf\x86\x03 \x01(\x05:A\n\x06preset\x12\x1d.google.protobuf.FieldOptions\x18\xdb\x86\x03 \x01(\x0e\x32\x10.orca.PresetType:L\n\x0binvalidates\x12\x1d.google.protobuf.FieldOptions\x18\xdc\x86\x03 \x03(\x0e\x32\x16.orca.InvalidationStep:T\n\x0flist_membership\x12\x1d.google.protobuf.FieldOptions\x18\xe2\x86\x03 \x03(\x0e\x32\x1a.orca.OptionListMembership:4\n\x0blegacy_name\x12\x1d.google.protobuf.FieldOptions\x18\xe0\x86\x03 \x01(\t:4\n\x0bis_nullable\x12\x1d.google.protobuf.FieldOptions\x18\xe1\x86\x03 \x01(\x08:@\n\x08gui_type\x12\x1d.google.protobuf.FieldOptions\x18\xe3\x86\x03 \x01(\x0e\x32\r.orca.GuiType:2\n\tgui_flags\x12\x1d.google.protobuf.FieldOptions\x18\xe4\x86\x03 \x01(\t::\n\x11\x65num_keys_map_ref\x12\x1d.google.protobuf.FieldOptions\x18\xe5\x86\x03 \x01(\t:/\n\x06no_cli\x12\x1d.google.protobuf.FieldOptions\x18\xe6\x86\x03 \x01(\x08:1\n\x08readonly\x12\x1d.google.protobuf.FieldOptions\x18\xe7\x86\x03 \x01(\x08:G\n\x0c\x63o_type_hint\x12\x1d.google.protobuf.FieldOptions\x18\xe8\x86\x03 \x01(\x0e\x32\x10.orca.CoTypeHint:6\n\rdefault_value\x12\x1d.google.protobuf.FieldOptions\x18\xe9\x86\x03 \x01(\t:4\n\x0bhas_default\x12\x1d.google.protobuf.FieldOptions\x18\xec\x86\x03 \x01(\x08:;\n\x12\x65num_value_entries\x12\x1d.google.protobuf.FieldOptions\x18\xea\x86\x03 \x03(\t:;\n\x12\x65num_label_entries\x12\x1d.google.protobuf.FieldOptions\x18\xeb\x86\x03 \x03(\t:1\n\x08tab_type\x12\x1d.google.protobuf.FieldOptions\x18\xed\x86\x03 \x01(\t:1\n\x08tab_page\x12\x1d.google.protobuf.FieldOptions\x18\xee\x86\x03 \x01(\t:5\n\x0ctab_optgroup\x12\x1d.google.protobuf.FieldOptions\x18\xef\x86\x03 \x01(\t:>\n\x13virtual_preset_keys\x12\x1f.google.protobuf.MessageOptions\x18\xe1\xd4\x03 \x03(\tb\x06proto3')
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x63onfig_metadata.proto\x12\x04orca\x1a google/protobuf/descriptor.proto\"0\n\x0e\x46loatOrPercent\x12\r\n\x05value\x18\x01 \x01(\x01\x12\x0f\n\x07percent\x18\x02 \x01(\x08\"\x1f\n\x07Point2D\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01*S\n\nConfigMode\x12\x0f\n\x0bMODE_SIMPLE\x10\x00\x12\x11\n\rMODE_ADVANCED\x10\x01\x12\x10\n\x0cMODE_DEVELOP\x10\x02\x12\x0f\n\x0bMODE_EXPERT\x10\x03*G\n\nPresetType\x12\x10\n\x0cPRESET_PRINT\x10\x00\x12\x13\n\x0fPRESET_FILAMENT\x10\x01\x12\x12\n\x0ePRESET_PRINTER\x10\x02*\xaa\x01\n\x10InvalidationStep\x12\x15\n\x11STEP_GCODE_EXPORT\x10\x00\x12\x13\n\x0fSTEP_SKIRT_BRIM\x10\x01\x12\x13\n\x0fSTEP_WIPE_TOWER\x10\x02\x12\x0e\n\nSTEP_SLICE\x10\x03\x12\x13\n\x0fSTEP_PERIMETERS\x10\x04\x12\x0f\n\x0bSTEP_INFILL\x10\x05\x12\x10\n\x0cSTEP_SUPPORT\x10\x06\x12\r\n\tSTEP_NONE\x10\x07*\x81\x01\n\x14OptionListMembership\x12\r\n\tLIST_NONE\x10\x00\x12\x1d\n\x19LIST_EXTRUDER_OPTION_KEYS\x10\x01\x12\x1d\n\x19LIST_FILAMENT_OPTION_KEYS\x10\x02\x12\x1c\n\x18LIST_VARIANT_OPTION_KEYS\x10\x03*\\\n\nCoTypeHint\x12\x16\n\x12\x43O_TYPE_HINT_UNSET\x10\x00\x12\r\n\tcoPercent\x10\x01\x12\x0e\n\ncoPercents\x10\x02\x12\n\n\x06\x63oEnum\x10\x03\x12\x0b\n\x07\x63oEnums\x10\x04*\x83\x01\n\x07GuiType\x12\x12\n\x0eGUI_TYPE_UNSET\x10\x00\x12\x0f\n\x0bi_enum_open\x10\x01\x12\x0f\n\x0b\x66_enum_open\x10\x02\x12\t\n\x05\x63olor\x10\x03\x12\x0f\n\x0bselect_open\x10\x04\x12\n\n\x06slider\x10\x05\x12\n\n\x06legend\x10\x06\x12\x0e\n\none_string\x10\x07:.\n\x05label\x12\x1d.google.protobuf.FieldOptions\x18\xd1\x86\x03 \x01(\t:3\n\nfull_label\x12\x1d.google.protobuf.FieldOptions\x18\xd2\x86\x03 \x01(\t:0\n\x07tooltip\x12\x1d.google.protobuf.FieldOptions\x18\xd3\x86\x03 \x01(\t:1\n\x08\x63\x61tegory\x12\x1d.google.protobuf.FieldOptions\x18\xd4\x86\x03 \x01(\t:1\n\x08sidetext\x12\x1d.google.protobuf.FieldOptions\x18\xd5\x86\x03 \x01(\t:2\n\tmin_value\x12\x1d.google.protobuf.FieldOptions\x18\xd6\x86\x03 \x01(\x01:2\n\tmax_value\x12\x1d.google.protobuf.FieldOptions\x18\xd7\x86\x03 \x01(\x01:4\n\x0bmax_literal\x12\x1d.google.protobuf.FieldOptions\x18\xd8\x86\x03 \x01(\x01:?\n\x04mode\x12\x1d.google.protobuf.FieldOptions\x18\xd9\x86\x03 \x01(\x0e\x32\x10.orca.ConfigMode:3\n\nratio_over\x12\x1d.google.protobuf.FieldOptions\x18\xda\x86\x03 \x01(\t:2\n\tmultiline\x12\x1d.google.protobuf.FieldOptions\x18\xdd\x86\x03 \x01(\x08:3\n\nfull_width\x12\x1d.google.protobuf.FieldOptions\x18\xde\x86\x03 \x01(\x08:/\n\x06height\x12\x1d.google.protobuf.FieldOptions\x18\xdf\x86\x03 \x01(\x05:A\n\x06preset\x12\x1d.google.protobuf.FieldOptions\x18\xdb\x86\x03 \x01(\x0e\x32\x10.orca.PresetType:L\n\x0binvalidates\x12\x1d.google.protobuf.FieldOptions\x18\xdc\x86\x03 \x03(\x0e\x32\x16.orca.InvalidationStep:T\n\x0flist_membership\x12\x1d.google.protobuf.FieldOptions\x18\xe2\x86\x03 \x03(\x0e\x32\x1a.orca.OptionListMembership:4\n\x0blegacy_name\x12\x1d.google.protobuf.FieldOptions\x18\xe0\x86\x03 \x01(\t:4\n\x0bis_nullable\x12\x1d.google.protobuf.FieldOptions\x18\xe1\x86\x03 \x01(\x08:@\n\x08gui_type\x12\x1d.google.protobuf.FieldOptions\x18\xe3\x86\x03 \x01(\x0e\x32\r.orca.GuiType:2\n\tgui_flags\x12\x1d.google.protobuf.FieldOptions\x18\xe4\x86\x03 \x01(\t::\n\x11\x65num_keys_map_ref\x12\x1d.google.protobuf.FieldOptions\x18\xe5\x86\x03 \x01(\t:/\n\x06no_cli\x12\x1d.google.protobuf.FieldOptions\x18\xe6\x86\x03 \x01(\x08:1\n\x08readonly\x12\x1d.google.protobuf.FieldOptions\x18\xe7\x86\x03 \x01(\x08:G\n\x0c\x63o_type_hint\x12\x1d.google.protobuf.FieldOptions\x18\xe8\x86\x03 \x01(\x0e\x32\x10.orca.CoTypeHint:6\n\rdefault_value\x12\x1d.google.protobuf.FieldOptions\x18\xe9\x86\x03 \x01(\t:4\n\x0bhas_default\x12\x1d.google.protobuf.FieldOptions\x18\xec\x86\x03 \x01(\x08:;\n\x12\x65num_value_entries\x12\x1d.google.protobuf.FieldOptions\x18\xea\x86\x03 \x03(\t:;\n\x12\x65num_label_entries\x12\x1d.google.protobuf.FieldOptions\x18\xeb\x86\x03 \x03(\t:1\n\x08tab_type\x12\x1d.google.protobuf.FieldOptions\x18\xed\x86\x03 \x01(\t:1\n\x08tab_page\x12\x1d.google.protobuf.FieldOptions\x18\xee\x86\x03 \x01(\t:5\n\x0ctab_optgroup\x12\x1d.google.protobuf.FieldOptions\x18\xef\x86\x03 \x01(\t:>\n\x13virtual_preset_keys\x12\x1f.google.protobuf.MessageOptions\x18\xe1\xd4\x03 \x03(\tb\x06proto3')
|
||||
|
||||
_globals = globals()
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
||||
@@ -33,17 +33,17 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'config_metadata_pb2', _glob
|
||||
if not _descriptor._USE_C_DESCRIPTORS:
|
||||
DESCRIPTOR._loaded_options = None
|
||||
_globals['_CONFIGMODE']._serialized_start=148
|
||||
_globals['_CONFIGMODE']._serialized_end=214
|
||||
_globals['_PRESETTYPE']._serialized_start=216
|
||||
_globals['_PRESETTYPE']._serialized_end=287
|
||||
_globals['_INVALIDATIONSTEP']._serialized_start=290
|
||||
_globals['_INVALIDATIONSTEP']._serialized_end=460
|
||||
_globals['_OPTIONLISTMEMBERSHIP']._serialized_start=463
|
||||
_globals['_OPTIONLISTMEMBERSHIP']._serialized_end=592
|
||||
_globals['_COTYPEHINT']._serialized_start=594
|
||||
_globals['_COTYPEHINT']._serialized_end=686
|
||||
_globals['_GUITYPE']._serialized_start=689
|
||||
_globals['_GUITYPE']._serialized_end=820
|
||||
_globals['_CONFIGMODE']._serialized_end=231
|
||||
_globals['_PRESETTYPE']._serialized_start=233
|
||||
_globals['_PRESETTYPE']._serialized_end=304
|
||||
_globals['_INVALIDATIONSTEP']._serialized_start=307
|
||||
_globals['_INVALIDATIONSTEP']._serialized_end=477
|
||||
_globals['_OPTIONLISTMEMBERSHIP']._serialized_start=480
|
||||
_globals['_OPTIONLISTMEMBERSHIP']._serialized_end=609
|
||||
_globals['_COTYPEHINT']._serialized_start=611
|
||||
_globals['_COTYPEHINT']._serialized_end=703
|
||||
_globals['_GUITYPE']._serialized_start=706
|
||||
_globals['_GUITYPE']._serialized_end=837
|
||||
_globals['_FLOATORPERCENT']._serialized_start=65
|
||||
_globals['_FLOATORPERCENT']._serialized_end=113
|
||||
_globals['_POINT2D']._serialized_start=115
|
||||
|
||||
Reference in New Issue
Block a user