[2/2] wordpad: Sort tab stops by numeric value rather than as string.

Dylan Smith dylan.ah.smith at gmail.com
Wed Feb 25 14:15:25 CST 2009


The bug could be seen by inserting tabs stops 1cm, 2cm, & 10cm.  The
10cm tab stop would be inserted before 2cm since the comparison isn't
based on the numeric value.

This patch fixes this by taking out the sort style, and then sorts the
string using their value in twips.  The position in the combobox is
searched for using a linear search, and placed in the combobox if there
isn't a duplicate value at the position.
---
 programs/wordpad/Da.rc     |    2 +-
 programs/wordpad/De.rc     |    2 +-
 programs/wordpad/En.rc     |    2 +-
 programs/wordpad/Fr.rc     |    2 +-
 programs/wordpad/Hu.rc     |    2 +-
 programs/wordpad/Ja.rc     |    2 +-
 programs/wordpad/Ko.rc     |    2 +-
 programs/wordpad/Nl.rc     |    2 +-
 programs/wordpad/No.rc     |    2 +-
 programs/wordpad/Pl.rc     |    2 +-
 programs/wordpad/Pt.rc     |    2 +-
 programs/wordpad/Ru.rc     |    2 +-
 programs/wordpad/Si.rc     |    2 +-
 programs/wordpad/Sv.rc     |    2 +-
 programs/wordpad/Tr.rc     |    2 +-
 programs/wordpad/Zh.rc     |    4 ++--
 programs/wordpad/wordpad.c |   22 ++++++++++++++++++++--
 17 files changed, 37 insertions(+), 19 deletions(-)
-------------- next part --------------
diff --git a/programs/wordpad/Da.rc b/programs/wordpad/Da.rc
index 8af9080..d09e90f 100644
--- a/programs/wordpad/Da.rc
+++ b/programs/wordpad/Da.rc
@@ -150,7 +150,7 @@ Caption "Tabulatorer"
 FONT 8, "MS SHell DLg"
 BEGIN
     GROUPBOX "Tabulatorstop", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "&Tilf?j", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "&Fjern", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/De.rc b/programs/wordpad/De.rc
index 9e748c2..5b4b176 100644
--- a/programs/wordpad/De.rc
+++ b/programs/wordpad/De.rc
@@ -152,7 +152,7 @@ Caption "Tabstopps"
 FONT 8, "MS SHell DLg"
 BEGIN
     GROUPBOX "Tabstoppposition", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "&Festlegen", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "&L??schen", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/En.rc b/programs/wordpad/En.rc
index d1cfa5a..dd099e1 100644
--- a/programs/wordpad/En.rc
+++ b/programs/wordpad/En.rc
@@ -150,7 +150,7 @@ Caption "Tabs"
 FONT 8, "MS SHell DLg"
 BEGIN
     GROUPBOX "Tab stops", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "&Add", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "&Remove", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/Fr.rc b/programs/wordpad/Fr.rc
index b26d696..459dd0e 100644
--- a/programs/wordpad/Fr.rc
+++ b/programs/wordpad/Fr.rc
@@ -150,7 +150,7 @@ Caption "Tabulations"
 FONT 8, "MS SHell DLg"
 BEGIN
     GROUPBOX "Arr?ts de tabulation", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "&Ajouter", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "&Supprimer", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/Hu.rc b/programs/wordpad/Hu.rc
index 42933a1..94ceda5 100644
--- a/programs/wordpad/Hu.rc
+++ b/programs/wordpad/Hu.rc
@@ -150,7 +150,7 @@ Caption "Tabs"
 FONT 8, "MS SHell DLg"
 BEGIN
     GROUPBOX "Tab stops", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "&Add", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "&Remove", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/Ja.rc b/programs/wordpad/Ja.rc
index 6133a4a..09e48aa 100644
--- a/programs/wordpad/Ja.rc
+++ b/programs/wordpad/Ja.rc
@@ -153,7 +153,7 @@ CAPTION "???????????????"
 FONT 9, "MS Shell Dlg"
 BEGIN
     GROUPBOX "?????????????????????(&T)", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "??????(&A)", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "??????(&R)", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/Ko.rc b/programs/wordpad/Ko.rc
index 6ea4e46..79885f5 100644
--- a/programs/wordpad/Ko.rc
+++ b/programs/wordpad/Ko.rc
@@ -152,7 +152,7 @@ Caption "
 FONT 9, "MS Shell Dlg"
 BEGIN
     GROUPBOX "?? ????", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "??????(&A)", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "??????(&R)", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "????(&O)", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/Nl.rc b/programs/wordpad/Nl.rc
index a0a405e..3c82c7e 100644
--- a/programs/wordpad/Nl.rc
+++ b/programs/wordpad/Nl.rc
@@ -151,7 +151,7 @@ Caption "Tabs"
 FONT 8, "MS SHell DLg"
 BEGIN
     GROUPBOX "Tab stops", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "&Toevoegen", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "&Verwijderen", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/No.rc b/programs/wordpad/No.rc
index b34973e..6261c6f 100644
--- a/programs/wordpad/No.rc
+++ b/programs/wordpad/No.rc
@@ -150,7 +150,7 @@ Caption "Tabulatorer"
 FONT 8, "MS SHell DLg"
 BEGIN
     GROUPBOX "Tabulatorstopp", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "&Legg til", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "&Fjern", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/Pl.rc b/programs/wordpad/Pl.rc
