WebCore:
authorsullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 14 Dec 2004 19:17:31 +0000 (19:17 +0000)
committersullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 14 Dec 2004 19:17:31 +0000 (19:17 +0000)
        Reviewed by Ken.

        - architecture for WebCore part of fix for <rdar://problem/3790011> undoable operations all say "Undo" in the menu,
        no specific action names

        The remaining step is to make each EditCommand subclass override editingAction() to return an
        appropriate value. (Unfortunately the mapping between subclass and user-distinguishable action
        is not completely straightforward, so this next step isn't trivial.)

        * khtml/editing/htmlediting.h:
        new enum for HTMLEditAction

        * khtml/editing/htmlediting.cpp:
        (khtml::EditCommandPtr::editingAction):
        new method, calls through to EditCommand
        (khtml::EditCommand::editingAction):
        new method for subclasses to override, returns HTMLEditActionUnspecified at this level
        (khtml::TypingCommand::editingAction):
        proof of concept override, returns HTMLEditActionTyping

        * kwq/KWQKHTMLPart.h:
        declare new private bottleneck method registerCommandForUndoOrRedo
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::registerCommandForUndoOrRedo):
        new bottleneck method to reduce code duplication; now calls over the bridge
        to get the localized string to use for the Undo action name
        (KWQKHTMLPart::registerCommandForUndo):
        now calls new bottleneck method
        (KWQKHTMLPart::registerCommandForRedo):
        now calls new bottleneck method

        * kwq/WebCoreBridge.h:
        new enum for WebUndoAction, maps directly to HTMLEditAction.
        Declaration of nameForUndoAction:

WebKit:

        Reviewed by Ken.

        - WebKit part of fix for <rdar://problem/3790011> undoable operations all say "Undo" in the menu,
        no specific action names

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge nameForUndoAction:]):
        renamed from setUndoActionNamePlaceholder, replaced arbitrary integers with enum values, and
        handled new "unspecified" case as a fallback

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8206 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/editing/htmlediting.cpp
WebCore/khtml/editing/htmlediting.h
WebCore/kwq/KWQKHTMLPart.h
WebCore/kwq/KWQKHTMLPart.mm
WebCore/kwq/WebCoreBridge.h
WebKit/ChangeLog
WebKit/WebCoreSupport.subproj/WebBridge.m

index cadc317..31e8be2 100644 (file)
@@ -1,3 +1,40 @@
+2004-12-14  John Sullivan  <sullivan@apple.com>
+
+        Reviewed by Ken.
+        
+        - architecture for WebCore part of fix for <rdar://problem/3790011> undoable operations all say "Undo" in the menu, 
+        no specific action names
+          
+        The remaining step is to make each EditCommand subclass override editingAction() to return an
+        appropriate value. (Unfortunately the mapping between subclass and user-distinguishable action
+        is not completely straightforward, so this next step isn't trivial.)
+
+        * khtml/editing/htmlediting.h:
+        new enum for HTMLEditAction
+
+        * khtml/editing/htmlediting.cpp:
+        (khtml::EditCommandPtr::editingAction):
+        new method, calls through to EditCommand
+        (khtml::EditCommand::editingAction):
+        new method for subclasses to override, returns HTMLEditActionUnspecified at this level
+        (khtml::TypingCommand::editingAction):
+        proof of concept override, returns HTMLEditActionTyping
+                
+        * kwq/KWQKHTMLPart.h:
+        declare new private bottleneck method registerCommandForUndoOrRedo
+        * kwq/KWQKHTMLPart.mm:
+        (KWQKHTMLPart::registerCommandForUndoOrRedo):
+        new bottleneck method to reduce code duplication; now calls over the bridge
+        to get the localized string to use for the Undo action name
+        (KWQKHTMLPart::registerCommandForUndo):
+        now calls new bottleneck method
+        (KWQKHTMLPart::registerCommandForRedo):
+        now calls new bottleneck method
+        
+        * kwq/WebCoreBridge.h:
+        new enum for WebUndoAction, maps directly to HTMLEditAction.
+        Declaration of nameForUndoAction:
+
 2004-12-14  Darin Adler  <darin@apple.com>
 
         Reviewed by John.
index 605231e..c8ca44e 100644 (file)
@@ -266,6 +266,12 @@ void EditCommandPtr::reapply() const
     get()->reapply();
 }
 
