diff --git a/src/kits/tracker/WidgetAttributeText.cpp b/src/kits/tracker/WidgetAttributeText.cpp index d1720d3057..b1708d5be1 100644 --- a/src/kits/tracker/WidgetAttributeText.cpp +++ b/src/kits/tracker/WidgetAttributeText.cpp @@ -32,10 +32,14 @@ names are registered trademarks or trademarks of their respective holders. All rights reserved. */ -#include + +#include "WidgetAttributeText.h" + +#include #include #include -#include + +#include #include #include @@ -60,8 +64,6 @@ All rights reserved. #include "SettingsViews.h" #include "Utilities.h" #include "ViewState.h" -#include "WidgetAttributeText.h" - #undef B_TRANSLATE_CONTEXT @@ -70,136 +72,7 @@ All rights reserved. const int32 kGenericReadBufferSize = 1024; -template -float -TruncStringBase(BString *result, const char *str, int32 length, - const View *view, float width, uint32 truncMode = B_TRUNCATE_MIDDLE) -{ - // we are using a template version of this call to make sure - // the right StringWidth gets picked up for BView x BPoseView - // for max speed and flexibility - - // a standard ellipsis inserting fitting algorithm - if (view->StringWidth(str, length) <= width) - *result = str; - else { - const char *srcstr[1]; - char *results[1]; - - srcstr[0] = str; - results[0] = result->LockBuffer(length + 3); - - BFont font; - view->GetFont(&font); - - font.GetTruncatedStrings(srcstr, 1, truncMode, width, results); - result->UnlockBuffer(); - } - return view->StringWidth(result->String(), result->Length()); -} - - -WidgetAttributeText * -WidgetAttributeText::NewWidgetText(const Model *model, - const BColumn *column, const BPoseView *view) -{ - // call this to make the right WidgetAttributeText type for a - // given column - - const char *attrName = column->AttrName(); - - if (strcmp(attrName, kAttrPath) == 0) - return new PathAttributeText(model, column); - else if (strcmp(attrName, kAttrMIMEType) == 0) - return new KindAttributeText(model, column); - else if (strcmp(attrName, kAttrStatName) == 0) - return new NameAttributeText(model, column); - else if (strcmp(attrName, kAttrStatSize) == 0) - return new SizeAttributeText(model, column); - else if (strcmp(attrName, kAttrStatModified) == 0) - return new ModificationTimeAttributeText(model, column); - else if (strcmp(attrName, kAttrStatCreated) == 0) - return new CreationTimeAttributeText(model, column); -#ifdef OWNER_GROUP_ATTRIBUTES - else if (strcmp(attrName, kAttrStatOwner) == 0) - return new OwnerAttributeText(model, column); - else if (strcmp(attrName, kAttrStatGroup) == 0) - return new GroupAttributeText(model, column); -#endif - else if (strcmp(attrName, kAttrStatMode) == 0) - return new ModeAttributeText(model, column); - else if (strcmp(attrName, kAttrOpenWithRelation) == 0) - return new OpenWithRelationAttributeText(model, column, view); - else if (strcmp(attrName, kAttrAppVersion) == 0) - return new AppShortVersionAttributeText(model, column); - else if (strcmp(attrName, kAttrSystemVersion) == 0) - return new SystemShortVersionAttributeText(model, column); - else if (strcmp(attrName, kAttrOriginalPath) == 0) - return new OriginalPathAttributeText(model, column); - - return new GenericAttributeText(model, column); -} - - -WidgetAttributeText::WidgetAttributeText(const Model *model, - const BColumn *column) - : - fModel(const_cast(model)), - fColumn(column), - fDirty(true), - fValueIsDefined(false) -{ - ASSERT(fColumn); - ASSERT(fColumn->Width() > 0); -} - - -WidgetAttributeText::~WidgetAttributeText() -{ -} - - -const char * -WidgetAttributeText::FittingText(const BPoseView *view) -{ - if (fDirty || fColumn->Width() != fOldWidth || CheckSettingsChanged() - || !fValueIsDefined ) - CheckViewChanged(view); - - ASSERT(!fDirty); - return fText.String(); -} - - -bool -WidgetAttributeText::CheckViewChanged(const BPoseView *view) -{ - BString newText; - FitValue(&newText, view); - if (newText == fText) - return false; - - fText = newText; - return true; -} - - -bool -WidgetAttributeText::CheckSettingsChanged() -{ - return false; -} - - -float -WidgetAttributeText::TruncString(BString *result, const char *str, - int32 length, const BPoseView *view, float width, uint32 truncMode) -{ - return TruncStringBase(result, str, length, view, width, truncMode); -} - - -const char *kSizeFormats[] = { +const char* kSizeFormats[] = { "%.2f %s", "%.1f %s", "%.f %s", @@ -208,9 +81,12 @@ const char *kSizeFormats[] = { }; +bool NameAttributeText::sSortFolderNamesFirst = false; + + template float -TruncFileSizeBase(BString *result, int64 value, const View *view, float width) +TruncFileSizeBase(BString* result, int64 value, const View* view, float width) { // ToDo: // if slow, replace float divisions with shifts @@ -228,7 +104,7 @@ TruncFileSizeBase(BString *result, int64 value, const View *view, float width) if (view->StringWidth(buffer) > width) sprintf(buffer, B_TRANSLATE("%Ld B"), value); } else { - const char *suffix; + const char* suffix; float floatValue; if (value >= kTBSize) { suffix = B_TRANSLATE("TiB"); @@ -253,14 +129,14 @@ TruncFileSizeBase(BString *result, int64 value, const View *view, float width) // strip off an insignificant zero so we don't get readings // such as 1.00 - char *period = 0; - for (char *tmp = buffer; *tmp; tmp++) { + char* period = 0; + for (char* tmp = buffer; *tmp; tmp++) { if (*tmp == '.') period = tmp; } if (period && period[1] && period[2] == '0') // move the rest of the string over the insignificant zero - for (char *tmp = &period[2]; *tmp; tmp++) + for (char* tmp = &period[2]; *tmp; tmp++) *tmp = tmp[1]; float resultWidth = view->StringWidth(buffer); @@ -276,16 +152,38 @@ TruncFileSizeBase(BString *result, int64 value, const View *view, float width) } +template float -WidgetAttributeText::TruncFileSize(BString *result, int64 value, - const BPoseView *view, float width) +TruncStringBase(BString* result, const char* str, int32 length, + const View* view, float width, uint32 truncMode = B_TRUNCATE_MIDDLE) { - return TruncFileSizeBase(result, value, view, width); + // we are using a template version of this call to make sure + // the right StringWidth gets picked up for BView x BPoseView + // for max speed and flexibility + + // a standard ellipsis inserting fitting algorithm + if (view->StringWidth(str, length) <= width) + *result = str; + else { + const char* srcstr[1]; + char* results[1]; + + srcstr[0] = str; + results[0] = result->LockBuffer(length + 3); + + BFont font; + view->GetFont(&font); + + font.GetTruncatedStrings(srcstr, 1, truncMode, width, results); + result->UnlockBuffer(); + } + return view->StringWidth(result->String(), result->Length()); } + template float -TruncTimeBase(BString *result, int64 value, const View *view, float width) +TruncTimeBase(BString* result, int64 value, const View* view, float width) { float resultWidth = 0; char buffer[256]; @@ -311,9 +209,120 @@ TruncTimeBase(BString *result, int64 value, const View *view, float width) } +// #pragma mark - WidgetAttributeText base class + + +WidgetAttributeText* +WidgetAttributeText::NewWidgetText(const Model* model, + const BColumn* column, const BPoseView* view) +{ + // call this to make the right WidgetAttributeText type for a + // given column + + const char* attrName = column->AttrName(); + + if (strcmp(attrName, kAttrPath) == 0) + return new PathAttributeText(model, column); + if (strcmp(attrName, kAttrMIMEType) == 0) + return new KindAttributeText(model, column); + if (strcmp(attrName, kAttrStatName) == 0) + return new NameAttributeText(model, column); + if (strcmp(attrName, kAttrStatSize) == 0) + return new SizeAttributeText(model, column); + if (strcmp(attrName, kAttrStatModified) == 0) + return new ModificationTimeAttributeText(model, column); + if (strcmp(attrName, kAttrStatCreated) == 0) + return new CreationTimeAttributeText(model, column); +#ifdef OWNER_GROUP_ATTRIBUTES + if (strcmp(attrName, kAttrStatOwner) == 0) + return new OwnerAttributeText(model, column); + if (strcmp(attrName, kAttrStatGroup) == 0) + return new GroupAttributeText(model, column); +#endif + if (strcmp(attrName, kAttrStatMode) == 0) + return new ModeAttributeText(model, column); + if (strcmp(attrName, kAttrOpenWithRelation) == 0) + return new OpenWithRelationAttributeText(model, column, view); + if (strcmp(attrName, kAttrAppVersion) == 0) + return new AppShortVersionAttributeText(model, column); + if (strcmp(attrName, kAttrSystemVersion) == 0) + return new SystemShortVersionAttributeText(model, column); + if (strcmp(attrName, kAttrOriginalPath) == 0) + return new OriginalPathAttributeText(model, column); + + return new GenericAttributeText(model, column); +} + + +WidgetAttributeText::WidgetAttributeText(const Model* model, + const BColumn* column) + : + fModel(const_cast(model)), + fColumn(column), + fDirty(true), + fValueIsDefined(false) +{ + ASSERT(fColumn); + ASSERT(fColumn->Width() > 0); +} + + +WidgetAttributeText::~WidgetAttributeText() +{ +} + + +const char* +WidgetAttributeText::FittingText(const BPoseView* view) +{ + if (fDirty || fColumn->Width() != fOldWidth || CheckSettingsChanged() + || !fValueIsDefined ) + CheckViewChanged(view); + + ASSERT(!fDirty); + return fText.String(); +} + + +bool +WidgetAttributeText::CheckViewChanged(const BPoseView* view) +{ + BString newText; + FitValue(&newText, view); + if (newText == fText) + return false; + + fText = newText; + return true; +} + + +bool +WidgetAttributeText::CheckSettingsChanged() +{ + return false; +} + + float -WidgetAttributeText::TruncTime(BString *result, int64 value, - const BPoseView *view, float width) +WidgetAttributeText::TruncString(BString* result, const char* str, + int32 length, const BPoseView* view, float width, uint32 truncMode) +{ + return TruncStringBase(result, str, length, view, width, truncMode); +} + + +float +WidgetAttributeText::TruncFileSize(BString* result, int64 value, + const BPoseView* view, float width) +{ + return TruncFileSizeBase(result, value, view, width); +} + + +float +WidgetAttributeText::TruncTime(BString* result, int64 value, + const BPoseView* view, float width) { return TruncTimeBase(result, value, view, width); } @@ -327,7 +336,7 @@ WidgetAttributeText::CurrentWidth() const float -WidgetAttributeText::Width(const BPoseView *pose) +WidgetAttributeText::Width(const BPoseView* pose) { FittingText(pose); return CurrentWidth(); @@ -335,14 +344,14 @@ WidgetAttributeText::Width(const BPoseView *pose) void -WidgetAttributeText::SetUpEditing(BTextView *) +WidgetAttributeText::SetUpEditing(BTextView*) { ASSERT(fColumn->Editable()); } bool -WidgetAttributeText::CommitEditedText(BTextView *) +WidgetAttributeText::CommitEditedText(BTextView*) { // can't do anything here at this point TRESPASS(); @@ -351,9 +360,9 @@ WidgetAttributeText::CommitEditedText(BTextView *) status_t -WidgetAttributeText::AttrAsString(const Model *model, BString *result, - const char *attrName, int32 attrType, - float width, BView *view, int64 *resultingValue) +WidgetAttributeText::AttrAsString(const Model* model, BString* result, + const char* attrName, int32 attrType, float width, BView* view, + int64* resultingValue) { int64 value; @@ -431,19 +440,20 @@ WidgetAttributeText::SetDirty(bool value) } -// #pragma mark - +// #pragma mark - -StringAttributeText::StringAttributeText(const Model *model, - const BColumn *column) - : WidgetAttributeText(model, column), +StringAttributeText::StringAttributeText(const Model* model, + const BColumn* column) + : + WidgetAttributeText(model, column), fValueDirty(true) { } -const char * -StringAttributeText::ValueAsText(const BPoseView * /*view*/) +const char* +StringAttributeText::ValueAsText(const BPoseView* /*view*/) { if (fValueDirty) ReadValue(&fFullValueText); @@ -468,7 +478,7 @@ StringAttributeText::CheckAttributeChanged() void -StringAttributeText::FitValue(BString *result, const BPoseView *view) +StringAttributeText::FitValue(BString* result, const BPoseView* view) { if (fValueDirty) ReadValue(&fFullValueText); @@ -481,17 +491,17 @@ StringAttributeText::FitValue(BString *result, const BPoseView *view) float -StringAttributeText::PreferredWidth(const BPoseView *pose) const +StringAttributeText::PreferredWidth(const BPoseView* pose) const { return pose->StringWidth(fFullValueText.String()); } int -StringAttributeText::Compare(WidgetAttributeText &attr, BPoseView *view) +StringAttributeText::Compare(WidgetAttributeText& attr, BPoseView* view) { - StringAttributeText *compareTo - = dynamic_cast(&attr); + StringAttributeText* compareTo + = dynamic_cast(&attr); ASSERT(compareTo); if (fValueDirty) @@ -503,18 +513,20 @@ StringAttributeText::Compare(WidgetAttributeText &attr, BPoseView *view) bool -StringAttributeText::CommitEditedText(BTextView *textView) +StringAttributeText::CommitEditedText(BTextView* textView) { ASSERT(fColumn->Editable()); - const char *text = textView->Text(); + const char* text = textView->Text(); - if (fFullValueText == text) + if (fFullValueText == text) { // no change return false; + } - if (textView->TextLength() == 0) + if (textView->TextLength() == 0) { // cannot do an empty name return false; + } // cause re-truncation fDirty = true; @@ -529,13 +541,14 @@ StringAttributeText::CommitEditedText(BTextView *textView) } -// #pragma mark - +// #pragma mark - -ScalarAttributeText::ScalarAttributeText(const Model *model, - const BColumn *column) - : WidgetAttributeText(model, column), - fValueDirty(true) +ScalarAttributeText::ScalarAttributeText(const Model* model, + const BColumn* column) + : + WidgetAttributeText(model, column), + fValueDirty(true) { } @@ -563,7 +576,7 @@ ScalarAttributeText::CheckAttributeChanged() float -ScalarAttributeText::PreferredWidth(const BPoseView *pose) const +ScalarAttributeText::PreferredWidth(const BPoseView* pose) const { BString widthString; widthString << fValue; @@ -572,10 +585,10 @@ ScalarAttributeText::PreferredWidth(const BPoseView *pose) const int -ScalarAttributeText::Compare(WidgetAttributeText &attr, BPoseView *) +ScalarAttributeText::Compare(WidgetAttributeText& attr, BPoseView*) { - ScalarAttributeText *compareTo - = dynamic_cast(&attr); + ScalarAttributeText* compareTo + = dynamic_cast(&attr); ASSERT(compareTo); // make sure we're not comparing apples and oranges @@ -587,17 +600,18 @@ ScalarAttributeText::Compare(WidgetAttributeText &attr, BPoseView *) } -// #pragma mark - +// #pragma mark - -PathAttributeText::PathAttributeText(const Model *model, const BColumn *column) - : StringAttributeText(model, column) +PathAttributeText::PathAttributeText(const Model* model, const BColumn* column) + : + StringAttributeText(model, column) { } void -PathAttributeText::ReadValue(BString *result) +PathAttributeText::ReadValue(BString* result) { // get the path BEntry entry(fModel->EntryRef()); @@ -612,18 +626,19 @@ PathAttributeText::ReadValue(BString *result) } -// #pragma mark - +// #pragma mark - -OriginalPathAttributeText::OriginalPathAttributeText(const Model *model, - const BColumn *column) - : StringAttributeText(model, column) +OriginalPathAttributeText::OriginalPathAttributeText(const Model* model, + const BColumn* column) + : + StringAttributeText(model, column) { } void -OriginalPathAttributeText::ReadValue(BString *result) +OriginalPathAttributeText::ReadValue(BString* result) { BEntry entry(fModel->EntryRef()); BPath path; @@ -637,17 +652,18 @@ OriginalPathAttributeText::ReadValue(BString *result) } -// #pragma mark - +// #pragma mark - -KindAttributeText::KindAttributeText(const Model *model, const BColumn *column) - : StringAttributeText(model, column) +KindAttributeText::KindAttributeText(const Model* model, const BColumn* column) + : + StringAttributeText(model, column) { } void -KindAttributeText::ReadValue(BString *result) +KindAttributeText::ReadValue(BString* result) { BMimeType mime; char desc[B_MIME_TYPE_LENGTH]; @@ -664,19 +680,20 @@ KindAttributeText::ReadValue(BString *result) } -// #pragma mark - +// #pragma mark - -NameAttributeText::NameAttributeText(const Model *model, const BColumn *column) - : StringAttributeText(model, column) +NameAttributeText::NameAttributeText(const Model* model, const BColumn* column) + : + StringAttributeText(model, column) { } int -NameAttributeText::Compare(WidgetAttributeText &attr, BPoseView *view) +NameAttributeText::Compare(WidgetAttributeText& attr, BPoseView* view) { - NameAttributeText *compareTo = dynamic_cast(&attr); + NameAttributeText* compareTo = dynamic_cast(&attr); ASSERT(compareTo); @@ -686,52 +703,14 @@ NameAttributeText::Compare(WidgetAttributeText &attr, BPoseView *view) if (NameAttributeText::sSortFolderNamesFirst) return fModel->CompareFolderNamesFirst(attr.TargetModel()); - return NaturalCompare(fFullValueText.String(), compareTo->ValueAsText(view)); + return NaturalCompare(fFullValueText.String(), + compareTo->ValueAsText(view)); } void -NameAttributeText::ReadValue(BString *result) +NameAttributeText::ReadValue(BString* result) { -#ifdef DEBUG -// x86 support :-) - if ((modifiers() & B_CAPS_LOCK) != 0) { - if (fModel->IsVolume()) { - BVolumeRoster roster; - roster.Rewind(); - BVolume volume; - char device = 'A'; - while (roster.GetNextVolume(&volume) == B_OK) { - char name[256]; - if (volume.GetName(name) == B_OK - && strcmp(name, fModel->Name()) == 0) { - *result += device; - *result += ':'; - fValueDirty = false; - return; - } - device++; - } - } - const char *modelName = fModel->Name(); - bool hasDot = strstr(".", modelName) != 0; - for (int32 index = 0; index < 8; index++) { - if (!modelName[index] || modelName[index] == '.') - break; - *result += toupper(modelName[index]); - } - if (hasDot) { - modelName = strstr(".", modelName); - for (int32 index = 0; index < 4; index++) { - if (!modelName[index]) - break; - *result += toupper(modelName[index]); - } - } else if (fModel->IsExecutable()) - *result += ".EXE"; - - } else -#endif *result = fModel->Name(); fValueDirty = false; @@ -739,7 +718,7 @@ NameAttributeText::ReadValue(BString *result) void -NameAttributeText::FitValue(BString *result, const BPoseView *view) +NameAttributeText::FitValue(BString* result, const BPoseView* view) { if (fValueDirty) ReadValue(&fFullValueText); @@ -751,7 +730,7 @@ NameAttributeText::FitValue(BString *result, const BPoseView *view) void -NameAttributeText::SetUpEditing(BTextView *textView) +NameAttributeText::SetUpEditing(BTextView* textView) { DisallowFilenameKeys(textView); @@ -761,9 +740,9 @@ NameAttributeText::SetUpEditing(BTextView *textView) bool -NameAttributeText::CommitEditedTextFlavor(BTextView *textView) +NameAttributeText::CommitEditedTextFlavor(BTextView* textView) { - const char *text = textView->Text(); + const char* text = textView->Text(); BEntry entry(fModel->EntryRef()); if (entry.InitCheck() != B_OK) @@ -790,7 +769,7 @@ NameAttributeText::CommitEditedTextFlavor(BTextView *textView) removeExisting = true; } - // ToDo: + // TODO: // use model-flavor specific virtuals for all of these special // renamings status_t result; @@ -821,7 +800,6 @@ NameAttributeText::CommitEditedTextFlavor(BTextView *textView) return result == B_OK; } -bool NameAttributeText::sSortFolderNamesFirst = false; void NameAttributeText::SetSortFolderNamesFirst(bool enabled) @@ -830,19 +808,22 @@ NameAttributeText::SetSortFolderNamesFirst(bool enabled) } -// #pragma mark - +// #pragma mark - owner/group + #ifdef OWNER_GROUP_ATTRIBUTES -OwnerAttributeText::OwnerAttributeText(const Model *model, - const BColumn *column) - : StringAttributeText(model, column) + +OwnerAttributeText::OwnerAttributeText(const Model* model, + const BColumn* column) + : + StringAttributeText(model, column) { } void -OwnerAttributeText::ReadValue(BString *result) +OwnerAttributeText::ReadValue(BString* result) { uid_t nodeOwner = fModel->StatBuf()->st_uid; BString user; @@ -860,15 +841,16 @@ OwnerAttributeText::ReadValue(BString *result) } -GroupAttributeText::GroupAttributeText(const Model *model, - const BColumn *column) - : StringAttributeText(model, column) +GroupAttributeText::GroupAttributeText(const Model* model, + const BColumn* column) + : + StringAttributeText(model, column) { } void -GroupAttributeText::ReadValue(BString *result) +GroupAttributeText::ReadValue(BString* result) { gid_t nodeGroup = fModel->StatBuf()->st_gid; BString group; @@ -885,22 +867,25 @@ GroupAttributeText::ReadValue(BString *result) fValueDirty = false; } -#endif /* OWNER_GROUP_ATTRIBUTES */ -ModeAttributeText::ModeAttributeText(const Model *model, const BColumn *column) - : StringAttributeText(model, column) +#endif // OWNER_GROUP_ATTRIBUTES + + +ModeAttributeText::ModeAttributeText(const Model* model, const BColumn* column) + : + StringAttributeText(model, column) { } void -ModeAttributeText::ReadValue(BString *result) +ModeAttributeText::ReadValue(BString* result) { mode_t mode = fModel->StatBuf()->st_mode; mode_t baseMask = 00400; char buffer[11]; - char *scanner = buffer; + char* scanner = buffer; if (S_ISDIR(mode)) *scanner++ = 'd'; @@ -928,8 +913,9 @@ ModeAttributeText::ReadValue(BString *result) // #pragma mark - -SizeAttributeText::SizeAttributeText(const Model *model, const BColumn *column) - : ScalarAttributeText(model, column) +SizeAttributeText::SizeAttributeText(const Model* model, const BColumn* column) + : + ScalarAttributeText(model, column) { } @@ -957,7 +943,7 @@ SizeAttributeText::ReadValue() void -SizeAttributeText::FitValue(BString *result, const BPoseView *view) +SizeAttributeText::FitValue(BString* result, const BPoseView* view) { if (fValueDirty) fValue = ReadValue(); @@ -968,7 +954,7 @@ SizeAttributeText::FitValue(BString *result, const BPoseView *view) float -SizeAttributeText::PreferredWidth(const BPoseView *pose) const +SizeAttributeText::PreferredWidth(const BPoseView* pose) const { if (fValueIsDefined) { BString widthString; @@ -979,17 +965,18 @@ SizeAttributeText::PreferredWidth(const BPoseView *pose) const } -// #pragma mark - +// #pragma mark - time related -TimeAttributeText::TimeAttributeText(const Model *model, const BColumn *column) - : ScalarAttributeText(model, column) +TimeAttributeText::TimeAttributeText(const Model* model, const BColumn* column) + : + ScalarAttributeText(model, column) { } float -TimeAttributeText::PreferredWidth(const BPoseView *pose) const +TimeAttributeText::PreferredWidth(const BPoseView* pose) const { BString widthString; TruncTimeBase(&widthString, fValue, pose, 100000); @@ -998,7 +985,7 @@ TimeAttributeText::PreferredWidth(const BPoseView *pose) const void -TimeAttributeText::FitValue(BString *result, const BPoseView *view) +TimeAttributeText::FitValue(BString* result, const BPoseView* view) { if (fValueDirty) fValue = ReadValue(); @@ -1016,9 +1003,10 @@ TimeAttributeText::CheckSettingsChanged(void) } -CreationTimeAttributeText::CreationTimeAttributeText(const Model *model, - const BColumn *column) - : TimeAttributeText(model, column) +CreationTimeAttributeText::CreationTimeAttributeText(const Model* model, + const BColumn* column) + : + TimeAttributeText(model, column) { } @@ -1031,9 +1019,11 @@ CreationTimeAttributeText::ReadValue() return fModel->StatBuf()->st_crtime; } -ModificationTimeAttributeText::ModificationTimeAttributeText(const Model *model, - const BColumn *column) - : TimeAttributeText(model, column) + +ModificationTimeAttributeText::ModificationTimeAttributeText(const Model* model, + const BColumn* column) + : + TimeAttributeText(model, column) { } @@ -1050,9 +1040,10 @@ ModificationTimeAttributeText::ReadValue() // #pragma mark - -GenericAttributeText::GenericAttributeText(const Model *model, - const BColumn *column) - : StringAttributeText(model, column) +GenericAttributeText::GenericAttributeText(const Model* model, + const BColumn* column) + : + StringAttributeText(model, column) { } @@ -1075,16 +1066,16 @@ GenericAttributeText::CheckAttributeChanged() float -GenericAttributeText::PreferredWidth(const BPoseView *pose) const +GenericAttributeText::PreferredWidth(const BPoseView* pose) const { return pose->StringWidth(fFullValueText.String()); } void -GenericAttributeText::ReadValue(BString *result) +GenericAttributeText::ReadValue(BString* result) { - BModelOpener opener(const_cast(fModel)); + BModelOpener opener(const_cast(fModel)); ssize_t length = 0; fFullValueText = "-"; @@ -1196,7 +1187,7 @@ GenericAttributeText::ReadValue(BString *result) void -GenericAttributeText::FitValue(BString *result, const BPoseView *view) +GenericAttributeText::FitValue(BString* result, const BPoseView* view) { if (fValueDirty) ReadValue(&fFullValueText); @@ -1234,18 +1225,20 @@ GenericAttributeText::FitValue(BString *result, const BPoseView *view) return; case B_OFF_T_TYPE: - // as a side effect update the fFullValueText to the string representation - // of value + // As a side effect update the fFullValueText to the string + // representation of value TruncFileSize(&fFullValueText, fValue.off_tt, view, 100000); - fTruncatedWidth = TruncFileSize(result, fValue.off_tt, view, fOldWidth); + fTruncatedWidth = TruncFileSize(result, fValue.off_tt, view, + fOldWidth); fDirty = false; return; case B_TIME_TYPE: - // as a side effect update the fFullValueText to the string representation - // of value + // As a side effect update the fFullValueText to the string + // representation of value TruncTime(&fFullValueText, fValue.time_tt, view, 100000); - fTruncatedWidth = TruncTime(result, fValue.time_tt, view, fOldWidth); + fTruncatedWidth = TruncTime(result, fValue.time_tt, view, + fOldWidth); fDirty = false; return; @@ -1335,7 +1328,7 @@ GenericAttributeText::FitValue(BString *result, const BPoseView *view) const char* -GenericAttributeText::ValueAsText(const BPoseView *view) +GenericAttributeText::ValueAsText(const BPoseView* view) { // TODO: redesign this - this is to make sure the value is valid bool oldDirty = fDirty; @@ -1348,10 +1341,10 @@ GenericAttributeText::ValueAsText(const BPoseView *view) int -GenericAttributeText::Compare(WidgetAttributeText &attr, BPoseView *) +GenericAttributeText::Compare(WidgetAttributeText& attr, BPoseView*) { - GenericAttributeText *compareTo - = dynamic_cast(&attr); + GenericAttributeText* compareTo + = dynamic_cast(&attr); ASSERT(compareTo); if (fValueDirty) @@ -1434,10 +1427,10 @@ GenericAttributeText::Compare(WidgetAttributeText &attr, BPoseView *) bool -GenericAttributeText::CommitEditedText(BTextView *textView) +GenericAttributeText::CommitEditedText(BTextView* textView) { ASSERT(fColumn->Editable()); - const char *text = textView->Text(); + const char* text = textView->Text(); if (fFullValueText == text) // no change @@ -1457,7 +1450,7 @@ GenericAttributeText::CommitEditedText(BTextView *textView) void -GenericAttributeText::SetUpEditing(BTextView *textView) +GenericAttributeText::SetUpEditing(BTextView* textView) { textView->SetMaxBytes(kGenericReadBufferSize - 1); textView->SetText(fFullValueText.String(), fFullValueText.Length()); @@ -1465,7 +1458,7 @@ GenericAttributeText::SetUpEditing(BTextView *textView) bool -GenericAttributeText::CommitEditedTextFlavor(BTextView *textView) +GenericAttributeText::CommitEditedTextFlavor(BTextView* textView) { BNode node(fModel->EntryRef()); @@ -1498,74 +1491,80 @@ GenericAttributeText::CommitEditedTextFlavor(BTextView *textView) return false; } - const char *columnName = fColumn->AttrName(); + const char* columnName = fColumn->AttrName(); ssize_t size = 0; switch (type) { case B_STRING_TYPE: - size = fModel->WriteAttr(columnName, - type, 0, textView->Text(), (size_t)(textView->TextLength() + 1)); + size = fModel->WriteAttr(columnName, type, 0, textView->Text(), + (size_t)(textView->TextLength() + 1)); break; case B_BOOL_TYPE: - { - bool value = strncasecmp(textView->Text(), "0", 1) != 0 - && strncasecmp(textView->Text(), "off", 2) != 0 - && strncasecmp(textView->Text(), "no", 3) != 0 - && strncasecmp(textView->Text(), "false", 4) != 0 - && strlen(textView->Text()) != 0; + { + bool value = strncasecmp(textView->Text(), "0", 1) != 0 + && strncasecmp(textView->Text(), "off", 2) != 0 + && strncasecmp(textView->Text(), "no", 3) != 0 + && strncasecmp(textView->Text(), "false", 4) != 0 + && strlen(textView->Text()) != 0; - size = fModel->WriteAttr(columnName, type, 0, &value, sizeof(bool)); - break; - } + size = fModel->WriteAttr(columnName, type, 0, &value, sizeof(bool)); + break; + } case B_CHAR_TYPE: - { - char ch; - sscanf(textView->Text(), "%c", &ch); - //Check if we read the start of a multi-byte glyph: - if (!isprint(ch)) { - BAlert* alert = new BAlert("", - B_TRANSLATE("Sorry, the 'Character' " - "attribute cannot store a multi-byte glyph."), - B_TRANSLATE("Cancel"), - 0, 0, B_WIDTH_AS_USUAL, B_STOP_ALERT); - alert->SetShortcut(0, B_ESCAPE); - alert->Go(); - return false; - } - - size = fModel->WriteAttr(columnName, type, 0, &ch, sizeof(char)); - break; + { + char ch; + sscanf(textView->Text(), "%c", &ch); + //Check if we read the start of a multi-byte glyph: + if (!isprint(ch)) { + BAlert* alert = new BAlert("", + B_TRANSLATE("Sorry, the 'Character' " + "attribute cannot store a multi-byte glyph."), + B_TRANSLATE("Cancel"), + 0, 0, B_WIDTH_AS_USUAL, B_STOP_ALERT); + alert->SetShortcut(0, B_ESCAPE); + alert->Go(); + return false; } + size = fModel->WriteAttr(columnName, type, 0, &ch, sizeof(char)); + break; + } + case B_FLOAT_TYPE: - { - float floatVal; + { + float floatVal; - if (sscanf(textView->Text(), "%f", &floatVal) == 1) { - fValueIsDefined = true; - fValue.floatt = floatVal; - size = fModel->WriteAttr(columnName, type, 0, &floatVal, sizeof(float)); - } else - // If the value was already defined, it's on disk. Otherwise not. - return fValueIsDefined; - break; + if (sscanf(textView->Text(), "%f", &floatVal) == 1) { + fValueIsDefined = true; + fValue.floatt = floatVal; + size = fModel->WriteAttr(columnName, type, 0, &floatVal, + sizeof(float)); + } else { + // If the value was already defined, it's on disk. + // Otherwise not. + return fValueIsDefined; } + break; + } case B_DOUBLE_TYPE: - { - double doubleVal; + { + double doubleVal; - if (sscanf(textView->Text(), "%lf", &doubleVal) == 1) { - fValueIsDefined = true; - fValue.doublet = doubleVal; - size = fModel->WriteAttr(columnName, type, 0, &doubleVal, sizeof(double)); - } else - // If the value was already defined, it's on disk. Otherwise not. - return fValueIsDefined; - break; + if (sscanf(textView->Text(), "%lf", &doubleVal) == 1) { + fValueIsDefined = true; + fValue.doublet = doubleVal; + size = fModel->WriteAttr(columnName, type, 0, &doubleVal, + sizeof(double)); + } else { + // If the value was already defined, it's on disk. + // Otherwise not. + return fValueIsDefined; } + break; + } case B_TIME_TYPE: case B_OFF_T_TYPE: @@ -1577,54 +1576,54 @@ GenericAttributeText::CommitEditedTextFlavor(BTextView *textView) case B_INT32_TYPE: case B_INT16_TYPE: case B_INT8_TYPE: - { - GenericValueStruct tmp; - size_t scalarSize = 0; + { + GenericValueStruct tmp; + size_t scalarSize = 0; - switch (type) { - case B_TIME_TYPE: - tmp.time_tt = parsedate(textView->Text(), time(0)); - scalarSize = sizeof(time_t); - break; + switch (type) { + case B_TIME_TYPE: + tmp.time_tt = parsedate(textView->Text(), time(0)); + scalarSize = sizeof(time_t); + break; - // do some size independent conversion on builtin types - case B_OFF_T_TYPE: - tmp.off_tt = StringToScalar(textView->Text()); - scalarSize = sizeof(off_t); - break; + // do some size independent conversion on builtin types + case B_OFF_T_TYPE: + tmp.off_tt = StringToScalar(textView->Text()); + scalarSize = sizeof(off_t); + break; - case B_UINT64_TYPE: - case B_INT64_TYPE: - tmp.int64t = StringToScalar(textView->Text()); - scalarSize = sizeof(int64); - break; + case B_UINT64_TYPE: + case B_INT64_TYPE: + tmp.int64t = StringToScalar(textView->Text()); + scalarSize = sizeof(int64); + break; - case B_UINT32_TYPE: - case B_INT32_TYPE: - tmp.int32t = (int32)StringToScalar(textView->Text()); - scalarSize = sizeof(int32); - break; + case B_UINT32_TYPE: + case B_INT32_TYPE: + tmp.int32t = (int32)StringToScalar(textView->Text()); + scalarSize = sizeof(int32); + break; - case B_UINT16_TYPE: - case B_INT16_TYPE: - tmp.int16t = (int16)StringToScalar(textView->Text()); - scalarSize = sizeof(int16); - break; + case B_UINT16_TYPE: + case B_INT16_TYPE: + tmp.int16t = (int16)StringToScalar(textView->Text()); + scalarSize = sizeof(int16); + break; - case B_UINT8_TYPE: - case B_INT8_TYPE: - tmp.int8t = (int8)StringToScalar(textView->Text()); - scalarSize = sizeof(int8); - break; + case B_UINT8_TYPE: + case B_INT8_TYPE: + tmp.int8t = (int8)StringToScalar(textView->Text()); + scalarSize = sizeof(int8); + break; - default: - TRESPASS(); + default: + TRESPASS(); - } - - size = fModel->WriteAttr(columnName, type, 0, &tmp, scalarSize); - break; } + + size = fModel->WriteAttr(columnName, type, 0, &tmp, scalarSize); + break; + } } if (size < 0) { @@ -1644,12 +1643,13 @@ GenericAttributeText::CommitEditedTextFlavor(BTextView *textView) } -// #pragma mark - +// #pragma mark - -OpenWithRelationAttributeText::OpenWithRelationAttributeText(const Model *model, - const BColumn *column, const BPoseView *view) - : ScalarAttributeText(model, column), +OpenWithRelationAttributeText::OpenWithRelationAttributeText(const Model* model, + const BColumn* column, const BPoseView* view) + : + ScalarAttributeText(model, column), fPoseView(view) { } @@ -1660,9 +1660,9 @@ OpenWithRelationAttributeText::ReadValue() { fValueDirty = false; - const OpenWithPoseView *view = dynamic_cast(fPoseView); - - if (view) { + const OpenWithPoseView* view + = dynamic_cast(fPoseView); + if (view != NULL) { fValue = view->OpenWithRelation(fModel); fValueIsDefined = true; } @@ -1672,7 +1672,7 @@ OpenWithRelationAttributeText::ReadValue() float -OpenWithRelationAttributeText::PreferredWidth(const BPoseView *pose) const +OpenWithRelationAttributeText::PreferredWidth(const BPoseView* pose) const { BString widthString; TruncString(&widthString, fRelationText.String(), fRelationText.Length(), @@ -1682,14 +1682,14 @@ OpenWithRelationAttributeText::PreferredWidth(const BPoseView *pose) const void -OpenWithRelationAttributeText::FitValue(BString *result, const BPoseView *view) +OpenWithRelationAttributeText::FitValue(BString* result, const BPoseView* view) { if (fValueDirty) ReadValue(); ASSERT(view == fPoseView); - const OpenWithPoseView *launchWithView - = dynamic_cast(view); + const OpenWithPoseView* launchWithView + = dynamic_cast(view); if (launchWithView) launchWithView->OpenWithRelationDescription(fModel, &fRelationText); @@ -1701,27 +1701,28 @@ OpenWithRelationAttributeText::FitValue(BString *result, const BPoseView *view) } -VersionAttributeText::VersionAttributeText(const Model *model, - const BColumn *column, bool app) - : StringAttributeText(model, column), +VersionAttributeText::VersionAttributeText(const Model* model, + const BColumn* column, bool app) + : + StringAttributeText(model, column), fAppVersion(app) { } void -VersionAttributeText::ReadValue(BString *result) +VersionAttributeText::ReadValue(BString* result) { fValueDirty = false; BModelOpener opener(fModel); - BFile *file = dynamic_cast(fModel->Node()); + BFile* file = dynamic_cast(fModel->Node()); if (file) { BAppFileInfo info(file); version_info version; if (info.InitCheck() == B_OK - && info.GetVersionInfo(&version, - fAppVersion ? B_APP_VERSION_KIND : B_SYSTEM_VERSION_KIND) == B_OK) { + && info.GetVersionInfo(&version, fAppVersion + ? B_APP_VERSION_KIND : B_SYSTEM_VERSION_KIND) == B_OK) { *result = version.short_info; return; }