This is the third RC for K-IDE v1.1.6.0.
Changes since RC2 (1.1.5.91)
Data safety
- Atomic file writes — project, export and config files are written to a temp file and swapped in via File.Replace/Move; SaveASFile keeps the previous version as <name>.as.bak. A crash, power loss or full disk mid-write can no longer destroy the existing file. Covers save, autosave, export and config.xml.
- Warning before a project is saved or sent with missing programs — AsFile.CheckProgramConsistency() compares the program tree against the programs actually written and lets the user abort. Guards Save, Save As, save-as-template and all three send-to-robot paths.
- Program group memory no longer corrupts — the program manager minted duplicate group numbers within one session, which threw on reload and silently skipped the whole group assignment; ProgList.Generate is now hardened against already-corrupted files. Deleting a group also keeps the program names (no more blank rows).
- Load encoding is preserved on save — a Japanese backup with kanji-only comments was re-encoded to GB2312 and mojibaked on the next load. Projects now travel back to the controller in their original encoding whenever it can still represent the text.
Correctness
- Code folding no longer folds whole programs to end-of-file — identifiers starting with DO (e.g. do_ext_motor_on) were parsed as DO..UNTIL openers.
- Reformatter no longer tears apart scientific notation — 1.5E+10 became 1.5 E + 10, which the robot rejects.
- Syntax highlighting — quoted text inside comments is styled correctly; .* is only a comment marker in column 0 (so x = 2.*3 stays an expression); the numeric-constant group actually works now (its pattern was the literal text (0-9)) and covers exponential notation; confirming the syntax settings dialog no longer corrupts auto-completion until restart.
- Program names from localized controllers — on a German controller (Programm name) the error parser produced m name, so the error display showed the wrong name and jump-to-location failed. Extraction is now language-independent (EN/DE/IT/FR/ES/NL/JA/ZH/KO/RU, incl. full-width parentheses).
- Crash during transfer on a command-list progress message with value 0 (Items[-1]).
- Flowchart no longer kills the IDE — deep call chains caused an uncatchable StackOverflowException; recursion replaced by an iterative work stack and one Tarjan SCC pass. Recursive-edge tooltips said "Yes" for every edge.
Search and replace / identifier dialogs
- Selection in the search-and-replace dialog works again — the tree had both check boxes and a state image list, so the tri-state selection was invisible and the check boxes it showed instead were never read. Selection also propagated only one level in a three-level tree, so checking a program or group had no effect on what was replaced. See last RC's comments. Thanks to @alexengin
- Renamed variables are sent to the robot again — the list they travel in had been silently empty since October 2024, so a controller never learned the new name. Duplicate transfers of the renamed identifier are now filtered out.
- Compare online/offline: group nodes stay in sync with their children (All/None and after deleting).
Performance
- Saving large projects — deduplication of the variable-comment name list went from List.Contains (O(n·m)) to a HashSet; noticeable on projects with 100k+ identifiers.
- Flowchart — 5000-program fan-out: 1158 ms → 74 ms.
As always: feel free to download, install and test the new update and leave your comments! - Thank you!