+HTMLEditAction EditCommandPtr::editingAction() const
+{
+    IF_IMPL_NULL_RETURN_ARG(HTMLEditActionUnspecified);
+    return get()->editingAction();
+}
+
 DocumentImpl * const EditCommandPtr::document() const
 {
     IF_IMPL_NULL_RETURN_ARG(0);
@@ -515,6 +521,11 @@ void EditCommand::doReapply()
     doApply();
 }
 
+HTMLEditAction EditCommand::editingAction() const
+{
+    return HTMLEditActionUnspecified;
+}
+
 void EditCommand::setStartingSelection(const Selection &s)
 {
     for (EditCommand *cmd = this; cmd; cmd = cmd->m_parent)
@@ -3778,6 +3789,11 @@ void TypingCommand::doApply()
     ASSERT_NOT_REACHED();
 }
 
+HTMLEditAction TypingCommand::editingAction() const
+{
+    return HTMLEditActionTyping;
+}
+
 void TypingCommand::markMisspellingsAfterTyping()
 {
     // Take a look at the selection that results after typing and determine whether we need to spellcheck. 
index ac265cc..1469d01 100644 (file)
@@ -41,6 +41,40 @@ namespace DOM {
     class TextImpl;
 }
 
+typedef enum {
+    HTMLEditActionUnspecified,
+    HTMLEditActionSetColor,
+    HTMLEditActionSetBackgroundColor,
+    HTMLEditActionTurnOffKerning,
+    HTMLEditActionTightenKerning,
+    HTMLEditActionLoosenKerning,
+    HTMLEditActionUseStandardKerning,
+    HTMLEditActionTurnOffLigatures,
+    HTMLEditActionUseStandardLigatures,
+    HTMLEditActionUseAllLigatures,
+    HTMLEditActionRaiseBaseline,
+    HTMLEditActionLowerBaseline,
+    HTMLEditActionSetTraditionalCharacterShape,
+    HTMLEditActionSetFont,
+    HTMLEditActionChangeAttributes,
+    HTMLEditActionAlignLeft,
+    HTMLEditActionAlignRight,
+    HTMLEditActionCenter,
+    HTMLEditActionJustify,
+    HTMLEditActionSetWritingDirection,
+    HTMLEditActionSubscript,
+    HTMLEditActionSuperscript,
+    HTMLEditActionUnderline,
+    HTMLEditActionOutline,
+    HTMLEditActionUnscript,
+    HTMLEditActionDrag,
+    HTMLEditActionCut,
+    HTMLEditActionPaste,
+    HTMLEditActionPasteFont,
+    HTMLEditActionPasteRuler,
+    HTMLEditActionTyping,
+} HTMLEditAction;
+
 namespace khtml {
 
 class EditCommand;
@@ -66,6 +100,8 @@ public:
     void unapply() const;
     void reapply() const;
 
+    HTMLEditAction editingAction() const;
+
     DOM::DocumentImpl * const document() const;
 
     khtml::Selection startingSelection() const;
@@ -136,6 +172,8 @@ public:
     virtual void doUnapply() = 0;
     virtual void doReapply();  // calls doApply()
 
+    virtual HTMLEditAction editingAction() const;
+
     virtual DOM::DocumentImpl * const document() const { return m_document; }
 
     khtml::Selection startingSelection() const { return m_startingSelection; }
@@ -154,7 +192,7 @@ public:
     
     virtual bool isInsertTextCommand() const;
     virtual bool isTypingCommand() const;
-
+    
 private:
     void assignTypingStyle(DOM::CSSMutableStyleDeclarationImpl *);
 
@@ -741,6 +779,7 @@ public:
     static void closeTyping(const EditCommandPtr &);
     
     virtual void doApply();
+    virtual HTMLEditAction editingAction() const;
 
     bool openForMoreTyping() const { return m_openForMoreTyping; }
     void closeTyping() { m_openForMoreTyping = false; }
index ddc62f4..91780ea 100644 (file)
@@ -393,6 +393,8 @@ private:
 
     virtual bool isKHTMLPart() const;
 
+    void registerCommandForUndoOrRedo(const khtml::EditCommandPtr &cmd, bool isRedo);
+
     WebCoreBridge *_bridge;
     
     KWQSignal _started;
index 10f9c58..8182ae6 100644 (file)
@@ -3822,20 +3822,27 @@ void KWQKHTMLPart::cleanupPluginRootObjects()
     }
 }
 
