💄 Organize Menu and MenuItem's code.
This commit is contained in:
parent
d38ffea4a3
commit
15d9b320db
2 changed files with 35 additions and 37 deletions
|
@ -3,25 +3,6 @@ v8Util = process.atomBinding 'v8_util'
|
|||
|
||||
nextCommandId = 0
|
||||
|
||||
overrideProperty = (item, name, defaultValue) ->
|
||||
item[name] ?= defaultValue
|
||||
|
||||
return unless process.platform is 'win32'
|
||||
v8Util.setHiddenValue item, name, item[name]
|
||||
Object.defineProperty item, name,
|
||||
enumerable: true
|
||||
get: -> v8Util.getHiddenValue item, name
|
||||
set: (val) ->
|
||||
v8Util.setHiddenValue item, name, val
|
||||
item.menu?._updateStates()
|
||||
|
||||
overrideReadOnlyProperty = (item, name, defaultValue) ->
|
||||
item[name] ?= defaultValue
|
||||
Object.defineProperty item, name,
|
||||
enumerable: true
|
||||
writable: false
|
||||
value: item[name]
|
||||
|
||||
class MenuItem
|
||||
@types = ['normal', 'separator', 'submenu', 'checkbox', 'radio']
|
||||
|
||||
|
@ -33,22 +14,45 @@ class MenuItem
|
|||
@type = 'submenu' if not @type? and @submenu?
|
||||
throw new Error('Invalid submenu') if @type is 'submenu' and @submenu?.constructor isnt Menu
|
||||
|
||||
overrideReadOnlyProperty this, 'type', 'normal'
|
||||
overrideReadOnlyProperty this, 'accelerator', null
|
||||
overrideReadOnlyProperty this, 'submenu', null
|
||||
overrideProperty this, 'label', ''
|
||||
overrideProperty this, 'sublabel', ''
|
||||
overrideProperty this, 'enabled', true
|
||||
overrideProperty this, 'visible', true
|
||||
overrideProperty this, 'checked', false
|
||||
@overrideReadOnlyProperty 'type', 'normal'
|
||||
@overrideReadOnlyProperty 'accelerator'
|
||||
@overrideReadOnlyProperty 'submenu'
|
||||
@overrideProperty 'label', ''
|
||||
@overrideProperty 'sublabel', ''
|
||||
@overrideProperty 'enabled', true
|
||||
@overrideProperty 'visible', true
|
||||
@overrideProperty 'checked', false
|
||||
|
||||
throw new Error("Unknown menu type #{@type}") if MenuItem.types.indexOf(@type) is -1
|
||||
|
||||
@commandId = ++nextCommandId
|
||||
@click = =>
|
||||
# Manually flip the checked flags when clicked.
|
||||
@checked = !@checked if @type in ['checkbox', 'radio']
|
||||
|
||||
if typeof click is 'function'
|
||||
click this, BrowserWindow.getFocusedWindow()
|
||||
else if typeof @selector is 'string'
|
||||
Menu.sendActionToFirstResponder @selector
|
||||
|
||||
overrideProperty: (name, defaultValue=null) ->
|
||||
this[name] ?= defaultValue
|
||||
|
||||
# Update states when property is changed on Windows.
|
||||
return unless process.platform is 'win32'
|
||||
v8Util.setHiddenValue this, name, this[name]
|
||||
Object.defineProperty this, name,
|
||||
enumerable: true
|
||||
get: => v8Util.getHiddenValue this, name
|
||||
set: (val) =>
|
||||
v8Util.setHiddenValue this, name, val
|
||||
@menu?._updateStates()
|
||||
|
||||
overrideReadOnlyProperty: (name, defaultValue=null) ->
|
||||
this[name] ?= defaultValue
|
||||
Object.defineProperty this, name,
|
||||
enumerable: true
|
||||
writable: false
|
||||
value: this[name]
|
||||
|
||||
module.exports = MenuItem
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue