Latest Posts

Topic: Developer

Nordfriese
Avatar
Joined: 2017-01-17, 18:07
Posts: 2043
OS: Debian Testing
Version: Latest master
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: 2024-11-14, 20:24

Careful – SoundOptions is shared between both the main menu Options menu (src/ui_fsmenu/options.h) and the in-game GameOptionsSoundMenu. So any changes made there will appear in the main menu Options as well.

So in-game-specific sound functionality needs to be added to the GameOptionsSoundMenu, not the SoundOptions.

Resource usage in terms of panel count is not much of a concern, any non-trivial UI layout can easily consist of a lot of deeply nested boxes.


Top Quote
andersand.net
Avatar
Topic Opener
Joined: 2024-11-12, 19:48
Posts: 11
OS: Linux
Version: Latest main branch
Ranking
Pry about Widelands
Location: Norway
Posted at: 2024-11-14, 20:27

Nordfriese wrote:

Careful – SoundOptions is shared between both the main menu Options menu (src/ui_fsmenu/options.h) and the in-game GameOptionsSoundMenu. So any changes made there will appear in the main menu Options as well.

So in-game-specific sound functionality needs to be added to the GameOptionsSoundMenu, not the SoundOptions.

Resource usage in terms of panel count is not much of a concern, any non-trivial UI layout can easily consist of a lot of deeply nested boxes.

Good to know. I'll go for option 2 then face-smile.png


Top Quote
andersand.net
Avatar
Topic Opener
Joined: 2024-11-12, 19:48
Posts: 11
OS: Linux
Version: Latest main branch
Ranking
Pry about Widelands
Location: Norway
Posted at: Yesterday 23:06

So, I've made a little progress, nothing visible yet, but the panels are there with some dummy controls for tracks in the playlist. I tried to reuse implementation practices from SoundOptions. This compiles and runs without errors, but the problem is now I don't understand why those dummy controls are not showing up in the sound options window below the sound options panel (which do show up)?

Here's the work in progress code:
https://github.com/andersand/widelands/commit/1c5a51bca2046d23262ea60b19c29ba5404a73a1

I haven't figured out how to debug the code without resorting to writing to the log yet. I assume it would be helpful to be able to set breakpoints to figure things out faster. Any advice how to do that could be helpful face-smile.png

PS. Note that I plan to revert -Werror in CMakeLists.txt before I make a PR. I just removed it temporarily to be able to compile stubbed code.


Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 18:07
Posts: 2043
OS: Debian Testing
Version: Latest master
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: Today 08:02

At a quick glance it seems you did not add() the enable_ checkbox to the MusicTrackControl, so the box does not know to layout it and is effectively empty. Also you'll want to use the UI::Box::Resizing::kFullSize argument to add(). This should probably also make max_w and set_checkbox_width superfluous.

For debugging I recommend gdb:

gdb ./widelands

b filename.cc:123  # To set a breakpoint in a line
b SomeFunction     # To set a breakpoint in a function
run  # Start the program

...

# Breakpoint hit
p VAR # (or "print") Print value of variable VAR. This can also be used to evaluate an expression and invoke functions and *change* variables, e.g. "print g_verbose=true" or "print do_something()"
n     # (or "next") Step to the next line
step  # Step into the function at the next line
bt    # Backtrace of the current call stack
c     # (or "continue") Continue execution

d  # Delete breakpoints
q  # (or "quit") Quit GDB
Edited: Today 08:06

Top Quote
andersand.net
Avatar
Topic Opener
Joined: 2024-11-12, 19:48
Posts: 11
OS: Linux
Version: Latest main branch
Ranking
Pry about Widelands
Location: Norway
Posted at: Today 09:06

Great, debugging works like a charm face-smile.png

It makes sense to actually add the checkbox control yeah, unfortunately adding it was not enough to make it visible. I tried adding it with add(&enable_, UI::Box::Resizing::kFullSize, UI::Align::kRight); but also without any parameters and with UI::Box::Resizing::kAlign.
I also edited GameOptionsSoundMenu constructor so UI::Box::Resizing::kFullSize is passed to add() for both sound_options_ and music_player_.
It's as if the music player panel is empty or not rendered for some reason.

Edit: My mistake, I removed the code to add(control) when removing the max_w and checkbox_width. It works now, with the changes you proposed. Thanks!

Edited: Today 09:46

Top Quote