Tracker:
* Add "Arrange By" submenu in Window menu. * You can arrange by the same fields you can sort by in list view. Changing your sorting order in list view will change the Arrange By choice when you enter icon view and vice-versa. * Support ReverseSort order. * Keep the clean-up feature, but it's now under the Arrange By menu. Fixing ticket #1349. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42448 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -85,6 +85,10 @@ const uint32 kOpenParentDir = 'Topt';
|
|||||||
const uint32 kOpenDir = 'Topd';
|
const uint32 kOpenDir = 'Topd';
|
||||||
const uint32 kCleanup = 'Tcln';
|
const uint32 kCleanup = 'Tcln';
|
||||||
const uint32 kCleanupAll = 'Tcla';
|
const uint32 kCleanupAll = 'Tcla';
|
||||||
|
|
||||||
|
const uint32 kArrangeBy = 'ARBY';
|
||||||
|
const uint32 kArrangeReverseOrder = 'ARRO';
|
||||||
|
|
||||||
const uint32 kResizeToFit = 'Trtf';
|
const uint32 kResizeToFit = 'Trtf';
|
||||||
const uint32 kSelectMatchingEntries = 'Tsme';
|
const uint32 kSelectMatchingEntries = 'Tsme';
|
||||||
const uint32 kShowSelectionWindow = 'Tssw';
|
const uint32 kShowSelectionWindow = 'Tssw';
|
||||||
|
|||||||
@@ -567,6 +567,7 @@ BContainerWindow::BContainerWindow(LockingList<BWindow> *list,
|
|||||||
fAttrMenu(NULL),
|
fAttrMenu(NULL),
|
||||||
fWindowMenu(NULL),
|
fWindowMenu(NULL),
|
||||||
fFileMenu(NULL),
|
fFileMenu(NULL),
|
||||||
|
fArrangeByMenu(NULL),
|
||||||
fSelectionWindow(NULL),
|
fSelectionWindow(NULL),
|
||||||
fTaskLoop(NULL),
|
fTaskLoop(NULL),
|
||||||
fIsTrash(false),
|
fIsTrash(false),
|
||||||
@@ -886,6 +887,8 @@ BContainerWindow::RepopulateMenus()
|
|||||||
if (PoseView()->ViewMode() == kListMode)
|
if (PoseView()->ViewMode() == kListMode)
|
||||||
ShowAttributeMenu();
|
ShowAttributeMenu();
|
||||||
|
|
||||||
|
PopulateArrangeByMenu(fArrangeByMenu);
|
||||||
|
|
||||||
int32 selectCount = PoseView()->SelectionList()->CountItems();
|
int32 selectCount = PoseView()->SelectionList()->CountItems();
|
||||||
|
|
||||||
SetupOpenWithMenu(fFileMenu);
|
SetupOpenWithMenu(fFileMenu);
|
||||||
@@ -1748,25 +1751,30 @@ BContainerWindow::SetPasteItem(BMenu *menu)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BContainerWindow::SetCleanUpItem(BMenu *menu)
|
BContainerWindow::SetArrangeMenu(BMenu *menu)
|
||||||
{
|
{
|
||||||
BMenuItem *item;
|
BMenuItem *item;
|
||||||
if ((item = menu->FindItem(kCleanup)) == NULL
|
if ((item = menu->FindItem(kCleanup)) == NULL
|
||||||
&& (item = menu->FindItem(kCleanupAll)) == NULL)
|
&& (item = menu->FindItem(kCleanupAll)) == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
item->SetEnabled(PoseView()->CountItems() > 0
|
item->Menu()->SetEnabled(PoseView()->CountItems() > 0
|
||||||
&& (PoseView()->ViewMode() != kListMode));
|
&& (PoseView()->ViewMode() != kListMode));
|
||||||
|
|
||||||
|
BMenu* arrangeMenu;
|
||||||
|
|
||||||
if (modifiers() & B_SHIFT_KEY) {
|
if (modifiers() & B_SHIFT_KEY) {
|
||||||
item->SetLabel(B_TRANSLATE("Clean up all"));
|
item->SetLabel(B_TRANSLATE("Clean up all"));
|
||||||
item->SetShortcut('K', B_COMMAND_KEY | B_SHIFT_KEY);
|
item->SetShortcut('K', B_COMMAND_KEY | B_SHIFT_KEY);
|
||||||
item->SetMessage(new BMessage(kCleanupAll));
|
item->SetMessage(new BMessage(kCleanupAll));
|
||||||
|
arrangeMenu = item->Menu();
|
||||||
} else {
|
} else {
|
||||||
item->SetLabel(B_TRANSLATE("Clean up"));
|
item->SetLabel(B_TRANSLATE("Clean up"));
|
||||||
item->SetShortcut('K', B_COMMAND_KEY);
|
item->SetShortcut('K', B_COMMAND_KEY);
|
||||||
item->SetMessage(new BMessage(kCleanup));
|
item->SetMessage(new BMessage(kCleanup));
|
||||||
|
arrangeMenu = item->Menu();
|
||||||
}
|
}
|
||||||
|
MarkArrangeByMenu(arrangeMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1818,6 +1826,7 @@ BContainerWindow::AddMenus()
|
|||||||
// just create the attribute, decide to add it later
|
// just create the attribute, decide to add it later
|
||||||
fAttrMenu = new BMenu(B_TRANSLATE("Attributes"));
|
fAttrMenu = new BMenu(B_TRANSLATE("Attributes"));
|
||||||
NewAttributeMenu(fAttrMenu);
|
NewAttributeMenu(fAttrMenu);
|
||||||
|
PopulateArrangeByMenu(fArrangeByMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1977,9 +1986,8 @@ BContainerWindow::AddWindowMenu(BMenu *menu)
|
|||||||
item->SetTarget(this);
|
item->SetTarget(this);
|
||||||
menu->AddItem(item);
|
menu->AddItem(item);
|
||||||
|
|
||||||
item = new BMenuItem(B_TRANSLATE("Clean up"), new BMessage(kCleanup), 'K');
|
fArrangeByMenu = new BMenu(B_TRANSLATE("Arrange by"));
|
||||||
item->SetTarget(PoseView());
|
menu->AddItem(fArrangeByMenu);
|
||||||
menu->AddItem(item);
|
|
||||||
|
|
||||||
item = new BMenuItem(B_TRANSLATE("Select"B_UTF8_ELLIPSIS),
|
item = new BMenuItem(B_TRANSLATE("Select"B_UTF8_ELLIPSIS),
|
||||||
new BMessage(kShowSelectionWindow), 'A', B_SHIFT_KEY);
|
new BMessage(kShowSelectionWindow), 'A', B_SHIFT_KEY);
|
||||||
@@ -2744,8 +2752,11 @@ BContainerWindow::AddWindowContextMenus(BMenu *menu)
|
|||||||
menu->AddItem(pasteItem);
|
menu->AddItem(pasteItem);
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
#endif
|
#endif
|
||||||
menu->AddItem(new BMenuItem(B_TRANSLATE("Clean up"),
|
BMenu* arrangeBy = new BMenu(B_TRANSLATE("Arrange by"));
|
||||||
new BMessage(kCleanup), 'K'));
|
PopulateArrangeByMenu(arrangeBy);
|
||||||
|
|
||||||
|
menu->AddItem(arrangeBy);
|
||||||
|
|
||||||
menu->AddItem(new BMenuItem(B_TRANSLATE("Select"B_UTF8_ELLIPSIS),
|
menu->AddItem(new BMenuItem(B_TRANSLATE("Select"B_UTF8_ELLIPSIS),
|
||||||
new BMessage(kShowSelectionWindow), 'A', B_SHIFT_KEY));
|
new BMessage(kShowSelectionWindow), 'A', B_SHIFT_KEY));
|
||||||
menu->AddItem(new BMenuItem(B_TRANSLATE("Select all"),
|
menu->AddItem(new BMenuItem(B_TRANSLATE("Select all"),
|
||||||
@@ -3055,7 +3066,7 @@ BContainerWindow::UpdateMenu(BMenu *menu, UpdateMenuContext context)
|
|||||||
MarkNamedMenuItem(menu, kMiniIconMode, viewMode == kMiniIconMode);
|
MarkNamedMenuItem(menu, kMiniIconMode, viewMode == kMiniIconMode);
|
||||||
|
|
||||||
SetCloseItem(menu);
|
SetCloseItem(menu);
|
||||||
SetCleanUpItem(menu);
|
SetArrangeMenu(menu);
|
||||||
SetPasteItem(menu);
|
SetPasteItem(menu);
|
||||||
|
|
||||||
EnableNamedMenuItem(menu, kOpenParentDir, !TargetModel()->IsRoot());
|
EnableNamedMenuItem(menu, kOpenParentDir, !TargetModel()->IsRoot());
|
||||||
@@ -3257,6 +3268,26 @@ BContainerWindow::MarkAttributeMenu(BMenu *menu)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
BContainerWindow::MarkArrangeByMenu(BMenu* menu)
|
||||||
|
{
|
||||||
|
if (!menu)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int32 count = menu->CountItems();
|
||||||
|
for (int32 index = 0; index < count; index++) {
|
||||||
|
BMenuItem* item = menu->ItemAt(index);
|
||||||
|
if (item->Message()) {
|
||||||
|
uint32 attrHash;
|
||||||
|
if (item->Message()->FindInt32("attr_hash", (int32*)&attrHash) == B_OK)
|
||||||
|
item->SetMarked(PoseView()->PrimarySort() == attrHash);
|
||||||
|
else if (item->Command() == kArrangeReverseOrder)
|
||||||
|
item->SetMarked(PoseView()->ReverseSort());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BContainerWindow::AddMimeTypesToMenu()
|
BContainerWindow::AddMimeTypesToMenu()
|
||||||
{
|
{
|
||||||
@@ -3991,6 +4022,44 @@ BContainerWindow::PulseTaskLoop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
BContainerWindow::PopulateArrangeByMenu(BMenu* menu)
|
||||||
|
{
|
||||||
|
if (!fAttrMenu || !menu)
|
||||||
|
return;
|
||||||
|
// empty fArrangeByMenu...
|
||||||
|
BMenuItem* item;
|
||||||
|
while ((item = menu->RemoveItem((int32)0)) != NULL)
|
||||||
|
delete item;
|
||||||
|
|
||||||
|
int32 itemCount = fAttrMenu->CountItems();
|
||||||
|
for (int32 i = 0; i < itemCount; i++) {
|
||||||
|
item = fAttrMenu->ItemAt(i);
|
||||||
|
if (item->Command() == kAttributeItem) {
|
||||||
|
BMessage* message = new BMessage(*(item->Message()));
|
||||||
|
message->what = kArrangeBy;
|
||||||
|
BMenuItem* newItem = new BMenuItem(item->Label(), message);
|
||||||
|
newItem->SetTarget(PoseView());
|
||||||
|
menu->AddItem(newItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menu->AddSeparatorItem();
|
||||||
|
|
||||||
|
item = new BMenuItem(B_TRANSLATE("Reverse order"),
|
||||||
|
new BMessage(kArrangeReverseOrder));
|
||||||
|
|
||||||
|
item->SetTarget(PoseView());
|
||||||
|
menu->AddItem(item);
|
||||||
|
menu->AddSeparatorItem();
|
||||||
|
|
||||||
|
|
||||||
|
item = new BMenuItem(B_TRANSLATE("Clean up"), new BMessage(kCleanup), 'K');
|
||||||
|
item->SetTarget(PoseView());
|
||||||
|
menu->AddItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -150,6 +150,7 @@ class BContainerWindow : public BWindow {
|
|||||||
void AddMimeTypesToMenu();
|
void AddMimeTypesToMenu();
|
||||||
virtual void MarkAttributeMenu(BMenu *);
|
virtual void MarkAttributeMenu(BMenu *);
|
||||||
void MarkAttributeMenu();
|
void MarkAttributeMenu();
|
||||||
|
void MarkArrangeByMenu(BMenu *);
|
||||||
BMenuItem *NewAttributeMenuItem(const char *label, const char *name,
|
BMenuItem *NewAttributeMenuItem(const char *label, const char *name,
|
||||||
int32 type, float width, int32 align, bool editable, bool statField);
|
int32 type, float width, int32 align, bool editable, bool statField);
|
||||||
BMenuItem *NewAttributeMenuItem(const char *label, const char *name,
|
BMenuItem *NewAttributeMenuItem(const char *label, const char *name,
|
||||||
@@ -216,11 +217,12 @@ class BContainerWindow : public BWindow {
|
|||||||
virtual void AddTrashContextMenus(BMenu *);
|
virtual void AddTrashContextMenus(BMenu *);
|
||||||
|
|
||||||
virtual void RepopulateMenus();
|
virtual void RepopulateMenus();
|
||||||
|
void PopulateArrangeByMenu(BMenu* );
|
||||||
|
|
||||||
virtual void SetCutItem(BMenu *);
|
virtual void SetCutItem(BMenu *);
|
||||||
virtual void SetCopyItem(BMenu *);
|
virtual void SetCopyItem(BMenu *);
|
||||||
virtual void SetPasteItem(BMenu *);
|
virtual void SetPasteItem(BMenu *);
|
||||||
virtual void SetCleanUpItem(BMenu *);
|
virtual void SetArrangeMenu(BMenu *);
|
||||||
virtual void SetCloseItem(BMenu *);
|
virtual void SetCloseItem(BMenu *);
|
||||||
virtual void SetupNavigationMenu(const entry_ref *, BMenu *);
|
virtual void SetupNavigationMenu(const entry_ref *, BMenu *);
|
||||||
virtual void SetupMoveCopyMenus(const entry_ref *, BMenu *);
|
virtual void SetupMoveCopyMenus(const entry_ref *, BMenu *);
|
||||||
@@ -268,6 +270,7 @@ class BContainerWindow : public BWindow {
|
|||||||
BMenu *fAttrMenu;
|
BMenu *fAttrMenu;
|
||||||
BMenu *fWindowMenu;
|
BMenu *fWindowMenu;
|
||||||
BMenu *fFileMenu;
|
BMenu *fFileMenu;
|
||||||
|
BMenu *fArrangeByMenu;
|
||||||
|
|
||||||
SelectionWindow *fSelectionWindow;
|
SelectionWindow *fSelectionWindow;
|
||||||
|
|
||||||
|
|||||||
@@ -2402,6 +2402,28 @@ BPoseView::MessageReceived(BMessage *message)
|
|||||||
be_clipboard->Unlock();
|
be_clipboard->Unlock();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case kArrangeBy:
|
||||||
|
{
|
||||||
|
uint32 attrHash;
|
||||||
|
if (message->FindInt32("attr_hash", (int32*)&attrHash) == B_OK) {
|
||||||
|
if (ColumnFor(attrHash) == NULL)
|
||||||
|
HandleAttrMenuItemSelected(message);
|
||||||
|
|
||||||
|
if (PrimarySort() == attrHash)
|
||||||
|
attrHash = 0;
|
||||||
|
|
||||||
|
SetPrimarySort(attrHash);
|
||||||
|
SetSecondarySort(0);
|
||||||
|
Cleanup(true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case kArrangeReverseOrder:
|
||||||
|
SetReverseSort(!fViewState->ReverseSort());
|
||||||
|
Cleanup(true);
|
||||||
|
break;
|
||||||
|
|
||||||
case kAttributeItem:
|
case kAttributeItem:
|
||||||
HandleAttrMenuItemSelected(message);
|
HandleAttrMenuItemSelected(message);
|
||||||
break;
|
break;
|
||||||
@@ -2981,10 +3003,8 @@ BPoseView::SetViewMode(uint32 newMode)
|
|||||||
AddToVSList(pose);
|
AddToVSList(pose);
|
||||||
}
|
}
|
||||||
|
|
||||||
// sort poselist if we are switching to list mode
|
SortPoses();
|
||||||
if (newMode == kListMode)
|
if (newMode != kListMode)
|
||||||
SortPoses();
|
|
||||||
else
|
|
||||||
RecalcExtent();
|
RecalcExtent();
|
||||||
|
|
||||||
UpdateScrollRange();
|
UpdateScrollRange();
|
||||||
|
|||||||
Reference in New Issue
Block a user