Reviewed by Eric.
authorthatcher <thatcher@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 23 Jun 2006 04:18:05 +0000 (04:18 +0000)
committerthatcher <thatcher@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 23 Jun 2006 04:18:05 +0000 (04:18 +0000)
        Adds a native toolbar to Drosera to be a good citizen.
        Adds a Debug menu with key-commands for Continue, Pause and Step Into.
        Fixes a dragging bug from an earlier fix to the divider code.
        Fixes some poor indenting in debugger.js.

        * Drosera/DebuggerDocument.h:
        * Drosera/DebuggerDocument.m:
        (-[DebuggerDocument stepInto]):
        (-[DebuggerDocument pause:]):
        (-[DebuggerDocument resume:]):
        (-[DebuggerDocument stepInto:]):
        (-[DebuggerDocument windowDidLoad]):
        (-[DebuggerDocument toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:]):
        (-[DebuggerDocument toolbarDefaultItemIdentifiers:]):
        (-[DebuggerDocument toolbarAllowedItemIdentifiers:]):
        (-[DebuggerDocument validateUserInterfaceItem:]):
        * Drosera/English.lproj/MainMenu.nib/classes.nib:
        * Drosera/English.lproj/MainMenu.nib/info.nib:
        * Drosera/English.lproj/MainMenu.nib/keyedobjects.nib:
        * Drosera/debugger.css:
        * Drosera/debugger.html:
        * Drosera/debugger.js:
        * Drosera/viewer.html:

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

WebKitTools/ChangeLog
WebKitTools/Drosera/DebuggerDocument.h
WebKitTools/Drosera/DebuggerDocument.m
WebKitTools/Drosera/English.lproj/MainMenu.nib/classes.nib
WebKitTools/Drosera/English.lproj/MainMenu.nib/info.nib
WebKitTools/Drosera/English.lproj/MainMenu.nib/keyedobjects.nib
WebKitTools/Drosera/debugger.css
WebKitTools/Drosera/debugger.html
WebKitTools/Drosera/debugger.js
WebKitTools/Drosera/viewer.html

index 82d8620..ccd620d 100644 (file)
@@ -1,3 +1,31 @@
+2006-06-22  Timothy Hatcher  <timothy@apple.com>
+
+        Reviewed by Eric.
+
+        Adds a native toolbar to Drosera to be a good citizen.
+        Adds a Debug menu with key-commands for Continue, Pause and Step Into.
+        Fixes a dragging bug from an earlier fix to the divider code.
+        Fixes some poor indenting in debugger.js.
+
+        * Drosera/DebuggerDocument.h:
+        * Drosera/DebuggerDocument.m:
+        (-[DebuggerDocument stepInto]):
+        (-[DebuggerDocument pause:]):
+        (-[DebuggerDocument resume:]):
+        (-[DebuggerDocument stepInto:]):
+        (-[DebuggerDocument windowDidLoad]):
+        (-[DebuggerDocument toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:]):
+        (-[DebuggerDocument toolbarDefaultItemIdentifiers:]):
+        (-[DebuggerDocument toolbarAllowedItemIdentifiers:]):
+        (-[DebuggerDocument validateUserInterfaceItem:]):
+        * Drosera/English.lproj/MainMenu.nib/classes.nib:
+        * Drosera/English.lproj/MainMenu.nib/info.nib:
+        * Drosera/English.lproj/MainMenu.nib/keyedobjects.nib:
+        * Drosera/debugger.css:
+        * Drosera/debugger.html:
+        * Drosera/debugger.js:
+        * Drosera/viewer.html:
+
 2006-06-22  Kevin Decker         <kdecker@apple.com>
 
         Reviewed by Anders.
index 6e50606..dcff74e 100644 (file)
@@ -37,4 +37,8 @@
 }
 - (id)initWithServerName:(NSString *)serverName;
 - (void)switchToServerNamed:(NSString *)name;
+
+- (IBAction)pause:(id)sender;
+- (IBAction)resume:(id)sender;
+- (IBAction)stepInto:(id)sender;
 @end
index 6df2244..6660f18 100644 (file)
 
 #import "DebuggerDocument.h"
 
+static NSString *DebuggerContinueToolbarItem = @"DebuggerContinueToolbarItem";
+static NSString *DebuggerPauseToolbarItem = @"DebuggerPauseToolbarItem";
+static NSString *DebuggerStepIntoToolbarItem = @"DebuggerStepIntoToolbarItem";
+
 @implementation DebuggerDocument
 + (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
 {
         [server resume];
 }
 
-- (void)step
+- (void)stepInto
 {
     if ([[(NSDistantObject *)server connectionForProxy] isValid])
         [server step];
 }
 
 #pragma mark -
+#pragma mark Interface Actions
+
+- (IBAction)pause:(id)sender
+{
+    [[webView windowScriptObject] callWebScriptMethod:@"pause" withArguments:nil];
+}
+
+- (IBAction)resume:(id)sender
+{
+    [[webView windowScriptObject] callWebScriptMethod:@"resume" withArguments:nil];
+}
+
+- (IBAction)stepInto:(id)sender
+{
+    [[webView windowScriptObject] callWebScriptMethod:@"stepInto" withArguments:nil];
+}
+
+#pragma mark -
 #pragma mark Window Controller Overrides
 
 - (NSString *)windowNibName
 
     NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"debugger" ofType:@"html" inDirectory:nil];
     [[webView mainFrame] loadRequest:[[[NSURLRequest alloc] initWithURL:[NSURL fileURLWithPath:path]] autorelease]];
