mac: Pass useDefaultAccelerator to getAcceleratorForCommandId

This commit is contained in:
Cheng Zhao 2016-07-02 11:47:40 +09:00 committed by Kevin Sawicki
parent 77cdc2c4a7
commit 6381f44f26
17 changed files with 102 additions and 76 deletions

View file

@ -53,11 +53,14 @@ bool Menu::IsCommandIdVisible(int command_id) const {
return is_visible_.Run(command_id); return is_visible_.Run(command_id);
} }
bool Menu::GetAcceleratorForCommandId(int command_id, bool Menu::GetAcceleratorForCommandIdWithParams(
ui::Accelerator* accelerator) { int command_id,
bool use_default_accelerator,
ui::Accelerator* accelerator) const {
v8::Locker locker(isolate()); v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate()); v8::HandleScope handle_scope(isolate());
v8::Local<v8::Value> val = get_accelerator_.Run(command_id); v8::Local<v8::Value> val = get_accelerator_.Run(
command_id, use_default_accelerator);
return mate::ConvertFromV8(isolate(), val, accelerator); return mate::ConvertFromV8(isolate(), val, accelerator);
} }

View file

@ -46,8 +46,10 @@ class Menu : public mate::TrackableObject<Menu>,
bool IsCommandIdChecked(int command_id) const override; bool IsCommandIdChecked(int command_id) const override;
bool IsCommandIdEnabled(int command_id) const override; bool IsCommandIdEnabled(int command_id) const override;
bool IsCommandIdVisible(int command_id) const override; bool IsCommandIdVisible(int command_id) const override;
bool GetAcceleratorForCommandId(int command_id, bool GetAcceleratorForCommandIdWithParams(
ui::Accelerator* accelerator) override; int command_id,
bool use_default_accelerator,
ui::Accelerator* accelerator) const override;
void ExecuteCommand(int command_id, int event_flags) override; void ExecuteCommand(int command_id, int event_flags) override;
void MenuWillShow(ui::SimpleMenuModel* source) override; void MenuWillShow(ui::SimpleMenuModel* source) override;
@ -89,7 +91,7 @@ class Menu : public mate::TrackableObject<Menu>,
base::Callback<bool(int)> is_checked_; base::Callback<bool(int)> is_checked_;
base::Callback<bool(int)> is_enabled_; base::Callback<bool(int)> is_enabled_;
base::Callback<bool(int)> is_visible_; base::Callback<bool(int)> is_visible_;
base::Callback<v8::Local<v8::Value>(int)> get_accelerator_; base::Callback<v8::Local<v8::Value>(int, bool)> get_accelerator_;
base::Callback<void(v8::Local<v8::Value>, int)> execute_command_; base::Callback<void(v8::Local<v8::Value>, int)> execute_command_;
base::Callback<void()> menu_will_show_; base::Callback<void()> menu_will_show_;

View file

