Fixed issue with ArrayCtrl drag&drop

git-svn-id: svn://ultimatepp.org/upp/trunk@9609 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2016-03-17 16:34:16 +00:00
parent f7b8aa669e
commit 9a13267ad2
4 changed files with 66 additions and 12 deletions

View file

@ -2386,6 +2386,16 @@ void ArrayCtrl::SortB(const Vector<int>& o)
}
}
void ArrayCtrl::ReArrange(const Vector<int>& order)
{
CHECK(KillCursor());
ClearCache();
SortA();
SortB(order);
Refresh();
SyncInfo();
}
void ArrayCtrl::Sort(const ArrayCtrl::Order& order) {
CHECK(KillCursor());
ClearCache();
@ -2430,6 +2440,17 @@ void ArrayCtrl::Sort(int from, int count, const ArrayCtrl::Order& order)
Sort(from, count, THISBACK1(OrderPred, &order));
}
struct sAC_ColumnSort : public ValueOrder {
bool descending;
const ValueOrder *order;
int (*cmp)(const Value& a, const Value& b);
virtual bool operator()(const Value& a, const Value& b) const {
return descending ? cmp ? (*cmp)(b, a) < 0 : (*order)(b, a)
: cmp ? (*cmp)(a, b) < 0 : (*order)(a, b);
}
};
bool ArrayCtrl::ColumnSortPred(int i1, int i2, int column, const ValueOrder *o)
{
return (*o)(GetConvertedColumn(i1, column), GetConvertedColumn(i2, column));
@ -2451,6 +2472,17 @@ void ArrayCtrl::ColumnSort(int column, const ValueOrder& order)
ColumnSort(column, THISBACK2(ColumnSortPred, column, &order));
}
void ArrayCtrl::ColumnSort(int column, int (*compare)(const Value& a, const Value& b))
{
sAC_ColumnSort cs;
cs.descending = false;
cs.order = NULL;
cs.cmp = compare;
if(!cs.cmp)
cs.cmp = StdValueCompare;
ColumnSort(column, cs);
}
void ArrayCtrl::SetSortColumn(int ii, bool desc)
{
sortcolumn = ii;
@ -2469,17 +2501,6 @@ void ArrayCtrl::ToggleSortColumn(int ii)
DoColumnSort();
}
struct sAC_ColumnSort : public ValueOrder {
bool descending;
const ValueOrder *order;
int (*cmp)(const Value& a, const Value& b);
virtual bool operator()(const Value& a, const Value& b) const {
return descending ? cmp ? (*cmp)(b, a) < 0 : (*order)(b, a)
: cmp ? (*cmp)(a, b) < 0 : (*order)(a, b);
}
};
void ArrayCtrl::DoColumnSort()
{
if(sortcolumn < 0) {
@ -2855,8 +2876,11 @@ void ArrayCtrl::InsertDrop(int line, const Vector< Vector<Value> >& data, PasteC
}
}
else
if(IsCursor())
if(IsCursor()) {
if(GetCursor() < line)
line--;
Remove(GetCursor());
}
KillCursor();
d.SetAction(DND_COPY);
}