-}
 
+    NSToolbar *toolbar = [[NSToolbar alloc] initWithIdentifier:@"debugger"];
+    [toolbar setDelegate:self];
+    [toolbar setAllowsUserCustomization:YES];
+    [toolbar setAutosavesConfiguration:YES];
+    [[self window] setToolbar:toolbar];
+    [toolbar release];
+}
 
 - (void)windowWillClose:(NSNotification *)notification
 {
 }
 
 #pragma mark -
+#pragma mark Toolbar Delegate
+
+- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
+{
+    if ([itemIdentifier isEqualToString:DebuggerContinueToolbarItem]) {
+        NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier];
+
+        [item setLabel:@"Continue"];
+        [item setPaletteLabel:@"Continue"];
+
+        [item setToolTip:@"Continue script execution"];
+        [item setImage:[NSImage imageNamed:@"continue"]];
+
+        [item setTarget:self];
+        [item setAction:@selector(resume:)];
+
+        return [item autorelease];
+    } else if ([itemIdentifier isEqualToString:DebuggerPauseToolbarItem]) {
+        NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier];
+
+        [item setLabel:@"Pause"];
+        [item setPaletteLabel:@"Pause"];
+
+        [item setToolTip:@"Pause script execution"];
+        [item setImage:[NSImage imageNamed:@"pause"]];
+
+        [item setTarget:self];
+        [item setAction:@selector(pause:)];
+
+        return [item autorelease];
+    } else if ([itemIdentifier isEqualToString:DebuggerStepIntoToolbarItem]) {
+        NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier];
+
+        [item setLabel:@"Step Into"];
+        [item setPaletteLabel:@"Step Into"];
+
+        [item setToolTip:@"Step into function call"];
+        [item setImage:[NSImage imageNamed:@"step"]];
+
+        [item setTarget:self];
+        [item setAction:@selector(stepInto:)];
+
+        return [item autorelease];
+    }
+
+    return nil;
+}
+
+- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar
+{
+    return [NSArray arrayWithObjects:DebuggerContinueToolbarItem, DebuggerPauseToolbarItem,
+        NSToolbarSeparatorItemIdentifier, DebuggerStepIntoToolbarItem, nil];
+}
+
+- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar
+{
+    return [NSArray arrayWithObjects:DebuggerContinueToolbarItem, DebuggerPauseToolbarItem, DebuggerStepIntoToolbarItem,
+        NSToolbarCustomizeToolbarItemIdentifier, NSToolbarFlexibleSpaceItemIdentifier,
+        NSToolbarSpaceItemIdentifier, NSToolbarSeparatorItemIdentifier, nil];
+}
+
+- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)interfaceItem
+{
+    if ([interfaceItem action] == @selector(pause:))
+        return ![self isPaused];
+    if ([interfaceItem action] == @selector(resume:))
+        return [self isPaused];
+    if ([interfaceItem action] == @selector(stepInto:))
+        return [self isPaused];
+    return YES;
+}
+
+#pragma mark -
 #pragma mark WebView Frame Load Delegate
 
 - (void)webView:(WebView *)sender windowScriptObjectAvailable:(WebScriptObject *)windowScriptObject
index d289e3a..f700c0b 100644 (file)
@@ -7,7 +7,12 @@
             OUTLETS = {attachButton = NSButton; attachTable = NSTableView; attachWindow = NSPanel; }; 
             SUPERCLASS = NSObject; 
         }, 
-        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
+        {
+            ACTIONS = {myAction = id; stepInto = id; }; 
+            CLASS = FirstResponder; 
+            LANGUAGE = ObjC; 
+            SUPERCLASS = NSObject; 
+        }
     ); 
     IBVersion = 1; 
 }
\ No newline at end of file
index 0e4181e..5ae2e03 100644 (file)
@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
        <key>IBDocumentLocation</key>
-       <string>107 71 356 240 0 0 1440 878 </string>
+       <string>100 56 356 240 0 0 1440 878 </string>
        <key>IBEditorPositions</key>
        <dict>
                <key>29</key>
@@ -13,6 +13,7 @@
        <string>446.1</string>
        <key>IBOpenObjects</key>
        <array>
+               <integer>29</integer>
                <integer>217</integer>
        </array>
        <key>IBSystem Version</key>