index 590d9a7..47ff1bd 100644
--- a/programs/wordpad/Pl.rc
+++ b/programs/wordpad/Pl.rc
@@ -151,7 +151,7 @@ Caption "Tabulatory"
 FONT 8, "MS Shell Dlg"
 BEGIN
     GROUPBOX "Pozycje tabulator?w", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "&Dodaj", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "&Usu?", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&OK", IDOK, 137, 15, 57, 15
diff --git a/programs/wordpad/Pt.rc b/programs/wordpad/Pt.rc
index a263f4c..b246c70 100644
--- a/programs/wordpad/Pt.rc
+++ b/programs/wordpad/Pt.rc
@@ -152,7 +152,7 @@ Caption "Tabula
 FONT 8, "MS SHell DLg"
 BEGIN
     GROUPBOX "Marca de tabula??o", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "&Adicionar", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "&Remover", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&OK", IDOK, 135, 15, 55, 15
diff --git a/programs/wordpad/Ru.rc b/programs/wordpad/Ru.rc
index f25a688..e437199 100644
--- a/programs/wordpad/Ru.rc
+++ b/programs/wordpad/Ru.rc
@@ -150,7 +150,7 @@ Caption "
 FONT 8, "MS SHell DLg"
 BEGIN
     GROUPBOX "??????? ?????????", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "&??????????", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "?&???????", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&??", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/Si.rc b/programs/wordpad/Si.rc
index de7726c..3be81b8 100644
--- a/programs/wordpad/Si.rc
+++ b/programs/wordpad/Si.rc
@@ -152,7 +152,7 @@ Caption "Tabulatorji"
 FONT 8, "MS SHell DLg"
 BEGIN
     GROUPBOX "Polo??aji tabulatorja", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "&Dodaj", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "&Odstrani", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&V redu", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/Sv.rc b/programs/wordpad/Sv.rc
index 565f9f7..d56cc06 100644
--- a/programs/wordpad/Sv.rc
+++ b/programs/wordpad/Sv.rc
@@ -152,7 +152,7 @@ Caption "Tabulatorer"
 FONT 8, "MS Shell Dlg"
 BEGIN
     GROUPBOX "Tabulatorstopp", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "L??gg &till", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "Ta &bort", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/Tr.rc b/programs/wordpad/Tr.rc
index 1822620..bf0eefd 100644
--- a/programs/wordpad/Tr.rc
+++ b/programs/wordpad/Tr.rc
@@ -152,7 +152,7 @@ Caption "Tabs"
 FONT 8, "MS SHell DLg"
 BEGIN
     GROUPBOX "Tab stops", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "&Add", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "&Remove", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/Zh.rc b/programs/wordpad/Zh.rc
index 2c9a536..5c11ab7 100644
--- a/programs/wordpad/Zh.rc
+++ b/programs/wordpad/Zh.rc
@@ -155,7 +155,7 @@ Caption "??????"
 FONT 9, "MS Shell Dlg"
 BEGIN
     GROUPBOX "????????????", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "??????(&A)", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "??????(&R)", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "??????(&O)", IDOK, 137, 15, 50, 15
@@ -380,7 +380,7 @@ Caption "??????"
 FONT 9, "MS Shell Dlg"
 BEGIN
     GROUPBOX "????????????", -1, 10, 10, 120, 90
-    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT
+    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
     DEFPUSHBUTTON "??????(&A)", ID_TAB_ADD, 20, 80, 45, 15
     PUSHBUTTON "??????(&R)", ID_TAB_DEL, 72, 80, 45, 15
     PUSHBUTTON "??????(&O)", IDOK, 137, 15, 50, 15
diff --git a/programs/wordpad/wordpad.c b/programs/wordpad/wordpad.c
index f2ec4c5..c74d140 100644
--- a/programs/wordpad/wordpad.c
+++ b/programs/wordpad/wordpad.c
@@ -1646,8 +1646,26 @@ static INT_PTR CALLBACK tabstops_proc(HWND hWnd, UINT message, WPARAM wParam, LP
                                 MessageBoxWithResStringW(hWnd, MAKEINTRESOURCEW(STRING_MAX_TAB_STOPS),
                                              wszAppTitle, MB_OK | MB_ICONINFORMATION);
                             } else {
-                                SendMessageW(hTabWnd, CB_ADDSTRING, 0, (LPARAM)&buffer);
-                                SetWindowTextW(hTabWnd, 0);
+                                int i;
+                                float next_number = -1;
+                                int next_number_in_twips = -1;
+                                int insert_number = current_units_to_twips(number);
+
+                                /* linear search for position to insert the string */
+                                for(i = 0; i < item_count; i++)
+                                {
+                                    SendMessageW(hTabWnd, CB_GETLBTEXT, i, (LPARAM)&buffer);
+                                    number_from_string(buffer, &next_number, TRUE);
+                                    next_number_in_twips = current_units_to_twips(next_number);
+                                    if (insert_number <= next_number_in_twips)
+                                        break;
+                                }
+                                if (insert_number != next_number_in_twips)
+                                {
+                                    number_with_units(buffer, insert_number);
+                                    SendMessageW(hTabWnd, CB_INSERTSTRING, i, (LPARAM)&buffer);
+                                    SetWindowTextW(hTabWnd, 0);
+                                }
                             }
                         }
                         SetFocus(hTabWnd);


More information about the wine-patches mailing list