63 lines
1.8 KiB
Python
63 lines
1.8 KiB
Python
#
|
|
# PyGUI - Edit command handling - Cocoa
|
|
#
|
|
|
|
from AppKit import NSMenuItem
|
|
from GUI import export
|
|
|
|
class EditCmdHandler(object):
|
|
# Mixin for Components whose _ns_responder handles the
|
|
# standard editing commands.
|
|
|
|
def setup_menus(self, m):
|
|
def validate(cmd_name, ns_selector):
|
|
ns_menu_item = NSMenuItem.alloc().\
|
|
initWithTitle_action_keyEquivalent_("", ns_selector, "")
|
|
m[cmd_name].enabled = ns_target.validateMenuItem_(ns_menu_item)
|
|
ns_target = self.window._ns_window
|
|
if ns_target:
|
|
validate('undo_cmd', 'undo:')
|
|
validate('redo_cmd', 'redo:')
|
|
ns_target = self._ns_edit_cmd_target()
|
|
if ns_target:
|
|
validate('cut_cmd', 'cut:')
|
|
validate('copy_cmd', 'copy:')
|
|
validate('paste_cmd', 'paste:')
|
|
validate('clear_cmd', 'delete:')
|
|
validate('select_all_cmd', 'selectAll:')
|
|
|
|
def undo_cmd(self):
|
|
ns_window = self.window._ns_window
|
|
if ns_window:
|
|
ns_window.undo_(None)
|
|
|
|
def redo_cmd(self):
|
|
ns_window = self.window._ns_window
|
|
if ns_window:
|
|
ns_window.redo_(None)
|
|
|
|
def cut_cmd(self):
|
|
self._ns_edit_cmd('cut_')
|
|
|
|
def copy_cmd(self):
|
|
self._ns_edit_cmd('copy_')
|
|
|
|
def paste_cmd(self):
|
|
self._ns_edit_cmd('paste_')
|
|
|
|
def clear_cmd(self):
|
|
self._ns_edit_cmd('delete_')
|
|
|
|
def select_all_cmd(self):
|
|
self._ns_edit_cmd('selectAll_')
|
|
|
|
def _ns_edit_cmd(self, ns_method_name):
|
|
ns_target = self._ns_edit_cmd_target()
|
|
if ns_target:
|
|
getattr(ns_target, ns_method_name)(None)
|
|
|
|
def _ns_edit_cmd_target(self):
|
|
return self._ns_responder
|
|
|
|
export(EditCmdHandler)
|