- Adds a Popup at startup about Plugins that failed to load.
- Adds entry about broken Plugins in the Settings - Plugins tab.
- Adds corresponding translation entries.
- Fixes#2088 and #2089.
- Adds usage of ``row=`` for ``.grid()`` for all config entries in included plugins.
- Changes all config pages to start at row 0.
- Starts introducing a standard for config panel layouts.
* I can't even get this code to be problematic, with a folder containing
unicode heart characters, on 64-bit Python 3.7.9 (Release/4.1.6 adjusted to
not set UTF-8 locale), let alone on 64-bit Python 3.11 and this branch.
So, just always use the tkinter dialog. Bye-bye ctypes code which I just
couldn't get to work under 64-bit Python.
* I *think* the issue with the ctypes code was that under 32-bit an 'int' and
a pointer are the same size.
'Raw' (not declaring types beforehand) the `SHBrowseForFolderW()` function
causes ctypes to consider it returns an int. This works on 32-bit.
But on 64-bit that int is still 32-bits, but pointers are 64-bit, so ctypes
ends up coercing/casting/truncating the returned pointer into an int,
which than can't even be cast back to a pointer.
Meanwhile, attempting to properly define the signature of the function
has only lead to it crashing on invocation, despite being passed the same
BROWSEINFOW structure, defined in the same manner. This might be a matter
of a type within it needing adjusting, but I was following the docs there.
1. `SHGetPathFromIDListW` needing fixing, which was achieved, but...
2. ... then `SHBrowseForFolderW()` as-was returned `int` instead of a pointer
to the correct structure.
Trying to fix 2 has proven intractable:
a. Trying to cast the `int` return just results in `exception: access violation
reading <address>`.
b. Trying to define `SHBrowseForFolderW` properly, so it returns the correct
type results in a *writing* access violation when called, despite passing
the exact same data in as for the 'raw' call version.
So, this commit is a record, and I'm next going to try switching to
`IFileDialog` as recommended by the docs for `SHBrowseForFolderW` ('For
Windows Vista or later').
This has been relying on knowledge of the magic numbers for far too long.
As part of this, remove all the obfuscating "oh, default is 0, and we want
that or any other theme, so treat this like a boolean" nonsense.
Also, stop assuming that "> 1" is a synonym for "transparent theme". Just
Do The Equality Check.
This flag controls whether commodity, outfitting or shipyard schema messages
are sent. Thus 'MKT' ('market') is misleading. Rename it so the intent when
used is clear.
* This was perhaps originally meant for what the UI option says, i.e. "send
system and scan data", but is actually being used for anything that is
**NOT** 'station data' (even though *that* option has 'MKT' it includes
outfitting and shipyard as well).
So, just name this more sanely such that code using it is more obvious as
to the actual intent.
The sense of this `output` flag has been inverted (always?) for a long time.
1. I have the option "Delay sending until docked" showing as *off* in the UI.
2. My config.output value is `100000000001`.
3. The value of this flag is `4096`, which means 12th bit (starting from 1, not
zero).
4. So I have the bit set, but the option visibly off.
So, rename this both to be more pertinent to its use *and* to be correct as to
what `True` for it means.
1. It's not actually hiding the task bar icon currently.
2. As this touched prefs.py I've done a flake8 and mypy cleanup pass
too. But some of that will want reviewing later as I noqa'd some
things.
The whole LANG comment thing works best with a single `_(...)` on any
given line, so splitting some of these `thing if X else other` into full
conditionals.
The code around the dropdown menu in prefs for shipyard providers was a
bit too clever for its own good.
This brings it in line with the behaviour of the other two