@ -30,7 +30,8 @@ void MenuMac::PopupAt(Window* window, int x, int y, int positioning_item) {
return; return;
base::scoped_nsobject<AtomMenuController> menu_controller( base::scoped_nsobject<AtomMenuController> menu_controller(
[[AtomMenuController alloc] initWithModel:model_.get()]); [[AtomMenuController alloc] initWithModel:model_.get()
useDefaultAccelerator:NO]);
NSMenu* menu = [menu_controller menu]; NSMenu* menu = [menu_controller menu];
NSView* view = web_contents->GetView()->GetNativeView(); NSView* view = web_contents->GetView()->GetNativeView();
@ -74,7 +75,8 @@ void MenuMac::PopupAt(Window* window, int x, int y, int positioning_item) {
void Menu::SetApplicationMenu(Menu* base_menu) { void Menu::SetApplicationMenu(Menu* base_menu) {
MenuMac* menu = static_cast<MenuMac*>(base_menu); MenuMac* menu = static_cast<MenuMac*>(base_menu);
base::scoped_nsobject<AtomMenuController> menu_controller( base::scoped_nsobject<AtomMenuController> menu_controller(
[[AtomMenuController alloc] initWithModel:menu->model_.get()]); [[AtomMenuController alloc] initWithModel:menu->model_.get()
useDefaultAccelerator:YES]);
[NSApp setMainMenu:[menu_controller menu]]; [NSApp setMainMenu:[menu_controller menu]];
// Ensure the menu_controller_ is destroyed after main menu is set. // Ensure the menu_controller_ is destroyed after main menu is set.

View file

@ -25,16 +25,13 @@ class DictionaryValue;
class FilePath; class FilePath;
} }
namespace ui {
class MenuModel;
}
namespace gfx { namespace gfx {
class Image; class Image;
} }
namespace atom { namespace atom {
class AtomMenuModel;
class LoginHandler; class LoginHandler;
// This class is used for control application-wide operations. // This class is used for control application-wide operations.
@ -130,7 +127,7 @@ class Browser : public WindowListObserver {
void DockShow(); void DockShow();
// Set docks' menu. // Set docks' menu.
void DockSetMenu(ui::MenuModel* model); void DockSetMenu(AtomMenuModel* model);
// Set docks' icon. // Set docks' icon.
void DockSetIcon(const gfx::Image& image); void DockSetIcon(const gfx::Image& image);

View file

@ -216,7 +216,7 @@ void Browser::DockShow() {
} }
} }
void Browser::DockSetMenu(ui::MenuModel* model) { void Browser::DockSetMenu(AtomMenuModel* model) {
AtomApplicationDelegate* delegate = (AtomApplicationDelegate*)[NSApp delegate]; AtomApplicationDelegate* delegate = (AtomApplicationDelegate*)[NSApp delegate];
[delegate setApplicationDockMenu:model]; [delegate setApplicationDockMenu:model];
} }

View file

@ -11,9 +11,7 @@
base::scoped_nsobject<AtomMenuController> menu_controller_; base::scoped_nsobject<AtomMenuController> menu_controller_;
} }
- (id)init;
// Sets the menu that will be returned in "applicationDockMenu:". // Sets the menu that will be returned in "applicationDockMenu:".
- (void)setApplicationDockMenu:(ui::MenuModel*)model; - (void)setApplicationDockMenu:(atom::AtomMenuModel*)model;
@end @end

View file

@ -12,14 +12,9 @@
@implementation AtomApplicationDelegate @implementation AtomApplicationDelegate
- (id)init { - (void)setApplicationDockMenu:(atom::AtomMenuModel*)model {
self = [super init]; menu_controller_.reset([[AtomMenuController alloc] initWithModel:model
menu_controller_.reset([[AtomMenuController alloc] init]); useDefaultAccelerator:NO]);
return self;
}
- (void)setApplicationDockMenu:(ui::MenuModel*)model {
[menu_controller_ populateWithModel:model];
} }
- (void)applicationWillFinishLaunching:(NSNotification*)notify { - (void)applicationWillFinishLaunching:(NSNotification*)notify {
@ -34,7 +29,10 @@
} }
- (NSMenu*)applicationDockMenu:(NSApplication*)sender { - (NSMenu*)applicationDockMenu:(NSApplication*)sender {
if (menu_controller_)
return [menu_controller_ menu]; return [menu_controller_ menu];
else
return nil;
} }
- (BOOL)application:(NSApplication*)sender - (BOOL)application:(NSApplication*)sender

View file

@ -29,6 +29,17 @@ base::string16 AtomMenuModel::GetRoleAt(int index) {
return base::string16(); return base::string16();
} }
bool AtomMenuModel::GetAcceleratorAtWithParams(
int index,
bool use_default_accelerator,
ui::Accelerator* accelerator) const {
if (delegate_) {
return delegate_->GetAcceleratorForCommandIdWithParams(
GetCommandIdAt(index), use_default_accelerator, accelerator);
}
return false;
}
void AtomMenuModel::MenuClosed() { void AtomMenuModel::MenuClosed() {
ui::SimpleMenuModel::MenuClosed(); ui::SimpleMenuModel::MenuClosed();
FOR_EACH_OBSERVER(Observer, observers_, MenuClosed()); FOR_EACH_OBSERVER(Observer, observers_, MenuClosed());

View file

@ -17,6 +17,19 @@ class AtomMenuModel : public ui::SimpleMenuModel {
class Delegate : public ui::SimpleMenuModel::Delegate { class Delegate : public ui::SimpleMenuModel::Delegate {
public: public:
virtual ~Delegate() {} 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) {
return GetAcceleratorForCommandIdWithParams(
command_id, true, accelerator);
}
}; };
class Observer { class Observer {
@ -35,6 +48,9 @@ class AtomMenuModel : public ui::SimpleMenuModel {
void SetRole(int index, const base::string16& role); void SetRole(int index, const base::string16& role);
base::string16 GetRoleAt(int index); base::string16 GetRoleAt(int index);
bool GetAcceleratorAtWithParams(int index,
bool use_default_accelerator,
ui::Accelerator* accelerator) const;
// ui::SimpleMenuModel: // ui::SimpleMenuModel:
void MenuClosed() override; void MenuClosed() override;

View file

@ -11,8 +11,8 @@
#include "base/mac/scoped_nsobject.h" #include "base/mac/scoped_nsobject.h"
#include "base/strings/string16.h" #include "base/strings/string16.h"
namespace ui { namespace atom {
class MenuModel; class AtomMenuModel;
} }
// A controller for the cross-platform menu model. The menu that's created // A controller for the cross-platform menu model. The menu that's created
@ -23,24 +23,20 @@ class MenuModel;
// as it only maintains weak references. // as it only maintains weak references.
@interface AtomMenuController : NSObject<NSMenuDelegate> { @interface AtomMenuController : NSObject<NSMenuDelegate> {
@protected @protected
ui::MenuModel* model_; // weak atom::AtomMenuModel* model_; // weak
base::scoped_nsobject<NSMenu> menu_; base::scoped_nsobject<NSMenu> menu_;
BOOL isMenuOpen_; BOOL isMenuOpen_;
BOOL useDefaultAccelerator_;
} }
@property(nonatomic, assign) ui::MenuModel* model; @property(nonatomic, assign) atom::AtomMenuModel* model;
// NIB-based initializer. This does not create a menu. Clients can set the
// properties of the object and the menu will be created upon the first call to
// |-menu|. Note that the menu will be immutable after creation.
- (id)init;
// Builds a NSMenu from the pre-built model (must not be nil). Changes made // Builds a NSMenu from the pre-built model (must not be nil). Changes made
// to the contents of the model after calling this will not be noticed. // to the contents of the model after calling this will not be noticed.
- (id)initWithModel:(ui::MenuModel*)model; - (id)initWithModel:(atom::AtomMenuModel*)model useDefaultAccelerator:(BOOL)use;
// Populate current NSMenu with |model|. // Populate current NSMenu with |model|.
- (void)populateWithModel:(ui::MenuModel*)model; - (void)populateWithModel:(atom::AtomMenuModel*)model;
// Programmatically close the constructed menu. // Programmatically close the constructed menu.
- (void)cancel; - (void)cancel;

View file

@ -48,15 +48,11 @@ Role kRolesMap[] = {
@synthesize model = model_; @synthesize model = model_;
- (id)init { - (id)initWithModel:(atom::AtomMenuModel*)model useDefaultAccelerator:(BOOL)use {
if ((self = [super init]))
[self menu];
return self;
}
- (id)initWithModel:(ui::MenuModel*)model {
if ((self = [super init])) { if ((self = [super init])) {
model_ = model; model_ = model;
isMenuOpen_ = NO;
useDefaultAccelerator_ = use;
[self menu]; [self menu];
} }
return self; return self;
@ -73,7 +69,7 @@ Role kRolesMap[] = {
[super dealloc]; [super dealloc];
} }
- (void)populateWithModel:(ui::MenuModel*)model { - (void)populateWithModel:(atom::AtomMenuModel*)model {
if (!menu_) if (!menu_)
return; return;
@ -82,7 +78,7 @@ Role kRolesMap[] = {
const int count = model->GetItemCount(); const int count = model->GetItemCount();
for (int index = 0; index < count; index++) { for (int index = 0; index < count; index++) {
if (model->GetTypeAt(index) == ui::MenuModel::TYPE_SEPARATOR) if (model->GetTypeAt(index) == atom::AtomMenuModel::TYPE_SEPARATOR)
[self addSeparatorToMenu:menu_ atIndex:index]; [self addSeparatorToMenu:menu_ atIndex:index];
else else
[self addItemToMenu:menu_ atIndex:index fromModel:model]; [self addItemToMenu:menu_ atIndex:index fromModel:model];
@ -99,12 +95,12 @@ Role kRolesMap[] = {
// Creates a NSMenu from the given model. If the model has submenus, this can // Creates a NSMenu from the given model. If the model has submenus, this can
// be invoked recursively. // be invoked recursively.
- (NSMenu*)menuFromModel:(ui::MenuModel*)model { - (NSMenu*)menuFromModel:(atom::AtomMenuModel*)model {
NSMenu* menu = [[[NSMenu alloc] initWithTitle:@""] autorelease]; NSMenu* menu = [[[NSMenu alloc] initWithTitle:@""] autorelease];
const int count = model->GetItemCount(); const int count = model->GetItemCount();
for (int index = 0; index < count; index++) { for (int index = 0; index < count; index++) {
if (model->GetTypeAt(index) == ui::MenuModel::TYPE_SEPARATOR) if (model->GetTypeAt(index) == atom::AtomMenuModel::TYPE_SEPARATOR)
[self addSeparatorToMenu:menu atIndex:index]; [self addSeparatorToMenu:menu atIndex:index];
else else
[self addItemToMenu:menu atIndex:index fromModel:model]; [self addItemToMenu:menu atIndex:index fromModel:model];
@ -126,9 +122,7 @@ Role kRolesMap[] = {
// associated with the entry in the model identified by |modelIndex|. // associated with the entry in the model identified by |modelIndex|.
- (void)addItemToMenu:(NSMenu*)menu - (void)addItemToMenu:(NSMenu*)menu
atIndex:(NSInteger)index atIndex:(NSInteger)index
fromModel:(ui::MenuModel*)ui_model { fromModel:(atom::AtomMenuModel*)model {
atom::AtomMenuModel* model = static_cast<atom::AtomMenuModel*>(ui_model);
base::string16 label16 = model->GetLabelAt(index); base::string16 label16 = model->GetLabelAt(index);
NSString* label = l10n_util::FixUpWindowsStyleLabel(label16); NSString* label = l10n_util::FixUpWindowsStyleLabel(label16);
base::scoped_nsobject<NSMenuItem> item( base::scoped_nsobject<NSMenuItem> item(
@ -141,12 +135,13 @@ Role kRolesMap[] = {
if (model->GetIconAt(index, &icon) && !icon.IsEmpty()) if (model->GetIconAt(index, &icon) && !icon.IsEmpty())
[item setImage:icon.ToNSImage()]; [item setImage:icon.ToNSImage()];
ui::MenuModel::ItemType type = model->GetTypeAt(index); atom::AtomMenuModel::ItemType type = model->GetTypeAt(index);
if (type == ui::MenuModel::TYPE_SUBMENU) { if (type == atom::AtomMenuModel::TYPE_SUBMENU) {
// Recursively build a submenu from the sub-model at this index. // Recursively build a submenu from the sub-model at this index.
[item setTarget:nil]; [item setTarget:nil];
[item setAction:nil]; [item setAction:nil];
ui::MenuModel* submenuModel = model->GetSubmenuModelAt(index); atom::AtomMenuModel* submenuModel = static_cast<atom::AtomMenuModel*>(
model->GetSubmenuModelAt(index));
NSMenu* submenu = [self menuFromModel:submenuModel]; NSMenu* submenu = [self menuFromModel:submenuModel];
[submenu setTitle:[item title]]; [submenu setTitle:[item title]];
[item setSubmenu:submenu]; [item setSubmenu:submenu];
@ -170,7 +165,8 @@ Role kRolesMap[] = {
NSValue* modelObject = [NSValue valueWithPointer:model]; NSValue* modelObject = [NSValue valueWithPointer:model];
[item setRepresentedObject:modelObject]; // Retains |modelObject|. [item setRepresentedObject:modelObject]; // Retains |modelObject|.
ui::Accelerator accelerator; ui::Accelerator accelerator;
if (model->GetAcceleratorAt(index, &accelerator)) { if (model->GetAcceleratorAtWithParams(
index, useDefaultAccelerator_, &accelerator)) {
const ui::PlatformAcceleratorCocoa* platformAccelerator = const ui::PlatformAcceleratorCocoa* platformAccelerator =
static_cast<const ui::PlatformAcceleratorCocoa*>( static_cast<const ui::PlatformAcceleratorCocoa*>(
accelerator.platform_accelerator()); accelerator.platform_accelerator());
@ -206,8 +202,8 @@ Role kRolesMap[] = {
return NO; return NO;
NSInteger modelIndex = [item tag]; NSInteger modelIndex = [item tag];
ui::MenuModel* model = atom::AtomMenuModel* model =
static_cast<ui::MenuModel*>( static_cast<atom::AtomMenuModel*>(
[[(id)item representedObject] pointerValue]); [[(id)item representedObject] pointerValue]);
DCHECK(model); DCHECK(model);
if (model) { if (model) {
@ -234,8 +230,8 @@ Role kRolesMap[] = {
// item chosen. // item chosen.
- (void)itemSelected:(id)sender { - (void)itemSelected:(id)sender {
NSInteger modelIndex = [sender tag]; NSInteger modelIndex = [sender tag];
ui::MenuModel* model = atom::AtomMenuModel* model =
static_cast<ui::MenuModel*>( static_cast<atom::AtomMenuModel*>(
[[sender representedObject] pointerValue]); [[sender representedObject] pointerValue]);
DCHECK(model); DCHECK(model);
if (model) { if (model) {

View file

@ -27,7 +27,7 @@ void TrayIcon::DisplayBalloon(ImageType icon,
} }
void TrayIcon::PopUpContextMenu(const gfx::Point& pos, void TrayIcon::PopUpContextMenu(const gfx::Point& pos,
ui::SimpleMenuModel* menu_model) { AtomMenuModel* menu_model) {
} }
gfx::Rect TrayIcon::GetBounds() { gfx::Rect TrayIcon::GetBounds() {

View file

@ -8,9 +8,9 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "atom/browser/ui/atom_menu_model.h"
#include "atom/browser/ui/tray_icon_observer.h" #include "atom/browser/ui/tray_icon_observer.h"
#include "base/observer_list.h" #include "base/observer_list.h"
#include "ui/base/models/simple_menu_model.h"
#include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect.h"
namespace atom { namespace atom {
@ -55,10 +55,10 @@ class TrayIcon {
// Popups the menu. // Popups the menu.
virtual void PopUpContextMenu(const gfx::Point& pos, virtual void PopUpContextMenu(const gfx::Point& pos,
ui::SimpleMenuModel* menu_model); AtomMenuModel* menu_model);
// Set the context menu for this icon. // Set the context menu for this icon.
virtual void SetContextMenu(ui::SimpleMenuModel* menu_model) = 0; virtual void SetContextMenu(AtomMenuModel* menu_model) = 0;
// Returns the bounds of tray icon. // Returns the bounds of tray icon.
virtual gfx::Rect GetBounds(); virtual gfx::Rect GetBounds();

View file

@ -9,7 +9,6 @@
#include <string> #include <string>
#include "atom/browser/ui/atom_menu_model.h"
#include "atom/browser/ui/tray_icon.h" #include "atom/browser/ui/tray_icon.h"
#include "base/mac/scoped_nsobject.h" #include "base/mac/scoped_nsobject.h"
@ -30,8 +29,8 @@ class TrayIconCocoa : public TrayIcon,
void SetTitle(const std::string& title) override; void SetTitle(const std::string& title) override;
void SetHighlightMode(bool highlight) override; void SetHighlightMode(bool highlight) override;
void PopUpContextMenu(const gfx::Point& pos, void PopUpContextMenu(const gfx::Point& pos,
ui::SimpleMenuModel* menu_model) override; AtomMenuModel* menu_model) override;
void SetContextMenu(ui::SimpleMenuModel* menu_model) override; void SetContextMenu(AtomMenuModel* menu_model) override;
gfx::Rect GetBounds() override; gfx::Rect GetBounds() override;
protected: protected:

View file

@ -249,11 +249,12 @@ const CGFloat kVerticalTitleMargin = 2;
[self setNeedsDisplay:YES]; [self setNeedsDisplay:YES];
} }
- (void)popUpContextMenu:(ui::SimpleMenuModel*)menu_model { - (void)popUpContextMenu:(atom::AtomMenuModel*)menu_model {
// Show a custom menu. // Show a custom menu.
if (menu_model) { if (menu_model) {
base::scoped_nsobject<AtomMenuController> menuController( base::scoped_nsobject<AtomMenuController> menuController(
[[AtomMenuController alloc] initWithModel:menu_model]); [[AtomMenuController alloc] initWithModel:menu_model
useDefaultAccelerator:NO]);
forceHighlight_ = YES; // Should highlight when showing menu. forceHighlight_ = YES; // Should highlight when showing menu.
[self setNeedsDisplay:YES]; [self setNeedsDisplay:YES];
[statusItem_ popUpStatusItemMenu:[menuController menu]]; [statusItem_ popUpStatusItemMenu:[menuController menu]];
@ -365,18 +366,19 @@ void TrayIconCocoa::SetHighlightMode(bool highlight) {
} }
void TrayIconCocoa::PopUpContextMenu(const gfx::Point& pos, void TrayIconCocoa::PopUpContextMenu(const gfx::Point& pos,
ui::SimpleMenuModel* menu_model) { AtomMenuModel* menu_model) {
[status_item_view_ popUpContextMenu:menu_model]; [status_item_view_ popUpContextMenu:menu_model];
} }
void TrayIconCocoa::SetContextMenu(ui::SimpleMenuModel* menu_model) { void TrayIconCocoa::SetContextMenu(AtomMenuModel* menu_model) {
// Substribe to MenuClosed event. // Substribe to MenuClosed event.
if (menu_model_) if (menu_model_)
menu_model_->RemoveObserver(this); menu_model_->RemoveObserver(this);
static_cast<AtomMenuModel*>(menu_model)->AddObserver(this); menu_model->AddObserver(this);
// Create native menu. // Create native menu.
menu_.reset([[AtomMenuController alloc] initWithModel:menu_model]); menu_.reset([[AtomMenuController alloc] initWithModel:menu_model
useDefaultAccelerator:NO]);
[status_item_view_ setMenuController:menu_.get()]; [status_item_view_ setMenuController:menu_.get()];
} }

View file

@ -31,7 +31,7 @@ const MenuItem = function (options) {
this.overrideReadOnlyProperty('type', 'normal') this.overrideReadOnlyProperty('type', 'normal')
this.overrideReadOnlyProperty('role') this.overrideReadOnlyProperty('role')
this.overrideReadOnlyProperty('accelerator', roles.getDefaultAccelerator(this.role)) this.overrideReadOnlyProperty('accelerator')
this.overrideReadOnlyProperty('icon') this.overrideReadOnlyProperty('icon')
this.overrideReadOnlyProperty('submenu') this.overrideReadOnlyProperty('submenu')
@ -66,6 +66,10 @@ const MenuItem = function (options) {
MenuItem.types = ['normal', 'separator', 'submenu', 'checkbox', 'radio'] MenuItem.types = ['normal', 'separator', 'submenu', 'checkbox', 'radio']
MenuItem.prototype.getDefaultRoleAccelerator = function () {
return roles.getDefaultAccelerator(this.role)
}
MenuItem.prototype.overrideProperty = function (name, defaultValue) { MenuItem.prototype.overrideProperty = function (name, defaultValue) {
if (defaultValue == null) { if (defaultValue == null) {
defaultValue = null defaultValue = null

View file

@ -106,9 +106,11 @@ Menu.prototype._init = function () {
var command = this.commandsMap[commandId] var command = this.commandsMap[commandId]
return command != null ? command.visible : undefined return command != null ? command.visible : undefined
}, },
getAcceleratorForCommandId: (commandId) => { getAcceleratorForCommandId: (commandId, useDefaultAccelerator) => {
var command = this.commandsMap[commandId] const command = this.commandsMap[commandId]
return command != null ? command.accelerator : undefined if (command == null) return
if (command.accelerator != null) return command.accelerator
if (useDefaultAccelerator) return command.getDefaultRoleAccelerator()
}, },
getIconForCommandId: (commandId) => { getIconForCommandId: (commandId) => {
var command = this.commandsMap[commandId] var command = this.commandsMap[commandId]