Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Navigator Widget (WIP) #1064

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

threaderic
Copy link

@threaderic threaderic commented Oct 9, 2022

Brief summary of the changes

add a new feature --> Navigator widget above the map

The aim of this new widget is to provide the user a summary of informations about the current task / next waypoint at the same place.

image
Brief description / features

Features:

Main frame for informations about current task

  • average task speed
  • Icon of previous Waypoint
  • Progress bar / time informations for the current task
    • time start
    • current time (current task duration)
    • estimated time end (estimated task duration)

Included Frame for Next Waypoint informations

  • Name
  • Distance
  • Altitude (Next altitude arrival): Absolute arrival altitude at the next waypoint in final glide
  • Next GR (required glide ration over ground to reach the best waypoint)
  • Arrow Icon: bearing direction to the next waypoint
  • North Ring Icon: bearing direction to the north
  • information added: current speed, current altitude
  • Icon of next Waypoint

functionnalities

  • manage different task types:
    • TaskType::ORDERED.
    • TaskType::GOTO
    • TaskType::ABORT
    • TaskType::NONE
    • switch to alternate when there is no task or when the task is suspended (Nav->Task Abort)
  • all texts scale according to size of the top widget. if the width of the bar is too small, information disappear accordingly.
  • gesture in Navigator Widget:
    • ⬅️ Left: previous Waypoint
    • ➡️ Right: next Waypoint
    • ➡️ ⬅️ Right, Left: Next Target
    • ⬅️ ➡️ Left, Right: Alternates
    • Double click: Standard menu
    • Quick click (400ms < press < 1000ms): Analysis task
    • Long click (1000ms < press < 3000ms): Task manager
  • units (small size) beside data as in infoboxes
    (km/h, mp/h, knots, m, ft, ...) according to user unit settings
  • data placement in regards to the widget size

configuration

  • save configuration in profile file
  • units in frames follow the user setup:
    Config->System->Setup->Units
    (european, american, australian, british units, ...)
  • inversed colors update automatically with user setup ; aka dark / light mode
    (inverse Infobox setting in the screen layout menu)
    Config->System->Look->Screen Layout->Inverse InfoBoxes
  • setup height of the navigator widget (default height set to 17%)
    Config->System->Gauges->FLARM, Other

image
Differents pages setting

image
all features

image
Differents hardware screens (eg. smartphone, e-reader), dark / light modes

image
Focus on Bearing Arrow / Ring North direction icons

image
Gestures

image
Pages setting

image
Navigator's height setting

Related issues and discussions

fixed (?) issues in XCSoar

  • update sizes of widgets when change pages : the top and bottom widgets sizes were not updated.
    That cause bad heights of both widgets.

see PageActions.cpp

TODO:

  • correct / improve code
  • add documentation / translation / ...

IDEAS for additional features:

  • configuration for data above name of next widget:
    • altitude:
      • WP AltR
      • WP AltA
      • WP AltD
  • calculated reachability for the previous and next waypoints in order to know if they are reachable (as on map surround these 2 waypoints by a green circle if reachable)

@threaderic threaderic changed the title Navigator widget Navigator Widget (WIP) Oct 9, 2022
src/Gauge/NavigatorWidget.cpp Outdated Show resolved Hide resolved
src/Gauge/NavigatorWidget.cpp Outdated Show resolved Hide resolved
src/Gauge/NavigatorWidget.cpp Outdated Show resolved Hide resolved
src/Gauge/NavigatorWidget.cpp Outdated Show resolved Hide resolved
src/Gauge/NavigatorWidget.cpp Outdated Show resolved Hide resolved
src/Renderer/NavigatorRenderer.cpp Outdated Show resolved Hide resolved
auto waypoint_direction = static_cast<int>(bearing_diff.AsDelta().Degrees());
auto waypoint_direction_s = std::to_string(waypoint_direction);

const auto caption1 = waypoint_distance_s + " km | " + waypoint_altitude_diff_s + " m | " + waypoint_GR_s + ":1";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please don't concatenate strings using std::string, it's uncontrollable bloat.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, amended as follows:

  TCHAR informations_next_waypoint_s[100]{}; 
  _stprintf(informations_next_waypoint_s, _T("%s | %s | %s | %s | %s"), 
            waypoint_distance_s, waypoint_altitude_diff_s, waypoint_GR_s, current_speed_s, waypoint_direction_s);

is it OK?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you guarantee that the buffer will not overflow?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, I made a mistake, I cannot guarantee that the buffer will not overflow.
my assumption: each char array have a size of 20 --> it means 19 characters x 5 + 4 x " | " (three characters) + +1 char '\0'
result: 108 --> overflow (!)

so I will change this with appropriate length --> in this case : informations_next_waypoint_s[110] ;

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could just use a variant of sprintf which truncates instead of overflowing the buffer. That way, you don't need an unrealistic worst-case stack allocation.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I found the StaticString<..> very useful and easier to read ; That's why I use it now for all strings in the method NavigatorRender::drawText() ; in the background, it is using the snprintf() function which was the one I would like to use as you suggested.

as instance:

StaticString<8> time_start_s;
const auto time_start = calculated.ordered_task_stats.start.time;
if (tp == TaskType::ORDERED && has_started && basic.time_available)
  time_start_s.Format("%s", FormatLocalTimeHHMM(time_start, utc_offset1).c_str());
else
  time_start_s.Format("%s", "--:--");

instead of:

TCHAR time_start_s[10];
const auto time_start = calculated.ordered_task_stats.start.time;
if (tp == TaskType::ORDERED && has_started && basic.time_available)
  snprintf(time_start_s, ARRAY_SIZE(time_start_s), _T("%s"),
           FormatLocalTimeHHMM(time_start, utc_offset1).c_str());
else
  snprintf(time_start_s, ARRAY_SIZE(time_start_s), _T("%s"), "--:--");

Is it OK for you ?

src/Renderer/NavigatorRenderer.cpp Outdated Show resolved Hide resolved
src/Renderer/NavigatorRenderer.hpp Outdated Show resolved Hide resolved
src/Renderer/NavigatorRenderer.hpp Outdated Show resolved Hide resolved

// e_WP_Name
TCHAR waypoint_name_s[40];
strncpy(waypoint_name_s, wp_current.name.c_str(), ARRAY_SIZE(waypoint_name_s)-1);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codacy is right - strncpy() is a hazard and it looks like you don't know what it does. Don't use it unless you know what you're doing, aware of all the pitfalls.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

StaticString<..> + Format() method used instead of strncpy()
see #1064 (comment)

@MaxKellermann
Copy link
Contributor

There hasn't been any progress in nearly half a year, and the PR branch is a big mess that is impossible to review. Let's reopen this when there is hope for some real progress.

@threaderic
Copy link
Author

OK, thanks for your feedback.
I was waiting for some support.
I will open a new PR within next weeks.

@MaxKellermann
Copy link
Contributor

No, don't open a new PR. This will only waste our time because we don't see previous review comments. If you want to continue this feature, do it in this PR.
If you were waiting for support, how did you expect this "support" to get to you? Did you ask somebody for support? How is anybody supposed to know?
Your last push 6 months ago was a big big mess that I refuse to review. If you want me to spend time on your code, convince me that it's worth my time - start by making your PR not a big mess.

@threaderic
Copy link
Author

Sorry, I don't want to waste your time. My aim is exactly the opposite : give you and the user community hours. I appreciate using XCSoar for free (!) for years.

In April, I published new features and solved some issues in this PR.
I closed/resolved issues as for instance Don't pass a bool by reference --> Reference deleted or Don't use floating point math --> All static_cast deleted.
I asked for new questions as for instance No magic numbers please - const BulkPixelPoint polyline_frame[] --> do you have preference for 1st or 2nd version ? or other idea ? or do not use the TimeStamp --> do you have any idea ?.
I wouldn't presume to put any temporary pressure on you: I thought that you or other developers will give me some feedback on these questions, to my code or/and to my posts in the XCSoar forum when you will have time.

