From 84a6777ed79ad2f4cd0419db4a5af437f5379df6 Mon Sep 17 00:00:00 2001 From: Wolfgang Lux Date: Sat, 14 Nov 2009 22:25:22 +0000 Subject: [PATCH] Implement menu and user interface item validation for NSTextView. The list of validated actions is incomplete but at least includes all items from a standard Edit menu. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@29012 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 +++++ Source/NSTextView_actions.m | 49 +++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6d2efe9be..f38a94fe6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2009-11-14 Wolfgang Lux + * Source/NSTextView_actions.m (-validateMenuItem:, + -validateUserIntefaceItem:): Implement menu and user interface + item validation for NSTextView. The list of validated actions is + incomplete but at least includes all items from a standard Edit + menu. + * Source/NSCell.m(-_setupTextWithFrame:inView:editor:delegate:range:, -_updateFieldEditor): * Source/NSActionCell.m (-setObjectValue:, -setStringValue:): diff --git a/Source/NSTextView_actions.m b/Source/NSTextView_actions.m index b9f3450c0..19895e4a4 100644 --- a/Source/NSTextView_actions.m +++ b/Source/NSTextView_actions.m @@ -51,6 +51,8 @@ #include "AppKit/NSAttributedString.h" #include "AppKit/NSGraphics.h" #include "AppKit/NSLayoutManager.h" +#include "AppKit/NSMenuItem.h" +#include "AppKit/NSPasteboard.h" #include "AppKit/NSScrollView.h" #include "AppKit/NSTextStorage.h" #include "AppKit/NSTextView.h" @@ -1512,4 +1514,51 @@ and layout is left-to-right */ // FIXME } +- (BOOL) validateMenuItem: (NSMenuItem *)item +{ + return [self validateUserInterfaceItem: item]; +} + +- (BOOL) validateUserInterfaceItem: (id)item +{ + SEL action = [item action]; + + // FIXME The list of validated actions below is far from complete + + if (sel_eq(action, @selector(cut:)) || sel_eq(action, @selector(delete:))) + return [self isEditable] && [self selectedRange].length > 0; + + if (sel_eq(action, @selector(copy:))) + return [self selectedRange].length > 0; + + if (sel_eq(action, @selector(paste:)) + || sel_eq(action, @selector(pasteAsPlainText:)) + || sel_eq(action, @selector(pasteAsRichText:))) + { + if ([self isEditable]) + { + NSArray *types; + NSString *available; + + if (sel_eq(action, @selector(paste:))) + types = [self readablePasteboardTypes]; + else if (sel_eq(action, @selector(pasteAsPlainText:))) + types = [NSArray arrayWithObject: NSStringPboardType]; + else /*if (sel_eq(action, @selector(pasteAsRichText:)))*/ + types = [NSArray arrayWithObject: NSRTFPboardType]; + + available = [[NSPasteboard generalPasteboard] + availableTypeFromArray: types]; + return available != nil; + } + else + return NO; + } + + if (sel_eq(action, @selector(selectAll:)) + || sel_eq(action, @selector(centerSelectionInVisibleArea:))) + return [self isSelectable]; + + return YES; +} @end