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

Dylan Smith dylan.ah.smith at gmail.com
Tue Feb 24 21:16:57 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 bd3358f..db55770 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 e0193ac..58c4c0a 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 21a3808..e01719c 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 b2a0fc7..a3926ce 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 4967517..a6f9c20 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 6ded572..fd938da 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 cfe2185..920df0a 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 14c07fe..24386b1 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 0fdadb9..416f655 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 1456571..18df929 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 61f0e7f..bfe9594 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 bb3f749..e21ad5c 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 e14a7e3..1b2b485 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 ce26f04..d3c5e37 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 399776d..ec08605 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