-void KWQKHTMLPart::registerCommandForUndo(const EditCommandPtr &cmd)
+void KWQKHTMLPart::registerCommandForUndoOrRedo(const EditCommandPtr &cmd, bool isRedo)
 {
     ASSERT(cmd.get());
     KWQEditCommand *kwq = [KWQEditCommand commandWithEditCommand:cmd.get()];
-    [[_bridge undoManager] registerUndoWithTarget:_bridge selector:@selector(undoEditing:) object:kwq];
+    NSUndoManager *undoManager = [_bridge undoManager];
+    [undoManager registerUndoWithTarget:_bridge selector:(isRedo ? @selector(redoEditing:) : @selector(undoEditing:)) object:kwq];
+    NSString *actionName = [_bridge nameForUndoAction:(WebUndoAction)cmd.editingAction()];
+    if (actionName != nil) {
+        [undoManager setActionName:actionName];
+    }
     _haveUndoRedoOperations = YES;
 }
 
+void KWQKHTMLPart::registerCommandForUndo(const EditCommandPtr &cmd)
+{
+    registerCommandForUndoOrRedo(cmd, NO);
+}
+
 void KWQKHTMLPart::registerCommandForRedo(const EditCommandPtr &cmd)
 {
-    ASSERT(cmd.get());
-    KWQEditCommand *kwq = [KWQEditCommand commandWithEditCommand:cmd.get()];
-    [[_bridge undoManager] registerUndoWithTarget:_bridge selector:@selector(redoEditing:) object:kwq];
-    _haveUndoRedoOperations = YES;
+    registerCommandForUndoOrRedo(cmd, YES);
 }
 
 void KWQKHTMLPart::clearUndoRedoOperations()
index df672bd..d600c4b 100644 (file)
@@ -130,6 +130,40 @@ typedef enum {
     WebScrollWheel
 } WebScrollGranularity;
 
+typedef enum {
+    WebUndoActionUnspecified,
+    WebUndoActionSetColor,
+    WebUndoActionSetBackgroundColor,
+    WebUndoActionTurnOffKerning,
+    WebUndoActionTightenKerning,
+    WebUndoActionLoosenKerning,
+    WebUndoActionUseStandardKerning,
+    WebUndoActionTurnOffLigatures,
+    WebUndoActionUseStandardLigatures,
+    WebUndoActionUseAllLigatures,
+    WebUndoActionRaiseBaseline,
+    WebUndoActionLowerBaseline,
+    WebUndoActionSetTraditionalCharacterShape,
+    WebUndoActionSetFont,
+    WebUndoActionChangeAttributes,
+    WebUndoActionAlignLeft,
+    WebUndoActionAlignRight,
+    WebUndoActionCenter,
+    WebUndoActionJustify,
+    WebUndoActionSetWritingDirection,
+    WebUndoActionSubscript,
+    WebUndoActionSuperscript,
+    WebUndoActionUnderline,
+    WebUndoActionOutline,
+    WebUndoActionUnscript,
+    WebUndoActionDrag,
+    WebUndoActionCut,
+    WebUndoActionPaste,
+    WebUndoActionPasteFont,
+    WebUndoActionPasteRuler,
+    WebUndoActionTyping,
+} WebUndoAction;
+
 // WebCoreBridge objects are used by WebCore to abstract away operations that need
 // to be implemented by library clients, for example WebKit. The objects are also
 // used in the opposite direction, for simple access to WebCore functions without dealing
@@ -534,6 +568,7 @@ typedef enum {
 - (jobject)pollForAppletInView:(NSView *)view;
 
 - (NSUndoManager *)undoManager;
+- (NSString *)nameForUndoAction:(WebUndoAction)undoAction;
 - (void)issueCutCommand;
 - (void)issueCopyCommand;
 - (void)issuePasteCommand;
index e818536..a4d22bf 100644 (file)
@@ -1,3 +1,15 @@
+2004-12-14  John Sullivan  <sullivan@apple.com>
+
+        Reviewed by Ken.
+
+        - WebKit part of fix for <rdar://problem/3790011> undoable operations all say "Undo" in the menu, 
+        no specific action names
+
+        * WebCoreSupport.subproj/WebBridge.m:
+        (-[WebBridge nameForUndoAction:]):
+        renamed from setUndoActionNamePlaceholder, replaced arbitrary integers with enum values, and
+        handled new "unspecified" case as a fallback
+
 2004-12-13  Richard Williamson   <rjw@apple.com>
 
        Fixed <rdar://problem/3887767> LiveConnect doesn't propagate Java exceptions back to JavaScript (prevents security suite from running)
index 408dd99..5e3e394 100644 (file)
@@ -1398,45 +1398,40 @@ static id <WebFormDelegate> formDelegate(WebBridge *self)
     }
 }
 
