~ Move UI to new FileSyncDialog class;
~ Improve UI responsiveness during operation (closes#5005);
+ Add log verbosity option (also helps with UI response);
+ Add several filtering settings in new "extra options" panel (include/exlude patterns, symlinks, recursive, empty folders);
~ Exclude patterns ".*" and "System Volume*" by default (addresses #5213, #5106);
+ Sanity check file timestamps when using date comparison, future dates are invalid (addresses #5735);
~ Folders are no longer included in file counts (total/created/etc);
~ Ignore unreadable files/dirs (also enables NTFS permissions check);
~ Switch from QMutex to QReadWriteLock.
~ All stored properties are fully dynamic, using an extended version of the Qt Property System;
~ CompStoreObj is now QObject subclass;
+ All properties now have change notifier signals;
~ Do not store default values in settings;
+ Add _reset() and _default() functions for each property;
+ Settings import now ignores all non-existent properties automatically;
+ Add settings export functions;
+ Add more version macros;
~ Remove template functions;
~ Move DownloadBranchType and create NewModelAction enums and register with Qt meta system;
~ Multiple efficiency and optimization changes (const functions, literals, etc).
* [Companion] Qualify all remaining QObject translations with proper class/object names; Centralize some common strings into constants.h.
* [Companion] Replace all instances of some common strings with macros from constants.h.
* [Companion] Fix translation warnings from lupdate.
* Move MultiposPots & MultiposPotsPositions capability lookups and getAnalogInputName() to Boards class.
* Add RawSource::isAvailable() and RawSwitch::isAvailable(); Add board type param to various RawSource lookup functions.
* Add CustomFunctionData::toString(), FlightModeData::toString(), FactoryInstalledPots board capability, MAX_SWITCH_TYPE, & break out GeneralSettings source/switch defaults to own function.
* Add RadioDataConversionState class for tracking conversion actions.
* Implement RadioDataConversionState handler, add conversion process report, and improve/fix conversion issues:
* Make sure all switches/pots/knobs have default configs for destination board type;
* Try to move more custom control names, intelligently;
* Convert model timers and throttle source;
* Adjust for Horus 6P switch in place of Taranis S2 knob;
* Adjust for extra sliders on X12 and X9E to move LS and RS to proper slots as needed;
* Make sure ALL controls are validated, eg. to always account for extra trims/analogs/switches/etc which don't exist on destination;
* Properly indicate invalid RawSource::toString() items with "???".
* Allow user to cancel out of file conversions & provide ample warnings if switching radio type/profile with unsaved file(s) still open;
Also: Fix bug with some orphaned MdiChild windows never being deleted; Create static bool Storage::isBoardCompatible(b1, b2).
* Add maxLibQt "stub" (will not compile).
* Add ExportableTableView for better presentation of conversion results table.
* Move getFourCC() and isBoardCompatible() to Boards class.
* [Companion] On first use of Companion show preferences dialog and new welcome message (closes#4731); Improve detection of new version upgrade & reformat message; Add download link URL to Linux update notice (closes#4774); Fix issue with leftover top-level settings categories when checking for older versions which don't exist; Introduce basic structure for warnings/messages to be suppressed by user preferences (eg. "don't show this message again" option).
* Welcome msg typo fix.
* Complete re-write of SyncProcess, now more robust, UI-independent, runs in own thread, large speed boost;
* Use file hash comparisons instead of byte-level compare with string methods (probable fixes for #4837 and #4848);
* New pre-sync options dialog with selectable folders and other settings (settings are remembered until app exit);
* Option to choose sync direction(s) (up/down/bi) and the order in which bi-directional sync runs;
* Option to choose file comparison mode (timestamp/hash/both) or force overwrite (for one-way sync);
* Option to set a maximum file size to copy;
* Option to do a test run w/out actually copying any files;
* Better reporting of progress, total counts (copied/updated/skipped), and errors, with color coding;
* Much more reliable to cancel long-running/hung copy process;
* ProgressWidget can now display rich-text in the text browser, added some new functions for usage;
* Misc. small layout tweaks to ProgressDialog and ProgressWidget to make them behave/look better;
* [Companion] Refactor MdiChild & TreeModel, restore drag/drop, and more:
* Add full drag-and-drop functions to the models list, including model copy, move, and insert actions (also between windows);
* Add general radio settings copy/paste across file windows;
* Full MIME support with distinct types for various data (eg. models vs. general settings), also add new type for metadata (header);
* Copied/cut models can now be inserted in any spot (similar to drop-insert);
* Deleted/cut models can now be removed entirely (including the empty slot) for all radio types (any models after the removed one move up, like for Horus) (may need to make this an option);
* Empty model slots can now also be removed (any models after the removed slot move up) (but total # of slots is still maintained);
* Default model can be deleted (new default is picked);
* Completely revamp the actions system (copy/paste/edit/etc) to make it fully functional:
* Actions exist in the window, not just context menu, therefore all keyboard shortcuts actually work, w/out any duplicated code;
* Provides access from MainWindow in a comprehensive manner: all actions are available and properly updated based on selections in current editor window, w/out awkward event monitoring;
* More actions available from context menu, and somewhat reorganized;
* Also show all actions on mini toolbars right in the MDI window (possibly make optional later);
* Updated English localization file to account for plurals usage in new action item names (other languages need to be updated);
* Keyboard navigation in the model list now works/practical;
* MDI window uses all available height by default;
* Newly added models/categories are selected and highlighted; Category names are immediately editable; Model editor is/can be launched if wizard is not (need to make option);
* MainWindow updates:
* Edit toolbar and menu now showing all available edit actions, with proper context;
* File menu properly updates with all "general" radio actions: edit/copy/paste settings and simulate radio;
* Added Windows menu showing list of open windows (eg. to switch when full screen) and tabbed window option (need to make persistent setting);
* Immediate update of icon size preference;
* Do not delete toolbars when re-translating UI (they don't lose assigned position);
* [Companion] Restore model compare functionality by using new MIME data exchange system; Add ability to compare any number of models at a time; Multi-model printer now shows custom hardware settings for each dropped model (even from different radios).
* [Companion] Add missing monoblue & monowhite theme sdsync icons.
* [Companion] Model wizard starts with default model name populated.
* [Companion] Properly re-translate UI instead of recreating all the actions/etc.; Tell Mac specifically where to put our actions (seems to make it happier too).
* [Companion] Further improve handling of Window menu items/detection of sub-window changes.
* [Companion] Add file-close action.
* [Companion] Add user options and save preferences:
* Option to use wizard, open editor, or do nothing on new model creation;
* Option to remove empty model slots when deleting/moving models (in non-Horus radios);
* Options to hide toolbars in document windows (r-click on TBs);
* Save/restore size of document windows, and maximized/tabbed state;
* Save/restore size/position of model compare window;
* Add shortcuts for model compare, FW download, log viewer;
* [Companion] Disable being able to "delete" empty model slots (more awkward than helpful).
* Fix possible confusion/data corruption when deleting radio profile (closes#4734, ref: #4686);
* Add Delete Profile action to Radio Profiles menu (closes#4736) (but remove from from app prefs. panel);
* Add confirmation prompt before deleting profile;
* Open profile settings dialog when creating/copying a profile (closes#4735);
* Make sure current (global) firmware flavor is properly updated when changing fw type/options in profile;
* Append "-Copy" to name of copied profile;
* Factor out Firmware global vars/functions in favor of static members.
* Instead of copying current profile, start from a blank one
* Handle both add profile (which add a new (ie blank) one) and copy current profile which behaves like before (but says it)
* Avoid duplicate code
* [Companion] I18N:
* Introduce new Translations class to centralize all related functionality;
* Add ability to search multiple locations for .qm translation binaries (local folders, resources, system paths);
* Add ability to reload translations dynamically w/out application restart;
* Improve support for loading Qt translations (if available);
* [build][i18n] Look for and include pre-built Qt translations with other translation resources; Generate translations.qrc dynamically with rest of build files; Add EN "translation" file (simpler UI string edits and possible abstractions); Rename ZH translation file to be country-specific.
* [build] Centralize finding all the Qt bits into root CMakeLists; Make sure QT_QMAKE_EXECUTABLE is defined; Disable dysfunctional simulator installer script generation.
* Cosmetics (unused includes).
* [Companion] Make language options menu dynamic based on available translations, and always show native language name; Allow changing language of some elements w/out restarting (esp. menus/toolbar buttons); Simplify menus/actions/handlers for themes and icon sizes.
* [build] Better way to generate translations.qrc using input file again (previous method was generating new qrc for each reconfig); Make sure common library is linked to other modules which may need it; Remove unused script.
* [Companion][Simulator] Add custom qDebug message handler/formatter as an option. Keeps support for QT_MESSAGE_PATTERN env. var.
* [Simulator] Show system messages of level qInfo and above in debug console.
* [Simulator] Still capture screenshot to clipboard if path is not accessible (and screenshot results now print to simulator debug console).
* Fix for older CMake.
* [Companion] Do not start debug message handler if app is shutting down, and add null checks before using it; Increase backtrace report depth; Add OTx headers; Add Companion exit status debug; Clean up unused code.
* [Simulator] Add asynchronous FIFO buffer for handling debug output/display more efficiently. (#4488)
(cherry-picked from b12bd7d7be)
* Alt+S is properly set
* Copy menu fixed
* Cosmetics
* Better handling of model and categories signaling
* Cosmetics
* Cosmetics and handling of special case after model or cat creation
* Remove unused viableModelSelected
* Take 2
* Start work on connect to new standards
* Cosmetics before fixing #4400
* Cosmetics before fixing #4400
* Now one more conversion issue (SF => SH sources conversion from X9D to X7)
I don't know what is exactly the conversion issue as I don't have the original EEPROM, but I used this one for my tests, so I fix it
* Now we display correctly the corrupted mixers list so that copy/paste will work correctly (it was not consistent)
+ some cosmetics
* Test removed too quickly
* One global removed ;)
* Read/write backup fixes:
* radio not found was show behind all windows (missing parent)
* bad behavior on write when radio not found
* Disable model backup read/write for Horus (needs implementation)
* Re #4224: Enable reading and writing Models and Settings from/to Horus radio (SD card)
* Fix for findMassstoragePath() on Windows (which got there in previous commit)