* Cleanup in the icon mode stuff. kScaleIconMode is gone. There is simply
kIconMode and it can have different sizes. * The "Icon Mode" super menu item is marked, when in icon mode, as well as the size item in it's sub menu. * When switching from mini icon mode or list mode back into icon mode, the previous icon size is now restored. This also works when the folder has been closed meanwhile. (The on-disk format for view state has changed, so your folders will open with default values.) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29971 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
8ce14887cb
commit
e70b6d957a
|
@ -1914,19 +1914,19 @@ BContainerWindow::AddWindowMenu(BMenu *menu)
|
|||
item->SetTarget(PoseView());
|
||||
iconSizeMenu->AddItem(item);
|
||||
|
||||
message = new BMessage(kScaleIconMode);
|
||||
message = new BMessage(kIconMode);
|
||||
message->AddInt32("size", 40);
|
||||
item = new BMenuItem("40 x 40", message);
|
||||
item->SetTarget(PoseView());
|
||||
iconSizeMenu->AddItem(item);
|
||||
|
||||
message = new BMessage(kScaleIconMode);
|
||||
message = new BMessage(kIconMode);
|
||||
message->AddInt32("size", 48);
|
||||
item = new BMenuItem("48 x 48", message);
|
||||
item->SetTarget(PoseView());
|
||||
iconSizeMenu->AddItem(item);
|
||||
|
||||
message = new BMessage(kScaleIconMode);
|
||||
message = new BMessage(kIconMode);
|
||||
message->AddInt32("size", 64);
|
||||
item = new BMenuItem("64 x 64", message);
|
||||
item->SetTarget(PoseView());
|
||||
|
@ -1934,13 +1934,13 @@ BContainerWindow::AddWindowMenu(BMenu *menu)
|
|||
|
||||
iconSizeMenu->AddSeparatorItem();
|
||||
|
||||
message = new BMessage(kScaleIconMode);
|
||||
message = new BMessage(kIconMode);
|
||||
message->AddInt32("scale", 0);
|
||||
item = new BMenuItem("Decrease Size", message, '-');
|
||||
item->SetTarget(PoseView());
|
||||
iconSizeMenu->AddItem(item);
|
||||
|
||||
message = new BMessage(kScaleIconMode);
|
||||
message = new BMessage(kIconMode);
|
||||
message->AddInt32("scale", 1);
|
||||
item = new BMenuItem("Increase Size", message, '+');
|
||||
item->SetTarget(PoseView());
|
||||
|
@ -2936,7 +2936,7 @@ BContainerWindow::UpdateMenu(BMenu *menu, UpdateMenuContext context)
|
|||
|
||||
uint32 viewMode = PoseView()->ViewMode();
|
||||
if (sizeMenu) {
|
||||
if (viewMode == kIconMode || viewMode == kScaleIconMode) {
|
||||
if (viewMode == kIconMode) {
|
||||
int32 iconSize = (int32)PoseView()->IconSizeInt();
|
||||
for (int32 i = 0; BMenuItem* item = sizeMenu->ItemAt(i); i++) {
|
||||
BMessage* message = item->Message();
|
||||
|
@ -2953,10 +2953,8 @@ BContainerWindow::UpdateMenu(BMenu *menu, UpdateMenuContext context)
|
|||
for (int32 i = 0; BMenuItem* item = sizeMenu->ItemAt(i); i++)
|
||||
item->SetMarked(false);
|
||||
}
|
||||
} else {
|
||||
MarkNamedMenuItem(menu, kIconMode, viewMode == kIconMode);
|
||||
}
|
||||
|
||||
MarkNamedMenuItem(menu, kIconMode, viewMode == kIconMode);
|
||||
MarkNamedMenuItem(menu, kListMode, viewMode == kListMode);
|
||||
MarkNamedMenuItem(menu, kMiniIconMode, viewMode == kMiniIconMode);
|
||||
|
||||
|
|
|
@ -271,21 +271,21 @@ BDeskWindow::AddWindowContextMenus(BMenu *menu)
|
|||
item->SetTarget(PoseView());
|
||||
iconSizeMenu->AddItem(item);
|
||||
|
||||
message = new BMessage(kScaleIconMode);
|
||||
message = new BMessage(kIconMode);
|
||||
message->AddInt32("size", 40);
|
||||
item = new BMenuItem("40 x 40", message);
|
||||
item->SetMarked(PoseView()->IconSizeInt() == 40);
|
||||
item->SetTarget(PoseView());
|
||||
iconSizeMenu->AddItem(item);
|
||||
|
||||
message = new BMessage(kScaleIconMode);
|
||||
message = new BMessage(kIconMode);
|
||||
message->AddInt32("size", 48);
|
||||
item = new BMenuItem("48 x 48", message);
|
||||
item->SetMarked(PoseView()->IconSizeInt() == 48);
|
||||
item->SetTarget(PoseView());
|
||||
iconSizeMenu->AddItem(item);
|
||||
|
||||
message = new BMessage(kScaleIconMode);
|
||||
message = new BMessage(kIconMode);
|
||||
message->AddInt32("size", 64);
|
||||
item = new BMenuItem("64 x 64", message);
|
||||
item->SetMarked(PoseView()->IconSizeInt() == 64);
|
||||
|
|
|
@ -450,8 +450,7 @@ BPose::PointInPose(const BPoseView *poseView, BPoint where) const
|
|||
{
|
||||
ASSERT(poseView->ViewMode() != kListMode);
|
||||
|
||||
if (poseView->ViewMode() == kIconMode
|
||||
|| poseView->ViewMode() == kScaleIconMode) {
|
||||
if (poseView->ViewMode() == kIconMode) {
|
||||
// check icon rect, then actual icon pixel
|
||||
BRect rect(fLocation, fLocation);
|
||||
rect.right += poseView->IconSizeInt() - 1;
|
||||
|
@ -880,8 +879,7 @@ BPose::CalcRect(const BPoseView *poseView)
|
|||
ASSERT(poseView->ViewMode() != kListMode);
|
||||
|
||||
BRect rect;
|
||||
if (poseView->ViewMode() == kIconMode
|
||||
|| poseView->ViewMode() == kScaleIconMode) {
|
||||
if (poseView->ViewMode() == kIconMode) {
|
||||
rect.left = fLocation.x;
|
||||
rect.right = rect.left + poseView->IconSizeInt();
|
||||
|
||||
|
|
|
@ -929,7 +929,7 @@ BPoseView::SetIconPoseHeight()
|
|||
{
|
||||
switch (ViewMode()) {
|
||||
case kIconMode:
|
||||
fViewState->SetIconSize(B_LARGE_ICON);
|
||||
// IconSize should allready be set in MessageReceived()
|
||||
fIconPoseHeight = ceilf(IconSizeInt() + sFontHeight + 1);
|
||||
break;
|
||||
|
||||
|
@ -938,11 +938,6 @@ BPoseView::SetIconPoseHeight()
|
|||
fIconPoseHeight = ceilf(sFontHeight < IconSizeInt() ? IconSizeInt() : sFontHeight + 1);
|
||||
break;
|
||||
|
||||
case kScaleIconMode:
|
||||
// IconSize should allready be set in MessageReceived()
|
||||
fIconPoseHeight = ceilf(IconSizeInt() + sFontHeight + 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
fViewState->SetIconSize(B_MINI_ICON);
|
||||
fIconPoseHeight = fListElemHeight;
|
||||
|
@ -961,11 +956,6 @@ BPoseView::GetLayoutInfo(uint32 mode, BPoint *grid, BPoint *offset) const
|
|||
break;
|
||||
|
||||
case kIconMode:
|
||||
grid->Set(60, 60);
|
||||
offset->Set(20, 20);
|
||||
break;
|
||||
|
||||
case kScaleIconMode:
|
||||
grid->Set(IconSizeInt() + 28, IconSizeInt() + 28);
|
||||
offset->Set(20, 20);
|
||||
break;
|
||||
|
@ -1727,7 +1717,6 @@ BPoseView::CreatePoses(Model **models, PoseInfo *poseInfoArray, int32 count,
|
|||
|
||||
case kIconMode:
|
||||
case kMiniIconMode:
|
||||
case kScaleIconMode:
|
||||
if (poseInfo->fInitedDirectory == -1LL || fAlwaysAutoPlace) {
|
||||
if (pose->HasLocation())
|
||||
RemoveFromVSList(pose);
|
||||
|
@ -2035,15 +2024,14 @@ BPoseView::MessageReceived(BMessage *message)
|
|||
pendingNodeMonitorCache.Add(message);
|
||||
break;
|
||||
|
||||
case kScaleIconMode: {
|
||||
case kIconMode: {
|
||||
int32 size;
|
||||
int32 scale;
|
||||
if (message->FindInt32("size", &size) == B_OK) {
|
||||
if (size != (int32)IconSizeInt())
|
||||
fViewState->SetIconSize(size);
|
||||
} else if (message->FindInt32("scale", &scale) == B_OK
|
||||
&& (fViewState->ViewMode() == kIconMode
|
||||
|| fViewState->ViewMode() == kScaleIconMode)) {
|
||||
&& fViewState->ViewMode() == kIconMode) {
|
||||
if (scale == 0 && (int32)IconSizeInt() != 32) {
|
||||
switch ((int32)IconSizeInt()) {
|
||||
case 40:
|
||||
|
@ -2069,11 +2057,16 @@ BPoseView::MessageReceived(BMessage *message)
|
|||
break;
|
||||
}
|
||||
}
|
||||
} else
|
||||
break; // no change
|
||||
} else {
|
||||
int32 iconSize = fViewState->LastIconSize();
|
||||
if (iconSize < 32 || iconSize > 64) {
|
||||
// uninitialized last icon size?
|
||||
iconSize = 32;
|
||||
}
|
||||
fViewState->SetIconSize(iconSize);
|
||||
}
|
||||
} // fall thru
|
||||
case kListMode:
|
||||
case kIconMode:
|
||||
case kMiniIconMode:
|
||||
SetViewMode(message->what);
|
||||
break;
|
||||
|
@ -2729,18 +2722,26 @@ BPoseView::ReadExtendedPoseInfo(Model *model)
|
|||
void
|
||||
BPoseView::SetViewMode(uint32 newMode)
|
||||
{
|
||||
if (newMode == ViewMode() && newMode != kScaleIconMode)
|
||||
uint32 oldMode = ViewMode();
|
||||
uint32 lastIconSize = fViewState->LastIconSize();
|
||||
|
||||
if (newMode == oldMode) {
|
||||
if (newMode != kIconMode || lastIconSize == fViewState->IconSize())
|
||||
return;
|
||||
}
|
||||
|
||||
ASSERT(!IsFilePanel());
|
||||
|
||||
uint32 lastIconMode = fViewState->LastIconMode();
|
||||
if (newMode != kListMode)
|
||||
if (newMode != kListMode) {
|
||||
fViewState->SetLastIconMode(newMode);
|
||||
if (oldMode == kIconMode)
|
||||
fViewState->SetLastIconSize(fViewState->IconSize());
|
||||
}
|
||||
|
||||
uint32 oldMode = ViewMode();
|
||||
fViewState->SetViewMode(newMode);
|
||||
|
||||
// toggle view layout between listmode and non-listmode, if necessary
|
||||
BContainerWindow *window = ContainerWindow();
|
||||
if (oldMode == kListMode) {
|
||||
fTitleView->RemoveSelf();
|
||||
|
@ -2750,7 +2751,7 @@ BPoseView::SetViewMode(uint32 newMode)
|
|||
|
||||
MoveBy(0, -(kTitleViewHeight + 1));
|
||||
ResizeBy(0, kTitleViewHeight + 1);
|
||||
} else if (ViewMode() == kListMode) {
|
||||
} else if (newMode == kListMode) {
|
||||
MoveBy(0, kTitleViewHeight + 1);
|
||||
ResizeBy(0, -(kTitleViewHeight + 1));
|
||||
|
||||
|
@ -2767,14 +2768,14 @@ BPoseView::SetViewMode(uint32 newMode)
|
|||
|
||||
CommitActivePose();
|
||||
SetIconPoseHeight();
|
||||
GetLayoutInfo(ViewMode(), &fGrid, &fOffset);
|
||||
GetLayoutInfo(newMode, &fGrid, &fOffset);
|
||||
|
||||
// see if we need to map icons into new mode
|
||||
bool mapIcons;
|
||||
if (fOkToMapIcons)
|
||||
mapIcons = (ViewMode() != kListMode) && (ViewMode() != lastIconMode);
|
||||
else
|
||||
mapIcons = false;
|
||||
bool mapIcons = false;
|
||||
if (fOkToMapIcons) {
|
||||
mapIcons = (newMode != kListMode) && (newMode != lastIconMode
|
||||
|| fViewState->IconSize() != lastIconSize);
|
||||
}
|
||||
|
||||
BPoint oldOffset;
|
||||
BPoint oldGrid;
|
||||
|
@ -2784,7 +2785,7 @@ BPoseView::SetViewMode(uint32 newMode)
|
|||
BRect bounds(Bounds());
|
||||
PoseList newPoseList(30);
|
||||
|
||||
if (ViewMode() != kListMode) {
|
||||
if (newMode != kListMode) {
|
||||
int32 count = fPoseList->CountItems();
|
||||
for (int32 index = 0; index < count; index++) {
|
||||
BPose *pose = fPoseList->ItemAt(index);
|
||||
|
@ -2797,7 +2798,7 @@ BPoseView::SetViewMode(uint32 newMode)
|
|||
|
||||
// update origin in case of a list <-> icon mode transition
|
||||
BPoint newOrigin;
|
||||
if (ViewMode() == kListMode)
|
||||
if (newMode == kListMode)
|
||||
newOrigin = fViewState->ListOrigin();
|
||||
else
|
||||
newOrigin = fViewState->IconOrigin();
|
||||
|
|
|
@ -99,7 +99,6 @@ const int32 kListOffset = 20;
|
|||
const uint32 kMiniIconMode = 'Tmic';
|
||||
const uint32 kIconMode = 'Ticn';
|
||||
const uint32 kListMode = 'Tlst';
|
||||
const uint32 kScaleIconMode = 'Tsic'; // new mode for scaled icons
|
||||
|
||||
const uint32 kCheckTypeahead = 'Tcty';
|
||||
|
||||
|
|
|
@ -159,8 +159,7 @@ BTextWidget::CalcRectCommon(BPoint poseLoc, const BColumn *column,
|
|||
|
||||
result.bottom = poseLoc.y + (view->ListElemHeight() - 1);
|
||||
} else {
|
||||
if (view->ViewMode() == kIconMode
|
||||
|| view->ViewMode() == kScaleIconMode) {
|
||||
if (view->ViewMode() == kIconMode) {
|
||||
// large/scaled icon mode
|
||||
result.left = poseLoc.x + (view->IconSizeInt() - textWidth) / 2;
|
||||
} else {
|
||||
|
@ -338,7 +337,6 @@ BTextWidget::StartEdit(BRect bounds, BPoseView *view, BPose *pose)
|
|||
rect.right = rect.left + textView->LineWidth() + 3;
|
||||
// center new width, if necessary
|
||||
if (view->ViewMode() == kIconMode
|
||||
|| view->ViewMode() == kScaleIconMode
|
||||
|| view->ViewMode() == kListMode && fAlignment == B_ALIGN_CENTER) {
|
||||
rect.OffsetBy(bounds.Width() / 2 - rect.Width() / 2, 0);
|
||||
}
|
||||
|
@ -366,7 +364,6 @@ BTextWidget::StartEdit(BRect bounds, BPoseView *view, BPose *pose)
|
|||
// configure text view
|
||||
switch (view->ViewMode()) {
|
||||
case kIconMode:
|
||||
case kScaleIconMode:
|
||||
textView->SetAlignment(B_ALIGN_CENTER);
|
||||
break;
|
||||
|
||||
|
|
|
@ -70,6 +70,7 @@ const char *kViewStateSecondarySortAttrName = "ViewState:fSecondarySortAttr";
|
|||
const char *kViewStateSecondarySortTypeName = "ViewState:fSecondarySortType";
|
||||
const char *kViewStateReverseSortName = "ViewState:fReverseSort";
|
||||
const char *kViewStateIconSizeName = "ViewState:fIconSize";
|
||||
const char *kViewStateLastIconSizeName = "ViewState:fLastIconSize";
|
||||
|
||||
|
||||
static const int32 kColumnStateMinArchiveVersion = 21;
|
||||
|
@ -280,6 +281,7 @@ BViewState::BViewState()
|
|||
fViewMode = kListMode;
|
||||
fLastIconMode = 0;
|
||||
fIconSize = 32;
|
||||
fLastIconSize = 32;
|
||||
fListOrigin.Set(0, 0);
|
||||
fIconOrigin.Set(0, 0);
|
||||
fPrimarySortAttr = AttrHashString(kAttrStatName, B_STRING_TYPE);
|
||||
|
@ -304,12 +306,14 @@ BViewState::BViewState(BMallocIO *stream, bool endianSwap)
|
|||
stream->Read(&fSecondarySortType, sizeof(uint32));
|
||||
stream->Read(&fReverseSort, sizeof(bool));
|
||||
stream->Read(&fIconSize, sizeof(uint32));
|
||||
stream->Read(&fLastIconSize, sizeof(uint32));
|
||||
|
||||
if (endianSwap) {
|
||||
PRINT(("endian swapping view state\n"));
|
||||
fViewMode = B_SWAP_INT32(fViewMode);
|
||||
fLastIconMode = B_SWAP_INT32(fLastIconMode);
|
||||
fIconSize = B_SWAP_INT32(fIconSize);
|
||||
fLastIconSize = B_SWAP_INT32(fLastIconSize);
|
||||
swap_data(B_POINT_TYPE, &fListOrigin,
|
||||
sizeof(fListOrigin), B_SWAP_ALWAYS);
|
||||
swap_data(B_POINT_TYPE, &fIconOrigin,
|
||||
|
@ -365,6 +369,7 @@ BViewState::ArchiveToStream(BMallocIO *stream) const
|
|||
stream->Write(&fSecondarySortType, sizeof(uint32));
|
||||
stream->Write(&fReverseSort, sizeof(bool));
|
||||
stream->Write(&fIconSize, sizeof(uint32));
|
||||
stream->Write(&fLastIconSize, sizeof(uint32));
|
||||
}
|
||||
|
||||
|
||||
|
@ -388,6 +393,8 @@ BViewState::ArchiveToMessage(BMessage &message) const
|
|||
static_cast<int32>(fSecondarySortType));
|
||||
message.AddBool(kViewStateReverseSortName, fReverseSort);
|
||||
message.AddInt32(kViewStateIconSizeName, static_cast<int32>(fIconSize));
|
||||
message.AddInt32(kViewStateLastIconSizeName,
|
||||
static_cast<int32>(fLastIconSize));
|
||||
}
|
||||
|
||||
|
||||
|
@ -432,6 +439,7 @@ BViewState::_StorePreviousState()
|
|||
fPreviousViewMode = fViewMode;
|
||||
fPreviousLastIconMode = fLastIconMode;
|
||||
fPreviousIconSize = fIconSize;
|
||||
fPreviousLastIconSize = fLastIconSize;
|
||||
fPreviousListOrigin = fListOrigin;
|
||||
fPreviousIconOrigin = fIconOrigin;
|
||||
fPreviousPrimarySortAttr = fPrimarySortAttr;
|
||||
|
@ -458,6 +466,10 @@ BViewState::_Sanitize(BViewState *state, bool fixOnly)
|
|||
state->fIconSize = 16;
|
||||
if (state->fIconSize > 64)
|
||||
state->fIconSize = 64;
|
||||
if (state->fLastIconSize < 16)
|
||||
state->fLastIconSize = 16;
|
||||
if (state->fLastIconSize > 64)
|
||||
state->fLastIconSize = 64;
|
||||
|
||||
if (fixOnly)
|
||||
return state;
|
||||
|
@ -466,12 +478,10 @@ BViewState::_Sanitize(BViewState *state, bool fixOnly)
|
|||
if ((state->fViewMode != kListMode
|
||||
&& state->fViewMode != kIconMode
|
||||
&& state->fViewMode != kMiniIconMode
|
||||
&& state->fViewMode != kScaleIconMode
|
||||
&& state->fViewMode != 0)
|
||||
|| (state->fLastIconMode != kListMode
|
||||
&& state->fLastIconMode != kIconMode
|
||||
&& state->fLastIconMode != kMiniIconMode
|
||||
&& state->fLastIconMode != kScaleIconMode
|
||||
&& state->fLastIconMode != 0)) {
|
||||
PRINT(("Bad data instantiating ViewState, view mode %x, lastIconMode %x\n",
|
||||
state->fViewMode, state->fLastIconMode));
|
||||
|
|
|
@ -96,7 +96,7 @@ class BColumn {
|
|||
};
|
||||
|
||||
|
||||
const int32 kViewStateArchiveVersion = 10;
|
||||
const int32 kViewStateArchiveVersion = 11;
|
||||
// bump version when layout or size changes
|
||||
|
||||
class BViewState {
|
||||
|
@ -113,6 +113,7 @@ class BViewState {
|
|||
uint32 ViewMode() const;
|
||||
uint32 LastIconMode() const;
|
||||
uint32 IconSize() const;
|
||||
uint32 LastIconSize() const;
|
||||
BPoint ListOrigin() const;
|
||||
BPoint IconOrigin() const;
|
||||
uint32 PrimarySort() const;
|
||||
|
@ -124,6 +125,7 @@ class BViewState {
|
|||
void SetViewMode(uint32);
|
||||
void SetLastIconMode(uint32);
|
||||
void SetIconSize(uint32);
|
||||
void SetLastIconSize(uint32);
|
||||
void SetListOrigin(BPoint);
|
||||
void SetIconOrigin(BPoint);
|
||||
void SetPrimarySort(uint32);
|
||||
|
@ -140,6 +142,7 @@ class BViewState {
|
|||
uint32 fViewMode;
|
||||
uint32 fLastIconMode;
|
||||
uint32 fIconSize;
|
||||
uint32 fLastIconSize;
|
||||
BPoint fListOrigin;
|
||||
BPoint fIconOrigin;
|
||||
uint32 fPrimarySortAttr;
|
||||
|
@ -153,6 +156,7 @@ class BViewState {
|
|||
uint32 fPreviousViewMode;
|
||||
uint32 fPreviousLastIconMode;
|
||||
uint32 fPreviousIconSize;
|
||||
uint32 fPreviousLastIconSize;
|
||||
BPoint fPreviousListOrigin;
|
||||
BPoint fPreviousIconOrigin;
|
||||
uint32 fPreviousPrimarySortAttr;
|
||||
|
@ -268,6 +272,13 @@ BViewState::IconSize() const
|
|||
}
|
||||
|
||||
|
||||
inline uint32
|
||||
BViewState::LastIconSize() const
|
||||
{
|
||||
return fLastIconSize;
|
||||
}
|
||||
|
||||
|
||||
inline BPoint
|
||||
BViewState::ListOrigin() const
|
||||
{
|
||||
|
@ -336,6 +347,13 @@ BViewState::SetIconSize(uint32 size)
|
|||
}
|
||||
|
||||
|
||||
inline void
|
||||
BViewState::SetLastIconSize(uint32 size)
|
||||
{
|
||||
fLastIconSize = size;
|
||||
}
|
||||
|
||||
|
||||
inline void
|
||||
BViewState::SetListOrigin(BPoint newOrigin)
|
||||
{
|
||||
|
@ -389,6 +407,7 @@ BViewState::StateNeedsSaving()
|
|||
return (fPreviousViewMode != fViewMode)
|
||||
|| (fPreviousLastIconMode != fLastIconMode)
|
||||
|| (fPreviousIconSize != fIconSize)
|
||||
|| (fPreviousLastIconSize != fLastIconSize)
|
||||
|| (fPreviousListOrigin != fListOrigin)
|
||||
|| (fPreviousIconOrigin != fIconOrigin)
|
||||
|| (fPreviousPrimarySortAttr != fPrimarySortAttr)
|
||||
|
|
Loading…
Reference in New Issue