* Copyright 2020-2024 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* John Scipione, jscipione@gmail.com
*/
#include "LiveMenu.h"
#include <string.h>
#include <Application.h>
#include <Locale.h>
#include <MenuItem.h>
#include <Window.h>
#include "Commands.h"
#include "TrackerSettings.h"
TLiveMixin::TLiveMixin(const BContainerWindow* window)
{
fWindow = window;
}
void
TLiveMixin::UpdateFileMenu(BMenu* menu)
{
if (menu == NULL)
return;
if (menu->Window()->LockLooper()) {
int32 itemCount = menu->CountItems();
for (int32 index = 0; index < itemCount; index++) {
BMenuItem* item = menu->ItemAt(index);
if (item == NULL || item->Message() == NULL)
continue;
switch (item->Message()->what) {
case kMoveSelectionToTrash:
case kDeleteSelection:
if (!fWindow->Shortcuts()->IsTrash())
fWindow->Shortcuts()->UpdateMoveToTrashItem(item);
break;
case kCreateLink:
case kCreateRelativeLink:
fWindow->Shortcuts()->UpdateCreateLinkItem(item);
break;
case B_CUT:
case kCutMoreSelectionToClipboard:
fWindow->Shortcuts()->UpdateCutItem(item);
break;
case B_COPY:
case kCopyMoreSelectionToClipboard:
fWindow->Shortcuts()->UpdateCopyItem(item);
break;
case B_PASTE:
case kPasteLinksFromClipboard:
fWindow->Shortcuts()->UpdatePasteItem(item);
break;
case kIdentifyEntry:
fWindow->Shortcuts()->UpdateIdentifyItem(item);
break;
}
}
menu->Window()->UnlockLooper();
}
}
void
TLiveMixin::UpdateWindowMenu(BMenu* menu)
{
if (menu == NULL)
return;
if (menu->Window()->LockLooper()) {
int32 itemCount = menu->CountItems();
for (int32 index = 0; index < itemCount; index++) {
BMenuItem* item = menu->ItemAt(index);
if (item == NULL || item->Message() == NULL)
continue;
switch (item->Message()->what) {
case kCleanup:
case kCleanupAll:
fWindow->Shortcuts()->UpdateCleanupItem(item);
break;
case kOpenParentDir:
fWindow->Shortcuts()->UpdateOpenParentItem(item);
break;
case B_QUIT_REQUESTED:
case kCloseAllWindows:
fWindow->Shortcuts()->UpdateCloseItem(item);
break;
}
}
menu->Window()->UnlockLooper();
}
}
TLiveMenu::TLiveMenu(const char* label)
:
BMenu(label)
{
}
TLiveMenu::~TLiveMenu()
{
}
void
TLiveMenu::MessageReceived(BMessage* message)
{
if (message != NULL && message->what == B_MODIFIERS_CHANGED)
Update();
else
BMenu::MessageReceived(message);
}
void
TLiveMenu::Update()
{
}
TLivePopUpMenu::TLivePopUpMenu(const char* label, bool radioMode, bool labelFromMarked,
menu_layout layout)
:
BPopUpMenu(label, radioMode, labelFromMarked, layout)
{
}
TLivePopUpMenu::~TLivePopUpMenu()
{
}
void
TLivePopUpMenu::MessageReceived(BMessage* message)
{
if (message != NULL && message->what == B_MODIFIERS_CHANGED)
Update();
else
BMenu::MessageReceived(message);
}
void
TLivePopUpMenu::Update()
{
}
TLiveArrangeByMenu::TLiveArrangeByMenu(const char* label, const BContainerWindow* window)
:
TLiveMenu(label),
TLiveMixin(window)
{
}
TLiveArrangeByMenu::~TLiveArrangeByMenu()
{
}
void
TLiveArrangeByMenu::Update()
{
TShortcuts().UpdateCleanupItem(TShortcuts().FindItem(this, kCleanup, kCleanupAll));
}
TLiveFileMenu::TLiveFileMenu(const char* label, const BContainerWindow* window)
:
TLiveMenu(label),
TLiveMixin(window)
{
}
TLiveFileMenu::~TLiveFileMenu()
{
}
void
TLiveFileMenu::Update()
{
UpdateFileMenu(this);
}
TLivePosePopUpMenu::TLivePosePopUpMenu(const char* label, const BContainerWindow* window,
bool radioMode, bool labelFromMarked, menu_layout layout)
:
TLivePopUpMenu(label, radioMode, labelFromMarked, layout),
TLiveMixin(window)
{
}
TLivePosePopUpMenu::~TLivePosePopUpMenu()
{
}
void
TLivePosePopUpMenu::Update()
{
UpdateFileMenu(this);
}
TLiveWindowMenu::TLiveWindowMenu(const char* label, const BContainerWindow* window)
:
TLiveMenu(label),
TLiveMixin(window)
{
}
TLiveWindowMenu::~TLiveWindowMenu()
{
}
void
TLiveWindowMenu::Update()
{
UpdateWindowMenu(this);
}
TLiveWindowPopUpMenu::TLiveWindowPopUpMenu(const char* label, const BContainerWindow* window,
bool radioMode, bool labelFromMarked, menu_layout layout)
:
TLivePopUpMenu(label, radioMode, labelFromMarked, layout),
TLiveMixin(window)
{
}
TLiveWindowPopUpMenu::~TLiveWindowPopUpMenu()
{
}
void
TLiveWindowPopUpMenu::Update()
{
UpdateWindowMenu(this);
}