-// This method exists to hold localizable strings for action names for the Undo menu item. It contains
-// all of the names used in NSTextView. We will wire some or all of these up eventually; for now we are
-// just putting them here to get them localized before the localization freeze for Tiger.
-- (NSString *)setUndoActionNamePlaceholder
-{
-    int x = 0;
-    switch (x) {
-        case 0: return UI_STRING_KEY("Set Color", "Set Color (Undo action name)", "Undo action name");
-        case 1: return UI_STRING_KEY("Set Background Color", "Set Background Color (Undo action name)", "Undo action name");
-        case 2: return UI_STRING_KEY("Turn Off Kerning", "Turn Off Kerning (Undo action name)", "Undo action name");
-        case 3: return UI_STRING_KEY("Tighten Kerning", "Tighten Kerning (Undo action name)", "Undo action name");
-        case 4: return UI_STRING_KEY("Loosen Kerning", "Loosen Kerning (Undo action name)", "Undo action name");
-        case 5: return UI_STRING_KEY("Use Standard Kerning", "Use Standard Kerning (Undo action name)", "Undo action name");
-        case 6: return UI_STRING_KEY("Turn Off Ligatures", "Turn Off Ligatures (Undo action name)", "Undo action name");
-        case 7: return UI_STRING_KEY("Use Standard Ligatures", "Use Standard Ligatures (Undo action name)", "Undo action name");
-        case 8: return UI_STRING_KEY("Use All Ligatures", "Use All Ligatures (Undo action name)", "Undo action name");
-        case 9: return UI_STRING_KEY("Raise Baseline", "Raise Baseline (Undo action name)", "Undo action name");
-        case 10: return UI_STRING_KEY("Lower Baseline", "Lower Baseline (Undo action name)", "Undo action name");
-        case 11: return UI_STRING_KEY("Set Traditional Character Shape", "Set Traditional Character Shape (Undo action name)", "Undo action name");
-        case 12: return UI_STRING_KEY("Set Font", "Set Font (Undo action name)", "Undo action name");
-        case 13: return UI_STRING_KEY("Change Attributes", "Change Attributes (Undo action name)", "Undo action name");
-        case 14: return UI_STRING_KEY("Align Left", "Align Left (Undo action name)", "Undo action name");
-        case 15: return UI_STRING_KEY("Align Right", "Align Right (Undo action name)", "Undo action name");
-        case 16: return UI_STRING_KEY("Center", "Center (Undo action name)", "Undo action name");
-        case 17: return UI_STRING_KEY("Justify", "Justify (Undo action name)", "Undo action name");
-        case 18: return UI_STRING_KEY("Set Writing Direction", "Set Writing Direction (Undo action name)", "Undo action name");
-        case 19: return UI_STRING_KEY("Set Color", "Set Color (Undo action name)", "Undo action name");
-        case 20: return UI_STRING_KEY("Subscript", "Subscript (Undo action name)", "Undo action name");
-        case 21: return UI_STRING_KEY("Superscript", "Superscript (Undo action name)", "Undo action name");
-        case 22: return UI_STRING_KEY("Underline", "Underline (Undo action name)", "Undo action name");
-        case 23: return UI_STRING_KEY("Outline", "Outline (Undo action name)", "Undo action name");
-        case 24: return UI_STRING_KEY("Unscript", "Unscript (Undo action name)", "Undo action name");
-        case 25: return UI_STRING_KEY("Drag", "Drag (Undo action name)", "Undo action name");
-        case 26: return UI_STRING_KEY("Cut", "Cut (Undo action name)", "Undo action name");
-        case 27: return UI_STRING_KEY("Paste", "Paste (Undo action name)", "Undo action name");
-        case 28: return UI_STRING_KEY("Paste Font", "Paste Font (Undo action name)", "Undo action name");
-        case 29: return UI_STRING_KEY("Paste Ruler", "Paste Ruler (Undo action name)", "Undo action name");
-        case 30: return UI_STRING_KEY("Cut", "Cut (Undo action name)", "Undo action name");
-        case 31: return UI_STRING_KEY("Typing", "Typing (Undo action name)", "Undo action name");
+- (NSString *)nameForUndoAction:(WebUndoAction)undoAction
+{
+    switch (undoAction) {
+        case WebUndoActionUnspecified: return nil;
+        case WebUndoActionSetColor: return UI_STRING_KEY("Set Color", "Set Color (Undo action name)", "Undo action name");
+        case WebUndoActionSetBackgroundColor: return UI_STRING_KEY("Set Background Color", "Set Background Color (Undo action name)", "Undo action name");
+        case WebUndoActionTurnOffKerning: return UI_STRING_KEY("Turn Off Kerning", "Turn Off Kerning (Undo action name)", "Undo action name");
+        case WebUndoActionTightenKerning: return UI_STRING_KEY("Tighten Kerning", "Tighten Kerning (Undo action name)", "Undo action name");
+        case WebUndoActionLoosenKerning: return UI_STRING_KEY("Loosen Kerning", "Loosen Kerning (Undo action name)", "Undo action name");
+        case WebUndoActionUseStandardKerning: return UI_STRING_KEY("Use Standard Kerning", "Use Standard Kerning (Undo action name)", "Undo action name");
+        case WebUndoActionTurnOffLigatures: return UI_STRING_KEY("Turn Off Ligatures", "Turn Off Ligatures (Undo action name)", "Undo action name");
+        case WebUndoActionUseStandardLigatures: return UI_STRING_KEY("Use Standard Ligatures", "Use Standard Ligatures (Undo action name)", "Undo action name");
+        case WebUndoActionUseAllLigatures: return UI_STRING_KEY("Use All Ligatures", "Use All Ligatures (Undo action name)", "Undo action name");
+        case WebUndoActionRaiseBaseline: return UI_STRING_KEY("Raise Baseline", "Raise Baseline (Undo action name)", "Undo action name");
+        case WebUndoActionLowerBaseline: return UI_STRING_KEY("Lower Baseline", "Lower Baseline (Undo action name)", "Undo action name");
+        case WebUndoActionSetTraditionalCharacterShape: return UI_STRING_KEY("Set Traditional Character Shape", "Set Traditional Character Shape (Undo action name)", "Undo action name");
+        case WebUndoActionSetFont: return UI_STRING_KEY("Set Font", "Set Font (Undo action name)", "Undo action name");
+        case WebUndoActionChangeAttributes: return UI_STRING_KEY("Change Attributes", "Change Attributes (Undo action name)", "Undo action name");
+        case WebUndoActionAlignLeft: return UI_STRING_KEY("Align Left", "Align Left (Undo action name)", "Undo action name");
+        case WebUndoActionAlignRight: return UI_STRING_KEY("Align Right", "Align Right (Undo action name)", "Undo action name");
+        case WebUndoActionCenter: return UI_STRING_KEY("Center", "Center (Undo action name)", "Undo action name");
+        case WebUndoActionJustify: return UI_STRING_KEY("Justify", "Justify (Undo action name)", "Undo action name");
+        case WebUndoActionSetWritingDirection: return UI_STRING_KEY("Set Writing Direction", "Set Writing Direction (Undo action name)", "Undo action name");
+        case WebUndoActionSubscript: return UI_STRING_KEY("Subscript", "Subscript (Undo action name)", "Undo action name");
+        case WebUndoActionSuperscript: return UI_STRING_KEY("Superscript", "Superscript (Undo action name)", "Undo action name");
+        case WebUndoActionUnderline: return UI_STRING_KEY("Underline", "Underline (Undo action name)", "Undo action name");
+        case WebUndoActionOutline: return UI_STRING_KEY("Outline", "Outline (Undo action name)", "Undo action name");
+        case WebUndoActionUnscript: return UI_STRING_KEY("Unscript", "Unscript (Undo action name)", "Undo action name");
+        case WebUndoActionDrag: return UI_STRING_KEY("Drag", "Drag (Undo action name)", "Undo action name");
+        case WebUndoActionCut: return UI_STRING_KEY("Cut", "Cut (Undo action name)", "Undo action name");
+        case WebUndoActionPaste: return UI_STRING_KEY("Paste", "Paste (Undo action name)", "Undo action name");
+        case WebUndoActionPasteFont: return UI_STRING_KEY("Paste Font", "Paste Font (Undo action name)", "Undo action name");
+        case WebUndoActionPasteRuler: return UI_STRING_KEY("Paste Ruler", "Paste Ruler (Undo action name)", "Undo action name");
+        case WebUndoActionTyping: return UI_STRING_KEY("Typing", "Typing (Undo action name)", "Undo action name");
     }
     return nil;
 }