1697 : wxDialog(nullptr, wxID_ANY, option_name, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
1698{
1699 SetBackgroundColour(*wxWHITE);
1700
1701 int border = 10;
1702
1703 wxStaticBoxSizer* sizer = new wxStaticBoxSizer(wxVERTICAL, this);
1704
1705 wxFlexGridSizer* grid_sizer = new wxFlexGridSizer(2, 2, 1, 0);
1706 grid_sizer->SetFlexibleDirection(wxBOTH);
1707 grid_sizer->AddGrowableCol(0,1);
1708 grid_sizer->AddGrowableCol(1,1);
1709 grid_sizer->AddGrowableRow(1,1);
1710
1711 auto add_header = [grid_sizer, border, this](wxString label) {
1713 text->SetFont(this->GetFont().Bold());
1714 grid_sizer->Add(text, 0, wxALL, border);
1715 };
1716
1717 add_header(old_value_header);
1718 add_header(new_value_header);
1719
1720 auto get_set_from_val = [](wxString str) {
1721 if (str.Find("\n") == wxNOT_FOUND)
1722 str.Replace(" ", "\n");
1723
1724 std::set<wxString> str_set;
1725
1726 wxStringTokenizer strings(str, "\n");
1727 while (strings.HasMoreTokens())
1728 str_set.emplace(strings.GetNextToken());
1729
1730 return str_set;
1731 };
1732
1733 std::set<wxString> old_set = get_set_from_val(old_value);
1734 std::set<wxString> new_set = get_set_from_val(new_value);
1735 std::set<wxString> old_new_diff_set;
1736 std::set<wxString> new_old_diff_set;
1737
1738 std::set_difference(old_set.begin(), old_set.end(), new_set.begin(), new_set.end(), std::inserter(old_new_diff_set, old_new_diff_set.begin()));
1739 std::set_difference(new_set.begin(), new_set.end(), old_set.begin(), old_set.end(), std::inserter(new_old_diff_set, new_old_diff_set.begin()));
1740
1741 auto add_value = [grid_sizer, border, this](wxString label, const std::set<wxString>& diff_set, bool is_colored = false) {
1742 wxTextCtrl* text = new wxTextCtrl(this, wxID_ANY, label, wxDefaultPosition, wxSize(400, 400), wxTE_MULTILINE | wxTE_READONLY | wxBORDER_DEFAULT | wxTE_RICH);
1743 wxGetApp().UpdateDarkUI(text);
1744 text->SetStyle(0, label.Len(), wxTextAttr(is_colored ? wxColour(
orange) : wxNullColour, wxNullColour, this->GetFont()));
1745
1746 for (const wxString& str : diff_set) {
1747 int pos = label.First(str);
1748 if (pos == wxNOT_FOUND)
1749 continue;
1750 text->SetStyle(pos, pos + (
int)str.Len(), wxTextAttr(is_colored ? wxColour(
orange) : wxNullColour, wxNullColour, this->GetFont().Bold()));
1751 }
1752
1753 grid_sizer->Add(text, 1, wxALL | wxEXPAND, border);
1754 };
1755 add_value(old_value, old_new_diff_set);
1756 add_value(new_value, new_old_diff_set, true);
1757
1758 sizer->Add(grid_sizer, 1, wxEXPAND);
1759
1760 auto dlg_btns = new DialogButtons(this, {"OK"});
1761
1762 wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL);
1763
1764 topSizer->Add(sizer, 1, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, border);
1765 topSizer->Add(dlg_btns , 0, wxEXPAND);
1766
1767 SetSizer(topSizer);
1768 topSizer->SetSizeHints(this);
1769
1770 wxGetApp().UpdateDlgDarkUI(this);
1771}
class WXDLLIMPEXP_FWD_CORE wxStaticText
Definition ProgressDialog.hpp:30
static std::string orange
Definition UnsavedChangesDialog.cpp:103
Vec3d pos(const Pt &p)
Definition ReprojectPointsOnMesh.hpp:16