⛏️ index : haiku.git

/*
 * Copyright 2020-2024 Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *		John Scipione, jscipione@gmail.com
 */
#ifndef _SHORTCUTS_H
#define _SHORTCUTS_H


#include <SupportDefs.h>

#include "ContainerWindow.h"


class BMenu;
class BMenuItem;


namespace BPrivate {

class BPoseView;


class TShortcuts {
public:
								TShortcuts();
								TShortcuts(BContainerWindow* window);

			// build item

			BMenuItem*			AddOnsItem();
			const char*			AddOnsLabel();

			BMenuItem*			ArrangeByItem();
			const char*			ArrangeByLabel();

			BMenuItem*			AddPrinterItem();
			const char*			AddPrinterLabel();

			BMenuItem*			CleanupItem();
			const char*			CleanupLabel();
			int32				CleanupCommand();

			BMenuItem*			CloseItem();
			const char*			CloseLabel();
			int32				CloseCommand();

			BMenuItem*			CloseAllInWorkspaceItem();
			const char*			CloseAllInWorkspaceLabel();

			BMenuItem*			CopyItem();
			const char*			CopyLabel();
			int32				CopyCommand();

			BMenuItem*			CopyToItem();
			BMenuItem*			CopyToItem(BMenu*);
			const char*			CopyToLabel();

			BMenuItem*			CreateLinkItem();
			BMenuItem*			CreateLinkItem(BMenu*);
			const char*			CreateLinkLabel();
			int32				CreateLinkCommand();

			BMenuItem*			CreateLinkHereItem();
			const char*			CreateLinkHereLabel();
			int32				CreateLinkHereCommand();

			BMenuItem*			CutItem();
			const char*			CutLabel();
			int32				CutCommand();

			BMenuItem*			DeleteItem();
			const char*			DeleteLabel();

			BMenuItem*			DuplicateItem();
			const char*			DuplicateLabel();

			BMenuItem*			EditNameItem();
			const char*			EditNameLabel();

			BMenuItem*			EditQueryItem();
			const char*			EditQueryLabel();

			BMenuItem*			EmptyTrashItem();
			const char*			EmptyTrashLabel();

			BMenuItem*			FindItem();
			const char*			FindLabel();

			BMenuItem*			GetInfoItem();
			const char*			GetInfoLabel();

			BMenuItem*			IdentifyItem();
			const char*			IdentifyLabel();

			BMenuItem*			InvertSelectionItem();
			const char*			InvertSelectionLabel();

			BMenuItem*			MakeActivePrinterItem();
			const char*			MakeActivePrinterLabel();

			BMenuItem*			MountItem();
			BMenuItem*			MountItem(BMenu*);
			const char*			MountLabel();

			BMenuItem*			MoveToItem();
			BMenuItem*			MoveToItem(BMenu*);
			const char*			MoveToLabel();

			BMenuItem*			MoveToTrashItem();
			const char*			MoveToTrashLabel();
			int32				MoveToTrashCommand();

			BMenuItem*			NewFolderItem();
			const char*			NewFolderLabel();

			BMenuItem*			NewTemplatesItem();
			BMenuItem*			NewTemplatesItem(BMenu*);
			const char*			NewTemplatesLabel();

			BMenuItem*			OpenItem();
			const char*			OpenLabel();

			BMenuItem*			OpenParentItem();
			const char*			OpenParentLabel();

			BMenuItem*			OpenWithItem();
			BMenuItem*			OpenWithItem(BMenu*);
			const char*			OpenWithLabel();

			BMenuItem*			PasteItem();
			const char*			PasteLabel();
			int32				PasteCommand();

			BMenuItem*			RestoreItem();
			const char*			RestoreLabel();

			BMenuItem*			ReverseOrderItem();
			const char*			ReverseOrderLabel();

			BMenuItem*			ResizeToFitItem();
			const char*			ResizeToFitLabel();

			BMenuItem*			SelectItem();
			const char*			SelectLabel();

			BMenuItem*			SelectAllItem();
			const char*			SelectAllLabel();

			BMenuItem*			UnmountItem();
			const char*			UnmountLabel();

			// update item

			void				Update(BMenu*);

			void				UpdateAddOnsItem(BMenuItem*);
			void				UpdateAddPrinterItem(BMenuItem*);
			void				UpdateArrangeByItem(BMenuItem*);
			void				UpdateCleanupItem(BMenuItem*);
			void				UpdateCloseAllInWorkspaceItem(BMenuItem*);
			void				UpdateCloseItem(BMenuItem*);
			void				UpdateCopyItem(BMenuItem*);
			void				UpdateCopyToItem(BMenuItem*);
			void				UpdateCreateLinkItem(BMenuItem*);
			void				UpdateCreateLinkHereItem(BMenuItem*);
			void				UpdateCutItem(BMenuItem*);
			void				UpdateDeleteItem(BMenuItem*);
			void				UpdateDuplicateItem(BMenuItem*);
			void				UpdateEditNameItem(BMenuItem*);
			void				UpdateEditQueryItem(BMenuItem*);
			void				UpdateEmptyTrashItem(BMenuItem*);
			void				UpdateFindItem(BMenuItem*);
			void				UpdateGetInfoItem(BMenuItem*);
			void				UpdateIdentifyItem(BMenuItem*);
			void				UpdateInvertSelectionItem(BMenuItem*);
			void				UpdateMakeActivePrinterItem(BMenuItem*);
			void				UpdateMoveToItem(BMenuItem*);
			void				UpdateMoveToTrashItem(BMenuItem*);
			void				UpdateNewFolderItem(BMenuItem*);
			void				UpdateNewTemplatesItem(BMenuItem*);
			void				UpdateOpenItem(BMenuItem*);
			void				UpdateOpenParentItem(BMenuItem*);
			void				UpdateOpenWithItem(BMenuItem*);
			void				UpdatePasteItem(BMenuItem*);
			void				UpdateResizeToFitItem(BMenuItem*);
			void				UpdateRestoreItem(BMenuItem*);
			void				UpdateReverseOrderItem(BMenuItem*);
			void				UpdateSelectItem(BMenuItem*);
			void				UpdateSelectAllItem(BMenuItem*);
			void				UpdateUnmountItem(BMenuItem*);

			// convenience methods

			BMenuItem*			FindItem(BMenu* menu, int32 command1, int32 command2);
			BPoseView*			PoseView() const;

			bool				IsCurrentFocusOnTextView() const;
			bool				IsDesktop() const;
			bool				IsQuery() const;
			bool				IsQueryTemplate() const;
			bool				IsRoot() const;
			bool				InTrash() const;
			bool				IsTrash() const;
			bool				IsVirtualDirectory() const;
			bool				IsVolume() const;
			bool				HasSelection() const;
			bool				SelectionIsReadOnly() const;
			bool				TargetIsReadOnly() const;

private:
			BContainerWindow*	fContainerWindow;
			bool				fInWindow;
};


inline BPoseView*
TShortcuts::PoseView() const
{
	return fInWindow ? fContainerWindow->PoseView() : NULL;
}

} // namespace BPrivate

using namespace BPrivate;


#endif // _SHORTCUTS_H