index bce298e..bf34298 100644 (file)
Binary files a/WebKitTools/Drosera/English.lproj/MainMenu.nib/keyedobjects.nib and b/WebKitTools/Drosera/English.lproj/MainMenu.nib/keyedobjects.nib differ
index 0f87b7d..8a5411d 100644 (file)
 img { padding: 0; margin: 0; }
 body { margin: 0; padding: 0; }
 
-#toolbar { background-image: url(toolbarBackground.png); background-repeat: repeat-x; background-position: bottom; height: 32px; padding: 2px 5px 2px 5px; border-bottom: 1px solid #939393 }
-#toolbar * { vertical-align: middle }
-
-#main { position: absolute; top: 37px; bottom: 0; left: 0; right: 0; }
-#info { position: absolute; top: 0; height: 150px; left: 0; right: 0; }
+#main { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }
+#info { position: absolute; top: 0; height: 175px; left: 0; right: 0; }
 #divider { cursor: move; position: absolute; bottom: 0; left: 0; right: 0; background: url(splitterDimple.tif) 50% no-repeat, url(splitterBar.tif) repeat-x; height: 10px }
-#body { position: absolute; top: 150px; left: 0; right: 0; bottom: 0; }
+#body { position: absolute; top: 175px; left: 0; right: 0; bottom: 0; }
 #sourcesContainer { position: absolute; top: 16px; left: 0; right: 0; bottom: 21px; background-color: white; }
 #sources { width: 100%; height: 100% }
 #header { vertical-align: top; height: 16px; box-sizing: border-box; border-bottom: 1px solid #aaa; background: url(glossyHeader.png) repeat-x; position: absolute; top: 0; left: 0; right: 0; }
index 3060b32..714ef00 100644 (file)
@@ -36,9 +36,6 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     </style>
 </head>
 <body onload="loaded()">
-<div id="toolbar">
-<img src="pause.tif" onclick="pause()"><img src="continue.tif" onclick="resume()"><img src="step.tif" onclick="step()">
-</div>
 <div id="main">
 <div id="info">
 <div id="leftPane">
index a7314dc..d521da7 100644 (file)
@@ -43,13 +43,6 @@ function sleep(numberMillis) {
     }
 }
 
-function keyPressed(event) {
-    if (event.charCode == 112) pause();
-    else if (event.charCode == 99) resume();
-    else if (event.charCode == 115) step();
-}
-
-
 function headerMouseDown(element) {
     element.style.background = "url(glossyHeaderPressed.png) repeat-x";
 }
@@ -64,6 +57,7 @@ function headerMouseOut(element) {
 
 function dividerDragStart(element, dividerDrag, dividerDragEnd, event) {
     element.dragging = true;
+    element.dragLastY = event.clientY + window.scrollY;
     element.dragLastX = event.clientX + window.scrollX;
     document.addEventListener("mousemove", dividerDrag, true);
     document.addEventListener("mouseup", dividerDragEnd, true);
@@ -95,18 +89,20 @@ function dividerDragEnd(element, dividerDrag, dividerDragEnd, event) {
 function infoDividerDrag(event) {
     var element = document.getElementById("infoDivider");
     if (document.getElementById("infoDivider").dragging == true) {
-      var main = document.getElementById("main");
-      var leftPane = document.getElementById("leftPane");
-      var rightPane = document.getElementById("rightPane");
-      var x = event.clientX + window.scrollX;
-       
-      if (x < main.clientWidth * 0.25)
-        x = main.clientWidth * 0.25;
-        else if (x > main.clientWidth * 0.75)
-         x = main.clientWidth * 0.75;
-
-        leftPane.style.width = x + "px";
-        rightPane.style.left = x + "px";
+        var main = document.getElementById("main");
+        var leftPane = document.getElementById("leftPane");
+        var rightPane = document.getElementById("rightPane");
+        var x = event.clientX + window.scrollX;
+        var delta = element.dragLastX - x;
+
+        var newWidth = leftPane.clientWidth - delta;
+        if (newWidth < main.clientWidth * 0.25)
+            newWidth = main.clientWidth * 0.25;
+        else if (newWidth > main.clientWidth * 0.75)
+            newWidth = main.clientWidth * 0.75;
+
+        leftPane.style.width = newWidth + "px";
+        rightPane.style.left = newWidth + "px";
         element.dragLastX = x;
         event.preventDefault();
     }
@@ -136,7 +132,6 @@ function dividerDrag(event) {
 }
 
 function loaded() {
-    window.addEventListener("keypress", keyPressed, false);
     document.getElementById("divider").addEventListener("mousedown", sourceDividerDragStart, false);
     document.getElementById("infoDivider").addEventListener("mousedown", infoDividerDragStart, false);
 }
@@ -165,9 +160,9 @@ function resume()
     DebuggerDocument.resume();
 }
 
-function step()
+function stepInto()
 {
-    DebuggerDocument.step();
+    DebuggerDocument.stepInto();
 }
 
 function hasStyleClass(element,className)
index 46250d7..8eed580 100644 (file)
@@ -33,6 +33,5 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
         @import "viewer.css";
     </style>
 </head>
-<body>
-</body>
+<body></body>
 </html>