diff --git a/include/wx/richtext/richtextborderspage.h b/include/wx/richtext/richtextborderspage.h index d47a863bcd..2bd0f3bedc 100644 --- a/include/wx/richtext/richtextborderspage.h +++ b/include/wx/richtext/richtextborderspage.h @@ -94,7 +94,7 @@ public: ////@begin wxRichTextBordersPage event handler declarations - /// wxEVT_CHECKBOX event handler for ID_RICHTEXT_BORDER_LEFT_CHECKBOX + /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXT_BORDER_LEFT_CHECKBOX void OnRichtextBorderCheckboxClick( wxCommandEvent& event ); /// wxEVT_UPDATE_UI event handler for ID_RICHTEXT_BORDER_LEFT diff --git a/include/wx/richtext/richtextformatdlg.h b/include/wx/richtext/richtextformatdlg.h index acee4238a2..18a91bbceb 100644 --- a/include/wx/richtext/richtextformatdlg.h +++ b/include/wx/richtext/richtextformatdlg.h @@ -224,14 +224,16 @@ public: /// Determines whether tooltips will be shown static void SetShowToolTips(bool show) { sm_showToolTips = show; } - /// Set the dimension into the value and units controls - static void SetDimensionValue(wxTextAttrDimension& dim, wxTextCtrl* valueCtrl, wxComboBox* unitsCtrl, wxCheckBox* checkBox); + /// Set the dimension into the value and units controls. Optionally pass units to + /// specify the ordering of units in the combobox. + static void SetDimensionValue(wxTextAttrDimension& dim, wxTextCtrl* valueCtrl, wxComboBox* unitsCtrl, wxCheckBox* checkBox, wxArrayInt* units = NULL); - /// Get the dimension from the value and units controls - static void GetDimensionValue(wxTextAttrDimension& dim, wxTextCtrl* valueCtrl, wxComboBox* unitsCtrl, wxCheckBox* checkBox); + /// Get the dimension from the value and units controls Optionally pass units to + /// specify the ordering of units in the combobox. + static void GetDimensionValue(wxTextAttrDimension& dim, wxTextCtrl* valueCtrl, wxComboBox* unitsCtrl, wxCheckBox* checkBox, wxArrayInt* units = NULL); - /// Convert CM to MM - static bool ConvertFromString(const wxString& string, int& ret, int scale); + /// Convert from a string to a dimension integer. + static bool ConvertFromString(const wxString& str, int& ret, int unit); /// Map book control page index to our page id void AddPageId(int id) { m_pageIds.Add(id); } diff --git a/include/wx/richtext/richtextimagedlg.h b/include/wx/richtext/richtextimagedlg.h index e7e5bf25fe..96d67aecc0 100644 --- a/include/wx/richtext/richtextimagedlg.h +++ b/include/wx/richtext/richtextimagedlg.h @@ -34,13 +34,11 @@ class WXDLLIMPEXP_FWD_CORE wxTextCtrl; * Control identifiers */ -////@begin control identifiers #define SYMBOL_WXRICHTEXTOBJECTPROPERTIESDIALOG_STYLE wxDEFAULT_DIALOG_STYLE|wxTAB_TRAVERSAL #define SYMBOL_WXRICHTEXTOBJECTPROPERTIESDIALOG_TITLE wxGetTranslation("Object Properties") #define SYMBOL_WXRICHTEXTOBJECTPROPERTIESDIALOG_IDNAME ID_RICHTEXTOBJECTPROPERTIESDIALOG #define SYMBOL_WXRICHTEXTOBJECTPROPERTIESDIALOG_SIZE wxSize(400, 300) #define SYMBOL_WXRICHTEXTOBJECTPROPERTIESDIALOG_POSITION wxDefaultPosition -////@end control identifiers /*! * wxRichTextObjectPropertiesDialog class declaration diff --git a/include/wx/richtext/richtextstyledlg.h b/include/wx/richtext/richtextstyledlg.h index d8bea2630e..f3d002bae6 100644 --- a/include/wx/richtext/richtextstyledlg.h +++ b/include/wx/richtext/richtextstyledlg.h @@ -42,13 +42,11 @@ class WXDLLIMPEXP_FWD_CORE wxCheckBox; * Control identifiers */ -////@begin control identifiers #define SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_STYLE wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX #define SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_TITLE wxGetTranslation("Style Organiser") #define SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_IDNAME ID_RICHTEXTSTYLEORGANISERDIALOG #define SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_SIZE wxSize(400, 300) #define SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_POSITION wxDefaultPosition -////@end control identifiers /*! * Flags for specifying permitted operations diff --git a/src/richtext/richtextborderspage.cpp b/src/richtext/richtextborderspage.cpp index 40f66d419a..7e9231f3ab 100644 --- a/src/richtext/richtextborderspage.cpp +++ b/src/richtext/richtextborderspage.cpp @@ -40,85 +40,45 @@ BEGIN_EVENT_TABLE( wxRichTextBordersPage, wxRichTextDialogPage ) ////@begin wxRichTextBordersPage event table entries EVT_CHECKBOX( ID_RICHTEXT_BORDER_LEFT_CHECKBOX, wxRichTextBordersPage::OnRichtextBorderCheckboxClick ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_LEFT, wxRichTextBordersPage::OnRichtextBorderLeftUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_LEFT_UNITS, wxRichTextBordersPage::OnRichtextBorderLeftUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_LEFT_STYLE, wxRichTextBordersPage::OnRichtextBorderLeftUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_LEFT_COLOUR, wxRichTextBordersPage::OnRichtextBorderLeftUpdate ) - EVT_CHECKBOX( ID_RICHTEXT_BORDER_RIGHT_CHECKBOX, wxRichTextBordersPage::OnRichtextBorderCheckboxClick ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_RIGHT, wxRichTextBordersPage::OnRichtextBorderRightUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_RIGHT_UNITS, wxRichTextBordersPage::OnRichtextBorderRightUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_RIGHT_STYLE, wxRichTextBordersPage::OnRichtextBorderRightUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_RIGHT_COLOUR, wxRichTextBordersPage::OnRichtextBorderRightUpdate ) - EVT_CHECKBOX( ID_RICHTEXT_BORDER_TOP_CHECKBOX, wxRichTextBordersPage::OnRichtextBorderCheckboxClick ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_TOP, wxRichTextBordersPage::OnRichtextBorderTopUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_TOP_UNITS, wxRichTextBordersPage::OnRichtextBorderTopUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_TOP_STYLE, wxRichTextBordersPage::OnRichtextBorderTopUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_TOP_COLOUR, wxRichTextBordersPage::OnRichtextBorderTopUpdate ) - EVT_CHECKBOX( ID_RICHTEXT_BORDER_BOTTOM_CHECKBOX, wxRichTextBordersPage::OnRichtextBorderCheckboxClick ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_BOTTOM, wxRichTextBordersPage::OnRichtextBorderBottomUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_BOTTOM_UNITS, wxRichTextBordersPage::OnRichtextBorderBottomUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_BOTTOM_STYLE, wxRichTextBordersPage::OnRichtextBorderBottomUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_BORDER_BOTTOM_COLOUR, wxRichTextBordersPage::OnRichtextBorderBottomUpdate ) - EVT_CHECKBOX( ID_RICHTEXT_OUTLINE_LEFT_CHECKBOX, wxRichTextBordersPage::OnRichtextBorderCheckboxClick ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_LEFT, wxRichTextBordersPage::OnRichtextOutlineLeftUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_LEFT_UNITS, wxRichTextBordersPage::OnRichtextOutlineLeftUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_LEFT_STYLE, wxRichTextBordersPage::OnRichtextOutlineLeftUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_LEFT_COLOUR, wxRichTextBordersPage::OnRichtextOutlineLeftUpdate ) - EVT_CHECKBOX( ID_RICHTEXT_OUTLINE_RIGHT_CHECKBOX, wxRichTextBordersPage::OnRichtextBorderCheckboxClick ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_RIGHT, wxRichTextBordersPage::OnRichtextOutlineRightUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_RIGHT_UNITS, wxRichTextBordersPage::OnRichtextOutlineRightUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_RIGHT_STYLE, wxRichTextBordersPage::OnRichtextOutlineRightUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_RIGHT_COLOUR, wxRichTextBordersPage::OnRichtextOutlineRightUpdate ) - EVT_CHECKBOX( ID_RICHTEXT_OUTLINE_TOP_CHECKBOX, wxRichTextBordersPage::OnRichtextBorderCheckboxClick ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_TOP, wxRichTextBordersPage::OnRichtextOutlineTopUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_TOP_UNITS, wxRichTextBordersPage::OnRichtextOutlineTopUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_TOP_STYLE, wxRichTextBordersPage::OnRichtextOutlineTopUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_TOP_COLOUR, wxRichTextBordersPage::OnRichtextOutlineTopUpdate ) - EVT_CHECKBOX( ID_RICHTEXT_OUTLINE_BOTTOM_CHECKBOX, wxRichTextBordersPage::OnRichtextBorderCheckboxClick ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_BOTTOM, wxRichTextBordersPage::OnRichtextOutlineBottomUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_BOTTOM_UNITS, wxRichTextBordersPage::OnRichtextOutlineBottomUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_BOTTOM_STYLE, wxRichTextBordersPage::OnRichtextOutlineBottomUpdate ) - EVT_UPDATE_UI( ID_RICHTEXT_OUTLINE_BOTTOM_COLOUR, wxRichTextBordersPage::OnRichtextOutlineBottomUpdate ) - ////@end wxRichTextBordersPage event table entries END_EVENT_TABLE() @@ -278,6 +238,7 @@ void wxRichTextBordersPage::CreateControls() wxArrayString m_leftBorderWidthUnitsStrings; m_leftBorderWidthUnitsStrings.Add(_("px")); m_leftBorderWidthUnitsStrings.Add(_("cm")); + m_leftBorderWidthUnitsStrings.Add(_("pt")); m_leftBorderWidthUnits = new wxComboBox( itemPanel5, ID_RICHTEXT_BORDER_LEFT_UNITS, _("px"), wxDefaultPosition, wxSize(60, -1), m_leftBorderWidthUnitsStrings, wxCB_READONLY ); m_leftBorderWidthUnits->SetStringSelection(_("px")); m_leftBorderWidthUnits->SetHelpText(_("Units for the left border width.")); @@ -308,6 +269,7 @@ void wxRichTextBordersPage::CreateControls() wxArrayString m_rightBorderWidthUnitsStrings; m_rightBorderWidthUnitsStrings.Add(_("px")); m_rightBorderWidthUnitsStrings.Add(_("cm")); + m_rightBorderWidthUnitsStrings.Add(_("pt")); m_rightBorderWidthUnits = new wxComboBox( itemPanel5, ID_RICHTEXT_BORDER_RIGHT_UNITS, _("px"), wxDefaultPosition, wxSize(60, -1), m_rightBorderWidthUnitsStrings, wxCB_READONLY ); m_rightBorderWidthUnits->SetStringSelection(_("px")); m_rightBorderWidthUnits->SetHelpText(_("Units for the right border width.")); @@ -338,6 +300,7 @@ void wxRichTextBordersPage::CreateControls() wxArrayString m_topBorderWidthUnitsStrings; m_topBorderWidthUnitsStrings.Add(_("px")); m_topBorderWidthUnitsStrings.Add(_("cm")); + m_topBorderWidthUnitsStrings.Add(_("pt")); m_topBorderWidthUnits = new wxComboBox( itemPanel5, ID_RICHTEXT_BORDER_TOP_UNITS, _("px"), wxDefaultPosition, wxSize(60, -1), m_topBorderWidthUnitsStrings, wxCB_READONLY ); m_topBorderWidthUnits->SetStringSelection(_("px")); m_topBorderWidthUnits->SetHelpText(_("Units for the top border width.")); @@ -368,6 +331,7 @@ void wxRichTextBordersPage::CreateControls() wxArrayString m_bottomBorderWidthUnitsStrings; m_bottomBorderWidthUnitsStrings.Add(_("px")); m_bottomBorderWidthUnitsStrings.Add(_("cm")); + m_bottomBorderWidthUnitsStrings.Add(_("pt")); m_bottomBorderWidthUnits = new wxComboBox( itemPanel5, ID_RICHTEXT_BORDER_BOTTOM_UNITS, _("px"), wxDefaultPosition, wxSize(60, -1), m_bottomBorderWidthUnitsStrings, wxCB_READONLY ); m_bottomBorderWidthUnits->SetStringSelection(_("px")); m_bottomBorderWidthUnits->SetHelpText(_("Units for the bottom border width.")); @@ -422,6 +386,7 @@ void wxRichTextBordersPage::CreateControls() wxArrayString m_leftOutlineWidthUnitsStrings; m_leftOutlineWidthUnitsStrings.Add(_("px")); m_leftOutlineWidthUnitsStrings.Add(_("cm")); + m_leftOutlineWidthUnitsStrings.Add(_("pt")); m_leftOutlineWidthUnits = new wxComboBox( itemPanel46, ID_RICHTEXT_OUTLINE_LEFT_UNITS, _("px"), wxDefaultPosition, wxSize(60, -1), m_leftOutlineWidthUnitsStrings, wxCB_READONLY ); m_leftOutlineWidthUnits->SetStringSelection(_("px")); m_leftOutlineWidthUnits->SetHelpText(_("Units for the left outline width.")); @@ -452,6 +417,7 @@ void wxRichTextBordersPage::CreateControls() wxArrayString m_rightOutlineWidthUnitsStrings; m_rightOutlineWidthUnitsStrings.Add(_("px")); m_rightOutlineWidthUnitsStrings.Add(_("cm")); + m_rightOutlineWidthUnitsStrings.Add(_("pt")); m_rightOutlineWidthUnits = new wxComboBox( itemPanel46, ID_RICHTEXT_OUTLINE_RIGHT_UNITS, _("px"), wxDefaultPosition, wxSize(60, -1), m_rightOutlineWidthUnitsStrings, wxCB_READONLY ); m_rightOutlineWidthUnits->SetStringSelection(_("px")); m_rightOutlineWidthUnits->SetHelpText(_("Units for the right outline width.")); @@ -482,6 +448,7 @@ void wxRichTextBordersPage::CreateControls() wxArrayString m_topOutlineWidthUnitsStrings; m_topOutlineWidthUnitsStrings.Add(_("px")); m_topOutlineWidthUnitsStrings.Add(_("cm")); + m_topOutlineWidthUnitsStrings.Add(_("pt")); m_topOutlineWidthUnits = new wxComboBox( itemPanel46, ID_RICHTEXT_OUTLINE_TOP_UNITS, _("px"), wxDefaultPosition, wxSize(60, -1), m_topOutlineWidthUnitsStrings, wxCB_READONLY ); m_topOutlineWidthUnits->SetStringSelection(_("px")); m_topOutlineWidthUnits->SetHelpText(_("Units for the top outline width.")); @@ -512,6 +479,7 @@ void wxRichTextBordersPage::CreateControls() wxArrayString m_bottomOutlineWidthUnitsStrings; m_bottomOutlineWidthUnitsStrings.Add(_("px")); m_bottomOutlineWidthUnitsStrings.Add(_("cm")); + m_bottomOutlineWidthUnitsStrings.Add(_("pt")); m_bottomOutlineWidthUnits = new wxComboBox( itemPanel46, ID_RICHTEXT_OUTLINE_BOTTOM_UNITS, _("px"), wxDefaultPosition, wxSize(60, -1), m_bottomOutlineWidthUnitsStrings, wxCB_READONLY ); m_bottomOutlineWidthUnits->SetStringSelection(_("px")); m_bottomOutlineWidthUnits->SetHelpText(_("Units for the bottom outline width.")); @@ -648,14 +616,20 @@ void wxRichTextBordersPage::SetBorderValue(wxTextAttrBorder& border, /* wxTextAt if (!border.IsValid()) { checkBox->Set3StateValue(wxCHK_UNDETERMINED); - widthValueCtrl->SetValue(wxT("1")); + widthValueCtrl->SetValue(wxT("0")); widthUnitsCtrl->SetSelection(0); colourCtrl->SetColour(*wxBLACK); styleCtrl->SetSelection(0); } else { - wxRichTextFormattingDialog::SetDimensionValue(border.GetWidth(), widthValueCtrl, widthUnitsCtrl, checkBox); + wxArrayInt units; + units.Add(wxTEXT_ATTR_UNITS_PIXELS); + units.Add(wxTEXT_ATTR_UNITS_TENTHS_MM); + units.Add(wxTEXT_ATTR_UNITS_HUNDREDTHS_POINT); + + wxRichTextFormattingDialog::SetDimensionValue(border.GetWidth(), widthValueCtrl, widthUnitsCtrl, checkBox, + & units); int sel = borderStyles.Index(border.GetStyle()); if (sel == -1) @@ -674,7 +648,13 @@ void wxRichTextBordersPage::SetBorderValue(wxTextAttrBorder& border, /* wxTextAt void wxRichTextBordersPage::GetBorderValue(wxTextAttrBorder& border, /* wxTextAttrBorder& borderToReset, */ wxTextCtrl* widthValueCtrl, wxComboBox* widthUnitsCtrl, wxCheckBox* checkBox, wxComboBox* styleCtrl, wxRichTextColourSwatchCtrl* colourCtrl, const wxArrayInt& borderStyles) { - wxRichTextFormattingDialog::GetDimensionValue(border.GetWidth(), widthValueCtrl, widthUnitsCtrl, checkBox); + wxArrayInt units; + units.Add(wxTEXT_ATTR_UNITS_PIXELS); + units.Add(wxTEXT_ATTR_UNITS_TENTHS_MM); + units.Add(wxTEXT_ATTR_UNITS_HUNDREDTHS_POINT); + + wxRichTextFormattingDialog::GetDimensionValue(border.GetWidth(), widthValueCtrl, widthUnitsCtrl, checkBox, + & units); int sel = styleCtrl->GetSelection(); border.SetColour(colourCtrl->GetColour()); diff --git a/src/richtext/richtextdialogs.pjd b/src/richtext/richtextdialogs.pjd index 3fd5b12901..df1cf7d8fb 100644 --- a/src/richtext/richtextdialogs.pjd +++ b/src/richtext/richtextdialogs.pjd @@ -15161,6 +15161,14 @@ "wbBoxSizerProxy" "Vertical" "" + "Centre" + "Centre" + 0 + 5 + 1 + 1 + 1 + 1 0 0 0 @@ -22634,14 +22642,6 @@ "wbBoxSizerProxy" "Vertical" "" - "Centre" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 0 0 0 @@ -23303,7 +23303,7 @@ "" "" "m_leftBorderWidthUnits" - "px|cm" + "px|cm|pt" "px" "Units for the left border width." "" @@ -23734,7 +23734,7 @@ "" "" "m_rightBorderWidthUnits" - "px|cm" + "px|cm|pt" "px" "Units for the right border width." "" @@ -24165,7 +24165,7 @@ "" "" "m_topBorderWidthUnits" - "px|cm" + "px|cm|pt" "px" "Units for the top border width." "" @@ -24596,7 +24596,7 @@ "" "" "m_bottomBorderWidthUnits" - "px|cm" + "px|cm|pt" "px" "Units for the bottom border width." "" @@ -25392,7 +25392,7 @@ "" "" "m_leftOutlineWidthUnits" - "px|cm" + "px|cm|pt" "px" "Units for the left outline width." "" @@ -25823,7 +25823,7 @@ "" "" "m_rightOutlineWidthUnits" - "px|cm" + "px|cm|pt" "px" "Units for the right outline width." "" @@ -26254,7 +26254,7 @@ "" "" "m_topOutlineWidthUnits" - "px|cm" + "px|cm|pt" "px" "Units for the top outline width." "" @@ -26685,7 +26685,7 @@ "" "" "m_bottomOutlineWidthUnits" - "px|cm" + "px|cm|pt" "px" "Units for the bottom outline width." "" diff --git a/src/richtext/richtextformatdlg.cpp b/src/richtext/richtextformatdlg.cpp index fc44348c27..3852637221 100644 --- a/src/richtext/richtextformatdlg.cpp +++ b/src/richtext/richtextformatdlg.cpp @@ -592,7 +592,7 @@ wxRichTextStyleDefinition* wxRichTextFormattingDialog::GetDialogStyleDefinition( return NULL; } -void wxRichTextFormattingDialog::SetDimensionValue(wxTextAttrDimension& dim, wxTextCtrl* valueCtrl, wxComboBox* unitsCtrl, wxCheckBox* checkBox) +void wxRichTextFormattingDialog::SetDimensionValue(wxTextAttrDimension& dim, wxTextCtrl* valueCtrl, wxComboBox* unitsCtrl, wxCheckBox* checkBox, wxArrayInt* units) { int unitsIdx = 0; @@ -602,37 +602,52 @@ void wxRichTextFormattingDialog::SetDimensionValue(wxTextAttrDimension& dim, wxT checkBox->SetValue(false); valueCtrl->SetValue(wxT("0")); unitsCtrl->SetSelection(0); -#if 0 - dim.SetValue(0); - dim.SetUnits(wxTEXT_ATTR_UNITS_PIXELS); -#endif } else { if (checkBox) checkBox->SetValue(true); - if (dim.GetUnits() == wxTEXT_ATTR_UNITS_TENTHS_MM) + + if (dim.GetUnits() == wxTEXT_ATTR_UNITS_PIXELS) { - unitsIdx = 1; + unitsIdx = 0; // By default, the 1st in the list. + valueCtrl->SetValue(wxString::Format(wxT("%d"), (int) dim.GetValue())); + } + else if (dim.GetUnits() == wxTEXT_ATTR_UNITS_TENTHS_MM) + { + unitsIdx = 1; // By default, the 2nd in the list. float value = float(dim.GetValue()) / 100.0; valueCtrl->SetValue(wxString::Format(wxT("%.2f"), value)); } else if (dim.GetUnits() == wxTEXT_ATTR_UNITS_PERCENTAGE) { - unitsIdx = 2; + unitsIdx = 2; // By default, the 3rd in the list. valueCtrl->SetValue(wxString::Format(wxT("%d"), (int) dim.GetValue())); } - else + else if (dim.GetUnits() == wxTEXT_ATTR_UNITS_HUNDREDTHS_POINT) { - unitsIdx = 0; + unitsIdx = 3; // By default, the 4th in the list. + float value = float(dim.GetValue()) / 100.0; + valueCtrl->SetValue(wxString::Format(wxT("%.2f"), value)); + } + else if (dim.GetUnits() == wxTEXT_ATTR_UNITS_POINTS) + { + unitsIdx = 3; // By default, the 4th in the list (we don't have points and hundredths of points in the same list) valueCtrl->SetValue(wxString::Format(wxT("%d"), (int) dim.GetValue())); } + + if (units) + { + unitsIdx = units->Index(dim.GetUnits()); + if (unitsIdx == -1) + unitsIdx = 0; + } unitsCtrl->SetSelection(unitsIdx); } } -void wxRichTextFormattingDialog::GetDimensionValue(wxTextAttrDimension& dim, wxTextCtrl* valueCtrl, wxComboBox* unitsCtrl, wxCheckBox* checkBox) +void wxRichTextFormattingDialog::GetDimensionValue(wxTextAttrDimension& dim, wxTextCtrl* valueCtrl, wxComboBox* unitsCtrl, wxCheckBox* checkBox, wxArrayInt* units) { if (checkBox && !checkBox->GetValue()) { @@ -640,12 +655,22 @@ void wxRichTextFormattingDialog::GetDimensionValue(wxTextAttrDimension& dim, wxT } else { - if (unitsCtrl->GetSelection() == 1) - dim.SetUnits(wxTEXT_ATTR_UNITS_TENTHS_MM); - else if (unitsCtrl->GetSelection() == 2) - dim.SetUnits(wxTEXT_ATTR_UNITS_PERCENTAGE); + if (units) + { + int unit = (*units)[unitsCtrl->GetSelection()]; + dim.SetUnits((wxTextAttrUnits) unit); + } else - dim.SetUnits(wxTEXT_ATTR_UNITS_PIXELS); + { + if (unitsCtrl->GetSelection() == 0) + dim.SetUnits(wxTEXT_ATTR_UNITS_PIXELS); + else if (unitsCtrl->GetSelection() == 1) + dim.SetUnits(wxTEXT_ATTR_UNITS_TENTHS_MM); + else if (unitsCtrl->GetSelection() == 2) + dim.SetUnits(wxTEXT_ATTR_UNITS_PERCENTAGE); + else if (unitsCtrl->GetSelection() == 3) + dim.SetUnits(wxTEXT_ATTR_UNITS_HUNDREDTHS_POINT); + } int value = 0; if (ConvertFromString(valueCtrl->GetValue(), value, dim.GetUnits())) @@ -653,32 +678,42 @@ void wxRichTextFormattingDialog::GetDimensionValue(wxTextAttrDimension& dim, wxT } } -bool wxRichTextFormattingDialog::ConvertFromString(const wxString& string, int& ret, int scale) +bool wxRichTextFormattingDialog::ConvertFromString(const wxString& str, int& ret, int unit) { - const wxChar* chars = string.GetData(); - int remain = 2; - bool dot = false; - ret = 0; - - for (unsigned int i = 0; i < string.Len() && remain; i++) + if (unit == wxTEXT_ATTR_UNITS_PIXELS) { - if (!(chars[i] >= wxT('0') && chars[i] <= wxT('9')) && !(scale == wxTEXT_ATTR_UNITS_TENTHS_MM && chars[i] == wxT('.'))) - return false; - - if (chars[i] == wxT('.')) - { - dot = true; - continue; - } - - if (dot) - remain--; - - ret = ret * 10 + chars[i] - wxT('0'); + ret = wxAtoi(str); + return true; + } + else if (unit == wxTEXT_ATTR_UNITS_TENTHS_MM) + { + float value = 0.0; + wxSscanf(str.c_str(), wxT("%f"), &value); + // Convert from cm + ret = (int) ((value * 100.0) + 0.5); + return true; + } + else if (unit == wxTEXT_ATTR_UNITS_PERCENTAGE) + { + ret = wxAtoi(str); + return true; + } + else if (unit == wxTEXT_ATTR_UNITS_HUNDREDTHS_POINT) + { + float value = 0.0; + wxSscanf(str.c_str(), wxT("%f"), &value); + ret = (int) ((value * 100.0) + 0.5); + } + else if (unit == wxTEXT_ATTR_UNITS_POINTS) + { + ret = wxAtoi(str); + return true; + } + else + { + ret = 0; + return false; } - - while (remain-- > 0 && scale == wxTEXT_ATTR_UNITS_TENTHS_MM) - ret *= 10; return true; }