* Fixed broken sort order of all attributes.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32498 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2009-08-18 16:43:56 +00:00
parent fe3763173c
commit 39fff75391
+42 -40
View File
@@ -130,7 +130,7 @@ WidgetAttributeText::NewWidgetText(const Model *model,
else if (strcmp(attrName, kAttrOriginalPath) == 0) else if (strcmp(attrName, kAttrOriginalPath) == 0)
return new OriginalPathAttributeText(model, column); return new OriginalPathAttributeText(model, column);
return new GenericAttributeText(model, column); return new GenericAttributeText(model, column);
} }
@@ -179,7 +179,7 @@ WidgetAttributeText::CheckViewChanged(const BPoseView *view)
bool bool
WidgetAttributeText::CheckSettingsChanged() WidgetAttributeText::CheckSettingsChanged()
{ {
return false; return false;
} }
@@ -485,27 +485,27 @@ WidgetAttributeText::AttrAsString(const Model *model, BString *result,
TruncateLeaf(&tmp); TruncateLeaf(&tmp);
} else } else
tmp = "-"; tmp = "-";
if (width > 0) { if (width > 0) {
TruncStringBase(result, tmp.String(), tmp.Length(), view, TruncStringBase(result, tmp.String(), tmp.Length(), view,
width); width);
} else } else
*result = tmp.String(); *result = tmp.String();
return B_OK; return B_OK;
} }
break; break;
case kSizeType: case kSizeType:
// TruncFileSizeBase(result, model->StatBuf()->st_size, view, width); // TruncFileSizeBase(result, model->StatBuf()->st_size, view, width);
return B_OK; return B_OK;
break; break;
default: default:
TRESPASS(); TRESPASS();
// not yet supported // not yet supported
return B_ERROR; return B_ERROR;
} }
TRESPASS(); TRESPASS();
@@ -594,7 +594,8 @@ StringAttributeText::Compare(WidgetAttributeText &attr, BPoseView *view)
if (fValueDirty) if (fValueDirty)
ReadValue(&fFullValueText); ReadValue(&fFullValueText);
return NaturalCompare(fFullValueText.String(), compareTo->ValueAsText(view)); return NaturalCompare(fFullValueText.String(),
compareTo->ValueAsText(view));
} }
@@ -678,7 +679,8 @@ ScalarAttributeText::Compare(WidgetAttributeText &attr, BPoseView *)
if (fValueDirty) if (fValueDirty)
fValue = ReadValue(); fValue = ReadValue();
return fValue >= compareTo->Value() ? (fValue == compareTo->Value() ? 0 : -1) : 1 ; return fValue >= compareTo->Value()
? (fValue == compareTo->Value() ? 0 : 1) : -1;
} }
@@ -1102,7 +1104,7 @@ TimeAttributeText::FitValue(BString *result, const BPoseView *view)
bool bool
TimeAttributeText::CheckSettingsChanged() TimeAttributeText::CheckSettingsChanged()
{ {
bool changed = fLastClockIs24 != fSettings.ClockIs24Hr() bool changed = fLastClockIs24 != fSettings.ClockIs24Hr()
|| fLastDateOrder != fSettings.DateOrderFormat() || fLastDateOrder != fSettings.DateOrderFormat()
|| fLastTimeFormatSeparator != fSettings.TimeFormatSeparator(); || fLastTimeFormatSeparator != fSettings.TimeFormatSeparator();
@@ -1333,7 +1335,7 @@ GenericAttributeText::FitValue(BString *result, const BPoseView *view)
fFullValueText.Length(), view, fOldWidth); fFullValueText.Length(), view, fOldWidth);
fDirty = false; fDirty = false;
return; return;
case B_OFF_T_TYPE: case B_OFF_T_TYPE:
// as a side effect update the fFullValueText to the string representation // as a side effect update the fFullValueText to the string representation
// of value // of value
@@ -1474,9 +1476,9 @@ GenericAttributeText::Compare(WidgetAttributeText &attr, BPoseView *)
// Sort undefined values last, regardless of the other value: // Sort undefined values last, regardless of the other value:
if (!fValueIsDefined) if (!fValueIsDefined)
return compareTo->fValueIsDefined ? -1 : 0; return compareTo->fValueIsDefined ? 1 : 0;
if (!compareTo->fValueIsDefined) if (!compareTo->fValueIsDefined)
return 1; return -1;
switch (fColumn->AttrType()) { switch (fColumn->AttrType()) {
case B_STRING_TYPE: case B_STRING_TYPE:
@@ -1486,61 +1488,61 @@ GenericAttributeText::Compare(WidgetAttributeText &attr, BPoseView *)
{ {
char vStr[2] = { static_cast<char>(fValue.uint8t), 0 }; char vStr[2] = { static_cast<char>(fValue.uint8t), 0 };
char cStr[2] = { static_cast<char>(compareTo->fValue.uint8t), 0}; char cStr[2] = { static_cast<char>(compareTo->fValue.uint8t), 0};
BString valueStr(vStr); BString valueStr(vStr);
BString compareToStr(cStr); BString compareToStr(cStr);
return valueStr.ICompare(compareToStr); return valueStr.ICompare(compareToStr);
} }
case B_FLOAT_TYPE: case B_FLOAT_TYPE:
return fValue.floatt >= compareTo->fValue.floatt ? return fValue.floatt >= compareTo->fValue.floatt ?
(fValue.floatt == compareTo->fValue.floatt ? 0 : -1) : 1; (fValue.floatt == compareTo->fValue.floatt ? 0 : 1) : -1;
case B_DOUBLE_TYPE: case B_DOUBLE_TYPE:
return fValue.doublet >= compareTo->fValue.doublet ? return fValue.doublet >= compareTo->fValue.doublet ?
(fValue.doublet == compareTo->fValue.doublet ? 0 : -1) : 1; (fValue.doublet == compareTo->fValue.doublet ? 0 : 1) : -1;
case B_BOOL_TYPE: case B_BOOL_TYPE:
return fValue.boolt >= compareTo->fValue.boolt ? return fValue.boolt >= compareTo->fValue.boolt ?
(fValue.boolt == compareTo->fValue.boolt ? 0 : -1) : 1; (fValue.boolt == compareTo->fValue.boolt ? 0 : 1) : -1;
case B_UINT8_TYPE: case B_UINT8_TYPE:
return fValue.uint8t >= compareTo->fValue.uint8t ? return fValue.uint8t >= compareTo->fValue.uint8t ?
(fValue.uint8t == compareTo->fValue.uint8t ? 0 : -1) : 1; (fValue.uint8t == compareTo->fValue.uint8t ? 0 : 1) : -1;
case B_INT8_TYPE: case B_INT8_TYPE:
return fValue.int8t >= compareTo->fValue.int8t ? return fValue.int8t >= compareTo->fValue.int8t ?
(fValue.int8t == compareTo->fValue.int8t ? 0 : -1) : 1; (fValue.int8t == compareTo->fValue.int8t ? 0 : 1) : -1;
case B_UINT16_TYPE: case B_UINT16_TYPE:
return fValue.uint16t >= compareTo->fValue.uint16t ? return fValue.uint16t >= compareTo->fValue.uint16t ?
(fValue.uint16t == compareTo->fValue.uint16t ? 0 : -1) : 1; (fValue.uint16t == compareTo->fValue.uint16t ? 0 : 1) : -1;
case B_INT16_TYPE: case B_INT16_TYPE:
return fValue.int16t >= compareTo->fValue.int16t ? return fValue.int16t >= compareTo->fValue.int16t ?
(fValue.int16t == compareTo->fValue.int16t ? 0 : -1) : 1; (fValue.int16t == compareTo->fValue.int16t ? 0 : 1) : -1;
case B_UINT32_TYPE: case B_UINT32_TYPE:
return fValue.uint32t >= compareTo->fValue.uint32t ? return fValue.uint32t >= compareTo->fValue.uint32t ?
(fValue.uint32t == compareTo->fValue.uint32t ? 0 : -1) : 1; (fValue.uint32t == compareTo->fValue.uint32t ? 0 : 1) : -1;
case B_TIME_TYPE: case B_TIME_TYPE:
// time_t typedef'd to a long, i.e. a int32 // time_t typedef'd to a long, i.e. a int32
case B_INT32_TYPE: case B_INT32_TYPE:
return fValue.int32t >= compareTo->fValue.int32t ? return fValue.int32t >= compareTo->fValue.int32t ?
(fValue.int32t == compareTo->fValue.int32t ? 0 : -1) : 1; (fValue.int32t == compareTo->fValue.int32t ? 0 : 1) : -1;
case B_OFF_T_TYPE: case B_OFF_T_TYPE:
// off_t typedef'd to a long long, i.e. a int64 // off_t typedef'd to a long long, i.e. a int64
case B_INT64_TYPE: case B_INT64_TYPE:
return fValue.int64t >= compareTo->fValue.int64t ? return fValue.int64t >= compareTo->fValue.int64t ?
(fValue.int64t == compareTo->fValue.int64t ? 0 : -1) : 1; (fValue.int64t == compareTo->fValue.int64t ? 0 : 1) : -1;
case B_UINT64_TYPE: case B_UINT64_TYPE:
default: default:
return fValue.uint64t >= compareTo->fValue.uint64t ? return fValue.uint64t >= compareTo->fValue.uint64t ?
(fValue.uint64t == compareTo->fValue.uint64t ? 0 : -1) : 1; (fValue.uint64t == compareTo->fValue.uint64t ? 0 : 1) : -1;
} }
return 0; return 0;
} }
@@ -1643,7 +1645,7 @@ GenericAttributeText::CommitEditedTextFlavor(BTextView *textView)
alert->Go(); alert->Go();
return false; return false;
} }
size = fModel->WriteAttr(columnName, type, 0, &ch, sizeof(char)); size = fModel->WriteAttr(columnName, type, 0, &ch, sizeof(char));
break; break;
} }
@@ -1661,7 +1663,7 @@ GenericAttributeText::CommitEditedTextFlavor(BTextView *textView)
return fValueIsDefined; return fValueIsDefined;
break; break;
} }
case B_DOUBLE_TYPE: case B_DOUBLE_TYPE:
{ {
double doubleVal; double doubleVal;
@@ -1675,7 +1677,7 @@ GenericAttributeText::CommitEditedTextFlavor(BTextView *textView)
return fValueIsDefined; return fValueIsDefined;
break; break;
} }
case B_TIME_TYPE: case B_TIME_TYPE:
case B_OFF_T_TYPE: case B_OFF_T_TYPE:
case B_UINT64_TYPE: case B_UINT64_TYPE:
@@ -1689,56 +1691,56 @@ GenericAttributeText::CommitEditedTextFlavor(BTextView *textView)
{ {
GenericValueStruct tmp; GenericValueStruct tmp;
size_t scalarSize = 0; size_t scalarSize = 0;
switch (type) { switch (type) {
case B_TIME_TYPE: case B_TIME_TYPE:
tmp.time_tt = parsedate(textView->Text(), time(0)); tmp.time_tt = parsedate(textView->Text(), time(0));
scalarSize = sizeof(time_t); scalarSize = sizeof(time_t);
break; break;
// do some size independent conversion on builtin types // do some size independent conversion on builtin types
case B_OFF_T_TYPE: case B_OFF_T_TYPE:
tmp.off_tt = StringToScalar(textView->Text()); tmp.off_tt = StringToScalar(textView->Text());
scalarSize = sizeof(off_t); scalarSize = sizeof(off_t);
break; break;
case B_UINT64_TYPE: case B_UINT64_TYPE:
case B_INT64_TYPE: case B_INT64_TYPE:
tmp.int64t = StringToScalar(textView->Text()); tmp.int64t = StringToScalar(textView->Text());
scalarSize = sizeof(int64); scalarSize = sizeof(int64);
break; break;
case B_UINT32_TYPE: case B_UINT32_TYPE:
case B_INT32_TYPE: case B_INT32_TYPE:
tmp.int32t = (int32)StringToScalar(textView->Text()); tmp.int32t = (int32)StringToScalar(textView->Text());
scalarSize = sizeof(int32); scalarSize = sizeof(int32);
break; break;
case B_UINT16_TYPE: case B_UINT16_TYPE:
case B_INT16_TYPE: case B_INT16_TYPE:
tmp.int16t = (int16)StringToScalar(textView->Text()); tmp.int16t = (int16)StringToScalar(textView->Text());
scalarSize = sizeof(int16); scalarSize = sizeof(int16);
break; break;
case B_UINT8_TYPE: case B_UINT8_TYPE:
case B_INT8_TYPE: case B_INT8_TYPE:
tmp.int8t = (int8)StringToScalar(textView->Text()); tmp.int8t = (int8)StringToScalar(textView->Text());
scalarSize = sizeof(int8); scalarSize = sizeof(int8);
break; break;
default: default:
TRESPASS(); TRESPASS();
} }
size = fModel->WriteAttr(columnName, type, 0, &tmp, scalarSize); size = fModel->WriteAttr(columnName, type, 0, &tmp, scalarSize);
break; break;
} }
} }
if (size < 0) { if (size < 0) {
BAlert *alert = new BAlert("", BAlert *alert = new BAlert("",
"There was an error writing the attribute.", "There was an error writing the attribute.",
"Cancel", 0, 0, B_WIDTH_AS_USUAL, B_WARNING_ALERT); "Cancel", 0, 0, B_WIDTH_AS_USUAL, B_WARNING_ALERT);
alert->SetShortcut(0, B_ESCAPE); alert->SetShortcut(0, B_ESCAPE);
alert->Go(); alert->Go();