If I could summarize my aim participating on XCSoar project, I would use this timeline and aims:
(0) giving time /ideas to the XCSoar community --> (1) improve my XCSoar /C++ /Git knowledge --> (2) learn XCSoar API --> (3) integrate the Navigator Widget with all functionalities I would like to see into XCSoar in a draft PR --> (4) make it work --> (5) correct all mistakes I made / improve readability for other developers (get the 'messy' word out of my PR ;) / improve the code quality/efficiency / put other ideas from users-developers into the PR --> (6) release my PR into XCSoar --> (7) document the XCSoar developer book and user book --> (8) help on other topics --> (9) fly with XCSoar with better understanding on how it works.

For the points (0) --> (4), I didn't want to disturb any developers and I knew that I will perhaps introduce messy/ not efficient/ or even worse stupid code. But I think, it's a good start to learn something (aka RTFM). So I took part of my free time to read developer book and XCSoar's code.
You already give me feedbacks and thanks to these helpful comments in the PR, I could start modifying my code (5).
From my side, I now finished points (3) and (4), I introduce all features and it's working. So, It's perhaps good time to ask for your help officially to continue correcting/improving my code (5) and to go to the direction of points (6), (7). I would appreciate that you give me your preferred way to work on this PR. My assumption was to share within the PR through comments as we've already begun. But If you prefer doing this in a different way, I am completely open-minded.
In order to improve the code quality and make it more readable/less messy, I would also appreciate that you give me clues to begin changing it in a good way. What is the biggest messy part of this PR you would like to see modified ?

@MaxKellermann
Copy link
Contributor

I didn't even look at any of your code recently - I just looked at the list of commits. There are 12 commits, 7 of which have a commit message says "update NavigatorWidget", and 2 of them say "add NavigatorWidget".
When I see something like that, I know already that looking at the code would be a futile waste of time. It is obvious that I would have to dig through many bad commits and then dig through fixup commits, but why would I spend my time on code that you already know is bad? Just don't resubmit bad code in the first place - fix it! And by fixing, I mean amending the known-bad commits instead of adding fixup commits. Each time I review your code, I want the bad stuff I already complained about gone, and not spend time on reading it again and again.

@DanD222
Copy link
Contributor

DanD222 commented Oct 10, 2023

@threaderic Have a look at “git squash” - you want the 12 commits squashed into one (or however many you’ve designed to be merged in the end). Then force-push to your branch to update the PR, and repeat as and when any changes are requested and addressed.

@threaderic
Copy link
Author

Thanks for your answers!
Actually, I didn't realize that the 'messy' word came from the PR itself, I was more focused on some 'not appropriate/ not confident' part of the code I provided. I had a look to other PR, to the squash functionality and understand the methodology as this:

  • one commit per PR to have a clean history when it is released. the aim is not to see the creation process (way of reaching the goal) of the PR/function but the how.
  • no fix it commits, the "fix it" history is saved through the PR discussion

I will squash all these commits to one and modify information into the summary of the PR (top information) to be aligned with all the functionalities in the upcoming days.

@threaderic
Copy link
Author

threaderic commented Nov 17, 2023

As written in the previous message, I modified the PR summary at the top to be aligned with all functionalities.

I also rebased (pick and squash) and push --force.
It worked but the pushed commit doesn't appear in the current PR.
Do you have any idea why?

@elgandoz
Copy link
Contributor

elgandoz commented Nov 29, 2023

@threaderic can you re-open this very same PR? I believe it doesn't sync with your branch since it's closed.
Also, I saw your fork branch is way behind the current master. To fix it:

# Fetch upstream master branch of the "original" repo
git fetch upstream master 
# Properly rebase your current branch on the latest master (you may have to fix conflicts)
git rebase upstream/master
# (Optional) Rewrite the last commit message
git commit --amend -m "A better commit message"
# Set the remote exactly as your local
git push --force

Once done you should be good, provide a good commit message.

@threaderic
Copy link
Author

@elgandoz thanks for your detailled answer !

@MaxKellermann could you please reopen the PR, I don't have the right to do this. As wrote by @elgandoz, I will rebase my current branch on the latest master.

@MaxKellermann
Copy link
Contributor

Can't reopen unless your branch has the same commit id as when it was closed, i.e. 79eef1c - this is a braindead GitHub limitation.

@threaderic
Copy link
Author

@MaxKellermann OK, I find a way to put the same commit id as when it was closed on the NavigationWidget branch. 79eef1c
Could you reopen the PR?

@MaxKellermann MaxKellermann reopened this Dec 6, 2023
@threaderic threaderic force-pushed the NavigationWidget branch 2 times, most recently from 56a2c5e to 8d89ba2 Compare December 11, 2023 19:11
@threaderic
Copy link
Author

threaderic commented Feb 3, 2024

last month, I successfully update the PR with the last changes of XCSoar main repo.
Thanks for you support!
The navigator widget is working pretty well but has minor issues and surely bad code practices.

@MaxKellerman, @DanD222 and @elgandoz: did you have time to check my code? Is it possible to have some helps? some thoughts to improve my code?

I would like to close earlier questions in the PR, in order to clean the code (erase lots of pointless commented code). could you answer these opened questions in the PR:

Here some of minor issues and code I would appreciate to improve:

  • in the file src/Renderer/NavigatorRenderer.cpp, each information text is provided/rendered in the same way: catch useful info in a staticString --> render information and render attached units.
    Perhaps it is possible to create a function "renderTextInfos(StaticString, Position, Unit, Font, TextSize ...)" in the NavigatorRenderer.cpp or elsewhere to provide a more readable/compact code. Do you have any ideas/preferences on doing this?

  • in NavigatorWidget.cpp, method NavigatorWindow::OnPaint(Canvas &canvas):
    @MaxKellermann, I'm not very confident how I catch the waypoints (current and before). It works well even if no turn point is provided in the task manager.
    For info, today, I update the code regarding to your modification made in the commit c972d2f "Engine/Task/Manager: eliminate method GetActiveTaskPoint()"

  • the Navigator widget don't directly update after modifying the dark mode options. I have to update it by changing in another page the page and going back to the page.

Copy link
Contributor

@MaxKellermann MaxKellermann left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I stopped reading the code after everything was repeating a hundred times.
If you want me to review the code, this PR shouldn't be "draft". "Draft" means you know it's not ready, and when even you believe it's not ready, there's no point for me to read it.

.gitignore Outdated
Comment on lines 39 to 42
# VSCodium
.cache/
.vscode/
compile_commands.json
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't belong here

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If OK for you, I will delete these lines at the end of the review. It helps me (a lot) not always doing cooking thinks (i.e copy paste delete).
Perhaps do you have any idea doing this in an other way?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This shouldn't be checked in.
And if it should be a separate commit explaining why you want this.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually use VSCodium / VSCode.
The folders + file compile_commands.json are facilities/tools.

@lordfolken: if I understood well, you want me to create a new PR + commit for this modification?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Those .gitignore entries are specific to your toolchain, so there’s no reason to include them in the XCSoar codebase
(“ This shouldn't be checked in.” - this means they shouldn’t have been added to git on your machine in the first place)

“ And if it should… be a separate commit” - this means that in cases you think changes similar to this are needed, this change should be in its own separate commit, and not within an “Add Navigator Widget” commit.

To answer your question, I’m pretty sure lordfolken is

  • asking you to not include your changes to .gitignore in pull requests to XCSoar
  • giving you hints on how to make changes that are functionally-specific (they should be in their own commit)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually use VSCodium / VSCode. The folders + file compile_commands.json are facilities/tools.

Unfortunately that software really doesn't help in using git. It just marks all the files modified and just adds it to one commit.
Select the files individually and commit what belongs together.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I finally find a solution. I keep the .gitignore locally modified and don't push it anymore.
I will create a PR to add this .gitignore modification separately in one specific commit.

src/Dialogs/Settings/Panels/GaugesConfigPanel.cpp Outdated Show resolved Hide resolved
@@ -122,8 +124,20 @@ GaugesConfigPanel::Prepare(ContainerWindow &parent,
AddBoolean(_("Vario bar"),
_("If set to ON the vario bar will be shown"),
map_settings.vario_bar_enabled);

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you suggest removing this line and why is this change hidden in this unrelated commit?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggested removing this line to be in accordance with all lines declarations above, i.e. one "block of lines" for each parameter set as expert row:

add...(_("Something"),
_("Description Something"),
...);
SetExpertRow(Something);

I keep this logic for the 2 additional parameters added for the navigator widget settings (only appear in expert mode).

AddInteger(
_("Navigator Height"),
_("Select the height of the navigator topwidget (percentage of the main window).\n\n"
"This widget is set in the System Menu --> Look --> Pages --> Top Area\n\n"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No ASCII art in messages, please. And no double "\n\n", attempting to layout the text.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ASCII art replaced ('/' instead of "-->") and all double '\n' removed:
"Select the height of the navigator topwidget (percentage of the main window).\n"
"This widget is set under the settings menu: System / Look / Pages / Top Area\n"

OK for you?

_("Navigator Height"),
_("Select the height of the navigator topwidget (percentage of the main window).\n\n"
"This widget is set in the System Menu --> Look --> Pages --> Top Area\n\n"
"Warning: a big size could lead to a bad presentation of the datas.\n"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is "datas"?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"datas" is not clear enough...

I changed it to:
"Warning: an unsuitable height of the navigator widget could lead to a bad presentation of its included flight informations (e.g. name of waypoint, times, ...).\n"

src/PageActions.cpp Outdated Show resolved Hide resolved
src/Profile/UIProfile.cpp Outdated Show resolved Hide resolved
src/Renderer/NavigatorRenderer.cpp Outdated Show resolved Hide resolved
src/Renderer/NavigatorRenderer.cpp Outdated Show resolved Hide resolved
Comment on lines +122 to +111
// TCHAR time_elapsed_s[10];
// const auto time_elapsed_s_tmp =
// FormatLocalTimeHHMM(time_elapsed, utc_offset1).c_str();
// if (has_started)
// snprintf(time_elapsed_s, ARRAY_SIZE(time_elapsed_s), _T("%s"),
// time_elapsed_s_tmp);
// else
// snprintf(time_elapsed_s, ARRAY_SIZE(time_elapsed_s), _T("%s"), "--:--");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

??????????????

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That comments comes from this question
if OK, I could delete all related comments (lots of commented blocks with use of snprintf)

@threaderic threaderic marked this pull request as ready for review March 22, 2024 17:20
@threaderic threaderic requested a review from a team as a code owner March 22, 2024 17:20
@lordfolken
Copy link
Contributor

Can you please resolve the codacy issues, and also resolve any conversations (hitting the button) you think you resolved.

@lordfolken
Copy link
Contributor

lordfolken commented Mar 22, 2024

In general this change is too huge for one commit. Please build building blocks that compile and build step by step. Otherwise its very hard to review or merge or comment. Lets divide and conquer.

@lordfolken
Copy link
Contributor

As a first thing we should get the window managment right.
This generic code and should be separate commit.

@threaderic
Copy link
Author

threaderic commented Mar 23, 2024

@lordfolken: thanks for your comments. I checked and closed all resolved conversations.
For some other comments, I'm just waiting a confirmation before closing them.
for codacy issues, it will take more work to get them away... and probably helps

in your comment, you wrote: In general this change is too huge for one commit.
I actually work with one commit (rebase/squash) since november 2023 following the advices of the team members (see the summary in this comment). I find this way very useful and more readable (the text in the commit is very clear) compared to the simplest method "historic commiting" I was using. The modifications are also straight forward.

The divide & conquer method is another method but I'm not sure understanding it very well.
At the end (just before merging the PR) the whole code in the PR will stay in one commit?
According to your last comment, you want now to work on the first part (block) and keep other code away by commenting them (or stashing them)? and step by step adding them (in the same commit)?

For information, the whole code in this PR is building and working under my local ubuntu 22.04 since the beginning.
I'm using a build variant not restrictive at all (!):

make -j12 TARGET=UNIX USE_CCACHE=y SANITIZE=n DEBUG=n WERROR=n

I checked why it was not passing the build under the github workflow processes by using the variants build-ubuntu and build-sanitizer (under my local ubuntu 22.04):

# build-sanitizer
make -j$(nproc) TARGET=${{env.TARGET }} DEBUG=${{ env.DEBUG }} VFB=y SANITIZE=y DEBUG_GLIBCXX=y USE_CCACHE=y V=2 everything check
make -j$(nproc) TARGET=UNIX DEBUG=y VFB=y SANITIZE=y DEBUG_GLIBCXX=y USE_CCACHE=y V=2 everything check

# after adding `$(SRC)/Gauge/NavigatorSettings.cpp \`` in test.mk line 1693 and line 2121, 
# the build-sanitizer (above make command) process reach the end and the tests passed successfully locally (!)

# build-ubuntu
make -j$(nproc) TARGET=${{env.TARGET }} DEBUG=${{ env.DEBUG }} USE_CCACHE=y V=2 everything check
make -j$(nproc) TARGET=UNIX DEBUG=y USE_CCACHE=y V=2 everything check

# the modifications done for build-sanitizer allows the build-ubuntu (above make command) process 
# to reach the end and the tests also passed successfully locally (!)

The modifications in test.mk "$(SRC)/Gauge/NavigatorSettings.cpp " added in lines 1693 and 2121 allow to pass successfully locally the 2 build processes (build-ubuntu and build-sanitizer) and their related tests.
So these should also now reach the end and the tests should also pass successfully in GitHub workflows.

FEATURES:
+ MAIN FRAME FOR INFORMATIONS ABOUT CURRENT TASK
- average task speed
- Icon of previous Waypoint
- Progress bar / time informations for the current task
	- time start
	- current time (current task duration)
	- estimated time end (estimated task duration)

+ INCLUDED FRAME FOR NEXT WAYPOINT INFORMATIONS
- Name
- Distance
- Altitude (Next altitude arrival): Absolute arrival altitude at the next waypoint in final glide
- Next GR (required glide ration over ground to reach the best waypoint)
- Arrow Icon: bearing direction to the next waypoint
- North Ring Icon: bearing direction to the north
- information added:  current speed, current altitude
- Icon of next Waypoint

+ FUNCTIONNALITIES
- manage different task types:
	- TaskType::ORDERED.
	- TaskType::GOTO
	- TaskType::ABORT
	- TaskType::NONE
	- switch to alternate when there is no task or when the task is suspended (Nav->Task Abort)
- all texts scale according to size of the top widget. if the width of the bar is too small, information disappear accordingly.
- gesture in Navigator Widget:
     -  <--  Left: previous Waypoint
     -  -->  Right: next Waypoint
     -  -->  <--  Right, Left: Next Target
     -  <--  -->  Left, Right: Alternates
     - Double click: Standard menu
     - Quick click (400ms < press < 1000ms): Analysis task
     - Long click (1000ms < press < 3000ms): Task manager
- units (small size) beside data as in infoboxes
(km/h, mp/h, knots, m, ft, ...) according to user unit settings
- data placement in regards to the widget size

+ CONFIGURATION
- save configuration in profile file
- units in frames follow the user setup:
Config->System->Setup->Units
(european, american, australian, british units, ...)
- inversed colors update automatically with user setup ; aka dark / light mode
(inverse Infobox setting in the screen layout menu)
Config->System->Look->Screen Layout->Inverse InfoBoxes
- setup height of the navigator widget (default height set to 17%)
Config->System->Gauges->FLARM, Other
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants