The previous implementation used a "*" filter when a file of any other
format than srzip got imported. This happened to be a duplicate of
"All files", and ignored the list of filename extensions provided by
the input formats.
This change does respect the input format's file extensions, and copes
with the lack of such a list (raw binary), as well as lists that have
one (most formats), or multiple extensions (raw analog).
This fixes bug #1039.
Another byproduct of the change is that extensions and their decoration
(separators, parentheses) move outside of tr() calls. These technical
details shall not concern translators, and translations for human
languages shall not break the filter mechanism.
This implementation might be "too complex, computationally expensive".
But it works, and fixes an issue, and the code path executes seldom and
waits for user interaction anyway. Cost reduction can get applied later.
If a user removes the main toolbar then there's no way to get it
back. We don't want that.
If a user removes a dock window's contents he can get it back
by using the same context menu but it's a useless feature for us
and potentially very confusing, so we disable this, too.
Only use QIcon::fromTheme() for icons which are included in the
freedesktop.org icon naming specification:
https://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
For all others there will be no icon to use from the theme and we always
want our own icons to be used unconditionally in those cases anyway.
This patch was generated using clang-tidy:
clang-tidy -checks="-*,misc-unused-using-decls" -fix
(with manual add-on fixes such as dropping unused headers as well,
and commenting some false-positive cases)
Use "using std::foo" to make the actual code itself a lot more readable.
There are some exceptions where we usually cannot do this, e.g. std::thread
often conflicts with "thread" from Qt or Boost.
Before, QMetaObject::connectSlotsByName(this) was used to connect
the signals to the slots automagically. This is no longer feasible
for the MainBar as there are slots that can't be auto-assigned and
the MainWindow doesn't have any signals at the moment.
This includes letting sessions restore their internal state on
their own and that there are unique names associated with each
session that the GUI can use when there is no data.
Handling multiple sessions requires that every session can be
controlled individually. This means that either
a) there could be one toolbar that adjusts dynamically to the
session whose view currently has focus
or
b) every session has its own toolbar.
I opted for b) because it's more intuitive and more straightforward
to implement. So now every session has a main view (the first one
created) and a main bar that sits in the same dock widget.
It can happen that devices can be selected but not used
(permissions problems, connection issues, driver issues, etc.),
so in those cases we want to fail gracefully instead of
segfaulting.
The reason for the segfault is the device selector button
isn't reset in case the device couldn't be opened, causing
the rest of the application to try and work with a device
instance that is actually invalid.
Resetting the device selector when the device failed to
open not only fixes this but also makes the UI more
consistent with the internal state.
The formatting depending on the distance between two timestamps is
reintroduced with the responding function residing in the 'Ruler' class
(the prime user of that function).
Fixes a rounding bug for the least significant digit in the
'format_time_minutes()' function.
The 'Cursor' and 'CursorPair' classes now use the same precision when
formatting timestamps as the rest of the program.
The reason that the sampling rate button disappears after a
sampling rate was selected is that there's a flaw in the
chain of events:
on_sample_rate_changed() which calls
commit_sample_rate() which sets updating_sample_rate_ and calls
on_config_changed() which calls
update_sample_rate_selector() which...
...clears the list and exits because updating_sample_rate_ is set.