summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2024-01-11 21:02:11 +0100
committerCarl Hetherington <cth@carlh.net>2024-01-11 21:02:11 +0100
commit1900aff395ecace8bfa8bd367a2e0327f4d2736d (patch)
tree7963af756ae157c401313abf691b8b2a900a7a93 /src
parent054fa39c2c9c4adf3219669e16e6fe6f44838694 (diff)
Fix timecode order in RTL languages (part of #2696).
Diffstat (limited to 'src')
-rw-r--r--src/wx/timecode.cc29
-rw-r--r--src/wx/timing_panel.cc44
-rw-r--r--src/wx/timing_panel.h5
3 files changed, 40 insertions, 38 deletions
diff --git a/src/wx/timecode.cc b/src/wx/timecode.cc
index f4f0af07a..1e6a1930d 100644
--- a/src/wx/timecode.cc
+++ b/src/wx/timecode.cc
@@ -46,23 +46,30 @@ TimecodeBase::TimecodeBase (wxWindow* parent, bool set_button)
_sizer = new wxBoxSizer (wxHORIZONTAL);
+ std::vector<wxTextCtrl*> controls;
+
_editable = new wxPanel (this);
auto editable_sizer = new wxBoxSizer (wxHORIZONTAL);
_hours = new wxTextCtrl (_editable, wxID_ANY, wxT(""), wxDefaultPosition, s, 0, validator);
- _hours->SetMaxLength (2);
- editable_sizer->Add (_hours);
- add_label_to_sizer (editable_sizer, _editable, wxT(":"), false, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
+ controls.push_back(_hours);
_minutes = new wxTextCtrl (_editable, wxID_ANY, wxT(""), wxDefaultPosition, s, 0, validator);
- _minutes->SetMaxLength (2);
- editable_sizer->Add (_minutes);
- add_label_to_sizer (editable_sizer, _editable, wxT (":"), false, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
+ controls.push_back(_minutes);
_seconds = new wxTextCtrl (_editable, wxID_ANY, wxT(""), wxDefaultPosition, s, 0, validator);
- _seconds->SetMaxLength (2);
- editable_sizer->Add (_seconds);
- add_label_to_sizer (editable_sizer, _editable, wxT (":"), false, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
+ controls.push_back(_seconds);
_frames = new wxTextCtrl (_editable, wxID_ANY, wxT(""), wxDefaultPosition, s, 0, validator);
- _frames->SetMaxLength (2);
- editable_sizer->Add (_frames);
+ controls.push_back(_frames);
+
+ if (parent->GetLayoutDirection() == wxLayout_RightToLeft) {
+ std::reverse(controls.begin(), controls.end());
+ }
+
+ for (auto i = controls.begin(); i != controls.end(); ++i) {
+ (*i)->SetMaxLength(2);
+ editable_sizer->Add(*i);
+ if (std::next(i) != controls.end()) {
+ add_label_to_sizer(editable_sizer, _editable, wxT (":"), false, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
+ }
+ }
if (set_button) {
_set_button = new Button (_editable, _("Set"), wxDefaultPosition, small_button_size(parent, _("Set")));
diff --git a/src/wx/timing_panel.cc b/src/wx/timing_panel.cc
index 55d9a5fbf..106998082 100644
--- a/src/wx/timing_panel.cc
+++ b/src/wx/timing_panel.cc
@@ -82,25 +82,23 @@ TimingPanel::create ()
}
//// TRANSLATORS: this is an abbreviation for "hours"
- _h_label = new StaticText (this, _("h"), wxDefaultPosition, size, wxALIGN_CENTRE_HORIZONTAL);
-#ifdef TIMING_PANEL_ALIGNMENT_HACK
- /* Hack to work around failure to centre text on GTK */
- gtk_label_set_line_wrap (GTK_LABEL(_h_label->GetHandle()), FALSE);
-#endif
+ _label.push_back(new StaticText(this, _("h"), wxDefaultPosition, size, wxALIGN_CENTRE_HORIZONTAL));
//// TRANSLATORS: this is an abbreviation for "minutes"
- _m_label = new StaticText (this, _("m"), wxDefaultPosition, size, wxALIGN_CENTRE_HORIZONTAL);
-#ifdef TIMING_PANEL_ALIGNMENT_HACK
- gtk_label_set_line_wrap (GTK_LABEL (_m_label->GetHandle()), FALSE);
-#endif
+ _label.push_back(new StaticText(this, _("m"), wxDefaultPosition, size, wxALIGN_CENTRE_HORIZONTAL));
//// TRANSLATORS: this is an abbreviation for "seconds"
- _s_label = new StaticText (this, _("s"), wxDefaultPosition, size, wxALIGN_CENTRE_HORIZONTAL);
-#ifdef TIMING_PANEL_ALIGNMENT_HACK
- gtk_label_set_line_wrap (GTK_LABEL(_s_label->GetHandle()), FALSE);
-#endif
+ _label.push_back(new StaticText (this, _("s"), wxDefaultPosition, size, wxALIGN_CENTRE_HORIZONTAL));
//// TRANSLATORS: this is an abbreviation for "frames"
- _f_label = new StaticText (this, _("f"), wxDefaultPosition, size, wxALIGN_CENTRE_HORIZONTAL);
+ _label.push_back(new StaticText (this, _("f"), wxDefaultPosition, size, wxALIGN_CENTRE_HORIZONTAL));
+
+ if (GetLayoutDirection() == wxLayout_RightToLeft) {
+ std::reverse(_label.begin(), _label.end());
+ }
+
#ifdef TIMING_PANEL_ALIGNMENT_HACK
- gtk_label_set_line_wrap (GTK_LABEL(_f_label->GetHandle()), FALSE);
+ for (auto label: _label) {
+ /* Hack to work around failure to centre text on GTK */
+ gtk_label_set_line_wrap(GTK_LABEL(label->GetHandle()), FALSE);
+ }
#endif
_position_label = create_label (this, _("Position"), true);
@@ -139,14 +137,14 @@ TimingPanel::add_to_grid ()
{
int r = 0;
- wxSizer* labels = new wxBoxSizer (wxHORIZONTAL);
- labels->Add (_h_label, 1, wxEXPAND);
- add_label_to_sizer (labels, _colon[0], false);
- labels->Add (_m_label, 1, wxEXPAND);
- add_label_to_sizer (labels, _colon[1], false);
- labels->Add (_s_label, 1, wxEXPAND);
- add_label_to_sizer (labels, _colon[2], false);
- labels->Add (_f_label, 1, wxEXPAND);
+ auto labels = new wxBoxSizer(wxHORIZONTAL);
+ int index = 0;
+ for (auto label: _label) {
+ labels->Add(label, 1, wxEXPAND);
+ if (index < 3) {
+ add_label_to_sizer(labels, _colon[index++], false);
+ }
+ }
_grid->Add (labels, wxGBPosition(r, 1));
++r;
diff --git a/src/wx/timing_panel.h b/src/wx/timing_panel.h
index 13e733be6..0757b3f17 100644
--- a/src/wx/timing_panel.h
+++ b/src/wx/timing_panel.h
@@ -50,10 +50,7 @@ private:
FilmViewer& _viewer;
- wxStaticText* _h_label;
- wxStaticText* _m_label;
- wxStaticText* _s_label;
- wxStaticText* _f_label;
+ std::vector<wxStaticText*> _label;
wxStaticText* _colon[3];
wxStaticText* _position_label;
Timecode<dcpomatic::DCPTime>* _position;