12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // Copyright (c) 2015 GitHub, Inc.
- // Use of this source code is governed by the MIT license that can be
- // found in the LICENSE file.
- #ifndef ATOM_BROWSER_UI_ATOM_MENU_MODEL_H_
- #define ATOM_BROWSER_UI_ATOM_MENU_MODEL_H_
- #include <map>
- #include "base/observer_list.h"
- #include "ui/base/models/simple_menu_model.h"
- namespace atom {
- class AtomMenuModel : public ui::SimpleMenuModel {
- public:
- class Delegate : public ui::SimpleMenuModel::Delegate {
- public:
- virtual ~Delegate() {}
- virtual bool GetAcceleratorForCommandIdWithParams(
- int command_id,
- bool use_default_accelerator,
- ui::Accelerator* accelerator) const = 0;
- private:
- // ui::SimpleMenuModel::Delegate:
- bool GetAcceleratorForCommandId(int command_id,
- ui::Accelerator* accelerator) const {
- return GetAcceleratorForCommandIdWithParams(
- command_id, false, accelerator);
- }
- };
- class Observer {
- public:
- virtual ~Observer() {}
- // Notifies the menu will open.
- virtual void OnMenuWillShow() {}
- // Notifies the menu has been closed.
- virtual void OnMenuWillClose() {}
- };
- explicit AtomMenuModel(Delegate* delegate);
- virtual ~AtomMenuModel();
- void AddObserver(Observer* obs) { observers_.AddObserver(obs); }
- void RemoveObserver(Observer* obs) { observers_.RemoveObserver(obs); }
- void SetRole(int index, const base::string16& role);
- base::string16 GetRoleAt(int index);
- bool GetAcceleratorAtWithParams(int index,
- bool use_default_accelerator,
- ui::Accelerator* accelerator) const;
- // ui::SimpleMenuModel:
- void MenuWillClose() override;
- void MenuWillShow() override;
- using SimpleMenuModel::GetSubmenuModelAt;
- AtomMenuModel* GetSubmenuModelAt(int index);
- private:
- Delegate* delegate_; // weak ref.
- std::map<int, base::string16> roles_; // command id -> role
- base::ObserverList<Observer> observers_;
- DISALLOW_COPY_AND_ASSIGN(AtomMenuModel);
- };
- } // namespace atom
- #endif // ATOM_BROWSER_UI_ATOM_MENU_MODEL_H_
|