Skip to content

Commit

Permalink
Add preview window for pseudo translations on options dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
Blake-Madden committed Dec 11, 2024
1 parent 1292524 commit 7ae7079
Show file tree
Hide file tree
Showing 3 changed files with 143 additions and 74 deletions.
21 changes: 15 additions & 6 deletions src/gui/insert_translator_comment_dlg.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
#include <wx/stdpaths.h>
#include <wx/string.h>
#include <wx/valgen.h>
#include <wx/valgen.h>
#include <wx/valtext.h>
#include <wx/wx.h>

Expand All @@ -49,11 +48,12 @@ class InsertTransCommentDlg final : public wxDialog
@param pos The screen position of the window.
@param size The window size.
@param style The window style (i.e., decorations and flags).*/
explicit InsertTransCommentDlg(
wxWindow* parent, wxWindowID id = wxID_ANY,
const wxString& caption = _(L"Insert Translator Comment"),
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE | wxCLIP_CHILDREN | wxRESIZE_BORDER);
explicit InsertTransCommentDlg(wxWindow* parent, wxWindowID id = wxID_ANY,
const wxString& caption = _(L"Insert Translator Comment"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE | wxCLIP_CHILDREN |
wxRESIZE_BORDER);
/// @private
InsertTransCommentDlg(const InsertTransCommentDlg&) = delete;
/// @private
Expand All @@ -63,9 +63,18 @@ class InsertTransCommentDlg final : public wxDialog
[[nodiscard]]
wxString GetFormattedOutput();

/// @returns @c true if the selected comment is multiline.
[[nodiscard]]
bool IsMultilineComment()
{
TransferDataFromWindow();
return m_selectedTag.starts_with(L"/*");
}

private:
void CreateControls();
void OnOK([[maybe_unused]] wxCommandEvent&);

void OnHelpClicked([[maybe_unused]] wxCommandEvent& event)
{
const wxString docPath = []()
Expand Down
182 changes: 115 additions & 67 deletions src/gui/projectdlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,32 +39,68 @@ NewProjectDialog::NewProjectDialog(
Bind(wxEVT_BUTTON, &NewProjectDialog::OnExcludedFileButtonClick, this,
NewProjectDialog::ID_EXCLUDED_FILES_BROWSE_BUTTON);
Bind(wxEVT_BUTTON, &NewProjectDialog::OnOK, this, wxID_OK);
Bind(wxEVT_TEXT, &NewProjectDialog::OnSampleTextChanged, this, ID_SAMPLE_TEXT);
Bind(
wxEVT_CHOICE,
[this](wxCommandEvent& evt)
{
if (m_pseudoSurroundingBracketsCheckbox != nullptr)
{
m_pseudoSurroundingBracketsCheckbox->Enable(evt.GetSelection() != 0);
}
if (m_pseudoTrackCheckbox != nullptr)
{
m_pseudoTrackCheckbox->Enable(evt.GetSelection() != 0);
}
if (m_pseudoIncreaseSlider != nullptr)
{
m_pseudoIncreaseSlider->Enable(evt.GetSelection() != 0);
}
if (m_pseudoSliderLabel != nullptr)
{
m_pseudoSliderLabel->Enable(evt.GetSelection() != 0);
}
if (m_pseudoSliderPercentLabel != nullptr)
{
m_pseudoSliderPercentLabel->Enable(evt.GetSelection() != 0);
}
},
wxEVT_CHOICE, [this]([[maybe_unused]] wxCommandEvent&) { UpdatePseudoTransOptions(); },
ID_PSEUDO_METHODS);
Bind(
wxEVT_CHECKBOX, [this]([[maybe_unused]] wxCommandEvent&) { UpdatePseudoTransOptions(); },
ID_PSEUDO_BRACKETS_CHECK);
Bind(
wxEVT_CHECKBOX, [this]([[maybe_unused]] wxCommandEvent&) { UpdatePseudoTransOptions(); },
ID_PSEUDO_TRACK_IDS_CHECK);
Bind(
wxEVT_SLIDER, [this]([[maybe_unused]] wxCommandEvent&) { UpdatePseudoTransOptions(); },
ID_PSEUDO_WIDTH_SLIDER);
}

//-------------------------------------------------------------
void NewProjectDialog::OnSampleTextChanged([[maybe_unused]] wxCommandEvent&)
{
UpdatePseudoTransOptions();
}

//-------------------------------------------------------------
void NewProjectDialog::UpdatePseudoTransOptions()
{
TransferDataFromWindow();
if (m_pseudoSurroundingBracketsCheckbox != nullptr)
{
m_pseudoSurroundingBracketsCheckbox->Enable(m_pseudoTranslationMethod != 0);
}
if (m_pseudoTrackCheckbox != nullptr)
{
m_pseudoTrackCheckbox->Enable(m_pseudoTranslationMethod != 0);
}
if (m_pseudoIncreaseSlider != nullptr)
{
m_pseudoIncreaseSlider->Enable(m_pseudoTranslationMethod != 0);
}
if (m_pseudoSliderLabel != nullptr)
{
m_pseudoSliderLabel->Enable(m_pseudoTranslationMethod != 0);
}
if (m_pseudoSliderPercentLabel != nullptr)
{
m_pseudoSliderPercentLabel->Enable(m_pseudoTranslationMethod != 0);
}
if (m_previewSizer != nullptr)
{
m_previewSizer->GetStaticBox()->Enable(m_pseudoTranslationMethod != 0);
}
// do not call TransferDataToWindow() in here, as that will cause
// this event handler to be called in an infinite loop
if (m_previewTextWindow != nullptr)
{
i18n_check::pseudo_translater ptrans;
ptrans.set_pseudo_method(
static_cast<i18n_check::pseudo_translation_method>(m_pseudoTranslationMethod));
ptrans.change_width(m_widthPseudoChange);
ptrans.enable_tracking(m_pseudoTrack);
ptrans.add_surrounding_brackets(m_addPseudoTransBrackets);
wxString mutatedValue = ptrans.mutate_message(m_sampleText.wc_string());
m_previewTextWindow->SetValue(mutatedValue);
}
}

//-------------------------------------------------------------
Expand Down Expand Up @@ -99,6 +135,8 @@ void NewProjectDialog::SetOptions(const i18n_check::review_style style)
m_commentMissingSpace = (m_options & i18n_check::review_style::check_space_after_comment);

TransferDataToWindow();

UpdatePseudoTransOptions();
}

//-------------------------------------------------------------
Expand Down Expand Up @@ -320,35 +358,9 @@ void NewProjectDialog::SetAllOptions(const I18NOptions& options)
m_verbose = options.m_verbose;
m_minWordsForClassifyingUnavailableString = options.m_minWordsForClassifyingUnavailableString;
MinCppVersion(options.m_minCppVersion);
if (m_pseudoSurroundingBracketsCheckbox != nullptr)
{
m_pseudoSurroundingBracketsCheckbox->Enable(m_pseudoTranslationMethod != 0);
}
if (m_pseudoTrackCheckbox != nullptr)
{
m_pseudoTrackCheckbox->Enable(m_pseudoTranslationMethod != 0);
}
if (m_pseudoIncreaseSlider != nullptr)
{
m_pseudoIncreaseSlider->Enable(m_pseudoTranslationMethod != 0);
}
if (m_pseudoSliderLabel != nullptr)
{
m_pseudoSliderLabel->Enable(m_pseudoTranslationMethod != 0);
}
if (m_pseudoSliderPercentLabel != nullptr)
{
m_pseudoSliderPercentLabel->Enable(m_pseudoTranslationMethod != 0);
}
if (m_exclusionList != nullptr)
{
m_exclusionList->SetStrings(m_excludedPaths);
}
if (m_ignoredVarsList != nullptr)
{
m_ignoredVarsList->SetStrings(m_varsToIgnore);
}
TransferDataToWindow();

UpdatePseudoTransOptions();
}

//-------------------------------------------------------------
Expand Down Expand Up @@ -622,9 +634,9 @@ void NewProjectDialog::CreateControls()
gbSizer->Add(
new wxCheckBox(poOptionsSizer->GetStaticBox(), wxID_ANY,
_(L"Check for inconsistent printf & positional format specifiers"),
wxDefaultPosition, wxDefaultSize, 0,
wxGenericValidator(&m_printfMismatch)),
wxGBPosition(currentRow, 0), wxGBSpan{});
wxDefaultPosition, wxDefaultSize, 0,
wxGenericValidator(&m_printfMismatch)),
wxGBPosition(currentRow, 0), wxGBSpan{});
gbSizer->Add(buildCodeLabel(L"printfMismatch", poOptionsSizer->GetStaticBox()),
wxGBPosition(currentRow++, 1), wxGBSpan{});

Expand Down Expand Up @@ -671,33 +683,35 @@ void NewProjectDialog::CreateControls()
new wxChoice(pseudoTransSizer->GetStaticBox(), ID_PSEUDO_METHODS, wxDefaultPosition,
wxDefaultSize, pseudoOptions, 0,
wxGenericValidator(&m_pseudoTranslationMethod)),
wxSizerFlags{}.Border(wxLEFT).Left().CenterVertical());
wxSizerFlags{}.Border(wxLEFT | wxBOTTOM).Left().CenterVertical());

pseudoTransSizer->Add(pseudoTransMethodSizer, wxSizerFlags{}.Expand().Border());

m_pseudoSurroundingBracketsCheckbox = new wxCheckBox(
pseudoTransSizer->GetStaticBox(), wxID_ANY, _(L"Add surrounding brackets"),
wxDefaultPosition, wxDefaultSize, 0, wxGenericValidator(&m_addPseudoTransBrackets));
m_pseudoSurroundingBracketsCheckbox =
new wxCheckBox(pseudoTransSizer->GetStaticBox(), ID_PSEUDO_BRACKETS_CHECK,
_(L"Add surrounding brackets"), wxDefaultPosition, wxDefaultSize, 0,
wxGenericValidator(&m_addPseudoTransBrackets));
m_pseudoSurroundingBracketsCheckbox->Enable(m_pseudoTranslationMethod != 0);
pseudoTransSizer->Add(m_pseudoSurroundingBracketsCheckbox,
wxSizerFlags{}.Expand().Border());
wxSizerFlags{}.Expand().Border(wxLEFT | wxBOTTOM));

m_pseudoTrackCheckbox = new wxCheckBox(
pseudoTransSizer->GetStaticBox(), wxID_ANY, _(L"Add tracking IDs"),
pseudoTransSizer->GetStaticBox(), ID_PSEUDO_TRACK_IDS_CHECK, _(L"Add tracking IDs"),
wxDefaultPosition, wxDefaultSize, 0, wxGenericValidator(&m_pseudoTrack));
m_pseudoTrackCheckbox->Enable(m_pseudoTranslationMethod != 0);
pseudoTransSizer->Add(m_pseudoTrackCheckbox, wxSizerFlags{}.Expand().Border());
pseudoTransSizer->Add(m_pseudoTrackCheckbox,
wxSizerFlags{}.Expand().Border(wxLEFT | wxBOTTOM));

wxBoxSizer* pseudoWidthSizer = new wxBoxSizer(wxHORIZONTAL);

m_pseudoSliderLabel =
new wxStaticText(pseudoTransSizer->GetStaticBox(), wxID_STATIC,
_(L"Increase width:"), wxDefaultPosition, wxDefaultSize);
_(L"Expand/contract width:"), wxDefaultPosition, wxDefaultSize);

m_pseudoIncreaseSlider = new wxSlider(
pseudoTransSizer->GetStaticBox(), wxID_ANY, m_widthPseudoIncrease, 0, 100,
wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_MIN_MAX_LABELS,
wxGenericValidator(&m_widthPseudoIncrease));
pseudoTransSizer->GetStaticBox(), ID_PSEUDO_WIDTH_SLIDER, m_widthPseudoChange, -50,
100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_MIN_MAX_LABELS,
wxGenericValidator(&m_widthPseudoChange));

m_pseudoSliderPercentLabel =
new wxStaticText(pseudoTransSizer->GetStaticBox(), wxID_STATIC, L"%",
Expand All @@ -709,7 +723,41 @@ void NewProjectDialog::CreateControls()
pseudoWidthSizer->Add(m_pseudoSliderPercentLabel,
wxSizerFlags{}.Border(wxLEFT).Left().CenterVertical());

pseudoTransSizer->Add(pseudoWidthSizer, wxSizerFlags{}.Expand().Border());
pseudoTransSizer->Add(pseudoWidthSizer,
wxSizerFlags{}.Expand().Border(wxLEFT | wxBOTTOM | wxRIGHT));

wxFlexGridSizer* gbPreviewSizer = new wxFlexGridSizer(
2, 2, wxSize{ wxSizerFlags::GetDefaultBorder(), wxSizerFlags::GetDefaultBorder() });
gbPreviewSizer->AddGrowableCol(1, 1);
gbPreviewSizer->SetFlexibleDirection(wxHORIZONTAL);

m_previewSizer =
new wxStaticBoxSizer(wxVERTICAL, pseudoTransSizer->GetStaticBox(), _(L"Preview"));

gbPreviewSizer->Add(new wxStaticText(m_previewSizer->GetStaticBox(), wxID_STATIC,
_(L"Sample Text:"), wxDefaultPosition,
wxDefaultSize),
wxSizerFlags{}.CenterVertical());
gbPreviewSizer->Add(new wxTextCtrl(m_previewSizer->GetStaticBox(), ID_SAMPLE_TEXT,
wxString{}, wxDefaultPosition, wxDefaultSize,
wxTE_RICH2 | wxBORDER_THEME | wxTE_BESTWRAP,
wxGenericValidator(&m_sampleText)),
wxSizerFlags{}.Expand());

gbPreviewSizer->Add(new wxStaticText(m_previewSizer->GetStaticBox(), wxID_STATIC,
_(L"Pseudo-translation:"), wxDefaultPosition,
wxDefaultSize),
wxSizerFlags{}.CenterVertical());
m_previewTextWindow = new wxTextCtrl(
m_previewSizer->GetStaticBox(), wxID_ANY, wxString{}, wxDefaultPosition,
wxDefaultSize, wxTE_RICH2 | wxBORDER_THEME | wxTE_BESTWRAP | wxTE_READONLY,
wxGenericValidator(&m_previewText));
gbPreviewSizer->Add(m_previewTextWindow, wxSizerFlags{}.Expand());

m_previewSizer->Add(gbPreviewSizer, wxSizerFlags{ 1 }.Expand().Border());

pseudoTransSizer->Add(m_previewSizer,
wxSizerFlags{}.Expand().Border(wxLEFT | wxBOTTOM | wxRIGHT));

poOptionsSizer->Add(gbSizer, wxSizerFlags{}.Expand().Border());
poOptionsSizer->Add(pseudoTransSizer, wxSizerFlags{}.Expand().Border());
Expand Down
14 changes: 13 additions & 1 deletion src/gui/projectdlg.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ class NewProjectDialog final : public wxDialog
options.m_fuzzyTranslations = UseFuzzyTranslations();
options.m_addPseudoTransBrackets = m_addPseudoTransBrackets;
options.m_pseudoTrack = m_pseudoTrack;
options.m_widthPseudoIncrease = m_widthPseudoIncrease;
options.m_widthPseudoChange = m_widthPseudoChange;
options.m_pseudoTranslationMethod =
static_cast<i18n_check::pseudo_translation_method>(m_pseudoTranslationMethod);
options.m_logMessagesCanBeTranslated = LogMessagesCanBeTranslated();
Expand Down Expand Up @@ -247,6 +247,7 @@ class NewProjectDialog final : public wxDialog
void OnFileButtonClick([[maybe_unused]] wxCommandEvent&);
void OnExcludedFolderButtonClick([[maybe_unused]] wxCommandEvent&);
void OnExcludedFileButtonClick([[maybe_unused]] wxCommandEvent&);
void OnSampleTextChanged([[maybe_unused]] wxCommandEvent&);
void OnOK([[maybe_unused]] wxCommandEvent&);

void OnHelpClicked([[maybe_unused]] wxCommandEvent& event)
Expand Down Expand Up @@ -274,11 +275,17 @@ class NewProjectDialog final : public wxDialog
OnHelpClicked(cmd);
}

void UpdatePseudoTransOptions();

constexpr static int ID_FOLDER_BROWSE_BUTTON = wxID_HIGHEST;
constexpr static int ID_FILE_BROWSE_BUTTON = wxID_HIGHEST + 1;
constexpr static int ID_EXCLUDED_FOLDERS_BROWSE_BUTTON = wxID_HIGHEST + 2;
constexpr static int ID_EXCLUDED_FILES_BROWSE_BUTTON = wxID_HIGHEST + 3;
constexpr static int ID_PSEUDO_METHODS = wxID_HIGHEST + 4;
constexpr static int ID_SAMPLE_TEXT = wxID_HIGHEST + 5;
constexpr static int ID_PSEUDO_BRACKETS_CHECK = wxID_HIGHEST + 6;
constexpr static int ID_PSEUDO_TRACK_IDS_CHECK = wxID_HIGHEST + 7;
constexpr static int ID_PSEUDO_WIDTH_SLIDER = wxID_HIGHEST + 8;

bool m_showFileOptions{ true };

Expand Down Expand Up @@ -327,13 +334,18 @@ class NewProjectDialog final : public wxDialog
// checks
int64_t m_options{ i18n_check::review_style::no_checks };

wxString m_sampleText{ _DT(L"Sample Text") };
wxString m_previewText;

wxCheckBox* m_pseudoSurroundingBracketsCheckbox{ nullptr };
wxCheckBox* m_pseudoTrackCheckbox{ nullptr };
wxStaticText* m_pseudoSliderLabel{ nullptr };
wxStaticText* m_pseudoSliderPercentLabel{ nullptr };
wxSlider* m_pseudoIncreaseSlider{ nullptr };
wxEditableListBox* m_exclusionList{ nullptr };
wxEditableListBox* m_ignoredVarsList{ nullptr };
wxStaticBoxSizer* m_previewSizer{ nullptr };
wxTextCtrl* m_previewTextWindow{ nullptr };
};

/** @}*/
Expand Down

0 comments on commit 7ae7079

Please sign in to comment.