Skip to content

fix: dark mode, daily tips, filament grouping names, 3D view refresh, syslog wall broadcast#10821

Closed
BenJule wants to merge 15 commits into
bambulab:masterfrom
BenJule:feat/dark-mode-fixes-disable-tips
Closed

fix: dark mode, daily tips, filament grouping names, 3D view refresh, syslog wall broadcast#10821
BenJule wants to merge 15 commits into
bambulab:masterfrom
BenJule:feat/dark-mode-fixes-disable-tips

Conversation

@BenJule
Copy link
Copy Markdown

@BenJule BenJule commented May 20, 2026

Summary

Test plan

  • Dark mode: open Preview → filament grouping popup background should be dark gray
  • Uncheck "Show daily tips after slicing" → slice → no tips panel
  • Slice, change color scheme to "Line Type", restart → "Line Type" still selected
  • Open filament color picker → first swatch shows checkered transparent pattern
  • Calibration tab, type 'z' in filament name → 'z' appears, no zoom triggered
  • Dark mode: "Create Filament Preset" → all labels readable
  • Linux: connect printer, use Device tab → no wall messages in other terminals
  • Slice with "Support for ABS" + regular ABS → grouping dialog shows "Sup.ABS" and "ABS" distinctly
  • Open a .3mf, print it, open another .3mf → Prepare view immediately shows new model

Closes #10530
Closes #3142
Closes #7131
Closes #10574
Closes #10684
Closes #8949
Closes #10820
Closes #10773
Closes #10787

BenJule added 14 commits May 20, 2026 16:05
… locale files

The fila_manager web page was hardcoded in Chinese (lang="zh") with no
internationalization support. This commit adds a lightweight i18n system:

- Add locales/en.json and locales/zh_CN.json with all UI strings
- Add t(key) / tf(key, n) translation helpers loaded at startup
- Apply translations via data-i18n / data-i18n-placeholder attributes in HTML
- Replace all hardcoded Chinese strings in index.js with t() calls
- Language is resolved from the ?lang= URL parameter passed by C++
… strings

Two printer status strings shown during calibration used the misspelling
"percision" instead of "precision". Also fix lang="zh-CN" in
NozzleListTable.html (the table content is set by C++ at runtime).

All .po and .pot msgid entries updated to match the corrected source strings.
- 'Problem occured' → 'Problem occurred' (MediaPlayCtrl.cpp)
- 'When enable spiral vase mode' → 'When enabling ...' (SelectMachine.cpp, SyncAmsInfoDialog.cpp)
- 'connectors is out of object' → 'connectors are out of object' (GLGizmoAdvancedCut.cpp)
- 'Error:Detecting ...' → 'Error: Detecting ...' with spacing fixes (GLGizmoText.cpp)

Update all corresponding msgid entries in BambuStudio.pot and all 18 .po locale files.
Fix missing spaces after 'Warning:', 'Error:', and 'Tip:' prefixes,
missing spaces after sentence-ending periods and commas, and several
grammar issues in strings that appear to originate from machine
translation:

- GLGizmoText.cpp: fix 9 Warning: strings (space + grammar)
  - 'Warning:create text fail.' → 'Warning: Text creation failed.'
  - 'Warning:text normal is error.' → 'Warning: Text normal has an error.'
  - 'Warning:Due to font upgrades,previous...' → proper spacing
  - 'reedit it will ok' → 'reedit it to fix the issue'
  - 'dragging text' → 'drag the text' (imperative form)
- GLGizmoMeasure.cpp: fix 3 Warning: strings + 'two different mesh' → 'meshes'
- GLGizmoSVG.cpp: fix 'Tip:If...' + missing comma + 'svg file' → 'SVG file'
- PlaterWorker.hpp: 'error occured' → 'error occurred'
- DeviceManager.cpp: missing spaces after period/comma + '(PLA...)' spacing
- BindDialog.cpp: 'device.Before', 'termsand', 'Use(collectively)' spacing
- ConfigManipulation.cpp: missing spaces after comma and period
- AMSSetting.cpp: missing space after '1 minute.'
- Preferences.cpp: 'tab.If change value' → 'tab. If you change this value'

Update all msgid entries in BambuStudio.pot and all 18 .po locale files.
- AuxiliaryDialog.cpp: 'Auxiliaryies' → 'Auxiliaries' (dialog title)
- FanControl.cpp: 'print qulity' → 'print quality'
- GLGizmoFlatten.cpp: 'too small,The' → 'too small. The' (comma → period)
- Monitor.cpp: 'Assistant(HMS)' → 'Assistant (HMS)' (space before parenthesis)
- AMSSetting.cpp: 'during  printing' → 'during printing' (double space)
- AMSDryControl.cpp + uiAmsHumidityPopup.cpp: 'Left Time' → 'Remaining Time'
- Plater.cpp: 'attrited' → 'worn' (non-standard word)

Update all corresponding msgid entries in BambuStudio.pot and all 18 .po
locale files.
On macOS, BambuStudio already auto-follows the system dark/light theme
via EVT_SYS_COLOUR_CHANGED. On Windows this handler was guarded with
#ifndef __WINDOWS__, so theme changes were silently ignored.

Changes:
- GUI_Utils.hpp: EVT_SYS_COLOUR_CHANGED now fires on Windows when
  'dark_mode_follow_system' is enabled; calls update_dark_config() and
  on_sys_color_changed() to refresh the UI
- GUI_App.cpp dark_mode(): if follow-system is enabled, query
  check_dark_mode() (system appearance) instead of the stored config;
  on startup, sync dark_color_mode config from system if follow-system
  is enabled
- MainFrame.cpp on_sys_color_changed(): call force_colors_update() and
  update_ui_from_settings() on all platforms (previously skipped on
  Windows), so a system-triggered theme change gets a full UI refresh
- Preferences.hpp/.cpp: add 'Follow system theme' checkbox below the
  manual 'Enable dark mode' toggle; when checked the manual toggle is
  disabled and the current system state is applied immediately

Resolves feature request bambulab#10800.
- F1–F4 switch between the four main tabs (3D Editor, Preview, Monitor,
  Project); F5 triggers reslice when a model is loaded
- ColorPickerPopup gains a hex input field (#RRGGBB) below the custom
  color swatch; typing a valid 6-digit hex and pressing Enter applies
  the color and fires EVT_SELECTED_COLOR; clicking any swatch updates
  the hex field to match the selected color
- update_title() now sets the topbar label to "Bambu Studio <version>"
  on Windows/Linux so the version is always visible without opening
  the About dialog (closes bambulab#10642)
- Preferences > Online Models gains a "Open full MakerWorld site"
  checkbox (config key makerworld_use_full_site); when enabled the
  Online Models tab loads the unrestricted makerworld.com pages
  instead of the /studio/webview simplified view, restoring access to
  comments, account management, and other features (closes bambulab#10801)
- update_title() now shows the open project filename and a leading '*'
  when there are unsaved changes, keeping the topbar in sync via the
  existing wxEVT_IDLE handler; title reverts to the app name + version
  when no project is open (closes bambulab#9987, closes bambulab#9989)
- Cloud connection failure dialog now uses RichMessageDialog with a
  "Don't show this warning again" checkbox; checking it sets config key
  suppress_cloud_warnings=1 so the dialog is permanently suppressed
  for offline/LAN-only workflows (closes bambulab#10589)
- Preferences > General Settings: "Auto-save project every 5 minutes"
  checkbox (config key autosave_enabled); a wxTimer in MainFrame fires
  every 5 min and calls save_project() silently when the project has a
  filename, is dirty, and the option is enabled (closes bambulab#10334)
- Alt+Arrow moves selected objects by 0.1 mm; Alt+Shift+Arrow by
  0.01 mm; existing Shift+Arrow (1 mm) and plain Arrow (10 mm) are
  unchanged; added to the keyboard shortcuts dialog (closes bambulab#10194)
- LayerRangeEditor now explicitly sets background/foreground to the
  app's dark-mode palette colours after UpdateDarkUI(), fixing the
  unreadable contrast in the Height Range Modifier field on Linux dark
  mode (closes bambulab#10685)
Adds a "Pause in Xh Ym" label below the layer counter in the printing
task panel whenever a scheduled PausePrint exists ahead of the current
layer. The countdown is derived from the locally sliced gcode (layer
Z-heights + custom gcode entries) and the printer's reported remaining
time, updated on every status tick.

Closes bambulab#10632
Closes bambulab#10562
FilamentGroupPopup (bambulab#10530):
- Replace hardcoded #FFFFFF background with dark-mode-aware bg_color()
  helper so the popup renders correctly in dark mode (#2D2D31 bg)
- Replace hardcoded LabelEnableColor with label_clr() that returns the
  appropriate text color for the current theme
- Fix SmartFilament section border and background to use dark-mode colors

Daily Tips preference (bambulab#3142):
- Add "Show daily tips after slicing" checkbox to the Preferences →
  Home page section (config key: show_daily_tips)
- Guard DailyTipsWindow::open() so it is a no-op when tips are disabled
- Guard the separator line and daily tips child window in the slicing
  notification renderer; collapse the notification to progress-only
  height when tips are disabled

Closes bambulab#10530
Closes bambulab#3142
…lds, dark mode in filament dialog

GCode view type persistence (bambulab#7131):
- Remove the enable_record_gcodeviewer_option_item guard so the last
  selected color scheme (Line Type, Filament, Feedrate…) is always
  saved to gcodeviewer_option_item and restored on next startup.

Transparent/clear color in filament picker (bambulab#10574):
- Prepend a fully-transparent entry (alpha=0) to the preset color list
  in ColorPickerPopup so users with clear/transparent filament can
  select it. ColorPicker::doRender already renders alpha=0 as the
  checkered transparent bitmap. set_def_colour already clears the hex
  field for alpha=0, so no additional handling is needed.

Z key swallowed by canvas shortcut in text inputs (bambulab#10684):
- Extend is_text_entry_focused() to also check direct children of the
  focused window. On Windows, clicking on a custom TextInput panel
  sometimes leaves focus on the outer StaticBox container rather than
  the inner wxTextCtrl, so the upward parent walk missed it. The child
  check catches that case and prevents the "zoom to fit" shortcut from
  consuming the 'z' keystroke while typing.

Dark mode label color in CreateFilamentPresetDialog (bambulab#8949):
- Replace all SetLabelColor(*wxBLACK) calls with
  SetLabelColor(wxGetApp().get_label_clr_default()), which returns the
  correct label color for the active theme. Previously, black labels
  were invisible against the dark background that UpdateDlgDarkUI
  applied to the dialog background but not to the custom StateColor
  label property.

Closes bambulab#7131
Closes bambulab#10574
Closes bambulab#10684
Closes bambulab#8949
…dcasts

The closed-source bambu_networking plugin calls syslog() at LOG_EMERG
priority for non-critical errors such as "SO register failed".
systemd-journald broadcasts all PRIORITY=0 messages as wall messages
to every logged-in terminal, which is highly disruptive.

Since the message origin is in a closed-source binary that cannot be
patched, set the process-wide syslog mask via setlogmask() at startup
to suppress LOG_EMERG (0) and LOG_ALERT (1).  All other syslog
priorities (LOG_CRIT and below) remain unaffected.

Fixes bambulab#10820
@BenJule BenJule changed the title fix: filament group popup dark mode + disable daily tips preference fix: dark mode, daily tips, gcode persistence, transparent color, syslog wall broadcast May 20, 2026
…#10773), 3D view stale after project reload (bambulab#10787)

Filament grouping (bambulab#10773): FilamentMapDialog was reading raw
filament_type config values ("ABS") instead of the display name that
get_filament_type() produces. Support filaments were therefore
indistinguishable from their base material in the assignment UI.
Replace the direct option access with a loop over get_filament_type()
so "Support for ABS" renders as "Sup.ABS".

Also fix get_filament_type() itself: the branch that handles a known
filament_id handled PLA-S and PA-S but missed ABS-S, causing
"Sup.ABS" to fall through to the raw "ABS" return value when a
filament_id is present.

Prepare view refresh (bambulab#10787): After loading a second .3mf file into
an already-open session the Prepare 3D canvas could still show the
old model. load_project() calls load_files() which internally calls
update() -> reload_scene(), but the canvas may not repaint if it was
not visible or was in a dirty state at that moment. Add an explicit
set_as_dirty() + request_extra_frame() on view3D after select_tab()
to guarantee a fresh render in all code paths.

Closes bambulab#10773
Closes bambulab#10787
@BenJule BenJule changed the title fix: dark mode, daily tips, gcode persistence, transparent color, syslog wall broadcast fix: dark mode, daily tips, filament grouping names, 3D view refresh, syslog wall broadcast May 20, 2026
@BenJule
Copy link
Copy Markdown
Author

BenJule commented May 20, 2026

Closing in favor of individual PRs per issue — easier to review and merge independently:

@BenJule BenJule closed this May 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment