OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::ShortcutCaptureDialog Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/KBShortcutsDialog.hpp>

Inheritance diagram for Slic3r::GUI::ShortcutCaptureDialog:
Collaboration diagram for Slic3r::GUI::ShortcutCaptureDialog:

Public Member Functions

 ShortcutCaptureDialog (wxWindow *parent, Shortcut shortcut)
const KeyChord & chord () const
const std::vector< Shortcut > & conflicts () const
void EndModal (int retCode) override
float scale_factor () const
float prev_scale_factor () const
void set_scale_factor (float v)
void set_prev_scale_factor (float v)
void set_em_unit (int v)
bool force_rescale () const
int em_unit () const
const wxFont & normal_font () const
void enable_force_rescale ()
int ShowModal ()

Protected Member Functions

void on_dpi_changed (const wxRect &suggested_rect) override
virtual void on_sys_color_changed ()

Private Member Functions

void on_key (wxKeyEvent &evt)
void on_char (wxKeyEvent &evt)
void record (const KeyChord &chord)
void update_em_unit ()
bool is_new_scale_factor () const
void rescale (const wxRect &suggested_rect)

Private Attributes

Shortcut m_shortcut
KeyChord m_chord
std::vector< Shortcut > m_conflicts
wxStaticText * m_chord_label
wxString m_hint
wxString m_rejection
Label * m_status
wxColour m_status_colour
Button * m_ok
float m_scale_factor
int m_em_unit
wxFont m_normal_font
float m_prev_scale_factor
bool m_can_rescale
bool m_force_rescale
int m_new_font_point_size

Detailed Description

Constructor & Destructor Documentation

◆ ShortcutCaptureDialog()

Slic3r::GUI::ShortcutCaptureDialog::ShortcutCaptureDialog ( wxWindow * parent,
Shortcut shortcut )
435 : DPIDialog(parent, wxID_ANY, _(shortcut_info(shortcut).name), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE)
436 , m_shortcut(shortcut)
437{
438 SetBackgroundColour(*wxWHITE);
439 wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
440
441 // A Global shortcut runs before the focused control gets the key, so its hint names the keys it can use.
442 const bool global = (shortcut_info(shortcut).contexts & context_bit(ShortcutContext::Global)) != 0;
443 const wxString advice = global_key_advice();
444 const wxString rule = _L("A key that types a character cannot be a global shortcut.");
445 m_hint = global ? advice : _L("Esc cancels, Enter confirms.");
446 m_rejection = rule + "\n" + advice;
447
448 // Wide enough for each sentence on a line of its own where the translation allows, within limits.
449 int width = FromDIP(450);
450 for (const wxString& sentence : { rule, advice }) {
451 int extent = 0;
452 GetTextExtent(sentence, &extent, nullptr, nullptr, nullptr, &wxGetApp().normal_font());
453 width = std::max(width, extent);
454 }
455 width = std::min(width, FromDIP(550));
456
457 auto prompt = new Label(this, wxGetApp().normal_font(), wxString::Format(_L("Press the new shortcut for\n\"%s\""), _(shortcut_info(shortcut).name)), LB_AUTO_WRAP);
458 prompt->SetMinSize(wxSize(width, -1));
459 sizer->Add(prompt, 0, wxALL, FromDIP(20));
460
461 // Keyboard focus stays on this box so the buttons never receive the key presses.
462 const wxColour box_colour = StateColor::darkModeColorFor(*wxWHITE);
463 StaticBox* capture = new StaticBox(this, wxID_ANY, wxDefaultPosition, wxSize(width, FromDIP(60)), wxWANTS_CHARS);
464 capture->SetCornerRadius(FromDIP(4));
465 capture->SetBorderColorNormal(StateColor::darkModeColorFor(wxColour("#009688"))); // the focused-input colour, since the box always has the focus
466 capture->SetBackgroundColorNormal(box_colour);
467 capture->SetBackgroundColour(box_colour);
468 wxBoxSizer* capture_sizer = new wxBoxSizer(wxVERTICAL);
469 m_chord_label = new wxStaticText(capture, wxID_ANY, join_keys(to_wx(wxGetApp().shortcuts().binding(shortcut).display_parts())));
471 m_chord_label->SetBackgroundColour(box_colour);
472 capture_sizer->AddStretchSpacer();
473 capture_sizer->Add(m_chord_label, 0, wxALIGN_CENTER);
474 capture_sizer->AddStretchSpacer();
475 capture->SetSizer(capture_sizer);
476 capture->Layout(); // the box is created at its final size, so nothing resizes it into laying the sizer out
477 // The hook runs before the window procedure, so Windows does not open its window menu
478 // over the dialog on Alt+Space.
479 Bind(wxEVT_CHAR_HOOK, &ShortcutCaptureDialog::on_key, this);
480 capture->Bind(wxEVT_CHAR, &ShortcutCaptureDialog::on_char, this);
481 capture->Bind(wxEVT_LEFT_DOWN, [capture](wxMouseEvent&) { capture->SetFocus(); });
482 sizer->Add(capture, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(20));
483
484 m_status = new Label(this, wxGetApp().normal_font(), m_hint, LB_AUTO_WRAP);
485 m_status->SetMinSize(wxSize(width, 3 * m_status->GetCharHeight())); // room for three lines, so the dialog keeps its size while keys are tried
486 m_status_colour = m_status->GetForegroundColour();
487 sizer->Add(m_status, 0, wxLEFT | wxRIGHT | wxTOP, FromDIP(20));
488
489 auto dlg_btns = new DialogButtons(this, {L("Unbind"), "OK", "Cancel"}, "", 1 /*left_aligned*/);
490 dlg_btns->GetFIRST()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) {
491 m_chord = KeyChord{};
492 m_conflicts.clear();
493 EndModal(wxID_OK);
494 });
495 dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxID_CANCEL); });
496 m_ok = dlg_btns->GetOK();
497 m_ok->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxID_OK); });
498 m_ok->Enable(false);
499 sizer->Add(dlg_btns, 0, wxEXPAND | wxTOP, FromDIP(10));
500
501 SetSizerAndFit(sizer);
502 CenterOnParent();
503 wxGetApp().UpdateDlgDarkUI(this);
504 capture->CallAfter([capture]() { capture->SetFocus(); });
505}
#define _(s)
Definition 3mf.cpp:306
#define L(s)
Definition ExtrusionEntity.cpp:25
#define LB_AUTO_WRAP
Definition Label.hpp:12
#define _L(s)
Definition OBJ.cpp:34
class WXDLLIMPEXP_FWD_CORE wxStaticText
Definition ProgressDialog.hpp:30
static wxFont Head_14
Definition Label.hpp:45
const wxFont & normal_font() const
Definition GUI_Utils.hpp:205
void EndModal(int retCode) override
Definition GUI_Utils.hpp:305
Button * m_ok
Definition KBShortcutsDialog.hpp:134
wxColour m_status_colour
Definition KBShortcutsDialog.hpp:133
Shortcut m_shortcut
Definition KBShortcutsDialog.hpp:126
void on_key(wxKeyEvent &evt)
Definition KBShortcutsDialog.cpp:513
wxString m_rejection
Definition KBShortcutsDialog.hpp:131
wxStaticText * m_chord_label
Definition KBShortcutsDialog.hpp:129
Label * m_status
Definition KBShortcutsDialog.hpp:132
std::vector< Shortcut > m_conflicts
Definition KBShortcutsDialog.hpp:128
wxString m_hint
Definition KBShortcutsDialog.hpp:130
void on_char(wxKeyEvent &evt)
Definition KBShortcutsDialog.cpp:536
KeyChord m_chord
Definition KBShortcutsDialog.hpp:127
static wxColour darkModeColorFor(wxColour const &color)
Definition StateColor.cpp:219
void SetBorderColorNormal(wxColor const &color)
Definition StaticBox.cpp:96
void SetCornerRadius(double radius)
Definition StaticBox.cpp:62
void SetBackgroundColorNormal(wxColor const &color)
Definition StaticBox.cpp:109
wxString global_key_advice()
Definition KBShortcutsDialog.cpp:82
wxString join_keys(const std::vector< wxString > &parts)
Definition KBShortcutsDialog.cpp:89
std::vector< wxString > to_wx(const std::vector< std::string > &parts)
Definition KBShortcutsDialog.cpp:73
const ShortcutInfo & shortcut_info(Shortcut shortcut)
Definition Shortcuts.cpp:237
wxMouseEvent
Definition CameraPopup.cpp:47
constexpr uint8_t context_bit(ShortcutContext context)
Definition Shortcuts.hpp:23
@ Global
Definition Shortcuts.hpp:21
uint8_t contexts
Definition Shortcuts.hpp:62
coord_t width(const BoundingBox &box)
Definition Arrange.cpp:1184

References _, _L, Slic3r::GUI::context_bit(), Slic3r::GUI::ShortcutInfo::contexts, StateColor::darkModeColorFor(), Slic3r::GUI::DPIDialog::EndModal(), Slic3r::GUI::DialogButtons::GetFIRST(), Slic3r::GUI::Global, Label::Head_14, L, LB_AUTO_WRAP, m_chord, m_chord_label, m_conflicts, m_hint, m_ok, m_rejection, m_shortcut, m_status, m_status_colour, Slic3r::GUI::DPIAware< wxDialog >::normal_font(), on_char(), on_key(), StaticBox::SetBackgroundColorNormal(), StaticBox::SetBorderColorNormal(), StaticBox::SetCornerRadius(), Slic3r::GUI::shortcut_info(), Slic3r::GUI::wxMouseEvent, and wxStaticText.

Here is the call graph for this function:

Member Function Documentation

◆ chord()

const KeyChord & Slic3r::GUI::ShortcutCaptureDialog::chord ( ) const
inline
115{ return m_chord; }

References m_chord.

Referenced by Slic3r::GUI::KBShortcutsDialog::edit_shortcut(), on_char(), on_key(), and record().

Here is the caller graph for this function:

◆ conflicts()

const std::vector< Shortcut > & Slic3r::GUI::ShortcutCaptureDialog::conflicts ( ) const
inline
116{ return m_conflicts; }

References m_conflicts.

Referenced by Slic3r::GUI::KBShortcutsDialog::edit_shortcut().

Here is the caller graph for this function:

◆ em_unit()

int Slic3r::GUI::DPIAware< wxDialog >::em_unit ( ) const
inlineinherited
203{ return m_em_unit; }
Definition GUI_Utils.hpp:107

Referenced by Slic3r::GUI::AuxiliaryDialog::AuxiliaryDialog(), Slic3r::GUI::CopyrightsDialog::CopyrightsDialog(), Slic3r::GUI::DesignTextDialog::DesignTextDialog(), Slic3r::GUI::EditGCodeDialog::EditGCodeDialog(), Slic3r::GUI::FileArchiveDialog::FileArchiveDialog(), Slic3r::GUI::MsgNoUpdates::MsgNoUpdates(), Slic3r::GUI::MsgUpdateForced::MsgUpdateForced(), Slic3r::GUI::OAuthDialog::OAuthDialog(), Slic3r::GUI::ParamsDialog::ParamsDialog(), Slic3r::GUI::PhysicalPrinterDialog::PhysicalPrinterDialog(), Slic3r::GUI::SettingsDialog::SettingsDialog(), anonymous_namespace{3DPrinterOS.cpp}::TokenAuthDialog::TokenAuthDialog(), anonymous_namespace{3DPrinterOS.cpp}::UploadOptionsDialog::UploadOptionsDialog(), Slic3r::GUI::PublishSettingsDialog::add_row_ui(), Slic3r::GUI::DiffPresetDialog::complete_dialog_creation(), Slic3r::GUI::DiffPresetDialog::create_edit_sizer(), Slic3r::GUI::DiffPresetDialog::create_presets_sizer(), Slic3r::GUI::DiffPresetDialog::create_tree(), Slic3r::GUI::ElegooPrintHostSendDialog::init(), Slic3r::GUI::FlashforgePrintHostSendDialog::init(), Slic3r::GUI::PrintHostSendDialog::init(), Slic3r::GUI::AboutDialog::on_dpi_changed(), Slic3r::GUI::AuxiliaryDialog::on_dpi_changed(), Slic3r::GUI::BedShapeDialog::on_dpi_changed(), Slic3r::GUI::ConfigWizard::on_dpi_changed(), Slic3r::GUI::CopyrightsDialog::on_dpi_changed(), Slic3r::GUI::DiffPresetDialog::on_dpi_changed(), Slic3r::GUI::EditGCodeDialog::on_dpi_changed(), Slic3r::GUI::FileArchiveDialog::on_dpi_changed(), Slic3r::GUI::OAuthDialog::on_dpi_changed(), Slic3r::GUI::ObjectTableDialog::on_dpi_changed(), Slic3r::GUI::ParamsDialog::on_dpi_changed(), Slic3r::GUI::PhysicalPrinterDialog::on_dpi_changed(), Slic3r::GUI::PrintHostQueueDialog::on_dpi_changed(), Slic3r::GUI::PurgeModeDialog::on_dpi_changed(), Slic3r::GUI::SavePresetDialog::on_dpi_changed(), Slic3r::GUI::SendSystemInfoDialog::on_dpi_changed(), Slic3r::GUI::SettingsDialog::on_dpi_changed(), and Slic3r::GUI::UnsavedChangesDialog::on_dpi_changed().

Here is the caller graph for this function:

◆ enable_force_rescale()

void Slic3r::GUI::DPIAware< wxDialog >::enable_force_rescale ( )
inlineinherited
206{ m_force_rescale = true; }

◆ EndModal()

void Slic3r::GUI::DPIDialog::EndModal ( int retCode)
inlineoverrideinherited
306 {
307 if (!dialogStack.empty() && dialogStack.front() != this) {
308 // This is a bug in wxWidgets
309 // when the dialog is not top modal dialog, EndModal() just hide dialog without quit
310 // the modal event loop. And the modal event loop blocks us from bottom widgets.
311 // Solution: let user click it manually or close outside. FIXME
312 BOOST_LOG_TRIVIAL(warning) << "DPIAware::EndModal Error: dialogStack is not empty, but top dialog is not this one. retCode=" << retCode;
313 return;
314 }
315
316 return wxDialog::EndModal(retCode);
317 }
std::deque< wxDialog * > dialogStack
Definition GUI_Utils.cpp:549

References Slic3r::GUI::dialogStack.

Referenced by Slic3r::GUI::CloneDialog::CloneDialog(), Slic3r::GUI::ConfigWizard::ConfigWizard(), Slic3r::GUI::CreatePresetSuccessfulDialog::CreatePresetSuccessfulDialog(), Slic3r::GUI::DeleteConfirmDialog::DeleteConfirmDialog(), Slic3r::GUI::DesignVariableDialog::DesignVariableDialog(), Slic3r::GUI::anonymous_namespace{PrintHostDialogs.cpp}::FlashforgeSlotDialog::FlashforgeSlotDialog(), Slic3r::GUI::GuideFrame::GuideFrame(), Slic3r::GUI::InputIpAddressDialog::InputIpAddressDialog(), Slic3r::GUI::ManualNozzleCountDialog::ManualNozzleCountDialog(), Slic3r::GUI::MsgUpdateConfig::MsgUpdateConfig(), Slic3r::GUI::MsgUpdateForced::MsgUpdateForced(), Slic3r::GUI::MultiChoiceDialog::MultiChoiceDialog(), Slic3r::GUI::NetworkErrorDialog::NetworkErrorDialog(), Slic3r::GUI::NetworkPluginRestartDialog::NetworkPluginRestartDialog(), Slic3r::GUI::PartSkipConfirmDialog::PartSkipConfirmDialog(), Slic3r::GUI::PhysicalPrinterDialog::PhysicalPrinterDialog(), Slic3r::GUI::PlateNameEditDialog::PlateNameEditDialog(), Slic3r::GUI::PlateSettingsDialog::PlateSettingsDialog(), Slic3r::GUI::PublishSettingsDialog::PublishSettingsDialog(), Slic3r::GUI::SelectMachineDialog::SelectMachineDialog(), Slic3r::GUI::SendFailedConfirm::SendFailedConfirm(), Slic3r::GUI::SendSystemInfoDialog::SendSystemInfoDialog(), Slic3r::GUI::ShortcutCaptureDialog::ShortcutCaptureDialog(), Slic3r::GUI::SingleChoiceDialog::SingleChoiceDialog(), StepMeshDialog::StepMeshDialog(), Slic3r::GUI::SyncAmsInfoDialog::SyncAmsInfoDialog(), anonymous_namespace{3DPrinterOS.cpp}::TokenAuthDialog::TokenAuthDialog(), Slic3r::GUI::UpdatePluginDialog::UpdatePluginDialog(), Slic3r::GUI::UpdateVersionDialog::UpdateVersionDialog(), Slic3r::GUI::wgtDeviceNozzleRackUpgradeDlg::wgtDeviceNozzleRackUpgradeDlg(), Slic3r::GUI::SavePresetDialog::accept(), Slic3r::GUI::MsgDialog::add_button(), Slic3r::GUI::TipsDialog::add_button(), Slic3r::GUI::FilamentPickerDialog::BindEvents(), Slic3r::GUI::PluginPickerDialog::build_capability_ui(), Slic3r::GUI::BedShapeDialog::build_dialog(), Slic3r::GUI::PluginPickerDialog::build_ui(), Slic3r::GUI::UnsavedChangesDialog::close(), Slic3r::GUI::FileArchiveDialog::create_btn_sizer(), Slic3r::GUI::ColorDecomposeDialog::create_button_panel(), Slic3r::GUI::MixedFilamentDialog::create_button_panel(), Slic3r::GUI::CreateFilamentPresetDialog::create_dialog_buttons(), Slic3r::GUI::CreatePresetForPrinterDialog::create_dialog_buttons(), Slic3r::GUI::EditFilamentPresetDialog::create_dialog_buttons(), Slic3r::GUI::ExportConfigsDialog::create_dialog_buttons(), Slic3r::GUI::PreferencesDialog::create_item_language_combobox(), Slic3r::GUI::PreferencesDialog::create_item_region_combobox(), Slic3r::GUI::PreferencesDialog::create_items(), Slic3r::GUI::CreatePrinterPresetDialog::create_page1_dialog_buttons(), Slic3r::GUI::CreatePrinterPresetDialog::create_page2_dialog_buttons(), Slic3r::GUI::ExportConfigsDialog::data_init(), Slic3r::GUI::WebDialog::destroy_silently(), Slic3r::GUI::EditFilamentPresetDialog::edit_preset(), Slic3r::GUI::ConnectPrinterDialog::end_modal(), Slic3r::GUI::PrintHostSendDialog::EndModal(), Slic3r::GUI::ColorPickerDialog::finish(), Slic3r::GUI::WebDialog::finish(), Slic3r::GUI::Newer3mfVersionDialog::get_btn_sizer(), Slic3r::GUI::ScoreDialog::get_button_sizer(), Slic3r::GUI::WebViewHostDialog::handle_common_script_command(), Slic3r::GUI::ExportPresetBundleDialog::InitExportData(), Slic3r::GUI::SelectMachineDialog::navigate_to_timelapse_page(), Slic3r::GUI::BindMachineDialog::on_bind_success(), Slic3r::GUI::ConnectPrinterDialog::on_button_confirm(), Slic3r::GUI::RecenterDialog::on_button_confirm(), Slic3r::GUI::BindMachineDialog::on_cancel(), Slic3r::GUI::EditCalibrationHistoryDialog::on_cancel(), Slic3r::GUI::InputIpAddressDialog::on_cancel(), Slic3r::GUI::NewCalibrationHistoryDialog::on_cancel(), Slic3r::GUI::OAuthDialog::on_cancel(), Slic3r::GUI::PingCodeBindDialog::on_cancel(), Slic3r::GUI::SelectMachineDialog::on_cancel(), Slic3r::GUI::SendToPrinterDialog::on_cancel(), Slic3r::GUI::SyncAmsInfoDialog::on_cancel(), Slic3r::GUI::UnBindMachineDialog::on_cancel(), Slic3r::GUI::WebDialog::on_close_window(), Slic3r::GUI::NetworkPluginDownloadDialog::on_dont_ask(), Slic3r::GUI::NetworkPluginDownloadDialog::on_download(), Slic3r::GUI::EditDevNameDialog::on_edit_name(), Slic3r::GUI::ConfirmBeforeSendDialog::on_hide(), Slic3r::GUI::PrivacyUpdateDialog::on_hide(), Slic3r::GUI::ShortcutCaptureDialog::on_key(), Slic3r::GUI::TextureImportDialog::on_ok_clicked(), Slic3r::GUI::FileArchiveDialog::on_open_button(), Slic3r::GUI::NetworkPluginDownloadDialog::on_remind_later(), Slic3r::GUI::ProjectDropDialog::on_select_cancel(), Slic3r::GUI::SavePresetDialog::on_select_cancel(), Slic3r::GUI::ProjectDropDialog::on_select_ok(), Slic3r::GUI::SendMultiMachinePage::on_send(), Slic3r::GUI::NetworkPluginDownloadDialog::on_skip(), Slic3r::GUI::TextureImportDialog::on_skip_clicked(), Slic3r::GUI::NetworkPluginDownloadDialog::on_skip_version(), Slic3r::GUI::Cornering_Test_Dlg::on_start(), Slic3r::GUI::FlowRateCalibrationDialog::on_start(), Slic3r::GUI::Input_Shaping_Damp_Test_Dlg::on_start(), Slic3r::GUI::Input_Shaping_Freq_Test_Dlg::on_start(), Slic3r::GUI::MaxVolumetricSpeed_Test_Dlg::on_start(), Slic3r::GUI::PA_Calibration_Dlg::on_start(), Slic3r::GUI::Retraction_Test_Dlg::on_start(), Slic3r::GUI::Temp_Calibration_Dlg::on_start(), Slic3r::GUI::VFA_Test_Dlg::on_start(), Slic3r::GUI::CalibrationDialog::on_start_calibration(), Slic3r::GUI::UnBindMachineDialog::on_unbind_printer(), Slic3r::GUI::PartSkipDialog::OnApplyDialog(), anonymous_namespace{3DPrinterOS.cpp}::TokenAuthDialog::OnCancel(), Slic3r::GUI::AboutDialog::onCloseDialog(), Slic3r::GUI::CopyrightsDialog::onCloseDialog(), Slic3r::GUI::MultiNozzleSyncDialog::OnRackStatusReadingFinished(), Slic3r::GUI::GuideFrame::OnScriptMessage(), Slic3r::GUI::InputIpAddressDialog::OnTimer(), Slic3r::GUI::KBShortcutsDialog::open_mouse_preferences(), Slic3r::GUI::TroubleshootDialog::PackAll(), Slic3r::GUI::TroubleshootDialog::RebuildSystemProfiles(), Slic3r::GUI::SpeedDialWebDialog::run_action(), Slic3r::GUI::OAuthDialog::Show(), Slic3r::GUI::MultiNozzleSyncDialog::UpdateButton(), and Slic3r::GUI::CreatePrinterPresetDialog::validate_input_valid().

◆ force_rescale()

bool Slic3r::GUI::DPIAware< wxDialog >::force_rescale ( ) const
inlineinherited
201{ return m_force_rescale; }

◆ is_new_scale_factor()

bool Slic3r::GUI::DPIAware< wxDialog >::is_new_scale_factor ( ) const
inlineprivateinherited
262{ return fabs(m_scale_factor - m_prev_scale_factor) > 0.001; }

◆ normal_font()

◆ on_char()

void Slic3r::GUI::ShortcutCaptureDialog::on_char ( wxKeyEvent & evt)
private
537{
538 const KeyChord chord = KeyChord::from_event(evt);
539 if (chord.is_punctuation())
540 record(chord);
541}
void record(const KeyChord &chord)
Definition KBShortcutsDialog.cpp:543
const KeyChord & chord() const
Definition KBShortcutsDialog.hpp:115
static KeyChord from_event(const wxKeyEvent &evt)
Definition KeyChord.cpp:343

References chord(), Slic3r::GUI::KeyChord::from_event(), and record().

Referenced by ShortcutCaptureDialog().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_dpi_changed()

void Slic3r::GUI::ShortcutCaptureDialog::on_dpi_changed ( const wxRect & suggested_rect)
overrideprotectedvirtual

Implements Slic3r::GUI::DPIAware< wxDialog >.

508{
509 Layout();
510 Fit();
511}

◆ on_key()

void Slic3r::GUI::ShortcutCaptureDialog::on_key ( wxKeyEvent & evt)
private
514{
515 if (!evt.HasAnyModifiers()) {
516 if (evt.GetKeyCode() == WXK_ESCAPE) {
517 EndModal(wxID_CANCEL);
518 return;
519 }
520 if (evt.GetKeyCode() == WXK_RETURN || evt.GetKeyCode() == WXK_NUMPAD_ENTER) {
521 if (m_ok->IsEnabled())
522 EndModal(wxID_OK);
523 return;
524 }
525 }
526 const KeyChord chord = KeyChord::from_event(evt);
527 if (!chord.valid())
528 return;
529 if (chord.needs_char_event()) {
530 evt.Skip();
531 return;
532 }
533 record(chord);
534}

References chord(), Slic3r::GUI::DPIDialog::EndModal(), Slic3r::GUI::KeyChord::from_event(), m_ok, and record().

Referenced by ShortcutCaptureDialog().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ on_sys_color_changed()

◆ prev_scale_factor()

float Slic3r::GUI::DPIAware< wxDialog >::prev_scale_factor ( ) const
inlineinherited
196{ return m_prev_scale_factor; }

◆ record()

void Slic3r::GUI::ShortcutCaptureDialog::record ( const KeyChord & chord)
private
544{
545 m_chord = chord;
546 m_chord_label->SetLabel(join_keys(to_wx(chord.display_parts())));
547 m_chord_label->GetParent()->Layout();
548
549 auto reject = [this](const wxString& reason) {
550 m_status->SetForegroundColour(ERROR_COLOUR);
551 m_status->SetLabel(reason);
552 m_conflicts.clear();
553 m_ok->Enable(false);
554 };
556 if (chord.is_system_shortcut()) {
557 reject(_L("The system uses this shortcut, so it cannot be assigned."));
558 } else if (global && !chord.is_menu_accelerator()) {
559 reject(m_rejection);
560 } else if (const std::optional<Shortcut> owner = wxGetApp().shortcuts().step_owner(m_shortcut, chord); owner.has_value()) {
561 reject(wxString::Format(_L("Shift and Ctrl with this key belong to %s and cannot be assigned."), _(shortcut_info(*owner).name)));
562 } else {
563 m_conflicts = wxGetApp().shortcuts().conflicts(m_shortcut, chord);
564 m_status->SetForegroundColour(m_status_colour);
565 if (m_conflicts.empty())
566 m_status->SetLabel(m_hint);
567 else
568 m_status->SetLabel(wxString::Format(_L("Already assigned to %s. Press OK to reassign it."), shortcut_names(m_conflicts)));
569 m_ok->Enable(true);
570 }
571 m_status->Refresh(); // a colour change alone does not repaint
572 Layout();
573 Fit();
574}
wxString shortcut_names(const std::vector< Shortcut > &shortcuts)
Definition KBShortcutsDialog.cpp:44
const char * name
Definition Shortcuts.hpp:61

References _, _L, chord(), Slic3r::GUI::context_bit(), Slic3r::GUI::ShortcutInfo::contexts, Slic3r::GUI::Global, m_chord, m_chord_label, m_conflicts, m_hint, m_ok, m_rejection, m_shortcut, m_status, m_status_colour, Slic3r::GUI::ShortcutInfo::name, and Slic3r::GUI::shortcut_info().

Referenced by on_char(), and on_key().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rescale()

void Slic3r::GUI::DPIAware< wxDialog >::rescale ( const wxRect & suggested_rect)
inlineprivateinherited
265 {
266 this->Freeze();
267
268 m_force_rescale = false;
269
270 // set normal application font as a current window font
271 m_normal_font = this->GetFont();
272
274
275 // rescale missed controls sizes and images
277
278 this->Layout();
279 this->Thaw();
280
281 // reset previous scale factor from current scale factor value
283 }
virtual void on_dpi_changed(const wxRect &suggested_rect)=0
void update_em_unit()
Definition GUI_Utils.hpp:249

◆ scale_factor()

float Slic3r::GUI::DPIAware< wxDialog >::scale_factor ( ) const
inlineinherited
195{ return m_scale_factor; }

◆ set_em_unit()

void Slic3r::GUI::DPIAware< wxDialog >::set_em_unit ( int v)
inlineinherited
200{ m_em_unit = v; }

◆ set_prev_scale_factor()

void Slic3r::GUI::DPIAware< wxDialog >::set_prev_scale_factor ( float v)
inlineinherited

◆ set_scale_factor()

void Slic3r::GUI::DPIAware< wxDialog >::set_scale_factor ( float v)
inlineinherited
198{ m_scale_factor = v; }

◆ ShowModal()

◆ update_em_unit()

void Slic3r::GUI::DPIAware< wxDialog >::update_em_unit ( )
inlineprivateinherited
250 {
251 // Linux specific issue : get_dpi_for_window(this) still doesn't responce to the Display's scale in new wxWidgets(3.1.3).
252 // So, calculate the m_em_unit value from the font size, as before
253#if !defined(__WXGTK__)
255#else
256 // initialize default width_unit according to the width of the one symbol ("m") of the currently active font of this window.
257 m_em_unit = std::max<size_t>(10, this->GetTextExtent("m").x - 1);
258#endif // __WXGTK__
259 }

Member Data Documentation

◆ m_can_rescale

bool Slic3r::GUI::DPIAware< wxDialog >::m_can_rescale
privateinherited
235{ true };

◆ m_chord

KeyChord Slic3r::GUI::ShortcutCaptureDialog::m_chord
private

◆ m_chord_label

wxStaticText* Slic3r::GUI::ShortcutCaptureDialog::m_chord_label
private

Referenced by ShortcutCaptureDialog(), and record().

◆ m_conflicts

std::vector<Shortcut> Slic3r::GUI::ShortcutCaptureDialog::m_conflicts
private

◆ m_em_unit

int Slic3r::GUI::DPIAware< wxDialog >::m_em_unit
privateinherited

◆ m_force_rescale

bool Slic3r::GUI::DPIAware< wxDialog >::m_force_rescale
privateinherited
236{ false };

◆ m_hint

wxString Slic3r::GUI::ShortcutCaptureDialog::m_hint
private

Referenced by ShortcutCaptureDialog(), and record().

◆ m_new_font_point_size

int Slic3r::GUI::DPIAware< wxDialog >::m_new_font_point_size
privateinherited

◆ m_normal_font

wxFont Slic3r::GUI::DPIAware< wxDialog >::m_normal_font
privateinherited

◆ m_ok

Button* Slic3r::GUI::ShortcutCaptureDialog::m_ok
private

◆ m_prev_scale_factor

float Slic3r::GUI::DPIAware< wxDialog >::m_prev_scale_factor
privateinherited

◆ m_rejection

wxString Slic3r::GUI::ShortcutCaptureDialog::m_rejection
private

Referenced by ShortcutCaptureDialog(), and record().

◆ m_scale_factor

float Slic3r::GUI::DPIAware< wxDialog >::m_scale_factor
privateinherited

◆ m_shortcut

Shortcut Slic3r::GUI::ShortcutCaptureDialog::m_shortcut
private

Referenced by ShortcutCaptureDialog(), and record().

◆ m_status

Label* Slic3r::GUI::ShortcutCaptureDialog::m_status
private

Referenced by ShortcutCaptureDialog(), and record().

◆ m_status_colour

wxColour Slic3r::GUI::ShortcutCaptureDialog::m_status_colour
private

Referenced by ShortcutCaptureDialog(), and record().


The documentation for this class was generated from the following files: