Ticket #1349: patch

File patch, 7.0 KB (added by stpere, 13 years ago)
  • PoseView.cpp

     
    24022402                be_clipboard->Unlock();
    24032403            }
    24042404            break;
     2405
     2406        case kArrangeBy:
     2407        {
     2408            uint32 attrHash;
     2409            if (message->FindInt32("attr_hash", (int32*)&attrHash) == B_OK) {
     2410                if (ColumnFor(attrHash) == NULL)
     2411                    HandleAttrMenuItemSelected(message);
     2412
     2413                if (PrimarySort() == attrHash)
     2414                    attrHash = 0;
     2415                   
     2416                SetPrimarySort(attrHash);
     2417                SetSecondarySort(0);
     2418                Cleanup(true);
     2419            }
     2420            break;
     2421        }
     2422        case kArrangeReverseOrder:
     2423            SetReverseSort(!fViewState->ReverseSort());
     2424            Cleanup(true);
     2425            break;
     2426
    24052427        case kAttributeItem:
    24062428            HandleAttrMenuItemSelected(message);
    24072429            break;
     
    29813003        AddToVSList(pose);
    29823004    }
    29833005
    2984     // sort poselist if we are switching to list mode
    2985     if (newMode == kListMode)
    2986         SortPoses();
    2987     else
     3006    SortPoses();
     3007    if (newMode != kListMode)
    29883008        RecalcExtent();
    29893009
    29903010    UpdateScrollRange();
  • ContainerWindow.cpp

     
    567567    fAttrMenu(NULL),
    568568    fWindowMenu(NULL),
    569569    fFileMenu(NULL),
     570    fArrangeByMenu(NULL),
    570571    fSelectionWindow(NULL),
    571572    fTaskLoop(NULL),
    572573    fIsTrash(false),
     
    886887    if (PoseView()->ViewMode() == kListMode)
    887888        ShowAttributeMenu();
    888889
     890    PopulateArrangeByMenu(fArrangeByMenu);
     891
    889892    int32 selectCount = PoseView()->SelectionList()->CountItems();
    890893
    891894    SetupOpenWithMenu(fFileMenu);
     
    17481751
    17491752
    17501753void
    1751 BContainerWindow::SetCleanUpItem(BMenu *menu)
     1754BContainerWindow::SetArrangeMenu(BMenu *menu)
    17521755{
    17531756    BMenuItem *item;
    17541757    if ((item = menu->FindItem(kCleanup)) == NULL
    17551758        && (item = menu->FindItem(kCleanupAll)) == NULL)
    17561759        return;
    17571760
    1758     item->SetEnabled(PoseView()->CountItems() > 0
     1761    item->Menu()->SetEnabled(PoseView()->CountItems() > 0
    17591762        && (PoseView()->ViewMode() != kListMode));
    17601763
     1764    BMenu* arrangeMenu;
     1765
    17611766    if (modifiers() & B_SHIFT_KEY) {
    17621767        item->SetLabel(B_TRANSLATE("Clean up all"));
    17631768        item->SetShortcut('K', B_COMMAND_KEY | B_SHIFT_KEY);
    17641769        item->SetMessage(new BMessage(kCleanupAll));
     1770        arrangeMenu = item->Menu();
    17651771    } else {
    17661772        item->SetLabel(B_TRANSLATE("Clean up"));
    17671773        item->SetShortcut('K', B_COMMAND_KEY);
    17681774        item->SetMessage(new BMessage(kCleanup));
     1775        arrangeMenu = item->Menu();
    17691776    }
     1777    MarkArrangeByMenu(arrangeMenu);
    17701778}
    17711779
    17721780
     
    18181826    // just create the attribute, decide to add it later
    18191827    fAttrMenu = new BMenu(B_TRANSLATE("Attributes"));
    18201828    NewAttributeMenu(fAttrMenu);
     1829    PopulateArrangeByMenu(fArrangeByMenu);
    18211830}
    18221831
    18231832
     
    19771986    item->SetTarget(this);
    19781987    menu->AddItem(item);
    19791988
    1980     item = new BMenuItem(B_TRANSLATE("Clean up"), new BMessage(kCleanup), 'K');
    1981     item->SetTarget(PoseView());
    1982     menu->AddItem(item);
     1989    fArrangeByMenu = new BMenu(B_TRANSLATE("Arrange by"));
     1990    menu->AddItem(fArrangeByMenu);
    19831991
    19841992    item = new BMenuItem(B_TRANSLATE("Select"B_UTF8_ELLIPSIS),
    19851993        new BMessage(kShowSelectionWindow), 'A', B_SHIFT_KEY);
     
    27442752    menu->AddItem(pasteItem);
    27452753    menu->AddSeparatorItem();
    27462754#endif
    2747     menu->AddItem(new BMenuItem(B_TRANSLATE("Clean up"),
    2748         new BMessage(kCleanup), 'K'));
     2755    BMenu* arrangeBy = new BMenu(B_TRANSLATE("Arrange by"));
     2756    PopulateArrangeByMenu(arrangeBy);
     2757
     2758    menu->AddItem(arrangeBy);
     2759
    27492760    menu->AddItem(new BMenuItem(B_TRANSLATE("Select"B_UTF8_ELLIPSIS),
    27502761        new BMessage(kShowSelectionWindow), 'A', B_SHIFT_KEY));
    27512762    menu->AddItem(new BMenuItem(B_TRANSLATE("Select all"),
     
    30553066        MarkNamedMenuItem(menu, kMiniIconMode, viewMode == kMiniIconMode);
    30563067
    30573068        SetCloseItem(menu);
    3058         SetCleanUpItem(menu);
     3069        SetArrangeMenu(menu);
    30593070        SetPasteItem(menu);
    30603071
    30613072        EnableNamedMenuItem(menu, kOpenParentDir, !TargetModel()->IsRoot());
     
    32583269
    32593270
    32603271void
     3272BContainerWindow::MarkArrangeByMenu(BMenu* menu)
     3273{
     3274    if (!menu)
     3275        return;
     3276
     3277    int32 count = menu->CountItems();
     3278    for (int32 index = 0; index < count; index++) {
     3279        BMenuItem* item = menu->ItemAt(index);
     3280        if (item->Message()) {
     3281            uint32 attrHash;
     3282            if (item->Message()->FindInt32("attr_hash", (int32*)&attrHash) == B_OK)
     3283                item->SetMarked(PoseView()->PrimarySort() == attrHash);
     3284            else if (item->Command() == kArrangeReverseOrder)
     3285                item->SetMarked(PoseView()->ReverseSort());     
     3286        }
     3287    }
     3288}
     3289
     3290
     3291void
    32613292BContainerWindow::AddMimeTypesToMenu()
    32623293{
    32633294    AddMimeTypesToMenu(fAttrMenu);
     
    39914022}
    39924023
    39934024
     4025void
     4026BContainerWindow::PopulateArrangeByMenu(BMenu* menu)
     4027{
     4028    if (!fAttrMenu || !menu)
     4029        return;
     4030    // empty fArrangeByMenu...
     4031    BMenuItem* item;
     4032    while ((item = menu->RemoveItem((int32)0)) != NULL)
     4033        delete item;
     4034
     4035    int32 itemCount = fAttrMenu->CountItems();
     4036    for (int32 i = 0; i < itemCount; i++) {
     4037        item = fAttrMenu->ItemAt(i);
     4038        if (item->Command() == kAttributeItem) {
     4039            BMessage* message = new BMessage(*(item->Message()));
     4040            message->what = kArrangeBy;
     4041            BMenuItem* newItem = new BMenuItem(item->Label(), message);
     4042            newItem->SetTarget(PoseView());
     4043            menu->AddItem(newItem);         
     4044        }
     4045    }
     4046
     4047    menu->AddSeparatorItem();
     4048
     4049    item = new BMenuItem(B_TRANSLATE("Reverse order"),
     4050        new BMessage(kArrangeReverseOrder));
     4051
     4052    item->SetTarget(PoseView());
     4053    menu->AddItem(item);
     4054    menu->AddSeparatorItem();
     4055
     4056
     4057    item = new BMenuItem(B_TRANSLATE("Clean up"), new BMessage(kCleanup), 'K');
     4058    item->SetTarget(PoseView());
     4059    menu->AddItem(item);
     4060}
     4061
     4062
    39944063//  #pragma mark -
    39954064
    39964065
  • ContainerWindow.h

     
    150150        void AddMimeTypesToMenu();
    151151        virtual void MarkAttributeMenu(BMenu *);
    152152        void MarkAttributeMenu();
     153        void MarkArrangeByMenu(BMenu *);
    153154        BMenuItem *NewAttributeMenuItem(const char *label, const char *name,
    154155            int32 type, float width, int32 align, bool editable, bool statField);
    155156        BMenuItem *NewAttributeMenuItem(const char *label, const char *name,
     
    216217        virtual void AddTrashContextMenus(BMenu *);
    217218
    218219        virtual void RepopulateMenus();
     220        void PopulateArrangeByMenu(BMenu* );
    219221
    220222        virtual void SetCutItem(BMenu *);
    221223        virtual void SetCopyItem(BMenu *);
    222224        virtual void SetPasteItem(BMenu *);
    223         virtual void SetCleanUpItem(BMenu *);
     225        virtual void SetArrangeMenu(BMenu *);
    224226        virtual void SetCloseItem(BMenu *);
    225227        virtual void SetupNavigationMenu(const entry_ref *, BMenu *);
    226228        virtual void SetupMoveCopyMenus(const entry_ref *, BMenu *);
     
    268270        BMenu *fAttrMenu;
    269271        BMenu *fWindowMenu;
    270272        BMenu *fFileMenu;
     273        BMenu *fArrangeByMenu;
    271274
    272275        SelectionWindow *fSelectionWindow;
    273276
  • Commands.h

     
    8585const uint32 kOpenDir = 'Topd';
    8686const uint32 kCleanup = 'Tcln';
    8787const uint32 kCleanupAll = 'Tcla';
     88
     89const uint32 kArrangeBy = 'ARBY';
     90const uint32 kArrangeReverseOrder = 'ARRO';
     91
    8892const uint32 kResizeToFit = 'Trtf';
    8993const uint32 kSelectMatchingEntries = 'Tsme';
    9094const uint32 kShowSelectionWindow = 'Tssw';