feat(cpn): read and write to/from radio profile SD path, menu reorganisation (#5753)

This commit is contained in:
Neil Horne
2025-01-24 11:49:34 +10:00
committed by GitHub
parent d69de504fb
commit 35e8b61b7d
57 changed files with 1403 additions and 732 deletions
-484
View File
@@ -1,484 +0,0 @@
<h2>Version 2.2.1 / 2017-12-17</h2>
Please see <a href=http://www.open-tx.org/2017/12/16/opentx-2.2.1>this page</a> for details.
<h2>Version 2.2.0 / 2017-05-30</h2>
Major release! Please see <a href=http://www.open-tx.org/2017/05/30/opentx-2.2.0>this page</a> for details.
<h2>Version 2.1.9 / 2016-09-14</h2>
<ul>
<li>SD sync fixes (<a href=https://github.com/opentx/opentx/issues/3351>#3351</a>)</li>
<li>Fixed: Telemetry mode "FrSky D (cable)" choice was missing for Taranis (<a href=https://github.com/opentx/opentx/issues/3372>#3372</a>)</li>
<li>Show persistent option only for calculated sensors (<a href=https://github.com/opentx/opentx/issues/3454>#3454</a>)</li>
<li>Fixed Flight mode clear command (<a href=https://github.com/opentx/opentx/issues/3214>#3214</a>)</li>
<li>Fixed a problem with Rotary encoders linked to flight mode (could freeze Companion) (<a href=https://github.com/opentx/opentx/issues/3459>#3459</a>, <a href=https://github.com/opentx/opentx/issues/3470>#3470</a>)</li>
<li>Telemetry simulator improvements: added fuel quantity sensor, increased RPM range (<a href=https://github.com/opentx/opentx/issues/3505>#3505</a>, <a href=https://github.com/opentx/opentx/issues/3506>#3506</a>)</li>
<li>Implemented minimal support for the DYI Multimodule (<a href=https://github.com/opentx/opentx/issues/3526>#3526</a>)</li>
<li>Fixed: GVar combo-box not being refreshed when GV check-box (re-)selected (<a href=https://github.com/opentx/opentx/issues/3518>#3518</a>)</li>
<li>Fixed: Heli inversion not correctly shown/saved from Companion on Radios without virtual inputs (<a href=https://github.com/opentx/opentx/issues/3510>#3510</a>)</li>
<li>Implemented print functions for the Heli setup screen (<a href=https://github.com/opentx/opentx/issues/3554>#3554</a>)</li>
<li>Fixed: Flight modes linked trims display value (<a href=https://github.com/opentx/opentx/issues/3547>#3547</a>, <a href=https://github.com/opentx/opentx/issues/3568>#3568</a>)</li>
<li>Fixed: New model global variables and rotary encoders initialisation (<a href=https://github.com/opentx/opentx/issues/3473>#3473</a>)</li>
<li>Fixed: Prevent circular linked global variables and rotary encoders (<a href=https://github.com/opentx/opentx/issues/3472>#3472</a>)</li>
<li>Fixed wrong log replay speed issue in Telemetry simulator (<a href=https://github.com/opentx/opentx/issues/3708>#3708</a>)</li>
<li>Various texts and translations corrections</li>
</ul>
<h2>Version 2.1.8 / 2016-04-14</h2>
<ul>
<li>Telemetry Simulator sensor instance number fixed (<a href=https://github.com/opentx/opentx/issues/3207>#3207</a>)</li>
<li>Fixed: Throttle Source combo-box was populated multiple times (<a href=https://github.com/opentx/opentx/issues/3222>#3222</a>)</li>
<li>RTC option tool-tip corrected (<a href=https://github.com/opentx/opentx/issues/3225>#3225</a>)</li>
<li>Fixed: Companion was looking for custom scripts at the wrong place (<a href=https://github.com/opentx/opentx/issues/3237>#3237</a>)</li>
<li>Offset displayed in inputs screen (<a href=https://github.com/opentx/opentx/issues/3248>#3248</a>)</li>
<li>Import/export handling was broken for Average formula telemetry sensors (<a href=https://github.com/opentx/opentx/issues/3262>#3262</a>)</li>
<li>Fixed: Hardware Setup control types and names were not stored in profile (<a href=https://github.com/opentx/opentx/issues/3260>#3260</a>)</li>
<li>Fixed voice language list (<a href=https://github.com/opentx/opentx/issues/3338>#3338</a>)</li>
<li>Fixed data overflow in Special Functions Override Channel (<a href=https://github.com/opentx/opentx/issues/3347>#3347</a>)</li>
<li>Fixed: Sync dialog new line problem (only present for some UI languages) (<a href=https://github.com/opentx/opentx/issues/3350>#3350</a>)</li>
<li>Removed a few legacy timer limitations, fix non-working limit (<a href=https://github.com/opentx/opentx/issues/3301>#3301</a>)</li>
<li>Default AVR fuse settings changed to disable JTAG interface (<a href=https://github.com/opentx/opentx/issues/3379>#3379</a>)</li>
<li>Channel range fix (Start, Channels) in Model Settings, Setup page, int/ext module settings</li>
<li>Use friendly GVAR names in dialogs (if available) (<a href=https://github.com/opentx/opentx/issues/3353>#3353</a>)</li>
<li>Various texts and translations corrections</li>
</ul>
<h2>Version 2.1.7 / 2016-01-04</h2>
<ul>
<li>Lua 'execute' failed in non-root directory (in Simulator) (<a href=https://github.com/opentx/opentx/issues/3024>#3024</a>)</li>
<!-- this is disabled until the speed problem is fixed <li>Header line always visible in Outputs, Logical Switches and Special Functions (<a href=https://github.com/opentx/opentx/issues/2861>#2861</a>)</li> -->
<li>LR12 changes: removed option for remote failsafe configuration, added in EU firmware variant</li>
<li>Added Clear option to the flight mode context menu (right click on the Name label) (<a href=https://github.com/opentx/opentx/issues/3026>#3026</a>)</li>
<li>New features for Telemetry Simulator: log replay, user friendly sensor values (<a href=https://github.com/opentx/opentx/issues/3124>#3124</a>)</li>
<li>Added F7 key to reload LUA permanent scripts in radio simulator (<a href=https://github.com/opentx/opentx/issues/3141>#3141</a>)</li>
<li>AR9X firmware flashing fall-back was wrong</li>
<li>Command line options support added to standalone simulator (try "./simulator21 --help" on Linux and "simulator.exe /help" on Windows for usage) (<a href=https://github.com/opentx/opentx/issues/3160>#3160</a>)</li>
<li>Various rounding problem fixed: Telemetry sensor Ratio parameter (<a href=https://github.com/opentx/opentx/issues/3117>#3117</a>),
Outputs Sub-trim, Min and Max values (<a href=https://github.com/opentx/opentx/issues/3156>#3156</a>)</li>
<li>Fixed: telemetry sensors Ratio and Offset value increment/decrement step (<a href=https://github.com/opentx/opentx/issues/3121>#3121</a>)</li>
<li>Hardware/Calibration tab split int two tabs (<a href=https://github.com/opentx/opentx/issues/2974>#2974</a>)</li>
<li>Fixed Fahrenheit temperature conversion error (if PREC was not 0) (<a href=https://github.com/opentx/opentx/issues/3146>#3146</a>)</li>
<li>Application Setting 'Enable automatic backup before writing firmware' was not saved (<a href=https://github.com/opentx/opentx/issues/3040>#3040</a>)</li>
<li>Fixed RPM package problem on Fedora (<a href=https://github.com/opentx/opentx/issues/3130>#3130</a>)</li>
<li>Fixed conversion errors when loading 2.0.x EEPE (<a href=https://github.com/opentx/opentx/issues/3177>#3177</a>)</li>
<li>Various texts and translations corrections</li>
</ul>
<h2>Version 2.1.6 / 2015-11-11</h2>
<ul>
<li>Telemetry custom screen changes didn't emit modified signal (<a href=https://github.com/opentx/opentx/issues/3029>#3029</a>)</li>
<li>Hide D8/LR12 when eu firmware option is selected</li>
</ul>
<h2>Version 2.1.5 / 2015-11-05</h2>
Notice: version 2.1.4 was skipped by the OpenTX team to avoid confusion with FrSky's release of OpenTX 2.1.4
<ul>
<li>Fixed: changing any setting on the telemetry panel does not set the file as being modified (<a href=https://github.com/opentx/opentx/issues/2875>#2875</a>)</li>
<li>Print model fix for "Play value.... not on startup" (<a href=https://github.com/opentx/opentx/issues/2736>#2736</a>)</li>
<li>Top LCD Timer could not be selected for X9E (<a href=https://github.com/opentx/opentx/issues/2850>#2850</a>)</li>
<li>More informative error/info messages when openin eepe files (<a href=https://github.com/opentx/opentx/issues/2778>#2778</a>)</li>
<li>Print model fix for curves (<a href=https://github.com/opentx/opentx/issues/2896>#2896</a>)</li>
<li>Added missing special functions (bind, range check, set failsafe) (<a href=https://github.com/opentx/opentx/issues/2753>#2753</a>)</li>
<li>Some defaults missing when changing telemetry formula, update propagation issues (<a href=https://github.com/opentx/opentx/issues/2928>#2928</a>)</li>
<li>Fixed wrong import of Logical switches from OpenTX 2.0.x version (<a href=https://github.com/opentx/opentx/issues/2942>#2942</a>)</li>
<li>Fixed a problem with updates path on Windows (<a href=https://github.com/opentx/opentx/issues/2876>#2876</a>)</li>
<li>Edge representation unified (changed from "no release" to "instant") (<a href=https://github.com/opentx/opentx/issues/2837>#2837</a>)</li>
<li>Added channel names on failsafe sliders (<a href=https://github.com/opentx/opentx/issues/3021>#3021</a>)</li>
<li>Corrected failsafe mapping when using Custom failsafe mode, D16 protocol and channel range different from from 1-8.
Users with such setups are advised to re-check their failsafe settings (<a href=https://github.com/opentx/opentx/issues/2975>#2975</a>)</li>
<li>Various texts and translations corrections</li>
<li>Various small bug-fixes: <a href=https://github.com/opentx/opentx/issues/2994>#2994</a>,
<a href=https://github.com/opentx/opentx/issues/3016>#3016</a>,
<a href=https://github.com/opentx/opentx/issues/3012>#3012</a>
</li>
</ul>
<h2>Version 2.1.3 / 2015-09-09</h2>
<ul>
<li>Fix missing translations in inputs/mixes tabs, print and compare dialogs (<a href=https://github.com/opentx/opentx/issues/2847>#2847</a>)</li>
</ul>
<h2>Version 2.1.2 / 2015-09-07</h2>
<ul>
<li>Fixed: Lua model scripts outputs not working in a simulator (<a href=https://github.com/opentx/opentx/issues/2684>#2684</a>)</li>
<li>Fixed a problem of Companion 2.1 trying to install into 2.0 path.
The effect will only be visible for the users that did not install any of the previous 2.1.x versions.
(<a href=https://github.com/opentx/opentx/issues/2645>#2645</a>)</li>
<li>Added missing SDL libraries to MAC package (<a href=https://github.com/opentx/opentx/issues/2678>#2678</a>)</li>
<li>Added used channels check/warning in Wizard (<a href=https://github.com/opentx/opentx/issues/2091>#2091</a>)</li>
<li>Model Print and Model Compare improvements and fixes (<a href=https://github.com/opentx/opentx/issues/2734>#2734</a>, <a href=https://github.com/opentx/opentx/issues/2737>#2737</a>, <a href=https://github.com/opentx/opentx/issues/2576>#2576</a>)</li>
<li>Negative telemetry offset value was reset when writing back to radio (<a href=https://github.com/opentx/opentx/issues/2738>#2738</a>)</li>
<li>Telemetry sensor names were not displayed (<a href=https://github.com/opentx/opentx/issues/2807>#2807</a>)</li>
<li>Mixes multiplex representation now the same as on the radio (<a href=https://github.com/opentx/opentx/issues/2808>#2808</a>)</li>
<li>Fixed language-related startup crash on Mac (<a href=https://github.com/opentx/opentx/issues/2815>#2815</a>)</li>
<li>Fixed issues with conversion from 2.0 (<a href=https://github.com/opentx/opentx/issues/2809>#2809</a>, <a href=https://github.com/opentx/opentx/issues/2800>#2800</a>)</li>
<li>Fixed Throttle source export issue on X9E (<a href=https://github.com/opentx/opentx/issues/2844>#2844</a>)</li>
<li>Added support for the AR9X replacement board (prototype) for the Turnigy 9X radio, info <a href=http://www.rcgroups.com/forums/showthread.php?t=2479552>here</a></li>
</ul>
<h2>Version 2.1.1 / 2015-08-06</h2>
<ul>
<li>Vario source and center silent options were not saved(<a href=https://github.com/opentx/opentx/issues/2476>#2476</a>)</li>
<li>DSM receiver numbers for external module were not converted from previous version EEPROM (<a href=https://github.com/opentx/opentx/issues/2474>#2474</a>)</li>
<li>Precision incorrectly set for Calculated->Cells sensor (<a href=https://github.com/opentx/opentx/issues/2479>#2479</a>)</li>
<li>Unit incorrectly set for Calculated->Cells sensor (<a href=https://github.com/opentx/opentx/issues/2485>#2485</a>)</li>
<li>Fixed import/export of trim values (<a href=https://github.com/opentx/opentx/issues/2484>#2484</a>)</li>
<li>Removed constant access to floppy disk (<a href=https://github.com/opentx/opentx/issues/2160>#2160</a>)</li>
<li>Telemetry view script combo box list was empty (<a href=https://github.com/opentx/opentx/issues/2465>#2465</a>)</li>
<li>Telemetry view bars ranges not transfered to radio (<a href=https://github.com/opentx/opentx/issues/2491>#2491</a>)</li>
<li>Fixed Standalone simulator radio selection display problem (<a href=https://github.com/opentx/opentx/issues/2503>#2503</a>)</li>
<li>Added missing simulation libraries and enabled side by side installation of Companion 2.0 and 2.1 on Linux (<a href=https://github.com/opentx/opentx/issues/2500>#2500</a>)</li>
<li>Standalone simulator now remembers which radio was simulated in previous session (<a href=https://github.com/opentx/opentx/issues/2503>#2503</a>)</li>
<li>Radio calibration value were not displayed (<a href=https://github.com/opentx/opentx/issues/2502>#2502</a>)</li>
<li>Fixed Vario / Voltage / Current sources export problem</li>
<li>Writing model settings to 9XR-PRO did not work (<a href=https://github.com/opentx/opentx/issues/2402>#2402</a>, <a href=https://github.com/opentx/opentx/issues/2517>#2517</a>)</li>
<li>Model Print and Model Compare improvements</li>
<li>Fixed Companion OSX version (<a href=https://github.com/opentx/opentx/issues/2549>#2549</a>)</li>
<li>Firmware nightly builds are now downloadable from nightly builds of Companion (<a href=https://github.com/opentx/opentx/issues/2526>#2526</a>, <a href=https://github.com/opentx/opentx/issues/2634>#2634</a>)</li>
<li>Fixed telemetry item lists (<a href=https://github.com/opentx/opentx/issues/2541>#2541</a>)</li>
<li>Fixed missing pots P1..P3 for 9X (<a href=https://github.com/opentx/opentx/issues/2543>#2543</a>)</li>
<li>Fixed "Invalid model and settings" error message when writing models and settings to the radio (<a href=https://github.com/opentx/opentx/issues/2544>#2544</a>)</li>
<li>Global Functions fixes (<a href=https://github.com/opentx/opentx/issues/2558>#2558</a>)</li>
<li>Export to Google Earth now working (only) with the new telemetry fields (GPS, GAlt and GSpd) (<a href=https://github.com/opentx/opentx/issues/2546>#2546</a>)</li>
<li>Fixed unsuccessful writing of setting to the radio for 9XR PRO (<a href=https://github.com/opentx/opentx/issues/2605>#2605</a>)</li>
<li>Fixed missing LUA script outputs in special function "Play Value" (<a href=https://github.com/opentx/opentx/issues/2649>#2649</a>)</li>
<li>Various texts and translations corrections</li>
<li>Various small bug-fixes</li>
</ul>
<h2>Version 2.1.0 / 2015-07-16</h2>
<ul>
<li>SD card synchronizaton tool</li>
<li>Added session duraton information in Log Viewer</li>
<li>Enabled <i>Mixers monitor</i> in Taranis simulator</li>
<li>Better support for multi-axes in Log Viewer (<a href=https://github.com/opentx/opentx/issues/2267>#2267</a>)</li>
<li>File path issue in Taranis simulator function <i>findTrueFileName()</i> on Windows (<a href=https://github.com/opentx/opentx/issues/2301>#2301</a>)</li>
<li>Added simulator volume gain setting (<a href=https://github.com/opentx/opentx/issues/2260>#2260</a>)</li>
<li>Added GPS glitch filtering and Latitude/Longitude position synchronization to Google Earth export (<a href=https://github.com/opentx/opentx/issues/2326>#2326</a>)</li>
<li>Fixed a rare program crash when editing Input for 9X radio (<a href=https://github.com/opentx/opentx/issues/2420>#2420</a>)</li>
<li>Fixed missing RSSI audio warnings if simulator was started multiple times (<a href=https://github.com/opentx/opentx/issues/2446>#2446</a>)</li>
</ul>
<h2>Version 2.0.17 / 2015-05-04</h2>
<ul>
<li>Simulator crash (<a href=https://github.com/opentx/opentx/issues/2253>#2253</a>)</li>
</ul>
<h2>Version 2.0.16 / 2015-05-03</h2>
<ul>
<li><i>nooverridech</i> firmware option was not working</li>
<li>Fixed setting Expo from gvars for 9XR-Pro (<a href=https://github.com/opentx/opentx/issues/2040>#2040</a>)</li>
<li>Added Mixers Monitor screen option <i>mixersmon</i> (<a href=https://github.com/opentx/opentx/issues/1945>#1945</a>)</li>
<li>Added audio playing in simulator (<a href=https://github.com/opentx/opentx/issues/457>#457</a>)</li>
<li>Fixed sorting of audio tracks (<a href=https://github.com/opentx/opentx/issues/2002>#2002</a>)</li>
<li>Model wizard fixes (<a href=https://github.com/opentx/opentx/issues/2091>#2091</a>)</li>
<li>GVAR names removed for 9x, radio doesn't support them (<a href=https://github.com/opentx/opentx/issues/2150>#2150</a>)</li>
<li>Some LS sources didn't follow the Imperial units setting (<a href=https://github.com/opentx/opentx/issues/2180>#2180</a>)</li>
<li>Added more fields to the telemetry simulator (<a href=https://github.com/opentx/opentx/issues/2171>#2171</a>)</li>
<li>Log viewer improvements and massive speed increase (<a href=https://github.com/opentx/opentx/issues/1863>#1863</a>, <a href=https://github.com/opentx/opentx/issues/2163>#2163</a>)</li>
<li>Added Battery meter range setting (<a href=https://github.com/opentx/opentx/issues/2195>#2195</a>)</li>
<li>Improvements in Print and Compare dialogs (<a href=https://github.com/opentx/opentx/issues/2219>#2219</a>)</li>
<li>Reset pots to the middle by right double clicking them in Simulator (<a href=https://github.com/opentx/opentx/issues/1939>#1939</a>)</li>
<li>Minor fixes: <a href=https://github.com/opentx/opentx/issues/2153>#2153</a>,
<a href=https://github.com/opentx/opentx/issues/2138>#2138</a>,
<a href=https://github.com/opentx/opentx/issues/2090>#2090</a>,
<a href=https://github.com/opentx/opentx/issues/2122>#2122</a>
</li>
</ul>
<h2>Version 2.0.15 / 2015-01-13</h2>
<ul>
<li>Firmware was not written correctly on radio when compatibility warning check enabled</li>
<li>Time format for Special Functions Set Timers</li>
</ul>
<h2>Version 2.0.14 / 2015-01-12</h2>
<ul>
<li>OpenTX Companion and Companion9x can now be installed side by side on Linux</li>
<li>Improved TAB order in dialogs</li>
<li>Special Function <i>Start Logs</i> renamed to more appropriate <i>SD Logs</i></li>
<li>Improvements for MAC build</li>
<li>Fixes to Google Earth logs export</li>
<li>Firmware compatibility warning check added when flashing new firmware to radio</li>
<li>Fixed issue with Telemetry Type setting on 9XR-PRO</li>
<li>Added Telemetry simulator</li>
<li>Added Trainer simulator</li>
<li>Added Debug Output window</li>
<li>Various texts and translations corrections</li>
<li>Various small bug-fixes</li>
<li>More reliable method of writing EEPROM.BIN and FIRMWARE.BIN to radio</li>
<li>Fixed issue with Edge function INSTANT for V1>2s</li>
<li>Fixed buffer overflow in Joystick code</li>
</ul>
<h2>Version 2.0.13 / 2014-11-20</h2>
<ul>
<li>Too many curves shown on non ARM boards</li>
<li>Fixed vario limits</li>
<li>Fixes in compare dialog</li>
<li>Fixed receiver number range</li>
<li>Virtual inputs not selectable in SF Volume and heli Collective Source</li>
<li>Joystick calibration crash after channel assignment</li>
<li>Gvar import error for limits</li>
<li>Companion shows too many curve types in input/mixer for 9x</li>
<li>NOT curves removed from inputs (for non ARM platforms)</li>
<li>Companion again builds on OS X (Mac)</li>
<li>Companion simulator Lua crash on OS X 64bit (Mac)</li>
<li>Companion didn't take care of PlayScript functions</li>
</ul>
<h2>Version 2.0.12 / 2014-09-15</h2>
<ul>
<li>Typos & Translations updated</li>
</ul>
<h2>Version 2.0.11 / 2014-09-10</h2>
<ul>
<li>Limits EEPROM export was broken (all boards except Taranis)</li>
<li>Fix issue when a GVAR was used as Offset</li>
</ul>
<h2>Version 2.0.10 / 2014-09-08</h2>
<ul>
<li>Taranis is now the default board in General Settings</li>
<li>GVARS allowed in Limits min/max/offset</li>
<li>Limits displayed in us when ppmus option selected
</ul>
<h2>Version 2.0.8 / 2014-07-23</h2>
<ul>
<li>Compare dialog bugfixes</li>
<li>Curve index correctly resetted when type changed</li>
</ul>
<h2>Version 2.0.7</h2>
<ul>
<li>SafetyCH function was missing in simulator</li>
<li>EEPROM export warning when exporting logical switches > L12 on 9X128</li>
<li>FAS offset was not exported on 9X/9XR boards</li>
<li>Trims modes bugfix on non Taranis boards</li>
<li>It was impossible to open a backuped model from the Tx</li>
</ul>
<h2>Version 2.0.6</h2>
<ul>
<li>Fix Mix curves bug on Sky9x boards</li>
<li>Channels 17-32 are displayed in the simulator</li>
<li>Backlight simulation bugfix</li>
</ul>
<h2>Version 2.0.5</h2>
<ul>
<li>Fix crash on startup</li>
<li>Fix version number in simu</li>
<li>9XR-Pro now supported on Mac</li>
<li>Fix loss of settings in telemetry custom screens</li>
<li>Fix 10000% bug when using GVs in mixer weithg or offset</li>
<li>Fix Cnsp range in logical switches (up to 30000mAh)</li>
</ul>
<h2>Version 2.0.4</h2>
<ul>
<li>Sound should be ok on all platforms</li>
<li>Min/Max reviewed in Logical switches (for the whole telemetry)</li>
<li>Various bug fixes</li>
</ul>
<h2>Version 2.0.3</h2>
<ul>
<li>EEPROM import bug on AdjustGVAR function</li>
<li>Timers correctly displayed in logical switches tab</li>
</ul>
<h2>Version 2.0.2</h2>
<ul>
<li>Mouse scroll wheel behaves differently</li>
<li>Play Sounds should now work on all platforms</li>
<li>A lot of small bug fixes</li>
</ul>
<h2>Version 2.0.1</h2>
<ul>
<li>Fix on recursive GVars</li>
<li>Sky9x EEPROM read/write fix</li>
<li>Translations updated
<li>Wizard fixes
<li>Fix on invalid splashes bitmaps
</ul>
<h2>Version 2.0.0</h2>
<ul>
<li>Companion now merged into OpenTX</li>
<li>Too many changes to list them all!</li>
</ul>
<h2>Version 1.52</h2>
<ul>
<li>Fix crash when writing certain EEPROMS</li>
<li>Google Earth export of logs containing GPS positions</li>
<li>DSM2 added for Taranis</li>
</ul>
<h2>Version 1.51</h2>
<ul>
<li>Wrong DFU-Util default path (MAC)</li>
<li>new voices download server (ip address changed to new fiber connection)</li>
<li>Fixed contributor list</li>
</ul>
<h2>Version 1.50</h2>
<ul>
<li>solved issue with taranis radio with some linux distributions</li>
<li>blank eeprom created using a radio profile that holds calibration data, will contain calibration data from the profile</li>
<li>new opentx compilation server (ip address changed to new fiber connection)</li>
</ul>
<h2>Version 1.49</h2>
<ul>
<li>Stack usage optimizations</li>
<li>Playsound order is misaligned between companion9x and the TX</li>
<li>Model image could not be reset.</li>
</ul>
<h2>Version 1.48</h2>
<ul>
<li>Interface fixes</li>
<li>Hide include dr/expo when not applicable</li>
<li>Fix extraction of grayscale images from taranis firmwares</li>
<li>No TX and RX in Taranis telemetry fields</li>
<li>Issue 255 fixed - "No GVAR selection possible for PLAY VALUE"</li>
<li>Issue 254 fixed - "SE Language for building opentx"</li>
<li>Issue 253 fixed - "OpenTX doesn't accept this protocol (DSM2 on Sky9x)"</li>
<li>Prevent segfault while parsing wrong log files or files with broken lines</li>
<li>Small bug in model printout</li>
<li>Fixed wrong display of values in custom functions</li>
<li>Image in preferences was saved only black & white</li>
<li>Issue 247 fixed - "Labelled items on radio should not be translated."</li>
<li>Added support of tstick (taranis like stick) compile option for sky9x opentx firmware</li>
</ul>
<h2>Version 1.47</h2>
<ul>
<li>Interface fixes (issues 232,233,238,241)</li>
<li>Fix for print/compare models</li>
<li>Function switch parameter on screen different than printout.</li>
<li>Translations fixes</li>
<li>Command line print mode</li>
<li>Better mavlink support</li>
<li>SE tts language added for taranis</li>
<li>Alternate font option for opentx added</li>
</ul>
<h2>Version 1.46</h2>
<ul>
<li>Interface fixes (issues 224,225)</li>
<li>Show persistent timers value in modeledit</li>
<li>Consistent naming of Custom Switches in c9x</li>
</ul>
<h2>Version 1.45</h2>
<ul>
<li>Various fixes</li>
</ul>
<h2>Version 1.44</h2>
<ul>
<li>Fix regression on AND parameter in custom functions</li>
<li>Add mavlink support for stock and m128 boards</li>
</ul>
<h2>Version 1.43</h2>
<ul>
<li>Copy Malfunctions in Custom Functions (Issue 205)</li>
<li>Enable repeat parameter in functions for all boards</li>
<li>Remove sink tones from vario for stock/m128 board</li>
<li>Fix for wrongly named channels in mixerlist (Issue 210)</li>
<li>Fix badly exported gvars in mixers</li>
<li>Fix while editing custom switches</li>
<li>Add access to the release notes of currently selected firmware</li>
</ul>
<h2>Version 1.42</h2>
<ul>
<li>Add Companion9X changelog</li>
<li>Add Fw release notes browser</li>
<li>Simplify burn menu for sky9x and Taranis.</li>
<li>Fix in telemetry conversion (rssi alarm) for stock board</li>
<li>Drop support of sky9x boards on MacOS due to missing SAM-BA tool.</li>
</ul>
<h2>Version 1.41</h2>
<ul>
<li>Fix unneeded rescaling of splash images</li>
<li>Fix for telemetry screens for Taranis</li>
</ul>
<h2>Version 1.40</h2>
<ul>
<li>Log dialog - Split of logging sessions.</li>
<li>Telemetry screen 1 as default (issue 206)</li>
<li>Rename all channels in mixer tab accordingly to limits names</li>
<li>Fix a segfault in phases tabs (Issue 203 regression introduced in release 2140)</li>
</ul>
<h2>Version 1.39</h2>
<ul>
<li>Custom functions cut&paste </li>
<li>Custom switches cut&paste </li>
<li>Color button text in curve editor for MACOSX</li>
<li>Adjust name lengths for Taranis</li>
</ul>
<h2>Version 1.38</h2>
<ul>
<li>Core when model names were > 10 chars</li>
</ul>
<h2>Version 1.37</h2>
<ul>
<li>Fix OpenTX segfault in Taranis simulator</li>
<li>Implement brightness control for Taranis</li>
<li>Reduce modeledit windows size</li>
<li>Taranis splash screen in grayscale</li>
</ul>
<h2>Version 1.36</h2>
<ul>
<li>Burning windows (with progress bar) now in foreground (Issue 197)</li>
<li>Allow a selection of tracks for Background Music (Issue 199)</li>
</ul>
<h2>Version 1.35</h2>
<ul>
<li>Country names mismatch between Taranis and Companion 9X (Issue 198)</li>
<li>TIM function in custom switches</li>
<li>Fix timer switches.</li>
<li>Taranis LCD adjustment in general settings.</li>
<li>New tool in curve editor</li>
<li>Minor fixes</li>
<li>Expo move bug + invalid chars in channels, expo and mixer names</li>
<li>Try to reduce modeledit window form MAC</li>
<li>Wrong init of RF-Module data</li>
<li>Read flash from TX didn't worked for Taranis</li>
</ul>
+40 -1
View File
@@ -2,7 +2,6 @@
<qresource prefix="/">
<file>images/customize.png</file>
<file alias="icon.png">images/icon.png</file>
<file>../releasenotes.txt</file>
<file>images/screenshot.png</file>
<file>images/splash.png</file>
<file>images/companion-title.png</file>
@@ -191,6 +190,8 @@
<file>themes/monochrome/16/stop.png</file>
<file>themes/monochrome/16/write_eeprom.png</file>
<file>themes/monochrome/16/sdsync.png</file>
<file>themes/monochrome/16/folder-tree-read.png</file>
<file>themes/monochrome/16/folder-tree-write.png</file>
<file>themes/monochrome/24/paintbrush.png</file>
<file>themes/monochrome/24/open.png</file>
<file>themes/monochrome/24/edit.png</file>
@@ -235,6 +236,8 @@
<file>themes/monochrome/24/stop.png</file>
<file>themes/monochrome/24/write_eeprom.png</file>
<file>themes/monochrome/24/sdsync.png</file>
<file>themes/monochrome/24/folder-tree-read.png</file>
<file>themes/monochrome/24/folder-tree-write.png</file>
<file>themes/monochrome/32/paintbrush.png</file>
<file>themes/monochrome/32/open.png</file>
<file>themes/monochrome/32/edit.png</file>
@@ -279,6 +282,8 @@
<file>themes/monochrome/32/stop.png</file>
<file>themes/monochrome/32/write_eeprom.png</file>
<file>themes/monochrome/32/sdsync.png</file>
<file>themes/monochrome/32/folder-tree-read.png</file>
<file>themes/monochrome/32/folder-tree-write.png</file>
<file>themes/monochrome/48/paintbrush.png</file>
<file>themes/monochrome/48/open.png</file>
<file>themes/monochrome/48/edit.png</file>
@@ -323,6 +328,8 @@
<file>themes/monochrome/48/stop.png</file>
<file>themes/monochrome/48/write_eeprom.png</file>
<file>themes/monochrome/48/sdsync.png</file>
<file>themes/monochrome/48/folder-tree-read.png</file>
<file>themes/monochrome/48/folder-tree-write.png</file>
<file>themes/classic/16/paintbrush.png</file>
<file>themes/classic/16/open.png</file>
<file>themes/classic/16/edit.png</file>
@@ -367,6 +374,8 @@
<file>themes/classic/16/stop.png</file>
<file>themes/classic/16/write_eeprom.png</file>
<file>themes/classic/16/sdsync.png</file>
<file>themes/classic/16/folder-tree-read.png</file>
<file>themes/classic/16/folder-tree-write.png</file>
<file>themes/classic/24/paintbrush.png</file>
<file>themes/classic/24/open.png</file>
<file>themes/classic/24/edit.png</file>
@@ -411,6 +420,8 @@
<file>themes/classic/24/stop.png</file>
<file>themes/classic/24/write_eeprom.png</file>
<file>themes/classic/24/sdsync.png</file>
<file>themes/classic/24/folder-tree-read.png</file>
<file>themes/classic/24/folder-tree-write.png</file>
<file>themes/classic/32/paintbrush.png</file>
<file>themes/classic/32/open.png</file>
<file>themes/classic/32/edit.png</file>
@@ -455,6 +466,8 @@
<file>themes/classic/32/stop.png</file>
<file>themes/classic/32/write_eeprom.png</file>
<file>themes/classic/32/sdsync.png</file>
<file>themes/classic/32/folder-tree-read.png</file>
<file>themes/classic/32/folder-tree-write.png</file>
<file>themes/classic/48/paintbrush.png</file>
<file>themes/classic/48/open.png</file>
<file>themes/classic/48/edit.png</file>
@@ -499,6 +512,8 @@
<file>themes/classic/48/stop.png</file>
<file>themes/classic/48/write_eeprom.png</file>
<file>themes/classic/48/sdsync.png</file>
<file>themes/classic/48/folder-tree-read.png</file>
<file>themes/classic/48/folder-tree-write.png</file>
<file>themes/monoblue/16/paintbrush.png</file>
<file>themes/monoblue/16/open.png</file>
<file>themes/monoblue/16/edit.png</file>
@@ -543,6 +558,8 @@
<file>themes/monoblue/16/stop.png</file>
<file>themes/monoblue/16/write_eeprom.png</file>
<file>themes/monoblue/16/sdsync.png</file>
<file>themes/monoblue/16/folder-tree-read.png</file>
<file>themes/monoblue/16/folder-tree-write.png</file>
<file>themes/monoblue/24/paintbrush.png</file>
<file>themes/monoblue/24/open.png</file>
<file>themes/monoblue/24/edit.png</file>
@@ -587,6 +604,8 @@
<file>themes/monoblue/24/stop.png</file>
<file>themes/monoblue/24/write_eeprom.png</file>
<file>themes/monoblue/24/sdsync.png</file>
<file>themes/monoblue/24/folder-tree-read.png</file>
<file>themes/monoblue/24/folder-tree-write.png</file>
<file>themes/monoblue/32/paintbrush.png</file>
<file>themes/monoblue/32/open.png</file>
<file>themes/monoblue/32/edit.png</file>
@@ -631,6 +650,8 @@
<file>themes/monoblue/32/stop.png</file>
<file>themes/monoblue/32/write_eeprom.png</file>
<file>themes/monoblue/32/sdsync.png</file>
<file>themes/monoblue/32/folder-tree-read.png</file>
<file>themes/monoblue/32/folder-tree-write.png</file>
<file>themes/monoblue/48/paintbrush.png</file>
<file>themes/monoblue/48/open.png</file>
<file>themes/monoblue/48/edit.png</file>
@@ -675,6 +696,8 @@
<file>themes/monoblue/48/stop.png</file>
<file>themes/monoblue/48/write_eeprom.png</file>
<file>themes/monoblue/48/sdsync.png</file>
<file>themes/monoblue/48/folder-tree-read.png</file>
<file>themes/monoblue/48/folder-tree-write.png</file>
<file>themes/monowhite/16/paintbrush.png</file>
<file>themes/monowhite/16/open.png</file>
<file>themes/monowhite/16/edit.png</file>
@@ -719,6 +742,8 @@
<file>themes/monowhite/16/stop.png</file>
<file>themes/monowhite/16/write_eeprom.png</file>
<file>themes/monowhite/16/sdsync.png</file>
<file>themes/monowhite/16/folder-tree-read.png</file>
<file>themes/monowhite/16/folder-tree-write.png</file>
<file>themes/monowhite/24/paintbrush.png</file>
<file>themes/monowhite/24/open.png</file>
<file>themes/monowhite/24/edit.png</file>
@@ -763,6 +788,8 @@
<file>themes/monowhite/24/stop.png</file>
<file>themes/monowhite/24/write_eeprom.png</file>
<file>themes/monowhite/24/sdsync.png</file>
<file>themes/monowhite/24/folder-tree-read.png</file>
<file>themes/monowhite/24/folder-tree-write.png</file>
<file>themes/monowhite/32/paintbrush.png</file>
<file>themes/monowhite/32/open.png</file>
<file>themes/monowhite/32/edit.png</file>
@@ -807,6 +834,8 @@
<file>themes/monowhite/32/stop.png</file>
<file>themes/monowhite/32/write_eeprom.png</file>
<file>themes/monowhite/32/sdsync.png</file>
<file>themes/monowhite/32/folder-tree-read.png</file>
<file>themes/monowhite/32/folder-tree-write.png</file>
<file>themes/monowhite/48/paintbrush.png</file>
<file>themes/monowhite/48/open.png</file>
<file>themes/monowhite/48/edit.png</file>
@@ -851,6 +880,8 @@
<file>themes/monowhite/48/stop.png</file>
<file>themes/monowhite/48/write_eeprom.png</file>
<file>themes/monowhite/48/sdsync.png</file>
<file>themes/monowhite/48/folder-tree-read.png</file>
<file>themes/monowhite/48/folder-tree-write.png</file>
<file>themes/yerico/16/paintbrush.png</file>
<file>themes/yerico/16/open.png</file>
<file>themes/yerico/16/edit.png</file>
@@ -895,6 +926,8 @@
<file>themes/yerico/16/stop.png</file>
<file>themes/yerico/16/write_eeprom.png</file>
<file>themes/yerico/16/sdsync.png</file>
<file>themes/yerico/16/folder-tree-read.png</file>
<file>themes/yerico/16/folder-tree-write.png</file>
<file>themes/yerico/24/paintbrush.png</file>
<file>themes/yerico/24/open.png</file>
<file>themes/yerico/24/edit.png</file>
@@ -939,6 +972,8 @@
<file>themes/yerico/24/stop.png</file>
<file>themes/yerico/24/write_eeprom.png</file>
<file>themes/yerico/24/sdsync.png</file>
<file>themes/yerico/24/folder-tree-read.png</file>
<file>themes/yerico/24/folder-tree-write.png</file>
<file>themes/yerico/32/paintbrush.png</file>
<file>themes/yerico/32/open.png</file>
<file>themes/yerico/32/edit.png</file>
@@ -983,6 +1018,8 @@
<file>themes/yerico/32/stop.png</file>
<file>themes/yerico/32/write_eeprom.png</file>
<file>themes/yerico/32/sdsync.png</file>
<file>themes/yerico/32/folder-tree-read.png</file>
<file>themes/yerico/32/folder-tree-write.png</file>
<file>themes/yerico/48/paintbrush.png</file>
<file>themes/yerico/48/open.png</file>
<file>themes/yerico/48/edit.png</file>
@@ -1027,6 +1064,8 @@
<file>themes/yerico/48/stop.png</file>
<file>themes/yerico/48/write_eeprom.png</file>
<file>themes/yerico/48/sdsync.png</file>
<file>themes/yerico/48/folder-tree-read.png</file>
<file>themes/yerico/48/folder-tree-write.png</file>
<file>sounds/0.wav</file>
<file>sounds/1.wav</file>
<file>sounds/2.wav</file>
@@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="48"
height="48"
viewBox="0 0 48 48"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:export-filename="folder-tree-read-classic-16.png"
inkscape:export-xdpi="32"
inkscape:export-ydpi="32"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="folder-tree-read-classic.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="8.5972598"
inkscape:cx="6.7463356"
inkscape:cy="36.116159"
inkscape:window-width="1920"
inkscape:window-height="1055"
inkscape:window-x="-7"
inkscape:window-y="-7"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs1"><linearGradient
id="linearGradient11"
inkscape:collect="always"><stop
style="stop-color:#07de44;stop-opacity:1;"
offset="0"
id="stop12" /><stop
style="stop-color:#ebfff2;stop-opacity:1;"
offset="1"
id="stop13" /></linearGradient><linearGradient
id="swatch11"
inkscape:swatch="solid"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop11" /></linearGradient><linearGradient
id="swatch9"
inkscape:swatch="solid"><stop
style="stop-color:#82d8f8;stop-opacity:1;"
offset="0"
id="stop10" /></linearGradient><linearGradient
id="swatch8"
inkscape:swatch="solid"><stop
style="stop-color:#31afe2;stop-opacity:1;"
offset="0"
id="stop8" /></linearGradient><linearGradient
id="swatch7"><stop
style="stop-color:#82dcf8;stop-opacity:1;"
offset="0"
id="stop7" /><stop
style="stop-color:#31afe2;stop-opacity:1;"
offset="1"
id="stop9" /></linearGradient><linearGradient
id="swatch6"><stop
style="stop-color:#0bade1;stop-opacity:1;"
offset="0"
id="stop6" /></linearGradient><linearGradient
id="swatch5"><stop
style="stop-color:#09ade2;stop-opacity:1;"
offset="0"
id="stop5" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#swatch7"
id="linearGradient8"
gradientUnits="userSpaceOnUse"
x1="12"
y1="5"
x2="12"
y2="24" /><linearGradient
inkscape:collect="always"
xlink:href="#swatch7"
id="linearGradient10"
gradientUnits="userSpaceOnUse"
x1="12"
y1="5"
x2="12"
y2="24" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient11"
id="linearGradient13"
x1="39.316284"
y1="23.850887"
x2="39.316284"
y2="33.573162"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1.5212148,-0.00234545,0.00234545,-1.5212148,97.067791,71.437633)" /></defs><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g1"><g
style="fill:none;stroke-width:0.997795;stroke-dasharray:none"
id="g2-9"
transform="matrix(0.94488189,0,0,0.94488189,13.942277,26.198812)"><rect
width="24"
height="24"
fill="#ffffff"
id="rect1-4-2"
x="0"
y="0"
style="stroke-width:0.997795;stroke-dasharray:none" /><path
d="M 3,6.47214 C 3,6.16165 3.07229,5.85542 3.21115,5.57771 L 4,4 h 5 l 1,2 h 10 c 0.5523,0 1,0.44772 1,1 v 2 10 c 0,0.5523 -0.4477,1 -1,1 H 4 C 3.44772,20 3,19.5523 3,19 V 9 Z"
stroke="#000000"
stroke-linecap="round"
stroke-linejoin="round"
id="path1-5-7"
style="stroke-width:0.997795;stroke-dasharray:none" /><path
d="m 4,20 h 16 c 0.5523,0 1,-0.4477 1,-1 V 11 C 21,9.89543 20.1046,9 19,9 H 5 C 3.89543,9 3,9.89543 3,11 v 8 c 0,0.5523 0.44772,1 1,1 z"
stroke="#000000"
stroke-linecap="round"
stroke-linejoin="round"
id="path2-5-9"
style="mix-blend-mode:normal;fill:url(#linearGradient10);stroke-width:0.997795;stroke-dasharray:none" /></g><g
style="opacity:1;fill:none;stroke-width:0.997795;stroke-dasharray:none"
id="g2"
transform="matrix(0.94488189,0,0,0.94488189,13.928523,5.2534968)"><rect
width="24"
height="24"
fill="#ffffff"
id="rect1-4"
x="0"
y="0"
style="stroke-width:0.997795;stroke-dasharray:none" /><path
d="M 3,6.47214 C 3,6.16165 3.07229,5.85542 3.21115,5.57771 L 4,4 h 5 l 1,2 h 10 c 0.5523,0 1,0.44772 1,1 v 2 10 c 0,0.5523 -0.4477,1 -1,1 H 4 C 3.44772,20 3,19.5523 3,19 V 9 Z"
stroke="#000000"
stroke-linecap="round"
stroke-linejoin="round"
id="path1-5"
style="stroke-width:0.997795;stroke-dasharray:none" /><path
d="m 4,20 h 16 c 0.5523,0 1,-0.4477 1,-1 V 11 C 21,9.89543 20.1046,9 19,9 H 5 C 3.89543,9 3,9.89543 3,11 v 8 c 0,0.5523 0.44772,1 1,1 z"
stroke="#000000"
stroke-linecap="round"
stroke-linejoin="round"
id="path2-5"
style="mix-blend-mode:normal;fill:url(#linearGradient8);stroke-width:0.997795;stroke-dasharray:none" /></g><path
style="fill:none;stroke:#000000;stroke-width:1.05292px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 4.7932538,3.7410698 V 41.12628"
id="path14" /><path
style="fill:none;stroke:#000000;stroke-width:1.00783px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 4.8643183,18.604563 H 16.977703"
id="path13" /><path
style="fill:none;stroke:#000000;stroke-width:1.01719px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 4.6626873,40.600637 H 17.002505"
id="path5-5" /><path
style="fill:url(#linearGradient13);stroke:#000000;stroke-width:1.07515;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
d="M 44.183925,27.684994 30.481487,19.793677 30.618503,35.52195 v 0 z"
id="path11" /></g></g></svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="folder-tree-read-monochrome.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="1"
inkscape:cx="529"
inkscape:cy="299.5"
inkscape:window-width="1920"
inkscape:window-height="1055"
inkscape:window-x="-7"
inkscape:window-y="-7"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs1"><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 148.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="210 : 148.5 : 1"
inkscape:persp3d-origin="105 : 99 : 1"
id="perspective8" /></defs><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g1"><path
id="rect14-6"
style="fill:#e6e6e6;fill-opacity:1;stroke-width:0.338152"
d="M 141.52,29.104168 V 154.0214 H 16.933331 v 3.74728 H 145.5978 V 29.104168 Z"
inkscape:export-filename="folder-tree-write-double-arrow-mono-96.png"
inkscape:export-xdpi="18.95162"
inkscape:export-ydpi="18.95162" /><path
id="path4"
style="fill:#000000;stroke-width:5.43016"
d="M 43.387533 55.502555 C 43.382223 55.502555 43.377842 55.503067 43.372546 55.503072 L 39.547974 55.503072 L 39.547974 73.891614 L 39.601717 73.891614 C 39.562929 78.216526 39.547974 83.280562 39.547974 89.913375 L 39.547974 124.32368 L 56.824438 124.32368 L 74.100903 124.32368 L 74.100903 131.97024 L 74.100903 139.6168 L 99.055969 139.6168 L 124.01052 139.6168 L 124.01052 124.32368 L 124.01052 109.03004 L 112.79053 109.03004 C 104.00831 109.03004 100.81534 108.19914 98.095821 105.2065 C 95.446931 102.29157 92.183679 101.38348 84.361259 101.38348 L 74.100903 101.38348 L 74.100903 109.03004 L 74.100903 116.6766 L 60.663997 116.6766 L 47.226575 116.6766 L 47.226575 97.559937 L 47.226575 78.443274 L 60.663997 78.443274 L 74.100903 78.443274 L 74.100903 86.089836 L 74.100903 93.736397 L 99.055969 93.736397 L 124.01052 93.736397 L 124.01052 78.443274 L 124.01052 63.149634 L 112.79053 63.149634 C 104.00831 63.149634 100.81534 62.318735 98.095821 59.326095 C 95.446931 56.411165 92.183679 55.502555 84.361259 55.502555 L 74.100903 55.502555 L 74.100903 63.149634 L 74.100903 70.796195 L 60.663997 70.796195 L 47.226575 70.796195 L 47.226575 63.149634 C 47.226575 63.01478 47.221481 62.914606 47.22089 62.784281 L 47.22089 55.503072 L 43.395801 55.503072 C 43.392754 55.50307 43.390584 55.502555 43.387533 55.502555 z M 87.24067 63.149634 C 90.26408 63.149634 94.253088 64.856006 96.176558 66.972656 C 98.635458 69.678506 102.08853 70.796195 107.99134 70.796195 L 116.33243 70.796195 L 116.33243 78.443274 L 116.33243 86.089836 L 99.055969 86.089836 L 81.779504 86.089836 L 81.779504 74.619735 C 81.779504 63.288445 81.8455 63.149634 87.24067 63.149634 z M 87.24067 109.03004 C 90.26408 109.03004 94.253088 110.73693 96.176558 112.85358 C 98.635458 115.55943 102.08853 116.6766 107.99134 116.6766 L 116.33243 116.6766 L 116.33243 124.32368 L 116.33243 131.97024 L 99.055969 131.97024 L 81.779504 131.97024 L 81.779504 120.50014 C 81.779504 109.16885 81.8455 109.03004 87.24067 109.03004 z "
inkscape:label="path4"
inkscape:export-filename="folder-tree-write-mono.png"
inkscape:export-xdpi="19.246401"
inkscape:export-ydpi="19.246401" /><path
id="rect4"
style="fill:#000000;fill-opacity:1;stroke-width:0.129178"
d="m 95.735718,56.617364 13.322102,-13.409862 -13.397742,-13.486 -0.0502,0.05052 0.0249,5.318429 8.063912,8.117046 -7.988282,8.040901 z"
inkscape:label="rect4" /><path
id="rect4-3"
style="fill:#000000;fill-opacity:1;stroke-width:0.129178"
d="m 110.19252,57.322947 13.32209,-13.409862 -13.39773,-13.486 -0.0502,0.05052 0.0249,5.318429 8.0639,8.117046 -7.98827,8.040901 z"
inkscape:label="rect4" /></g></g></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="folder-tree-read-outline.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="1"
inkscape:cx="529"
inkscape:cy="298.5"
inkscape:window-width="1920"
inkscape:window-height="1055"
inkscape:window-x="-7"
inkscape:window-y="-7"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs1"><linearGradient
id="swatch3"
inkscape:swatch="solid"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3" /></linearGradient><linearGradient
id="swatch2"
inkscape:swatch="solid"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop2" /></linearGradient><linearGradient
id="swatch1"
inkscape:swatch="solid"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop1" /></linearGradient><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 148.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="210 : 148.5 : 1"
inkscape:persp3d-origin="105 : 99 : 1"
id="perspective8" /><linearGradient
inkscape:collect="always"
xlink:href="#swatch1"
id="linearGradient1"
x1="39.547974"
y1="97.559678"
x2="124.01052"
y2="97.559678"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#swatch2"
id="linearGradient2"
x1="110.06668"
y1="43.875016"
x2="123.51461"
y2="43.875016"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#swatch3"
id="linearGradient3"
x1="95.609878"
y1="43.169433"
x2="109.05782"
y2="43.169433"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,1.0583333)" /></defs><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g1"><path
id="rect14-6"
style="fill:#e6e6e6;fill-opacity:1;stroke-width:0.338152"
d="M 141.52,29.104168 V 154.0214 H 16.933331 v 3.74728 H 145.5978 V 29.104168 Z"
inkscape:export-filename="folder-tree-write-outline-16.png"
inkscape:export-xdpi="3.1586032"
inkscape:export-ydpi="3.1586032" /><path
id="path4"
style="fill:none;stroke:url(#linearGradient1);stroke-width:2.03;stroke-dasharray:none"
d="m 43.387533,55.502555 c -0.0053,0 -0.0097,5.12e-4 -0.01499,5.17e-4 h -3.824572 v 18.388542 h 0.05374 c -0.03879,4.324912 -0.05374,9.388948 -0.05374,16.021761 v 34.410305 h 17.276464 17.276465 v 7.64656 7.64656 h 24.955066 24.954551 v -15.29312 -15.29364 h -11.21999 c -8.78222,0 -11.97519,-0.8309 -14.694709,-3.82354 -2.64889,-2.91493 -5.912142,-3.82302 -13.734562,-3.82302 H 74.100903 v 7.64656 7.64656 H 60.663997 47.226575 V 97.559937 78.443274 h 13.437422 13.436906 v 7.646562 7.646561 H 99.055969 124.01052 V 78.443274 63.149634 h -11.21999 c -8.78222,0 -11.97519,-0.830899 -14.694709,-3.823539 -2.64889,-2.91493 -5.912142,-3.82354 -13.734562,-3.82354 H 74.100903 v 7.647079 7.646561 H 60.663997 47.226575 v -7.646561 c 0,-0.134854 -0.0051,-0.235028 -0.0057,-0.365353 v -7.281209 h -3.825089 c -0.003,-2e-6 -0.0052,-5.17e-4 -0.0083,-5.17e-4 z m 43.853137,7.647079 c 3.02341,0 7.012418,1.706372 8.935888,3.823022 2.4589,2.70585 5.911972,3.823539 11.814782,3.823539 h 8.34109 v 7.647079 7.646562 H 99.055969 81.779504 V 74.619735 c 0,-11.33129 0.066,-11.470101 5.461166,-11.470101 z m 0,45.880406 c 3.02341,0 7.012418,1.70689 8.935888,3.82354 2.4589,2.70585 5.911972,3.82302 11.814782,3.82302 h 8.34109 v 7.64708 7.64656 H 99.055969 81.779504 v -11.4701 c 0,-11.33129 0.066,-11.4701 5.461166,-11.4701 z"
inkscape:label="path4"
inkscape:export-filename="folder-tree-write-mono.png"
inkscape:export-xdpi="19.246401"
inkscape:export-ydpi="19.246401"
sodipodi:nodetypes="sccccscccccccccssscccccccccccccccssscccccscccsssscccccssssscccccss" /><path
id="rect4"
style="fill:none;fill-opacity:1;stroke:url(#linearGradient3);stroke-width:2.029;stroke-dasharray:none"
d="m 95.735718,57.675698 13.322102,-13.409862 -13.397742,-13.486 -0.0502,0.05052 0.0249,5.318429 8.063912,8.117046 -7.988282,8.040901 z"
inkscape:label="rect4"
sodipodi:nodetypes="cccccccc" /><path
id="rect4-3"
style="fill:none;fill-opacity:1;stroke-width:2.029;stroke-dasharray:none;stroke:url(#linearGradient2)"
d="m 110.19252,57.322947 13.32209,-13.409862 -13.39773,-13.486 -0.0502,0.05052 0.0249,5.318429 8.0639,8.117046 -7.98827,8.040901 z"
inkscape:label="rect4"
sodipodi:nodetypes="cccccccc" /></g></g></svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="folder-tree-read-yerico.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="0.7071068"
inkscape:cx="367.69552"
inkscape:cy="341.53257"
inkscape:window-width="1920"
inkscape:window-height="1055"
inkscape:window-x="-7"
inkscape:window-y="-7"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs1"><linearGradient
id="swatch3"
inkscape:swatch="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3" /></linearGradient><linearGradient
id="swatch2"
inkscape:swatch="solid"><stop
style="stop-color:#fff4cc;stop-opacity:1;"
offset="0"
id="stop2" /></linearGradient><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 148.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="210 : 148.5 : 1"
inkscape:persp3d-origin="105 : 99 : 1"
id="perspective8" /><linearGradient
inkscape:collect="always"
xlink:href="#swatch2"
id="linearGradient2"
x1="39.547974"
y1="97.559677"
x2="124.01052"
y2="97.559677"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#swatch3"
id="linearGradient3"
x1="184.96028"
y1="72.646881"
x2="189.76028"
y2="72.646881"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(9.5063048,0,0,9.5180616,-1955.787,-785.28372)" /></defs><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g1"><circle
style="fill:#d89218;fill-opacity:1;stroke-width:6.79151"
id="path2"
cx="82.285423"
cy="98.160416"
r="63.764584"
inkscape:export-filename="folder-tree-read-yerico-16.png"
inkscape:export-xdpi="3.1867223"
inkscape:export-ydpi="3.1867223" /><path
id="path4"
style="fill:url(#linearGradient2);stroke-width:5.43016"
d="M 43.387533 55.502555 C 43.382223 55.502555 43.377842 55.503067 43.372546 55.503072 L 39.547974 55.503072 L 39.547974 73.891614 L 39.601717 73.891614 C 39.562929 78.216526 39.547974 83.280562 39.547974 89.913375 L 39.547974 124.32368 L 56.824438 124.32368 L 74.100903 124.32368 L 74.100903 131.97024 L 74.100903 139.6168 L 99.055969 139.6168 L 124.01052 139.6168 L 124.01052 124.32368 L 124.01052 109.03004 L 112.79053 109.03004 C 104.00831 109.03004 100.81534 108.19914 98.095821 105.2065 C 95.446931 102.29157 92.183679 101.38348 84.361259 101.38348 L 74.100903 101.38348 L 74.100903 109.03004 L 74.100903 116.6766 L 60.663997 116.6766 L 47.226575 116.6766 L 47.226575 97.559937 L 47.226575 78.443274 L 60.663997 78.443274 L 74.100903 78.443274 L 74.100903 86.089836 L 74.100903 93.736397 L 99.055969 93.736397 L 124.01052 93.736397 L 124.01052 78.443274 L 124.01052 63.149634 L 112.79053 63.149634 C 104.00831 63.149634 100.81534 62.318735 98.095821 59.326095 C 95.446931 56.411165 92.183679 55.502555 84.361259 55.502555 L 74.100903 55.502555 L 74.100903 63.149634 L 74.100903 70.796195 L 60.663997 70.796195 L 47.226575 70.796195 L 47.226575 63.149634 C 47.226575 63.01478 47.221481 62.914606 47.22089 62.784281 L 47.22089 55.503072 L 43.395801 55.503072 C 43.392754 55.50307 43.390584 55.502555 43.387533 55.502555 z M 87.24067 63.149634 C 90.26408 63.149634 94.253088 64.856006 96.176558 66.972656 C 98.635458 69.678506 102.08853 70.796195 107.99134 70.796195 L 116.33243 70.796195 L 116.33243 78.443274 L 116.33243 86.089836 L 99.055969 86.089836 L 81.779504 86.089836 L 81.779504 74.619735 C 81.779504 63.288445 81.8455 63.149634 87.24067 63.149634 z M 87.24067 109.03004 C 90.26408 109.03004 94.253088 110.73693 96.176558 112.85358 C 98.635458 115.55943 102.08853 116.6766 107.99134 116.6766 L 116.33243 116.6766 L 116.33243 124.32368 L 116.33243 131.97024 L 99.055969 131.97024 L 81.779504 131.97024 L 81.779504 120.50014 C 81.779504 109.16885 81.8455 109.03004 87.24067 109.03004 z "
inkscape:label="path4"
inkscape:export-filename="folder-tree-write-mono.png"
inkscape:export-xdpi="19.246401"
inkscape:export-ydpi="19.246401" /><g
id="g4"
transform="matrix(1.3614822,0,0,1.3666947,-125.72431,-30.762205)"><g
id="g5"><ellipse
style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3);stroke-width:1.34122;stroke-dasharray:none"
id="path3"
cx="-174.68321"
cy="-93.826241"
rx="22.815136"
ry="22.843351"
transform="scale(-1)" /><g
id="g3"
transform="matrix(-10.529237,0,0,-10.0954,2228.8808,842.76681)"><path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path13711-9-5-5-8-1-5"
d="m 195.01206,72.543769 -1.42575,1.715456 1.38914,1.542414 v -1.075102 h 1.2832 v -1.075092 h -1.24851 z"
style="fill:#cd4b3f;fill-opacity:1;stroke:none;stroke-width:0.247029" /><ellipse
id="path10749-8-0-2-8-0-9"
style="fill:none;stroke:#dead5c;stroke-width:0.56623;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
cx="195.09644"
cy="74.175911"
rx="1.8063053"
ry="1.8960955" /></g></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

@@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="48"
height="48"
viewBox="0 0 48 48"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:export-filename="folder-tree-write-classic-16.png"
inkscape:export-xdpi="32"
inkscape:export-ydpi="32"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="folder-tree-write-classic.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="8.5972598"
inkscape:cx="6.7463356"
inkscape:cy="35.999843"
inkscape:window-width="1920"
inkscape:window-height="1055"
inkscape:window-x="-7"
inkscape:window-y="-7"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs1"><linearGradient
id="swatch11"
inkscape:swatch="solid"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop11" /></linearGradient><linearGradient
id="swatch9"
inkscape:swatch="solid"><stop
style="stop-color:#82d8f8;stop-opacity:1;"
offset="0"
id="stop10" /></linearGradient><linearGradient
id="swatch8"
inkscape:swatch="solid"><stop
style="stop-color:#31afe2;stop-opacity:1;"
offset="0"
id="stop8" /></linearGradient><linearGradient
id="swatch7"><stop
style="stop-color:#82dcf8;stop-opacity:1;"
offset="0"
id="stop7" /><stop
style="stop-color:#31afe2;stop-opacity:1;"
offset="1"
id="stop9" /></linearGradient><linearGradient
id="swatch6"><stop
style="stop-color:#0bade1;stop-opacity:1;"
offset="0"
id="stop6" /></linearGradient><linearGradient
id="swatch5"><stop
style="stop-color:#09ade2;stop-opacity:1;"
offset="0"
id="stop5" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#swatch7"
id="linearGradient8"
gradientUnits="userSpaceOnUse"
x1="12"
y1="5"
x2="12"
y2="24" /><linearGradient
inkscape:collect="always"
xlink:href="#swatch7"
id="linearGradient10"
gradientUnits="userSpaceOnUse"
x1="12"
y1="5"
x2="12"
y2="24" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient11"
id="linearGradient13"
x1="39.316284"
y1="23.850887"
x2="39.316284"
y2="33.573162"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5212764,0,0,1.5212764,-23.44161,-15.440195)" /><linearGradient
id="linearGradient11"
inkscape:collect="always"><stop
style="stop-color:#ebfff2;stop-opacity:1;"
offset="0"
id="stop12" /><stop
style="stop-color:#07df44;stop-opacity:1;"
offset="1"
id="stop13" /></linearGradient></defs><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g1"><g
style="fill:none;stroke-width:0.997795;stroke-dasharray:none"
id="g2-9"
transform="matrix(0.94488189,0,0,0.94488189,13.942277,26.198812)"><rect
width="24"
height="24"
fill="#ffffff"
id="rect1-4-2"
x="0"
y="0"
style="stroke-width:0.997795;stroke-dasharray:none" /><path
d="M 3,6.47214 C 3,6.16165 3.07229,5.85542 3.21115,5.57771 L 4,4 h 5 l 1,2 h 10 c 0.5523,0 1,0.44772 1,1 v 2 10 c 0,0.5523 -0.4477,1 -1,1 H 4 C 3.44772,20 3,19.5523 3,19 V 9 Z"
stroke="#000000"
stroke-linecap="round"
stroke-linejoin="round"
id="path1-5-7"
style="stroke-width:0.997795;stroke-dasharray:none" /><path
d="m 4,20 h 16 c 0.5523,0 1,-0.4477 1,-1 V 11 C 21,9.89543 20.1046,9 19,9 H 5 C 3.89543,9 3,9.89543 3,11 v 8 c 0,0.5523 0.44772,1 1,1 z"
stroke="#000000"
stroke-linecap="round"
stroke-linejoin="round"
id="path2-5-9"
style="mix-blend-mode:normal;fill:url(#linearGradient10);stroke-width:0.997795;stroke-dasharray:none" /></g><g
style="opacity:1;fill:none;stroke-width:0.997795;stroke-dasharray:none"
id="g2"
transform="matrix(0.94488189,0,0,0.94488189,13.928523,5.2534968)"><rect
width="24"
height="24"
fill="#ffffff"
id="rect1-4"
x="0"
y="0"
style="stroke-width:0.997795;stroke-dasharray:none" /><path
d="M 3,6.47214 C 3,6.16165 3.07229,5.85542 3.21115,5.57771 L 4,4 h 5 l 1,2 h 10 c 0.5523,0 1,0.44772 1,1 v 2 10 c 0,0.5523 -0.4477,1 -1,1 H 4 C 3.44772,20 3,19.5523 3,19 V 9 Z"
stroke="#000000"
stroke-linecap="round"
stroke-linejoin="round"
id="path1-5"
style="stroke-width:0.997795;stroke-dasharray:none" /><path
d="m 4,20 h 16 c 0.5523,0 1,-0.4477 1,-1 V 11 C 21,9.89543 20.1046,9 19,9 H 5 C 3.89543,9 3,9.89543 3,11 v 8 c 0,0.5523 0.44772,1 1,1 z"
stroke="#000000"
stroke-linecap="round"
stroke-linejoin="round"
id="path2-5"
style="mix-blend-mode:normal;fill:url(#linearGradient8);stroke-width:0.997795;stroke-dasharray:none" /></g><path
style="fill:none;stroke:#000000;stroke-width:1.05292px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 4.7932538,3.7410698 V 41.12628"
id="path14" /><path
style="fill:none;stroke:#000000;stroke-width:1.00783px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 4.8643183,18.604563 H 16.977703"
id="path13" /><path
style="fill:none;stroke:#000000;stroke-width:1.01719px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 4.6626873,40.600637 H 17.002505"
id="path5-5" /><path
style="fill:url(#linearGradient13);stroke:#000000;stroke-width:1.0752;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
d="M 29.511732,28.232567 43.22686,36.103058 43.065591,20.374396 v 0 z"
id="path11" /></g></g></svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="folder-tree-write-monochrome.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="1"
inkscape:cx="529"
inkscape:cy="299.5"
inkscape:window-width="1920"
inkscape:window-height="1055"
inkscape:window-x="-7"
inkscape:window-y="-7"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs1"><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 148.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="210 : 148.5 : 1"
inkscape:persp3d-origin="105 : 99 : 1"
id="perspective8" /></defs><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g1"><path
id="rect14-6"
style="fill:#e6e6e6;fill-opacity:1;stroke-width:0.338152"
d="M 141.52,29.104168 V 154.0214 H 16.933331 v 3.74728 H 145.5978 V 29.104168 Z"
inkscape:export-filename="folder-tree-write-double-arrow-mono-96.png"
inkscape:export-xdpi="18.95162"
inkscape:export-ydpi="18.95162" /><path
id="path4"
style="fill:#000000;stroke-width:5.43016"
d="M 43.387533 55.502555 C 43.382223 55.502555 43.377842 55.503067 43.372546 55.503072 L 39.547974 55.503072 L 39.547974 73.891614 L 39.601717 73.891614 C 39.562929 78.216526 39.547974 83.280562 39.547974 89.913375 L 39.547974 124.32368 L 56.824438 124.32368 L 74.100903 124.32368 L 74.100903 131.97024 L 74.100903 139.6168 L 99.055969 139.6168 L 124.01052 139.6168 L 124.01052 124.32368 L 124.01052 109.03004 L 112.79053 109.03004 C 104.00831 109.03004 100.81534 108.19914 98.095821 105.2065 C 95.446931 102.29157 92.183679 101.38348 84.361259 101.38348 L 74.100903 101.38348 L 74.100903 109.03004 L 74.100903 116.6766 L 60.663997 116.6766 L 47.226575 116.6766 L 47.226575 97.559937 L 47.226575 78.443274 L 60.663997 78.443274 L 74.100903 78.443274 L 74.100903 86.089836 L 74.100903 93.736397 L 99.055969 93.736397 L 124.01052 93.736397 L 124.01052 78.443274 L 124.01052 63.149634 L 112.79053 63.149634 C 104.00831 63.149634 100.81534 62.318735 98.095821 59.326095 C 95.446931 56.411165 92.183679 55.502555 84.361259 55.502555 L 74.100903 55.502555 L 74.100903 63.149634 L 74.100903 70.796195 L 60.663997 70.796195 L 47.226575 70.796195 L 47.226575 63.149634 C 47.226575 63.01478 47.221481 62.914606 47.22089 62.784281 L 47.22089 55.503072 L 43.395801 55.503072 C 43.392754 55.50307 43.390584 55.502555 43.387533 55.502555 z M 87.24067 63.149634 C 90.26408 63.149634 94.253088 64.856006 96.176558 66.972656 C 98.635458 69.678506 102.08853 70.796195 107.99134 70.796195 L 116.33243 70.796195 L 116.33243 78.443274 L 116.33243 86.089836 L 99.055969 86.089836 L 81.779504 86.089836 L 81.779504 74.619735 C 81.779504 63.288445 81.8455 63.149634 87.24067 63.149634 z M 87.24067 109.03004 C 90.26408 109.03004 94.253088 110.73693 96.176558 112.85358 C 98.635458 115.55943 102.08853 116.6766 107.99134 116.6766 L 116.33243 116.6766 L 116.33243 124.32368 L 116.33243 131.97024 L 99.055969 131.97024 L 81.779504 131.97024 L 81.779504 120.50014 C 81.779504 109.16885 81.8455 109.03004 87.24067 109.03004 z "
inkscape:label="path4"
inkscape:export-filename="folder-tree-write-mono.png"
inkscape:export-xdpi="19.246401"
inkscape:export-ydpi="19.246401" /><path
id="rect4"
style="fill:#000000;fill-opacity:1;stroke-width:0.129178"
d="m 108.93198,29.721502 -13.322102,13.409862 13.397742,13.486 0.0502,-0.05052 -0.0249,-5.318429 -8.06391,-8.117046 7.98828,-8.040901 z"
inkscape:label="rect4" /><path
id="rect4-3"
style="fill:#000000;fill-opacity:1;stroke-width:0.129178"
d="m 123.38877,30.427085 -13.32209,13.409862 13.39773,13.486 0.0502,-0.05052 -0.0249,-5.318429 -8.0639,-8.117046 7.98827,-8.040901 z"
inkscape:label="rect4" /></g></g></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="folder-tree-write-outline.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="1"
inkscape:cx="528"
inkscape:cy="300.5"
inkscape:window-width="1920"
inkscape:window-height="1055"
inkscape:window-x="-7"
inkscape:window-y="-7"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
showgrid="false" /><defs
id="defs1"><linearGradient
id="swatch3"
inkscape:swatch="solid"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3" /></linearGradient><linearGradient
id="swatch2"
inkscape:swatch="solid"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop2" /></linearGradient><linearGradient
id="swatch1"
inkscape:swatch="solid"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop1" /></linearGradient><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 148.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="210 : 148.5 : 1"
inkscape:persp3d-origin="105 : 99 : 1"
id="perspective8" /><linearGradient
inkscape:collect="always"
xlink:href="#swatch1"
id="linearGradient1"
x1="39.547974"
y1="97.559678"
x2="124.01052"
y2="97.559678"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#swatch2"
id="linearGradient2"
x1="95.609878"
y1="43.169433"
x2="109.05782"
y2="43.169433"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,2.1166667)" /><linearGradient
inkscape:collect="always"
xlink:href="#swatch3"
id="linearGradient3"
x1="110.06668"
y1="43.875016"
x2="123.51461"
y2="43.875016"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,1.5875)" /></defs><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><path
id="rect14-6"
style="fill:#e6e6e6;fill-opacity:1;stroke-width:0.338152"
d="M 141.52,29.104168 V 154.0214 H 16.933331 v 3.74728 H 145.5978 V 29.104168 Z"
inkscape:export-filename="folder-tree-write-outline-16.png"
inkscape:export-xdpi="3.1586032"
inkscape:export-ydpi="3.1586032" /><path
id="path4"
style="fill:none;stroke-width:2.03;stroke:url(#linearGradient1);stroke-dasharray:none"
d="M 43.387533 55.502555 C 43.382223 55.502555 43.377842 55.503067 43.372546 55.503072 L 39.547974 55.503072 L 39.547974 73.891614 L 39.601717 73.891614 C 39.562929 78.216526 39.547974 83.280562 39.547974 89.913375 L 39.547974 124.32368 L 56.824438 124.32368 L 74.100903 124.32368 L 74.100903 131.97024 L 74.100903 139.6168 L 99.055969 139.6168 L 124.01052 139.6168 L 124.01052 124.32368 L 124.01052 109.03004 L 112.79053 109.03004 C 104.00831 109.03004 100.81534 108.19914 98.095821 105.2065 C 95.446931 102.29157 92.183679 101.38348 84.361259 101.38348 L 74.100903 101.38348 L 74.100903 109.03004 L 74.100903 116.6766 L 60.663997 116.6766 L 47.226575 116.6766 L 47.226575 97.559937 L 47.226575 78.443274 L 60.663997 78.443274 L 74.100903 78.443274 L 74.100903 86.089836 L 74.100903 93.736397 L 99.055969 93.736397 L 124.01052 93.736397 L 124.01052 78.443274 L 124.01052 63.149634 L 112.79053 63.149634 C 104.00831 63.149634 100.81534 62.318735 98.095821 59.326095 C 95.446931 56.411165 92.183679 55.502555 84.361259 55.502555 L 74.100903 55.502555 L 74.100903 63.149634 L 74.100903 70.796195 L 60.663997 70.796195 L 47.226575 70.796195 L 47.226575 63.149634 C 47.226575 63.01478 47.221481 62.914606 47.22089 62.784281 L 47.22089 55.503072 L 43.395801 55.503072 C 43.392754 55.50307 43.390584 55.502555 43.387533 55.502555 z M 87.24067 63.149634 C 90.26408 63.149634 94.253088 64.856006 96.176558 66.972656 C 98.635458 69.678506 102.08853 70.796195 107.99134 70.796195 L 116.33243 70.796195 L 116.33243 78.443274 L 116.33243 86.089836 L 99.055969 86.089836 L 81.779504 86.089836 L 81.779504 74.619735 C 81.779504 63.288445 81.8455 63.149634 87.24067 63.149634 z M 87.24067 109.03004 C 90.26408 109.03004 94.253088 110.73693 96.176558 112.85358 C 98.635458 115.55943 102.08853 116.6766 107.99134 116.6766 L 116.33243 116.6766 L 116.33243 124.32368 L 116.33243 131.97024 L 99.055969 131.97024 L 81.779504 131.97024 L 81.779504 120.50014 C 81.779504 109.16885 81.8455 109.03004 87.24067 109.03004 z "
inkscape:label="path4"
inkscape:export-filename="folder-tree-write-mono.png"
inkscape:export-xdpi="19.246401"
inkscape:export-ydpi="19.246401" /><path
id="rect4"
style="fill:none;fill-opacity:1;stroke:url(#linearGradient2);stroke-width:2.029;stroke-dasharray:none"
d="m 108.93198,31.83817 -13.322102,13.409862 13.397742,13.486 0.0502,-0.05052 -0.0249,-5.318429 -8.06391,-8.117046 7.98828,-8.040901 z"
inkscape:label="rect4" /><path
id="rect4-3"
style="fill:none;fill-opacity:1;stroke:url(#linearGradient3);stroke-width:2.029;stroke-dasharray:none"
d="m 123.38877,32.014586 -13.32209,13.409862 13.39773,13.486 0.0502,-0.05052 -0.0249,-5.318429 -8.0639,-8.117046 7.98827,-8.040901 z"
inkscape:label="rect4" /></g></svg>

After

Width:  |  Height:  |  Size: 6.0 KiB

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="folder-tree-write-yerico.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="1.4142136"
inkscape:cx="367.69552"
inkscape:cy="393.50491"
inkscape:window-width="1920"
inkscape:window-height="1055"
inkscape:window-x="-7"
inkscape:window-y="-7"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs1"><linearGradient
id="swatch3"
inkscape:swatch="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3" /></linearGradient><linearGradient
id="swatch2"
inkscape:swatch="solid"><stop
style="stop-color:#fff4cc;stop-opacity:1;"
offset="0"
id="stop2" /></linearGradient><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 148.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="210 : 148.5 : 1"
inkscape:persp3d-origin="105 : 99 : 1"
id="perspective8" /><linearGradient
inkscape:collect="always"
xlink:href="#swatch2"
id="linearGradient2"
x1="39.547974"
y1="97.559677"
x2="124.01052"
y2="97.559677"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#swatch3"
id="linearGradient3"
x1="184.96028"
y1="72.646881"
x2="189.76028"
y2="72.646881"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(9.5063048,0,0,9.5180616,-1955.787,-785.28372)" /></defs><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><g
id="g1"><circle
style="fill:#d89218;fill-opacity:1;stroke-width:6.79151"
id="path2"
cx="82.285423"
cy="98.160416"
r="63.764584"
inkscape:export-filename="folder-tree-write-yerico-16.png"
inkscape:export-xdpi="3.1867223"
inkscape:export-ydpi="3.1867223" /><path
id="path4"
style="fill:url(#linearGradient2);stroke-width:5.43016"
d="M 43.387533 55.502555 C 43.382223 55.502555 43.377842 55.503067 43.372546 55.503072 L 39.547974 55.503072 L 39.547974 73.891614 L 39.601717 73.891614 C 39.562929 78.216526 39.547974 83.280562 39.547974 89.913375 L 39.547974 124.32368 L 56.824438 124.32368 L 74.100903 124.32368 L 74.100903 131.97024 L 74.100903 139.6168 L 99.055969 139.6168 L 124.01052 139.6168 L 124.01052 124.32368 L 124.01052 109.03004 L 112.79053 109.03004 C 104.00831 109.03004 100.81534 108.19914 98.095821 105.2065 C 95.446931 102.29157 92.183679 101.38348 84.361259 101.38348 L 74.100903 101.38348 L 74.100903 109.03004 L 74.100903 116.6766 L 60.663997 116.6766 L 47.226575 116.6766 L 47.226575 97.559937 L 47.226575 78.443274 L 60.663997 78.443274 L 74.100903 78.443274 L 74.100903 86.089836 L 74.100903 93.736397 L 99.055969 93.736397 L 124.01052 93.736397 L 124.01052 78.443274 L 124.01052 63.149634 L 112.79053 63.149634 C 104.00831 63.149634 100.81534 62.318735 98.095821 59.326095 C 95.446931 56.411165 92.183679 55.502555 84.361259 55.502555 L 74.100903 55.502555 L 74.100903 63.149634 L 74.100903 70.796195 L 60.663997 70.796195 L 47.226575 70.796195 L 47.226575 63.149634 C 47.226575 63.01478 47.221481 62.914606 47.22089 62.784281 L 47.22089 55.503072 L 43.395801 55.503072 C 43.392754 55.50307 43.390584 55.502555 43.387533 55.502555 z M 87.24067 63.149634 C 90.26408 63.149634 94.253088 64.856006 96.176558 66.972656 C 98.635458 69.678506 102.08853 70.796195 107.99134 70.796195 L 116.33243 70.796195 L 116.33243 78.443274 L 116.33243 86.089836 L 99.055969 86.089836 L 81.779504 86.089836 L 81.779504 74.619735 C 81.779504 63.288445 81.8455 63.149634 87.24067 63.149634 z M 87.24067 109.03004 C 90.26408 109.03004 94.253088 110.73693 96.176558 112.85358 C 98.635458 115.55943 102.08853 116.6766 107.99134 116.6766 L 116.33243 116.6766 L 116.33243 124.32368 L 116.33243 131.97024 L 99.055969 131.97024 L 81.779504 131.97024 L 81.779504 120.50014 C 81.779504 109.16885 81.8455 109.03004 87.24067 109.03004 z "
inkscape:label="path4"
inkscape:export-filename="folder-tree-write-mono.png"
inkscape:export-xdpi="19.246401"
inkscape:export-ydpi="19.246401" /><g
id="g4"
transform="matrix(-1.3614801,-0.00237623,0.00238533,-1.3666926,349.70769,226.11634)"><g
id="g5"><ellipse
style="fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient3);stroke-width:1.34122;stroke-dasharray:none"
id="path3"
cx="-174.68321"
cy="-93.826241"
rx="22.815136"
ry="22.843351"
transform="scale(-1)" /><g
id="g3"
transform="matrix(-10.529237,0,0,-10.0954,2228.8808,842.76681)"><path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path13711-9-5-5-8-1-5"
d="m 195.01206,72.543769 -1.42575,1.715456 1.38914,1.542414 v -1.075102 h 1.2832 v -1.075092 h -1.24851 z"
style="fill:#cd4b3f;fill-opacity:1;stroke:none;stroke-width:0.247029" /><ellipse
id="path10749-8-0-2-8-0-9"
style="fill:none;stroke:#dead5c;stroke-width:0.56623;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
cx="195.09644"
cy="74.175911"
rx="1.8063053"
ry="1.8960955" /></g></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

+338 -176
View File
@@ -90,7 +90,7 @@ MainWindow::MainWindow():
if (g.isFirstUse()) {
g.warningId(g.warningId() | AppMessages::MSG_WELCOME);
QTimer::singleShot(updateDelay-500, this, SLOT(appPrefs())); // must be shown before warnings dialog but after splash
QTimer::singleShot(updateDelay-500, this, SLOT(editAppSettings())); // must be shown before warnings dialog but after splash
}
else {
if (!g.previousVersion().isEmpty())
@@ -205,7 +205,7 @@ void MainWindow::closeEvent(QCloseEvent *event)
#endif
g.mainWinGeo(saveGeometry());
g.mainWinState(saveState());
g.tabbedMdi(actTabbedWindows->isChecked());
g.tabbedMdi(tabbedWindowsAct->isChecked());
QApplication::closeAllWindows();
mdiArea->closeAllSubWindows();
if (mdiArea->currentSubWindow()) {
@@ -255,7 +255,7 @@ void MainWindow::manualCheckForUpdates()
statusBar()->clearMessage();
}
void MainWindow::downloads()
void MainWindow::updates()
{
doUpdates(false);
}
@@ -325,13 +325,13 @@ void MainWindow::onIconSizeChanged(QAction * act)
void MainWindow::setTabbedWindows(bool on)
{
mdiArea->setViewMode(on ? QMdiArea::TabbedView : QMdiArea::SubWindowView);
if (actTileWindows)
actTileWindows->setDisabled(on);
if (actCascadeWindows)
actCascadeWindows->setDisabled(on);
if (tileWindowsAct)
tileWindowsAct->setDisabled(on);
if (cascadeWindowsAct)
cascadeWindowsAct->setDisabled(on);
if (actTabbedWindows->isChecked() != on)
actTabbedWindows->setChecked(on);
if (tabbedWindowsAct->isChecked() != on)
tabbedWindowsAct->setChecked(on);
}
void MainWindow::newFile()
@@ -452,7 +452,7 @@ void MainWindow::loadProfile()
}
}
void MainWindow::appPrefs()
void MainWindow::editAppSettings()
{
AppPreferencesDialog * dialog = new AppPreferencesDialog(this, updateFactories);
dialog->setMainWinHasDirtyChild(anyChildrenDirty());
@@ -460,6 +460,7 @@ void MainWindow::appPrefs()
connect(dialog, &AppPreferencesDialog::firmwareProfileChanged, this, &MainWindow::onCurrentProfileChanged);
dialog->exec();
dialog->deleteLater();
updateMenus();
}
void MainWindow::sdsync(bool postUpdate)
@@ -677,9 +678,11 @@ void MainWindow::updateMenus()
compareAct->setEnabled(activeChild);
writeSettingsAct->setEnabled(activeChild);
readSettingsAct->setEnabled(true);
writeSettingsSDPathAct->setEnabled(activeChild && isSDPathValid());
readSettingsSDPathAct->setEnabled(isSDPathValid());
writeBUToRadioAct->setEnabled(false);
readBUToFileAct->setEnabled(false);
editSplashAct->setDisabled(IS_FAMILY_HORUS_OR_T16(getCurrentBoard()));
editSplashAct->setDisabled(Boards::getBoardCapability(getCurrentBoard(), Board::HasColorLcd));
foreach (QAction * act, fileWindowActions) {
if (!act)
@@ -692,34 +695,39 @@ void MainWindow::updateMenus()
if (act->isSeparator() && act->parent() == this)
delete act;
}
fileWindowActions.clear();
if (activeChild) {
editMenu->clear();
editMenu->addActions(activeMdiChild()->getEditActions());
editMenu->addSeparator();
editMenu->addActions(activeMdiChild()->getModelActions()); // maybe separate menu/toolbar?
editMenu->setEnabled(true);
editToolBar->clear();
editToolBar->addActions(activeMdiChild()->getEditActions());
editToolBar->setEnabled(true);
fileWindowActions.clear();
if (activeChild) {
modelsMenu->clear();
modelsMenu->addActions(activeMdiChild()->getEditActions());
modelsMenu->addSeparator();
modelsMenu->addActions(activeMdiChild()->getModelActions()); // maybe separate menu/toolbar?
modelsMenu->addAction(compareAct);
modelsMenu->setEnabled(true);
modelsToolBar->clear();
modelsToolBar->addActions(activeMdiChild()->getEditActions());
modelsToolBar->addAction(compareAct);
modelsToolBar->setEnabled(true);
if (activeMdiChild()->getAction(MdiChild::ACT_MDL_MOV)) {
// workaround for default split button appearance of action with menu :-/
QToolButton * btn;
if ((btn = qobject_cast<QToolButton *>(editToolBar->widgetForAction(activeMdiChild()->getAction(MdiChild::ACT_MDL_MOV)))))
if ((btn = qobject_cast<QToolButton *>(modelsToolBar->widgetForAction(activeMdiChild()->getAction(MdiChild::ACT_MDL_MOV)))))
btn->setPopupMode(QToolButton::InstantPopup);
}
fileWindowActions = activeMdiChild()->getGeneralActions();
QAction *sep = new QAction(this);
sep->setSeparator(true);
fileWindowActions.append(sep);
fileMenu->insertActions(logsAct, fileWindowActions);
fileToolBar->insertActions(logsAct, fileWindowActions);
fileWindowActions.insert(0, sep);
radioMenu->addActions(fileWindowActions);
modelsToolBar->addActions(fileWindowActions); // do not put these in radio toolbar
}
else {
editToolBar->setDisabled(true);
editMenu->setDisabled(true);
modelsToolBar->setDisabled(true);
modelsMenu->setDisabled(true);
}
foreach (QAction * act, windowsListActions->actions()) {
@@ -732,7 +740,7 @@ void MainWindow::updateMenus()
updateRecentFileActions();
updateProfilesActions();
setWindowTitle(tr("EdgeTX Companion %1 - Radio: %2 - Profile: %3").arg(VERSION).arg(getCurrentFirmware()->getName()).arg(g.profile[g.id()].name()));
setWindowTitle(tr("%1 %2 - Radio: %3 - Profile: %4").arg(CPN_STR_APP_NAME).arg(VERSION).arg(getCurrentFirmware()->getName()).arg(g.profile[g.id()].name()));
}
MdiChild * MainWindow::createMdiChild()
@@ -801,59 +809,70 @@ void MainWindow::trAct(QAction * act, const QString & text, const QString & desc
void MainWindow::retranslateUi(bool showMsg)
{
trAct(newAct, tr("New"), tr("Create a new Models and Settings file"));
trAct(openAct, tr("Open..."), tr("Open Models and Settings file"));
trAct(saveAct, tr("Save"), tr("Save Models and Settings file"));
trAct(saveAsAct, tr("Save As..."), tr("Save Models and Settings file"));
trAct(closeAct, tr("Close"), tr("Close Models and Settings file"));
trAct(exitAct, tr("Exit"), tr("Exit the application"));
trAct(aboutAct, tr("About Companion..."), tr("Show the application's About box"));
trAct(newAct, tr("New"), tr("Create a new Models and Settings file"));
trAct(openAct, tr("Open..."), tr("Open an existing Models and Settings file"));
trAct(saveAct, tr("Save"), tr("Save to Models and Settings file"));
trAct(saveAsAct, tr("Save As..."), tr("Save Models and Settings to another file name"));
trAct(closeAct, tr("Close"), tr("Close Models and Settings file"));
trAct(recentFilesAct, tr("Recent Files"), tr("List of recently used files"));
trAct(writeSettingsSDPathAct, tr("Write Models and Settings to SD Path"), tr("Write Models and Settings to SD Path"));
trAct(readSettingsSDPathAct, tr("Read Models and Settings from SD Path"), tr("Read Models and Settings from SD Path"));
trAct(exitAct, tr("Exit"), tr("Exit the application"));
trAct(recentFilesAct, tr("Recent Files"), tr("List of recently used files"));
trAct(profilesMenuAct, tr("Radio Profiles"), tr("Create or Select Radio Profiles"));
trAct(logsAct, tr("View Log File..."), tr("Open and view log file"));
trAct(appPrefsAct, tr("Settings..."), tr("Edit Settings"));
trAct(downloadsAct, tr("Download components..."), tr("Download EdgeTX components and supporting resources"));
trAct(manualChkForUpdAct, tr("Check for updates..."), tr("Check for updates to EdgeTX and supporting resources"));
trAct(changelogAct, tr("Release notes..."), tr("Show release notes"));
trAct(compareAct, tr("Compare Models..."), tr("Compare models"));
trAct(editSplashAct, tr("Edit Radio Splash Image..."), tr("Edit the splash image of your Radio"));
trAct(readFlashAct, tr("Read Firmware from Radio"), tr("Read firmware from Radio"));
trAct(writeFlashAct, tr("Write Firmware to Radio"), tr("Write firmware to Radio"));
trAct(sdsyncAct, tr("Synchronize SD"), tr("SD card synchronization"));
trAct(editAppSettingsAct, tr("Edit Settings..."), tr("Edit %1 and Simulator settings (including radio profiles) settings").arg(CPN_STR_APP_NAME));
trAct(exportAppSettingsAct, tr("Export Settings..."), tr("Save all the current %1 and Simulator settings (including radio profiles) to a file.").arg(CPN_STR_APP_NAME));
trAct(importAppSettingsAct, tr("Import Settings..."), tr("Load %1 and Simulator settings from a prevously exported settings file.").arg(CPN_STR_APP_NAME));
//trAct(openDocURLAct, tr("Manuals and other Documents"), tr("Open the EdgeTX document page in a web browser"));
trAct(writeSettingsAct, tr("Write Models and Settings To Radio"), tr("Write Models and Settings to Radio"));
trAct(readSettingsAct, tr("Read Models and Settings From Radio"), tr("Read Models and Settings from Radio"));
trAct(burnConfigAct, tr("Configure Communications..."), tr("Configure software for communicating with the Radio"));
trAct(burnConfigAct, tr("Configure Radio Communications..."), tr("Configure Companion for communicating with the Radio"));
trAct(editSplashAct, tr("Edit Radio Splash Image..."), tr("Edit the splash image of your Radio"));
trAct(readFlashAct, tr("Read Firmware from Radio"), tr("Read firmware from Radio"));
trAct(writeFlashAct, tr("Write Firmware to Radio"), tr("Write firmware to Radio"));
trAct(writeSettingsAct, tr("Write Models and Settings to Radio"), tr("Write Models and Settings to Radio"));
trAct(readSettingsAct, tr("Read Models and Settings from Radio"), tr("Read Models and Settings from Radio"));
trAct(writeBUToRadioAct, tr("Write Backup to Radio"), tr("Write Backup from file to Radio"));
trAct(readBUToFileAct, tr("Backup Radio to File"), tr("Save a complete backup file of all settings and model data in the Radio"));
trAct(compareAct, tr("Compare Models"), tr("Compare models"));
trAct(updatesAct, tr("Update components..."), tr("Download and update EdgeTX components and supporting resources"));
trAct(sdsyncAct, tr("Synchronize SD card..."), tr("SD card synchronization"));
trAct(logsAct, tr("View Log File..."), tr("Open and view log file"));
trAct(profilesMenuAct, tr("Radio Profiles"), tr("Create or Select Radio Profiles"));
trAct(createProfileAct, tr("Add Radio Profile"), tr("Create a new Radio Settings Profile"));
trAct(copyProfileAct, tr("Copy Current Radio Profile"), tr("Duplicate current Radio Settings Profile"));
trAct(deleteProfileAct, tr("Delete Current Radio Profile..."), tr("Delete the current Radio Settings Profile"));
trAct(exportSettingsAct, tr("Export Application Settings.."), tr("Save all the current %1 and Simulator settings (including radio profiles) to a file.").arg(CPN_STR_APP_NAME));
trAct(importSettingsAct, tr("Import Application Settings.."), tr("Load %1 and Simulator settings from a prevously exported settings file.").arg(CPN_STR_APP_NAME));
trAct(viewFileToolbarAct, tr("File Toolbar"), tr("Configure File toolbar visibility"));
trAct(viewModelsToolbarAct, tr("Models Toolbar"), tr("Configure Models toolbar visibility"));
trAct(viewRadioToolbarAct, tr("Radio Toolbar"), tr("Configure Radio toolbar visibility"));
trAct(viewSettingsToolbarAct, tr("Settings Toolbar"), tr("Configure Settings toolbar visibility"));
trAct(viewToolsToolbarAct, tr("Tools Toolbar"), tr("Configure Tools toolbar visibility"));
trAct(actTabbedWindows, tr("Tabbed Windows"), tr("Use tabs to arrange open windows."));
trAct(actTileWindows, tr("Tile Windows"), tr("Arrange open windows across all the available space."));
trAct(actCascadeWindows, tr("Cascade Windows"), tr("Arrange all open windows in a stack."));
trAct(actCloseAllWindows, tr("Close All Windows"), tr("Closes all open files (prompts to save if necessary."));
trAct(tabbedWindowsAct, tr("Tabbed Windows"), tr("Use tabs to arrange open windows."));
trAct(tileWindowsAct, tr("Tile Windows"), tr("Arrange open windows across all the available space."));
trAct(cascadeWindowsAct, tr("Cascade Windows"), tr("Arrange all open windows in a stack."));
trAct(closeAllWindowsAct, tr("Close All Windows"), tr("Closes all open files (prompts to save if necessary."));
trAct(manualChkForUpdAct, tr("Check for updates..."), tr("Check for updates to EdgeTX and supporting resources"));
trAct(changelogAct, tr("Release notes..."), tr("Show release notes"));
trAct(aboutAct, tr("About"), tr("Show the application's About box"));
editMenu->setTitle(tr("Edit"));
fileMenu->setTitle(tr("File"));
viewMenu->setTitle(tr("View"));
modelsMenu->setTitle(tr("Models"));
settingsMenu->setTitle(tr("Settings"));
themeMenu->setTitle(tr("Set Icon Theme"));
iconThemeSizeMenu->setTitle(tr("Set Icon Size"));
burnMenu->setTitle(tr("Read/Write"));
radioMenu->setTitle(tr("Radio"));
toolsMenu->setTitle(tr("Tools"));
windowMenu->setTitle(tr("Window"));
helpMenu->setTitle(tr("Help"));
fileToolBar->setWindowTitle(tr("File"));
editToolBar->setWindowTitle(tr("Edit"));
burnToolBar->setWindowTitle(tr("Write"));
helpToolBar->setWindowTitle(tr("Help"));
modelsToolBar->setWindowTitle(tr("Models"));
radioToolBar->setWindowTitle(tr("Radio"));
settingsToolBar->setWindowTitle(tr("Settings"));
toolsToolBar->setWindowTitle(tr("Tools"));
showReadyStatus();
@@ -863,60 +882,71 @@ void MainWindow::retranslateUi(bool showMsg)
void MainWindow::createActions()
{
newAct = addAct("new.png", SLOT(newFile()), QKeySequence::New);
openAct = addAct("open.png", SLOT(openFile()), QKeySequence::Open);
saveAct = addAct("save.png", SLOT(save()), QKeySequence::Save);
saveAsAct = addAct("saveas.png", SLOT(saveAs()), tr("Ctrl+Shift+S")); // Windows doesn't have "native" save-as key, Lin/OSX both use this one anyway
closeAct = addAct("clear.png", SLOT(closeFile()) /*, QKeySequence::Close*/); // setting/showing this shortcut interferes with the system one (Ctrl+W/Ctrl-F4)
exitAct = addAct("exit.png", SLOT(closeAllWindows()), QKeySequence::Quit, qApp);
newAct = addAct("new.png", SLOT(newFile()), QKeySequence::New);
openAct = addAct("open.png", SLOT(openFile()), QKeySequence::Open);
saveAct = addAct("save.png", SLOT(save()), QKeySequence::Save);
saveAsAct = addAct("saveas.png", SLOT(saveAs()), tr("Ctrl+Shift+S")); // Windows doesn't have "native" save-as key, Lin/OSX both use this one anyway
// assigned menus in createMenus()
recentFilesAct = addAct("recentdocument.png");
closeAct = addAct("clear.png", SLOT(closeFile()) /*, QKeySequence::Close*/); // setting/showing this shortcut interferes with the system one (Ctrl+W/Ctrl-F4)
// TODO change to more appropriate icon sets and uncomment toolbar actions
writeSettingsSDPathAct = addAct("folder-tree-write.png", SLOT(writeSettingsSDPath()));
readSettingsSDPathAct = addAct("folder-tree-read.png", SLOT(readSettingsSDPath()));
// end TODO
exitAct = addAct("exit.png", SLOT(closeAllWindows()), QKeySequence::Quit, qApp);
logsAct = addAct("logs.png", SLOT(logFile()), tr("Ctrl+Alt+L"));
appPrefsAct = addAct("apppreferences.png", SLOT(appPrefs()), QKeySequence::Preferences);
downloadsAct = addAct("download.png", SLOT(downloads()), tr("Ctrl+Alt+D"));
compareAct = addAct("compare.png", SLOT(compare()), tr("Ctrl+Alt+R"));
sdsyncAct = addAct("sdsync.png", SLOT(sdsync()));
editAppSettingsAct = addAct("apppreferences.png", SLOT(editAppSettings()), QKeySequence::Preferences);
exportAppSettingsAct = addAct("saveas.png", SLOT(exportAppSettings()));
importAppSettingsAct = addAct("open.png", SLOT(importAppSettings()));
burnConfigAct = addAct("configure.png", SLOT(burnConfig()));
editSplashAct = addAct("paintbrush.png", SLOT(customizeSplash()));
burnListAct = addAct("list.png", SLOT(burnList()));
readFlashAct = addAct("read_flash.png", SLOT(readFlash()));
writeFlashAct = addAct("write_flash.png", SLOT(writeFlash()));
writeSettingsAct = addAct("write_eeprom.png", SLOT(writeSettings()));
readSettingsAct = addAct("read_eeprom.png", SLOT(readSettings()));
burnConfigAct = addAct("configure.png", SLOT(burnConfig()));
compareAct = addAct("compare.png", SLOT(compare()), tr("Ctrl+Alt+R"));
updatesAct = addAct("download.png", SLOT(updates()), tr("Ctrl+Alt+D"));
editSplashAct = addAct("paintbrush.png", SLOT(customizeSplash()));
// assigned menus in createMenus()
profilesMenuAct = addAct("profiles.png");
createProfileAct = addAct("new.png", SLOT(createProfile()));
copyProfileAct = addAct("copy.png", SLOT(copyProfile()));
deleteProfileAct = addAct("clear.png", SLOT(deleteCurrentProfile()));
sdsyncAct = addAct("sdsync.png", SLOT(sdsync()));
logsAct = addAct("logs.png", SLOT(logFile()), tr("Ctrl+Alt+L"));
writeBUToRadioAct = addAct("write_eeprom_file.png", SLOT(writeBackup()));
readBUToFileAct = addAct("read_eeprom_file.png", SLOT(readBackup()));
burnListAct = addAct("list.png", SLOT(burnList()));
readFlashAct = addAct("read_flash.png", SLOT(readFlash()));
writeFlashAct = addAct("write_flash.png", SLOT(writeFlash()));
writeSettingsAct = addAct("write_eeprom.png", SLOT(writeSettings()));
readSettingsAct = addAct("read_eeprom.png", SLOT(readSettings()));
writeBUToRadioAct = addAct("write_eeprom_file.png", SLOT(writeBackup()));
readBUToFileAct = addAct("read_eeprom_file.png", SLOT(readBackup()));
createProfileAct = addAct("new.png", SLOT(createProfile()));
copyProfileAct = addAct("copy.png", SLOT(copyProfile()));
deleteProfileAct = addAct("clear.png", SLOT(deleteCurrentProfile()));
viewFileToolbarAct = addAct("", SLOT(viewFileToolbar()));
viewModelsToolbarAct = addAct("", SLOT(viewModelsToolbar()));
viewRadioToolbarAct = addAct("", SLOT(viewRadioToolbar()));
viewSettingsToolbarAct = addAct("", SLOT(viewSettingsToolbar()));
viewToolsToolbarAct = addAct("", SLOT(viewToolsToolbar()));
exportSettingsAct = addAct("saveas.png", SLOT(exportSettings()));
importSettingsAct = addAct("open.png", SLOT(importSettings()));
tabbedWindowsAct = addAct("", SLOT(setTabbedWindows(bool)), 0, this, SIGNAL(triggered(bool)));
tileWindowsAct = addAct("", SLOT(tileSubWindows()), 0, mdiArea);
cascadeWindowsAct = addAct("", SLOT(cascadeSubWindows()), 0, mdiArea);
closeAllWindowsAct = addAct("", SLOT(closeAllSubWindows()), 0, mdiArea);
actTabbedWindows = addAct("", SLOT(setTabbedWindows(bool)), 0, this, SIGNAL(triggered(bool)));
actTileWindows = addAct("", SLOT(tileSubWindows()), 0, mdiArea);
actCascadeWindows = addAct("", SLOT(cascadeSubWindows()), 0, mdiArea);
actCloseAllWindows = addAct("", SLOT(closeAllSubWindows()), 0, mdiArea);
manualChkForUpdAct = addAct("update.png", SLOT(manualCheckForUpdates()));
aboutAct = addAct("information.png", SLOT(about()));
//openDocURLAct = addAct("changelog.png", SLOT(openDocURL()));
changelogAct = addAct("changelog.png", SLOT(changelog()));
// these two get assigned menus in createMenus()
recentFilesAct = addAct("recentdocument.png");
profilesMenuAct = addAct("profiles.png");
manualChkForUpdAct = addAct("update.png", SLOT(manualCheckForUpdates()));
changelogAct = addAct("changelog.png", SLOT(changelog()));
aboutAct = addAct("information.png", SLOT(about()));
exitAct->setMenuRole(QAction::QuitRole);
aboutAct->setMenuRole(QAction::AboutRole);
appPrefsAct->setMenuRole(QAction::PreferencesRole);
//openDocURLAct->setMenuRole(QAction::ApplicationSpecificRole);
//manualChkForUpdAct->setMenuRole(QAction::ApplicationSpecificRole);
editAppSettingsAct->setMenuRole(QAction::PreferencesRole);
changelogAct->setMenuRole(QAction::ApplicationSpecificRole);
actTabbedWindows->setCheckable(true);
compareAct->setEnabled(false);
setActCheckability(tabbedWindowsAct, false);
setActCheckability(viewFileToolbarAct, g.fileToolbarVisible());
setActCheckability(viewModelsToolbarAct, g.modelsToolbarVisible());
setActCheckability(viewRadioToolbarAct, g.radioToolbarVisible());
setActCheckability(viewSettingsToolbarAct, g.settingsToolbarVisible());
setActCheckability(viewToolsToolbarAct, g.toolsToolbarVisible());
}
void MainWindow::createMenus()
@@ -929,19 +959,23 @@ void MainWindow::createMenus()
fileMenu->addAction(closeAct);
fileMenu->addAction(recentFilesAct);
fileMenu->addSeparator();
fileMenu->addAction(logsAct);
fileMenu->addAction(downloadsAct);
fileMenu->addAction(compareAct);
fileMenu->addAction(sdsyncAct);
fileMenu->addAction(readSettingsSDPathAct);
fileMenu->addAction(writeSettingsSDPathAct);
fileMenu->addSeparator();
fileMenu->addAction(exitAct);
editMenu = menuBar()->addMenu("");
viewMenu = menuBar()->addMenu("");
viewMenu->addAction(viewFileToolbarAct);
viewMenu->addAction(viewModelsToolbarAct);
viewMenu->addAction(viewRadioToolbarAct);
viewMenu->addAction(viewSettingsToolbarAct);
viewMenu->addAction(viewToolsToolbarAct);
viewMenu->addSeparator();
viewMenu->addMenu(createLanguageMenu(viewMenu));
settingsMenu = menuBar()->addMenu("");
settingsMenu->addMenu(createLanguageMenu(settingsMenu));
modelsMenu = menuBar()->addMenu("");
themeMenu = settingsMenu->addMenu("");
themeMenu = viewMenu->addMenu("");
QActionGroup * themeGroup = new QActionGroup(themeMenu);
addActToGroup(themeGroup, tr("Classical"), tr("The classic companion9x icon theme"), "themeId", 0, g.theme());
addActToGroup(themeGroup, tr("Yerico"), tr("Yellow round honey sweet icon theme"), "themeId", 1, g.theme());
@@ -951,7 +985,7 @@ void MainWindow::createMenus()
connect(themeGroup, &QActionGroup::triggered, this, &MainWindow::onThemeChanged);
themeMenu->addActions(themeGroup->actions());
iconThemeSizeMenu = settingsMenu->addMenu("");
iconThemeSizeMenu = viewMenu->addMenu("");
QActionGroup * szGroup = new QActionGroup(iconThemeSizeMenu);
addActToGroup(szGroup, tr("Small"), tr("Use small toolbar icons"), "sizeId", 0, g.iconSize());
addActToGroup(szGroup, tr("Normal"), tr("Use normal size toolbar icons"), "sizeId", 1, g.iconSize());
@@ -960,41 +994,42 @@ void MainWindow::createMenus()
connect(szGroup, &QActionGroup::triggered, this, &MainWindow::onIconSizeChanged);
iconThemeSizeMenu->addActions(szGroup->actions());
settingsMenu->addSeparator();
settingsMenu->addAction(appPrefsAct);
settingsMenu->addAction(profilesMenuAct);
settingsMenu->addAction(editSplashAct);
settingsMenu->addAction(burnConfigAct);
settingsMenu->addSeparator();
settingsMenu->addAction(exportSettingsAct);
settingsMenu->addAction(importSettingsAct);
radioMenu = menuBar()->addMenu("");
radioMenu->addAction(writeSettingsAct);
radioMenu->addAction(readSettingsAct);
radioMenu->addSeparator();
radioMenu->addAction(writeBUToRadioAct);
radioMenu->addAction(readBUToFileAct);
radioMenu->addSeparator();
radioMenu->addAction(writeFlashAct);
radioMenu->addAction(readFlashAct);
radioMenu->addSeparator();
radioMenu->addAction(burnConfigAct);
radioMenu->addAction(editSplashAct);
burnMenu = menuBar()->addMenu("");
burnMenu->addAction(writeSettingsAct);
burnMenu->addAction(readSettingsAct);
burnMenu->addSeparator();
burnMenu->addAction(writeBUToRadioAct);
burnMenu->addAction(readBUToFileAct);
burnMenu->addSeparator();
burnMenu->addAction(writeFlashAct);
burnMenu->addAction(readFlashAct);
burnMenu->addSeparator();
burnMenu->addSeparator();
settingsMenu = menuBar()->addMenu("");
settingsMenu->addAction(editAppSettingsAct);
settingsMenu->addAction(exportAppSettingsAct);
settingsMenu->addAction(importAppSettingsAct);
settingsMenu->addSeparator();
settingsMenu->addAction(profilesMenuAct);
toolsMenu = menuBar()->addMenu("");
toolsMenu->addAction(updatesAct);
toolsMenu->addAction(sdsyncAct);
toolsMenu->addAction(logsAct);
toolsMenu->addSeparator();
windowMenu = menuBar()->addMenu("");
windowMenu->addAction(actTabbedWindows);
windowMenu->addAction(actTileWindows);
windowMenu->addAction(actCascadeWindows);
windowMenu->addAction(actCloseAllWindows);
windowMenu->addAction(tabbedWindowsAct);
windowMenu->addAction(tileWindowsAct);
windowMenu->addAction(cascadeWindowsAct);
windowMenu->addAction(closeAllWindowsAct);
windowMenu->addSeparator();
helpMenu = menuBar()->addMenu("");
helpMenu->addAction(manualChkForUpdAct);
//helpMenu->addSeparator();
//helpMenu->addAction(openDocURLAct);
//helpMenu->addSeparator();
helpMenu->addAction(changelogAct);
//helpMenu->addSeparator();
helpMenu->addAction(aboutAct);
recentFilesMenu = new QMenu(this);
@@ -1008,7 +1043,7 @@ void MainWindow::createMenus()
profilesMenu = new QMenu(this);
QActionGroup *profilesGroup = new QActionGroup(this);
for (int i=0; i < MAX_PROFILES; i++) {
for (int i = 0; i < MAX_PROFILES; i++) {
profileActs.append(profilesMenu->addAction(""));
profileActs[i]->setVisible(false);
profileActs[i]->setCheckable(true);
@@ -1032,46 +1067,81 @@ void MainWindow::createToolBars()
fileToolBar->addAction(saveAct);
fileToolBar->addAction(closeAct);
fileToolBar->addSeparator();
fileToolBar->addAction(logsAct);
fileToolBar->addAction(downloadsAct);
fileToolBar->addSeparator();
fileToolBar->addAction(appPrefsAct);
fileToolBar->addAction(profilesMenuAct);
fileToolBar->addAction(editSplashAct);
fileToolBar->addAction(editSplashAct);
fileToolBar->addSeparator();
fileToolBar->addAction(compareAct);
fileToolBar->addAction(sdsyncAct);
fileToolBar->addAction(readSettingsSDPathAct);
fileToolBar->addAction(writeSettingsSDPathAct);
// workaround for default split button appearance of action with menu :-/
QToolButton * btn;
if ((btn = qobject_cast<QToolButton *>(fileToolBar->widgetForAction(recentFilesAct))))
btn->setPopupMode(QToolButton::InstantPopup);
if ((btn = qobject_cast<QToolButton *>(fileToolBar->widgetForAction(profilesMenuAct))))
btn->setPopupMode(QToolButton::InstantPopup);
// gets populated later
editToolBar = addToolBar("");
editToolBar->setObjectName("Edit");
modelsToolBar = addToolBar("");
modelsToolBar->setObjectName("Models");
burnToolBar = new QToolBar(this);
addToolBar( Qt::LeftToolBarArea, burnToolBar );
burnToolBar->setObjectName("Write");
burnToolBar->addAction(writeSettingsAct);
burnToolBar->addAction(readSettingsAct);
burnToolBar->addSeparator();
burnToolBar->addAction(writeBUToRadioAct);
burnToolBar->addAction(readBUToFileAct);
burnToolBar->addSeparator();
burnToolBar->addAction(writeFlashAct);
burnToolBar->addAction(readFlashAct);
burnToolBar->addSeparator();
burnToolBar->addAction(burnConfigAct);
radioToolBar = new QToolBar(this);
addToolBar(Qt::LeftToolBarArea, radioToolBar);
radioToolBar->setObjectName("Radio");
radioToolBar->addAction(writeSettingsAct);
radioToolBar->addAction(readSettingsAct);
radioToolBar->addSeparator();
radioToolBar->addAction(writeBUToRadioAct);
radioToolBar->addAction(readBUToFileAct);
radioToolBar->addSeparator();
radioToolBar->addAction(writeFlashAct);
radioToolBar->addAction(readFlashAct);
radioToolBar->addSeparator();
radioToolBar->addAction(burnConfigAct);
settingsToolBar = addToolBar("");
settingsToolBar->setObjectName("Settings");
settingsToolBar->addAction(editAppSettingsAct);
settingsToolBar->addAction(profilesMenuAct);
if ((btn = qobject_cast<QToolButton *>(settingsToolBar->widgetForAction(profilesMenuAct))))
btn->setPopupMode(QToolButton::InstantPopup);
toolsToolBar = addToolBar("");
toolsToolBar->setObjectName("Tools");
toolsToolBar->addAction(updatesAct);
toolsToolBar->addAction(sdsyncAct);
toolsToolBar->addAction(logsAct);
connect(fileToolBar, &QToolBar::visibilityChanged, [=](bool visible)
{
g.fileToolbarVisible(visible);
const QSignalBlocker blocker(viewFileToolbarAct);
viewFileToolbarAct->setChecked(g.fileToolbarVisible());
});
connect(modelsToolBar, &QToolBar::visibilityChanged, [=](bool visible)
{
g.modelsToolbarVisible(visible);
const QSignalBlocker blocker(viewModelsToolbarAct);
viewModelsToolbarAct->setChecked(g.modelsToolbarVisible());
});
connect(radioToolBar, &QToolBar::visibilityChanged, [=](bool visible)
{
g.radioToolbarVisible(visible);
const QSignalBlocker blocker(viewRadioToolbarAct);
viewRadioToolbarAct->setChecked(g.radioToolbarVisible());
});
connect(settingsToolBar, &QToolBar::visibilityChanged, [=](bool visible)
{
g.settingsToolbarVisible(visible);
const QSignalBlocker blocker(viewSettingsToolbarAct);
viewSettingsToolbarAct->setChecked(g.settingsToolbarVisible());
});
connect(toolsToolBar, &QToolBar::visibilityChanged, [=](bool visible)
{
g.toolsToolbarVisible(visible);
const QSignalBlocker blocker(viewToolsToolbarAct);
viewToolsToolbarAct->setChecked(g.toolsToolbarVisible());
});
helpToolBar = addToolBar("");
helpToolBar->setObjectName("Help");
helpToolBar->addAction(manualChkForUpdAct);
helpToolBar->addAction(aboutAct);
}
QMenu * MainWindow::createLanguageMenu(QWidget * parent)
@@ -1262,7 +1332,7 @@ int MainWindow::newProfile(bool loadProfile)
if (loadProfile) {
if (loadProfileId(i))
appPrefs();
editAppSettings();
}
return i;
@@ -1281,7 +1351,7 @@ void MainWindow::copyProfile()
g.profile[newId] = g.profile[g.id()];
g.profile[newId].name(g.profile[newId].name() + tr(" - Copy"));
if (loadProfileId(newId))
appPrefs();
editAppSettings();
}
}
@@ -1316,12 +1386,12 @@ void MainWindow::deleteCurrentProfile()
deleteProfile(g.id());
}
void MainWindow::exportSettings()
void MainWindow::exportAppSettings()
{
Helpers::exportAppSettings();
}
void MainWindow::importSettings()
void MainWindow::importAppSettings()
{
if (anyChildrenDirty()) {
QMessageBox::warning(this, CPN_STR_APP_NAME, tr("Please save or close all modified files before importing settings"));
@@ -1416,3 +1486,95 @@ void MainWindow::chooseProfile()
g.warningId(g.warningId() | AppMessages::MSG_NO_RADIO_TYPE);
}
}
void MainWindow::readSettingsSDPath()
{
QString tempFile;
tempFile = generateProcessUniqueTempFileName("temp.etx");
qDebug() << "Reading models and settings from SD path into temp file: " << tempFile;
if (readSettingsFromSDPath(tempFile)) {
MdiChild * child = createMdiChild();
child->newFile(false);
child->loadFile(tempFile, false);
child->show();
qunlink(tempFile);
}
}
bool MainWindow::readSettingsFromSDPath(const QString & filename)
{
ProgressDialog progressDialog(this, tr("Read Models and Settings from SD path"), CompanionIcon("read_eeprom.png"));
bool result = ::readSettingsSDCard(filename, progressDialog.progress(), false);
if (!result) {
if (!progressDialog.isEmpty()) {
progressDialog.exec();
}
}
else {
statusBar()->showMessage(tr("Models and Settings read"), 2000);
}
return result;
}
void MainWindow::writeSettingsSDPath()
{
StatusDialog *status = new StatusDialog(this, tr("Writing models and settings to SD path"), tr("In progress..."), 400);
if (activeMdiChild())
activeMdiChild()->writeSettings(status, false);
delete status;
}
bool MainWindow::isSDPathValid()
{
bool ret = false;
const QString sdPath = g.currentProfile().sdPath();
if (!sdPath.isEmpty()) {
if (QFile::exists(sdPath))
ret = true;
}
return ret;
}
void MainWindow::setActCheckability(QAction * act, bool checked)
{
act->setCheckable(true);
act->setChecked(checked);
}
void MainWindow::viewFileToolbar()
{
g.fileToolbarVisible(viewFileToolbarAct->isChecked());
const QSignalBlocker blocker(fileToolBar);
fileToolBar->setVisible(viewFileToolbarAct->isChecked());
}
void MainWindow::viewModelsToolbar()
{
g.modelsToolbarVisible(viewModelsToolbarAct->isChecked());
const QSignalBlocker blocker(modelsToolBar);
modelsToolBar->setVisible(viewModelsToolbarAct->isChecked());
}
void MainWindow::viewRadioToolbar()
{
g.radioToolbarVisible(viewRadioToolbarAct->isChecked());
const QSignalBlocker blocker(radioToolBar);
radioToolBar->setVisible(viewRadioToolbarAct->isChecked());
}
void MainWindow::viewSettingsToolbar()
{
g.settingsToolbarVisible(viewSettingsToolbarAct->isChecked());
const QSignalBlocker blocker(settingsToolBar);
settingsToolBar->setVisible(viewSettingsToolbarAct->isChecked());
}
void MainWindow::viewToolsToolbar()
{
g.toolsToolbarVisible(viewToolsToolbarAct->isChecked());
const QSignalBlocker blocker(toolsToolBar);
toolsToolBar->setVisible(viewToolsToolbarAct->isChecked());
}
+48 -19
View File
@@ -101,23 +101,32 @@ class MainWindow : public QMainWindow
void customizeSplash();
void about();
void compare();
void appPrefs();
void updateMenus();
void createProfile();
void copyProfile();
void deleteProfile(const int pid);
void deleteCurrentProfile();
void exportSettings();
void importSettings();
void editAppSettings();
void exportAppSettings();
void importAppSettings();
void autoClose();
void chooseProfile();
void autoCheckForUpdates();
void manualCheckForUpdates();
void downloads();
void updates();
void doUpdates(bool check, bool interactive = true);
void openFile(const QString & fileName);
void readSettingsSDPath();
void writeSettingsSDPath();
void viewFileToolbar();
void viewModelsToolbar();
void viewRadioToolbar();
void viewSettingsToolbar();
void viewToolsToolbar();
private:
QAction * addAct(const QString & icon, const char * slot = NULL, const QKeySequence & shortcut = 0, QObject * slotObj = NULL, const char * signal = NULL);
QAction * addActToGroup(QActionGroup * aGroup, const QString & sName, const QString & lName, const char * propName = 0,
@@ -126,6 +135,8 @@ class MainWindow : public QMainWindow
QMenu * createLanguageMenu(QWidget * parent = Q_NULLPTR);
void setActCheckability(QAction * act, bool checked);
void createActions();
void createMenus();
void createToolBars();
@@ -143,9 +154,12 @@ class MainWindow : public QMainWindow
bool readSettingsFromRadio(const QString & filename);
bool readFirmwareFromRadio(const QString & filename);
bool readSettingsFromSDPath(const QString & filename);
bool checkProfileRadioExists(int profId);
bool isSDPathValid();
QMdiArea *mdiArea;
QString installer_fileName;
@@ -155,21 +169,30 @@ class MainWindow : public QMainWindow
QVector<QAction *> profileActs;
QList<QAction *> fileWindowActions;
// top level menus
QMenu *fileMenu;
QMenu *editMenu;
QMenu *modelsMenu;
QMenu *viewMenu;
QMenu *settingsMenu;
QMenu *burnMenu;
QMenu *helpMenu;
QMenu *radioMenu;
QMenu *toolsMenu;
QMenu *windowMenu;
QMenu *helpMenu;
// sub menus
QMenu *iconThemeSizeMenu;
QMenu *themeMenu;
QMenu *recentFilesMenu;
QMenu *profilesMenu;
QActionGroup * windowsListActions;
QToolBar *fileToolBar;
QToolBar *editToolBar;
QToolBar *burnToolBar;
QToolBar *helpToolBar;
QToolBar *modelsToolBar;
QToolBar *radioToolBar;
QToolBar *settingsToolBar;
QToolBar *toolsToolBar;
QAction *newAct;
QAction *openAct;
QAction *saveAct;
@@ -177,8 +200,8 @@ class MainWindow : public QMainWindow
QAction *closeAct;
QAction *recentFilesAct;
QAction *exitAct;
QAction *appPrefsAct;
QAction *downloadsAct;
QAction *editAppSettingsAct;
QAction *updatesAct;
QAction *manualChkForUpdAct;
QAction *sdsyncAct;
QAction *changelogAct;
@@ -198,11 +221,17 @@ class MainWindow : public QMainWindow
QAction *createProfileAct;
QAction *copyProfileAct;
QAction *deleteProfileAct;
QAction *exportSettingsAct;
QAction *importSettingsAct;
//QAction *openDocURLAct;
QAction *actTabbedWindows;
QAction *actTileWindows;
QAction *actCascadeWindows;
QAction *actCloseAllWindows;
QAction *exportAppSettingsAct;
QAction *importAppSettingsAct;
QAction *tabbedWindowsAct;
QAction *tileWindowsAct;
QAction *cascadeWindowsAct;
QAction *closeAllWindowsAct;
QAction *writeSettingsSDPathAct;
QAction *readSettingsSDPathAct;
QAction *viewFileToolbarAct;
QAction *viewModelsToolbarAct;
QAction *viewRadioToolbarAct;
QAction *viewSettingsToolbarAct;
QAction *viewToolsToolbarAct;
};
+46 -26
View File
@@ -216,19 +216,12 @@ void MdiChild::setupNavigation()
addAct(ACT_GEN_PST, "paste.png", SLOT(pasteGeneralSettings()), tr("Ctrl+Alt+V"));
addAct(ACT_GEN_SIM, "simulate.png", SLOT(radioSimulate()), tr("Alt+Shift+S"));
addAct(ACT_ITM_EDT, "edit.png", SLOT(edit()), Qt::Key_Enter);
addAct(ACT_ITM_DEL, "clear.png", SLOT(confirmDelete()), QKeySequence::Delete);
addAct(ACT_MDL_EDT, "edit.png", SLOT(edit()), Qt::Key_Enter);
addAct(ACT_MDL_DEL, "clear.png", SLOT(confirmDelete()), QKeySequence::Delete);
addAct(ACT_MDL_ADD, "add.png", SLOT(modelAdd()), tr("Alt+A"));
addAct(ACT_MDL_RTR, "open.png", SLOT(loadBackup()), tr("Alt+R"));
addAct(ACT_MDL_WIZ, "wizard.png", SLOT(wizardEdit()), tr("Alt+W"));
addAct(ACT_LBL_ADD, "add.png", SLOT(labelAdd()), tr("Alt-L"));
addAct(ACT_LBL_DEL, "clear.png", SLOT(labelDelete()), tr("Alt-L"));
addAct(ACT_LBL_REN, "edit.png", SLOT(labelRename()), tr("Alt-R"));
addAct(ACT_LBL_MVU, "moveup.png", SLOT(labelMoveUp()), tr("Alt-+"));
addAct(ACT_LBL_MVD, "movedown.png", SLOT(labelMoveDown()), tr("Alt--"));
addAct(ACT_MDL_DFT, "currentmodel.png", SLOT(setDefault()), tr("Alt+U"));
addAct(ACT_MDL_PRT, "print.png", SLOT(print()), QKeySequence::Print);
addAct(ACT_MDL_SIM, "simulate.png", SLOT(modelSimulate()), tr("Alt+S"));
@@ -244,6 +237,12 @@ void MdiChild::setupNavigation()
QMenu * catsMenu = new QMenu(this);
action[ACT_MDL_MOV]->setMenu(catsMenu);
addAct(ACT_LBL_ADD, "add.png", SLOT(labelAdd()), tr("Alt-L"));
addAct(ACT_LBL_DEL, "clear.png", SLOT(labelDelete()), tr("Alt-L"));
addAct(ACT_LBL_REN, "edit.png", SLOT(labelRename()), tr("Alt-R"));
addAct(ACT_LBL_MVU, "moveup.png", SLOT(labelMoveUp()), tr("Alt-+"));
addAct(ACT_LBL_MVD, "movedown.png", SLOT(labelMoveDown()), tr("Alt--"));
// set up the toolbars
QToolButton * btn;
@@ -352,6 +351,8 @@ void MdiChild::updateNavigation()
}
action[ACT_GEN_SRT]->setVisible(hasLabels);
action[ACT_MDL_DEL]->setEnabled(modelsSelected);
action[ACT_MDL_DEL]->setText(tr("Delete") % (modelsSelected ? sp % modelsRemvTxt : ns));
action[ACT_MDL_CUT]->setEnabled(modelsSelected);
action[ACT_MDL_CUT]->setText(tr("Cut") % (modelsSelected ? sp % modelsRemvTxt : ns));
action[ACT_MDL_CPY]->setEnabled(modelsSelected);
@@ -379,8 +380,8 @@ void MdiChild::retranslateUi()
action[ACT_GEN_SIM]->setText(tr("Simulate Radio"));
cboModelSortOrder->setToolTip(tr("Radio Models Order"));
action[ACT_ITM_EDT]->setText(tr("Edit Model"));
action[ACT_ITM_DEL]->setText(tr("Delete"));
action[ACT_MDL_EDT]->setText(tr("Edit Model"));
action[ACT_MDL_DEL]->setText(tr("Delete Model"));
action[ACT_LBL_ADD]->setText(tr("Add"));
action[ACT_LBL_DEL]->setText(tr("Delete"));
@@ -408,6 +409,7 @@ QList<QAction *> MdiChild::getGeneralActions()
{
QList<QAction *> actGrp;
actGrp.append(getAction(ACT_GEN_SIM));
actGrp.append(actionsSeparator());
actGrp.append(getAction(ACT_GEN_EDT));
actGrp.append(getAction(ACT_GEN_CPY));
actGrp.append(getAction(ACT_GEN_PST));
@@ -418,27 +420,28 @@ QList<QAction *> MdiChild::getEditActions()
{
QList<QAction *> actGrp;
actGrp.append(action[ACT_MDL_ADD]);
QAction * sep2 = new QAction(this);
sep2->setSeparator(true);
actGrp.append(sep2);
actGrp.append(getAction(ACT_ITM_EDT));
actGrp.append(getAction(ACT_ITM_DEL));
actGrp.append(actionsSeparator());
actGrp.append(getAction(ACT_MDL_EDT));
actGrp.append(getAction(ACT_MDL_DEL));
actGrp.append(getAction(ACT_MDL_CUT));
actGrp.append(getAction(ACT_MDL_CPY));
actGrp.append(getAction(ACT_MDL_PST));
actGrp.append(getAction(ACT_MDL_INS));
actGrp.append(getAction(ACT_MDL_DUP));
actGrp.append(getAction(ACT_MDL_MOV));
actGrp.append(getAction(ACT_MDL_EXP));
actGrp.append(getAction(ACT_MDL_MOV));
return actGrp;
}
QList<QAction *> MdiChild::getModelActions()
{
QList<QAction *> actGrp;
actGrp.append(getAction(ACT_MDL_RTR));
actGrp.append(getAction(ACT_MDL_WIZ));
actGrp.append(getAction(ACT_MDL_DFT));
// TODO remove
// the function has been hobbled as expects eeprom binary backup so do not list
// can just open another etx so use case doubtful
//actGrp.append(getAction(ACT_MDL_RTR));
actGrp.append(getAction(ACT_MDL_PRT));
actGrp.append(getAction(ACT_MDL_SIM));
return actGrp;
@@ -1481,12 +1484,12 @@ int MdiChild::askQuestion(const QString & msg, QMessageBox::StandardButtons butt
return QMessageBox::question(this, CPN_STR_APP_NAME, msg, buttons, defaultButton);
}
void MdiChild::writeSettings(StatusDialog * status) // write to Tx
void MdiChild::writeSettings(StatusDialog * status, bool toRadio) // write to Tx
{
if (g.confirmWriteModelsAndSettings()) {
QMessageBox msgbox;
msgbox.setText(tr("You are about to overwrite ALL models on the Radio."));
msgbox.setInformativeText(tr("Do you want to continue?"));
msgbox.setText(tr("You are about to overwrite ALL models."));
msgbox.setInformativeText(tr("Continue?"));
msgbox.setIcon(QMessageBox::Icon::Question);
msgbox.setStandardButtons(QMessageBox::Yes | QMessageBox::Abort);
msgbox.setDefaultButton(QMessageBox::Abort);
@@ -1499,21 +1502,31 @@ void MdiChild::writeSettings(StatusDialog * status) // write to Tx
return;
}
QString radioPath = findMassstoragePath("RADIO", true);
qDebug() << "Searching for SD card, found" << radioPath;
QString radioPath;
if (toRadio) {
radioPath = findMassstoragePath("RADIO", true);
qDebug() << "Searching for SD card, found" << radioPath;
}
else {
radioPath = g.currentProfile().sdPath();
if (!QFile(radioPath % "/RADIO").exists())
radioPath.clear();
}
if (radioPath.isEmpty()) {
qDebug() << "Radio SD card not found";
QMessageBox::critical(this, CPN_STR_TTL_ERROR, tr("Unable to find radio SD card!"));
QMessageBox::critical(this, CPN_STR_TTL_ERROR, tr("Unable to find SD card!"));
return;
}
if (saveFile(radioPath, false)) {
status->hide();
QMessageBox::information(this, CPN_STR_TTL_INFO, tr("Models and settings written to radio"));
QMessageBox::information(this, CPN_STR_TTL_INFO, tr("Models and settings written"));
}
else {
status->hide();
QMessageBox::critical(this, CPN_STR_TTL_ERROR, tr("Error writing models and settings to radio!"));
QMessageBox::critical(this, CPN_STR_TTL_ERROR, tr("Error writing models and settings!"));
}
}
@@ -1834,3 +1847,10 @@ void MdiChild::setModelModified(const int modelIndex, bool cascade)
setModified();
}
}
QAction * MdiChild::actionsSeparator()
{
QAction * act = new QAction(this);
act->setSeparator(true);
return act;
}
+10 -9
View File
@@ -55,14 +55,9 @@ class MdiChild : public QWidget
ACT_GEN_PST,
ACT_GEN_SIM,
ACT_GEN_SRT, // model sort order
ACT_ITM_EDT,
ACT_ITM_DEL,
ACT_LBL_ADD,
ACT_LBL_DEL,
ACT_LBL_MVU, // Move up
ACT_LBL_MVD, // Move down
ACT_LBL_REN, // Move down
ACT_MDL_ADD, // model actions...
ACT_MDL_EDT, // model actions...
ACT_MDL_DEL,
ACT_MDL_ADD,
ACT_MDL_CPY,
ACT_MDL_CUT,
ACT_MDL_PST,
@@ -75,6 +70,11 @@ class MdiChild : public QWidget
ACT_MDL_DFT, // set as DeFaulT
ACT_MDL_PRT, // print
ACT_MDL_SIM,
ACT_LBL_ADD, // label actions..
ACT_LBL_DEL,
ACT_LBL_MVU, // Move up
ACT_LBL_MVD, // Move down
ACT_LBL_REN, // Move down
ACT_ENUM_END
};
@@ -97,7 +97,7 @@ class MdiChild : public QWidget
bool saveAs(bool isNew=false);
bool saveFile(const QString & fileName, bool setCurrent=true);
void closeFile(bool force = false);
void writeSettings(StatusDialog * status);
void writeSettings(StatusDialog * status, bool toRadio = true);
void print(int model=-1, const QString & filename="");
void onFirmwareChanged();
@@ -231,6 +231,7 @@ class MdiChild : public QWidget
AbstractStaticItemModel* modelSortOrderItemModel;
QComboBox* cboModelSortOrder;
void setModelModified(const int modelIndex, bool cascade = true);
QAction * actionsSeparator();
};
// This will draw the drop indicator across all columns of a model View (vs. in just one column), and lets us make the indicator more obvious.
+16 -12
View File
@@ -189,21 +189,25 @@ bool readSettings(const QString & filename, ProgressWidget * progress)
return readSettingsEeprom(filename, progress);
}
bool readSettingsSDCard(const QString & filename, ProgressWidget * progress)
bool readSettingsSDCard(const QString & filename, ProgressWidget * progress, bool fromRadio)
{
QString radioPath = findMassstoragePath("RADIO", true, progress);
qDebug() << "Searching for SD card, found" << radioPath;
if (radioPath.isEmpty()) {
QMessageBox::critical(progress, CPN_STR_TTL_ERROR,
QCoreApplication::translate("RadioInterface", "Unable to find radio SD card!"));
return false;
QString radioPath;
if (fromRadio) {
radioPath = findMassstoragePath("RADIO", true, progress);
qDebug() << "Searching for SD card, found" << radioPath;
}
else {
radioPath = g.currentProfile().sdPath();
if (!QFile::exists(radioPath % "/RADIO"))
radioPath.clear();
}
// if radio.yml it is a converted radio
// if radio.bin unconverted pre 2.6
// if neither then unconverted eeprom or empty
if (!QFile::exists(radioPath % "/RADIO/radio.yml") && !QFile::exists(radioPath % "/RADIO/radio.bin"))
return readSettingsEeprom(filename, progress);
if (radioPath.isEmpty()) {
QMessageBox::critical(progress, CPN_STR_TTL_ERROR,
QCoreApplication::translate("RadioInterface", "Unable to find SD card!"));
return false;
}
RadioData radioData;
Storage inputStorage(radioPath);
+2 -5
View File
@@ -19,8 +19,7 @@
* GNU General Public License for more details.
*/
#ifndef _RADIOINTERFACE_H_
#define _RADIOINTERFACE_H_
#pragma once
#include <QString>
#include <QStringList>
@@ -42,8 +41,6 @@ QStringList getWriteFirmwareArgs(const QString &filename);
bool readFirmware(const QString &filename, ProgressWidget *progress);
bool writeFirmware(const QString &filename, ProgressWidget *progress);
bool readSettings(const QString &filename, ProgressWidget *progress);
bool readSettingsSDCard(const QString &filename, ProgressWidget *progress);
bool readSettingsSDCard(const QString &filename, ProgressWidget *progress, bool fromRadio = true);
bool readSettingsEeprom(const QString &filename, ProgressWidget *progress);
bool writeSettings(const QString &filename, ProgressWidget *progress);
#endif // _RADIOINTERFACE_H_
+7
View File
@@ -835,6 +835,13 @@ class AppData: public CompStoreObj
// Message box confirmations
PROPERTY(bool, confirmWriteModelsAndSettings, true)
// Toolbars visibility
PROPERTY(bool, fileToolbarVisible, true)
PROPERTY(bool, modelsToolbarVisible, true)
PROPERTY(bool, radioToolbarVisible, true)
PROPERTY(bool, settingsToolbarVisible, true)
PROPERTY(bool, toolsToolbarVisible, true)
bool firstUse;
QString upgradeFromVersion;
Binary file not shown.

After

Width:  |  Height:  |  Size: 569 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 789 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 715 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1013 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 794 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 812 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 812 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB