When using quick-sorting in the edit grid, update existing column sorts rather than...
authordpage <dpage@a7884b65-44f6-0310-8a51-81a127f17b15>
Mon, 11 Feb 2008 11:32:59 +0000 (11:32 +0000)
committerdpage <dpage@a7884b65-44f6-0310-8a51-81a127f17b15>
Mon, 11 Feb 2008 11:32:59 +0000 (11:32 +0000)
git-svn-id: svn://svn.pgadmin.org/trunk/pgadmin3@7070 a7884b65-44f6-0310-8a51-81a127f17b15

pgadmin/frm/frmEditGrid.cpp

index 61e694d782e34ee65e3f3568b7543d4fb0751fa3..db09bb22c01a248ec603314ea3c8e2f3af6c94f3 100644 (file)
@@ -563,16 +563,31 @@ void frmEditGrid::OnAscSort(wxCommandEvent &ev)
        
        sqlTable *table=sqlGrid->GetTable();
        wxString column_label = qtIdent(table->GetColLabelValueUnformatted(curcol));
+       wxString old_sort_string = GetSortCols().Trim();
        wxString new_sort_string;
        
-       size_t old_sort_string_length = GetSortCols().Trim().Len();
-       
-       if (old_sort_string_length > 0) {
-               new_sort_string = GetSortCols().Trim() + wxT(" , ");
+       if (old_sort_string.Find(column_label) == wxNOT_FOUND)
+       {
+               if (old_sort_string.Len() > 0)
+                       new_sort_string = old_sort_string + wxT(" , ");
+
+               new_sort_string += column_label + wxT(" ASC ");
+       } 
+       else
+       {
+               if (old_sort_string.Find(column_label + wxT(" ASC")) == wxNOT_FOUND)
+               {
+                       // Previous occurrence was for DESCENDING sort
+                       new_sort_string = old_sort_string;
+                       new_sort_string.Replace(column_label + wxT(" DESC"), column_label + wxT(" ASC"));
+               }
+               else
+               {
+                       // Previous occurrence was for ASCENDING sort. Nothing to do
+                       new_sort_string = old_sort_string;
+               }
        }
-       
-       new_sort_string += column_label + wxT(" ASC ");
-       
+
        SetSortCols(new_sort_string);
        
        Go();
@@ -585,18 +600,33 @@ void frmEditGrid::OnDescSort(wxCommandEvent &ev)
        
        sqlTable *table=sqlGrid->GetTable();
        wxString column_label = qtIdent(table->GetColLabelValueUnformatted(curcol));
+       wxString old_sort_string = GetSortCols().Trim();
        wxString new_sort_string;
        
-       size_t old_sort_string_length = GetSortCols().Trim().Len();
-       
-       if (old_sort_string_length > 0) {
-               new_sort_string = GetSortCols().Trim() + wxT(" , ");
+       if (old_sort_string.Find(column_label) == wxNOT_FOUND)
+       {
+               if (old_sort_string.Len() > 0)
+                       new_sort_string = old_sort_string + wxT(" , ");
+               
+               new_sort_string += column_label + wxT(" DESC ");
+       } 
+       else
+       {
+               if (old_sort_string.Find(column_label + wxT(" DESC")) == wxNOT_FOUND)
+               {
+                       // Previous occurrence was for ASCENDING sort
+                       new_sort_string = old_sort_string;
+                       new_sort_string.Replace(column_label + wxT(" ASC"), column_label + wxT(" DESC"));
+               }
+               else
+               {
+                       // Previous occurrence was for DESCENDING sort. Nothing to do
+                       new_sort_string = old_sort_string;
+               }
        }
-       
-       new_sort_string += column_label + wxT(" DESC ");
-       
+
        SetSortCols(new_sort_string);
-       
+
        Go();
 }