#include #include "GridHeader.h" void GridHeader::GSort(int scol) { int col; int cnt = sortOrder.GetCount(); if(cnt == 0) return; if(scol < 0) scol = cnt - 1; col = sortOrder[scol]; //int order = 1; int order = hitems[col].sortmode; /* dla trybu multisort nie mozna w ten sposob sortowac dla pierwszej kolumny */ if(cnt > 1 && scol != 0) { int match = 1; int is = fixedRows; for(int i = fixedRows + 1; i < totalRows; i++) { int n = vitems[i].id; int m = vitems[is].id; bool found = true; for(int j = 0; j < scol; j++) { int k = sortOrder[j]; if(items[n][k].val != items[m][k].val) { found = false; break; } } if(found) { match++; continue; } else { if(match > 1) GSort(col, order, is, match); match = 1; is = i; } } if(match > 1) GSort(col, order, is, match); } else GSort(col, order, fixedRows); } void GridHeader::GSort(int col, int order, int from, int count) { if(count == 0) return; ItemRect::sortCol = col; ItemRect::sortMode = (order != 0); VItems::Iterator its, ite; its = vitems.Begin() + from; if(count < 0) ite = vitems.End(); else ite = its + count; if(order < 2) Sort(its, ite, StdLess()); else Sort(its, ite, StdGreater()); } void GridHeader::Multisort() { GSort(-1, 0, fixedRows); for(int i = 0; i < sortOrder.GetCount(); i++) GSort(i); } int GridHeader::InMultisort(int col) { for(int i = 0; i < sortOrder.GetCount(); i++) if(col == sortOrder[i]) return i; return -1; } bool GridHeader::ClearMultisort() { if(sortOrder.IsEmpty()) return false; /* for(int i = 0; i < sortOrder.GetCount(); i++) { int idx = sortOrder[i]; if(hitems[idx].sortMode > 0) sorted = true; hitems[idx].sortmode = 0; hitems[idx].sortcol = 0; } */ return ClearSorted(); } bool GridHeader::ClearSorted() { bool sorted = false; for(int i = 0; i < totalCols; i++) { if(hitems[i].sortMode > 0) sorted = true; hitems[i].sortmode = 0; hitems[i].sortcol = 0; } return sorted; } bool GridHeader::IsSorted() { /* bool sorted = false; for(int i = 0; i < totalCols; i++) if(hitems[i].sortmode > 0) { sorted = true; break; } return sortOrder.GetCount() > 0 || sorted; */ return sortOrder.GetCount() > 0 || sortCol >= 0; }