[haiku-commits] r42448 - haiku/trunk/src/kits/tracker

  • From: stpere@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 19 Jul 2011 05:52:42 +0200 (CEST)

Author: stpere
Date: 2011-07-19 05:52:42 +0200 (Tue, 19 Jul 2011)
New Revision: 42448
Changeset: https://dev.haiku-os.org/changeset/42448
Ticket: https://dev.haiku-os.org/ticket/1349

Modified:
   haiku/trunk/src/kits/tracker/Commands.h
   haiku/trunk/src/kits/tracker/ContainerWindow.cpp
   haiku/trunk/src/kits/tracker/ContainerWindow.h
   haiku/trunk/src/kits/tracker/PoseView.cpp
Log:
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.



Modified: haiku/trunk/src/kits/tracker/Commands.h
===================================================================
--- haiku/trunk/src/kits/tracker/Commands.h     2011-07-17 17:28:29 UTC (rev 
42447)
+++ haiku/trunk/src/kits/tracker/Commands.h     2011-07-19 03:52:42 UTC (rev 
42448)
@@ -85,6 +85,10 @@
 const uint32 kOpenDir = 'Topd';
 const uint32 kCleanup = 'Tcln';
 const uint32 kCleanupAll = 'Tcla';
+
+const uint32 kArrangeBy = 'ARBY';
+const uint32 kArrangeReverseOrder = 'ARRO';
+
 const uint32 kResizeToFit = 'Trtf';
 const uint32 kSelectMatchingEntries = 'Tsme';
 const uint32 kShowSelectionWindow = 'Tssw';

Modified: haiku/trunk/src/kits/tracker/ContainerWindow.cpp
===================================================================
--- haiku/trunk/src/kits/tracker/ContainerWindow.cpp    2011-07-17 17:28:29 UTC 
(rev 42447)
+++ haiku/trunk/src/kits/tracker/ContainerWindow.cpp    2011-07-19 03:52:42 UTC 
(rev 42448)
@@ -567,6 +567,7 @@
        fAttrMenu(NULL),
        fWindowMenu(NULL),
        fFileMenu(NULL),
+       fArrangeByMenu(NULL),
        fSelectionWindow(NULL),
        fTaskLoop(NULL),
        fIsTrash(false),
@@ -886,6 +887,8 @@
        if (PoseView()->ViewMode() == kListMode)
                ShowAttributeMenu();
 
+       PopulateArrangeByMenu(fArrangeByMenu);
+
        int32 selectCount = PoseView()->SelectionList()->CountItems();
 
        SetupOpenWithMenu(fFileMenu);
@@ -1748,25 +1751,30 @@
 
 
 void
-BContainerWindow::SetCleanUpItem(BMenu *menu)
+BContainerWindow::SetArrangeMenu(BMenu *menu)
 {
        BMenuItem *item;
        if ((item = menu->FindItem(kCleanup)) == NULL
                && (item = menu->FindItem(kCleanupAll)) == NULL)
                return;
 
-       item->SetEnabled(PoseView()->CountItems() > 0
+       item->Menu()->SetEnabled(PoseView()->CountItems() > 0
                && (PoseView()->ViewMode() != kListMode));
 
+       BMenu* arrangeMenu;
+
        if (modifiers() & B_SHIFT_KEY) {
                item->SetLabel(B_TRANSLATE("Clean up all"));
                item->SetShortcut('K', B_COMMAND_KEY | B_SHIFT_KEY);
                item->SetMessage(new BMessage(kCleanupAll));
+               arrangeMenu = item->Menu();
        } else {
                item->SetLabel(B_TRANSLATE("Clean up"));
                item->SetShortcut('K', B_COMMAND_KEY);
                item->SetMessage(new BMessage(kCleanup));
+               arrangeMenu = item->Menu();
        }
+       MarkArrangeByMenu(arrangeMenu);
 }
 
 
@@ -1818,6 +1826,7 @@
        // just create the attribute, decide to add it later
        fAttrMenu = new BMenu(B_TRANSLATE("Attributes"));
        NewAttributeMenu(fAttrMenu);
+       PopulateArrangeByMenu(fArrangeByMenu);
 }
 
 
@@ -1977,9 +1986,8 @@
        item->SetTarget(this);
        menu->AddItem(item);
 
-       item = new BMenuItem(B_TRANSLATE("Clean up"), new BMessage(kCleanup), 
'K');
-       item->SetTarget(PoseView());
-       menu->AddItem(item);
+       fArrangeByMenu = new BMenu(B_TRANSLATE("Arrange by"));
+       menu->AddItem(fArrangeByMenu);
 
        item = new BMenuItem(B_TRANSLATE("Select"B_UTF8_ELLIPSIS),
                new BMessage(kShowSelectionWindow), 'A', B_SHIFT_KEY);
@@ -2744,8 +2752,11 @@
        menu->AddItem(pasteItem);
        menu->AddSeparatorItem();
 #endif
-       menu->AddItem(new BMenuItem(B_TRANSLATE("Clean up"),
-               new BMessage(kCleanup), 'K'));
+       BMenu* arrangeBy = new BMenu(B_TRANSLATE("Arrange by"));
+       PopulateArrangeByMenu(arrangeBy);
+
+       menu->AddItem(arrangeBy);
+
        menu->AddItem(new BMenuItem(B_TRANSLATE("Select"B_UTF8_ELLIPSIS),
                new BMessage(kShowSelectionWindow), 'A', B_SHIFT_KEY));
        menu->AddItem(new BMenuItem(B_TRANSLATE("Select all"),
@@ -3055,7 +3066,7 @@
                MarkNamedMenuItem(menu, kMiniIconMode, viewMode == 
kMiniIconMode);
 
                SetCloseItem(menu);
-               SetCleanUpItem(menu);
+               SetArrangeMenu(menu);
                SetPasteItem(menu);
 
                EnableNamedMenuItem(menu, kOpenParentDir, 
!TargetModel()->IsRoot());
@@ -3258,6 +3269,26 @@
 
 
 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
 BContainerWindow::AddMimeTypesToMenu()
 {
        AddMimeTypesToMenu(fAttrMenu);
@@ -3991,6 +4022,44 @@
 }
 
 
+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 -
 
 

Modified: haiku/trunk/src/kits/tracker/ContainerWindow.h
===================================================================
--- haiku/trunk/src/kits/tracker/ContainerWindow.h      2011-07-17 17:28:29 UTC 
(rev 42447)
+++ haiku/trunk/src/kits/tracker/ContainerWindow.h      2011-07-19 03:52:42 UTC 
(rev 42448)
@@ -150,6 +150,7 @@
                void AddMimeTypesToMenu();
                virtual void MarkAttributeMenu(BMenu *);
                void MarkAttributeMenu();
+               void MarkArrangeByMenu(BMenu *);
                BMenuItem *NewAttributeMenuItem(const char *label, const char 
*name,
                        int32 type, float width, int32 align, bool editable, 
bool statField);
                BMenuItem *NewAttributeMenuItem(const char *label, const char 
*name,
@@ -216,11 +217,12 @@
                virtual void AddTrashContextMenus(BMenu *);
 
                virtual void RepopulateMenus();
+               void PopulateArrangeByMenu(BMenu* );
 
                virtual void SetCutItem(BMenu *);
                virtual void SetCopyItem(BMenu *);
                virtual void SetPasteItem(BMenu *);
-               virtual void SetCleanUpItem(BMenu *);
+               virtual void SetArrangeMenu(BMenu *);
                virtual void SetCloseItem(BMenu *);
                virtual void SetupNavigationMenu(const entry_ref *, BMenu *);
                virtual void SetupMoveCopyMenus(const entry_ref *, BMenu *);
@@ -268,6 +270,7 @@
                BMenu *fAttrMenu;
                BMenu *fWindowMenu;
                BMenu *fFileMenu;
+               BMenu *fArrangeByMenu;
 
                SelectionWindow *fSelectionWindow;
 

Modified: haiku/trunk/src/kits/tracker/PoseView.cpp
===================================================================
--- haiku/trunk/src/kits/tracker/PoseView.cpp   2011-07-17 17:28:29 UTC (rev 
42447)
+++ haiku/trunk/src/kits/tracker/PoseView.cpp   2011-07-19 03:52:42 UTC (rev 
42448)
@@ -2402,6 +2402,28 @@
                                be_clipboard->Unlock();
                        }
                        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:
                        HandleAttrMenuItemSelected(message);
                        break;
@@ -2981,10 +3003,8 @@
                AddToVSList(pose);
        }
 
-       // sort poselist if we are switching to list mode
-       if (newMode == kListMode)
-               SortPoses();
-       else
+       SortPoses();
+       if (newMode != kListMode)
                RecalcExtent();
 
        UpdateScrollRange();


Other related posts:

  • » [haiku-commits] r42448 - haiku/trunk/src/kits/tracker - stpere