Tracker: 32x32 icon size option in list mode
16x16 is same old default 32x32 is new and fun Adjust start offset to depend on icon size Remove the kColumnStart variable and instead use StartOffset() method which calculates the column start offset based on the icon size. When you switch between icon sizes in list mode recalculate the first column width to make room for the icon or more text. Add some padding to list height in large icon mode.
This commit is contained in:
parent
41b9b4ad9d
commit
8fdd2629eb
@ -2019,11 +2019,29 @@ BContainerWindow::AddWindowMenu(BMenu* menu)
|
||||
item->SetTarget(PoseView());
|
||||
menu->AddItem(item);
|
||||
|
||||
item = new BMenuItem(B_TRANSLATE("List view"),
|
||||
new BMessage(kListMode), '3');
|
||||
BMenu* listViewMenu = new BMenu("List view");
|
||||
|
||||
message = new BMessage(kListMode);
|
||||
message->AddInt32("icon_size", B_MINI_ICON);
|
||||
item = new BMenuItem(listViewMenu, message);
|
||||
item->SetShortcut('3', B_COMMAND_KEY);
|
||||
item->SetTarget(PoseView());
|
||||
menu->AddItem(item);
|
||||
|
||||
message = new BMessage(kListMode);
|
||||
message->AddInt32("icon_size", B_MINI_ICON);
|
||||
item = new BMenuItem(B_TRANSLATE("Mini"), message);
|
||||
item->SetTarget(PoseView());
|
||||
listViewMenu->AddItem(item);
|
||||
|
||||
message = new BMessage(kListMode);
|
||||
message->AddInt32("icon_size", B_LARGE_ICON);
|
||||
item = new BMenuItem(B_TRANSLATE("Large"), message);
|
||||
item->SetTarget(PoseView());
|
||||
listViewMenu->AddItem(item);
|
||||
|
||||
listViewMenu->SetTargetForItems(PoseView());
|
||||
|
||||
menu->AddSeparatorItem();
|
||||
|
||||
item = new BMenuItem(B_TRANSLATE("Resize to fit"),
|
||||
@ -3120,31 +3138,62 @@ BContainerWindow::UpdateMenu(BMenu* menu, UpdateMenuContext context)
|
||||
}
|
||||
|
||||
if (context == kMenuBarContext || context == kWindowPopUpContext) {
|
||||
BMenu* sizeMenu = NULL;
|
||||
if (BMenuItem* item = menu->FindItem(kIconMode)) {
|
||||
sizeMenu = item->Submenu();
|
||||
}
|
||||
|
||||
uint32 viewMode = PoseView()->ViewMode();
|
||||
if (sizeMenu) {
|
||||
|
||||
BMenu* iconSizeMenu = NULL;
|
||||
if (BMenuItem* item = menu->FindItem(kIconMode))
|
||||
iconSizeMenu = item->Submenu();
|
||||
|
||||
if (iconSizeMenu != NULL) {
|
||||
if (viewMode == kIconMode) {
|
||||
int32 iconSize = (int32)PoseView()->IconSizeInt();
|
||||
for (int32 i = 0; BMenuItem* item = sizeMenu->ItemAt(i); i++) {
|
||||
int32 iconSize = PoseView()->IconSizeInt();
|
||||
BMenuItem* item = iconSizeMenu->ItemAt(0);
|
||||
for (int32 i = 0; (item = iconSizeMenu->ItemAt(i)) != NULL;
|
||||
i++) {
|
||||
BMessage* message = item->Message();
|
||||
if (!message) {
|
||||
if (message == NULL) {
|
||||
item->SetMarked(false);
|
||||
continue;
|
||||
}
|
||||
int32 size;
|
||||
if (message->FindInt32("size", &size) < B_OK)
|
||||
if (message->FindInt32("size", &size) != B_OK)
|
||||
size = -1;
|
||||
item->SetMarked(iconSize == size);
|
||||
}
|
||||
} else {
|
||||
for (int32 i = 0; BMenuItem* item = sizeMenu->ItemAt(i); i++)
|
||||
BMenuItem* item;
|
||||
for (int32 i = 0; (item = iconSizeMenu->ItemAt(i)) != NULL; i++)
|
||||
item->SetMarked(false);
|
||||
}
|
||||
}
|
||||
|
||||
BMenu* listSizeMenu = NULL;
|
||||
if (BMenuItem* item = menu->FindItem(kListMode))
|
||||
listSizeMenu = item->Submenu();
|
||||
|
||||
if (listSizeMenu != NULL) {
|
||||
if (viewMode == kListMode) {
|
||||
int32 iconSize = PoseView()->IconSizeInt();
|
||||
BMenuItem* item = listSizeMenu->ItemAt(0);
|
||||
for (int32 i = 0; (item = listSizeMenu->ItemAt(i)) != NULL;
|
||||
i++) {
|
||||
BMessage* message = item->Message();
|
||||
if (message == NULL) {
|
||||
item->SetMarked(false);
|
||||
continue;
|
||||
}
|
||||
int32 size;
|
||||
if (message->FindInt32("icon_size", &size) != B_OK)
|
||||
size = -1;
|
||||
item->SetMarked(iconSize == size);
|
||||
}
|
||||
} else {
|
||||
BMenuItem* item;
|
||||
for (int32 i = 0; (item = listSizeMenu->ItemAt(i)) != NULL; i++)
|
||||
item->SetMarked(false);
|
||||
}
|
||||
}
|
||||
|
||||
MarkNamedMenuItem(menu, kIconMode, viewMode == kIconMode);
|
||||
MarkNamedMenuItem(menu, kListMode, viewMode == kListMode);
|
||||
MarkNamedMenuItem(menu, kMiniIconMode, viewMode == kMiniIconMode);
|
||||
|
@ -806,7 +806,7 @@ OpenWithPoseView::SetUpDefaultColumnsIfNeeded()
|
||||
if (fColumnList->CountItems() != 0)
|
||||
return;
|
||||
|
||||
BColumn* nameColumn = new BColumn(B_TRANSLATE("Name"), kColumnStart, 125,
|
||||
BColumn* nameColumn = new BColumn(B_TRANSLATE("Name"), StartOffset(), 125,
|
||||
B_ALIGN_LEFT, kAttrStatName, B_STRING_TYPE, true, true);
|
||||
fColumnList->AddItem(nameColumn);
|
||||
BColumn* relationColumn = new BColumn(B_TRANSLATE("Relation"), 180, 100,
|
||||
|
@ -349,11 +349,14 @@ BPoseView::InitCommon()
|
||||
PinPointToValidRange(origin);
|
||||
|
||||
// init things related to laying out items
|
||||
fListElemHeight = ceilf(sFontHeight) < 20 ? 20 : ceilf(sFontHeight * 1.1f);
|
||||
|
||||
SetIconPoseHeight();
|
||||
GetLayoutInfo(ViewMode(), &fGrid, &fOffset);
|
||||
ResetPosePlacementHint();
|
||||
|
||||
if (ViewMode() == kListMode)
|
||||
SetListElemHeight();
|
||||
|
||||
DisableScrollBars();
|
||||
ScrollTo(origin);
|
||||
UpdateScrollRange();
|
||||
@ -615,7 +618,7 @@ BPoseView::SetUpDefaultColumnsIfNeeded()
|
||||
if (fColumnList->CountItems() != 0)
|
||||
return;
|
||||
|
||||
fColumnList->AddItem(new BColumn(B_TRANSLATE("Name"), kColumnStart, 145,
|
||||
fColumnList->AddItem(new BColumn(B_TRANSLATE("Name"), StartOffset(), 145,
|
||||
B_ALIGN_LEFT, kAttrStatName, B_STRING_TYPE, true, true));
|
||||
fColumnList->AddItem(new BColumn(B_TRANSLATE("Size"), 200, 80,
|
||||
B_ALIGN_RIGHT, kAttrStatSize, B_OFF_T_TYPE, true, false));
|
||||
@ -1018,10 +1021,13 @@ BPoseView::SetIconPoseHeight()
|
||||
IconSizeInt() ? IconSizeInt() : sFontHeight + 1);
|
||||
break;
|
||||
|
||||
case kListMode:
|
||||
default:
|
||||
fViewState->SetIconSize(B_MINI_ICON);
|
||||
{
|
||||
SetListElemHeight();
|
||||
fIconPoseHeight = fListElemHeight;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2233,8 +2239,41 @@ BPoseView::MessageReceived(BMessage* message)
|
||||
}
|
||||
fViewState->SetIconSize(iconSize);
|
||||
}
|
||||
} // fall thru
|
||||
SetViewMode(message->what);
|
||||
break;
|
||||
}
|
||||
|
||||
case kListMode:
|
||||
{
|
||||
uint32 oldMode = fViewState->ViewMode();
|
||||
int32 oldIconSize = fViewState->IconSize();
|
||||
int32 iconSize;
|
||||
if (message->FindInt32("icon_size", &iconSize) == B_OK) {
|
||||
// sanatize
|
||||
if ((icon_size)iconSize != B_LARGE_ICON)
|
||||
iconSize = B_MINI_ICON;
|
||||
} else
|
||||
iconSize = B_MINI_ICON;
|
||||
|
||||
fViewState->SetIconSize(iconSize);
|
||||
SetViewMode(message->what);
|
||||
|
||||
if (oldMode == kListMode && iconSize == oldIconSize)
|
||||
break;
|
||||
|
||||
if (iconSize == B_MINI_ICON)
|
||||
ResizeColumn(FirstColumn(), FirstColumn()->Width() - B_MINI_ICON);
|
||||
else
|
||||
ResizeColumn(FirstColumn(), FirstColumn()->Width() + B_MINI_ICON);
|
||||
|
||||
SetListElemHeight();
|
||||
Invalidate();
|
||||
if (fTitleView != NULL && !fTitleView->IsHidden())
|
||||
fTitleView->Invalidate();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case kMiniIconMode:
|
||||
SetViewMode(message->what);
|
||||
break;
|
||||
@ -2790,7 +2829,7 @@ BPoseView::AddColumn(BColumn* newColumn, const BColumn* after)
|
||||
offset = after->Offset() + after->Width() + kTitleColumnExtraMargin;
|
||||
afterColumnIndex = IndexOfColumn(after);
|
||||
} else {
|
||||
offset = kColumnStart;
|
||||
offset = StartOffset();
|
||||
afterColumnIndex = CountColumns() - 1;
|
||||
}
|
||||
|
||||
@ -9550,8 +9589,7 @@ BPoseView::ResizeColumn(BColumn* column, float newSize,
|
||||
|
||||
column->SetWidth(newSize);
|
||||
|
||||
float offset = kColumnStart;
|
||||
|
||||
float offset = StartOffset();
|
||||
int32 count = fColumnList->CountItems();
|
||||
for (int32 index = 0; index < count; index++) {
|
||||
column = fColumnList->ItemAt(index);
|
||||
@ -9609,9 +9647,8 @@ BPoseView::MoveColumnTo(BColumn* src, BColumn* dest)
|
||||
fColumnList->RemoveItem(src, false);
|
||||
fColumnList->AddItem(src, index);
|
||||
|
||||
float offset = kColumnStart;
|
||||
float offset = StartOffset();
|
||||
int32 count = fColumnList->CountItems();
|
||||
|
||||
for (int32 index = 0; index < count; index++) {
|
||||
BColumn* column = fColumnList->ItemAt(index);
|
||||
column->SetOffset(offset);
|
||||
|
@ -224,6 +224,7 @@ public:
|
||||
// returns height, descent, etc.
|
||||
float FontHeight() const;
|
||||
float ListElemHeight() const;
|
||||
void SetListElemHeight();
|
||||
|
||||
void SetIconPoseHeight();
|
||||
float IconPoseHeight() const;
|
||||
@ -266,6 +267,9 @@ public:
|
||||
int32 IndexOfColumn(const BColumn*) const;
|
||||
int32 CountColumns() const;
|
||||
|
||||
// Where to start the first column
|
||||
float StartOffset() const;
|
||||
|
||||
// pose access
|
||||
int32 IndexOfPose(const BPose*) const;
|
||||
BPose* PoseAtIndex(int32 index) const;
|
||||
@ -861,6 +865,18 @@ BPoseView::ListElemHeight() const
|
||||
}
|
||||
|
||||
|
||||
inline void
|
||||
BPoseView::SetListElemHeight()
|
||||
{
|
||||
float extra = 0;
|
||||
if (IconSize() > B_MINI_ICON)
|
||||
extra = kLargeIconSeparator;
|
||||
|
||||
fListElemHeight = std::max((float)IconSize() + extra,
|
||||
ceilf(sFontHeight) < 20 ? 20 : ceilf(sFontHeight * 1.1f));
|
||||
}
|
||||
|
||||
|
||||
inline float
|
||||
BPoseView::IconPoseHeight() const
|
||||
{
|
||||
@ -1057,6 +1073,13 @@ BPoseView::CountColumns() const
|
||||
}
|
||||
|
||||
|
||||
inline float
|
||||
BPoseView::StartOffset() const
|
||||
{
|
||||
return kListOffset + IconSizeInt() + kMiniIconSeparator + 1;
|
||||
}
|
||||
|
||||
|
||||
inline int32
|
||||
BPoseView::IndexOfColumn(const BColumn* column) const
|
||||
{
|
||||
|
@ -128,7 +128,7 @@ BQueryPoseView::SetUpDefaultColumnsIfNeeded()
|
||||
if (fColumnList->CountItems() != 0)
|
||||
return;
|
||||
|
||||
fColumnList->AddItem(new BColumn(B_TRANSLATE("Name"), kColumnStart, 145,
|
||||
fColumnList->AddItem(new BColumn(B_TRANSLATE("Name"), StartOffset(), 145,
|
||||
B_ALIGN_LEFT, kAttrStatName, B_STRING_TYPE, true, true));
|
||||
fColumnList->AddItem(new BColumn(B_TRANSLATE("Location"), 200, 225,
|
||||
B_ALIGN_LEFT, kAttrPath, B_STRING_TYPE, true, false));
|
||||
|
@ -175,7 +175,8 @@ BTextWidget::CalcRectCommon(BPoint poseLoc, const BColumn* column,
|
||||
break;
|
||||
}
|
||||
|
||||
result.bottom = poseLoc.y + (view->ListElemHeight() - 1);
|
||||
result.bottom = poseLoc.y
|
||||
+ roundf((view->ListElemHeight() + view->FontHeight()) / 2);
|
||||
} else {
|
||||
if (view->ViewMode() == kIconMode) {
|
||||
// large/scaled icon mode
|
||||
@ -187,7 +188,6 @@ BTextWidget::CalcRectCommon(BPoint poseLoc, const BColumn* column,
|
||||
|
||||
result.right = result.left + textWidth;
|
||||
result.bottom = poseLoc.y + view->IconPoseHeight();
|
||||
|
||||
}
|
||||
result.top = result.bottom - view->FontHeight();
|
||||
|
||||
|
@ -57,7 +57,6 @@ const int32 kTitleColumnExtraMargin = kTitleColumnLeftExtraMargin
|
||||
+ kTitleColumnRightExtraMargin;
|
||||
const int32 kMinColumnWidth = 20;
|
||||
const int32 kRemoveTitleMargin = 10;
|
||||
const int32 kColumnStart = 40;
|
||||
|
||||
|
||||
class BTitleView : public BView {
|
||||
|
@ -79,6 +79,7 @@ const int64 kGBSize = 1073741824;
|
||||
const int64 kTBSize = kGBSize * kKBSize;
|
||||
|
||||
const int32 kMiniIconSeparator = 3;
|
||||
const int32 kLargeIconSeparator = 6;
|
||||
|
||||
const color_space kDefaultIconDepth = B_RGBA32;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user