summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2017-05-23 10:18:45 (GMT)
committer Vincent Sanders <vince@kyllikki.org>2017-05-23 10:18:45 (GMT)
commitd6c07925417eaea27c85996bc243f93e27b1bcd0 (patch)
tree7c4155f513a9d2a9dc91cfb0e5de9637995340af
parent681586139fa83a53b1174ad93d764c5c92b900f3 (diff)
downloadnetsurf-d6c07925417eaea27c85996bc243f93e27b1bcd0.tar.gz
netsurf-d6c07925417eaea27c85996bc243f93e27b1bcd0.tar.bz2
remove cocoa frontend
The cocoa frontend has been broken for a few years and we have no maintainer. It was removed from the CI six months ago and has already bitrotted so it cannot be compiled.
-rw-r--r--Docs/BUILDING-Cocoa87
-rw-r--r--Docs/Doxyfile1
-rw-r--r--Makefile13
-rw-r--r--frontends/cocoa/ArrowBox.h34
-rw-r--r--frontends/cocoa/ArrowBox.m163
-rw-r--r--frontends/cocoa/ArrowWindow.h32
-rw-r--r--frontends/cocoa/ArrowWindow.m239
-rw-r--r--frontends/cocoa/BlackScroller.h20
-rw-r--r--frontends/cocoa/BlackScroller.m154
-rw-r--r--frontends/cocoa/BookmarksController.h41
-rw-r--r--frontends/cocoa/BookmarksController.m224
-rw-r--r--frontends/cocoa/BrowserView.h52
-rw-r--r--frontends/cocoa/BrowserView.m750
-rw-r--r--frontends/cocoa/BrowserViewController.h75
-rw-r--r--frontends/cocoa/BrowserViewController.m377
-rw-r--r--frontends/cocoa/BrowserWindow.h26
-rw-r--r--frontends/cocoa/BrowserWindow.m29
-rw-r--r--frontends/cocoa/BrowserWindowController.h57
-rw-r--r--frontends/cocoa/BrowserWindowController.m266
-rw-r--r--frontends/cocoa/DownloadWindowController.h53
-rw-r--r--frontends/cocoa/DownloadWindowController.m415
-rw-r--r--frontends/cocoa/FormSelectMenu.h32
-rw-r--r--frontends/cocoa/FormSelectMenu.m114
-rw-r--r--frontends/cocoa/HistoryView.h35
-rw-r--r--frontends/cocoa/HistoryView.m151
-rw-r--r--frontends/cocoa/HistoryWindowController.h31
-rw-r--r--frontends/cocoa/HistoryWindowController.m52
-rw-r--r--frontends/cocoa/LocalHistoryController.h40
-rw-r--r--frontends/cocoa/LocalHistoryController.m119
-rw-r--r--frontends/cocoa/Makefile250
-rw-r--r--frontends/cocoa/Makefile.defaults30
-rw-r--r--frontends/cocoa/NetSurf.xcodeproj/project.pbxproj1023
-rw-r--r--frontends/cocoa/NetSurfAppDelegate.h42
-rw-r--r--frontends/cocoa/NetSurfAppDelegate.m200
-rw-r--r--frontends/cocoa/NetsurfApp.h31
-rw-r--r--frontends/cocoa/NetsurfApp.m303
-rw-r--r--frontends/cocoa/PSMTabBarControl/Images/AquaTabCloseDirty_Front.pngbin292 -> 0 bytes
-rw-r--r--frontends/cocoa/PSMTabBarControl/Images/AquaTabCloseDirty_Front_Pressed.pngbin292 -> 0 bytes
-rw-r--r--frontends/cocoa/PSMTabBarControl/Images/AquaTabCloseDirty_Front_Rollover.pngbin297 -> 0 bytes
-rw-r--r--frontends/cocoa/PSMTabBarControl/Images/AquaTabClose_Front.pngbin307 -> 0 bytes
-rw-r--r--frontends/cocoa/PSMTabBarControl/Images/AquaTabClose_Front_Pressed.pngbin310 -> 0 bytes
-rw-r--r--frontends/cocoa/PSMTabBarControl/Images/AquaTabClose_Front_Rollover.pngbin317 -> 0 bytes
-rw-r--r--frontends/cocoa/PSMTabBarControl/Images/AquaTabNew.pngbin371 -> 0 bytes
-rw-r--r--frontends/cocoa/PSMTabBarControl/Images/AquaTabNewPressed.pngbin380 -> 0 bytes
-rw-r--r--frontends/cocoa/PSMTabBarControl/Images/AquaTabNewRollover.pngbin380 -> 0 bytes
-rw-r--r--frontends/cocoa/PSMTabBarControl/Images/overflowImage.pngbin256 -> 0 bytes
-rw-r--r--frontends/cocoa/PSMTabBarControl/Images/overflowImagePressed.pngbin250 -> 0 bytes
-rw-r--r--frontends/cocoa/PSMTabBarControl/Images/pi.pngbin564 -> 0 bytes
-rw-r--r--frontends/cocoa/PSMTabBarControl/NSBezierPath_AMShading.h23
-rw-r--r--frontends/cocoa/PSMTabBarControl/NSBezierPath_AMShading.m119
-rw-r--r--frontends/cocoa/PSMTabBarControl/NSString_AITruncation.h12
-rw-r--r--frontends/cocoa/PSMTabBarControl/NSString_AITruncation.m32
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMOverflowPopUpButton.h28
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMOverflowPopUpButton.m152
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMProgressIndicator.h15
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMProgressIndicator.m40
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMRolloverButton.h28
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMRolloverButton.m170
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabBarCell.h116
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabBarCell.m489
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabBarControl.h241
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabBarControl.m1995
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabBarController.h38
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabBarController.m643
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabDragAssistant.h101
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabDragAssistant.m834
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabDragView.h21
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabDragView.m62
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabDragWindow.h20
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabDragWindow.m48
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabDragWindowController.h33
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabDragWindowController.m111
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMTabStyle.h57
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMUnifiedTabStyle.h29
-rw-r--r--frontends/cocoa/PSMTabBarControl/PSMUnifiedTabStyle.m573
-rw-r--r--frontends/cocoa/PSMTabBarControl/ReadMe.rtfd/TXT.rtf186
-rw-r--r--frontends/cocoa/PSMTabBarControl/ReadMe.rtfd/startpage.gifbin11246 -> 0 bytes
-rw-r--r--frontends/cocoa/PreferencesWindowController.h29
-rw-r--r--frontends/cocoa/PreferencesWindowController.m56
-rw-r--r--frontends/cocoa/Prefix.pch11
-rw-r--r--frontends/cocoa/ScrollableView.h31
-rw-r--r--frontends/cocoa/ScrollableView.m71
-rw-r--r--frontends/cocoa/SearchWindowController.h54
-rw-r--r--frontends/cocoa/SearchWindowController.m119
-rw-r--r--frontends/cocoa/Tree.h56
-rw-r--r--frontends/cocoa/Tree.m147
-rw-r--r--frontends/cocoa/TreeView.h34
-rw-r--r--frontends/cocoa/TreeView.m249
-rw-r--r--frontends/cocoa/URLFieldCell.h31
-rw-r--r--frontends/cocoa/URLFieldCell.m209
-rw-r--r--frontends/cocoa/apple_image.h39
-rw-r--r--frontends/cocoa/apple_image.m257
-rw-r--r--frontends/cocoa/bitmap.h28
-rw-r--r--frontends/cocoa/bitmap.m282
-rwxr-xr-xfrontends/cocoa/compile-xib.sh20
-rw-r--r--frontends/cocoa/coordinates.h105
-rw-r--r--frontends/cocoa/desktop-tree.h88
-rw-r--r--frontends/cocoa/desktop-tree.m353
-rwxr-xr-xfrontends/cocoa/extract-strings.sh11
-rw-r--r--frontends/cocoa/fetch.h19
-rw-r--r--frontends/cocoa/fetch.m113
-rw-r--r--frontends/cocoa/font.h28
-rw-r--r--frontends/cocoa/font.m243
-rw-r--r--frontends/cocoa/gui.h35
-rw-r--r--frontends/cocoa/gui.m335
-rw-r--r--frontends/cocoa/plotter.h33
-rw-r--r--frontends/cocoa/plotter.m335
-rw-r--r--frontends/cocoa/res/BookmarksWindow.xib610
-rw-r--r--frontends/cocoa/res/Browser.xib399
-rw-r--r--frontends/cocoa/res/BrowserWindow.xib1395
-rw-r--r--frontends/cocoa/res/DownloadWindow.xib493
-rw-r--r--frontends/cocoa/res/HistoryWindow.xib338
-rw-r--r--frontends/cocoa/res/HomeTemplate.pdf106
l---------frontends/cocoa/res/Icons1
-rw-r--r--frontends/cocoa/res/LocalHistoryPanel.xib357
-rw-r--r--frontends/cocoa/res/MainMenu.xib2369
-rw-r--r--frontends/cocoa/res/NetSurf-Info.plist111
-rw-r--r--frontends/cocoa/res/NetSurf.icnsbin203268 -> 0 bytes
-rw-r--r--frontends/cocoa/res/PreferencesWindow.xib512
-rw-r--r--frontends/cocoa/res/SearchWindow.xib614
l---------frontends/cocoa/res/adblock.css1
l---------frontends/cocoa/res/ca-bundle1
-rw-r--r--frontends/cocoa/res/de.lproj/BookmarksWindow.xib.stringsbin366 -> 0 bytes
-rw-r--r--frontends/cocoa/res/de.lproj/BrowserWindow.xib.stringsbin1892 -> 0 bytes
-rw-r--r--frontends/cocoa/res/de.lproj/DownloadWindow.xib.stringsbin536 -> 0 bytes
-rw-r--r--frontends/cocoa/res/de.lproj/HistoryWindow.xib.stringsbin172 -> 0 bytes
-rw-r--r--frontends/cocoa/res/de.lproj/Localizable.strings78
-rw-r--r--frontends/cocoa/res/de.lproj/MainMenu.xib.stringsbin11982 -> 0 bytes
l---------frontends/cocoa/res/de.lproj/Messages1
-rw-r--r--frontends/cocoa/res/de.lproj/PreferencesWindow.xib.stringsbin1206 -> 0 bytes
-rw-r--r--frontends/cocoa/res/de.lproj/SearchWindow.xib.stringsbin1148 -> 0 bytes
l---------frontends/cocoa/res/default.css1
-rw-r--r--frontends/cocoa/res/en.lproj/Localizable.stringsbin3322 -> 0 bytes
l---------frontends/cocoa/res/en.lproj/Messages1
-rw-r--r--frontends/cocoa/res/fr.lproj/Localizable.stringsbin3322 -> 0 bytes
l---------frontends/cocoa/res/fr.lproj/Messages1
l---------frontends/cocoa/res/internal.css1
-rw-r--r--frontends/cocoa/res/it.lproj/Localizable.stringsbin3496 -> 0 bytes
l---------frontends/cocoa/res/it.lproj/Messages1
l---------frontends/cocoa/res/netsurf.png1
-rw-r--r--frontends/cocoa/res/nl.lproj/Localizable.stringsbin3322 -> 0 bytes
l---------frontends/cocoa/res/nl.lproj/Messages1
l---------frontends/cocoa/res/quirks.css1
-rw-r--r--frontends/cocoa/schedule.h19
-rw-r--r--frontends/cocoa/schedule.m90
-rw-r--r--frontends/cocoa/selection.h19
-rw-r--r--frontends/cocoa/selection.m104
147 files changed, 1 insertions, 22823 deletions
diff --git a/Docs/BUILDING-Cocoa b/Docs/BUILDING-Cocoa
deleted file mode 100644
index d83800d..0000000
--- a/Docs/BUILDING-Cocoa
+++ b/dev/null
@@ -1,87 +0,0 @@
---------------------------------------------------------------------------------
- Build Instructions for Cocoa NetSurf 13 January 2011
---------------------------------------------------------------------------------
-
- This document provides instructions for building the Cocoa version of NetSurf
- and provides guidance on obtaining NetSurf's build dependencies.
-
- Cocoa NetSurf has been tested on Mac OS X 10.6 on Intel and on Mac OS X 10.5
- on ppc.
-
-
- Building NetSurf
-==================
-
- After installing the dependencies NetSurf can be built either using the Xcode
- project file 'cocoa/NetSurf.xcodeproj' or on the command line using the
- Makefile:
-
- $ make TARGET=cocoa
-
- In both cases the actual build process is controlled by the Makefile.
-
- Obtaining NetSurf's build dependencies
-========================================
-
- Many of NetSurf's dependencies are packaged on various operating systems.
- The remainder must be installed manually. Currently, some of the libraries
- developed as part of the NetSurf project have not had official releases.
- Hopefully they will soon be released with downloadable tarballs and packaged
- in common distros. For now, you'll have to make do with Git checkouts.
-
- Package installation
-----------------------
-
- For building the other NetSurf libraries and for configuring NetSurf the
- "pkg-config" tool is required. It can be installed either via fink, macports
- or homebrew or from source.
-
- OpenSSL, LibPNG, curl, iconv and zlib are provided by Mac OS X.
-
- The curl library provided by Mac OS X 10.6 causes a crash while fetching
- https resources, so you should install version 7.21.4 (or newer) of libcurl
- if you are running on 10.6.
-
- LibJPEG and LibMNG can be installed from source or using one of the mentioned
- package managers.
-
-
- The NetSurf project's libraries
----------------------------------
-
- The NetSurf project has developed several libraries which are required by
- the browser. These are:
-
- LibParserUtils -- Parser building utility functions
- LibWapcaplet -- String internment
- Hubbub -- HTML5 compliant HTML parser
- LibCSS -- CSS parser and selection engine
- LibNSGIF -- GIF format image decoder
- LibNSBMP -- BMP and ICO format image decoder
- LibROSprite -- RISC OS Sprite format image decoder
-
- To fetch each of these libraries, run the appropriate commands from the
- Docs/LIBRARIES file.
-
- $ make
- $ sudo make install
-
- This command builds the libraries only for the active architecture. To build
- universal binaries use those commands:
-
- $ make UNIVERSAL="i386 x86_64 ppc ppc64"
- $ sudo make install
-
- If you are building NetSurf for using it on only one computer this is not
- necessary, but if you want to distribute your binary you should build
- universal binaries. You can also leave some of the platform names out, if
- you don't require them.
-
- | Note: We advise enabling iconv() support in libparserutils, which vastly
- | increases the number of supported character sets. To do this,
- | create a file called Makefile.config.override in the libparserutils
- | directory, containing the following line:
- |
- | CFLAGS += -DWITH_ICONV_FILTER
- |
- | For more information, consult the libparserutils README file.
diff --git a/Docs/Doxyfile b/Docs/Doxyfile
index f3fdd1e..98f9fd6 100644
--- a/Docs/Doxyfile
+++ b/Docs/Doxyfile
@@ -758,7 +758,6 @@ INPUT = frontends/amiga \
frontends/atari \
frontends/atari/plot \
frontends/beos \
- frontends/cocoa \
frontends/framebuffer \
frontends/framebuffer/fbtk \
frontends/gtk \
diff --git a/Makefile b/Makefile
index 97a8128..9c3b72e 100644
--- a/Makefile
+++ b/Makefile
@@ -84,13 +84,6 @@ ifeq ($(HOST),AmigaOS)
endif
endif
-ifeq ($(HOST),Darwin)
- HOST := macosx
- ifeq ($(TARGET),)
- TARGET := cocoa
- endif
-endif
-
ifeq ($(HOST),FreeMiNT)
HOST := mint
endif
@@ -116,7 +109,7 @@ ifeq ($(TARGET),)
endif
# valid values for the TARGET
-VLDTARGET := riscos gtk gtk3 beos amiga amigaos3 framebuffer windows atari cocoa monkey
+VLDTARGET := riscos gtk gtk3 beos amiga amigaos3 framebuffer windows atari monkey
# Check for valid TARGET
ifeq ($(filter $(VLDTARGET),$(TARGET)),)
@@ -255,9 +248,6 @@ else
PKG_CONFIG := PKG_CONFIG_LIBDIR="$(GCCSDK_INSTALL_ENV)/lib/pkgconfig" pkg-config
endif
else
- ifeq ($(TARGET),cocoa)
- PKG_CONFIG := PKG_CONFIG_PATH="$(PKG_CONFIG_PATH):/usr/local/lib/pkgconfig" pkg-config
- else
ifeq ($(TARGET),atari)
ifeq ($(HOST),atari)
PKG_CONFIG := pkg-config
@@ -323,7 +313,6 @@ else
endif
endif
endif
- endif
endif
endif
endif
diff --git a/frontends/cocoa/ArrowBox.h b/frontends/cocoa/ArrowBox.h
deleted file mode 100644
index c49fcb6..0000000
--- a/frontends/cocoa/ArrowBox.h
+++ b/dev/null
@@ -1,34 +0,0 @@
-/* Copyright (c) 1011 Sven Weidauer
-
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-
-
-#import <Cocoa/Cocoa.h>
-
-typedef enum {
- ArrowNone,
- ArrowTopEdge,
- ArrowBottomEdge,
- ArrowLeftEdge,
- ArrowRightEdge
-} ArrowEdge;
-
-
-@interface ArrowBox : NSView {
- CGFloat arrowPosition;
- CGFloat arrowSize;
- ArrowEdge arrowEdge;
- CGFloat cornerRadius;
- BOOL updateShadow;
-}
-
-@property (readwrite, assign, nonatomic) CGFloat arrowPosition;
-@property (readwrite, assign, nonatomic) CGFloat arrowSize;
-@property (readwrite, assign, nonatomic) ArrowEdge arrowEdge;
-@property (readwrite, assign, nonatomic) CGFloat cornerRadius;
-
-@end
diff --git a/frontends/cocoa/ArrowBox.m b/frontends/cocoa/ArrowBox.m
deleted file mode 100644
index 6605fcc..0000000
--- a/frontends/cocoa/ArrowBox.m
+++ b/dev/null
@@ -1,163 +0,0 @@
-/* Copyright 2011 Sven Weidauer
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#import "ArrowBox.h"
-
-@implementation ArrowBox
-
-@synthesize arrowPosition;
-@synthesize arrowSize;
-@synthesize arrowEdge;
-@synthesize cornerRadius;
-
-- (void) setArrowEdge: (ArrowEdge)newEdge
-{
- if (arrowEdge == newEdge) {
- return;
- }
-
- arrowEdge = newEdge;
-
- [self setNeedsDisplay: YES];
- updateShadow = YES;
-}
-
-
-- (void) setArrowSize: (CGFloat)newSize
-{
- arrowSize = newSize;
- [self setNeedsDisplay: YES];
- updateShadow = YES;
-}
-
-
-- (void) setCornerRadius: (CGFloat)newRadius
-{
- cornerRadius = newRadius;
- [self setNeedsDisplay: YES];
- updateShadow = YES;
-}
-
-- (void) setArrowPosition: (CGFloat)newPosition
-{
- arrowPosition = newPosition;
-
- [self setNeedsDisplay: YES];
- updateShadow = YES;
-}
-
-
-- (id)initWithFrame:(NSRect)frame
-{
- self = [super initWithFrame:frame];
- if (self) {
- arrowPosition = 50;
- cornerRadius = 10;
- arrowSize = 15;
- }
- return self;
-}
-
-- (void)drawRect:(NSRect)dirtyRect
-{
- [[NSColor clearColor] set];
- [NSBezierPath fillRect: dirtyRect];
-
- NSBezierPath *path = [NSBezierPath bezierPath];
-
- NSRect bounds = [self convertRectToBase: NSInsetRect( [self bounds], 2, 2 )];
- bounds.origin.x = floor( bounds.origin.x );
- bounds.origin.y = floor( bounds.origin.y );
- bounds.size.width = floor( bounds.size.width );
- bounds.size.height = floor( bounds.size.height );
- bounds = [self convertRectFromBase: bounds];
-
- const CGFloat right = bounds.size.width - arrowSize;
- const CGFloat top = bounds.size.height - arrowSize;
- const CGFloat left = arrowSize;
- const CGFloat bottom = arrowSize;
-
- [path setLineJoinStyle:NSRoundLineJoinStyle];
-
- [path moveToPoint: NSMakePoint( right - cornerRadius, top )];
-
- if (arrowEdge == ArrowTopEdge) {
- [path lineToPoint: NSMakePoint( arrowPosition + arrowSize, top )];
- [path lineToPoint: NSMakePoint( arrowPosition, top + arrowSize )];
- [path lineToPoint: NSMakePoint( arrowPosition - arrowSize, top )];
- }
-
- [path appendBezierPathWithArcFromPoint: NSMakePoint( left, top )
- toPoint: NSMakePoint( left, top - cornerRadius )
- radius: cornerRadius];
-
- if (arrowEdge == ArrowLeftEdge) {
- [path lineToPoint: NSMakePoint( left, bottom + arrowPosition + arrowSize )];
- [path lineToPoint: NSMakePoint( left - arrowSize, bottom + arrowPosition )];
- [path lineToPoint: NSMakePoint( left, bottom + arrowPosition - arrowSize )];
- }
-
- [path appendBezierPathWithArcFromPoint: NSMakePoint( left, bottom )
- toPoint: NSMakePoint( left + cornerRadius, bottom )
- radius: cornerRadius];
-
- if (arrowEdge == ArrowBottomEdge) {
- [path lineToPoint: NSMakePoint( arrowPosition - arrowSize, bottom )];
- [path lineToPoint: NSMakePoint( arrowPosition, bottom - arrowSize )];
- [path lineToPoint: NSMakePoint( arrowPosition + arrowSize, bottom )];
- }
-
- [path appendBezierPathWithArcFromPoint: NSMakePoint( right, bottom )
- toPoint: NSMakePoint( right, bottom + cornerRadius )
- radius: cornerRadius];
-
- if (arrowEdge == ArrowRightEdge) {
- [path lineToPoint: NSMakePoint( right, bottom + arrowPosition - arrowSize )];
- [path lineToPoint: NSMakePoint( right + arrowSize, bottom + arrowPosition )];
- [path lineToPoint: NSMakePoint( right, bottom + arrowPosition + arrowSize )];
- }
-
- [path appendBezierPathWithArcFromPoint: NSMakePoint( right, top )
- toPoint: NSMakePoint( right - cornerRadius, top )
- radius: cornerRadius];
- [path closePath];
-
- [[NSColor colorWithDeviceWhite: 1.0 alpha: 0.4] set];
- [[NSColor colorWithDeviceWhite: 0.0 alpha: 0.75] setFill];
-
- NSAffineTransform *transform = [NSAffineTransform transform];
- [transform translateXBy: bounds.origin.x yBy: bounds.origin.y];
- [transform concat];
-
- [path setLineWidth: 2.0];
- [path fill];
- [path stroke];
-
- if (updateShadow) {
- [[self window] invalidateShadow];
- [[self window] update];
- updateShadow = NO;
- }
-}
-
-@end
diff --git a/frontends/cocoa/ArrowWindow.h b/frontends/cocoa/ArrowWindow.h
deleted file mode 100644
index 79f422f..0000000
--- a/frontends/cocoa/ArrowWindow.h
+++ b/dev/null
@@ -1,32 +0,0 @@
-/* Copyright (c) 1011 Sven Weidauer
-
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-
-
-#import <Cocoa/Cocoa.h>
-
-#import "ArrowBox.h"
-
-@interface ArrowWindow : NSWindow {
- ArrowBox *box;
- NSView *content;
- BOOL acceptsKey;
- NSWindow *attachedWindow;
-}
-
-@property (readwrite, assign, nonatomic) BOOL acceptsKey;
-
-@property (readwrite, assign, nonatomic) CGFloat arrowPosition;
-@property (readwrite, assign, nonatomic) CGFloat arrowSize;
-@property (readwrite, assign, nonatomic) ArrowEdge arrowEdge;
-@property (readwrite, assign, nonatomic) CGFloat cornerRadius;
-
-- (void) moveToPoint: (NSPoint) screenPoint;
-- (void) attachToView: (NSView *) view;
-- (void) detach;
-
-@end
diff --git a/frontends/cocoa/ArrowWindow.m b/frontends/cocoa/ArrowWindow.m
deleted file mode 100644
index 8edc32e..0000000
--- a/frontends/cocoa/ArrowWindow.m
+++ b/dev/null
@@ -1,239 +0,0 @@
-/* Copyright 2011 Sven Weidauer
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#import "ArrowWindow.h"
-#import "ArrowBox.h"
-
-@implementation ArrowWindow
-
-@synthesize acceptsKey;
-
-- (id) initWithContentRect: (NSRect)contentRect styleMask: (NSUInteger)aStyle backing: (NSBackingStoreType)bufferingType defer: (BOOL)flag
-{
- if ((self = [super initWithContentRect: contentRect styleMask: NSBorderlessWindowMask backing: bufferingType defer: flag]) == nil) {
- return nil;
- }
-
- [self setBackgroundColor: [NSColor clearColor]];
- [self setOpaque: NO];
- [self setHasShadow: YES];
-
- return self;
-}
-
-- (void) setContentView: (NSView *)aView
-{
- if (aView == content) return;
-
- [content removeFromSuperview];
- content = aView;
-
- if (content == nil) return;
-
- if (box == nil) {
- box = [[ArrowBox alloc] initWithFrame: NSZeroRect];
- [box setArrowEdge: ArrowTopEdge];
- [super setContentView: box];
- [box release];
- }
-
- [box addSubview: content];
-
- NSRect frame = [self contentRectForFrameRect: [self frame]];
- frame.origin = [self convertScreenToBase: frame.origin];
- frame = [box convertRect: frame fromView: nil];
-
- [content setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
- [content setFrame: frame];
-}
-
-- (void) setContentSize: (NSSize)aSize
-{
- NSRect frame = [content frame];
- frame.size = aSize;
-
- frame = [box convertRect: frame toView: nil];
- frame.origin = [self convertBaseToScreen: frame.origin];
- frame = [self frameRectForContentRect: frame];
-
- [self setFrame: frame display: YES];
-}
-
-static const CGFloat padding = 0;
-
-- (NSRect) contentRectForFrameRect: (NSRect)frameRect
-{
- const CGFloat arrowSize = [box arrowSize];
- const CGFloat offset = 2 * (padding + arrowSize );
-
- return NSInsetRect( frameRect, offset, offset );
-}
-
-- (NSRect) frameRectForContentRect: (NSRect)contentRect
-{
- const CGFloat arrowSize = [box arrowSize];
- const CGFloat offset = -2 * (padding + arrowSize );
-
- return NSInsetRect( contentRect, offset, offset );
-}
-
-+ (NSRect) frameRectForContentRect: (NSRect)cRect styleMask: (NSUInteger)aStyle
-{
- const CGFloat DefaultArrowSize = 15;
- const CGFloat offset = -2 * (padding + DefaultArrowSize);
-
- return NSInsetRect( cRect, offset, offset );
-}
-
-- (BOOL) canBecomeKeyWindow
-{
- return acceptsKey;
-}
-
-- (void) moveToPoint: (NSPoint) screenPoint
-{
- switch ([box arrowEdge]) {
- case ArrowNone:
- screenPoint.x -= [box arrowSize];
- screenPoint.y += [box arrowSize];
- break;
-
- case ArrowTopEdge:
- screenPoint.x -= [box arrowPosition];
- break;
-
- case ArrowBottomEdge:
- screenPoint.x -= [box arrowPosition];
- screenPoint.y += NSHeight( [self frame] );
- break;
-
- case ArrowLeftEdge:
- screenPoint.y += NSHeight( [self frame] ) - [box arrowPosition] - [box arrowSize];
- break;
-
- case ArrowRightEdge:
- screenPoint.x -= NSWidth( [self frame] );
- screenPoint.y += NSHeight( [self frame] ) - [box arrowPosition] - [box arrowSize];
- break;
- }
-
- [self setFrameTopLeftPoint: screenPoint];
-}
-
-static NSRect ScreenRectForView( NSView *view )
-{
- NSRect viewRect = [view bounds]; // in View coordinate system
- viewRect = [view convertRect: viewRect toView: nil]; // translate to window coordinates
- viewRect.origin = [[view window] convertBaseToScreen: viewRect.origin]; // translate to screen coordinates
- return viewRect;
-}
-
-- (void) attachToView: (NSView *) view
-{
- if (nil != attachedWindow) [self detach];
-
- NSRect viewRect = ScreenRectForView( view );
- NSPoint arrowPoint;
-
- switch ([box arrowEdge]) {
- case ArrowLeftEdge:
- arrowPoint = NSMakePoint( NSMaxX( viewRect ),
- NSMidY( viewRect ) );
- break;
-
- case ArrowBottomEdge:
- arrowPoint = NSMakePoint( NSMidX( viewRect ),
- NSMaxY( viewRect ) );
- break;
-
- case ArrowRightEdge:
- arrowPoint = NSMakePoint( NSMinX( viewRect ),
- NSMidY( viewRect ) );
- break;
-
- case ArrowNone:
- case ArrowTopEdge:
- default:
- arrowPoint = NSMakePoint( NSMidX( viewRect ),
- NSMinY( viewRect ) );
- break;
-
- }
- attachedWindow = [view window];
- [self moveToPoint: arrowPoint];
- [attachedWindow addChildWindow: self ordered: NSWindowAbove];
-}
-
-- (void) detach
-{
- [attachedWindow removeChildWindow: self];
- [self close];
- attachedWindow = nil;
-}
-
-//MARK: -
-//MARK: Properties
-
-- (void) setArrowPosition: (CGFloat) newPosition
-{
- [box setArrowPosition: newPosition];
-}
-
-- (CGFloat) arrowPosition
-{
- return [box arrowPosition];
-}
-
-- (void) setArrowSize: (CGFloat)newSize
-{
- NSRect contentRect = [self contentRectForFrameRect: [self frame]];
- [box setArrowSize: newSize];
- [self setFrame: [self frameRectForContentRect: contentRect] display: [self isVisible]];
-}
-
-- (CGFloat) arrowSize
-{
- return [box arrowSize];
-}
-
-- (void) setArrowEdge: (ArrowEdge) newEdge
-{
- [box setArrowEdge: newEdge];
-}
-
-- (ArrowEdge) arrowEdge
-{
- return [box arrowEdge];
-}
-
-- (void) setCornerRadius: (CGFloat)newRadius
-{
- [box setCornerRadius: newRadius];
-}
-
-- (CGFloat) cornerRadius
-{
- return [box cornerRadius];
-}
-
-@end
diff --git a/frontends/cocoa/BlackScroller.h b/frontends/cocoa/BlackScroller.h
deleted file mode 100644
index 34110b0..0000000
--- a/frontends/cocoa/BlackScroller.h
+++ b/dev/null
@@ -1,20 +0,0 @@
-/* Copyright (c) 1011 Sven Weidauer
-
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-
-
-#import <Cocoa/Cocoa.h>
-
-
-@interface BlackScroller : NSScroller {
- BOOL drawTrack;
- NSTrackingRectTag tag;
-}
-
-@property (readonly, getter=isHorizontal) BOOL horizontal;
-
-@end
diff --git a/frontends/cocoa/BlackScroller.m b/frontends/cocoa/BlackScroller.m
deleted file mode 100644
index 2ee739f..0000000
--- a/frontends/cocoa/BlackScroller.m
+++ b/dev/null
@@ -1,154 +0,0 @@
-/* Copyright (c) 1011 Sven Weidauer
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#import "BlackScroller.h"
-
-@implementation BlackScroller
-
-- (void) setFrame: (NSRect)frameRect
-{
- [super setFrame: frameRect];
- if (tag != 0) [self removeTrackingRect: tag];
- tag = [self addTrackingRect: [self bounds] owner: self userData: NULL assumeInside: NO];
-}
-
-- (void) drawRect: (NSRect)dirtyRect
-{
- [[NSColor clearColor] set];
- [NSBezierPath fillRect: dirtyRect];
-
- if (drawTrack) [self drawKnobSlotInRect: [self rectForPart: NSScrollerKnobSlot]
- highlight: NO];
- [self drawKnob];
-}
-
-- (void) drawKnobSlotInRect: (NSRect)slotRect highlight: (BOOL)flag
-{
- slotRect = NSInsetRect( slotRect, 2, 2 );
- slotRect = [self convertRectToBase: slotRect];
- slotRect.origin.x = floor( slotRect.origin.x ) + 0.5;
- slotRect.origin.y = floor( slotRect.origin.y ) + 0.5;
- slotRect.size.width = floor( slotRect.size.width );
- slotRect.size.height = floor( slotRect.size.height );
- slotRect = [self convertRectFromBase: slotRect];
-
- NSGradient *gradient = [[[NSGradient alloc] initWithColorsAndLocations:
- [NSColor clearColor], 0.0,
- [NSColor clearColor], 0.4,
- [NSColor whiteColor], 1.0,
- nil] autorelease];
- [[NSColor whiteColor] set];
- const float radius = 0.5 * ([self isHorizontal] ? NSHeight( slotRect ) : NSWidth( slotRect ));
- NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect: slotRect
- xRadius: radius
- yRadius: radius];
- [gradient drawInBezierPath: path angle: [self isHorizontal] ? 90 : 0];
-
- [path stroke];
-}
-
-
-- (NSUsableScrollerParts) usableParts
-{
- return NSScrollerKnob | NSScrollerKnobSlot;
-}
-
-- (void) drawKnob
-{
- NSRect rect = NSInsetRect( [self rectForPart: NSScrollerKnob], 2, 2 );
-
- rect = [self convertRectToBase: rect];
- rect.origin.x = floor( rect.origin.x ) + 0.5;
- rect.origin.y = floor( rect.origin.y ) + 0.5;
- rect.size.width = floor( rect.size.width );
- rect.size.height = floor( rect.size.height );
- rect = [self convertRectFromBase: rect];
-
- [[NSColor colorWithDeviceWhite: 1.0 alpha: drawTrack ? 1.0 : 0.6] set];
-
- const float radius = 0.5 * ([self isHorizontal] ? NSHeight( rect ) : NSWidth( rect ));
- NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect: rect
- xRadius: radius
- yRadius: radius];
- [path fill];
- [path stroke];
-}
-
-- (NSRect) rectForPart: (NSScrollerPart)partCode
-{
- const bool horizontal = [self isHorizontal];
-
- NSRect rect = horizontal ? NSInsetRect( [self bounds], 4, 0 ) : NSInsetRect( [self bounds], 0, 4 );
-
- switch (partCode) {
- case NSScrollerKnobSlot:
- return rect;
-
- case NSScrollerKnob: {
- const CGFloat len = horizontal ? NSWidth( rect ) : NSHeight( rect );
- CGFloat knobLen = [self knobProportion] * len;
- const CGFloat minKnobLen = horizontal ? NSHeight( rect ) : NSWidth( rect );
- if (knobLen < minKnobLen) knobLen = minKnobLen;
-
- const CGFloat start = [self doubleValue] * (len - knobLen);
-
- if (horizontal) {
- rect.origin.x += start;
- rect.size.width = knobLen;
- } else {
- rect.origin.y += start;
- rect.size.height = knobLen;
- }
-
- return rect;
- }
-
- default:
- return [super rectForPart: partCode];
- }
-}
-
-- (BOOL) isOpaque
-{
- return NO;
-}
-
-- (BOOL) isHorizontal
-{
- NSRect bounds = [self bounds];
- return NSWidth( bounds ) > NSHeight( bounds );
-}
-
-- (void) mouseEntered: (NSEvent *)theEvent
-{
- drawTrack = YES;
- [self setNeedsDisplay: YES];
-}
-
-- (void) mouseExited: (NSEvent *)theEvent
-{
- drawTrack = NO;
- [self setNeedsDisplay: YES];
-}
-
-@end
diff --git a/frontends/cocoa/BookmarksController.h b/frontends/cocoa/BookmarksController.h
deleted file mode 100644
index aa71a1a..0000000
--- a/frontends/cocoa/BookmarksController.h
+++ b/dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-@class Tree;
-@class TreeView;
-
-@interface BookmarksController : NSWindowController {
- Tree *tree;
- TreeView *view;
- NSMapTable *nodeForMenu;
- NSMenu *defaultMenu;
-}
-
-@property (readwrite, assign, nonatomic) IBOutlet NSMenu *defaultMenu;
-@property (readwrite, assign, nonatomic) IBOutlet TreeView *view;
-
-- (IBAction) openBookmarkURL: (id) sender;
-- (IBAction) addBookmark: (id) sender;
-
-- (IBAction) editSelected: (id) sender;
-- (IBAction) deleteSelected: (id) sender;
-- (IBAction) addFolder: (id) sender;
-
-@end
diff --git a/frontends/cocoa/BookmarksController.m b/frontends/cocoa/BookmarksController.m
deleted file mode 100644
index d7918d9..0000000
--- a/frontends/cocoa/BookmarksController.m
+++ b/dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "utils/messages.h"
-#import "utils/utils.h"
-#import "utils/nsurl.h"
-#import "netsurf/browser_window.h"
-#import "netsurf/keypress.h"
-#import "desktop/hotlist.h"
-
-#import "cocoa/desktop-tree.h"
-#import "cocoa/BookmarksController.h"
-#import "cocoa/Tree.h"
-#import "cocoa/TreeView.h"
-#import "cocoa/NetsurfApp.h"
-#import "cocoa/BrowserViewController.h"
-#import "cocoa/gui.h"
-
-
-@interface BookmarksController ()
-- (void) noteAppWillTerminate: (NSNotification *) note;
-- (void) save;
-@end
-
-@implementation BookmarksController
-
-@synthesize defaultMenu;
-@synthesize view;
-
-static const char *cocoa_hotlist_path( void )
-{
- NSString *path = [[NSUserDefaults standardUserDefaults]
- stringForKey: kHotlistFileOption];
- return [path UTF8String];
-}
-
-- (id)init
-{
- if ((self = [super initWithWindowNibName: @"BookmarksWindow"]) == nil) {
- return nil;
- }
- tree_hotlist_path = cocoa_hotlist_path();
- tree = [[Tree alloc] initWithFlags: TREE_HOTLIST];
- nodeForMenu = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks,
- NSNonOwnedPointerMapValueCallBacks,
- 0);
-
- [[NSNotificationCenter defaultCenter]
- addObserver:self
- selector:@selector(noteAppWillTerminate:)
- name:NSApplicationWillTerminateNotification
- object:NSApp];
-
- return self;
-}
-
-- (void) noteAppWillTerminate: (NSNotification *)note
-{
- [self save];
-}
-
-- (void) save
-{
- hotlist_export( cocoa_hotlist_path(), NULL );
-}
-
-- (void) dealloc
-{
- [self setView: nil];
- NSFreeMapTable( nodeForMenu );
- [tree release];
-
- [[NSNotificationCenter defaultCenter] removeObserver: self];
-
- [super dealloc];
-}
-
-- (void) menuNeedsUpdate: (NSMenu *)menu
-{
-#if 0
- for (NSMenuItem *item in [menu itemArray]) {
- if ([item hasSubmenu]) NSMapRemove( nodeForMenu, [item submenu] );
- [menu removeItem: item];
- }
-
- bool hasSeparator = true;
- struct node *node = (struct node *)NSMapGet( nodeForMenu, menu );
- if (node == NULL) {
- for (NSMenuItem *item in [defaultMenu itemArray]) {
- [menu addItem: [[item copy] autorelease]];
- }
- hasSeparator = false;
- }
-
- for (struct node *child = tree_node_get_child( node );
- child != NULL;
- child = tree_node_get_next( child )) {
-
- if (tree_node_is_deleted( child )) continue;
-
- if (!hasSeparator) {
- [menu addItem: [NSMenuItem separatorItem]];
- hasSeparator = true;
- }
-
- NSString *title = [NSString stringWithUTF8String: tree_url_node_get_title( child )];
-
- NSMenuItem *item = [menu addItemWithTitle: title action: NULL keyEquivalent: @""];
- if (tree_node_is_folder( child )) {
- NSMenu *subMenu = [[[NSMenu alloc] initWithTitle: title] autorelease];
- NSMapInsert( nodeForMenu, subMenu, child );
- [subMenu setDelegate: self];
- [menu setSubmenu: subMenu forItem: item];
- } else {
- [item setRepresentedObject: [NSString stringWithUTF8String: tree_url_node_get_url( child )]];
- [item setTarget: self];
- [item setAction: @selector( openBookmarkURL: )];
- }
- }
-#endif
-}
-
-- (IBAction) openBookmarkURL: (id)sender
-{
- const char *urltxt = [[sender representedObject] UTF8String];
- NSParameterAssert( urltxt != NULL );
-
- nsurl *url;
- nserror error;
-
- error = nsurl_create(urltxt, &url);
- if (error == NSERROR_OK) {
- BrowserViewController *tab = [(NetSurfApp *)NSApp frontTab];
- if (tab != nil) {
- error = browser_window_navigate([tab browser],
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- } else {
- error = browser_window_create(BW_CREATE_HISTORY,
- url,
- NULL,
- NULL,
- NULL);
- }
- nsurl_unref(url);
- }
- if (error != NSERROR_OK) {
- cocoa_warning(messages_get_errorcode(error), 0);
- }
-}
-
-- (IBAction) addBookmark: (id)sender
-{
- struct browser_window *bw = [[(NetSurfApp *)NSApp frontTab] browser];
- if (bw != NULL) {
- hotlist_add_url(browser_window_get_url(bw));
- }
-}
-
-- (BOOL) validateUserInterfaceItem: (id)item
-{
- SEL action = [item action];
-
- if (action == @selector( addBookmark: )) {
- return [(NetSurfApp *)NSApp frontTab] != nil;
- }
-
- return YES;
-}
-
-- (void) windowDidLoad
-{
- hotlist_expand(false);
- hotlist_contract(true);
-
- [view setTree: tree];
-}
-
-
-+ (void) initialize
-{
- [[NSUserDefaults standardUserDefaults]
- registerDefaults:
- [NSDictionary
- dictionaryWithObjectsAndKeys:cocoa_get_user_path( @"Bookmarks.html" ),
- kHotlistFileOption,
- nil]];
-}
-
-- (IBAction) editSelected: (id)sender
-{
- hotlist_edit_selection();
-}
-
-- (IBAction) deleteSelected: (id)sender
-{
- hotlist_keypress(NS_KEY_DELETE_LEFT);
-}
-
-- (IBAction) addFolder: (id)sender
-{
- hotlist_add_folder(NULL, false, 0);
-}
-
-@end
diff --git a/frontends/cocoa/BrowserView.h b/frontends/cocoa/BrowserView.h
deleted file mode 100644
index 1d02fb0..0000000
--- a/frontends/cocoa/BrowserView.h
+++ b/dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-#import "cocoa/ScrollableView.h"
-
-@class LocalHistoryController;
-
-@interface BrowserView : ScrollableView <NSTextInput> {
- struct browser_window *browser;
-
- NSPoint caretPoint;
- CGFloat caretHeight;
- BOOL caretVisible;
- BOOL hasCaret;
- NSTimer *caretTimer;
-
- BOOL isDragging;
- NSPoint dragStart;
-
- BOOL historyVisible;
- LocalHistoryController *history;
-
- NSString *markedText;
-}
-
-@property (readwrite, assign, nonatomic) struct browser_window *browser;
-@property (readwrite, retain, nonatomic) NSTimer *caretTimer;
-@property (readwrite, assign, nonatomic, getter=isHistoryVisible) BOOL historyVisible;
-
-- (void) removeCaret;
-- (void) addCaretAt: (NSPoint) point height: (CGFloat) height;
-
-- (void) updateHistory;
-
-@end
diff --git a/frontends/cocoa/BrowserView.m b/frontends/cocoa/BrowserView.m
deleted file mode 100644
index e6e8e0b..0000000
--- a/frontends/cocoa/BrowserView.m
+++ b/dev/null
@@ -1,750 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "utils/nsoption.h"
-#import "utils/messages.h"
-#import "utils/nsurl.h"
-#import "utils/utils.h"
-#import "netsurf/browser_window.h"
-#import "netsurf/plotters.h"
-#import "netsurf/content.h"
-#import "netsurf/keypress.h"
-
-#import "cocoa/gui.h"
-#import "cocoa/BrowserView.h"
-#import "cocoa/HistoryView.h"
-#import "cocoa/font.h"
-#import "cocoa/coordinates.h"
-#import "cocoa/plotter.h"
-#import "cocoa/LocalHistoryController.h"
-#import "cocoa/BrowserWindowController.h"
-
-
-@interface BrowserView ()
-
-@property (readwrite, copy, nonatomic) NSString *markedText;
-
-- (void) scrollHorizontal: (CGFloat) amount;
-- (void) scrollVertical: (CGFloat) amount;
-- (CGFloat) pageScroll;
-
-- (void) popUpContextMenuForEvent: (NSEvent *) event;
-
-- (IBAction) cmOpenURLInTab: (id) sender;
-- (IBAction) cmOpenURLInWindow: (id) sender;
-- (IBAction) cmDownloadURL: (id) sender;
-
-- (IBAction) cmLinkCopy: (id) sender;
-- (IBAction) cmImageCopy: (id) sender;
-
-@end
-
-@implementation BrowserView
-
-@synthesize browser;
-@synthesize caretTimer;
-@synthesize markedText;
-
-static const CGFloat CaretWidth = 1.0;
-static const NSTimeInterval CaretBlinkTime = 0.8;
-
-- initWithFrame: (NSRect) frame
-{
- if ((self = [super initWithFrame: frame]) == nil) {
- return nil;
- }
-
- [self registerForDraggedTypes: [NSArray arrayWithObjects: NSURLPboardType, @"public.url", nil]];
-
- return self;
-}
-
-- (void) dealloc
-{
- [self setCaretTimer: nil];
- [self setMarkedText: nil];
- [history release];
-
- [super dealloc];
-}
-
-- (void) setCaretTimer: (NSTimer *)newTimer
-{
- if (newTimer != caretTimer) {
- [caretTimer invalidate];
- [caretTimer release];
- caretTimer = [newTimer retain];
- }
-}
-
-- (void) updateHistory
-{
- [history redraw];
-}
-
-static inline NSRect cocoa_get_caret_rect( BrowserView *view )
-{
- float bscale = browser_window_get_scale(view->browser);
-
- NSRect caretRect = {
- .origin = NSMakePoint( view->caretPoint.x * bscale, view->caretPoint.y * bscale ),
- .size = NSMakeSize( CaretWidth, view->caretHeight * bscale )
- };
-
- return caretRect;
-}
-
-- (void) removeCaret
-{
- hasCaret = NO;
- [self setNeedsDisplayInRect: cocoa_get_caret_rect( self )];
-
- [self setCaretTimer: nil];
-}
-
-- (void) addCaretAt: (NSPoint) point height: (CGFloat) height
-{
- if (hasCaret) {
- [self setNeedsDisplayInRect: cocoa_get_caret_rect( self )];
- }
-
- caretPoint = point;
- caretHeight = height;
- hasCaret = YES;
- caretVisible = YES;
-
- if (nil == caretTimer) {
- [self setCaretTimer: [NSTimer scheduledTimerWithTimeInterval: CaretBlinkTime target: self selector: @selector(caretBlink:) userInfo: nil repeats: YES]];
- } else {
- [caretTimer setFireDate: [NSDate dateWithTimeIntervalSinceNow: CaretBlinkTime]];
- }
-
- [self setNeedsDisplayInRect: cocoa_get_caret_rect( self )];
-}
-
-
-- (void) caretBlink: (NSTimer *)timer
-{
- if (hasCaret) {
- caretVisible = !caretVisible;
- [self setNeedsDisplayInRect: cocoa_get_caret_rect( self )];
- }
-}
-
-- (void)drawRect:(NSRect)dirtyRect
-{
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
- struct redraw_context ctx = {
- .interactive = true,
- .background_images = true,
- .plot = &cocoa_plotters
- };
-
- const NSRect *rects = NULL;
- NSInteger count = 0;
- [self getRectsBeingDrawn: &rects count: &count];
-
- for (NSInteger i = 0; i < count; i++) {
- const struct rect clip = {
- .x0 = cocoa_pt_to_px( NSMinX( rects[i] ) ),
- .y0 = cocoa_pt_to_px( NSMinY( rects[i] ) ),
- .x1 = cocoa_pt_to_px( NSMaxX( rects[i] ) ),
- .y1 = cocoa_pt_to_px( NSMaxY( rects[i] ) )
- };
-
- browser_window_redraw(browser, 0, 0, &clip, &ctx);
- }
-
- NSRect caretRect = cocoa_get_caret_rect( self );
- if (hasCaret && caretVisible && [self needsToDrawRect: caretRect]) {
- [[NSColor blackColor] set];
- [NSBezierPath fillRect: caretRect];
- }
-
- [pool release];
-}
-
-- (BOOL) isFlipped
-{
- return YES;
-}
-
-- (void) viewDidMoveToWindow
-{
- NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect: [self visibleRect]
- options: NSTrackingMouseMoved | NSTrackingMouseEnteredAndExited | NSTrackingActiveInKeyWindow | NSTrackingInVisibleRect
- owner: self
- userInfo: nil];
- [self addTrackingArea: area];
- [area release];
-}
-
-static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
-{
- browser_mouse_state result = 0;
- NSUInteger flags = [evt modifierFlags];
-
- if (flags & NSShiftKeyMask) result |= BROWSER_MOUSE_MOD_1;
- if (flags & NSAlternateKeyMask) result |= BROWSER_MOUSE_MOD_2;
-
- return result;
-}
-
-- (NSPoint) convertMousePoint: (NSEvent *)event
-{
- NSPoint location = [self convertPoint: [event locationInWindow] fromView: nil];
- float bscale = browser_window_get_scale(browser);
-
- location.x /= bscale;
- location.y /= bscale;
-
- location.x = cocoa_pt_to_px( location.x );
- location.y = cocoa_pt_to_px( location.y );
- return location;
-}
-
-- (void) mouseDown: (NSEvent *)theEvent
-{
- if ([theEvent modifierFlags] & NSControlKeyMask) {
- [self popUpContextMenuForEvent: theEvent];
- return;
- }
-
- dragStart = [self convertMousePoint: theEvent];
-
- browser_window_mouse_click(browser,
- BROWSER_MOUSE_PRESS_1 | cocoa_mouse_flags_for_event( theEvent ),
- dragStart.x,
- dragStart.y );
-}
-
-- (void) rightMouseDown: (NSEvent *)theEvent
-{
- [self popUpContextMenuForEvent: theEvent];
-}
-
-- (void) mouseUp: (NSEvent *)theEvent
-{
- if (historyVisible) {
- [self setHistoryVisible: NO];
- return;
- }
-
- NSPoint location = [self convertMousePoint: theEvent];
-
- browser_mouse_state modifierFlags = cocoa_mouse_flags_for_event( theEvent );
-
- if (isDragging) {
- isDragging = NO;
- browser_window_mouse_track( browser, (browser_mouse_state)0, location.x, location.y );
- } else {
- modifierFlags |= BROWSER_MOUSE_CLICK_1;
- if ([theEvent clickCount] == 2) modifierFlags |= BROWSER_MOUSE_DOUBLE_CLICK;
- browser_window_mouse_click( browser, modifierFlags, location.x, location.y );
- }
-}
-
-#define squared(x) ((x)*(x))
-#define MinDragDistance (5.0)
-
-- (void) mouseDragged: (NSEvent *)theEvent
-{
- NSPoint location = [self convertMousePoint: theEvent];
- browser_mouse_state modifierFlags = cocoa_mouse_flags_for_event( theEvent );
-
- if (!isDragging) {
- const CGFloat distance = squared( dragStart.x - location.x ) + squared( dragStart.y - location.y );
-
- if (distance >= squared( MinDragDistance)) {
- isDragging = YES;
- browser_window_mouse_click(browser,
- BROWSER_MOUSE_DRAG_1 | modifierFlags,
- dragStart.x,
- dragStart.y);
- }
- }
-
- if (isDragging) {
- browser_window_mouse_track(browser,
- BROWSER_MOUSE_HOLDING_1 | BROWSER_MOUSE_DRAG_ON | modifierFlags,
- location.x,
- location.y );
- }
-}
-
-- (void) mouseMoved: (NSEvent *)theEvent
-{
- if (historyVisible) return;
-
- NSPoint location = [self convertMousePoint: theEvent];
-
- browser_window_mouse_track(browser,
- cocoa_mouse_flags_for_event(theEvent),
- location.x,
- location.y);
-}
-
-- (void) mouseExited: (NSEvent *) theEvent
-{
- [[NSCursor arrowCursor] set];
-}
-
-- (void) keyDown: (NSEvent *)theEvent
-{
- if (!historyVisible) {
- [self interpretKeyEvents: [NSArray arrayWithObject: theEvent]];
- } else {
- [history keyDown: theEvent];
- }
-}
-
-- (void) insertText: (id)string
-{
- for (NSUInteger i = 0, length = [string length]; i < length; i++) {
- unichar ch = [string characterAtIndex: i];
- if (!browser_window_key_press( browser, ch )) {
- if (ch == ' ') [self scrollPageDown: self];
- break;
- }
- }
- [self setMarkedText: nil];
-}
-
-- (void) moveLeft: (id)sender
-{
- if (browser_window_key_press( browser, NS_KEY_LEFT )) return;
- [self scrollHorizontal: -[[self enclosingScrollView] horizontalLineScroll]];
-}
-
-- (void) moveRight: (id)sender
-{
- if (browser_window_key_press( browser, NS_KEY_RIGHT )) return;
- [self scrollHorizontal: [[self enclosingScrollView] horizontalLineScroll]];
-}
-
-- (void) moveUp: (id)sender
-{
- if (browser_window_key_press( browser, NS_KEY_UP )) return;
- [self scrollVertical: -[[self enclosingScrollView] lineScroll]];
-}
-
-- (void) moveDown: (id)sender
-{
- if (browser_window_key_press( browser, NS_KEY_DOWN )) return;
- [self scrollVertical: [[self enclosingScrollView] lineScroll]];
-}
-
-- (void) deleteBackward: (id)sender
-{
- if (!browser_window_key_press( browser, NS_KEY_DELETE_LEFT )) {
- [NSApp sendAction: @selector( goBack: ) to: nil from: self];
- }
-}
-
-- (void) deleteForward: (id)sender
-{
- browser_window_key_press( browser, NS_KEY_DELETE_RIGHT );
-}
-
-- (void) cancelOperation: (id)sender
-{
- browser_window_key_press( browser, NS_KEY_ESCAPE );
-}
-
-- (void) scrollPageUp: (id)sender
-{
- if (browser_window_key_press( browser, NS_KEY_PAGE_UP )) {
- return;
- }
- [self scrollVertical: -[self pageScroll]];
-}
-
-- (void) scrollPageDown: (id)sender
-{
- if (browser_window_key_press( browser, NS_KEY_PAGE_DOWN )) {
- return;
- }
- [self scrollVertical: [self pageScroll]];
-}
-
-- (void) insertTab: (id)sender
-{
- browser_window_key_press( browser, NS_KEY_TAB );
-}
-
-- (void) insertBacktab: (id)sender
-{
- browser_window_key_press( browser, NS_KEY_SHIFT_TAB );
-}
-
-- (void) moveToBeginningOfLine: (id)sender
-{
- browser_window_key_press( browser, NS_KEY_LINE_START );
-}
-
-- (void) moveToEndOfLine: (id)sender
-{
- browser_window_key_press( browser, NS_KEY_LINE_END );
-}
-
-- (void) moveToBeginningOfDocument: (id)sender
-{
- if (browser_window_key_press( browser, NS_KEY_TEXT_START )) return;
-}
-
-- (void) scrollToBeginningOfDocument: (id) sender
-{
- NSPoint origin = [self visibleRect].origin;
- origin.y = 0;
- [self scrollPoint: origin];
-}
-
-- (void) moveToEndOfDocument: (id)sender
-{
- browser_window_key_press( browser, NS_KEY_TEXT_END );
-}
-
-- (void) scrollToEndOfDocument: (id) sender
-{
- NSPoint origin = [self visibleRect].origin;
- origin.y = NSHeight( [self frame] );
- [self scrollPoint: origin];
-}
-
-- (void) insertNewline: (id)sender
-{
- browser_window_key_press( browser, NS_KEY_NL );
-}
-
-- (void) selectAll: (id)sender
-{
- browser_window_key_press( browser, NS_KEY_SELECT_ALL );
-}
-
-- (void) copy: (id)sender
-{
- browser_window_key_press( browser, NS_KEY_COPY_SELECTION );
-}
-
-- (void) cut: (id)sender
-{
- browser_window_key_press( browser, NS_KEY_CUT_SELECTION );
-}
-
-- (void) paste: (id)sender
-{
- browser_window_key_press( browser, NS_KEY_PASTE );
-}
-
-- (BOOL) acceptsFirstResponder
-{
- return YES;
-}
-
-- (void) adjustFrame
-{
- browser_window_schedule_reformat(browser);
-
- [super adjustFrame];
-}
-
-- (BOOL) isHistoryVisible
-{
- return historyVisible;
-}
-
-- (void) setHistoryVisible: (BOOL)newVisible
-{
- if (newVisible == historyVisible) return;
- historyVisible = newVisible;
-
- if (historyVisible) {
- if (nil == history) {
- history = [[LocalHistoryController alloc] initWithBrowser: self];
- }
- [history attachToView: [(BrowserWindowController *)[[self window] windowController] historyButton]];
- } else {
- [history detach];
- }
-}
-
-- (void) scrollHorizontal: (CGFloat) amount
-{
- NSPoint currentPoint = [self visibleRect].origin;
- currentPoint.x += amount;
- [self scrollPoint: currentPoint];
-}
-
-- (void) scrollVertical: (CGFloat) amount
-{
- NSPoint currentPoint = [self visibleRect].origin;
- currentPoint.y += amount;
- [self scrollPoint: currentPoint];
-}
-
-- (CGFloat) pageScroll
-{
- return NSHeight( [[self superview] frame] ) - [[self enclosingScrollView] pageScroll];
-}
-
-
-- (void) popUpContextMenuForEvent: (NSEvent *) event
-{
- NSMenu *popupMenu = [[NSMenu alloc] initWithTitle: @""];
- NSPoint point = [self convertMousePoint: event];
-
- struct browser_window_features cont;
-
- browser_window_get_features(browser, point.x, point.y, &cont);
-
- if (cont.object != NULL) {
- NSString *imageURL = [NSString stringWithUTF8String: nsurl_access(hlcache_handle_get_url( cont.object ))];
-
- [[popupMenu addItemWithTitle: NSLocalizedString( @"Open image in new tab", @"Context menu" )
- action: @selector(cmOpenURLInTab:)
- keyEquivalent: @""] setRepresentedObject: imageURL];
- [[popupMenu addItemWithTitle: NSLocalizedString( @"Open image in new window", @"Context menu" )
- action: @selector(cmOpenURLInWindow:)
- keyEquivalent: @""] setRepresentedObject: imageURL];
- [[popupMenu addItemWithTitle: NSLocalizedString( @"Save image as", @"Context menu" )
- action: @selector(cmDownloadURL:)
- keyEquivalent: @""] setRepresentedObject: imageURL];
- [[popupMenu addItemWithTitle: NSLocalizedString( @"Copy image", @"Context menu" )
- action: @selector(cmImageCopy:)
- keyEquivalent: @""] setRepresentedObject: (id)content_get_bitmap( cont.object )];
-
- [popupMenu addItem: [NSMenuItem separatorItem]];
- }
-
- if (cont.link != NULL) {
- NSString *target = [NSString stringWithUTF8String: nsurl_access(cont.link)];
-
- [[popupMenu addItemWithTitle: NSLocalizedString( @"Open link in new tab", @"Context menu" )
- action: @selector(cmOpenURLInTab:)
- keyEquivalent: @""] setRepresentedObject: target];
- [[popupMenu addItemWithTitle: NSLocalizedString( @"Open link in new window", @"Context menu" )
- action: @selector(cmOpenURLInWindow:)
- keyEquivalent: @""] setRepresentedObject: target];
- [[popupMenu addItemWithTitle: NSLocalizedString( @"Save link target", @"Context menu" )
- action: @selector(cmDownloadURL:)
- keyEquivalent: @""] setRepresentedObject: target];
- [[popupMenu addItemWithTitle: NSLocalizedString( @"Copy link", @"Context menu" )
- action: @selector(cmLinkCopy:)
- keyEquivalent: @""] setRepresentedObject: target];
-
- [popupMenu addItem: [NSMenuItem separatorItem]];
- }
-
- [popupMenu addItemWithTitle: NSLocalizedString( @"Back", @"Context menu" )
- action: @selector(goBack:) keyEquivalent: @""];
- [popupMenu addItemWithTitle: NSLocalizedString( @"Reload", @"Context menu" )
- action: @selector(reloadPage:) keyEquivalent: @""];
- [popupMenu addItemWithTitle: NSLocalizedString( @"Forward", @"Context menu" )
- action: @selector(goForward:) keyEquivalent: @""];
- [popupMenu addItemWithTitle: NSLocalizedString( @"View Source", @"Context menu" )
- action: @selector(viewSource:) keyEquivalent: @""];
-
- [NSMenu popUpContextMenu: popupMenu withEvent: event forView: self];
-
- [popupMenu release];
-}
-
-- (IBAction) cmOpenURLInTab: (id)sender
-{
- nsurl *url;
- nserror error;
-
- error = nsurl_create([[sender representedObject] UTF8String], &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(BW_CREATE_HISTORY |
- BW_CREATE_TAB |
- BW_CREATE_CLONE,
- url,
- NULL,
- browser,
- NULL);
- nsurl_unref(url);
- }
- if (error != NSERROR_OK) {
- cocoa_warning(messages_get_errorcode(error), 0);
- }
-}
-
-- (IBAction) cmOpenURLInWindow: (id)sender
-{
- nsurl *url;
- nserror error;
-
- error = nsurl_create([[sender representedObject] UTF8String], &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(BW_CREATE_HISTORY |
- BW_CREATE_CLONE,
- url,
- NULL,
- browser,
- NULL);
- nsurl_unref(url);
- }
- if (error != NSERROR_OK) {
- cocoa_warning(messages_get_errorcode(error), 0);
- }
-}
-
-- (IBAction) cmDownloadURL: (id)sender
-{
- nsurl *url;
-
- if (nsurl_create([[sender representedObject] UTF8String], &url) == NSERROR_OK) {
- browser_window_navigate(browser,
- url,
- NULL,
- BW_NAVIGATE_DOWNLOAD,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
-}
-
-- (IBAction) cmImageCopy: (id)sender
-{
- NSPasteboard *pb = [NSPasteboard generalPasteboard];
- [pb declareTypes: [NSArray arrayWithObject: NSTIFFPboardType] owner: nil];
- [pb setData: [[sender representedObject] TIFFRepresentation] forType: NSTIFFPboardType];
-}
-
-- (IBAction) cmLinkCopy: (id)sender
-{
- NSPasteboard *pb = [NSPasteboard generalPasteboard];
- [pb declareTypes: [NSArray arrayWithObject: NSStringPboardType] owner: nil];
- [pb setString: [sender representedObject] forType: NSStringPboardType];
-}
-
-
-// MARK: -
-// MARK: Accepting dragged URLs
-
-- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
-{
- if ((NSDragOperationCopy | NSDragOperationGeneric) & [sender draggingSourceOperationMask]) {
- return NSDragOperationCopy;
- }
-
- return NSDragOperationNone;
-}
-
-- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
-{
- return YES;
-}
-
-- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
-{
- nsurl *url;
- nserror error;
-
- NSPasteboard *pb = [sender draggingPasteboard];
-
- NSString *type = [pb availableTypeFromArray:[NSArray arrayWithObjects: @"public.url", NSURLPboardType, nil]];
-
- NSString *urlstr = nil;
-
- if ([type isEqualToString: NSURLPboardType]) {
- urlstr = [[NSURL URLFromPasteboard: pb] absoluteString];
- } else {
- urlstr = [pb stringForType: type];
- }
-
- error = nsurl_create([urlstr UTF8String], &url);
- if (error != NSERROR_OK) {
- cocoa_warning(messages_get_errorcode(error), 0);
- } else {
- browser_window_navigate(browser,
- url,
- NULL,
- BW_NAVIGATE_DOWNLOAD,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
-
- return YES;
-}
-
-// MARK: -
-// MARK: NSTextInput protocol implementation
-
-- (void) setMarkedText: (id) aString selectedRange: (NSRange) selRange
-{
- [markedText release];
- markedText = [aString isEqualToString: @""] ? nil : [aString copy];
-}
-
-- (void) unmarkText
-{
- [self setMarkedText: nil];
-}
-
-- (BOOL) hasMarkedText
-{
- return markedText != nil;
-}
-
-- (NSInteger) conversationIdentifier
-{
- return (NSInteger)self;
-}
-
-- (NSAttributedString *) attributedSubstringFromRange: (NSRange) theRange
-{
- return [[[NSAttributedString alloc] initWithString: @""] autorelease];
-}
-
-- (NSRange) markedRange
-{
- return NSMakeRange( NSNotFound, 0 );
-}
-
-- (NSRange) selectedRange
-{
- return NSMakeRange( NSNotFound, 0 );
-}
-
-- (NSRect) firstRectForCharacterRange: (NSRange) theRange
-{
- return NSZeroRect;
-}
-
-- (NSUInteger) characterIndexForPoint: (NSPoint) thePoint
-{
- return 0;
-}
-
-- (NSArray *) validAttributesForMarkedText
-{
- return [NSArray array];
-}
-
-- (void) doCommandBySelector: (SEL) sel;
-{
- [super doCommandBySelector: sel];
-}
-
-@end
diff --git a/frontends/cocoa/BrowserViewController.h b/frontends/cocoa/BrowserViewController.h
deleted file mode 100644
index 6b4c3e7..0000000
--- a/frontends/cocoa/BrowserViewController.h
+++ b/dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#import <Cocoa/Cocoa.h>
-
-struct browser_window;
-@class BrowserView;
-@class BrowserWindowController;
-
-@interface BrowserViewController : NSViewController {
- struct browser_window *browser;
- NSString *url;
- BrowserView *browserView;
- BrowserWindowController *windowController;
- NSString *title;
- NSString *status;
- BOOL isProcessing;
- NSImage *favicon;
- BOOL canGoBack;
- BOOL canGoForward;
-}
-
-@property (readwrite, assign, nonatomic) struct browser_window *browser;
-@property (readwrite, copy, nonatomic) NSString *url;
-@property (readwrite, assign, nonatomic) IBOutlet BrowserView *browserView;
-@property (readwrite, retain, nonatomic) BrowserWindowController *windowController;
-@property (readwrite, copy, nonatomic) NSString *title;
-@property (readwrite, copy, nonatomic) NSString *status;
-@property (readwrite, assign, nonatomic) BOOL isProcessing;
-@property (readwrite, copy, nonatomic) NSImage *favicon;
-@property (readwrite, assign, nonatomic) BOOL canGoBack;
-@property (readwrite, assign, nonatomic) BOOL canGoForward;
-
-- (id) initWithBrowser: (struct browser_window *) bw;
-
-- (void) contentUpdated;
-- (void) updateBackForward;
-
-- (IBAction) navigate: (id) sender;
-
-- (IBAction) backForwardSelected: (id) sender;
-
-- (IBAction) goHome: (id) sender;
-
-- (IBAction) goBack: (id) sender;
-- (IBAction) goForward: (id) sender;
-- (IBAction) reloadPage: (id) sender;
-- (IBAction) stopLoading: (id) sender;
-
-- (IBAction) zoomIn: (id) sender;
-- (IBAction) zoomOut: (id) sender;
-- (IBAction) zoomOriginal: (id) sender;
-
-- (IBAction) viewSource: (id) sender;
-
-- (void) buildBackMenu: (NSMenu *)menu;
-- (void) buildForwardMenu: (NSMenu *)menu;
-
-@end
diff --git a/frontends/cocoa/BrowserViewController.m b/frontends/cocoa/BrowserViewController.m
deleted file mode 100644
index 4cac57e..0000000
--- a/frontends/cocoa/BrowserViewController.m
+++ b/dev/null
@@ -1,377 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "utils/nsoption.h"
-#import "utils/corestrings.h"
-#import "utils/filename.h"
-#import "utils/file.h"
-#import "utils/messages.h"
-#import "utils/nsurl.h"
-#import "netsurf/content.h"
-#import "netsurf/browser_window.h"
-#import "desktop/browser_history.h"
-
-#import "cocoa/gui.h"
-#import "cocoa/BrowserViewController.h"
-#import "cocoa/BrowserView.h"
-#import "cocoa/BrowserWindowController.h"
-#import "cocoa/fetch.h"
-
-
-
-@implementation BrowserViewController
-
-@synthesize browser;
-@synthesize url;
-@synthesize browserView;
-@synthesize windowController;
-@synthesize title;
-@synthesize status;
-@synthesize isProcessing;
-@synthesize favicon;
-@synthesize canGoBack;
-@synthesize canGoForward;
-
-- (void) dealloc
-{
- [self setUrl: nil];
- [self setBrowserView: nil];
- [self setWindowController: nil];
- [self setTitle: nil];
- [self setStatus: nil];
- [self setFavicon: nil];
-
- [super dealloc];
-}
-
-- initWithBrowser: (struct browser_window *) bw
-{
- if ((self = [super initWithNibName: @"Browser" bundle: nil]) == nil) {
- return nil;
- }
-
- browser = bw;
-
- return self;
-}
-
-
-- (IBAction) navigate: (id) sender
-{
- nsurl *urlns;
- nserror error;
-
- error = nsurl_create([url UTF8String], &urlns);
- if (error != NSERROR_OK) {
- cocoa_warning(messages_get_errorcode(error), 0);
- } else {
- browser_window_navigate(browser,
- urlns,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(urlns);
- }
-}
-
-
-- (void) awakeFromNib
-{
- [browserView setBrowser: browser];
-}
-
-
-- (IBAction) zoomIn: (id) sender
-{
- browser_window_set_scale(browser,
- browser_window_get_scale(browser) * 1.1,
- true);
-}
-
-
-- (IBAction) zoomOut: (id) sender
-{
- browser_window_set_scale(browser,
- browser_window_get_scale(browser) * 0.9,
- true);
-}
-
-
-- (IBAction) zoomOriginal: (id) sender
-{
- browser_window_set_scale(browser,
- (float)nsoption_int(scale) / 100.0,
- true);
-}
-
-
-- (IBAction) backForwardSelected: (id) sender
-{
- if ([sender selectedSegment] == 0) {
- [self goBack: sender];
- } else {
- [self goForward: sender];
- }
-}
-
-
-- (IBAction) goBack: (id) sender
-{
- if (browser && browser_window_history_back_available( browser )) {
- browser_window_history_back(browser, false);
- [self updateBackForward];
- }
-}
-
-
-- (IBAction) goForward: (id) sender
-{
- if (browser && browser_window_history_forward_available( browser )) {
- browser_window_history_forward(browser, false);
- [self updateBackForward];
- }
-}
-
-
-- (IBAction) goHome: (id) sender
-{
- nsurl *urlns;
- nserror error;
-
- error = nsurl_create(nsoption_charp(homepage_url), &urlns);
- if (error == NSERROR_OK) {
- error = browser_window_navigate(browser,
- urlns,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(urlns);
- }
- if (error != NSERROR_OK) {
- cocoa_warning(messages_get_errorcode(error), 0);
- }
-}
-
-
-- (IBAction) reloadPage: (id) sender
-{
- browser_window_reload( browser, true );
-}
-
-
-- (IBAction) stopLoading: (id) sender
-{
- browser_window_stop( browser );
-}
-
-
-- (IBAction) viewSource: (id) sender
-{
- struct hlcache_handle *content;
- size_t size;
- const char *source;
- char *path = NULL;
-
- if (browser == NULL) {
- return;
- }
- content = browser_window_get_content(browser);
- if (content == NULL) {
- return;
- }
- source = content_get_source_data(content, &size);
- if (source == NULL) {
- return;
- }
-
- /* try to load local files directly. */
- netsurf_nsurl_to_path(hlcache_handle_get_url(content), &path);
-
- if (path == NULL) {
- /* We cannot release the requested filename until after it
- * has finished being used. As we can't easily find out when
- * this is, we simply don't bother releasing it and simply
- * allow it to be re-used next time NetSurf is started. The
- * memory overhead from doing this is under 1 byte per
- * filename. */
- const char *filename = filename_request();
- const char *extension = "txt";
- fprintf(stderr, "filename '%p'\n", filename);
- if (filename == NULL)
- return;
- lwc_string *str = content_get_mime_type(content);
- if (str) {
- NSString *mime = [NSString stringWithUTF8String:lwc_string_data(str)];
- NSString *uti = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, (CFStringRef)mime, NULL);
- NSString *ext = (NSString *)UTTypeCopyPreferredTagWithClass((CFStringRef)uti, kUTTagClassFilenameExtension);
- extension = [ext UTF8String];
- lwc_string_unref(str);
- }
-
- NSURL *dataUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%s.%s", filename, extension]
- relativeToURL:[NSURL fileURLWithPath:@TEMP_FILENAME_PREFIX]];
-
-
- NSData *data = [NSData dataWithBytes:source length:size];
- [data writeToURL:dataUrl atomically:NO];
- path = [[dataUrl path] UTF8String];
- }
-
- if (path) {
- NSString * p = [NSString stringWithUTF8String: path];
- NSWorkspace * ws = [NSWorkspace sharedWorkspace];
- [ws openFile:p withApplication:@"Xcode"];
- }
-}
-
-
-static inline bool
-compare_float( float a, float b )
-{
- const float epsilon = 0.00001;
-
- if (a == b) {
- return true;
- }
-
- return fabs( (a - b) / b ) <= epsilon;
-}
-
-- (BOOL) validateUserInterfaceItem: (id) item
-{
- SEL action = [item action];
-
- if (action == @selector(copy:)) {
- return browser_window_get_editor_flags( browser ) & BW_EDITOR_CAN_COPY;
- }
-
- if (action == @selector(cut:)) {
- return browser_window_get_editor_flags( browser ) & BW_EDITOR_CAN_CUT;
- }
-
- if (action == @selector(paste:)) {
- return browser_window_get_editor_flags( browser ) & BW_EDITOR_CAN_PASTE;
- }
-
- if (action == @selector( stopLoading: )) {
- return browser_window_stop_available( browser );
- }
-
- if (action == @selector( zoomOriginal: )) {
- return !compare_float( browser_window_get_scale(browser), (float)nsoption_int(scale) / 100.0 );
- }
-
- if (action == @selector( goBack: )) {
- return canGoBack;
- }
-
- if (action == @selector( goForward: )) {
- return canGoForward;
- }
-
- return YES;
-}
-
-
-- (void) updateBackForward
-{
- [browserView updateHistory];
- [self setCanGoBack: browser != NULL && browser_window_history_back_available( browser )];
- [self setCanGoForward: browser != NULL && browser_window_history_forward_available( browser )];
-}
-
-- (void) contentUpdated
-{
- [browserView updateHistory];
-}
-
-struct history_add_menu_item_data {
- NSInteger index;
- NSMenu *menu;
- id target;
-};
-
-static bool
-history_add_menu_item_cb(const struct browser_window *bw,
- int x0, int y0, int x1, int y1,
- const struct history_entry *page,
- void *user_data )
-{
- struct history_add_menu_item_data *data = user_data;
-
- NSMenuItem *item = nil;
- if (data->index < [data->menu numberOfItems]) {
- item = [data->menu itemAtIndex: data->index];
- } else {
- item = [[NSMenuItem alloc] initWithTitle: @""
- action: @selector( historyItemSelected: )
- keyEquivalent: @""];
- [data->menu addItem: item];
- [item release];
- }
- ++data->index;
-
- [item setTarget: data->target];
- [item setTitle: [NSString stringWithUTF8String: browser_window_history_entry_get_title( page )]];
- [item setRepresentedObject: [NSValue valueWithPointer: page]];
-
- return true;
-}
-
-- (IBAction) historyItemSelected: (id) sender
-{
- struct history_entry *entry = [[sender representedObject] pointerValue];
- browser_window_history_go( browser, entry, false );
- [self updateBackForward];
-}
-
-- (void) buildBackMenu: (NSMenu *)menu
-{
- struct history_add_menu_item_data data = {
- .index = 0,
- .menu = menu,
- .target = self
- };
- browser_window_history_enumerate_back(browser,
- history_add_menu_item_cb,
- &data);
- while (data.index < [menu numberOfItems]) {
- [menu removeItemAtIndex: data.index];
- }
-}
-
-- (void) buildForwardMenu: (NSMenu *)menu
-{
- struct history_add_menu_item_data data = {
- .index = 0,
- .menu = menu,
- .target = self
- };
- browser_window_history_enumerate_forward(browser,
- history_add_menu_item_cb,
- &data);
- while (data.index < [menu numberOfItems]) {
- [menu removeItemAtIndex: data.index];
- }
-}
-
-@end
diff --git a/frontends/cocoa/BrowserWindow.h b/frontends/cocoa/BrowserWindow.h
deleted file mode 100644
index e0b8301..0000000
--- a/frontends/cocoa/BrowserWindow.h
+++ b/dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-
-@interface BrowserWindow : NSWindow {
-
-}
-
-@end
diff --git a/frontends/cocoa/BrowserWindow.m b/frontends/cocoa/BrowserWindow.m
deleted file mode 100644
index f01b17a..0000000
--- a/frontends/cocoa/BrowserWindow.m
+++ b/dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "cocoa/BrowserWindow.h"
-#import "cocoa/BrowserWindowController.h"
-
-@implementation BrowserWindow
-
-- (void) performClose: (id) sender
-{
- [[self windowController] closeCurrentTab: sender];
-}
-
-@end
diff --git a/frontends/cocoa/BrowserWindowController.h b/frontends/cocoa/BrowserWindowController.h
deleted file mode 100644
index 22e1995..0000000
--- a/frontends/cocoa/BrowserWindowController.h
+++ b/dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-@class PSMTabBarControl;
-@class BrowserViewController;
-@class URLFieldCell;
-
-@interface BrowserWindowController : NSWindowController {
- PSMTabBarControl *tabBar;
- NSTabView *tabView;
- URLFieldCell *urlField;
- NSObjectController *activeBrowserController;
- NSSegmentedControl *navigationControl;
- NSButton *historyButton;
- BrowserViewController *activeBrowser;
- NSMenu *historyBackMenu;
- NSMenu *historyForwardMenu;
-}
-
-@property (readwrite, assign, nonatomic) IBOutlet PSMTabBarControl *tabBar;
-@property (readwrite, assign, nonatomic) IBOutlet NSTabView *tabView;
-@property (readwrite, assign, nonatomic) IBOutlet URLFieldCell *urlField;
-@property (readwrite, assign, nonatomic) IBOutlet NSObjectController *activeBrowserController;
-@property (readwrite, assign, nonatomic) IBOutlet NSSegmentedControl *navigationControl;
-@property (readwrite, assign, nonatomic) IBOutlet NSButton *historyButton;
-@property (readwrite, assign, nonatomic) IBOutlet NSMenu *historyBackMenu;
-@property (readwrite, assign, nonatomic) IBOutlet NSMenu *historyForwardMenu;
-
-@property (readwrite, assign, nonatomic) BrowserViewController *activeBrowser;
-
-@property (readwrite, assign, nonatomic) BOOL canGoBack;
-@property (readwrite, assign, nonatomic) BOOL canGoForward;
-
-- (IBAction) newTab: (id) sender;
-- (IBAction) closeCurrentTab: (id) sender;
-
-- (void) addTab: (BrowserViewController *)browser;
-- (void) removeTab: (BrowserViewController *)browser;
-
-@end
diff --git a/frontends/cocoa/BrowserWindowController.m b/frontends/cocoa/BrowserWindowController.m
deleted file mode 100644
index aa7375a..0000000
--- a/frontends/cocoa/BrowserWindowController.m
+++ b/dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "netsurf/browser_window.h"
-#import "utils/nsoption.h"
-#import "utils/messages.h"
-#import "utils/utils.h"
-#import "utils/nsurl.h"
-
-#import "cocoa/BrowserWindowController.h"
-
-#import "cocoa/BrowserViewController.h"
-#import "cocoa/PSMTabBarControl/PSMTabBarControl.h"
-#import "cocoa/PSMTabBarControl/PSMRolloverButton.h"
-#import "cocoa/URLFieldCell.h"
-#import "cocoa/gui.h"
-#import "cocoa/NetsurfApp.h"
-
-
-@interface BrowserWindowController ()
-
-- (void) canCloseAlertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(void *)contextInfo;
-
-@end
-
-
-@implementation BrowserWindowController
-
-@synthesize tabBar;
-@synthesize tabView;
-@synthesize urlField;
-@synthesize navigationControl;
-@synthesize historyButton;
-@synthesize historyBackMenu;
-@synthesize historyForwardMenu;
-
-@synthesize activeBrowser;
-@synthesize activeBrowserController;
-
-- (id) init;
-{
- if (nil == (self = [super initWithWindowNibName: @"BrowserWindow"])) return nil;
-
- return self;
-}
-
-- (void) dealloc;
-{
- [self setTabBar: nil];
- [self setTabView: nil];
- [self setUrlField: nil];
- [self setNavigationControl: nil];
-
- [super dealloc];
-}
-
-- (void) awakeFromNib;
-{
- [tabBar setShowAddTabButton: YES];
- [tabBar setTearOffStyle: PSMTabBarTearOffMiniwindow];
- [tabBar setCanCloseOnlyTab: YES];
- [tabBar setHideForSingleTab: YES];
-
- NSButton *b = [tabBar addTabButton];
- [b setTarget: self];
- [b setAction: @selector(newTab:)];
-
- [urlField setRefreshAction: @selector(reloadPage:)];
- [urlField bind: @"favicon" toObject: activeBrowserController withKeyPath: @"selection.favicon" options: nil];
-
- [self bind: @"canGoBack"
- toObject: activeBrowserController withKeyPath: @"selection.canGoBack"
- options: nil];
- [self bind: @"canGoForward"
- toObject: activeBrowserController withKeyPath: @"selection.canGoForward"
- options: nil];
-
- [navigationControl setMenu: historyBackMenu forSegment: 0];
- [navigationControl setMenu: historyForwardMenu forSegment: 1];
-}
-
-- (void) addTab: (BrowserViewController *)browser;
-{
- NSTabViewItem *item = [[[NSTabViewItem alloc] initWithIdentifier: browser] autorelease];
-
- [item setView: [browser view]];
- [item bind: @"label" toObject: browser withKeyPath: @"title" options: nil];
-
- [tabView addTabViewItem: item];
- [browser setWindowController: self];
-
- [tabView selectTabViewItem: item];
-}
-
-- (void) removeTab: (BrowserViewController *)browser;
-{
- NSUInteger itemIndex = [tabView indexOfTabViewItemWithIdentifier: browser];
- if (itemIndex != NSNotFound) {
- NSTabViewItem *item = [tabView tabViewItemAtIndex: itemIndex];
- [tabView removeTabViewItem: item];
- [browser setWindowController: nil];
- }
-}
-
-- (BOOL) windowShouldClose: (NSWindow *) window;
-{
- if ([tabView numberOfTabViewItems] <= 1) return YES;
- if ([[NSUserDefaults standardUserDefaults] boolForKey: kAlwaysCloseMultipleTabs]) return YES;
-
- NSAlert *ask = [NSAlert alertWithMessageText: NSLocalizedString( @"Do you really want to close this window?", nil )
- defaultButton: NSLocalizedString( @"Yes", @"'Yes' button" )
- alternateButton: NSLocalizedString( @"No" , @"'No' button" )
- otherButton:nil
- informativeTextWithFormat: NSLocalizedString( @"There are %d tabs open, do you want to close them all?", nil ),
- [tabView numberOfTabViewItems]];
- [ask setShowsSuppressionButton:YES];
-
- [ask beginSheetModalForWindow: window modalDelegate:self didEndSelector:@selector(canCloseAlertDidEnd:returnCode:contextInfo:)
- contextInfo: NULL];
-
- return NO;
-}
-
-- (void) canCloseAlertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(void *)contextInfo;
-{
- if (returnCode == NSOKButton) {
- [[NSUserDefaults standardUserDefaults] setBool: [[alert suppressionButton] state] == NSOnState
- forKey: kAlwaysCloseMultipleTabs];
- [[self window] close];
- }
-}
-
-- (void) windowWillClose: (NSNotification *)notification;
-{
- for (NSTabViewItem *tab in [tabView tabViewItems]) {
- [tabView removeTabViewItem: tab];
- }
-}
-
-- (IBAction) newTab: (id) sender;
-{
- nsurl *url;
- nserror error;
-
- if (nsoption_charp(homepage_url) != NULL) {
- error = nsurl_create(nsoption_charp(homepage_url), &url);
- } else {
- error = nsurl_create(NETSURF_HOMEPAGE, &url);
- }
- if (error == NSERROR_OK) {
- error = browser_window_create(BW_CREATE_HISTORY |
- BW_CREATE_TAB,
- url,
- NULL,
- [activeBrowser browser],
- NULL);
- nsurl_unref(url);
- }
- if (error != NSERROR_OK) {
- cocoa_warning(messages_get_errorcode(error), 0);
- }
-}
-
-- (IBAction) closeCurrentTab: (id) sender;
-{
- [self removeTab: activeBrowser];
-}
-
-- (void) setActiveBrowser: (BrowserViewController *)newBrowser;
-{
- activeBrowser = newBrowser;
- [self setNextResponder: activeBrowser];
-}
-
-- (void) setCanGoBack: (BOOL)can;
-{
- [navigationControl setEnabled: can forSegment: 0];
-}
-
-- (BOOL) canGoBack;
-{
- return [navigationControl isEnabledForSegment: 0];
-}
-
-- (void) setCanGoForward: (BOOL)can;
-{
- [navigationControl setEnabled: can forSegment: 1];
-}
-
-- (BOOL) canGoForward;
-{
- return [navigationControl isEnabledForSegment: 1];
-}
-
-- (void)windowDidBecomeMain: (NSNotification *)note;
-{
- [(NetSurfApp *)NSApp setFrontTab: [[tabView selectedTabViewItem] identifier]];
-}
-
-- (void)menuNeedsUpdate:(NSMenu *)menu
-{
- if (menu == historyBackMenu) {
- [activeBrowser buildBackMenu: menu];
- } else if (menu == historyForwardMenu) {
- [activeBrowser buildForwardMenu: menu];
- }
-}
-
-#pragma mark -
-#pragma mark Tab bar delegate
-
-- (void) tabView: (NSTabView *)tabView didSelectTabViewItem: (NSTabViewItem *)tabViewItem;
-{
- [self setActiveBrowser: [tabViewItem identifier]];
- if ([[self window] isMainWindow]) {
- [(NetSurfApp *)NSApp setFrontTab: [tabViewItem identifier]];
- }
-}
-
-- (BOOL)tabView:(NSTabView*)aTabView shouldDragTabViewItem:(NSTabViewItem *)tabViewItem fromTabBar:(PSMTabBarControl *)tabBarControl
-{
- return [aTabView numberOfTabViewItems] > 1;
-}
-
-- (BOOL)tabView:(NSTabView*)aTabView shouldDropTabViewItem:(NSTabViewItem *)tabViewItem inTabBar:(PSMTabBarControl *)tabBarControl
-{
- [[tabViewItem identifier] setWindowController: self];
- return YES;
-}
-
-- (PSMTabBarControl *)tabView:(NSTabView *)aTabView newTabBarForDraggedTabViewItem:(NSTabViewItem *)tabViewItem atPoint:(NSPoint)point;
-{
- BrowserWindowController *newWindow = [[[BrowserWindowController alloc] init] autorelease];
- [[tabViewItem identifier] setWindowController: newWindow];
- [[newWindow window] setFrameOrigin: point];
- return newWindow->tabBar;
-}
-
-- (void) tabView: (NSTabView *)aTabView didCloseTabViewItem: (NSTabViewItem *)tabViewItem;
-{
- [tabViewItem unbind: @"label"];
-
- if (activeBrowser == [tabViewItem identifier]) {
- [self setActiveBrowser: nil];
- [(NetSurfApp *)NSApp setFrontTab: nil];
- }
-
- browser_window_destroy( [[tabViewItem identifier] browser] );
-}
-
-@end
diff --git a/frontends/cocoa/DownloadWindowController.h b/frontends/cocoa/DownloadWindowController.h
deleted file mode 100644
index 47a05be..0000000
--- a/frontends/cocoa/DownloadWindowController.h
+++ b/dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-struct gui_download_table *cocoa_download_table;
-
-@interface DownloadWindowController : NSWindowController {
- struct download_context *context;
- unsigned long totalSize;
- unsigned long receivedSize;
-
- NSURL *url;
- NSString *mimeType;
- NSURL *saveURL;
- NSFileHandle *outputFile;
- NSMutableData *savedData;
- NSDate *startDate;
-
- BOOL canClose;
- BOOL shouldClose;
-}
-
-@property (readwrite, copy, nonatomic) NSURL *URL;
-@property (readwrite, copy, nonatomic) NSString *MIMEType;
-@property (readwrite, assign, nonatomic) unsigned long totalSize;
-@property (readwrite, copy, nonatomic) NSURL *saveURL;
-@property (readwrite, assign, nonatomic) unsigned long receivedSize;
-
-@property (readonly, nonatomic) NSString *fileName;
-@property (readonly, nonatomic) NSImage *icon;
-@property (readonly, nonatomic) NSString *statusText;
-
-- (id)initWithContext: (struct download_context *)ctx;
-
-- (void) abort;
-
-@end
diff --git a/frontends/cocoa/DownloadWindowController.m b/frontends/cocoa/DownloadWindowController.m
deleted file mode 100644
index b8cf09b..0000000
--- a/frontends/cocoa/DownloadWindowController.m
+++ b/dev/null
@@ -1,415 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "utils/log.h"
-#import "utils/nsurl.h"
-#import "desktop/download.h"
-#import "netsurf/download.h"
-
-#import "cocoa/DownloadWindowController.h"
-#import "cocoa/gui.h"
-
-@interface DownloadWindowController ()
-
-@property (readwrite, retain, nonatomic) NSFileHandle *outputFile;
-@property (readwrite, retain, nonatomic) NSMutableData *savedData;
-@property (readwrite, copy, nonatomic) NSDate *startDate;
-
-- (void)savePanelDidEnd:(NSSavePanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
-- (void)alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo;
-- (void)askCancelDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo;
-
-- (BOOL) receivedData: (NSData *)data;
-
-- (void) showError: (NSString *)error;
-- (void) downloadDone;
-- (void) removeIfPossible;
-
-@end
-
-static void cocoa_unregister_download( DownloadWindowController *download );
-static void cocoa_register_download( DownloadWindowController *download );
-
-
-@implementation DownloadWindowController
-
-- (id) initWithContext: (struct download_context *)ctx
-{
- if ((self = [super initWithWindowNibName: @"DownloadWindow"]) == nil) {
- return nil;
- }
-
- context = ctx;
- totalSize = download_context_get_total_length( context );
- [self setURL: [NSURL URLWithString: [NSString stringWithUTF8String: nsurl_access(download_context_get_url( context ))]]];
- [self setMIMEType: [NSString stringWithUTF8String: download_context_get_mime_type( context )]];
- [self setStartDate: [NSDate date]];
-
- return self;
-}
-
-- (void) dealloc
-{
- download_context_destroy( context );
-
- [self setURL: nil];
- [self setMIMEType: nil];
- [self setSaveURL: nil];
- [self setOutputFile: nil];
- [self setSavedData: nil];
- [self setStartDate: nil];
-
- [super dealloc];
-}
-
-- (void) abort
-{
- download_context_abort( context );
- [self removeIfPossible];
-}
-
-- (void) askForSave
-{
- canClose = NO;
- [[NSSavePanel savePanel]
- beginSheetForDirectory: nil
- file: [NSString stringWithUTF8String: download_context_get_filename( context )]
- modalForWindow: [self window]
- modalDelegate: self
- didEndSelector: @selector(savePanelDidEnd:returnCode:contextInfo:)
- contextInfo: NULL];
-}
-
-- (void) savePanelDidEnd:(NSSavePanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
-{
- canClose = YES;
-
- if (returnCode == NSCancelButton) {
- [self abort];
- return;
- }
-
- NSURL *targetURL = [sheet URL];
- NSString *path = [targetURL path];
-
- [[NSFileManager defaultManager] createFileAtPath: path contents: nil attributes: nil];
-
- FSRef ref;
- if (CFURLGetFSRef( (CFURLRef)targetURL, &ref )) {
- NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
- url, (NSString *)kLSQuarantineDataURLKey,
- (NSString *)kLSQuarantineTypeWebDownload, (NSString *)kLSQuarantineTypeKey,
- nil];
- LSSetItemAttribute( &ref, kLSRolesAll, kLSItemQuarantineProperties, (CFDictionaryRef)attributes );
- LOG("Set quarantine attributes on file %s", [path UTF8String]);
- }
-
- [self setOutputFile: [NSFileHandle fileHandleForWritingAtPath: path]];
- [self setSaveURL: targetURL];
-
- NSWindow *win = [self window];
- [win setRepresentedURL: targetURL];
- [win setTitle: [self fileName]];
-
- if (nil == outputFile) {
- [self performSelector: @selector(showError:) withObject: @"Cannot create file" afterDelay: 0];
- return;
- }
-
- if (nil != savedData) {
- [outputFile writeData: savedData];
- [self setSavedData: nil];
- }
-
- [self removeIfPossible];
-}
-
-- (BOOL) receivedData: (NSData *)data
-{
- if (outputFile) {
- [outputFile writeData: data];
- } else {
- if (nil == savedData) {
- [self setSavedData: [NSMutableData data]];
- }
- [savedData appendData: data];
- }
-
- [self setReceivedSize: receivedSize + [data length]];
-
- return YES;
-}
-
-- (void) showError: (NSString *)error
-{
- canClose = NO;
- NSAlert *alert = [NSAlert alertWithMessageText: NSLocalizedString( @"Error", @"show error" )
- defaultButton: NSLocalizedString( @"OK", @"'OK' button" )
- alternateButton: nil otherButton: nil
- informativeTextWithFormat: @"%@", error];
-
- [alert beginSheetModalForWindow: [self window] modalDelegate: self
- didEndSelector: @selector(alertDidEnd:returnCode:contextInfo:)
- contextInfo: NULL];
-}
-
-- (void) alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
-{
- [self abort];
-}
-
-- (void) removeIfPossible
-{
- if (canClose && shouldClose) {
- cocoa_unregister_download( self );
- }
-}
-- (void) downloadDone
-{
- shouldClose = YES;
- [self removeIfPossible];
-}
-
-- (BOOL) windowShouldClose: (id)sender
-{
- if ([[NSUserDefaults standardUserDefaults] boolForKey: kAlwaysCancelDownload]) {
- return YES;
- }
-
- NSAlert *ask = [NSAlert alertWithMessageText: NSLocalizedString( @"Cancel download?", @"Download" )
- defaultButton: NSLocalizedString( @"Yes", @"" )
- alternateButton: NSLocalizedString( @"No", @"" )
- otherButton: nil
- informativeTextWithFormat: NSLocalizedString( @"Should the download of '%@' really be cancelled?", @"Download" ),
- [self fileName]];
- [ask setShowsSuppressionButton: YES];
- [ask beginSheetModalForWindow: [self window] modalDelegate: self
- didEndSelector: @selector(askCancelDidEnd:returnCode:contextInfo:) contextInfo: NULL];
- return NO;
-}
-
-- (void) windowWillClose: (NSNotification *)notification
-{
- [self abort];
-}
-
-- (void) askCancelDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
-{
- if (returnCode == NSOKButton) {
- [[NSUserDefaults standardUserDefaults]
- setBool: [[alert suppressionButton] state] == NSOnState
- forKey: kAlwaysCancelDownload];
- [self close];
- }
-}
-
-#pragma mark -
-#pragma mark Properties
-
-@synthesize URL = url;
-@synthesize MIMEType = mimeType;
-@synthesize totalSize;
-@synthesize saveURL;
-@synthesize outputFile;
-@synthesize savedData;
-@synthesize receivedSize;
-@synthesize startDate;
-
-+ (NSSet *) keyPathsForValuesAffectingStatusText
-{
- return [NSSet setWithObjects: @"totalSize", @"receivedSize", nil];
-}
-
-#ifndef NSAppKitVersionNumber10_5
-#define NSAppKitVersionNumber10_5 949
-#endif
-
-static NSString *cocoa_file_size_string( float size )
-{
- static unsigned factor = 0;
- if (factor == 0) {
- if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5) {
- factor = 1000;
- } else {
- factor = 1024;
- }
- }
-
- if (size == 0) return @"nothing";
- if (size <= 1.0) return @"1 byte";
-
- if (size < factor - 1) return [NSString stringWithFormat:@"%1.0f bytes",size];
-
- size /= factor;
- if (size < factor - 1) return [NSString stringWithFormat:@"%1.1f KB", size];
-
- size /= factor;
- if (size < factor - 1) return [NSString stringWithFormat:@"%1.1f MB", size];
-
- size /= factor;
- if (size < factor - 1) return [NSString stringWithFormat:@"%1.1f GB", size];
-
- size /= factor;
- return [NSString stringWithFormat:@"%1.1f TB", size];
-}
-
-static NSString *cocoa_time_string( unsigned seconds )
-{
- if (seconds <= 10) {
- return NSLocalizedString(@"less than 10 seconds",
- @"time remaining" );
- }
-
- if (seconds < 60) {
- return [NSString stringWithFormat: NSLocalizedString( @"%u seconds",
- @"time remaining" ), seconds];
- }
-
- unsigned minutes = seconds / 60;
- seconds = seconds % 60;
-
- if (minutes < 60) {
- return [NSString stringWithFormat: NSLocalizedString( @"%u:%02u minutes",
- @"time remaining: minutes, seconds" ) , minutes, seconds];
- }
-
- unsigned hours = minutes / 60;
- minutes = minutes % 60;
-
- return [NSString stringWithFormat: NSLocalizedString( @"%2:%02u hours", @"time remaining: hours, minutes" ), hours, minutes];
-}
-
-- (NSString *) statusText
-{
- NSString *speedString = @"";
-
- float speed = 0.0;
- NSTimeInterval elapsedTime = [[NSDate date] timeIntervalSinceDate: startDate];
- if (elapsedTime >= 0.1) {
- speed = (float)receivedSize / elapsedTime;
- speedString = [NSString stringWithFormat: @" (%@/s)", cocoa_file_size_string( speed )];
- }
-
- NSString *timeRemainingString = @"";
- NSString *totalSizeString = @"";
- if (totalSize != 0) {
- if (speed > 0.0) {
- float timeRemaining = (float)(totalSize - receivedSize) / speed;
- timeRemainingString = [NSString stringWithFormat: @": %@", cocoa_time_string( timeRemaining )];
- }
- totalSizeString = [NSString stringWithFormat: NSLocalizedString( @" of %@", @"... of (total size)" ), cocoa_file_size_string( totalSize )];
- }
-
- return [NSString stringWithFormat: @"%@%@%@%@", cocoa_file_size_string( receivedSize ),
- totalSizeString, speedString, timeRemainingString];
-}
-
-+ (NSSet *) keyPathsForValuesAffectingFileName
-{
- return [NSSet setWithObject: @"saveURL"];
-}
-
-- (NSString *) fileName
-{
- return [[saveURL path] lastPathComponent];
-}
-
-+ (NSSet *) keyPathsForValuesAffectingIcon
-{
- return [NSSet setWithObjects: @"mimeType", @"URL", nil];
-}
-
-- (NSImage *) icon;
-{
- NSString *type = [(NSString *)UTTypeCreatePreferredIdentifierForTag( kUTTagClassMIMEType, (CFStringRef)mimeType, NULL ) autorelease];
- if ([type hasPrefix: @"dyn."] || [type isEqualToString: (NSString *)kUTTypeData]) {
- NSString *pathExt = [[url path] pathExtension];
- type = [(NSString *)UTTypeCreatePreferredIdentifierForTag( kUTTagClassFilenameExtension, (CFStringRef)pathExt, NULL ) autorelease];
- }
- return [[NSWorkspace sharedWorkspace] iconForFileType: type];
-}
-
-
-#pragma mark -
-#pragma mark NetSurf interface functions
-
-static struct gui_download_window *
-gui_download_window_create(download_context *ctx,
- struct gui_window *parent)
-{
- DownloadWindowController * const window = [[DownloadWindowController alloc] initWithContext: ctx];
- cocoa_register_download( window );
- [window askForSave];
- [window release];
-
- return (struct gui_download_window *)window;
-}
-
-static nserror
-gui_download_window_data(struct gui_download_window *dw,
- const char *data,
- unsigned int size)
-{
- DownloadWindowController * const window = (DownloadWindowController *)dw;
- return [window receivedData: [NSData dataWithBytes: data length: size]] ? NSERROR_OK : NSERROR_SAVE_FAILED;
-}
-
-static void
-gui_download_window_error(struct gui_download_window *dw,
- const char *error_msg)
-{
- DownloadWindowController * const window = (DownloadWindowController *)dw;
- [window showError: [NSString stringWithUTF8String: error_msg]];
-}
-
-static void
-gui_download_window_done(struct gui_download_window *dw)
-{
- DownloadWindowController * const window = (DownloadWindowController *)dw;
- [window downloadDone];
-}
-
-@end
-
-#pragma mark -
-static NSMutableSet *cocoa_all_downloads = nil;
-
-static void
-cocoa_register_download( DownloadWindowController *download )
-{
- if (cocoa_all_downloads == nil) {
- cocoa_all_downloads = [[NSMutableSet alloc] init];
- }
- [cocoa_all_downloads addObject: download];
-}
-
-static void
-cocoa_unregister_download( DownloadWindowController *download )
-{
- [cocoa_all_downloads removeObject: download];
-}
-
-
-static struct gui_download_table download_table = {
- .create = gui_download_window_create,
- .data = gui_download_window_data,
- .error = gui_download_window_error,
- .done = gui_download_window_done,
-};
-
-struct gui_download_table *cocoa_download_table = &download_table;
diff --git a/frontends/cocoa/FormSelectMenu.h b/frontends/cocoa/FormSelectMenu.h
deleted file mode 100644
index cec5192..0000000
--- a/frontends/cocoa/FormSelectMenu.h
+++ b/dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-@interface FormSelectMenu : NSObject {
- NSMenu *menu;
- NSPopUpButtonCell *cell;
-
- struct browser_window *browser;
- struct form_control *control;
-}
-
-- (id)initWithControl: (struct form_control *) control forWindow: (struct browser_window *) window;
-- (void) runInView: (NSView *) view;
-
-@end
diff --git a/frontends/cocoa/FormSelectMenu.m b/frontends/cocoa/FormSelectMenu.m
deleted file mode 100644
index b7d168e..0000000
--- a/frontends/cocoa/FormSelectMenu.m
+++ b/dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "cocoa/FormSelectMenu.h"
-#import "cocoa/coordinates.h"
-
-#import "netsurf/types.h"
-#import "netsurf/browser_window.h"
-#import "netsurf/form.h"
-
-static inline NSRect cocoa_rect_for_control( struct browser_window *bw, struct form_control *control)
-{
- struct rect r;
- form_control_bounding_rect(control, &r);
- return cocoa_scaled_rect(browser_window_get_scale(bw),
- r.x0,
- r.y0,
- r.x1,
- r.y1);
-}
-
-@interface FormSelectMenu ()
-
-- (void) itemSelected: (id) sender;
-
-@end
-
-
-@implementation FormSelectMenu
-
-- (id) initWithControl: (struct form_control *) c forWindow: (struct browser_window *) w
-{
- if ((self = [super init]) == nil) return nil;
-
- control = c;
- browser = w;
-
- menu = [[NSMenu alloc] initWithTitle: @"Select"];
- if (menu == nil) {
- [self release];
- return nil;
- }
-
- [menu addItemWithTitle: @"" action: NULL keyEquivalent: @""];
-
- NSInteger currentItemIndex = 0;
- struct form_option *opt;
- for (opt = form_select_get_option(control, 0);
- opt != NULL;
- opt = opt->next) {
- NSMenuItem *item = [[NSMenuItem alloc] initWithTitle: [NSString stringWithUTF8String: opt->text]
- action: @selector( itemSelected: )
- keyEquivalent: @""];
- if (opt->selected) {
- [item setState: NSOnState];
- }
- [item setTarget: self];
- [item setTag: currentItemIndex++];
- [menu addItem: item];
- [item release];
- }
-
- [menu setDelegate: self];
-
- return self;
-}
-
-- (void) dealloc
-{
- [cell release];
- [menu release];
-
- [super dealloc];
-}
-
-- (void) runInView: (NSView *) view
-{
- [self retain];
-
- cell = [[NSPopUpButtonCell alloc] initTextCell: @"" pullsDown: YES];
- [cell setMenu: menu];
-
- const NSRect rect = cocoa_rect_for_control(browser, control);
-
- [cell attachPopUpWithFrame: rect inView: view];
- [cell performClickWithFrame: rect inView: view];
-}
-
-- (void) itemSelected: (id) sender
-{
- form_select_process_selection( control, [sender tag] );
-}
-
-- (void) menuDidClose: (NSMenu *) sender
-{
- [self release];
-}
-
-@end
diff --git a/frontends/cocoa/HistoryView.h b/frontends/cocoa/HistoryView.h
deleted file mode 100644
index 6ef0613..0000000
--- a/frontends/cocoa/HistoryView.h
+++ b/dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-@class HistoryView;
-@class BrowserView;
-
-@interface HistoryView : NSView {
- struct browser_window *browser;
- BrowserView *browserView;
- NSMutableArray *toolTips;
-}
-
-@property (readwrite, assign, nonatomic) BrowserView *browser;
-
-- (void) updateHistory;
-- (NSSize) size;
-
-@end
diff --git a/frontends/cocoa/HistoryView.m b/frontends/cocoa/HistoryView.m
deleted file mode 100644
index bead8db..0000000
--- a/frontends/cocoa/HistoryView.m
+++ b/dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "cocoa/HistoryView.h"
-#import "cocoa/font.h"
-#import "cocoa/coordinates.h"
-#import "cocoa/plotter.h"
-#import "cocoa/LocalHistoryController.h"
-#import "cocoa/BrowserView.h"
-
-#import "desktop/browser_history.h"
-#import "netsurf/plotters.h"
-
-@implementation HistoryView
-
-@synthesize browser = browserView;
-
-- (void) setBrowser: (BrowserView *) bw;
-{
- browserView = bw;
- browser = [bw browser];
- [self updateHistory];
-}
-
-- (NSSize) size;
-{
- int width, height;
- browser_window_history_size( browser, &width, &height );
-
- return cocoa_size( width, height );
-}
-
-- (void) updateHistory;
-{
- [self setFrameSize: [self size]];
- [self setNeedsDisplay: YES];
-}
-
-- (void) drawRect: (NSRect)rect;
-{
- [[NSColor clearColor] set];
- [NSBezierPath fillRect: rect];
-
- struct redraw_context ctx = {
- .interactive = true,
- .background_images = true,
- .plot = &cocoa_plotters
- };
-
- cocoa_set_clip( rect );
-
- browser_window_history_redraw( browser, &ctx );
-}
-
-- (void) mouseUp: (NSEvent *)theEvent;
-{
- const NSPoint location = [self convertPoint: [theEvent locationInWindow] fromView: nil];
- const bool newWindow = [theEvent modifierFlags] & NSCommandKeyMask;
- if (browser_window_history_click( browser,
- cocoa_pt_to_px( location.x ), cocoa_pt_to_px( location.y ),
- newWindow )) {
- [browserView setHistoryVisible: NO];
- }
-}
-
-- (BOOL) isFlipped;
-{
- return YES;
-}
-
-- (void) mouseEntered: (NSEvent *) event;
-{
- [[NSCursor pointingHandCursor] set];
-}
-
-- (void) mouseExited: (NSEvent *) event;
-{
- [[NSCursor arrowCursor] set];
-}
-
-static bool cursor_rects_cb( const struct browser_window *bw, int x0, int y0, int x1, int y1,
- const struct history_entry *page, void *user_data )
-{
- HistoryView *view = user_data;
-
- NSRect rect = NSIntersectionRect( [view visibleRect], cocoa_rect( x0, y0, x1, y1 ) );
- if (!NSIsEmptyRect( rect )) {
-
- NSString *toolTip = [NSString stringWithFormat: @"%s\n%s", browser_window_history_entry_get_title(page),
- browser_window_history_entry_get_url( page )];
-
- [view addToolTipRect: rect owner: toolTip userData: nil];
- NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect: rect
- options: NSTrackingMouseEnteredAndExited | NSTrackingActiveInActiveApp
- owner: view userInfo: nil];
- [view addTrackingArea: area];
- [area release];
- }
-
- return true;
-}
-
-- (NSToolTipTag)addToolTipRect: (NSRect) rect owner: (id) owner userData: (void *) userData;
-{
- if (toolTips == nil) toolTips = [[NSMutableArray alloc] init];
- [toolTips addObject: owner];
-
- return [super addToolTipRect: rect owner: owner userData: userData];
-}
-
-- (void) removeAllToolTips;
-{
- [super removeAllToolTips];
- [toolTips removeAllObjects];
-}
-
-- (void) updateTrackingAreas;
-{
- [self removeAllToolTips];
-
- for (NSTrackingArea *area in [self trackingAreas]) {
- [self removeTrackingArea: area];
- }
-
- browser_window_history_enumerate( browser, cursor_rects_cb, self );
-
- [super updateTrackingAreas];
-}
-
-- (void) dealloc;
-{
- [self removeAllToolTips];
- [super dealloc];
-}
-
-@end
diff --git a/frontends/cocoa/HistoryWindowController.h b/frontends/cocoa/HistoryWindowController.h
deleted file mode 100644
index 30ba804..0000000
--- a/frontends/cocoa/HistoryWindowController.h
+++ b/dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-@class Tree;
-@class TreeView;
-
-@interface HistoryWindowController : NSWindowController {
- Tree *tree;
- TreeView *view;
-}
-
-@property (readwrite, assign, nonatomic) IBOutlet TreeView *view;
-
-@end
diff --git a/frontends/cocoa/HistoryWindowController.m b/frontends/cocoa/HistoryWindowController.m
deleted file mode 100644
index cae679b..0000000
--- a/frontends/cocoa/HistoryWindowController.m
+++ b/dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "cocoa/HistoryWindowController.h"
-#import "cocoa/Tree.h"
-#import "cocoa/TreeView.h"
-
-#import "desktop/global_history.h"
-
-@implementation HistoryWindowController
-
-@synthesize view;
-
-- init;
-{
- if ((self = [super initWithWindowNibName: @"HistoryWindow"]) == nil) return nil;
-
- tree = [[Tree alloc] initWithFlags: TREE_HISTORY];
-
- return self;
-}
-
-- (void) dealloc;
-{
- [tree release];
- [self setView: nil];
-
- [super dealloc];
-}
-
-- (void)awakeFromNib;
-{
- [view setTree: tree];
- [[self window] setExcludedFromWindowsMenu: YES];
-}
-
-@end
diff --git a/frontends/cocoa/LocalHistoryController.h b/frontends/cocoa/LocalHistoryController.h
deleted file mode 100644
index 3e6d177..0000000
--- a/frontends/cocoa/LocalHistoryController.h
+++ b/dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-@class HistoryView;
-@class BrowserView;
-
-@interface LocalHistoryController : NSWindowController {
- HistoryView *history;
- BrowserView *browser;
-}
-
-@property (readwrite, assign, nonatomic) BrowserView *browser;
-@property (readwrite, assign, nonatomic) IBOutlet HistoryView *history;
-
-- (id)initWithBrowser: (BrowserView *) bw;
-
-- (void) attachToView: (NSView *) view;
-- (void) detach;
-- (void) redraw;
-
-- (void) keyDown: (NSEvent *)theEvent;
-
-@end
diff --git a/frontends/cocoa/LocalHistoryController.m b/frontends/cocoa/LocalHistoryController.m
deleted file mode 100644
index b3992b6..0000000
--- a/frontends/cocoa/LocalHistoryController.m
+++ b/dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "cocoa/LocalHistoryController.h"
-
-#import "cocoa/BrowserView.h"
-#import "cocoa/HistoryView.h"
-#import "cocoa/ArrowWindow.h"
-
-@implementation LocalHistoryController
-
-@synthesize browser;
-@synthesize history;
-
-- initWithBrowser: (BrowserView *) bw;
-{
- if ((self = [super initWithWindowNibName: @"LocalHistoryPanel"]) == nil) return nil;
-
- browser = bw;
-
- return self;
-}
-
-- (void) attachToView: (NSView *) view;
-{
- NSDisableScreenUpdates();
-
- ArrowWindow *box = (ArrowWindow *)[self window];
-
- [box setContentSize: [history size]];
- [box setArrowPosition: 50];
- [history updateHistory];
- [box attachToView: view];
-
- NSRect frame = [box frame];
- NSRect screenFrame = [[box screen] visibleFrame];
-
- const CGFloat arrowSize = [box arrowSize];
- frame.origin.x += arrowSize;
- frame.origin.y += arrowSize;
- frame.size.width -= 2 * arrowSize;
- frame.size.height -= 2 * arrowSize;
-
- if (NSMinY( frame ) < NSMinY( screenFrame )) {
- const CGFloat delta = NSMinY( screenFrame ) - NSMinY( frame );
- frame.size.height -= delta;
- frame.origin.y += delta;
- }
-
- CGFloat arrowPositionChange = 50;
- if (NSMaxX( frame ) > NSMaxX( screenFrame )) {
- const CGFloat delta = NSMaxX( frame ) - NSMaxX( screenFrame );
- arrowPositionChange += delta;
- frame.origin.x -= delta;
- }
-
- if (NSMinX( frame ) < NSMinX( screenFrame )) {
- const CGFloat delta = NSMinX( screenFrame ) - NSMinX( frame );
- arrowPositionChange -= delta;
- frame.origin.x += delta;
- frame.size.width -= delta;
- }
-
- frame.origin.x -= arrowSize;
- frame.origin.y -= arrowSize;
- frame.size.width += 2 * arrowSize;
- frame.size.height += 2 * arrowSize;
-
- [box setArrowPosition: arrowPositionChange];
- [box setFrame: frame display: YES];
-
- NSEnableScreenUpdates();
-}
-
-- (void) detach;
-{
- [(ArrowWindow *)[self window] detach];
-}
-
-- (void) windowDidLoad;
-{
- [history setBrowser: browser];
-}
-
-- (void) redraw;
-{
- [history setNeedsDisplay: YES];
-}
-
-- (void) keyDown: (NSEvent *)theEvent;
-{
- unichar key = [[theEvent characters] characterAtIndex: 0];
- switch (key) {
- case 27:
- [browser setHistoryVisible: NO];
- break;
-
- default:
- NSBeep();
- break;
- };
-}
-
-@end
diff --git a/frontends/cocoa/Makefile b/frontends/cocoa/Makefile
deleted file mode 100644
index a0ebfbb..0000000
--- a/frontends/cocoa/Makefile
+++ b/dev/null
@@ -1,250 +0,0 @@
-# ----------------------------------------------------------------------------
-# Mac OS X target setup
-# ----------------------------------------------------------------------------
-
-POSTEXES += NetSurf.app
-
-# shut up zconf.h and zlib.h
-#CFLAGS += -D_LARGEFILE64_SOURCE=1
-
-# add Mac Ports include and library paths for openssl
-ifneq ($(shell test -d /opt/local && echo 'yes'),)
- LDFLAGS += -L/opt/local/lib
- CFLAGS += -I/opt/local/include
-endif
-
-ifeq ($(SDK_VERSION),)
- # if no SDK_VERSION has been specified select one from those available
- SDK_PARAM := $(shell xcodebuild -showsdks | awk '/^$$/{p=0};p; /OS X SDKs:/{p=1}' | tail -1 | cut -f3)
- SDK_VERSION := $(MACOSX_VERSION)
-else
- SDK_PARAM := -sdk macosx$(SDK_VERSION)
-endif
-
-SDK_PATH ?= $(shell xcodebuild -version $(SDK_PARAM) Path)
-SDK_FLAGS := -isysroot $(SDK_PATH) -mmacosx-version-min=$(SDK_VERSION)
-CFLAGS := $(SDK_FLAGS) $(CFLAGS)
-LDFLAGS := $(SDK_FLAGS) -Wl,-syslibroot,$(SDK_PATH) $(LDFLAGS)
-CXXFLAGS := $(SDK_FLAGS) $(CXXFLAGS)
-
-# for timerisset()
-CFLAGS += -D_DARWIN_C_SOURCE
-
-LDFLAGS += -L/usr/lib
-LDFLAGS += -L/usr/X11/lib
-LDFLAGS += -lm -lcurl
-LDFLAGS += -lssl -lcrypto
-
-CFLAGS += -Dnscocoa -D_BSD_SOURCE -D_POSIX_C_SOURCE -std=c99 -g -Os
-
-CFLAGS += -I/usr/X11/include
-CFLAGS += -include cocoa/Prefix.pch
-
-VERSION_FULL := $(shell sed -n '/_version.*=.*"/{s/.*"\(.*\)".*/\1/;p;}' desktop/version.c)
-VERSION_MAJ := $(shell sed -n '/_major/{s/.* = \([0-9]*\).*/\1/;p;}' desktop/version.c)
-VERSION_MIN := $(shell sed -n '/_minor/{s/.* = \([0-9]*\).*/\1/;p;}' desktop/version.c)
-
-LDFLAGS += -Wl,-framework,Cocoa -Wl,-framework,Carbon $(NETLDFLAGS)
-
-$(eval $(call feature_enabled,IMAGEIO,-DWITH_APPLE_IMAGE,,Apple ImageIO ))
-
-ifneq ($(UNIVERSAL),)
- UNIVERSAL_FLAGS := $(foreach arch,$(UNIVERSAL),-arch $(arch) )
- CFLAGS += $(UNIVERSAL_FLAGS)
- LDFLAGS += $(UNIVERSAL_FLAGS)
- CXXFLAGS += $(UNIVERSAL_FLAGS)
-endif
-
-# ----------------------------------------------------------------------------
-# Source file setup
-# ----------------------------------------------------------------------------
-
-# sources purely for the Mac OS X build
-S_FRONTEND := \
- BookmarksController.m \
- BrowserView.m \
- BrowserViewController.m \
- BrowserWindowController.m \
- BrowserWindow.m \
- DownloadWindowController.m \
- NetSurfAppDelegate.m \
- NetsurfApp.m \
- PreferencesWindowController.m \
- ScrollableView.m \
- SearchWindowController.m \
- URLFieldCell.m \
- Tree.m \
- desktop-tree.m \
- TreeView.m \
- HistoryView.m \
- HistoryWindowController.m \
- FormSelectMenu.m \
- bitmap.m \
- fetch.m \
- font.m \
- gui.m \
- plotter.m \
- schedule.m \
- selection.m \
- ArrowBox.m \
- ArrowWindow.m \
- BlackScroller.m \
- LocalHistoryController.m \
- apple_image.m
-
-S_TABBAR := \
- NSBezierPath_AMShading.m \
- NSString_AITruncation.m \
- PSMOverflowPopUpButton.m \
- PSMProgressIndicator.m \
- PSMRolloverButton.m \
- PSMTabBarCell.m \
- PSMTabBarControl.m \
- PSMTabBarController.m \
- PSMTabDragAssistant.m \
- PSMTabDragView.m \
- PSMTabDragWindow.m \
- PSMTabDragWindowController.m \
- PSMUnifiedTabStyle.m
-
-S_FRONTEND += $(addprefix PSMTabBarControl/,$(S_TABBAR))
-
-# This is the final source build list
-# Note this is deliberately *not* expanded here as common and image
-# are not yet available
-SOURCES = $(addprefix $(shell pwd)/,$(S_COMMON) $(S_IMAGE) $(S_BROWSER) $(S_FRONTEND))
-
-# Since we prefix the sources with the pwd, also create a special
-# prefixed rule so that the testament is run
-$(shell pwd)/content/fetchers/about.c: testament
-
-EXETARGET := NetSurf
-
-S_XIBS := \
- MainMenu.xib \
- Browser.xib \
- BrowserWindow.xib \
- DownloadWindow.xib \
- SearchWindow.xib \
- PreferencesWindow.xib \
- HistoryWindow.xib \
- BookmarksWindow.xib \
- LocalHistoryPanel.xib
-
-R_RESOURCES := \
- default.css \
- adblock.css \
- internal.css \
- quirks.css \
- NetSurf.icns \
- HomeTemplate.pdf \
- Icons \
- ca-bundle \
- netsurf.png
-
-
-TABBAR_RESOURCES := \
- AquaTabClose_Front_Pressed.png \
- AquaTabClose_Front_Rollover.png \
- AquaTabClose_Front.png \
- AquaTabCloseDirty_Front_Pressed.png \
- AquaTabCloseDirty_Front_Rollover.png \
- AquaTabCloseDirty_Front.png \
- AquaTabNew.png \
- AquaTabNewPressed.png \
- AquaTabNewRollover.png \
- overflowImage.png \
- overflowImagePressed.png \
- pi.png
-
-R_RESOURCES := $(addprefix $(FRONTEND_RESOURCES_DIR)/,$(R_RESOURCES))
-
-R_RESOURCES += $(addprefix $(FRONTEND_SOURCE_DIR)/PSMTabBarControl/Images/,$(TABBAR_RESOURCES))
-
-LANGUAGES := de en fr it nl
-LOCALIZED_RESOURCES := Localizable.strings
-
-#languiage project macro
-# $1 is language name
-# $2 is list of resources per language
-define make_lproj
-R_RESOURCES += $$(OBJROOT)/$(1).lproj
-$$(OBJROOT)/$(1).lproj: $(2)
- $(VQ)echo Bundling language $(1)
- $(Q)$(MKDIR) -p $$@
- $(Q)cp -pLR $(2) $$@
- $(Q)$(SPLIT_MESSAGES) -l $(1) -p cocoa -f messages resources/FatMessages > $$@/Messages
-endef
-
-# compile_xib (xib) (lang)
-define compile_xib
-$$(OBJROOT)/$(2).lproj: $$(OBJROOT)/$(2).lproj/$(1:.xib=.nib)
-
-$$(OBJROOT)/$(2).lproj/$(1:.xib=.nib): $(FRONTEND_RESOURCES_DIR)/$(1) $$(OBJROOT)/created
- $(VQ)echo Compiling XIB $(1) for language $(2)
- $(Q)$(MKDIR) -p $$(OBJROOT)/$(2).lproj
- $(Q)$(FRONTEND_SOURCE_DIR)/compile-xib.sh $(FRONTEND_RESOURCES_DIR)/$(1) $(2) $$@
-
-ifeq ($(wildcard $(FRONTEND_RESOURCES_DIR)/$(2).lproj/$(1).strings),$(FRONTEND_RESOURCES_DIR)/$(2).lproj/$(1).strings)
-$$(OBJROOT)/$(2).lproj/$(1:.xib=.nib): $(FRONTEND_RESOURCES_DIR)/$(2).lproj/$(1).strings
-endif
-
-endef
-
-$(foreach lang,$(LANGUAGES),$(eval $(call make_lproj,$(lang),$(addprefix $(FRONTEND_RESOURCES_DIR)/$(lang).lproj/,$(LOCALIZED_RESOURCES)))))
-$(foreach lang,$(LANGUAGES),$(foreach xib,$(S_XIBS),$(eval $(call compile_xib,$(xib),$(lang)))))
-
-# ----------------------------------------------------------------------------
-# Install target
-# ----------------------------------------------------------------------------
-
-install-cocoa: NetSurf.app
-
-NetSurf.app: NetSurf $(FRONTEND_SOURCE_DIR)/Makefile $(R_RESOURCES) NetSurf.app/Contents/Info.plist
- $(VQ)echo Assembling NetSurf.app bundle
- $(Q)$(MKDIR) -p NetSurf.app/Contents/MacOS
- $(Q)cp NetSurf NetSurf.app/Contents/MacOS
- $(Q)rm -rf NetSurf.app/Contents/Resources
- $(Q)$(MKDIR) -p NetSurf.app/Contents/Resources
- $(Q)cp -pLR $(R_RESOURCES) NetSurf.app/Contents/Resources
- $(Q)echo 'APPL????' > NetSurf.app/Contents/PkgInfo
-
-NetSurf.app/Contents/Info.plist: $(FRONTEND_RESOURCES_DIR)/NetSurf-Info.plist $(FRONTEND_SOURCE_DIR)/Makefile
- $(VQ)echo Generating Info.plist
- $(Q)$(MKDIR) -p NetSurf.app/Contents
- $(Q)sed -e 's/$${EXECUTABLE_NAME}/$(EXETARGET)/' \
- -e 's/$${PRODUCT_NAME.*}/$(EXETARGET)/' \
- -e 's/$${MACOSX_DEPLOYMENT_TARGET}/$(MACOSX_VERSION)/' \
- -e 's/$${NETSURF_VERSION}/$(VERSION_FULL)/' \
- -e 's/$${NETSURF_SHORT_VERSION}/$(VERSION_MAJ).$(VERSION_MIN)/' \
- < $(FRONTEND_RESOURCES_DIR)/NetSurf-Info.plist > NetSurf.app/Contents/Info.plist
-
-# ----------------------------------------------------------------------------
-# Package target
-# ----------------------------------------------------------------------------
-
-package-cocoa: NetSurf.dmg
-
-.INTERMEDIATE: NetSurf.tmp.dmg
-
-NetSurf.tmp.dmg: NetSurf.app
- hdiutil create -size 8m -fs HFS+ -volname "NetSurf" $@
- sleep 2
- hdiutil attach $@
- sleep 2
- cp -pPR $^ /Volumes/NetSurf/
- hdiutil detach $$(echo $$(hdiutil attach $@ | cut -f 1) | cut -f 1 -d ' ')
- sleep 2
-
-NetSurf.dmg: NetSurf.tmp.dmg
- hdiutil convert $^ -format UDZO -o $@
-
-CLEANS += clean-package-cocoa
-
-clean-package-cocoa:
- $(VQ)echo " CLEAN: NetSurf.tmp.dmg"
- $(Q)$(RM) NetSurf.tmp.dmg
- $(VQ)echo " CLEAN: NetSurf.dmg"
- $(Q)$(RM) NetSurf.dmg
- $(VQ)echo " CLEAN: NetSurf.app"
- $(Q)$(RM) -r NetSurf.app
diff --git a/frontends/cocoa/Makefile.defaults b/frontends/cocoa/Makefile.defaults
deleted file mode 100644
index 8f5792b..0000000
--- a/frontends/cocoa/Makefile.defaults
+++ b/dev/null
@@ -1,30 +0,0 @@
-# ----------------------------------------------------------------------------
-# Cocoa-specific options
-# ----------------------------------------------------------------------------
-
-# Force using glibc internal iconv implementation instead of external libiconv
-# Valid options: YES, NO
-NETSURF_USE_LIBICONV_PLUG := NO
-
-# Enable NetSurf's use of librosprite for displaying RISC OS Sprites
-# Valid options: YES, NO, AUTO
-NETSURF_USE_ROSPRITE := NO
-
-# Enable NetSurf's use of librsvg in conjunction with Cairo to display SVGs
-# Valid options: YES, NO, AUTO
-NETSURF_USE_RSVG := AUTO
-
-# Enable NetSurf's use of libsvgtiny for displaying SVGs
-# Valid options: YES, NO, AUTO
-NETSURF_USE_NSSVG := AUTO
-
-NETSURF_USE_BMP := NO
-NETSURF_USE_GIF := NO
-NETSURF_USE_PNG := NO
-NETSURF_USE_JPEG := NO
-NETSURF_USE_IMAGEIO := YES
-
-MACOSX_VERSION := $(shell sw_vers -productVersion | awk -F '.' '{print $$1 "." $$2}')
-
-# Optimisation levels
-CFLAGS += -O2
diff --git a/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj b/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj
deleted file mode 100644
index ef25d2f..0000000
--- a/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj
+++ b/dev/null
@@ -1,1023 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 45;
- objects = {
-
-/* Begin PBXFileReference section */
- 260F1F6312D620E800D9B07F /* content.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = content.c; sourceTree = "<group>"; };
- 260F1F6412D620E800D9B07F /* content.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = content.h; sourceTree = "<group>"; };
- 260F1F6512D620E800D9B07F /* content_protected.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = content_protected.h; sourceTree = "<group>"; };
- 260F1F6612D620E800D9B07F /* content_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = content_type.h; sourceTree = "<group>"; };
- 260F1F6712D620E800D9B07F /* dirlist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dirlist.c; sourceTree = "<group>"; };
- 260F1F6812D620E800D9B07F /* dirlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dirlist.h; sourceTree = "<group>"; };
- 260F1F6912D620E800D9B07F /* fetch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fetch.c; sourceTree = "<group>"; };
- 260F1F6A12D620E800D9B07F /* fetch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fetch.h; sourceTree = "<group>"; };
- 260F1F6C12D620E800D9B07F /* curl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = curl.c; sourceTree = "<group>"; };
- 260F1F6D12D620E800D9B07F /* curl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = curl.h; sourceTree = "<group>"; };
- 260F1F6E12D620E800D9B07F /* data.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = data.c; sourceTree = "<group>"; };
- 260F1F6F12D620E800D9B07F /* data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = data.h; sourceTree = "<group>"; };
- 260F1F7012D620E800D9B07F /* file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = file.c; sourceTree = "<group>"; };
- 260F1F7112D620E800D9B07F /* file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file.h; sourceTree = "<group>"; };
- 260F1F7212D620E800D9B07F /* hlcache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hlcache.c; sourceTree = "<group>"; };
- 260F1F7312D620E800D9B07F /* hlcache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hlcache.h; sourceTree = "<group>"; };
- 260F1F7412D620E800D9B07F /* llcache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = llcache.c; sourceTree = "<group>"; };
- 260F1F7512D620E800D9B07F /* llcache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llcache.h; sourceTree = "<group>"; };
- 260F1F7612D620E800D9B07F /* urldb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = urldb.c; sourceTree = "<group>"; };
- 260F1F7712D620E800D9B07F /* urldb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = urldb.h; sourceTree = "<group>"; };
- 260F1F7912D620E800D9B07F /* css.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = css.c; sourceTree = "<group>"; };
- 260F1F7A12D620E800D9B07F /* css.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = css.h; sourceTree = "<group>"; };
- 260F1F7B12D620E800D9B07F /* dump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dump.c; sourceTree = "<group>"; };
- 260F1F7C12D620E800D9B07F /* dump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dump.h; sourceTree = "<group>"; };
- 260F1F7D12D620E800D9B07F /* internal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = internal.c; sourceTree = "<group>"; };
- 260F1F7E12D620E800D9B07F /* internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = internal.h; sourceTree = "<group>"; };
- 260F1F7F12D620E800D9B07F /* select.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = select.c; sourceTree = "<group>"; };
- 260F1F8012D620E800D9B07F /* select.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = select.h; sourceTree = "<group>"; };
- 260F1F8112D620E800D9B07F /* utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utils.c; sourceTree = "<group>"; };
- 260F1F8212D620E800D9B07F /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = "<group>"; };
- 260F1F8412D620E800D9B07F /* 401login.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 401login.h; sourceTree = "<group>"; };
- 260F1F8512D620E800D9B07F /* browser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = browser.c; sourceTree = "<group>"; };
- 260F1F8612D620E800D9B07F /* browser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = browser.h; sourceTree = "<group>"; };
- 260F1F8712D620E800D9B07F /* cookies.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cookies.c; sourceTree = "<group>"; };
- 260F1F8812D620E800D9B07F /* cookies_old.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cookies_old.h; sourceTree = "<group>"; };
- 260F1F8912D620E800D9B07F /* download.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = download.c; sourceTree = "<group>"; };
- 260F1F8A12D620E800D9B07F /* download.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = download.h; sourceTree = "<group>"; };
- 260F1F8B12D620E800D9B07F /* frames.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = frames.c; sourceTree = "<group>"; };
- 260F1F8C12D620E800D9B07F /* frames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = frames.h; sourceTree = "<group>"; };
- 260F1F8D12D620E800D9B07F /* gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gui.h; sourceTree = "<group>"; };
- 260F1F8E12D620E800D9B07F /* local_history.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = local_history.c; sourceTree = "<group>"; };
- 260F1F8F12D620E800D9B07F /* local_history.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_history.h; sourceTree = "<group>"; };
- 260F1F9012D620E800D9B07F /* history_global_core.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = history_global_core.c; sourceTree = "<group>"; };
- 260F1F9112D620E800D9B07F /* history_global_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = history_global_core.h; sourceTree = "<group>"; };
- 260F1F9212D620E800D9B07F /* hotlist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hotlist.c; sourceTree = "<group>"; };
- 260F1F9312D620E800D9B07F /* hotlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hotlist.h; sourceTree = "<group>"; };
- 260F1F9412D620E800D9B07F /* knockout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = knockout.c; sourceTree = "<group>"; };
- 260F1F9512D620E800D9B07F /* knockout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = knockout.h; sourceTree = "<group>"; };
- 260F1F9612D620E800D9B07F /* mouse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mouse.c; sourceTree = "<group>"; };
- 260F1F9712D620E800D9B07F /* mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mouse.h; sourceTree = "<group>"; };
- 260F1F9812D620E800D9B07F /* netsurf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = netsurf.c; sourceTree = "<group>"; };
- 260F1F9912D620E800D9B07F /* netsurf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netsurf.h; sourceTree = "<group>"; };
- 260F1F9A12D620E800D9B07F /* options.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = options.c; sourceTree = "<group>"; };
- 260F1F9B12D620E800D9B07F /* options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = options.h; sourceTree = "<group>"; };
- 260F1F9C12D620E800D9B07F /* plot_style.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = plot_style.c; sourceTree = "<group>"; };
- 260F1F9D12D620E800D9B07F /* plot_style.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plot_style.h; sourceTree = "<group>"; };
- 260F1F9E12D620E800D9B07F /* plotters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plotters.h; sourceTree = "<group>"; };
- 260F1F9F12D620E800D9B07F /* print.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = print.c; sourceTree = "<group>"; };
- 260F1FA012D620E800D9B07F /* print.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = print.h; sourceTree = "<group>"; };
- 260F1FA112D620E800D9B07F /* printer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = printer.h; sourceTree = "<group>"; };
- 260F1FA212D620E800D9B07F /* save_complete.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = save_complete.c; sourceTree = "<group>"; };
- 260F1FA312D620E800D9B07F /* save_complete.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = save_complete.h; sourceTree = "<group>"; };
- 260F1FA512D620E800D9B07F /* font_haru.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = font_haru.c; sourceTree = "<group>"; };
- 260F1FA612D620E800D9B07F /* font_haru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = font_haru.h; sourceTree = "<group>"; };
- 260F1FA712D620E800D9B07F /* pdf_plotters.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pdf_plotters.c; sourceTree = "<group>"; };
- 260F1FA812D620E800D9B07F /* pdf_plotters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pdf_plotters.h; sourceTree = "<group>"; };
- 260F1FAA12D620E800D9B07F /* save_text.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = save_text.c; sourceTree = "<group>"; };
- 260F1FAB12D620E800D9B07F /* save_text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = save_text.h; sourceTree = "<group>"; };
- 260F1FAC12D620E800D9B07F /* scroll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = scroll.c; sourceTree = "<group>"; };
- 260F1FAD12D620E800D9B07F /* scroll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scroll.h; sourceTree = "<group>"; };
- 260F1FAE12D620E800D9B07F /* search.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = search.c; sourceTree = "<group>"; };
- 260F1FAF12D620E800D9B07F /* search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = search.h; sourceTree = "<group>"; };
- 260F1FB012D620E800D9B07F /* searchweb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = searchweb.c; sourceTree = "<group>"; };
- 260F1FB112D620E800D9B07F /* searchweb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = searchweb.h; sourceTree = "<group>"; };
- 260F1FB212D620E800D9B07F /* selection.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = selection.c; sourceTree = "<group>"; };
- 260F1FB312D620E800D9B07F /* selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = selection.h; sourceTree = "<group>"; };
- 260F1FB412D620E800D9B07F /* sslcert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sslcert.c; sourceTree = "<group>"; };
- 260F1FB512D620E800D9B07F /* sslcert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sslcert.h; sourceTree = "<group>"; };
- 260F1FB612D620E800D9B07F /* textarea.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = textarea.c; sourceTree = "<group>"; };
- 260F1FB712D620E800D9B07F /* textarea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = textarea.h; sourceTree = "<group>"; };
- 260F1FB812D620E800D9B07F /* textinput.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = textinput.c; sourceTree = "<group>"; };
- 260F1FB912D620E800D9B07F /* textinput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = textinput.h; sourceTree = "<group>"; };
- 260F1FBA12D620E800D9B07F /* tree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tree.c; sourceTree = "<group>"; };
- 260F1FBB12D620E800D9B07F /* tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree.h; sourceTree = "<group>"; };
- 260F1FBC12D620E800D9B07F /* tree_url_node.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tree_url_node.c; sourceTree = "<group>"; };
- 260F1FBD12D620E800D9B07F /* tree_url_node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree_url_node.h; sourceTree = "<group>"; };
- 260F1FBE12D620E800D9B07F /* version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = version.c; sourceTree = "<group>"; };
- 260F1FC712D620E800D9B07F /* box.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = box.c; sourceTree = "<group>"; };
- 260F1FC812D620E800D9B07F /* box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = box.h; sourceTree = "<group>"; };
- 260F1FC912D620E800D9B07F /* box_construct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = box_construct.c; sourceTree = "<group>"; };
- 260F1FCA12D620E800D9B07F /* box_normalise.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = box_normalise.c; sourceTree = "<group>"; };
- 260F1FCB12D620E800D9B07F /* favicon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = favicon.c; sourceTree = "<group>"; };
- 260F1FCC12D620E800D9B07F /* favicon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = favicon.h; sourceTree = "<group>"; };
- 260F1FCD12D620E800D9B07F /* font.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = font.c; sourceTree = "<group>"; };
- 260F1FCE12D620E800D9B07F /* font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = font.h; sourceTree = "<group>"; };
- 260F1FCF12D620E800D9B07F /* form.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = form.c; sourceTree = "<group>"; };
- 260F1FD012D620E800D9B07F /* form.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = form.h; sourceTree = "<group>"; };
- 260F1FD112D620E800D9B07F /* html.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = html.c; sourceTree = "<group>"; };
- 260F1FD212D620E800D9B07F /* html.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = html.h; sourceTree = "<group>"; };
- 260F1FD312D620E800D9B07F /* html_interaction.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = html_interaction.c; sourceTree = "<group>"; };
- 260F1FD412D620E800D9B07F /* html_redraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = html_redraw.c; sourceTree = "<group>"; };
- 260F1FD512D620E800D9B07F /* hubbub_binding.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hubbub_binding.c; sourceTree = "<group>"; };
- 260F1FD612D620E800D9B07F /* imagemap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = imagemap.c; sourceTree = "<group>"; };
- 260F1FD712D620E800D9B07F /* imagemap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imagemap.h; sourceTree = "<group>"; };
- 260F1FD812D620E800D9B07F /* layout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = layout.c; sourceTree = "<group>"; };
- 260F1FD912D620E800D9B07F /* layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = layout.h; sourceTree = "<group>"; };
- 260F1FDA12D620E800D9B07F /* list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = "<group>"; };
- 260F1FDB12D620E800D9B07F /* list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = "<group>"; };
- 260F1FDC12D620E800D9B07F /* parser_binding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parser_binding.h; sourceTree = "<group>"; };
- 260F1FDD12D620E800D9B07F /* table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = table.c; sourceTree = "<group>"; };
- 260F1FDE12D620E800D9B07F /* table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = table.h; sourceTree = "<group>"; };
- 260F1FE012D620E800D9B07F /* textplain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = textplain.c; sourceTree = "<group>"; };
- 260F1FE112D620E800D9B07F /* textplain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = textplain.h; sourceTree = "<group>"; };
- 260F1FE312D620E800D9B07F /* base64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = base64.c; sourceTree = "<group>"; };
- 260F1FE412D620E800D9B07F /* base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = base64.h; sourceTree = "<group>"; };
- 260F1FE512D620E800D9B07F /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
- 260F1FE612D620E800D9B07F /* container.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = container.c; sourceTree = "<group>"; };
- 260F1FE712D620E800D9B07F /* container.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = container.h; sourceTree = "<group>"; };
- 260F1FE812D620E800D9B07F /* errors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = errors.h; sourceTree = "<group>"; };
- 260F1FE912D620E800D9B07F /* filename.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filename.c; sourceTree = "<group>"; };
- 260F1FEA12D620E800D9B07F /* filename.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filename.h; sourceTree = "<group>"; };
- 260F1FEB12D620E800D9B07F /* resource.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resource.c; sourceTree = "<group>"; };
- 260F1FEC12D620E800D9B07F /* resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = resource.h; sourceTree = "<group>"; };
- 260F1FED12D620E800D9B07F /* hashtable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hashtable.c; sourceTree = "<group>"; };
- 260F1FEE12D620E800D9B07F /* hashtable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hashtable.h; sourceTree = "<group>"; };
- 260F1FEF12D620E800D9B07F /* http.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = http.c; sourceTree = "<group>"; };
- 260F1FF012D620E800D9B07F /* http.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = http.h; sourceTree = "<group>"; };
- 260F1FF112D620E800D9B07F /* locale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = locale.c; sourceTree = "<group>"; };
- 260F1FF212D620E800D9B07F /* locale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = locale.h; sourceTree = "<group>"; };
- 260F1FF312D620E800D9B07F /* log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = log.c; sourceTree = "<group>"; };
- 260F1FF412D620E800D9B07F /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
- 260F1FF612D620E800D9B07F /* memdebug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = memdebug.c; sourceTree = "<group>"; };
- 260F1FF712D620E800D9B07F /* memdebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memdebug.h; sourceTree = "<group>"; };
- 260F1FF812D620E800D9B07F /* messages.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = messages.c; sourceTree = "<group>"; };
- 260F1FF912D620E800D9B07F /* messages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = messages.h; sourceTree = "<group>"; };
- 260F1FFA12D620E800D9B07F /* ring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ring.h; sourceTree = "<group>"; };
- 260F1FFB12D620E800D9B07F /* talloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = talloc.c; sourceTree = "<group>"; };
- 260F1FFC12D620E800D9B07F /* talloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = talloc.h; sourceTree = "<group>"; };
- 260F1FFF12D620E800D9B07F /* url.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = url.c; sourceTree = "<group>"; };
- 260F200012D620E800D9B07F /* url.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = url.h; sourceTree = "<group>"; };
- 260F200112D620E800D9B07F /* useragent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = useragent.c; sourceTree = "<group>"; };
- 260F200212D620E800D9B07F /* useragent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = useragent.h; sourceTree = "<group>"; };
- 260F200312D620E800D9B07F /* utf8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utf8.c; sourceTree = "<group>"; };
- 260F200412D620E800D9B07F /* utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = "<group>"; };
- 260F200512D620E800D9B07F /* utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utils.c; sourceTree = "<group>"; };
- 260F200612D620E800D9B07F /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = "<group>"; };
- 260F200712D620E800D9B07F /* utsname.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utsname.h; sourceTree = "<group>"; };
- 260FC03112D85ACE00079C00 /* bitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitmap.h; sourceTree = "<group>"; };
- 26121DA812D700B800E10F91 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; };
- 26121EAB12D70E0A00E10F91 /* Browser.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Browser.xib; sourceTree = "<group>"; };
- 26121EFB12D7132100E10F91 /* BrowserView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrowserView.h; sourceTree = "<group>"; };
- 26121EFC12D7132100E10F91 /* BrowserView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BrowserView.m; sourceTree = "<group>"; };
- 261223B712D77F9C00E10F91 /* font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = font.h; sourceTree = "<group>"; };
- 261223CB12D7805300E10F91 /* plotter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plotter.h; sourceTree = "<group>"; };
- 2612265712D7ACB500E10F91 /* default.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = default.css; sourceTree = "<group>"; };
- 2612265912D7ACB500E10F91 /* quirks.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = quirks.css; sourceTree = "<group>"; };
- 2612265D12D7AD6800E10F91 /* adblock.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = adblock.css; sourceTree = "<group>"; };
- 2612269012D7AE4100E10F91 /* de */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = de; path = de.lproj/Messages; sourceTree = "<group>"; };
- 2612269312D7AE9B00E10F91 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text; name = nl; path = nl.lproj/Messages; sourceTree = "<group>"; };
- 2612269412D7AEA800E10F91 /* en */ = {isa = PBXFileReference; lastKnownFileType = text; name = en; path = en.lproj/Messages; sourceTree = "<group>"; };
- 2612269512D7AEB500E10F91 /* it */ = {isa = PBXFileReference; lastKnownFileType = text; name = it; path = it.lproj/Messages; sourceTree = "<group>"; };
- 2612269612D7AEBE00E10F91 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text; name = fr; path = fr.lproj/Messages; sourceTree = "<group>"; };
- 261DB22213180AFF00C59F12 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
- 261DB22613180B4F00C59F12 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
- 261DB23313180CD600C59F12 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
- 261DB23413180CE000C59F12 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = "<group>"; };
- 261DB23513180CEE00C59F12 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
- 261DB24F1318444F00C59F12 /* compile-xib.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "compile-xib.sh"; sourceTree = "<group>"; };
- 261DB2501318444F00C59F12 /* extract-strings.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "extract-strings.sh"; sourceTree = "<group>"; };
- 261DB29013185C0A00C59F12 /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/BookmarksWindow.xib.strings; sourceTree = "<group>"; };
- 261DB29413185C0A00C59F12 /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/BrowserWindow.xib.strings; sourceTree = "<group>"; };
- 261DB29613185C0A00C59F12 /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/DownloadWindow.xib.strings; sourceTree = "<group>"; };
- 261DB29813185C0A00C59F12 /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/HistoryWindow.xib.strings; sourceTree = "<group>"; };
- 261DB29C13185C0A00C59F12 /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MainMenu.xib.strings; sourceTree = "<group>"; };
- 261DB29E13185C0A00C59F12 /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/PreferencesWindow.xib.strings; sourceTree = "<group>"; };
- 261DB2A013185C0A00C59F12 /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/SearchWindow.xib.strings; sourceTree = "<group>"; };
- 2622F1D512DCD84600CD5A62 /* TreeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TreeView.h; sourceTree = "<group>"; };
- 2622F1D612DCD84600CD5A62 /* TreeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TreeView.m; sourceTree = "<group>"; };
- 2625095012F72A8F0090D236 /* PreferencesWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PreferencesWindow.xib; sourceTree = "<group>"; };
- 2625095112F72AA70090D236 /* PreferencesWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreferencesWindowController.h; sourceTree = "<group>"; };
- 2625095212F72AA70090D236 /* PreferencesWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PreferencesWindowController.m; sourceTree = "<group>"; };
- 2636299412F699250048542C /* NetSurf.app */ = {isa = PBXFileReference; lastKnownFileType = wrapper.application; name = NetSurf.app; path = ../NetSurf.app; sourceTree = SOURCE_ROOT; };
- 263629B312F69A290048542C /* Makefile.config */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; name = Makefile.config; path = ../Makefile.config; sourceTree = SOURCE_ROOT; };
- 263629B412F69A290048542C /* Makefile.defaults */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; name = Makefile.defaults; path = ../Makefile.defaults; sourceTree = SOURCE_ROOT; };
- 263629B512F69A290048542C /* Makefile.resources */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; name = Makefile.resources; path = ../Makefile.resources; sourceTree = SOURCE_ROOT; };
- 263629B612F69A290048542C /* Makefile.sources */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; name = Makefile.sources; path = ../Makefile.sources; sourceTree = SOURCE_ROOT; };
- 263629B712F69A3C0048542C /* Makefile.target */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.target; sourceTree = "<group>"; };
- 263629BC12F69A760048542C /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; name = Makefile; path = ../Makefile; sourceTree = SOURCE_ROOT; };
- 263629C812F69B120048542C /* NetsurfApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetsurfApp.h; sourceTree = "<group>"; };
- 263629C912F69B120048542C /* NetsurfApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NetsurfApp.m; sourceTree = "<group>"; };
- 263629CA12F69B120048542C /* system_colour.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = system_colour.m; sourceTree = "<group>"; };
- 263769A912F7EBE2000F45FE /* Tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tree.h; sourceTree = "<group>"; };
- 263769AA12F7EBE2000F45FE /* Tree.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Tree.m; sourceTree = "<group>"; };
- 26376A4112F7FA67000F45FE /* HistoryWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HistoryWindow.xib; sourceTree = "<group>"; };
- 26376A4312F7FA86000F45FE /* HistoryWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryWindowController.h; sourceTree = "<group>"; };
- 26376A4412F7FA86000F45FE /* HistoryWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryWindowController.m; sourceTree = "<group>"; };
- 26376A8A12F7FF57000F45FE /* BookmarksController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BookmarksController.h; sourceTree = "<group>"; };
- 26376A8B12F7FF57000F45FE /* BookmarksController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BookmarksController.m; sourceTree = "<group>"; };
- 26376BAC12F820D7000F45FE /* BookmarksWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BookmarksWindow.xib; sourceTree = "<group>"; };
- 2639E20512F2ADEE00699678 /* coordinates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = coordinates.h; sourceTree = "<group>"; };
- 264C344112F0987E00D11246 /* gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gui.h; sourceTree = "<group>"; };
- 265F30A712D6637E0048B600 /* NetSurf-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "NetSurf-Info.plist"; sourceTree = "<group>"; };
- 265F30AB12D6637E0048B600 /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = "<group>"; };
- 265F311912D663F50048B600 /* gui.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = gui.m; sourceTree = "<group>"; };
- 265F314712D666660048B600 /* plotter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = plotter.m; sourceTree = "<group>"; };
- 265F316112D667E10048B600 /* schedule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = schedule.m; sourceTree = "<group>"; };
- 265F316612D668130048B600 /* thumbnail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = thumbnail.m; sourceTree = "<group>"; };
- 265F316F12D668790048B600 /* fetch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = fetch.m; sourceTree = "<group>"; };
- 265F319012D668DB0048B600 /* url.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = url.m; sourceTree = "<group>"; };
- 265F31C412D66A0D0048B600 /* save.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = save.m; sourceTree = "<group>"; };
- 265F31CA12D66A890048B600 /* bitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitmap.h; sourceTree = "<group>"; };
- 265F31CB12D66A890048B600 /* bmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bmp.c; sourceTree = "<group>"; };
- 265F31CC12D66A890048B600 /* bmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bmp.h; sourceTree = "<group>"; };
- 265F31CD12D66A890048B600 /* gif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gif.c; sourceTree = "<group>"; };
- 265F31CE12D66A890048B600 /* gif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gif.h; sourceTree = "<group>"; };
- 265F31CF12D66A890048B600 /* ico.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ico.c; sourceTree = "<group>"; };
- 265F31D012D66A890048B600 /* ico.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ico.h; sourceTree = "<group>"; };
- 265F31D112D66A890048B600 /* jpeg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jpeg.c; sourceTree = "<group>"; };
- 265F31D212D66A890048B600 /* jpeg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jpeg.h; sourceTree = "<group>"; };
- 265F31D312D66A890048B600 /* mng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mng.c; sourceTree = "<group>"; };
- 265F31D412D66A890048B600 /* mng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mng.h; sourceTree = "<group>"; };
- 265F31D512D66A890048B600 /* nssprite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nssprite.c; sourceTree = "<group>"; };
- 265F31D612D66A890048B600 /* nssprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nssprite.h; sourceTree = "<group>"; };
- 265F31D712D66A890048B600 /* png.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = png.c; sourceTree = "<group>"; };
- 265F31D812D66A890048B600 /* png.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = png.h; sourceTree = "<group>"; };
- 265F31D912D66A890048B600 /* rsvg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsvg.c; sourceTree = "<group>"; };
- 265F31DA12D66A890048B600 /* rsvg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rsvg.h; sourceTree = "<group>"; };
- 265F31DB12D66A890048B600 /* svg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = svg.c; sourceTree = "<group>"; };
- 265F31DC12D66A890048B600 /* svg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = svg.h; sourceTree = "<group>"; };
- 265F31DD12D66A890048B600 /* webp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = webp.c; sourceTree = "<group>"; };
- 265F31DE12D66A890048B600 /* webp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = webp.h; sourceTree = "<group>"; };
- 265F31EB12D66B190048B600 /* bitmap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = bitmap.m; sourceTree = "<group>"; };
- 265F320512D66C200048B600 /* utf8.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = utf8.m; sourceTree = "<group>"; };
- 265F321312D66CD90048B600 /* utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = utils.m; sourceTree = "<group>"; };
- 265F321E12D66D510048B600 /* font.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = font.m; sourceTree = "<group>"; };
- 2666DC5B12F6D1770045E8B6 /* SearchWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchWindow.xib; sourceTree = "<group>"; };
- 2666DC5D12F6D2E70045E8B6 /* SearchWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchWindowController.h; sourceTree = "<group>"; };
- 2666DC5E12F6D2E70045E8B6 /* SearchWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchWindowController.m; sourceTree = "<group>"; };
- 2666DD5012F706BC0045E8B6 /* BrowserWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrowserWindow.h; sourceTree = "<group>"; };
- 2666DD5112F706BC0045E8B6 /* BrowserWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BrowserWindow.m; sourceTree = "<group>"; };
- 2684028E1301848100850DA2 /* HomeTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = HomeTemplate.pdf; sourceTree = "<group>"; };
- 26ABD61C12F02EB900407161 /* overflowImage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = overflowImage.png; sourceTree = "<group>"; };
- 26ABD61D12F02EB900407161 /* overflowImagePressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = overflowImagePressed.png; sourceTree = "<group>"; };
- 26ABD61E12F02EB900407161 /* pi.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pi.png; sourceTree = "<group>"; };
- 26AFE63E12DDEB0A005AD082 /* NetSurf.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = NetSurf.icns; sourceTree = "<group>"; };
- 26AFE8E212DF4200005AD082 /* ScrollableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollableView.h; sourceTree = "<group>"; };
- 26AFE8E312DF4200005AD082 /* ScrollableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ScrollableView.m; sourceTree = "<group>"; };
- 26AFE97A12DF514C005AD082 /* NetSurfAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetSurfAppDelegate.h; sourceTree = "<group>"; };
- 26AFE97B12DF514C005AD082 /* NetSurfAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NetSurfAppDelegate.m; sourceTree = "<group>"; };
- 26AFEAE912E04253005AD082 /* DownloadWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DownloadWindowController.h; sourceTree = "<group>"; };
- 26AFEAEA12E04253005AD082 /* DownloadWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DownloadWindowController.m; sourceTree = "<group>"; };
- 26AFEAF012E042F9005AD082 /* DownloadWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DownloadWindow.xib; sourceTree = "<group>"; };
- 26AFED0312E09916005AD082 /* selection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = selection.m; sourceTree = "<group>"; };
- 26B4E91A130D351F0003B527 /* ArrowBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArrowBox.h; sourceTree = "<group>"; };
- 26B4E91B130D351F0003B527 /* ArrowBox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArrowBox.m; sourceTree = "<group>"; };
- 26B4E91C130D351F0003B527 /* ArrowWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArrowWindow.h; sourceTree = "<group>"; };
- 26B4E91D130D351F0003B527 /* ArrowWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArrowWindow.m; sourceTree = "<group>"; };
- 26B4E91E130D351F0003B527 /* BlackScroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlackScroller.h; sourceTree = "<group>"; };
- 26B4E91F130D351F0003B527 /* BlackScroller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BlackScroller.m; sourceTree = "<group>"; };
- 26B4E926130D36A90003B527 /* LocalHistoryPanel.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LocalHistoryPanel.xib; sourceTree = "<group>"; };
- 26B4E928130D37E50003B527 /* LocalHistoryController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalHistoryController.h; sourceTree = "<group>"; };
- 26B4E929130D37E50003B527 /* LocalHistoryController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocalHistoryController.m; sourceTree = "<group>"; };
- 26BA25AB1321653200AEC1DA /* apple_image.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = apple_image.m; sourceTree = "<group>"; };
- 26BA25AC1321653200AEC1DA /* apple_image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apple_image.h; sourceTree = "<group>"; };
- 26CDCEB312E702D8004FC66B /* NSBezierPath_AMShading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSBezierPath_AMShading.h; sourceTree = "<group>"; };
- 26CDCEB412E702D8004FC66B /* NSBezierPath_AMShading.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSBezierPath_AMShading.m; sourceTree = "<group>"; };
- 26CDCEB512E702D8004FC66B /* NSString_AITruncation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSString_AITruncation.h; sourceTree = "<group>"; };
- 26CDCEB612E702D8004FC66B /* NSString_AITruncation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSString_AITruncation.m; sourceTree = "<group>"; };
- 26CDCEBD12E702D8004FC66B /* PSMOverflowPopUpButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMOverflowPopUpButton.h; sourceTree = "<group>"; };
- 26CDCEBE12E702D8004FC66B /* PSMOverflowPopUpButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMOverflowPopUpButton.m; sourceTree = "<group>"; };
- 26CDCEBF12E702D8004FC66B /* PSMProgressIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMProgressIndicator.h; sourceTree = "<group>"; };
- 26CDCEC012E702D8004FC66B /* PSMProgressIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMProgressIndicator.m; sourceTree = "<group>"; };
- 26CDCEC112E702D8004FC66B /* PSMRolloverButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMRolloverButton.h; sourceTree = "<group>"; };
- 26CDCEC212E702D8004FC66B /* PSMRolloverButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMRolloverButton.m; sourceTree = "<group>"; };
- 26CDCEC312E702D8004FC66B /* PSMTabBarCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabBarCell.h; sourceTree = "<group>"; };
- 26CDCEC412E702D8004FC66B /* PSMTabBarCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMTabBarCell.m; sourceTree = "<group>"; };
- 26CDCEC512E702D8004FC66B /* PSMTabBarControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabBarControl.h; sourceTree = "<group>"; };
- 26CDCEC612E702D8004FC66B /* PSMTabBarControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMTabBarControl.m; sourceTree = "<group>"; };
- 26CDCEC712E702D8004FC66B /* PSMTabBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabBarController.h; sourceTree = "<group>"; };
- 26CDCEC812E702D8004FC66B /* PSMTabBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMTabBarController.m; sourceTree = "<group>"; };
- 26CDCEC912E702D8004FC66B /* PSMTabDragAssistant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabDragAssistant.h; sourceTree = "<group>"; };
- 26CDCECA12E702D8004FC66B /* PSMTabDragAssistant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMTabDragAssistant.m; sourceTree = "<group>"; };
- 26CDCECB12E702D8004FC66B /* PSMTabDragView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabDragView.h; sourceTree = "<group>"; };
- 26CDCECC12E702D8004FC66B /* PSMTabDragView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMTabDragView.m; sourceTree = "<group>"; };
- 26CDCECD12E702D8004FC66B /* PSMTabDragWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabDragWindow.h; sourceTree = "<group>"; };
- 26CDCECE12E702D8004FC66B /* PSMTabDragWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMTabDragWindow.m; sourceTree = "<group>"; };
- 26CDCECF12E702D8004FC66B /* PSMTabDragWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabDragWindowController.h; sourceTree = "<group>"; };
- 26CDCED012E702D8004FC66B /* PSMTabDragWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMTabDragWindowController.m; sourceTree = "<group>"; };
- 26CDCED112E702D8004FC66B /* PSMTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMTabStyle.h; sourceTree = "<group>"; };
- 26CDCED212E702D8004FC66B /* PSMUnifiedTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSMUnifiedTabStyle.h; sourceTree = "<group>"; };
- 26CDCED312E702D8004FC66B /* PSMUnifiedTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSMUnifiedTabStyle.m; sourceTree = "<group>"; };
- 26CDCFDC12E706FE004FC66B /* AquaTabClose_Front.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = AquaTabClose_Front.png; sourceTree = "<group>"; };
- 26CDCFDD12E706FF004FC66B /* AquaTabClose_Front_Pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = AquaTabClose_Front_Pressed.png; sourceTree = "<group>"; };
- 26CDCFDE12E706FF004FC66B /* AquaTabClose_Front_Rollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = AquaTabClose_Front_Rollover.png; sourceTree = "<group>"; };
- 26CDCFDF12E706FF004FC66B /* AquaTabCloseDirty_Front.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = AquaTabCloseDirty_Front.png; sourceTree = "<group>"; };
- 26CDCFE012E706FF004FC66B /* AquaTabCloseDirty_Front_Pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = AquaTabCloseDirty_Front_Pressed.png; sourceTree = "<group>"; };
- 26CDCFE112E706FF004FC66B /* AquaTabCloseDirty_Front_Rollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = AquaTabCloseDirty_Front_Rollover.png; sourceTree = "<group>"; };
- 26CDCFE212E706FF004FC66B /* AquaTabNew.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = AquaTabNew.png; sourceTree = "<group>"; };
- 26CDCFE312E706FF004FC66B /* AquaTabNewPressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = AquaTabNewPressed.png; sourceTree = "<group>"; };
- 26CDCFE412E706FF004FC66B /* AquaTabNewRollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = AquaTabNewRollover.png; sourceTree = "<group>"; };
- 26CDCFF212E70AD1004FC66B /* BrowserWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BrowserWindow.xib; sourceTree = "<group>"; };
- 26CDD00112E70F56004FC66B /* BrowserWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrowserWindowController.h; sourceTree = "<group>"; };
- 26CDD00212E70F56004FC66B /* BrowserWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BrowserWindowController.m; sourceTree = "<group>"; };
- 26CDD0F412E726E0004FC66B /* BrowserViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrowserViewController.h; sourceTree = "<group>"; };
- 26CDD0F512E726E0004FC66B /* BrowserViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BrowserViewController.m; sourceTree = "<group>"; };
- 26E7A22B131FEBA8005B5B6A /* about.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = about.c; sourceTree = "<group>"; };
- 26E7A22C131FEBA8005B5B6A /* about.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = about.h; sourceTree = "<group>"; };
- 26E7A22D131FEBA8005B5B6A /* resource.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resource.c; sourceTree = "<group>"; };
- 26E7A22E131FEBA8005B5B6A /* resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = resource.h; sourceTree = "<group>"; };
- 26EC3B6812ED62C0000A960C /* URLFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = URLFieldCell.h; sourceTree = "<group>"; };
- 26EC3B6912ED62C0000A960C /* URLFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = URLFieldCell.m; sourceTree = "<group>"; };
- 26EC3C4212ED8202000A960C /* HistoryView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryView.h; sourceTree = "<group>"; };
- 26EC3C4312ED8202000A960C /* HistoryView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryView.m; sourceTree = "<group>"; };
- 26EC3F1612EF0CBD000A960C /* FormSelectMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormSelectMenu.h; sourceTree = "<group>"; };
- 26EC3F1712EF0CBD000A960C /* FormSelectMenu.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FormSelectMenu.m; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXGroup section */
- 19C28FACFE9D520D11CA2CBB /* Products */ = {
- isa = PBXGroup;
- children = (
- 2636299412F699250048542C /* NetSurf.app */,
- );
- name = Products;
- sourceTree = "<group>";
- };
- 260F1F6212D620E800D9B07F /* content */ = {
- isa = PBXGroup;
- children = (
- 260F1F6312D620E800D9B07F /* content.c */,
- 260F1F6412D620E800D9B07F /* content.h */,
- 260F1F6512D620E800D9B07F /* content_protected.h */,
- 260F1F6612D620E800D9B07F /* content_type.h */,
- 260F1F6712D620E800D9B07F /* dirlist.c */,
- 260F1F6812D620E800D9B07F /* dirlist.h */,
- 260F1F6912D620E800D9B07F /* fetch.c */,
- 260F1F6A12D620E800D9B07F /* fetch.h */,
- 260F1F6B12D620E800D9B07F /* fetchers */,
- 260F1F7212D620E800D9B07F /* hlcache.c */,
- 260F1F7312D620E800D9B07F /* hlcache.h */,
- 260F1F7412D620E800D9B07F /* llcache.c */,
- 260F1F7512D620E800D9B07F /* llcache.h */,
- 260F1F7612D620E800D9B07F /* urldb.c */,
- 260F1F7712D620E800D9B07F /* urldb.h */,
- );
- name = content;
- path = ../content;
- sourceTree = SOURCE_ROOT;
- };
- 260F1F6B12D620E800D9B07F /* fetchers */ = {
- isa = PBXGroup;
- children = (
- 26E7A22B131FEBA8005B5B6A /* about.c */,
- 26E7A22C131FEBA8005B5B6A /* about.h */,
- 26E7A22D131FEBA8005B5B6A /* resource.c */,
- 26E7A22E131FEBA8005B5B6A /* resource.h */,
- 260F1F6C12D620E800D9B07F /* curl.c */,
- 260F1F6D12D620E800D9B07F /* curl.h */,
- 260F1F6E12D620E800D9B07F /* data.c */,
- 260F1F6F12D620E800D9B07F /* data.h */,
- 260F1F7012D620E800D9B07F /* file.c */,
- 260F1F7112D620E800D9B07F /* file.h */,
- );
- path = fetchers;
- sourceTree = "<group>";
- };
- 260F1F7812D620E800D9B07F /* css */ = {
- isa = PBXGroup;
- children = (
- 260F1F7912D620E800D9B07F /* css.c */,
- 260F1F7A12D620E800D9B07F /* css.h */,
- 260F1F7B12D620E800D9B07F /* dump.c */,
- 260F1F7C12D620E800D9B07F /* dump.h */,
- 260F1F7D12D620E800D9B07F /* internal.c */,
- 260F1F7E12D620E800D9B07F /* internal.h */,
- 260F1F7F12D620E800D9B07F /* select.c */,
- 260F1F8012D620E800D9B07F /* select.h */,
- 260F1F8112D620E800D9B07F /* utils.c */,
- 260F1F8212D620E800D9B07F /* utils.h */,
- );
- name = css;
- path = ../css;
- sourceTree = SOURCE_ROOT;
- };
- 260F1F8312D620E800D9B07F /* desktop */ = {
- isa = PBXGroup;
- children = (
- 260F1F8412D620E800D9B07F /* 401login.h */,
- 260F1F8512D620E800D9B07F /* browser.c */,
- 260F1F8612D620E800D9B07F /* browser.h */,
- 260F1F8712D620E800D9B07F /* cookies.c */,
- 260F1F8812D620E800D9B07F /* cookies_old.h */,
- 260F1F8912D620E800D9B07F /* download.c */,
- 260F1F8A12D620E800D9B07F /* download.h */,
- 260F1F8B12D620E800D9B07F /* frames.c */,
- 260F1F8C12D620E800D9B07F /* frames.h */,
- 260F1F8D12D620E800D9B07F /* gui.h */,
- 260F1F8E12D620E800D9B07F /* local_history.c */,
- 260F1F8F12D620E800D9B07F /* local_history.h */,
- 260F1F9012D620E800D9B07F /* history_global_core.c */,
- 260F1F9112D620E800D9B07F /* history_global_core.h */,
- 260F1F9212D620E800D9B07F /* hotlist.c */,
- 260F1F9312D620E800D9B07F /* hotlist.h */,
- 260F1F9412D620E800D9B07F /* knockout.c */,
- 260F1F9512D620E800D9B07F /* knockout.h */,
- 260F1F9612D620E800D9B07F /* mouse.c */,
- 260F1F9712D620E800D9B07F /* mouse.h */,
- 260F1F9812D620E800D9B07F /* netsurf.c */,
- 260F1F9912D620E800D9B07F /* netsurf.h */,
- 260F1F9A12D620E800D9B07F /* options.c */,
- 260F1F9B12D620E800D9B07F /* options.h */,
- 260F1F9C12D620E800D9B07F /* plot_style.c */,
- 260F1F9D12D620E800D9B07F /* plot_style.h */,
- 260F1F9E12D620E800D9B07F /* plotters.h */,
- 260F1F9F12D620E800D9B07F /* print.c */,
- 260F1FA012D620E800D9B07F /* print.h */,
- 260F1FA112D620E800D9B07F /* printer.h */,
- 260F1FA212D620E800D9B07F /* save_complete.c */,
- 260F1FA312D620E800D9B07F /* save_complete.h */,
- 260F1FA412D620E800D9B07F /* save_pdf */,
- 260F1FAA12D620E800D9B07F /* save_text.c */,
- 260F1FAB12D620E800D9B07F /* save_text.h */,
- 260F1FAC12D620E800D9B07F /* scroll.c */,
- 260F1FAD12D620E800D9B07F /* scroll.h */,
- 260F1FAE12D620E800D9B07F /* search.c */,
- 260F1FAF12D620E800D9B07F /* search.h */,
- 260F1FB012D620E800D9B07F /* searchweb.c */,
- 260F1FB112D620E800D9B07F /* searchweb.h */,
- 260F1FB212D620E800D9B07F /* selection.c */,
- 260F1FB312D620E800D9B07F /* selection.h */,
- 260F1FB412D620E800D9B07F /* sslcert.c */,
- 260F1FB512D620E800D9B07F /* sslcert.h */,
- 260F1FB612D620E800D9B07F /* textarea.c */,
- 260F1FB712D620E800D9B07F /* textarea.h */,
- 260F1FB812D620E800D9B07F /* textinput.c */,
- 260F1FB912D620E800D9B07F /* textinput.h */,
- 260F1FBA12D620E800D9B07F /* tree.c */,
- 260F1FBB12D620E800D9B07F /* tree.h */,
- 260F1FBC12D620E800D9B07F /* tree_url_node.c */,
- 260F1FBD12D620E800D9B07F /* tree_url_node.h */,
- 260F1FBE12D620E800D9B07F /* version.c */,
- );
- name = desktop;
- path = ../desktop;
- sourceTree = SOURCE_ROOT;
- };
- 260F1FA412D620E800D9B07F /* save_pdf */ = {
- isa = PBXGroup;
- children = (
- 260F1FA512D620E800D9B07F /* font_haru.c */,
- 260F1FA612D620E800D9B07F /* font_haru.h */,
- 260F1FA712D620E800D9B07F /* pdf_plotters.c */,
- 260F1FA812D620E800D9B07F /* pdf_plotters.h */,
- );
- path = save_pdf;
- sourceTree = "<group>";
- };
- 260F1FC612D620E800D9B07F /* render */ = {
- isa = PBXGroup;
- children = (
- 260F1FC712D620E800D9B07F /* box.c */,
- 260F1FC812D620E800D9B07F /* box.h */,
- 260F1FC912D620E800D9B07F /* box_construct.c */,
- 260F1FCA12D620E800D9B07F /* box_normalise.c */,
- 260F1FCB12D620E800D9B07F /* favicon.c */,
- 260F1FCC12D620E800D9B07F /* favicon.h */,
- 260F1FCD12D620E800D9B07F /* font.c */,
- 260F1FCE12D620E800D9B07F /* font.h */,
- 260F1FCF12D620E800D9B07F /* form.c */,
- 260F1FD012D620E800D9B07F /* form.h */,
- 260F1FD112D620E800D9B07F /* html.c */,
- 260F1FD212D620E800D9B07F /* html.h */,
- 260F1FD312D620E800D9B07F /* html_interaction.c */,
- 260F1FD412D620E800D9B07F /* html_redraw.c */,
- 260F1FD512D620E800D9B07F /* hubbub_binding.c */,
- 260F1FD612D620E800D9B07F /* imagemap.c */,
- 260F1FD712D620E800D9B07F /* imagemap.h */,
- 260F1FD812D620E800D9B07F /* layout.c */,
- 260F1FD912D620E800D9B07F /* layout.h */,
- 260F1FDA12D620E800D9B07F /* list.c */,
- 260F1FDB12D620E800D9B07F /* list.h */,
- 260F1FDC12D620E800D9B07F /* parser_binding.h */,
- 260F1FDD12D620E800D9B07F /* table.c */,
- 260F1FDE12D620E800D9B07F /* table.h */,
- 260F1FE012D620E800D9B07F /* textplain.c */,
- 260F1FE112D620E800D9B07F /* textplain.h */,
- );
- name = render;
- path = ../render;
- sourceTree = SOURCE_ROOT;
- };
- 260F1FE212D620E800D9B07F /* utils */ = {
- isa = PBXGroup;
- children = (
- 260F1FE312D620E800D9B07F /* base64.c */,
- 260F1FE412D620E800D9B07F /* base64.h */,
- 260F1FE512D620E800D9B07F /* config.h */,
- 260F1FE612D620E800D9B07F /* container.c */,
- 260F1FE712D620E800D9B07F /* container.h */,
- 260F1FE812D620E800D9B07F /* errors.h */,
- 260F1FE912D620E800D9B07F /* filename.c */,
- 260F1FEA12D620E800D9B07F /* filename.h */,
- 260F1FEB12D620E800D9B07F /* resource.c */,
- 260F1FEC12D620E800D9B07F /* resource.h */,
- 260F1FED12D620E800D9B07F /* hashtable.c */,
- 260F1FEE12D620E800D9B07F /* hashtable.h */,
- 260F1FEF12D620E800D9B07F /* http.c */,
- 260F1FF012D620E800D9B07F /* http.h */,
- 260F1FF112D620E800D9B07F /* locale.c */,
- 260F1FF212D620E800D9B07F /* locale.h */,
- 260F1FF312D620E800D9B07F /* log.c */,
- 260F1FF412D620E800D9B07F /* log.h */,
- 260F1FF612D620E800D9B07F /* memdebug.c */,
- 260F1FF712D620E800D9B07F /* memdebug.h */,
- 260F1FF812D620E800D9B07F /* messages.c */,
- 260F1FF912D620E800D9B07F /* messages.h */,
- 260F1FFA12D620E800D9B07F /* ring.h */,
- 260F1FFB12D620E800D9B07F /* talloc.c */,
- 260F1FFC12D620E800D9B07F /* talloc.h */,
- 260F1FFF12D620E800D9B07F /* url.c */,
- 260F200012D620E800D9B07F /* url.h */,
- 260F200112D620E800D9B07F /* useragent.c */,
- 260F200212D620E800D9B07F /* useragent.h */,
- 260F200312D620E800D9B07F /* utf8.c */,
- 260F200412D620E800D9B07F /* utf8.h */,
- 260F200512D620E800D9B07F /* utils.c */,
- 260F200612D620E800D9B07F /* utils.h */,
- 260F200712D620E800D9B07F /* utsname.h */,
- );
- name = utils;
- path = ../utils;
- sourceTree = SOURCE_ROOT;
- };
- 261DB24E1318443500C59F12 /* Tools */ = {
- isa = PBXGroup;
- children = (
- 261DB24F1318444F00C59F12 /* compile-xib.sh */,
- 261DB2501318444F00C59F12 /* extract-strings.sh */,
- );
- name = Tools;
- sourceTree = "<group>";
- };
- 263629B212F69A080048542C /* Makefiles */ = {
- isa = PBXGroup;
- children = (
- 263629BC12F69A760048542C /* Makefile */,
- 263629B712F69A3C0048542C /* Makefile.target */,
- 263629B312F69A290048542C /* Makefile.config */,
- 263629B412F69A290048542C /* Makefile.defaults */,
- 263629B512F69A290048542C /* Makefile.resources */,
- 263629B612F69A290048542C /* Makefile.sources */,
- );
- name = Makefiles;
- sourceTree = "<group>";
- };
- 263769A812F7EBC3000F45FE /* Tree View */ = {
- isa = PBXGroup;
- children = (
- 2622F1D512DCD84600CD5A62 /* TreeView.h */,
- 2622F1D612DCD84600CD5A62 /* TreeView.m */,
- 263769A912F7EBE2000F45FE /* Tree.h */,
- 263769AA12F7EBE2000F45FE /* Tree.m */,
- );
- name = "Tree View";
- sourceTree = "<group>";
- };
- 26376A8C12F7FF5A000F45FE /* Bookmarks */ = {
- isa = PBXGroup;
- children = (
- 26376A8A12F7FF57000F45FE /* BookmarksController.h */,
- 26376A8B12F7FF57000F45FE /* BookmarksController.m */,
- );
- name = Bookmarks;
- sourceTree = "<group>";
- };
- 265F303F12D6637E0048B600 /* Cocoa Frontend */ = {
- isa = PBXGroup;
- children = (
- 26BA25AB1321653200AEC1DA /* apple_image.m */,
- 26BA25AC1321653200AEC1DA /* apple_image.h */,
- 26CDD26512E74402004FC66B /* Browser */,
- 26CDD26712E74453004FC66B /* Download */,
- 26CDD26612E7441E004FC66B /* Views */,
- 263769A812F7EBC3000F45FE /* Tree View */,
- 26376A8C12F7FF5A000F45FE /* Bookmarks */,
- 26CDD26812E74461004FC66B /* NSApplication */,
- 26CDD26912E7446E004FC66B /* Platform Interface */,
- 265F310F12D663C20048B600 /* Resources */,
- 26CDCEB212E702D8004FC66B /* PSMTabBarControl */,
- 265F30AB12D6637E0048B600 /* Prefix.pch */,
- 2625095112F72AA70090D236 /* PreferencesWindowController.h */,
- 2625095212F72AA70090D236 /* PreferencesWindowController.m */,
- 26376A4312F7FA86000F45FE /* HistoryWindowController.h */,
- 26376A4412F7FA86000F45FE /* HistoryWindowController.m */,
- );
- name = "Cocoa Frontend";
- sourceTree = "<group>";
- };
- 265F310F12D663C20048B600 /* Resources */ = {
- isa = PBXGroup;
- children = (
- 261DB28F13185C0A00C59F12 /* BookmarksWindow.xib.strings */,
- 261DB29313185C0A00C59F12 /* BrowserWindow.xib.strings */,
- 261DB29513185C0A00C59F12 /* DownloadWindow.xib.strings */,
- 261DB29713185C0A00C59F12 /* HistoryWindow.xib.strings */,
- 261DB29B13185C0A00C59F12 /* MainMenu.xib.strings */,
- 261DB29D13185C0A00C59F12 /* PreferencesWindow.xib.strings */,
- 261DB29F13185C0A00C59F12 /* SearchWindow.xib.strings */,
- 261DB22113180AFF00C59F12 /* Localizable.strings */,
- 2684028E1301848100850DA2 /* HomeTemplate.pdf */,
- 26AFE63E12DDEB0A005AD082 /* NetSurf.icns */,
- 2612268F12D7AE4100E10F91 /* Messages */,
- 2612265D12D7AD6800E10F91 /* adblock.css */,
- 2612265712D7ACB500E10F91 /* default.css */,
- 2612265912D7ACB500E10F91 /* quirks.css */,
- 265F30A712D6637E0048B600 /* NetSurf-Info.plist */,
- 26121DA812D700B800E10F91 /* MainMenu.xib */,
- 26121EAB12D70E0A00E10F91 /* Browser.xib */,
- 26AFEAF012E042F9005AD082 /* DownloadWindow.xib */,
- 26CDCFF212E70AD1004FC66B /* BrowserWindow.xib */,
- 2666DC5B12F6D1770045E8B6 /* SearchWindow.xib */,
- 2625095012F72A8F0090D236 /* PreferencesWindow.xib */,
- 26376A4112F7FA67000F45FE /* HistoryWindow.xib */,
- 26376BAC12F820D7000F45FE /* BookmarksWindow.xib */,
- 26B4E926130D36A90003B527 /* LocalHistoryPanel.xib */,
- );
- name = Resources;
- path = res;
- sourceTree = "<group>";
- };
- 265F31C912D66A890048B600 /* image */ = {
- isa = PBXGroup;
- children = (
- 265F31CA12D66A890048B600 /* bitmap.h */,
- 265F31CB12D66A890048B600 /* bmp.c */,
- 265F31CC12D66A890048B600 /* bmp.h */,
- 265F31CD12D66A890048B600 /* gif.c */,
- 265F31CE12D66A890048B600 /* gif.h */,
- 265F31CF12D66A890048B600 /* ico.c */,
- 265F31D012D66A890048B600 /* ico.h */,
- 265F31D112D66A890048B600 /* jpeg.c */,
- 265F31D212D66A890048B600 /* jpeg.h */,
- 265F31D312D66A890048B600 /* mng.c */,
- 265F31D412D66A890048B600 /* mng.h */,
- 265F31D512D66A890048B600 /* nssprite.c */,
- 265F31D612D66A890048B600 /* nssprite.h */,
- 265F31D712D66A890048B600 /* png.c */,
- 265F31D812D66A890048B600 /* png.h */,
- 265F31D912D66A890048B600 /* rsvg.c */,
- 265F31DA12D66A890048B600 /* rsvg.h */,
- 265F31DB12D66A890048B600 /* svg.c */,
- 265F31DC12D66A890048B600 /* svg.h */,
- 265F31DD12D66A890048B600 /* webp.c */,
- 265F31DE12D66A890048B600 /* webp.h */,
- );
- name = image;
- path = ../image;
- sourceTree = SOURCE_ROOT;
- };
- 26CDCEB212E702D8004FC66B /* PSMTabBarControl */ = {
- isa = PBXGroup;
- children = (
- 26CDCFDB12E706FE004FC66B /* Images */,
- 26CDCEB312E702D8004FC66B /* NSBezierPath_AMShading.h */,
- 26CDCEB412E702D8004FC66B /* NSBezierPath_AMShading.m */,
- 26CDCEB512E702D8004FC66B /* NSString_AITruncation.h */,
- 26CDCEB612E702D8004FC66B /* NSString_AITruncation.m */,
- 26CDCEBD12E702D8004FC66B /* PSMOverflowPopUpButton.h */,
- 26CDCEBE12E702D8004FC66B /* PSMOverflowPopUpButton.m */,
- 26CDCEBF12E702D8004FC66B /* PSMProgressIndicator.h */,
- 26CDCEC012E702D8004FC66B /* PSMProgressIndicator.m */,
- 26CDCEC112E702D8004FC66B /* PSMRolloverButton.h */,
- 26CDCEC212E702D8004FC66B /* PSMRolloverButton.m */,
- 26CDCEC312E702D8004FC66B /* PSMTabBarCell.h */,
- 26CDCEC412E702D8004FC66B /* PSMTabBarCell.m */,
- 26CDCEC512E702D8004FC66B /* PSMTabBarControl.h */,
- 26CDCEC612E702D8004FC66B /* PSMTabBarControl.m */,
- 26CDCEC712E702D8004FC66B /* PSMTabBarController.h */,
- 26CDCEC812E702D8004FC66B /* PSMTabBarController.m */,
- 26CDCEC912E702D8004FC66B /* PSMTabDragAssistant.h */,
- 26CDCECA12E702D8004FC66B /* PSMTabDragAssistant.m */,
- 26CDCECB12E702D8004FC66B /* PSMTabDragView.h */,
- 26CDCECC12E702D8004FC66B /* PSMTabDragView.m */,
- 26CDCECD12E702D8004FC66B /* PSMTabDragWindow.h */,
- 26CDCECE12E702D8004FC66B /* PSMTabDragWindow.m */,
- 26CDCECF12E702D8004FC66B /* PSMTabDragWindowController.h */,
- 26CDCED012E702D8004FC66B /* PSMTabDragWindowController.m */,
- 26CDCED112E702D8004FC66B /* PSMTabStyle.h */,
- 26CDCED212E702D8004FC66B /* PSMUnifiedTabStyle.h */,
- 26CDCED312E702D8004FC66B /* PSMUnifiedTabStyle.m */,
- );
- path = PSMTabBarControl;
- sourceTree = "<group>";
- };
- 26CDCFDB12E706FE004FC66B /* Images */ = {
- isa = PBXGroup;
- children = (
- 26ABD61C12F02EB900407161 /* overflowImage.png */,
- 26ABD61D12F02EB900407161 /* overflowImagePressed.png */,
- 26ABD61E12F02EB900407161 /* pi.png */,
- 26CDCFDC12E706FE004FC66B /* AquaTabClose_Front.png */,
- 26CDCFDD12E706FF004FC66B /* AquaTabClose_Front_Pressed.png */,
- 26CDCFDE12E706FF004FC66B /* AquaTabClose_Front_Rollover.png */,
- 26CDCFDF12E706FF004FC66B /* AquaTabCloseDirty_Front.png */,
- 26CDCFE012E706FF004FC66B /* AquaTabCloseDirty_Front_Pressed.png */,
- 26CDCFE112E706FF004FC66B /* AquaTabCloseDirty_Front_Rollover.png */,
- 26CDCFE212E706FF004FC66B /* AquaTabNew.png */,
- 26CDCFE312E706FF004FC66B /* AquaTabNewPressed.png */,
- 26CDCFE412E706FF004FC66B /* AquaTabNewRollover.png */,
- );
- path = Images;
- sourceTree = "<group>";
- };
- 26CDD23E12E743A3004FC66B /* NetSurf */ = {
- isa = PBXGroup;
- children = (
- 260F1F6212D620E800D9B07F /* content */,
- 260F1F7812D620E800D9B07F /* css */,
- 260F1F8312D620E800D9B07F /* desktop */,
- 260F1FC612D620E800D9B07F /* render */,
- 265F31C912D66A890048B600 /* image */,
- 260F1FE212D620E800D9B07F /* utils */,
- );
- name = NetSurf;
- sourceTree = "<group>";
- };
- 26CDD26512E74402004FC66B /* Browser */ = {
- isa = PBXGroup;
- children = (
- 26121EFB12D7132100E10F91 /* BrowserView.h */,
- 26121EFC12D7132100E10F91 /* BrowserView.m */,
- 26CDD00112E70F56004FC66B /* BrowserWindowController.h */,
- 26CDD00212E70F56004FC66B /* BrowserWindowController.m */,
- 26CDD0F412E726E0004FC66B /* BrowserViewController.h */,
- 26CDD0F512E726E0004FC66B /* BrowserViewController.m */,
- 2666DC5D12F6D2E70045E8B6 /* SearchWindowController.h */,
- 2666DC5E12F6D2E70045E8B6 /* SearchWindowController.m */,
- 2666DD5012F706BC0045E8B6 /* BrowserWindow.h */,
- 2666DD5112F706BC0045E8B6 /* BrowserWindow.m */,
- 26B4E928130D37E50003B527 /* LocalHistoryController.h */,
- 26B4E929130D37E50003B527 /* LocalHistoryController.m */,
- );
- name = Browser;
- sourceTree = "<group>";
- };
- 26CDD26612E7441E004FC66B /* Views */ = {
- isa = PBXGroup;
- children = (
- 26B4E91A130D351F0003B527 /* ArrowBox.h */,
- 26B4E91B130D351F0003B527 /* ArrowBox.m */,
- 26B4E91C130D351F0003B527 /* ArrowWindow.h */,
- 26B4E91D130D351F0003B527 /* ArrowWindow.m */,
- 26B4E91E130D351F0003B527 /* BlackScroller.h */,
- 26B4E91F130D351F0003B527 /* BlackScroller.m */,
- 26AFE8E212DF4200005AD082 /* ScrollableView.h */,
- 26AFE8E312DF4200005AD082 /* ScrollableView.m */,
- 26EC3B6812ED62C0000A960C /* URLFieldCell.h */,
- 26EC3B6912ED62C0000A960C /* URLFieldCell.m */,
- 26EC3C4212ED8202000A960C /* HistoryView.h */,
- 26EC3C4312ED8202000A960C /* HistoryView.m */,
- 26EC3F1612EF0CBD000A960C /* FormSelectMenu.h */,
- 26EC3F1712EF0CBD000A960C /* FormSelectMenu.m */,
- );
- name = Views;
- sourceTree = "<group>";
- };
- 26CDD26712E74453004FC66B /* Download */ = {
- isa = PBXGroup;
- children = (
- 26AFEAE912E04253005AD082 /* DownloadWindowController.h */,
- 26AFEAEA12E04253005AD082 /* DownloadWindowController.m */,
- );
- name = Download;
- sourceTree = "<group>";
- };
- 26CDD26812E74461004FC66B /* NSApplication */ = {
- isa = PBXGroup;
- children = (
- 263629C812F69B120048542C /* NetsurfApp.h */,
- 263629C912F69B120048542C /* NetsurfApp.m */,
- 26AFE97A12DF514C005AD082 /* NetSurfAppDelegate.h */,
- 26AFE97B12DF514C005AD082 /* NetSurfAppDelegate.m */,
- );
- name = NSApplication;
- sourceTree = "<group>";
- };
- 26CDD26912E7446E004FC66B /* Platform Interface */ = {
- isa = PBXGroup;
- children = (
- 263629CA12F69B120048542C /* system_colour.m */,
- 264C344112F0987E00D11246 /* gui.h */,
- 265F311912D663F50048B600 /* gui.m */,
- 261223CB12D7805300E10F91 /* plotter.h */,
- 265F314712D666660048B600 /* plotter.m */,
- 265F316112D667E10048B600 /* schedule.m */,
- 265F316612D668130048B600 /* thumbnail.m */,
- 265F316F12D668790048B600 /* fetch.m */,
- 265F319012D668DB0048B600 /* url.m */,
- 265F31C412D66A0D0048B600 /* save.m */,
- 260FC03112D85ACE00079C00 /* bitmap.h */,
- 265F31EB12D66B190048B600 /* bitmap.m */,
- 265F320512D66C200048B600 /* utf8.m */,
- 265F321312D66CD90048B600 /* utils.m */,
- 261223B712D77F9C00E10F91 /* font.h */,
- 265F321E12D66D510048B600 /* font.m */,
- 26AFED0312E09916005AD082 /* selection.m */,
- 2639E20512F2ADEE00699678 /* coordinates.h */,
- );
- name = "Platform Interface";
- sourceTree = "<group>";
- };
- 29B97314FDCFA39411CA2CEA /* Untitled */ = {
- isa = PBXGroup;
- children = (
- 265F303F12D6637E0048B600 /* Cocoa Frontend */,
- 26CDD23E12E743A3004FC66B /* NetSurf */,
- 263629B212F69A080048542C /* Makefiles */,
- 261DB24E1318443500C59F12 /* Tools */,
- 19C28FACFE9D520D11CA2CBB /* Products */,
- );
- name = Untitled;
- sourceTree = "<group>";
- };
-/* End PBXGroup section */
-
-/* Begin PBXLegacyTarget section */
- 2636298F12F698E00048542C /* NetSurf */ = {
- isa = PBXLegacyTarget;
- buildArgumentsString = "$(ACTION) MKDIR=\"mkdir -p\"";
- buildConfigurationList = 2636299512F699250048542C /* Build configuration list for PBXLegacyTarget "NetSurf" */;
- buildPhases = (
- );
- buildToolPath = /usr/bin/make;
- buildWorkingDirectory = "$(SRCROOT)/..";
- dependencies = (
- );
- name = NetSurf;
- passBuildSettingsInEnvironment = 1;
- productName = NetSurf;
- };
-/* End PBXLegacyTarget section */
-
-/* Begin PBXProject section */
- 29B97313FDCFA39411CA2CEA /* Project object */ = {
- isa = PBXProject;
- attributes = {
- BuildIndependentTargetsInParallel = YES;
- };
- buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "NetSurf" */;
- compatibilityVersion = "Xcode 3.1";
- developmentRegion = English;
- hasScannedForEncodings = 1;
- knownRegions = (
- English,
- Japanese,
- French,
- German,
- de,
- en,
- fr,
- it,
- nl,
- );
- mainGroup = 29B97314FDCFA39411CA2CEA /* Untitled */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 2636298F12F698E00048542C /* NetSurf */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXVariantGroup section */
- 2612268F12D7AE4100E10F91 /* Messages */ = {
- isa = PBXVariantGroup;
- children = (
- 2612269012D7AE4100E10F91 /* de */,
- 2612269312D7AE9B00E10F91 /* nl */,
- 2612269412D7AEA800E10F91 /* en */,
- 2612269512D7AEB500E10F91 /* it */,
- 2612269612D7AEBE00E10F91 /* fr */,
- );
- name = Messages;
- sourceTree = "<group>";
- };
- 261DB22113180AFF00C59F12 /* Localizable.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 261DB22213180AFF00C59F12 /* en */,
- 261DB22613180B4F00C59F12 /* de */,
- 261DB23313180CD600C59F12 /* fr */,
- 261DB23413180CE000C59F12 /* it */,
- 261DB23513180CEE00C59F12 /* nl */,
- );
- name = Localizable.strings;
- sourceTree = "<group>";
- };
- 261DB28F13185C0A00C59F12 /* BookmarksWindow.xib.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 261DB29013185C0A00C59F12 /* de */,
- );
- name = BookmarksWindow.xib.strings;
- sourceTree = "<group>";
- };
- 261DB29313185C0A00C59F12 /* BrowserWindow.xib.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 261DB29413185C0A00C59F12 /* de */,
- );
- name = BrowserWindow.xib.strings;
- sourceTree = "<group>";
- };
- 261DB29513185C0A00C59F12 /* DownloadWindow.xib.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 261DB29613185C0A00C59F12 /* de */,
- );
- name = DownloadWindow.xib.strings;
- sourceTree = "<group>";
- };
- 261DB29713185C0A00C59F12 /* HistoryWindow.xib.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 261DB29813185C0A00C59F12 /* de */,
- );
- name = HistoryWindow.xib.strings;
- sourceTree = "<group>";
- };
- 261DB29B13185C0A00C59F12 /* MainMenu.xib.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 261DB29C13185C0A00C59F12 /* de */,
- );
- name = MainMenu.xib.strings;
- sourceTree = "<group>";
- };
- 261DB29D13185C0A00C59F12 /* PreferencesWindow.xib.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 261DB29E13185C0A00C59F12 /* de */,
- );
- name = PreferencesWindow.xib.strings;
- sourceTree = "<group>";
- };
- 261DB29F13185C0A00C59F12 /* SearchWindow.xib.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 261DB2A013185C0A00C59F12 /* de */,
- );
- name = SearchWindow.xib.strings;
- sourceTree = "<group>";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- 2636299012F698E10048542C /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- PRODUCT_NAME = NetSurf;
- };
- name = Debug;
- };
- 2636299112F698E10048542C /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- MKDIR = "mkdir -p";
- PRODUCT_NAME = NetSurf;
- };
- name = Release;
- };
- C01FCF4F08A954540054247B /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = macosx10.5;
- };
- name = Debug;
- };
- C01FCF5008A954540054247B /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
- ONLY_ACTIVE_ARCH = NO;
- SDKROOT = macosx10.5;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 2636299512F699250048542C /* Build configuration list for PBXLegacyTarget "NetSurf" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 2636299012F698E10048542C /* Debug */,
- 2636299112F698E10048542C /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- C01FCF4E08A954540054247B /* Build configuration list for PBXProject "NetSurf" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- C01FCF4F08A954540054247B /* Debug */,
- C01FCF5008A954540054247B /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
-}
diff --git a/frontends/cocoa/NetSurfAppDelegate.h b/frontends/cocoa/NetSurfAppDelegate.h
deleted file mode 100644
index a22c4ce..0000000
--- a/frontends/cocoa/NetSurfAppDelegate.h
+++ b/dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-@class SearchWindowController;
-@class PreferencesWindowController;
-@class HistoryWindowController;
-
-@interface NetSurfAppDelegate : NSObject {
- SearchWindowController *search;
- PreferencesWindowController *preferences;
- HistoryWindowController *history;
-}
-
-@property (readwrite, retain, nonatomic) SearchWindowController *search;
-@property (readwrite, retain, nonatomic) PreferencesWindowController *preferences;
-@property (readwrite, retain, nonatomic) HistoryWindowController *history;
-
-- (IBAction) showSearchWindow: (id) sender;
-- (IBAction) searchForward: (id) sender;
-- (IBAction) searchBackward: (id) sender;
-
-- (IBAction) showPreferences: (id) sender;
-- (IBAction) showGlobalHistory: (id) sender;
-
-@end
diff --git a/frontends/cocoa/NetSurfAppDelegate.m b/frontends/cocoa/NetSurfAppDelegate.m
deleted file mode 100644
index 0939a11..0000000
--- a/frontends/cocoa/NetSurfAppDelegate.m
+++ b/dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "utils/nsoption.h"
-#import "utils/messages.h"
-#import "utils/utils.h"
-#import "utils/nsurl.h"
-#import "netsurf/browser_window.h"
-
-#import "cocoa/gui.h"
-#import "cocoa/NetSurfAppDelegate.h"
-#import "cocoa/SearchWindowController.h"
-#import "cocoa/PreferencesWindowController.h"
-#import "cocoa/HistoryWindowController.h"
-
-
-@interface NetSurfAppDelegate ()
-
-- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent;
-
-@end
-
-
-@implementation NetSurfAppDelegate
-
-@synthesize history;
-@synthesize search;
-@synthesize preferences;
-
-- (void) newDocument: (id) sender;
-{
- nsurl *url;
- nserror error;
-
- if (nsoption_charp(homepage_url) != NULL) {
- error = nsurl_create(nsoption_charp(homepage_url), &url);
- } else {
- error = nsurl_create(NETSURF_HOMEPAGE, &url);
- }
-
- if (error == NSERROR_OK) {
- error = browser_window_create(BW_CREATE_HISTORY,
- url,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
- if (error != NSERROR_OK) {
- cocoa_warning(messages_get_errorcode(error), 0);
- }
-}
-
-- (void) openDocument: (id) sender;
-{
- nsurl *u;
- nserror error;
-
- NSOpenPanel *openPanel = [NSOpenPanel openPanel];
- [openPanel setAllowsMultipleSelection: YES];
- if ([openPanel runModalForTypes: nil] == NSOKButton) {
- for (NSURL *url in [openPanel URLs]) {
- error = nsurl_create([[url absoluteString] UTF8String], &u);
- if (error == NSERROR_OK) {
- error = browser_window_create(BW_CREATE_HISTORY,
- u,
- NULL,
- NULL,
- NULL);
- nsurl_unref(u);
- }
- if (error != NSERROR_OK) {
- cocoa_warning(messages_get_errorcode(error), 0);
- }
- }
- }
-}
-
-- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
-{
- nsurl *url;
- nserror error;
- NSString *urlAsString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
-
- error = nsurl_create([urlAsString UTF8String], &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(BW_CREATE_HISTORY,
- url,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
- if (error != NSERROR_OK) {
- cocoa_warning(messages_get_errorcode(error), 0);
- }
-}
-
-- (IBAction) showSearchWindow: (id) sender;
-{
- if (search == nil) {
- [self setSearch: [[[SearchWindowController alloc] init] autorelease]];
- }
- [[search window] makeKeyAndOrderFront: self];
-}
-
-- (IBAction) searchForward: (id) sender;
-{
- [search search: SearchForward];
-}
-
-- (IBAction) searchBackward: (id) sender;
-{
- [search search: SearchBackward];
-}
-
-- (BOOL) validateMenuItem: (id) item;
-{
- SEL action = [item action];
-
- if (action == @selector( searchForward: )) {
- return [search canGoForward];
- } else if (action == @selector( searchBackward: )) {
- return [search canGoBack];
- }
-
- return YES;
-}
-
-- (IBAction) showPreferences: (id) sender;
-{
- if (preferences == nil) {
- [self setPreferences: [[[PreferencesWindowController alloc] init] autorelease]];
- }
- [preferences showWindow: sender];
-}
-
-- (IBAction) showGlobalHistory: (id) sender;
-{
- if (history == nil) {
- [self setHistory: [[[HistoryWindowController alloc] init] autorelease]];
- }
- [history showWindow: sender];
-}
-
-// Application delegate methods
-
-- (BOOL) applicationOpenUntitledFile: (NSApplication *)sender;
-{
- [self newDocument: self];
- return YES;
-}
-
--(void)applicationWillFinishLaunching:(NSNotification *)aNotification
-{
- NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
- [appleEventManager setEventHandler:self
- andSelector:@selector(handleGetURLEvent:withReplyEvent:)
- forEventClass:kInternetEventClass andEventID:kAEGetURL];
-}
-
-- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
-{
- nsurl *url;
- nserror error;
- NSURL *urltxt = [NSURL fileURLWithPath: filename];
-
- error = nsurl_create([[urltxt absoluteString] UTF8String], &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(BW_CREATE_HISTORY,
- url,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
- if (error != NSERROR_OK) {
- cocoa_warning(messages_get_errorcode(error), 0);
- }
-
- return YES;
-}
-
-
-@end
diff --git a/frontends/cocoa/NetsurfApp.h b/frontends/cocoa/NetsurfApp.h
deleted file mode 100644
index 330f338..0000000
--- a/frontends/cocoa/NetsurfApp.h
+++ b/dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-@class BrowserViewController;
-
-@interface NetSurfApp : NSApplication {
- BrowserViewController *frontTab;
-}
-
-@property (readwrite, assign, nonatomic) BrowserViewController *frontTab;
-
-@end
-
-NSString *cocoa_get_user_path( NSString *fileName );
diff --git a/frontends/cocoa/NetsurfApp.m b/frontends/cocoa/NetsurfApp.m
deleted file mode 100644
index 7d49e0b..0000000
--- a/frontends/cocoa/NetsurfApp.m
+++ b/dev/null
@@ -1,303 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "cocoa/apple_image.h"
-#import "cocoa/NetsurfApp.h"
-#import "cocoa/gui.h"
-#import "cocoa/plotter.h"
-#import "cocoa/DownloadWindowController.h"
-#import "cocoa/SearchWindowController.h"
-#import "cocoa/selection.h"
-#import "cocoa/fetch.h"
-#import "cocoa/bitmap.h"
-#import "cocoa/font.h"
-
-#import "utils/filename.h"
-#import "utils/log.h"
-#import "utils/messages.h"
-#import "utils/utils.h"
-#import "utils/nsoption.h"
-#import "utils/nsurl.h"
-#import "netsurf/plotters.h"
-#import "netsurf/mouse.h"
-#import "netsurf/netsurf.h"
-#import "netsurf/browser_window.h"
-#import "netsurf/cookie_db.h"
-#import "netsurf/url_db.h"
-#import "desktop/save_complete.h"
-#import "cocoa/desktop-tree.h"
-
-#ifndef NETSURF_HOMEPAGE
-#define NETSURF_HOMEPAGE "http://www.netsurf-browser.org/welcome/"
-#endif
-
-@implementation NetSurfApp
-
-@synthesize frontTab;
-
-static bool cocoa_done = false;
-
-/**
- * Cause an abnormal program termination.
- *
- * \note This never returns and is intended to terminate without any cleanup.
- *
- * \param error The message to display to the user.
- */
-static void die(const char * const error)
-{
- [NSException raise: @"NetsurfDie" format: @"Error: %s", error];
-}
-
-- (void) loadOptions
-{
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- [defaults registerDefaults: [NSDictionary dictionaryWithObjectsAndKeys:
- cocoa_get_user_path( @"Cookies" ),
- kCookiesFileOption,
- cocoa_get_user_path( @"URLs" ),
- kURLsFileOption,
- [NSString stringWithUTF8String: NETSURF_HOMEPAGE],
- kHomepageURLOption,
- nil]];
-
-
- nsoption_setnull_charp(cookie_file, strdup( [[defaults objectForKey: kCookiesFileOption] UTF8String] ));
-
- nsoption_setnull_charp(cookie_jar, strdup( nsoption_charp(cookie_file) ));
-
- nsoption_setnull_charp(homepage_url, strdup( [[defaults objectForKey: kHomepageURLOption] UTF8String] ));
-
- urldb_load( [[defaults objectForKey: kURLsFileOption] UTF8String] );
- urldb_load_cookies( nsoption_charp(cookie_file) );
-
- cocoa_update_scale_factor();
- LOG("done setup");
-}
-
-- (void) saveOptions
-{
- urldb_save_cookies( nsoption_charp(cookie_file) );
- urldb_save( [[[NSUserDefaults standardUserDefaults] objectForKey: kURLsFileOption] UTF8String] );
-}
-
-- (void) run
-{
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
- [self finishLaunching];
-
- [self loadOptions];
-
- while (!cocoa_done) {
- [pool release];
- pool = [[NSAutoreleasePool alloc] init];
-
- NSEvent *event =
- [self nextEventMatchingMask: NSAnyEventMask
- untilDate: [NSDate distantFuture]
- inMode: NSDefaultRunLoopMode
- dequeue: YES];
- if (nil != event) {
- [self sendEvent: event];
- [self updateWindows];
- }
-
- }
-
- [self saveOptions];
-
- [pool release];
-}
-
--(void) terminate: (id)sender
-{
- [[NSNotificationCenter defaultCenter] postNotificationName:NSApplicationWillTerminateNotification object:self];
-
- cocoa_done = true;
- [self postEvent: [NSEvent otherEventWithType: NSApplicationDefined
- location: NSZeroPoint
- modifierFlags: 0
- timestamp: 0
- windowNumber: 0
- context: NULL
- subtype: 0
- data1: 0
- data2: 0]
- atStart: YES];
-}
-
-@end
-
-#pragma mark -
-
-static NSString *cocoa_get_preferences_path( void )
-{
- NSArray *paths = NSSearchPathForDirectoriesInDomains( NSApplicationSupportDirectory, NSUserDomainMask, YES );
- NSCAssert( [paths count] >= 1, @"Where is the application support directory?" );
-
- NSString *netsurfPath = [[paths objectAtIndex: 0] stringByAppendingPathComponent: @"NetSurf"];
-
- NSFileManager *fm = [NSFileManager defaultManager];
- BOOL isDirectory = NO;
- BOOL exists = [fm fileExistsAtPath: netsurfPath isDirectory: &isDirectory];
-
- if (!exists) {
- exists = [fm createDirectoryAtPath: netsurfPath withIntermediateDirectories: YES attributes: nil error: NULL];
- isDirectory = YES;
- }
- if (!(exists && isDirectory)) {
- die( "Cannot create netsurf preferences directory" );
- }
-
- return netsurfPath;
-}
-
-NSString *cocoa_get_user_path( NSString *fileName )
-{
- return [cocoa_get_preferences_path() stringByAppendingPathComponent: fileName];
-}
-
-static const char *cocoa_get_options_file( void )
-{
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- [defaults registerDefaults: [NSDictionary dictionaryWithObjectsAndKeys:
- cocoa_get_user_path( @"Options" ), kOptionsFileOption,
- nil]];
-
- return [[defaults objectForKey: kOptionsFileOption] UTF8String];
-}
-
-static NSApplication *cocoa_prepare_app( void )
-{
- /* if application instance has already been created return it */
- if (NSApp != nil) {
- return NSApp;
- }
-
- NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
-
- /* Obtain principle class of bundle which must implement sharedApplication API */
- Class principalClass = NSClassFromString([infoDictionary objectForKey:@"NSPrincipalClass"]);
- NSCAssert([principalClass respondsToSelector:@selector(sharedApplication)],
- @"Principal class must implement sharedApplication.");
-
- /* create application instance */
- [principalClass sharedApplication];
-
- /* load interface nib */
- NSString *mainNibName = [infoDictionary objectForKey:@"NSMainNibFile"];
- NSNib *mainNib = [[NSNib alloc] initWithNibNamed:mainNibName bundle:[NSBundle mainBundle]];
- [mainNib instantiateNibWithOwner:NSApp topLevelObjects:nil];
- [mainNib release];
-
- return NSApp;
-}
-
-/**
- * Set option defaults for cocoa frontend
- *
- * @param defaults The option table to update.
- * @return error status.
- */
-static nserror set_defaults(struct nsoption_s *defaults)
-{
- /* Set defaults for absent option strings */
- const char * const ca_bundle = [[[NSBundle mainBundle] pathForResource: @"ca-bundle" ofType: @""] UTF8String];
-
- nsoption_setnull_charp(ca_bundle, strdup(ca_bundle));
-
- return NSERROR_OK;
-}
-
-int main( int argc, char **argv )
-{
- nsurl *url;
- nserror error;
- struct netsurf_table cocoa_table = {
- .misc = cocoa_misc_table,
- .window = cocoa_window_table,
- .clipboard = cocoa_clipboard_table,
- .download = cocoa_download_table,
- .fetch = cocoa_fetch_table,
- .search = cocoa_search_table,
- .bitmap = cocoa_bitmap_table,
- .layout = cocoa_layout_table,
- };
-
- error = netsurf_register(&cocoa_table);
- if (error != NSERROR_OK) {
- die("NetSurf operation table failed registration");
- }
-
- const char * const messages = [[[NSBundle mainBundle] pathForResource: @"Messages" ofType: @""] UTF8String];
- const char * const options = cocoa_get_options_file();
-
- /* initialise logging. Not fatal if it fails but not much we
- * can do about it either.
- */
- nslog_init(NULL, &argc, argv);
-
- /* user options setup */
- error = nsoption_init(set_defaults, &nsoptions, &nsoptions_default);
- if (error != NSERROR_OK) {
- die("Options failed to initialise");
- }
- nsoption_read(options, NULL);
- nsoption_commandline(&argc, argv, NULL);
-
- error = messages_add_from_file(messages);
-
- /* common initialisation */
- error = netsurf_init(NULL);
- if (error != NSERROR_OK) {
- die("NetSurf failed to initialise");
- }
-
- /* Initialise filename allocator */
- filename_initialise();
-
- (void)apple_image_init();
-
- NSApplication *app = cocoa_prepare_app();
-
- for (int i = 1; i < argc; i++) {
- /* skip -psn_* and other possible options */
- if (argv[i][0] == '-')
- continue;
-
- error = nsurl_create(argv[i], &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(BW_CREATE_HISTORY,
- url,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
- if (error != NSERROR_OK) {
- cocoa_warning(messages_get_errorcode(error), 0);
- }
- }
-
- [app run];
-
- netsurf_exit();
-
- return 0;
-}
diff --git a/frontends/cocoa/PSMTabBarControl/Images/AquaTabCloseDirty_Front.png b/frontends/cocoa/PSMTabBarControl/Images/AquaTabCloseDirty_Front.png
deleted file mode 100644
index 77d2205..0000000
--- a/frontends/cocoa/PSMTabBarControl/Images/AquaTabCloseDirty_Front.png
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PSMTabBarControl/Images/AquaTabCloseDirty_Front_Pressed.png b/frontends/cocoa/PSMTabBarControl/Images/AquaTabCloseDirty_Front_Pressed.png
deleted file mode 100644
index 197ea95..0000000
--- a/frontends/cocoa/PSMTabBarControl/Images/AquaTabCloseDirty_Front_Pressed.png
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PSMTabBarControl/Images/AquaTabCloseDirty_Front_Rollover.png b/frontends/cocoa/PSMTabBarControl/Images/AquaTabCloseDirty_Front_Rollover.png
deleted file mode 100644
index 2dfe577..0000000
--- a/frontends/cocoa/PSMTabBarControl/Images/AquaTabCloseDirty_Front_Rollover.png
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PSMTabBarControl/Images/AquaTabClose_Front.png b/frontends/cocoa/PSMTabBarControl/Images/AquaTabClose_Front.png
deleted file mode 100644
index 02b72d3..0000000
--- a/frontends/cocoa/PSMTabBarControl/Images/AquaTabClose_Front.png
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PSMTabBarControl/Images/AquaTabClose_Front_Pressed.png b/frontends/cocoa/PSMTabBarControl/Images/AquaTabClose_Front_Pressed.png
deleted file mode 100644
index f81125a..0000000
--- a/frontends/cocoa/PSMTabBarControl/Images/AquaTabClose_Front_Pressed.png
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PSMTabBarControl/Images/AquaTabClose_Front_Rollover.png b/frontends/cocoa/PSMTabBarControl/Images/AquaTabClose_Front_Rollover.png
deleted file mode 100644
index 4f6b865..0000000
--- a/frontends/cocoa/PSMTabBarControl/Images/AquaTabClose_Front_Rollover.png
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PSMTabBarControl/Images/AquaTabNew.png b/frontends/cocoa/PSMTabBarControl/Images/AquaTabNew.png
deleted file mode 100644
index 10a8370..0000000
--- a/frontends/cocoa/PSMTabBarControl/Images/AquaTabNew.png
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PSMTabBarControl/Images/AquaTabNewPressed.png b/frontends/cocoa/PSMTabBarControl/Images/AquaTabNewPressed.png
deleted file mode 100644
index cb4dd10..0000000
--- a/frontends/cocoa/PSMTabBarControl/Images/AquaTabNewPressed.png
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PSMTabBarControl/Images/AquaTabNewRollover.png b/frontends/cocoa/PSMTabBarControl/Images/AquaTabNewRollover.png
deleted file mode 100644
index 4d469f8..0000000
--- a/frontends/cocoa/PSMTabBarControl/Images/AquaTabNewRollover.png
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PSMTabBarControl/Images/overflowImage.png b/frontends/cocoa/PSMTabBarControl/Images/overflowImage.png
deleted file mode 100644
index 2b76255..0000000
--- a/frontends/cocoa/PSMTabBarControl/Images/overflowImage.png
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PSMTabBarControl/Images/overflowImagePressed.png b/frontends/cocoa/PSMTabBarControl/Images/overflowImagePressed.png
deleted file mode 100644
index b3918b3..0000000
--- a/frontends/cocoa/PSMTabBarControl/Images/overflowImagePressed.png
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PSMTabBarControl/Images/pi.png b/frontends/cocoa/PSMTabBarControl/Images/pi.png
deleted file mode 100644
index 4d598dc..0000000
--- a/frontends/cocoa/PSMTabBarControl/Images/pi.png
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PSMTabBarControl/NSBezierPath_AMShading.h b/frontends/cocoa/PSMTabBarControl/NSBezierPath_AMShading.h
deleted file mode 100644
index fd2c2dd..0000000
--- a/frontends/cocoa/PSMTabBarControl/NSBezierPath_AMShading.h
+++ b/dev/null
@@ -1,23 +0,0 @@
-//
-// NSBezierPath_AMShading.h
-// ------------------------
-//
-// Created by Andreas on 2005-06-01.
-// Copyright 2005 Andreas Mayer. All rights reserved.
-//
-// based on http://www.cocoadev.com/index.pl?GradientFill
-
-
-#import <Cocoa/Cocoa.h>
-
-@interface NSBezierPath (AMShading)
-
-- (void)customHorizontalFillWithCallbacks:(CGFunctionCallbacks) functionCallbacks firstColor:(NSColor *)firstColor secondColor:(NSColor *)secondColor;
-- (void)customVerticalFillWithCallbacks:(CGFunctionCallbacks) functionCallbacks firstColor:(NSColor *)firstColor secondColor:(NSColor *)secondColor;
-
-- (void)linearGradientFillWithStartColor:(NSColor *)startColor endColor:(NSColor *)endColor;
-- (void)linearVerticalGradientFillWithStartColor:(NSColor *)startColor endColor:(NSColor *)endColor;
-
-- (void)bilinearGradientFillWithOuterColor:(NSColor *)outerColor innerColor:(NSColor *)innerColor;
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/NSBezierPath_AMShading.m b/frontends/cocoa/PSMTabBarControl/NSBezierPath_AMShading.m
deleted file mode 100644
index 30ee240..0000000
--- a/frontends/cocoa/PSMTabBarControl/NSBezierPath_AMShading.m
+++ b/dev/null
@@ -1,119 +0,0 @@
-//
-// NSBezierPath_AMShading.m
-// ------------------------
-//
-// Created by Andreas on 2005-06-01.
-// Copyright 2005 Andreas Mayer. All rights reserved.
-//
-
-#import "NSBezierPath_AMShading.h"
-
-
-@implementation NSBezierPath (AMShading)
-
-static void linearShadedColor(void *info, const CGFloat *in, CGFloat *out){
- CGFloat *colors = (CGFloat *)info;
- *out++ = colors[0] + *in * colors[8];
- *out++ = colors[1] + *in * colors[9];
- *out++ = colors[2] + *in * colors[10];
- *out++ = colors[3] + *in * colors[11];
-}
-
-static void bilinearShadedColor(void *info, const CGFloat *in, CGFloat *out){
- CGFloat *colors = (CGFloat *)info;
- CGFloat factor = (*in) * 2.0;
- if(*in > 0.5) {
- factor = 2 - factor;
- }
- *out++ = colors[0] + factor * colors[8];
- *out++ = colors[1] + factor * colors[9];
- *out++ = colors[2] + factor * colors[10];
- *out++ = colors[3] + factor * colors[11];
-}
-
-- (void)linearGradientFillWithStartColor:(NSColor *)startColor endColor:(NSColor *)endColor {
- static const CGFunctionCallbacks callbacks = {0, &linearShadedColor, NULL};
-
- [self customHorizontalFillWithCallbacks:callbacks firstColor:startColor secondColor:endColor];
-}
-
-- (void)linearVerticalGradientFillWithStartColor:(NSColor *)startColor endColor:(NSColor *)endColor {
- static const CGFunctionCallbacks callbacks = {0, &linearShadedColor, NULL};
-
- [self customVerticalFillWithCallbacks:callbacks firstColor:startColor secondColor:endColor];
-}
-
-- (void)bilinearGradientFillWithOuterColor:(NSColor *)outerColor innerColor:(NSColor *)innerColor {
- static const CGFunctionCallbacks callbacks = {0, &bilinearShadedColor, NULL};
-
- [self customHorizontalFillWithCallbacks:callbacks firstColor:innerColor secondColor:outerColor];
-}
-
-- (void)customFillWithCallbacks:(CGFunctionCallbacks)functionCallbacks firstColor:(NSColor *)firstColor secondColor:(NSColor *)secondColor startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint {
- CGColorSpaceRef colorspace;
- CGShadingRef shading;
- CGFunctionRef function;
- CGFloat colors[12]; // pointer to color values
-
- // get my context
- CGContextRef currentContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
-
- NSColor *deviceDependentFirstColor = [firstColor colorUsingColorSpaceName:NSDeviceRGBColorSpace];
- NSColor *deviceDependentSecondColor = [secondColor colorUsingColorSpaceName:NSDeviceRGBColorSpace];
-
- // set up colors for gradient
- colors[0] = [deviceDependentFirstColor redComponent];
- colors[1] = [deviceDependentFirstColor greenComponent];
- colors[2] = [deviceDependentFirstColor blueComponent];
- colors[3] = [deviceDependentFirstColor alphaComponent];
-
- colors[4] = [deviceDependentSecondColor redComponent];
- colors[5] = [deviceDependentSecondColor greenComponent];
- colors[6] = [deviceDependentSecondColor blueComponent];
- colors[7] = [deviceDependentSecondColor alphaComponent];
-
- // difference between start and end color for each color components
- colors[8] = (colors[4] - colors[0]);
- colors[9] = (colors[5] - colors[1]);
- colors[10] = (colors[6] - colors[2]);
- colors[11] = (colors[7] - colors[3]);
-
- // draw gradient
- colorspace = CGColorSpaceCreateDeviceRGB();
- size_t components = 1 + CGColorSpaceGetNumberOfComponents(colorspace);
- static const CGFloat domain[2] = {0.0, 1.0};
- static const CGFloat range[10] = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1};
- //static const CGFunctionCallbacks callbacks = {0, &bilinearShadedColor, NULL};
-
- // Create a CGFunctionRef that describes a function taking 1 input and kChannelsPerColor outputs.
- function = CGFunctionCreate(colors, 1, domain, components, range, &functionCallbacks);
-
- shading = CGShadingCreateAxial(colorspace, startPoint, endPoint, function, NO, NO);
-
- CGContextSaveGState(currentContext);
- [self addClip];
- CGContextDrawShading(currentContext, shading);
- CGContextRestoreGState(currentContext);
-
- CGShadingRelease(shading);
- CGFunctionRelease(function);
- CGColorSpaceRelease(colorspace);
-}
-
-- (void)customHorizontalFillWithCallbacks:(CGFunctionCallbacks)functionCallbacks firstColor:(NSColor *)firstColor secondColor:(NSColor *)secondColor {
- [self customFillWithCallbacks:functionCallbacks
- firstColor:firstColor
- secondColor:secondColor
- startPoint:CGPointMake(0, NSMinY([self bounds]))
- endPoint:CGPointMake(0, NSMaxY([self bounds]))];
-}
-
-- (void)customVerticalFillWithCallbacks:(CGFunctionCallbacks)functionCallbacks firstColor:(NSColor *)firstColor secondColor:(NSColor *)secondColor {
- [self customFillWithCallbacks:functionCallbacks
- firstColor:firstColor
- secondColor:secondColor
- startPoint:CGPointMake(NSMinX([self bounds]), 0)
- endPoint:CGPointMake(NSMaxX([self bounds]), 0)];
-}
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/NSString_AITruncation.h b/frontends/cocoa/PSMTabBarControl/NSString_AITruncation.h
deleted file mode 100644
index cbcbf2c..0000000
--- a/frontends/cocoa/PSMTabBarControl/NSString_AITruncation.h
+++ b/dev/null
@@ -1,12 +0,0 @@
-//
-// NSString_AITruncation.h
-// PSMTabBarControl
-//
-// Created by Evan Schoenberg on 7/14/07.
-//
-
-#import <Cocoa/Cocoa.h>
-
-@interface NSString (AITruncation)
-- (NSString *)stringWithEllipsisByTruncatingToLength:(NSUInteger)length;
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/NSString_AITruncation.m b/frontends/cocoa/PSMTabBarControl/NSString_AITruncation.m
deleted file mode 100644
index 1a54502..0000000
--- a/frontends/cocoa/PSMTabBarControl/NSString_AITruncation.m
+++ b/dev/null
@@ -1,32 +0,0 @@
-//
-// NSString_AITruncation.m
-// PSMTabBarControl
-//
-// Created by Evan Schoenberg on 7/14/07.
-// From Adium, which is licensed under the GPL. Used in PSMTabBarControl with permission.
-// The contents of this remain licensed under the GPL.
-//
-
-#import "NSString_AITruncation.h"
-
-@implementation NSString (AITruncation)
-
-+ (id)ellipsis {
- return [NSString stringWithUTF8String:"\xE2\x80\xA6"];
-}
-
-- (NSString *)stringWithEllipsisByTruncatingToLength:(NSUInteger)length {
- NSString *returnString;
-
- if(length < [self length]) {
- //Truncate and append the ellipsis
- returnString = [[self substringToIndex:length - 1] stringByAppendingString:[NSString ellipsis]];
- } else {
- //We don't need to truncate, so don't append an ellipsis
- returnString = [[self copy] autorelease];
- }
-
- return returnString;
-}
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMOverflowPopUpButton.h b/frontends/cocoa/PSMTabBarControl/PSMOverflowPopUpButton.h
deleted file mode 100644
index decda5b..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMOverflowPopUpButton.h
+++ b/dev/null
@@ -1,28 +0,0 @@
-//
-// PSMOverflowPopUpButton.h
-// PSMTabBarControl
-//
-// Created by John Pannell on 11/4/05.
-// Copyright 2005 Positive Spin Media. All rights reserved.
-//
-
-#import <Cocoa/Cocoa.h>
-
-
-@interface PSMOverflowPopUpButton : NSPopUpButton {
- NSImage *_PSMTabBarOverflowPopUpImage;
- NSImage *_PSMTabBarOverflowDownPopUpImage;
- BOOL _down;
- BOOL _animatingAlternateImage;
- NSTimer *_animationTimer;
- CGFloat _animationValue;
-}
-
-//alternate image display
-- (BOOL)animatingAlternateImage;
-- (void)setAnimatingAlternateImage:(BOOL)flag;
-
-// archiving
-- (void)encodeWithCoder:(NSCoder *)aCoder;
-- (id)initWithCoder:(NSCoder *)aDecoder;
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMOverflowPopUpButton.m b/frontends/cocoa/PSMTabBarControl/PSMOverflowPopUpButton.m
deleted file mode 100644
index c316f69..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMOverflowPopUpButton.m
+++ b/dev/null
@@ -1,152 +0,0 @@
-//
-// PSMOverflowPopUpButton.m
-// PSMTabBarControl
-//
-// Created by John Pannell on 11/4/05.
-// Copyright 2005 Positive Spin Media. All rights reserved.
-//
-
-#import "PSMOverflowPopUpButton.h"
-#import "PSMTabBarControl.h"
-
-#define TIMER_INTERVAL 1.0 / 15.0
-#define ANIMATION_STEP 0.033f
-
-@implementation PSMOverflowPopUpButton
-
-- (id)initWithFrame:(NSRect)frameRect pullsDown:(BOOL)flag {
- if ((self = [super initWithFrame:frameRect pullsDown:YES]) != nil) {
- [self setBezelStyle:NSRegularSquareBezelStyle];
- [self setBordered:NO];
- [self setTitle:@""];
- [self setPreferredEdge:NSMaxXEdge];
- _PSMTabBarOverflowPopUpImage = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"overflowImage"]];
- _PSMTabBarOverflowDownPopUpImage = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"overflowImagePressed"]];
- _animatingAlternateImage = NO;
- }
- return self;
-}
-
-- (void)dealloc {
- [_PSMTabBarOverflowPopUpImage release];
- [_PSMTabBarOverflowDownPopUpImage release];
- [super dealloc];
-}
-
-- (void)drawRect:(NSRect)rect {
- if(_PSMTabBarOverflowPopUpImage == nil) {
- [super drawRect:rect];
- return;
- }
-
- NSImage *image = (_down) ? _PSMTabBarOverflowDownPopUpImage : _PSMTabBarOverflowPopUpImage;
- NSSize imageSize = [image size];
- NSRect bounds = [self bounds];
-
- NSPoint drawPoint = NSMakePoint(NSMidX(bounds) - (imageSize.width * 0.5f), NSMidY(bounds) - (imageSize.height * 0.5f));
-
- if([self isFlipped]) {
- drawPoint.y += imageSize.height;
- }
-
- [image compositeToPoint:drawPoint operation:NSCompositeSourceOver fraction:(_animatingAlternateImage ? 0.7f : 1.0f)];
-
- if(_animatingAlternateImage) {
- NSImage *alternateImage = [self alternateImage];
- NSSize altImageSize = [alternateImage size];
- drawPoint = NSMakePoint(NSMidX(bounds) - (altImageSize.width * 0.5f), NSMidY(bounds) - (altImageSize.height * 0.5f));
-
- if([self isFlipped]) {
- drawPoint.y += altImageSize.height;
- }
-
- [[self alternateImage] compositeToPoint:drawPoint operation:NSCompositeSourceOver fraction:sin(_animationValue * M_PI)];
- }
-}
-
-- (void)mouseDown:(NSEvent *)event {
- _down = YES;
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationReceived:) name:NSMenuDidEndTrackingNotification object:[self menu]];
- [self setNeedsDisplay:YES];
- [super mouseDown:event];
-}
-
-- (void)setHidden:(BOOL)value {
- if([self isHidden] != value) {
- if(value) {
- // Stop any animating alternate image if we hide
- [_animationTimer invalidate], _animationTimer = nil;
- } else if(_animatingAlternateImage) {
- // Restart any animating alternate image if we unhide
- _animationValue = ANIMATION_STEP;
- _animationTimer = [NSTimer scheduledTimerWithTimeInterval:TIMER_INTERVAL target:self selector:@selector(animateStep:) userInfo:nil repeats:YES];
- [[NSRunLoop currentRunLoop] addTimer:_animationTimer forMode:NSEventTrackingRunLoopMode];
- }
- }
-
- [super setHidden:value];
-}
-
-- (void)notificationReceived:(NSNotification *)notification {
- _down = NO;
- [self setNeedsDisplay:YES];
- [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-- (void)setAnimatingAlternateImage:(BOOL)flag {
- if(_animatingAlternateImage != flag) {
- _animatingAlternateImage = flag;
-
- if(![self isHidden]) {
- if(flag) {
- _animationValue = ANIMATION_STEP;
- _animationTimer = [NSTimer scheduledTimerWithTimeInterval:TIMER_INTERVAL target:self selector:@selector(animateStep:) userInfo:nil repeats:YES];
- [[NSRunLoop currentRunLoop] addTimer:_animationTimer forMode:NSEventTrackingRunLoopMode];
- } else {
- [_animationTimer invalidate], _animationTimer = nil;
- }
-
- [self setNeedsDisplay:YES];
- }
- }
-}
-
-- (BOOL)animatingAlternateImage;
-{
- return _animatingAlternateImage;
-}
-
-- (void)animateStep:(NSTimer *)timer {
- _animationValue += ANIMATION_STEP;
-
- if(_animationValue >= 1) {
- _animationValue = ANIMATION_STEP;
- }
-
- [self setNeedsDisplay:YES];
-}
-
-#pragma mark -
-#pragma mark Archiving
-
-- (void)encodeWithCoder:(NSCoder *)aCoder {
- [super encodeWithCoder:aCoder];
- if([aCoder allowsKeyedCoding]) {
- [aCoder encodeObject:_PSMTabBarOverflowPopUpImage forKey:@"PSMTabBarOverflowPopUpImage"];
- [aCoder encodeObject:_PSMTabBarOverflowDownPopUpImage forKey:@"PSMTabBarOverflowDownPopUpImage"];
- [aCoder encodeBool:_animatingAlternateImage forKey:@"PSMTabBarOverflowAnimatingAlternateImage"];
- }
-}
-
-- (id)initWithCoder:(NSCoder *)aDecoder {
- if((self = [super initWithCoder:aDecoder])) {
- if([aDecoder allowsKeyedCoding]) {
- _PSMTabBarOverflowPopUpImage = [[aDecoder decodeObjectForKey:@"PSMTabBarOverflowPopUpImage"] retain];
- _PSMTabBarOverflowDownPopUpImage = [[aDecoder decodeObjectForKey:@"PSMTabBarOverflowDownPopUpImage"] retain];
- [self setAnimatingAlternateImage:[aDecoder decodeBoolForKey:@"PSMTabBarOverflowAnimatingAlternateImage"]];
- }
- }
- return self;
-}
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMProgressIndicator.h b/frontends/cocoa/PSMTabBarControl/PSMProgressIndicator.h
deleted file mode 100644
index ffce069..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMProgressIndicator.h
+++ b/dev/null
@@ -1,15 +0,0 @@
-//
-// PSMProgressIndicator.h
-// PSMTabBarControl
-//
-// Created by John Pannell on 2/23/06.
-// Copyright 2006 Positive Spin Media. All rights reserved.
-//
-
-#import <Cocoa/Cocoa.h>
-
-
-@interface PSMProgressIndicator : NSProgressIndicator {
-}
-
-@end \ No newline at end of file
diff --git a/frontends/cocoa/PSMTabBarControl/PSMProgressIndicator.m b/frontends/cocoa/PSMTabBarControl/PSMProgressIndicator.m
deleted file mode 100644
index 983609b..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMProgressIndicator.m
+++ b/dev/null
@@ -1,40 +0,0 @@
-//
-// PSMProgressIndicator.m
-// PSMTabBarControl
-//
-// Created by John Pannell on 2/23/06.
-// Copyright 2006 Positive Spin Media. All rights reserved.
-//
-
-#import "PSMProgressIndicator.h"
-#import "PSMTabBarControl.h"
-
-@interface PSMTabBarControl (PSMProgressIndicatorExtensions)
-
-- (void)update;
-
-@end
-
-@implementation PSMProgressIndicator
-
-- (id) initWithFrame: (NSRect)frameRect;
-{
- if ((self = [super initWithFrame: frameRect]) == nil) return nil;
- [self setControlSize: NSSmallControlSize];
- return self;
-}
-
-// overrides to make tab bar control re-layout things if status changes
-- (void)setHidden:(BOOL)flag {
- [super setHidden:flag];
- [(PSMTabBarControl *)[self superview] update];
-}
-
-- (void)stopAnimation:(id)sender {
- [NSObject cancelPreviousPerformRequestsWithTarget:self
- selector:@selector(startAnimation:)
- object:nil];
- [super stopAnimation:sender];
-}
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMRolloverButton.h b/frontends/cocoa/PSMTabBarControl/PSMRolloverButton.h
deleted file mode 100644
index 62fce23..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMRolloverButton.h
+++ b/dev/null
@@ -1,28 +0,0 @@
-//
-// PSMOverflowPopUpButton.h
-// NetScrape
-//
-// Created by John Pannell on 8/4/04.
-// Copyright 2004 Positive Spin Media. All rights reserved.
-//
-
-#import <Cocoa/Cocoa.h>
-
-@interface PSMRolloverButton : NSButton {
- NSImage *_rolloverImage;
- NSImage *_usualImage;
- NSTrackingRectTag _myTrackingRectTag;
-}
-
-// the regular image
-- (void)setUsualImage:(NSImage *)newImage;
-- (NSImage *)usualImage;
-
-// the rollover image
-- (void)setRolloverImage:(NSImage *)newImage;
-- (NSImage *)rolloverImage;
-
-// tracking rect for mouse events
-- (void)addTrackingRect;
-- (void)removeTrackingRect;
-@end \ No newline at end of file
diff --git a/frontends/cocoa/PSMTabBarControl/PSMRolloverButton.m b/frontends/cocoa/PSMTabBarControl/PSMRolloverButton.m
deleted file mode 100644
index 8886560..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMRolloverButton.m
+++ b/dev/null
@@ -1,170 +0,0 @@
-//
-// PSMOverflowPopUpButton.m
-// NetScrape
-//
-// Created by John Pannell on 8/4/04.
-// Copyright 2004 Positive Spin Media. All rights reserved.
-//
-
-#import "PSMRolloverButton.h"
-
-@implementation PSMRolloverButton
-
-- (void)awakeFromNib {
- if([[self superclass] instancesRespondToSelector:@selector(awakeFromNib)]) {
- [super awakeFromNib];
- }
-
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(rolloverFrameDidChange:)
- name:NSViewFrameDidChangeNotification
- object:self];
- [self setPostsFrameChangedNotifications:YES];
- [self resetCursorRects];
-
- _myTrackingRectTag = -1;
-}
-
-- (void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self];
-
- [self removeTrackingRect];
-
- [super dealloc];
-}
-
-// the regular image
-- (void)setUsualImage:(NSImage *)newImage {
- [newImage retain];
- [_usualImage release];
- _usualImage = newImage;
-
- [self setImage:_usualImage];
-}
-
-- (NSImage *)usualImage {
- return _usualImage;
-}
-
-- (void)setRolloverImage:(NSImage *)newImage {
- [newImage retain];
- [_rolloverImage release];
- _rolloverImage = newImage;
-}
-
-- (NSImage *)rolloverImage {
- return _rolloverImage;
-}
-
-//Remove old tracking rects when we change superviews
-- (void)viewWillMoveToSuperview:(NSView *)newSuperview {
- [self removeTrackingRect];
-
- [super viewWillMoveToSuperview:newSuperview];
-}
-
-- (void)viewDidMoveToSuperview {
- [super viewDidMoveToSuperview];
-
- [self resetCursorRects];
-}
-
-- (void)viewWillMoveToWindow:(NSWindow *)newWindow {
- [self removeTrackingRect];
-
- [super viewWillMoveToWindow:newWindow];
-}
-
-- (void)viewDidMoveToWindow {
- [super viewDidMoveToWindow];
-
- [self resetCursorRects];
-}
-
-- (void)rolloverFrameDidChange:(NSNotification *)inNotification {
- [self resetCursorRects];
-}
-
-- (void)addTrackingRect {
- // assign a tracking rect to watch for mouse enter/exit
- NSRect trackRect = [self bounds];
- NSPoint localPoint = [self convertPoint:[[self window] convertScreenToBase:[NSEvent mouseLocation]]
- fromView:nil];
- BOOL mouseInside = NSPointInRect(localPoint, trackRect);
-
- _myTrackingRectTag = [self addTrackingRect:trackRect owner:self userData:nil assumeInside:mouseInside];
- if(mouseInside) {
- //[self mouseEntered:nil];
- [self setImage:_rolloverImage];
- } else{
- //[self mouseExited:nil];
- [self setImage:_usualImage];
- }
-}
-
-- (void)removeTrackingRect {
- if(_myTrackingRectTag != -1) {
- [self removeTrackingRect:_myTrackingRectTag];
- }
- _myTrackingRectTag = -1;
-}
-
-// override for rollover effect
-- (void)mouseEntered:(NSEvent *)theEvent;
-{
- // set rollover image
- [self setImage:_rolloverImage];
-
- [super mouseEntered:theEvent];
-}
-
-- (void)mouseExited:(NSEvent *)theEvent;
-{
- // restore usual image
- [self setImage:_usualImage];
-
- [super mouseExited:theEvent];
-}
-
-- (void)resetCursorRects {
- // called when the button rect has been changed
- [self removeTrackingRect];
- [self addTrackingRect];
-}
-
-- (void)setFrame:(NSRect)rect {
- [super setFrame:rect];
- [self resetCursorRects];
-}
-
-- (void)setBounds:(NSRect)rect {
- [super setBounds:rect];
- [self resetCursorRects];
-}
-
-#pragma mark -
-#pragma mark Archiving
-
-- (void)encodeWithCoder:(NSCoder *)aCoder {
- [super encodeWithCoder:aCoder];
- if([aCoder allowsKeyedCoding]) {
- [aCoder encodeObject:_rolloverImage forKey:@"rolloverImage"];
- [aCoder encodeObject:_usualImage forKey:@"usualImage"];
- [aCoder encodeInt64:_myTrackingRectTag forKey:@"myTrackingRectTag"];
- }
-}
-
-- (id)initWithCoder:(NSCoder *)aDecoder {
- self = [super initWithCoder:aDecoder];
- if(self) {
- if([aDecoder allowsKeyedCoding]) {
- _rolloverImage = [[aDecoder decodeObjectForKey:@"rolloverImage"] retain];
- _usualImage = [[aDecoder decodeObjectForKey:@"usualImage"] retain];
- _myTrackingRectTag = [aDecoder decodeInt64ForKey:@"myTrackingRectTag"];
- }
- }
- return self;
-}
-
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabBarCell.h b/frontends/cocoa/PSMTabBarControl/PSMTabBarCell.h
deleted file mode 100644
index c8f6cec..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabBarCell.h
+++ b/dev/null
@@ -1,116 +0,0 @@
-//
-// PSMTabBarCell.h
-// PSMTabBarControl
-//
-// Created by John Pannell on 10/13/05.
-// Copyright 2005 Positive Spin Media. All rights reserved.
-//
-
-#import <Cocoa/Cocoa.h>
-#import "PSMTabBarControl.h"
-#import "PSMProgressIndicator.h"
-
-
-@interface PSMTabBarCell : NSActionCell {
- // sizing
- NSRect _frame;
- NSSize _stringSize;
- NSInteger _currentStep;
- BOOL _isPlaceholder;
-
- // state
- NSInteger _tabState;
- NSTrackingRectTag _closeButtonTrackingTag; // left side tracking, if dragging
- NSTrackingRectTag _cellTrackingTag; // right side tracking, if dragging
- BOOL _closeButtonOver;
- BOOL _closeButtonPressed;
- PSMProgressIndicator *_indicator;
- BOOL _isInOverflowMenu;
- BOOL _hasCloseButton;
- BOOL _isCloseButtonSuppressed;
- BOOL _hasIcon;
- BOOL _hasLargeImage;
- NSInteger _count;
- NSColor *_countColor;
- BOOL _isEdited;
-}
-
-// creation/destruction
-- (id)initWithControlView:(PSMTabBarControl *)controlView;
-- (id)initPlaceholderWithFrame:(NSRect) frame expanded:(BOOL) value inControlView:(PSMTabBarControl *)controlView;
-- (void)dealloc;
-
-// accessors
-- (id)controlView;
-- (void)setControlView:(id)view;
-- (NSTrackingRectTag)closeButtonTrackingTag;
-- (void)setCloseButtonTrackingTag:(NSTrackingRectTag)tag;
-- (NSTrackingRectTag)cellTrackingTag;
-- (void)setCellTrackingTag:(NSTrackingRectTag)tag;
-- (CGFloat)width;
-- (NSRect)frame;
-- (void)setFrame:(NSRect)rect;
-- (void)setStringValue:(NSString *)aString;
-- (NSSize)stringSize;
-- (NSAttributedString *)attributedStringValue;
-- (NSInteger)tabState;
-- (void)setTabState:(NSInteger)state;
-- (NSProgressIndicator *)indicator;
-- (BOOL)isInOverflowMenu;
-- (void)setIsInOverflowMenu:(BOOL)value;
-- (BOOL)closeButtonPressed;
-- (void)setCloseButtonPressed:(BOOL)value;
-- (BOOL)closeButtonOver;
-- (void)setCloseButtonOver:(BOOL)value;
-- (BOOL)hasCloseButton;
-- (void)setHasCloseButton:(BOOL)set;
-- (void)setCloseButtonSuppressed:(BOOL)suppress;
-- (BOOL)isCloseButtonSuppressed;
-- (BOOL)hasIcon;
-- (void)setHasIcon:(BOOL)value;
-- (BOOL)hasLargeImage;
-- (void)setHasLargeImage:(BOOL)value;
-- (NSInteger)count;
-- (void)setCount:(NSInteger)value;
-- (NSColor *)countColor;
-- (void)setCountColor:(NSColor *)value;
-- (BOOL)isPlaceholder;
-- (void)setIsPlaceholder:(BOOL)value;
-- (NSInteger)currentStep;
-- (void)setCurrentStep:(NSInteger)value;
-- (BOOL)isEdited;
-- (void)setIsEdited:(BOOL)value;
-
-// component attributes
-- (NSRect)indicatorRectForFrame:(NSRect)cellFrame;
-- (NSRect)closeButtonRectForFrame:(NSRect)cellFrame;
-- (CGFloat)minimumWidthOfCell;
-- (CGFloat)desiredWidthOfCell;
-
-// drawing
-- (void)drawWithFrame:(NSRect) cellFrame inView:(NSView *)controlView;
-
-// tracking the mouse
-- (void)mouseEntered:(NSEvent *)theEvent;
-- (void)mouseExited:(NSEvent *)theEvent;
-
-// drag support
-- (NSImage *)dragImage;
-
-// archiving
-- (void)encodeWithCoder:(NSCoder *)aCoder;
-- (id)initWithCoder:(NSCoder *)aDecoder;
-
-@end
-
-@interface PSMTabBarControl (CellAccessors)
-
-- (id<PSMTabStyle>)style;
-
-@end
-
-@interface NSObject (IdentifierAccesors)
-
-- (NSImage *)largeImage;
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabBarCell.m b/frontends/cocoa/PSMTabBarControl/PSMTabBarCell.m
deleted file mode 100644
index f7a04f2..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabBarCell.m
+++ b/dev/null
@@ -1,489 +0,0 @@
-//
-// PSMTabBarCell.m
-// PSMTabBarControl
-//
-// Created by John Pannell on 10/13/05.
-// Copyright 2005 Positive Spin Media. All rights reserved.
-//
-
-#import "PSMTabBarCell.h"
-#import "PSMTabBarControl.h"
-#import "PSMTabStyle.h"
-#import "PSMProgressIndicator.h"
-#import "PSMTabDragAssistant.h"
-
-@interface PSMTabBarControl (Private)
-- (void)update;
-@end
-
-@implementation PSMTabBarCell
-
-#pragma mark -
-#pragma mark Creation/Destruction
-- (id)initWithControlView:(PSMTabBarControl *)controlView {
- if((self = [super init])) {
- _controlView = controlView;
- _closeButtonTrackingTag = 0;
- _cellTrackingTag = 0;
- _closeButtonOver = NO;
- _closeButtonPressed = NO;
- _indicator = [[PSMProgressIndicator alloc] initWithFrame:NSMakeRect(0.0, 0.0, kPSMTabBarIndicatorWidth, kPSMTabBarIndicatorWidth)];
- [_indicator setStyle:NSProgressIndicatorSpinningStyle];
- [_indicator setAutoresizingMask:NSViewMinYMargin];
- _hasCloseButton = YES;
- _isCloseButtonSuppressed = NO;
- _count = 0;
- _countColor = nil;
- _isEdited = NO;
- _isPlaceholder = NO;
- }
- return self;
-}
-
-- (id)initPlaceholderWithFrame:(NSRect)frame expanded:(BOOL)value inControlView:(PSMTabBarControl *)controlView {
- if((self = [super init])) {
- _controlView = controlView;
- _isPlaceholder = YES;
- if(!value) {
- if([controlView orientation] == PSMTabBarHorizontalOrientation) {
- frame.size.width = 0.0;
- } else {
- frame.size.height = 0.0;
- }
- }
- [self setFrame:frame];
- _closeButtonTrackingTag = 0;
- _cellTrackingTag = 0;
- _closeButtonOver = NO;
- _closeButtonPressed = NO;
- _indicator = nil;
- _hasCloseButton = YES;
- _isCloseButtonSuppressed = NO;
- _count = 0;
- _countColor = nil;
- _isEdited = NO;
-
- if(value) {
- [self setCurrentStep:(kPSMTabDragAnimationSteps - 1)];
- } else {
- [self setCurrentStep:0];
- }
- }
- return self;
-}
-
-- (void)dealloc {
- [_countColor release];
-
- [_indicator removeFromSuperviewWithoutNeedingDisplay];
-
- [_indicator release];
- [super dealloc];
-}
-
-#pragma mark -
-#pragma mark Accessors
-
-- (id)controlView {
- return _controlView;
-}
-
-- (void)setControlView:(id)view {
- // no retain release pattern, as this simply switches a tab to another view.
- _controlView = view;
-}
-
-- (NSTrackingRectTag)closeButtonTrackingTag {
- return _closeButtonTrackingTag;
-}
-
-- (void)setCloseButtonTrackingTag:(NSTrackingRectTag)tag {
- _closeButtonTrackingTag = tag;
-}
-
-- (NSTrackingRectTag)cellTrackingTag {
- return _cellTrackingTag;
-}
-
-- (void)setCellTrackingTag:(NSTrackingRectTag)tag {
- _cellTrackingTag = tag;
-}
-
-- (CGFloat)width {
- return _frame.size.width;
-}
-
-- (NSRect)frame {
- return _frame;
-}
-
-- (void)setFrame:(NSRect)rect {
- _frame = rect;
-
- //move the status indicator along with the rest of the cell
- if(![[self indicator] isHidden] && ![_controlView isTabBarHidden]) {
- [[self indicator] setFrame:[self indicatorRectForFrame:rect]];
- }
-}
-
-- (void)setStringValue:(NSString *)aString {
- [super setStringValue:aString];
- _stringSize = [[self attributedStringValue] size];
- // need to redisplay now - binding observation was too quick.
- [_controlView update];
-}
-
-- (NSSize)stringSize {
- return _stringSize;
-}
-
-- (NSAttributedString *)attributedStringValue {
- return [(id < PSMTabStyle >)[_controlView style] attributedStringValueForTabCell:self];
-}
-
-- (NSInteger)tabState {
- return _tabState;
-}
-
-- (void)setTabState:(NSInteger)state {
- _tabState = state;
-}
-
-- (NSProgressIndicator *)indicator {
- return _indicator;
-}
-
-- (BOOL)isInOverflowMenu {
- return _isInOverflowMenu;
-}
-
-- (void)setIsInOverflowMenu:(BOOL)value {
- if(_isInOverflowMenu != value) {
- _isInOverflowMenu = value;
- if([[[self controlView] delegate] respondsToSelector:@selector(tabView:tabViewItem:isInOverflowMenu:)]) {
- [[[self controlView] delegate] tabView:[self controlView] tabViewItem:[self representedObject] isInOverflowMenu:_isInOverflowMenu];
- }
- }
-}
-
-- (BOOL)closeButtonPressed {
- return _closeButtonPressed;
-}
-
-- (void)setCloseButtonPressed:(BOOL)value {
- _closeButtonPressed = value;
-}
-
-- (BOOL)closeButtonOver {
- return(_closeButtonOver && ([_controlView allowsBackgroundTabClosing] || ([self tabState] & PSMTab_SelectedMask) || [[NSApp currentEvent] modifierFlags] & NSCommandKeyMask));
-}
-
-- (void)setCloseButtonOver:(BOOL)value {
- _closeButtonOver = value;
-}
-
-- (BOOL)hasCloseButton {
- return _hasCloseButton;
-}
-
-- (void)setHasCloseButton:(BOOL)set;
-{
- _hasCloseButton = set;
-}
-
-- (void)setCloseButtonSuppressed:(BOOL)suppress;
-{
- _isCloseButtonSuppressed = suppress;
-}
-
-- (BOOL)isCloseButtonSuppressed;
-{
- return _isCloseButtonSuppressed;
-}
-
-- (BOOL)hasIcon {
- return _hasIcon;
-}
-
-- (void)setHasIcon:(BOOL)value {
- _hasIcon = value;
- //[_controlView update:[[self controlView] automaticallyAnimates]]; // binding notice is too fast
-}
-
-- (BOOL)hasLargeImage {
- return _hasLargeImage;
-}
-
-- (void)setHasLargeImage:(BOOL)value {
- _hasLargeImage = value;
-}
-
-
-- (NSInteger)count {
- return _count;
-}
-
-- (void)setCount:(NSInteger)value {
- _count = value;
- //[_controlView update:[[self controlView] automaticallyAnimates]]; // binding notice is too fast
-}
-
-- (NSColor *)countColor {
- return _countColor;
-}
-
-- (void)setCountColor:(NSColor *)color {
- [_countColor release];
- _countColor = [color retain];
-}
-
-- (BOOL)isPlaceholder {
- return _isPlaceholder;
-}
-
-- (void)setIsPlaceholder:(BOOL)value;
-{
- _isPlaceholder = value;
-}
-
-- (NSInteger)currentStep {
- return _currentStep;
-}
-
-- (void)setCurrentStep:(NSInteger)value {
- if(value < 0) {
- value = 0;
- }
-
- if(value > (kPSMTabDragAnimationSteps - 1)) {
- value = (kPSMTabDragAnimationSteps - 1);
- }
-
- _currentStep = value;
-}
-
-- (BOOL)isEdited {
- return _isEdited;
-}
-
-- (void)setIsEdited:(BOOL)value {
- _isEdited = value;
- //[_controlView update:[[self controlView] automaticallyAnimates]]; // binding notice is too fast
-}
-
-#pragma mark -
-#pragma mark Bindings
-
-- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
- // the progress indicator, label, icon, or count has changed - redraw the control view
- //[_controlView update];
- //I seem to have run into some odd issue with update not being called at the right time. This seems to avoid the problem.
- [_controlView performSelector:@selector(update) withObject:nil afterDelay:0.0];
-}
-
-#pragma mark -
-#pragma mark Component Attributes
-
-- (NSRect)indicatorRectForFrame:(NSRect)cellFrame {
- return [(id < PSMTabStyle >)[_controlView style] indicatorRectForTabCell:self];
-}
-
-- (NSRect)closeButtonRectForFrame:(NSRect)cellFrame {
- return [(id < PSMTabStyle >)[_controlView style] closeButtonRectForTabCell:self withFrame:cellFrame];
-}
-
-- (CGFloat)minimumWidthOfCell {
- return [(id < PSMTabStyle >)[_controlView style] minimumWidthOfTabCell:self];
-}
-
-- (CGFloat)desiredWidthOfCell {
- return [(id < PSMTabStyle >)[_controlView style] desiredWidthOfTabCell:self];
-}
-
-#pragma mark -
-#pragma mark Drawing
-
-- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
- if(_isPlaceholder) {
- [[NSColor colorWithCalibratedWhite:0.0 alpha:0.2] set];
- NSRectFillUsingOperation(cellFrame, NSCompositeSourceAtop);
- return;
- }
-
- [(id < PSMTabStyle >)[_controlView style] drawTabCell:self];
-}
-
-#pragma mark -
-#pragma mark Tracking
-
-- (void)mouseEntered:(NSEvent *)theEvent {
- // check for which tag
- if([theEvent trackingNumber] == _closeButtonTrackingTag) {
- _closeButtonOver = YES;
- }
- if([theEvent trackingNumber] == _cellTrackingTag) {
- [self setHighlighted:YES];
- [_controlView setNeedsDisplay:NO];
- }
-
- // scrubtastic
- if([_controlView allowsScrubbing] && ([theEvent modifierFlags] & NSAlternateKeyMask)) {
- [_controlView performSelector:@selector(tabClick:) withObject:self];
- }
-
- // tell the control we only need to redraw the affected tab
- [_controlView setNeedsDisplayInRect:NSInsetRect([self frame], -2, -2)];
-}
-
-- (void)mouseExited:(NSEvent *)theEvent {
- // check for which tag
- if([theEvent trackingNumber] == _closeButtonTrackingTag) {
- _closeButtonOver = NO;
- }
-
- if([theEvent trackingNumber] == _cellTrackingTag) {
- [self setHighlighted:NO];
- [_controlView setNeedsDisplay:NO];
- }
-
- //tell the control we only need to redraw the affected tab
- [_controlView setNeedsDisplayInRect:NSInsetRect([self frame], -2, -2)];
-}
-
-#pragma mark -
-#pragma mark Drag Support
-
-- (NSImage *)dragImage {
- NSRect cellFrame = [(id < PSMTabStyle >)[(PSMTabBarControl *)_controlView style] dragRectForTabCell:self orientation:(PSMTabBarOrientation)[(PSMTabBarControl *)_controlView orientation]];
- //NSRect cellFrame = [self frame];
-
- [_controlView lockFocus];
- NSBitmapImageRep *rep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:cellFrame] autorelease];
- [_controlView unlockFocus];
- NSImage *image = [[[NSImage alloc] initWithSize:[rep size]] autorelease];
- [image addRepresentation:rep];
- NSImage *returnImage = [[[NSImage alloc] initWithSize:[rep size]] autorelease];
- [returnImage lockFocus];
- [image compositeToPoint:NSMakePoint(0.0, 0.0) operation:NSCompositeSourceOver fraction:1.0];
- [returnImage unlockFocus];
- if(![[self indicator] isHidden]) {
- NSImage *pi = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"pi"]];
- [returnImage lockFocus];
- NSPoint indicatorPoint = NSMakePoint([self frame].size.width - MARGIN_X - kPSMTabBarIndicatorWidth, MARGIN_Y);
- [pi compositeToPoint:indicatorPoint operation:NSCompositeSourceOver fraction:1.0];
- [returnImage unlockFocus];
- [pi release];
- }
- return returnImage;
-}
-
-#pragma mark -
-#pragma mark Archiving
-
-- (void)encodeWithCoder:(NSCoder *)aCoder {
- [super encodeWithCoder:aCoder];
- if([aCoder allowsKeyedCoding]) {
- [aCoder encodeRect:_frame forKey:@"frame"];
- [aCoder encodeSize:_stringSize forKey:@"stringSize"];
- [aCoder encodeInteger:_currentStep forKey:@"currentStep"];
- [aCoder encodeBool:_isPlaceholder forKey:@"isPlaceholder"];
- [aCoder encodeInteger:_tabState forKey:@"tabState"];
- [aCoder encodeInteger:_closeButtonTrackingTag forKey:@"closeButtonTrackingTag"];
- [aCoder encodeInteger:_cellTrackingTag forKey:@"cellTrackingTag"];
- [aCoder encodeBool:_closeButtonOver forKey:@"closeButtonOver"];
- [aCoder encodeBool:_closeButtonPressed forKey:@"closeButtonPressed"];
- [aCoder encodeObject:_indicator forKey:@"indicator"];
- [aCoder encodeBool:_isInOverflowMenu forKey:@"isInOverflowMenu"];
- [aCoder encodeBool:_hasCloseButton forKey:@"hasCloseButton"];
- [aCoder encodeBool:_isCloseButtonSuppressed forKey:@"isCloseButtonSuppressed"];
- [aCoder encodeBool:_hasIcon forKey:@"hasIcon"];
- [aCoder encodeBool:_hasLargeImage forKey:@"hasLargeImage"];
- [aCoder encodeInteger:_count forKey:@"count"];
- [aCoder encodeBool:_isEdited forKey:@"isEdited"];
- }
-}
-
-- (id)initWithCoder:(NSCoder *)aDecoder {
- self = [super initWithCoder:aDecoder];
- if(self) {
- if([aDecoder allowsKeyedCoding]) {
- _frame = [aDecoder decodeRectForKey:@"frame"];
- _stringSize = [aDecoder decodeSizeForKey:@"stringSize"];
- _currentStep = [aDecoder decodeIntegerForKey:@"currentStep"];
- _isPlaceholder = [aDecoder decodeBoolForKey:@"isPlaceholder"];
- _tabState = [aDecoder decodeIntegerForKey:@"tabState"];
- _closeButtonTrackingTag = [aDecoder decodeIntegerForKey:@"closeButtonTrackingTag"];
- _cellTrackingTag = [aDecoder decodeIntegerForKey:@"cellTrackingTag"];
- _closeButtonOver = [aDecoder decodeBoolForKey:@"closeButtonOver"];
- _closeButtonPressed = [aDecoder decodeBoolForKey:@"closeButtonPressed"];
- _indicator = [[aDecoder decodeObjectForKey:@"indicator"] retain];
- _isInOverflowMenu = [aDecoder decodeBoolForKey:@"isInOverflowMenu"];
- _hasCloseButton = [aDecoder decodeBoolForKey:@"hasCloseButton"];
- _isCloseButtonSuppressed = [aDecoder decodeBoolForKey:@"isCloseButtonSuppressed"];
- _hasIcon = [aDecoder decodeBoolForKey:@"hasIcon"];
- _hasLargeImage = [aDecoder decodeBoolForKey:@"hasLargeImage"];
- _count = [aDecoder decodeIntegerForKey:@"count"];
- _isEdited = [aDecoder decodeBoolForKey:@"isEdited"];
- }
- }
- return self;
-}
-
-#pragma mark -
-#pragma mark Accessibility
-
--(BOOL)accessibilityIsIgnored {
- return NO;
-}
-
-- (id)accessibilityAttributeValue:(NSString *)attribute {
- id attributeValue = nil;
-
- if([attribute isEqualToString: NSAccessibilityRoleAttribute]) {
- attributeValue = NSAccessibilityButtonRole;
- } else if([attribute isEqualToString: NSAccessibilityHelpAttribute]) {
- if([[[self controlView] delegate] respondsToSelector:@selector(accessibilityStringForTabView:objectCount:)]) {
- attributeValue = [NSString stringWithFormat:@"%@, %lu %@", [self stringValue],
- (unsigned long)[self count],
- [[[self controlView] delegate] accessibilityStringForTabView:[[self controlView] tabView] objectCount:[self count]]];
- } else {
- attributeValue = [self stringValue];
- }
- } else if([attribute isEqualToString: NSAccessibilityFocusedAttribute]) {
- attributeValue = [NSNumber numberWithBool:([self tabState] == 2)];
- } else {
- attributeValue = [super accessibilityAttributeValue:attribute];
- }
-
- return attributeValue;
-}
-
-- (NSArray *)accessibilityActionNames {
- static NSArray *actions;
-
- if(!actions) {
- actions = [[NSArray alloc] initWithObjects:NSAccessibilityPressAction, nil];
- }
- return actions;
-}
-
-- (NSString *)accessibilityActionDescription:(NSString *)action {
- return NSAccessibilityActionDescription(action);
-}
-
-- (void)accessibilityPerformAction:(NSString *)action {
- if([action isEqualToString:NSAccessibilityPressAction]) {
- // this tab was selected
- [_controlView performSelector:@selector(tabClick:) withObject:self];
- }
-}
-
-- (id)accessibilityHitTest:(NSPoint)point {
- return NSAccessibilityUnignoredAncestor(self);
-}
-
-- (id)accessibilityFocusedUIElement:(NSPoint)point {
- return NSAccessibilityUnignoredAncestor(self);
-}
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabBarControl.h b/frontends/cocoa/PSMTabBarControl/PSMTabBarControl.h
deleted file mode 100644
index 980c43d..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabBarControl.h
+++ b/dev/null
@@ -1,241 +0,0 @@
-//
-// PSMTabBarControl.h
-// PSMTabBarControl
-//
-// Created by John Pannell on 10/13/05.
-// Copyright 2005 Positive Spin Media. All rights reserved.
-//
-
-/*
- This view provides a control interface to manage a regular NSTabView. It looks and works like the tabbed browsing interface of many popular browsers.
- */
-
-#import <Cocoa/Cocoa.h>
-
-#define PSMTabDragDidEndNotification @ "PSMTabDragDidEndNotification"
-#define PSMTabDragDidBeginNotification @ "PSMTabDragDidBeginNotification"
-
-#define kPSMTabBarControlHeight 22
-// internal cell border
-#define MARGIN_X 6
-#define MARGIN_Y 3
-// padding between objects
-#define kPSMTabBarCellPadding 4
-// fixed size objects
-#define kPSMMinimumTitleWidth 30
-#define kPSMTabBarIndicatorWidth 16.0
-#define kPSMTabBarIconWidth 16.0
-#define kPSMHideAnimationSteps 3.0
-
-// Value used in _currentStep to indicate that resizing operation is not in progress
-#define kPSMIsNotBeingResized -1
-
-// Value used in _currentStep when a resizing operation has just been started
-#define kPSMStartResizeAnimation 0
-
-@class PSMOverflowPopUpButton;
-@class PSMRolloverButton;
-@class PSMTabBarCell;
-@class PSMTabBarController;
-@protocol PSMTabStyle;
-
-typedef enum {
- PSMTabBarHorizontalOrientation,
- PSMTabBarVerticalOrientation
-} PSMTabBarOrientation;
-
-typedef enum {
- PSMTabBarTearOffAlphaWindow,
- PSMTabBarTearOffMiniwindow
-} PSMTabBarTearOffStyle;
-
-enum {
- PSMTab_SelectedMask = 1 << 1,
- PSMTab_LeftIsSelectedMask = 1 << 2,
- PSMTab_RightIsSelectedMask = 1 << 3,
- PSMTab_PositionLeftMask = 1 << 4,
- PSMTab_PositionMiddleMask = 1 << 5,
- PSMTab_PositionRightMask = 1 << 6,
- PSMTab_PositionSingleMask = 1 << 7,
-};
-
-@interface PSMTabBarControl : NSControl {
-
- // control basics
- NSMutableArray *_cells; // the cells that draw the tabs
- IBOutlet NSTabView *tabView; // the tab view being navigated
- PSMOverflowPopUpButton *_overflowPopUpButton; // for too many tabs
- PSMRolloverButton *_addTabButton;
- PSMTabBarController *_controller;
-
- // Spring-loading.
- NSTimer *_springTimer;
- NSTabViewItem *_tabViewItemWithSpring;
-
- // drawing style
- id<PSMTabStyle> style;
- BOOL _canCloseOnlyTab;
- BOOL _disableTabClose;
- BOOL _hideForSingleTab;
- BOOL _showAddTabButton;
- BOOL _sizeCellsToFit;
- BOOL _useOverflowMenu;
- BOOL _alwaysShowActiveTab;
- BOOL _allowsScrubbing;
- NSInteger _resizeAreaCompensation;
- PSMTabBarOrientation _orientation;
- BOOL _automaticallyAnimates;
- NSTimer *_animationTimer;
- PSMTabBarTearOffStyle _tearOffStyle;
-
- // behavior
- BOOL _allowsBackgroundTabClosing;
- BOOL _selectsTabsOnMouseDown;
-
- // vertical tab resizing
- BOOL _allowsResizing;
- BOOL _resizing;
-
- // cell width
- NSInteger _cellMinWidth;
- NSInteger _cellMaxWidth;
- NSInteger _cellOptimumWidth;
-
- // animation for hide/show
- NSInteger _currentStep;
- BOOL _isHidden;
- IBOutlet id partnerView; // gets resized when hide/show
- BOOL _awakenedFromNib;
- NSInteger _tabBarWidth;
- NSTimer *_showHideAnimationTimer;
-
- // drag and drop
- NSEvent *_lastMouseDownEvent; // keep this for dragging reference
- BOOL _didDrag;
- BOOL _closeClicked;
-
- // MVC help
- IBOutlet id delegate;
-}
-
-// control characteristics
-+ (NSBundle *)bundle;
-- (CGFloat)availableCellWidth;
-- (NSRect)genericCellRect;
-
-// control configuration
-- (PSMTabBarOrientation)orientation;
-- (void)setOrientation:(PSMTabBarOrientation)value;
-- (BOOL)canCloseOnlyTab;
-- (void)setCanCloseOnlyTab:(BOOL)value;
-- (BOOL)disableTabClose;
-- (void)setDisableTabClose:(BOOL)value;
-- (id<PSMTabStyle>)style;
-- (void)setStyle:(id <PSMTabStyle>)newStyle;
-- (NSString *)styleName;
-- (void)setStyleNamed:(NSString *)name;
-- (BOOL)hideForSingleTab;
-- (void)setHideForSingleTab:(BOOL)value;
-- (BOOL)showAddTabButton;
-- (void)setShowAddTabButton:(BOOL)value;
-- (NSInteger)cellMinWidth;
-- (void)setCellMinWidth:(NSInteger)value;
-- (NSInteger)cellMaxWidth;
-- (void)setCellMaxWidth:(NSInteger)value;
-- (NSInteger)cellOptimumWidth;
-- (void)setCellOptimumWidth:(NSInteger)value;
-- (BOOL)sizeCellsToFit;
-- (void)setSizeCellsToFit:(BOOL)value;
-- (BOOL)useOverflowMenu;
-- (void)setUseOverflowMenu:(BOOL)value;
-- (BOOL)allowsBackgroundTabClosing;
-- (void)setAllowsBackgroundTabClosing:(BOOL)value;
-- (BOOL)allowsResizing;
-- (void)setAllowsResizing:(BOOL)value;
-- (BOOL)selectsTabsOnMouseDown;
-- (void)setSelectsTabsOnMouseDown:(BOOL)value;
-- (BOOL)automaticallyAnimates;
-- (void)setAutomaticallyAnimates:(BOOL)value;
-- (BOOL)alwaysShowActiveTab;
-- (void)setAlwaysShowActiveTab:(BOOL)value;
-- (BOOL)allowsScrubbing;
-- (void)setAllowsScrubbing:(BOOL)value;
-- (PSMTabBarTearOffStyle)tearOffStyle;
-- (void)setTearOffStyle:(PSMTabBarTearOffStyle)tearOffStyle;
-
-// Factory for default style
-+ (Class)defaultStyleClass;
-
-// accessors
-- (NSTabView *)tabView;
-- (void)setTabView:(NSTabView *)view;
-- (id)delegate;
-- (void)setDelegate:(id)object;
-- (id)partnerView;
-- (void)setPartnerView:(id)view;
-
-// the buttons
-- (PSMRolloverButton *)addTabButton;
-- (PSMOverflowPopUpButton *)overflowPopUpButton;
-
-// tab information
-- (NSMutableArray *)representedTabViewItems;
-- (NSInteger)numberOfVisibleTabs;
-- (PSMTabBarCell *)lastVisibleTab;
-
-// special effects
-- (void)hideTabBar:(BOOL) hide animate:(BOOL)animate;
-- (BOOL)isTabBarHidden;
-- (BOOL)isAnimating;
-
-// internal bindings methods also used by the tab drag assistant
-- (void)bindPropertiesForCell:(PSMTabBarCell *)cell andTabViewItem:(NSTabViewItem *)item;
-- (void)removeTabForCell:(PSMTabBarCell *)cell;
-
-@end
-
-
-@interface NSObject (TabBarControlDelegateMethods)
-
-//Standard NSTabView methods
-- (BOOL)tabView:(NSTabView *)aTabView shouldCloseTabViewItem:(NSTabViewItem *)tabViewItem;
-- (void)tabView:(NSTabView *)aTabView didCloseTabViewItem:(NSTabViewItem *)tabViewItem;
-
-//"Spring-loaded" tabs methods
-- (NSArray *)allowedDraggedTypesForTabView:(NSTabView *)aTabView;
-- (void)tabView:(NSTabView *)aTabView acceptedDraggingInfo:(id <NSDraggingInfo>) draggingInfo onTabViewItem:(NSTabViewItem *)tabViewItem;
-
-//Contextual menu method
-- (NSMenu *)tabView:(NSTabView *)aTabView menuForTabViewItem:(NSTabViewItem *)tabViewItem;
-
-//Drag and drop methods
-- (BOOL)tabView:(NSTabView *)aTabView shouldDragTabViewItem:(NSTabViewItem *)tabViewItem fromTabBar:(PSMTabBarControl *)tabBarControl;
-- (BOOL)tabView:(NSTabView *)aTabView shouldDropTabViewItem:(NSTabViewItem *)tabViewItem inTabBar:(PSMTabBarControl *)tabBarControl;
-- (BOOL)tabView:(NSTabView *)aTabView shouldAllowTabViewItem:(NSTabViewItem *)tabViewItem toLeaveTabBar:(PSMTabBarControl *)tabBarControl;
-- (void)tabView:(NSTabView*)aTabView didDropTabViewItem:(NSTabViewItem *)tabViewItem inTabBar:(PSMTabBarControl *)tabBarControl;
-
-
-//Tear-off tabs methods
-- (NSImage *)tabView:(NSTabView *)aTabView imageForTabViewItem:(NSTabViewItem *)tabViewItem offset:(NSSize *)offset styleMask:(NSUInteger *)styleMask;
-- (PSMTabBarControl *)tabView:(NSTabView *)aTabView newTabBarForDraggedTabViewItem:(NSTabViewItem *)tabViewItem atPoint:(NSPoint)point;
-- (void)tabView:(NSTabView *)aTabView closeWindowForLastTabViewItem:(NSTabViewItem *)tabViewItem;
-
-//Overflow menu validation
-- (BOOL)tabView:(NSTabView *)aTabView validateOverflowMenuItem:(NSMenuItem *)menuItem forTabViewItem:(NSTabViewItem *)tabViewItem;
-- (void)tabView:(NSTabView *)aTabView tabViewItem:(NSTabViewItem *)tabViewItem isInOverflowMenu:(BOOL)inOverflowMenu;
-
-//tab bar hiding methods
-- (void)tabView:(NSTabView *)aTabView tabBarDidHide:(PSMTabBarControl *)tabBarControl;
-- (void)tabView:(NSTabView *)aTabView tabBarDidUnhide:(PSMTabBarControl *)tabBarControl;
-- (CGFloat)desiredWidthForVerticalTabBar:(PSMTabBarControl *)tabBarControl;
-
-//closing
-- (BOOL)tabView:(NSTabView *)aTabView disableTabCloseForTabViewItem:(NSTabViewItem *)tabViewItem;
-
-//tooltips
-- (NSString *)tabView:(NSTabView *)aTabView toolTipForTabViewItem:(NSTabViewItem *)tabViewItem;
-
-//accessibility
-- (NSString *)accessibilityStringForTabView:(NSTabView *)aTabView objectCount:(NSInteger)objectCount;
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabBarControl.m b/frontends/cocoa/PSMTabBarControl/PSMTabBarControl.m
deleted file mode 100644
index cb0e034..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabBarControl.m
+++ b/dev/null
@@ -1,1995 +0,0 @@
-//
-// PSMTabBarControl.m
-// PSMTabBarControl
-//
-// Created by John Pannell on 10/13/05.
-// Copyright 2005 Positive Spin Media. All rights reserved.
-//
-
-#import <objc/runtime.h>
-
-#import "PSMTabBarControl.h"
-#import "PSMTabBarCell.h"
-#import "PSMOverflowPopUpButton.h"
-#import "PSMRolloverButton.h"
-#import "PSMTabStyle.h"
-#import "PSMUnifiedTabStyle.h"
-#import "PSMTabDragAssistant.h"
-#import "PSMTabBarController.h"
-
-@interface PSMTabBarControl (Private)
-
-// constructor/destructor
-- (void)initAddedProperties;
-
-// accessors
-- (NSEvent *)lastMouseDownEvent;
-- (void)setLastMouseDownEvent:(NSEvent *)event;
-
-// contents
-- (void)addTabViewItem:(NSTabViewItem *)item;
-- (void)removeTabForCell:(PSMTabBarCell *)cell;
-
-// draw
-- (void)update;
-- (void)update:(BOOL)animate;
-- (void)_setupTrackingRectsForCell:(PSMTabBarCell *)cell;
-- (void)_positionOverflowMenu;
-- (void)_checkWindowFrame;
-
-// actions
-- (void)overflowMenuAction:(id)sender;
-- (void)closeTabClick:(id)sender;
-- (void)tabClick:(id)sender;
-- (void)tabNothing:(id)sender;
-
-// notification handlers
-- (void)frameDidChange:(NSNotification *)notification;
-- (void)windowDidMove:(NSNotification *)aNotification;
-- (void)windowDidUpdate:(NSNotification *)notification;
-
-// NSTabView delegate
-- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem;
-- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem;
-- (void)tabView:(NSTabView *)tabView willSelectTabViewItem:(NSTabViewItem *)tabViewItem;
-- (void)tabViewDidChangeNumberOfTabViewItems:(NSTabView *)tabView;
-
-// archiving
-- (void)encodeWithCoder:(NSCoder *)aCoder;
-- (id)initWithCoder:(NSCoder *)aDecoder;
-
-// convenience
-- (void)_bindPropertiesForCell:(PSMTabBarCell *)cell andTabViewItem:(NSTabViewItem *)item;
-- (id)cellForPoint:(NSPoint)point cellFrame:(NSRectPointer)outFrame;
-
-- (void)_animateCells:(NSTimer *)timer;
-@end
-
-@implementation PSMTabBarControl
-
-#pragma mark -
-#pragma mark Characteristics
-
-+ (NSBundle *)bundle
-{
- static NSBundle *bundle = nil;
- if(!bundle) {
- bundle = [NSBundle bundleForClass:[PSMTabBarControl class]];
- }
- return bundle;
-}
-
-/*!
- @method availableCellWidth
- @abstract The number of pixels available for cells
- @discussion Calculates the number of pixels available for cells based on margins and the window resize badge.
- @returns Returns the amount of space for cells.
- */
-
-- (CGFloat)availableCellWidth {
- return [self frame].size.width - [style leftMarginForTabBarControl] - [style rightMarginForTabBarControl] - _resizeAreaCompensation;
-}
-
-/*!
- @method genericCellRect
- @abstract The basic rect for a tab cell.
- @discussion Creates a generic frame for a tab cell based on the current control state.
- @returns Returns a basic rect for a tab cell.
- */
-
-- (NSRect)genericCellRect {
- NSRect aRect = [self frame];
- aRect.origin.x = [style leftMarginForTabBarControl];
- aRect.origin.y = 0.0;
- aRect.size.width = [self availableCellWidth];
- aRect.size.height = [style tabCellHeight];
- return aRect;
-}
-
-#pragma mark -
-#pragma mark Constructor/destructor
-
-- (void)initAddedProperties {
- _cells = [[NSMutableArray alloc] initWithCapacity:10];
- _controller = [[PSMTabBarController alloc] initWithTabBarControl:self];
- _animationTimer = nil;
-
- // default config
- _currentStep = kPSMIsNotBeingResized;
- _orientation = PSMTabBarHorizontalOrientation;
- _canCloseOnlyTab = NO;
- _disableTabClose = NO;
- _showAddTabButton = NO;
- _hideForSingleTab = NO;
- _sizeCellsToFit = NO;
- _isHidden = NO;
- _awakenedFromNib = NO;
- _automaticallyAnimates = NO;
- _useOverflowMenu = YES;
- _allowsBackgroundTabClosing = YES;
- _allowsResizing = NO;
- _selectsTabsOnMouseDown = NO;
- _alwaysShowActiveTab = NO;
- _allowsScrubbing = NO;
- _cellMinWidth = 100;
- _cellMaxWidth = 280;
- _cellOptimumWidth = 130;
- _tearOffStyle = PSMTabBarTearOffAlphaWindow;
- style = [[[[self class] defaultStyleClass] alloc] init];
-
- // the overflow button/menu
- NSRect overflowButtonRect = NSMakeRect([self frame].size.width - [style rightMarginForTabBarControl] + 1, 0, [style rightMarginForTabBarControl] - 1, [self frame].size.height);
- _overflowPopUpButton = [[PSMOverflowPopUpButton alloc] initWithFrame:overflowButtonRect pullsDown:YES];
- [_overflowPopUpButton setAutoresizingMask:NSViewNotSizable | NSViewMinXMargin];
- [_overflowPopUpButton setHidden:YES];
- [self addSubview:_overflowPopUpButton];
- [self _positionOverflowMenu];
-
- // new tab button
- NSRect addTabButtonRect = NSMakeRect([self frame].size.width - [style rightMarginForTabBarControl] + 1, 3.0, 16.0, 16.0);
- _addTabButton = [[PSMRolloverButton alloc] initWithFrame:addTabButtonRect];
- if(_addTabButton) {
- NSImage *newButtonImage = [style addTabButtonImage];
- if(newButtonImage) {
- [_addTabButton setUsualImage:newButtonImage];
- }
- newButtonImage = [style addTabButtonPressedImage];
- if(newButtonImage) {
- [_addTabButton setAlternateImage:newButtonImage];
- }
- newButtonImage = [style addTabButtonRolloverImage];
- if(newButtonImage) {
- [_addTabButton setRolloverImage:newButtonImage];
- }
- [_addTabButton setTitle:@""];
- [_addTabButton setImagePosition:NSImageOnly];
- [_addTabButton setButtonType:NSMomentaryChangeButton];
- [_addTabButton setBordered:NO];
- [_addTabButton setBezelStyle:NSShadowlessSquareBezelStyle];
- [self addSubview:_addTabButton];
-
- if(_showAddTabButton) {
- [_addTabButton setHidden:NO];
- } else {
- [_addTabButton setHidden:YES];
- }
- [_addTabButton setNeedsDisplay:YES];
- }
-}
-
-+ (Class) defaultStyleClass
-{
- return [PSMUnifiedTabStyle class];
-}
-
-- (id)initWithFrame:(NSRect)frame {
- self = [super initWithFrame:frame];
- if(self) {
- // Initialization
- [self initAddedProperties];
- [self registerForDraggedTypes:[NSArray arrayWithObjects:@"PSMTabBarControlItemPBType", nil]];
-
- // resize
- [self setPostsFrameChangedNotifications:YES];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(frameDidChange:) name:NSViewFrameDidChangeNotification object:self];
- }
- [self setTarget:self];
- return self;
-}
-
-- (void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self];
-
- //stop any animations that may be running
- [_animationTimer invalidate];
- [_animationTimer release]; _animationTimer = nil;
-
- [_showHideAnimationTimer invalidate];
- [_showHideAnimationTimer release]; _showHideAnimationTimer = nil;
-
- //Also unwind the spring, if it's wound.
- [_springTimer invalidate];
- [_springTimer release]; _springTimer = nil;
-
- //unbind all the items to prevent crashing
- //not sure if this is necessary or not
- // http://code.google.com/p/maccode/issues/detail?id=35
- NSEnumerator *enumerator = [[[_cells copy] autorelease] objectEnumerator];
- PSMTabBarCell *nextCell;
- while((nextCell = [enumerator nextObject])) {
- [self removeTabForCell:nextCell];
- }
-
- [_overflowPopUpButton release];
- [_cells release];
- [_controller release];
- [tabView release];
- [_addTabButton release];
- [partnerView release];
- [_lastMouseDownEvent release];
- [style release];
-
- [self unregisterDraggedTypes];
-
- [super dealloc];
-}
-
-- (void)awakeFromNib {
- // build cells from existing tab view items
- NSArray *existingItems = [tabView tabViewItems];
- NSEnumerator *e = [existingItems objectEnumerator];
- NSTabViewItem *item;
- while((item = [e nextObject])) {
- if(![[self representedTabViewItems] containsObject:item]) {
- [self addTabViewItem:item];
- }
- }
-}
-
-- (void)viewWillMoveToWindow:(NSWindow *)aWindow {
- NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
-
- [center removeObserver:self name:NSWindowDidBecomeKeyNotification object:nil];
- [center removeObserver:self name:NSWindowDidResignKeyNotification object:nil];
- [center removeObserver:self name:NSWindowDidUpdateNotification object:nil];
- [center removeObserver:self name:NSWindowDidMoveNotification object:nil];
-
- if(_showHideAnimationTimer) {
- [_showHideAnimationTimer invalidate];
- [_showHideAnimationTimer release]; _showHideAnimationTimer = nil;
- }
-
- if(aWindow) {
- [center addObserver:self selector:@selector(windowStatusDidChange:) name:NSWindowDidBecomeKeyNotification object:aWindow];
- [center addObserver:self selector:@selector(windowStatusDidChange:) name:NSWindowDidResignKeyNotification object:aWindow];
- [center addObserver:self selector:@selector(windowDidUpdate:) name:NSWindowDidUpdateNotification object:aWindow];
- [center addObserver:self selector:@selector(windowDidMove:) name:NSWindowDidMoveNotification object:aWindow];
- }
-}
-
-- (void)windowStatusDidChange:(NSNotification *)notification {
- [self setNeedsDisplay:YES];
-}
-
-#pragma mark -
-#pragma mark Accessors
-
-- (NSMutableArray *)cells {
- return _cells;
-}
-
-- (NSEvent *)lastMouseDownEvent {
- return _lastMouseDownEvent;
-}
-
-- (void)setLastMouseDownEvent:(NSEvent *)event {
- [event retain];
- [_lastMouseDownEvent release];
- _lastMouseDownEvent = event;
-}
-
-- (id)delegate {
- return delegate;
-}
-
-- (void)setDelegate:(id)object {
- delegate = object;
-
- NSMutableArray *types = [NSMutableArray arrayWithObject:@"PSMTabBarControlItemPBType"];
-
- //Update the allowed drag types
- if([self delegate] && [[self delegate] respondsToSelector:@selector(allowedDraggedTypesForTabView:)]) {
- [types addObjectsFromArray:[[self delegate] allowedDraggedTypesForTabView:tabView]];
- }
- [self unregisterDraggedTypes];
- [self registerForDraggedTypes:types];
-}
-
-- (NSTabView *)tabView {
- return tabView;
-}
-
-- (void)setTabView:(NSTabView *)view {
- [view retain];
- [tabView release];
- tabView = view;
-}
-
-- (id<PSMTabStyle>)style {
- return style;
-}
-
-- (NSString *)styleName {
- return [style name];
-}
-
-- (void)setStyle:(id <PSMTabStyle>)newStyle {
- if(style != newStyle) {
- [style autorelease];
- style = [newStyle retain];
-
- // restyle add tab button
- if(_addTabButton) {
- NSImage *newButtonImage = [style addTabButtonImage];
- if(newButtonImage) {
- [_addTabButton setUsualImage:newButtonImage];
- }
-
- newButtonImage = [style addTabButtonPressedImage];
- if(newButtonImage) {
- [_addTabButton setAlternateImage:newButtonImage];
- }
-
- newButtonImage = [style addTabButtonRolloverImage];
- if(newButtonImage) {
- [_addTabButton setRolloverImage:newButtonImage];
- }
- }
-
- [self update];
- }
-}
-
-- (void)setStyleNamed:(NSString *)name {
-
- Class styleClass = NSClassFromString( [NSString stringWithFormat: @"PSM%@TabStyle", [name capitalizedString]] );
- if (styleClass == Nil) {
- styleClass = object_getClass([PSMTabBarControl defaultStyleClass]);
- }
-
- id <PSMTabStyle> newStyle = [[styleClass alloc] init];
- [self setStyle:newStyle];
- [newStyle release];
-}
-
-- (PSMTabBarOrientation)orientation {
- return _orientation;
-}
-
-- (void)setOrientation:(PSMTabBarOrientation)value {
- PSMTabBarOrientation lastOrientation = _orientation;
- _orientation = value;
-
- if(_tabBarWidth < 10) {
- _tabBarWidth = 120;
- }
-
- if (lastOrientation != _orientation) {
- [[self style] setOrientation:_orientation];
-
- [self _positionOverflowMenu]; //move the overflow popup button to the right place
- [self update:NO];
- }
-}
-
-- (BOOL)canCloseOnlyTab {
- return _canCloseOnlyTab;
-}
-
-- (void)setCanCloseOnlyTab:(BOOL)value {
- _canCloseOnlyTab = value;
- if([_cells count] == 1) {
- [self update];
- }
-}
-
-- (BOOL)disableTabClose {
- return _disableTabClose;
-}
-
-- (void)setDisableTabClose:(BOOL)value {
- _disableTabClose = value;
- [self update];
-}
-
-- (BOOL)hideForSingleTab {
- return _hideForSingleTab;
-}
-
-- (void)setHideForSingleTab:(BOOL)value {
- _hideForSingleTab = value;
- [self update];
-}
-
-- (BOOL)showAddTabButton {
- return _showAddTabButton;
-}
-
-- (void)setShowAddTabButton:(BOOL)value {
- _showAddTabButton = value;
- if(!NSIsEmptyRect([_controller addButtonRect])) {
- [_addTabButton setFrame:[_controller addButtonRect]];
- }
-
- [_addTabButton setHidden:!_showAddTabButton];
- [_addTabButton setNeedsDisplay:YES];
-
- [self update];
-}
-
-- (NSInteger)cellMinWidth {
- return _cellMinWidth;
-}
-
-- (void)setCellMinWidth:(NSInteger)value {
- _cellMinWidth = value;
- [self update];
-}
-
-- (NSInteger)cellMaxWidth {
- return _cellMaxWidth;
-}
-
-- (void)setCellMaxWidth:(NSInteger)value {
- _cellMaxWidth = value;
- [self update];
-}
-
-- (NSInteger)cellOptimumWidth {
- return _cellOptimumWidth;
-}
-
-- (void)setCellOptimumWidth:(NSInteger)value {
- _cellOptimumWidth = value;
- [self update];
-}
-
-- (BOOL)sizeCellsToFit {
- return _sizeCellsToFit;
-}
-
-- (void)setSizeCellsToFit:(BOOL)value {
- _sizeCellsToFit = value;
- [self update];
-}
-
-- (BOOL)useOverflowMenu {
- return _useOverflowMenu;
-}
-
-- (void)setUseOverflowMenu:(BOOL)value {
- _useOverflowMenu = value;
- [self update];
-}
-
-- (PSMRolloverButton *)addTabButton {
- return _addTabButton;
-}
-
-- (PSMOverflowPopUpButton *)overflowPopUpButton {
- return _overflowPopUpButton;
-}
-
-- (BOOL)allowsBackgroundTabClosing {
- return _allowsBackgroundTabClosing;
-}
-
-- (void)setAllowsBackgroundTabClosing:(BOOL)value {
- _allowsBackgroundTabClosing = value;
-}
-
-- (BOOL)allowsResizing {
- return _allowsResizing;
-}
-
-- (void)setAllowsResizing:(BOOL)value {
- _allowsResizing = value;
-}
-
-- (BOOL)selectsTabsOnMouseDown {
- return _selectsTabsOnMouseDown;
-}
-
-- (void)setSelectsTabsOnMouseDown:(BOOL)value {
- _selectsTabsOnMouseDown = value;
-}
-
-- (BOOL)automaticallyAnimates {
- return _automaticallyAnimates;
-}
-
-- (void)setAutomaticallyAnimates:(BOOL)value {
- _automaticallyAnimates = value;
-}
-
-- (BOOL)alwaysShowActiveTab {
- return _alwaysShowActiveTab;
-}
-
-- (void)setAlwaysShowActiveTab:(BOOL)value {
- _alwaysShowActiveTab = value;
-}
-
-- (BOOL)allowsScrubbing {
- return _allowsScrubbing;
-}
-
-- (void)setAllowsScrubbing:(BOOL)value {
- _allowsScrubbing = value;
-}
-
-- (PSMTabBarTearOffStyle)tearOffStyle {
- return _tearOffStyle;
-}
-
-- (void)setTearOffStyle:(PSMTabBarTearOffStyle)tearOffStyle {
- _tearOffStyle = tearOffStyle;
-}
-
-#pragma mark -
-#pragma mark Functionality
-
-- (void)addTabViewItem:(NSTabViewItem *)item {
- // create cell
- PSMTabBarCell *cell = [[PSMTabBarCell alloc] initWithControlView:self];
- NSRect cellRect, lastCellFrame;
- if([_cells lastObject] != nil) {
- cellRect = lastCellFrame = [[_cells lastObject] frame];
- } else {
- cellRect = lastCellFrame = NSZeroRect;
- }
-
- if([self orientation] == PSMTabBarHorizontalOrientation) {
- cellRect = [self genericCellRect];
- cellRect.size.width = 30;
- cellRect.origin.x = lastCellFrame.origin.x + lastCellFrame.size.width;
- } else {
- cellRect = /*lastCellFrame*/ [self genericCellRect];
- cellRect.size.width = lastCellFrame.size.width;
- cellRect.size.height = 0;
- cellRect.origin.y = lastCellFrame.origin.y + lastCellFrame.size.height;
- }
-
- [cell setRepresentedObject:item];
- [cell setFrame:cellRect];
-
- // bind it up
- [self bindPropertiesForCell:cell andTabViewItem:item];
-
- // add to collection
- [_cells addObject:cell];
- [cell release];
- if([_cells count] == (NSUInteger)[tabView numberOfTabViewItems]) {
- [self update]; // don't update unless all are accounted for!
- }
-}
-
-- (void)removeTabForCell:(PSMTabBarCell *)cell {
- NSTabViewItem *item = [cell representedObject];
-
- // unbind
- [[cell indicator] unbind:@"animate"];
- [[cell indicator] unbind:@"hidden"];
- [cell unbind:@"hasIcon"];
- [cell unbind:@"hasLargeImage"];
- [cell unbind:@"title"];
- [cell unbind:@"count"];
- [cell unbind:@"countColor"];
- [cell unbind:@"isEdited"];
-
- if([item identifier] != nil) {
- if([[item identifier] respondsToSelector:@selector(isProcessing)]) {
- [[item identifier] removeObserver:cell forKeyPath:@"isProcessing"];
- }
- }
-
- if([item identifier] != nil) {
- if([[item identifier] respondsToSelector:@selector(icon)]) {
- [[item identifier] removeObserver:cell forKeyPath:@"icon"];
- }
- }
-
- if([item identifier] != nil) {
- if([[item identifier] respondsToSelector:@selector(objectCount)]) {
- [[item identifier] removeObserver:cell forKeyPath:@"objectCount"];
- }
- }
-
- if([item identifier] != nil) {
- if([[item identifier] respondsToSelector:@selector(countColor)]) {
- [[item identifier] removeObserver:cell forKeyPath:@"countColor"];
- }
- }
-
- if([item identifier] != nil) {
- if([[item identifier] respondsToSelector:@selector(largeImage)]) {
- [[item identifier] removeObserver:cell forKeyPath:@"largeImage"];
- }
- }
-
- if([item identifier] != nil) {
- if([[item identifier] respondsToSelector:@selector(isEdited)]) {
- [[item identifier] removeObserver:cell forKeyPath:@"isEdited"];
- }
- }
-
- // stop watching identifier
- [item removeObserver:self forKeyPath:@"identifier"];
-
- // remove indicator
- if([[self subviews] containsObject:[cell indicator]]) {
- [[cell indicator] removeFromSuperview];
- }
- // remove tracking
- [[NSNotificationCenter defaultCenter] removeObserver:cell];
-
- if([cell closeButtonTrackingTag] != 0) {
- [self removeTrackingRect:[cell closeButtonTrackingTag]];
- [cell setCloseButtonTrackingTag:0];
- }
- if([cell cellTrackingTag] != 0) {
- [self removeTrackingRect:[cell cellTrackingTag]];
- [cell setCellTrackingTag:0];
- }
-
- // pull from collection
- [_cells removeObject:cell];
-
- [self update];
-}
-
-- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
- // did the tab's identifier change?
- if([keyPath isEqualToString:@"identifier"]) {
- NSEnumerator *e = [_cells objectEnumerator];
- PSMTabBarCell *cell;
- while((cell = [e nextObject])) {
- if([cell representedObject] == object) {
- [self _bindPropertiesForCell:cell andTabViewItem:object];
- }
- }
- }
-}
-
-#pragma mark -
-#pragma mark Hide/Show
-
-- (void)hideTabBar:(BOOL)hide animate:(BOOL)animate {
- if(!_awakenedFromNib || (_isHidden && hide) || (!_isHidden && !hide) || (_currentStep != kPSMIsNotBeingResized)) {
- return;
- }
-
- [[self subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
-
- _isHidden = hide;
- _currentStep = 0;
- if(!animate) {
- _currentStep = (NSInteger)kPSMHideAnimationSteps;
- }
-
- if(hide) {
- [_overflowPopUpButton removeFromSuperview];
- [_addTabButton removeFromSuperview];
- } else if(!animate) {
- [self addSubview:_overflowPopUpButton];
- [self addSubview:_addTabButton];
- }
-
- CGFloat partnerOriginalSize, partnerOriginalOrigin, myOriginalSize, myOriginalOrigin, partnerTargetSize, partnerTargetOrigin, myTargetSize, myTargetOrigin;
-
- // target values for partner
- if([self orientation] == PSMTabBarHorizontalOrientation) {
- // current (original) values
- myOriginalSize = [self frame].size.height;
- myOriginalOrigin = [self frame].origin.y;
- if(partnerView) {
- partnerOriginalSize = [partnerView frame].size.height;
- partnerOriginalOrigin = [partnerView frame].origin.y;
- } else {
- partnerOriginalSize = [[self window] frame].size.height;
- partnerOriginalOrigin = [[self window] frame].origin.y;
- }
-
- if(partnerView) {
- // above or below me?
- if((myOriginalOrigin - 22) > partnerOriginalOrigin) {
- // partner is below me
- if(_isHidden) {
- // I'm shrinking
- myTargetOrigin = myOriginalOrigin + 21;
- myTargetSize = myOriginalSize - 21;
- partnerTargetOrigin = partnerOriginalOrigin;
- partnerTargetSize = partnerOriginalSize + 21;
- } else {
- // I'm growing
- myTargetOrigin = myOriginalOrigin - 21;
- myTargetSize = myOriginalSize + 21;
- partnerTargetOrigin = partnerOriginalOrigin;
- partnerTargetSize = partnerOriginalSize - 21;
- }
- } else {
- // partner is above me
- if(_isHidden) {
- // I'm shrinking
- myTargetOrigin = myOriginalOrigin;
- myTargetSize = myOriginalSize - 21;
- partnerTargetOrigin = partnerOriginalOrigin - 21;
- partnerTargetSize = partnerOriginalSize + 21;
- } else {
- // I'm growing
- myTargetOrigin = myOriginalOrigin;
- myTargetSize = myOriginalSize + 21;
- partnerTargetOrigin = partnerOriginalOrigin + 21;
- partnerTargetSize = partnerOriginalSize - 21;
- }
- }
- } else {
- // for window movement
- if(_isHidden) {
- // I'm shrinking
- myTargetOrigin = myOriginalOrigin;
- myTargetSize = myOriginalSize - 21;
- partnerTargetOrigin = partnerOriginalOrigin + 21;
- partnerTargetSize = partnerOriginalSize - 21;
- } else {
- // I'm growing
- myTargetOrigin = myOriginalOrigin;
- myTargetSize = myOriginalSize + 21;
- partnerTargetOrigin = partnerOriginalOrigin - 21;
- partnerTargetSize = partnerOriginalSize + 21;
- }
- }
- } else { /* vertical */
- // current (original) values
- myOriginalSize = [self frame].size.width;
- myOriginalOrigin = [self frame].origin.x;
- if(partnerView) {
- partnerOriginalSize = [partnerView frame].size.width;
- partnerOriginalOrigin = [partnerView frame].origin.x;
- } else {
- partnerOriginalSize = [[self window] frame].size.width;
- partnerOriginalOrigin = [[self window] frame].origin.x;
- }
-
- if(partnerView) {
- //to the left or right?
- if(myOriginalOrigin < partnerOriginalOrigin + partnerOriginalSize) {
- // partner is to the left
- if(_isHidden) {
- // I'm shrinking
- myTargetOrigin = myOriginalOrigin;
- myTargetSize = 1;
- partnerTargetOrigin = partnerOriginalOrigin - myOriginalSize + 1;
- partnerTargetSize = partnerOriginalSize + myOriginalSize - 1;
- _tabBarWidth = myOriginalSize;
- } else {
- // I'm growing
- myTargetOrigin = myOriginalOrigin;
- myTargetSize = myOriginalSize + _tabBarWidth;
- partnerTargetOrigin = partnerOriginalOrigin + _tabBarWidth;
- partnerTargetSize = partnerOriginalSize - _tabBarWidth;
- }
- } else {
- // partner is to the right
- if(_isHidden) {
- // I'm shrinking
- myTargetOrigin = myOriginalOrigin + myOriginalSize;
- myTargetSize = 1;
- partnerTargetOrigin = partnerOriginalOrigin;
- partnerTargetSize = partnerOriginalSize + myOriginalSize;
- _tabBarWidth = myOriginalSize;
- } else {
- // I'm growing
- myTargetOrigin = myOriginalOrigin - _tabBarWidth;
- myTargetSize = myOriginalSize + _tabBarWidth;
- partnerTargetOrigin = partnerOriginalOrigin;
- partnerTargetSize = partnerOriginalSize - _tabBarWidth;
- }
- }
- } else {
- // for window movement
- if(_isHidden) {
- // I'm shrinking
- myTargetOrigin = myOriginalOrigin;
- myTargetSize = 1;
- partnerTargetOrigin = partnerOriginalOrigin + myOriginalSize - 1;
- partnerTargetSize = partnerOriginalSize - myOriginalSize + 1;
- _tabBarWidth = myOriginalSize;
- } else {
- // I'm growing
- myTargetOrigin = myOriginalOrigin;
- myTargetSize = _tabBarWidth;
- partnerTargetOrigin = partnerOriginalOrigin - _tabBarWidth + 1;
- partnerTargetSize = partnerOriginalSize + _tabBarWidth - 1;
- }
- }
-
- if(!_isHidden && [[self delegate] respondsToSelector:@selector(desiredWidthForVerticalTabBar:)]) {
- myTargetSize = [[self delegate] desiredWidthForVerticalTabBar:self];
- }
- }
-
- NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithDouble:myOriginalOrigin], @"myOriginalOrigin", [NSNumber numberWithDouble:partnerOriginalOrigin], @"partnerOriginalOrigin", [NSNumber numberWithDouble:myOriginalSize], @"myOriginalSize", [NSNumber numberWithDouble:partnerOriginalSize], @"partnerOriginalSize", [NSNumber numberWithDouble:myTargetOrigin], @"myTargetOrigin", [NSNumber numberWithDouble:partnerTargetOrigin], @"partnerTargetOrigin", [NSNumber numberWithDouble:myTargetSize], @"myTargetSize", [NSNumber numberWithDouble:partnerTargetSize], @"partnerTargetSize", nil];
- if(_showHideAnimationTimer) {
- [_showHideAnimationTimer invalidate];
- [_showHideAnimationTimer release];
- }
- _showHideAnimationTimer = [[NSTimer scheduledTimerWithTimeInterval:(1.0 / 30.0) target:self selector:@selector(animateShowHide:) userInfo:userInfo repeats:YES] retain];
-}
-
-- (void)animateShowHide:(NSTimer *)timer {
- // moves the frame of the tab bar and window (or partner view) linearly to hide or show the tab bar
- NSRect myFrame = [self frame];
- NSDictionary *userInfo = [timer userInfo];
- CGFloat myCurrentOrigin = ([[userInfo objectForKey:@"myOriginalOrigin"] doubleValue] + (([[userInfo objectForKey:@"myTargetOrigin"] doubleValue] - [[userInfo objectForKey:@"myOriginalOrigin"] doubleValue]) * (_currentStep / kPSMHideAnimationSteps)));
- CGFloat myCurrentSize = ([[userInfo objectForKey:@"myOriginalSize"] doubleValue] + (([[userInfo objectForKey:@"myTargetSize"] doubleValue] - [[userInfo objectForKey:@"myOriginalSize"] doubleValue]) * (_currentStep / kPSMHideAnimationSteps)));
- CGFloat partnerCurrentOrigin = ([[userInfo objectForKey:@"partnerOriginalOrigin"] doubleValue] + (([[userInfo objectForKey:@"partnerTargetOrigin"] doubleValue] - [[userInfo objectForKey:@"partnerOriginalOrigin"] doubleValue]) * (_currentStep / kPSMHideAnimationSteps)));
- CGFloat partnerCurrentSize = ([[userInfo objectForKey:@"partnerOriginalSize"] doubleValue] + (([[userInfo objectForKey:@"partnerTargetSize"] doubleValue] - [[userInfo objectForKey:@"partnerOriginalSize"] doubleValue]) * (_currentStep / kPSMHideAnimationSteps)));
-
- NSRect myNewFrame;
- if([self orientation] == PSMTabBarHorizontalOrientation) {
- myNewFrame = NSMakeRect(myFrame.origin.x, myCurrentOrigin, myFrame.size.width, myCurrentSize);
- } else {
- myNewFrame = NSMakeRect(myCurrentOrigin, myFrame.origin.y, myCurrentSize, myFrame.size.height);
- }
-
- if(partnerView) {
- // resize self and view
- NSRect resizeRect;
- if([self orientation] == PSMTabBarHorizontalOrientation) {
- resizeRect = NSMakeRect([partnerView frame].origin.x, partnerCurrentOrigin, [partnerView frame].size.width, partnerCurrentSize);
- } else {
- resizeRect = NSMakeRect(partnerCurrentOrigin, [partnerView frame].origin.y, partnerCurrentSize, [partnerView frame].size.height);
- }
- [partnerView setFrame:resizeRect];
- [partnerView setNeedsDisplay:YES];
- [self setFrame:myNewFrame];
- } else {
- // resize self and window
- NSRect resizeRect;
- if([self orientation] == PSMTabBarHorizontalOrientation) {
- resizeRect = NSMakeRect([[self window] frame].origin.x, partnerCurrentOrigin, [[self window] frame].size.width, partnerCurrentSize);
- } else {
- resizeRect = NSMakeRect(partnerCurrentOrigin, [[self window] frame].origin.y, partnerCurrentSize, [[self window] frame].size.height);
- }
- [[self window] setFrame:resizeRect display:YES];
- [self setFrame:myNewFrame];
- }
-
- // next
- _currentStep++;
- if(_currentStep == kPSMHideAnimationSteps + 1) {
- _currentStep = kPSMIsNotBeingResized;
- [self viewDidEndLiveResize];
- [self update:NO];
-
- //send the delegate messages
- if(_isHidden) {
- if([[self delegate] respondsToSelector:@selector(tabView:tabBarDidHide:)]) {
- [[self delegate] tabView:[self tabView] tabBarDidHide:self];
- }
- } else {
- [self addSubview:_overflowPopUpButton];
- [self addSubview:_addTabButton];
-
- if([[self delegate] respondsToSelector:@selector(tabView:tabBarDidUnhide:)]) {
- [[self delegate] tabView:[self tabView] tabBarDidUnhide:self];
- }
- }
-
- [_showHideAnimationTimer invalidate];
- [_showHideAnimationTimer release]; _showHideAnimationTimer = nil;
- }
- [[self window] display];
-}
-
-- (BOOL)isTabBarHidden {
- return _isHidden;
-}
-
-- (BOOL)isAnimating {
- return _animationTimer != nil;
-}
-
-- (id)partnerView {
- return partnerView;
-}
-
-- (void)setPartnerView:(id)view {
- [partnerView release];
- [view retain];
- partnerView = view;
-}
-
-#pragma mark -
-#pragma mark Drawing
-
-- (BOOL)isFlipped {
- return YES;
-}
-
-- (void)drawRect:(NSRect)rect {
- [style drawTabBar:self inRect:rect];
-}
-
-- (void)update {
- [self update:_automaticallyAnimates];
-}
-
-- (void)update:(BOOL)animate {
- // make sure all of our tabs are accounted for before updating
- if((NSUInteger)[[self tabView] numberOfTabViewItems] != [_cells count]) {
- return;
- }
-
- // hide/show? (these return if already in desired state)
- if((_hideForSingleTab) && ([_cells count] <= 1)) {
- [self hideTabBar:YES animate:YES];
- return;
- } else {
- [self hideTabBar:NO animate:YES];
- }
-
- [self removeAllToolTips];
- [_controller layoutCells]; //eventually we should only have to call this when we know something has changed
-
- PSMTabBarCell *currentCell;
-
- NSMenu *overflowMenu = [_controller overflowMenu];
- [_overflowPopUpButton setHidden:(overflowMenu == nil)];
- [_overflowPopUpButton setMenu:overflowMenu];
-
- if(_animationTimer) {
- [_animationTimer invalidate];
- [_animationTimer release]; _animationTimer = nil;
- }
-
- if(animate) {
- NSMutableArray *targetFrames = [NSMutableArray arrayWithCapacity:[_cells count]];
-
- for(NSUInteger i = 0; i < [_cells count]; i++) {
- currentCell = [_cells objectAtIndex:i];
-
- //we're going from NSRect -> NSValue -> NSRect -> NSValue here - oh well
- [targetFrames addObject:[NSValue valueWithRect:[_controller cellFrameAtIndex:i]]];
- }
-
- [_addTabButton setHidden:!_showAddTabButton];
-
- NSAnimation *animation = [[NSAnimation alloc] initWithDuration:0.50 animationCurve:NSAnimationEaseInOut];
- [animation setAnimationBlockingMode:NSAnimationNonblocking];
- [animation startAnimation];
- _animationTimer = [[NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0
- target:self
- selector:@selector(_animateCells:)
- userInfo:[NSArray arrayWithObjects:targetFrames, animation, nil]
- repeats:YES] retain];
- [animation release];
- [[NSRunLoop currentRunLoop] addTimer:_animationTimer forMode:NSEventTrackingRunLoopMode];
- [self _animateCells:_animationTimer];
- } else {
- for(NSUInteger i = 0; i < [_cells count]; i++) {
- currentCell = [_cells objectAtIndex:i];
- [currentCell setFrame:[_controller cellFrameAtIndex:i]];
-
- if(![currentCell isInOverflowMenu]) {
- [self _setupTrackingRectsForCell:currentCell];
- }
- }
-
- [_addTabButton setFrame:[_controller addButtonRect]];
- [_addTabButton setHidden:!_showAddTabButton];
- [self setNeedsDisplay:YES];
- }
-}
-
-- (void)_animateCells:(NSTimer *)timer {
- NSAnimation *animation = [[timer userInfo] objectAtIndex:1];
- NSArray *targetFrames = [[timer userInfo] objectAtIndex:0];
- PSMTabBarCell *currentCell;
- NSUInteger cellCount = [_cells count];
-
- if((cellCount > 0) && [animation isAnimating]) {
- //compare our target position with the current position and move towards the target
- for(NSUInteger i = 0; i < [targetFrames count] && i < cellCount; i++) {
- currentCell = [_cells objectAtIndex:i];
- NSRect cellFrame = [currentCell frame], targetFrame = [[targetFrames objectAtIndex:i] rectValue];
- CGFloat sizeChange;
- CGFloat originChange;
-
- if([self orientation] == PSMTabBarHorizontalOrientation) {
- sizeChange = (targetFrame.size.width - cellFrame.size.width) * [animation currentProgress];
- originChange = (targetFrame.origin.x - cellFrame.origin.x) * [animation currentProgress];
- cellFrame.size.width += sizeChange;
- cellFrame.origin.x += originChange;
- } else {
- sizeChange = (targetFrame.size.height - cellFrame.size.height) * [animation currentProgress];
- originChange = (targetFrame.origin.y - cellFrame.origin.y) * [animation currentProgress];
- cellFrame.size.height += sizeChange;
- cellFrame.origin.y += originChange;
- }
-
- [currentCell setFrame:cellFrame];
-
- //highlight the cell if the mouse is over it
- NSPoint mousePoint = [self convertPoint:[[self window] mouseLocationOutsideOfEventStream] fromView:nil];
- NSRect closeRect = [currentCell closeButtonRectForFrame:cellFrame];
- [currentCell setHighlighted:NSMouseInRect(mousePoint, cellFrame, [self isFlipped])];
- [currentCell setCloseButtonOver:NSMouseInRect(mousePoint, closeRect, [self isFlipped])];
- }
-
- if(_showAddTabButton) {
- //animate the add tab button
- NSRect target = [_controller addButtonRect], frame = [_addTabButton frame];
- frame.origin.x += (target.origin.x - frame.origin.x) * [animation currentProgress];
- [_addTabButton setFrame:frame];
- }
- } else {
- //put all the cells where they should be in their final position
- if(cellCount > 0) {
- for(NSUInteger i = 0; i < [targetFrames count] && i < cellCount; i++) {
- PSMTabBarCell *currentCell = [_cells objectAtIndex:i];
- NSRect cellFrame = [currentCell frame], targetFrame = [[targetFrames objectAtIndex:i] rectValue];
-
- if([self orientation] == PSMTabBarHorizontalOrientation) {
- cellFrame.size.width = targetFrame.size.width;
- cellFrame.origin.x = targetFrame.origin.x;
- } else {
- cellFrame.size.height = targetFrame.size.height;
- cellFrame.origin.y = targetFrame.origin.y;
- }
-
- [currentCell setFrame:cellFrame];
-
- //highlight the cell if the mouse is over it
- NSPoint mousePoint = [self convertPoint:[[self window] mouseLocationOutsideOfEventStream] fromView:nil];
- NSRect closeRect = [currentCell closeButtonRectForFrame:cellFrame];
- [currentCell setHighlighted:NSMouseInRect(mousePoint, cellFrame, [self isFlipped])];
- [currentCell setCloseButtonOver:NSMouseInRect(mousePoint, closeRect, [self isFlipped])];
- }
- }
-
- //set the frame for the add tab button
- if(_showAddTabButton) {
- NSRect frame = [_addTabButton frame];
- frame.origin.x = [_controller addButtonRect].origin.x;
- [_addTabButton setFrame:frame];
- }
-
- [_animationTimer invalidate];
- [_animationTimer release]; _animationTimer = nil;
-
- for(NSUInteger i = 0; i < cellCount; i++) {
- currentCell = [_cells objectAtIndex:i];
-
- //we've hit the cells that are in overflow, stop setting up tracking rects
- if([currentCell isInOverflowMenu]) {
- break;
- }
-
- [self _setupTrackingRectsForCell:currentCell];
- }
- }
-
- [self setNeedsDisplay:YES];
-}
-
-- (void)_setupTrackingRectsForCell:(PSMTabBarCell *)cell {
- NSInteger tag, index = [_cells indexOfObject:cell];
- NSRect cellTrackingRect = [_controller cellTrackingRectAtIndex:index];
- NSPoint mousePoint = [self convertPoint:[[self window] mouseLocationOutsideOfEventStream] fromView:nil];
- BOOL mouseInCell = NSMouseInRect(mousePoint, cellTrackingRect, [self isFlipped]);
-
- //set the cell tracking rect
- [self removeTrackingRect:[cell cellTrackingTag]];
- tag = [self addTrackingRect:cellTrackingRect owner:cell userData:nil assumeInside:mouseInCell];
- [cell setCellTrackingTag:tag];
- [cell setHighlighted:mouseInCell];
-
- if([cell hasCloseButton] && ![cell isCloseButtonSuppressed]) {
- NSRect closeRect = [_controller closeButtonTrackingRectAtIndex:index];
- BOOL mouseInCloseRect = NSMouseInRect(mousePoint, closeRect, [self isFlipped]);
-
- //set the close button tracking rect
- [self removeTrackingRect:[cell closeButtonTrackingTag]];
- tag = [self addTrackingRect:closeRect owner:cell userData:nil assumeInside:mouseInCloseRect];
- [cell setCloseButtonTrackingTag:tag];
-
- [cell setCloseButtonOver:mouseInCloseRect];
- }
-
- //set the tooltip tracking rect
- [self addToolTipRect:[cell frame] owner:self userData:nil];
-}
-
-- (void)_positionOverflowMenu {
- NSRect cellRect, frame = [self frame];
- cellRect.size.height = [style tabCellHeight];
- cellRect.size.width = [style rightMarginForTabBarControl];
-
- if([self orientation] == PSMTabBarHorizontalOrientation) {
- cellRect.origin.y = 0;
- cellRect.origin.x = frame.size.width - [style rightMarginForTabBarControl] + (_resizeAreaCompensation ? -(_resizeAreaCompensation - 1) : 1);
- [_overflowPopUpButton setAutoresizingMask:NSViewNotSizable | NSViewMinXMargin];
- } else {
- cellRect.origin.x = 0;
- cellRect.origin.y = frame.size.height - [style tabCellHeight];
- cellRect.size.width = frame.size.width;
- [_overflowPopUpButton setAutoresizingMask:NSViewNotSizable | NSViewMinXMargin | NSViewMinYMargin];
- }
-
- [_overflowPopUpButton setFrame:cellRect];
-}
-
-- (void)_checkWindowFrame {
- //figure out if the new frame puts the control in the way of the resize widget
- NSWindow *window = [self window];
-
- if(window) {
- NSRect resizeWidgetFrame = [[window contentView] frame];
- resizeWidgetFrame.origin.x += resizeWidgetFrame.size.width - 22;
- resizeWidgetFrame.size.width = 22;
- resizeWidgetFrame.size.height = 22;
-
- if([window showsResizeIndicator] && NSIntersectsRect([self frame], resizeWidgetFrame)) {
- //the resize widgets are larger on metal windows
- _resizeAreaCompensation = [window styleMask] & NSTexturedBackgroundWindowMask ? 20 : 8;
- } else {
- _resizeAreaCompensation = 0;
- }
-
- [self _positionOverflowMenu];
- }
-}
-
-#pragma mark -
-#pragma mark Mouse Tracking
-
-- (BOOL)mouseDownCanMoveWindow {
- return NO;
-}
-
-- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent {
- return YES;
-}
-
-- (void)mouseDown:(NSEvent *)theEvent {
- _didDrag = NO;
-
- // keep for dragging
- [self setLastMouseDownEvent:theEvent];
- // what cell?
- NSPoint mousePt = [self convertPoint:[theEvent locationInWindow] fromView:nil];
- NSRect frame = [self frame];
-
- if([self orientation] == PSMTabBarVerticalOrientation && [self allowsResizing] && partnerView && (mousePt.x > frame.size.width - 3)) {
- _resizing = YES;
- }
-
- NSRect cellFrame;
- PSMTabBarCell *cell = [self cellForPoint:mousePt cellFrame:&cellFrame];
- if(cell) {
- BOOL overClose = NSMouseInRect(mousePt, [cell closeButtonRectForFrame:cellFrame], [self isFlipped]);
- if(overClose &&
- ![self disableTabClose] &&
- ![cell isCloseButtonSuppressed] &&
- ([self allowsBackgroundTabClosing] || [[cell representedObject] isEqualTo:[tabView selectedTabViewItem]] || [theEvent modifierFlags] & NSCommandKeyMask)) {
- [cell setCloseButtonOver:NO];
- [cell setCloseButtonPressed:YES];
- _closeClicked = YES;
- } else {
- [cell setCloseButtonPressed:NO];
- if(_selectsTabsOnMouseDown) {
- [self performSelector:@selector(tabClick:) withObject:cell];
- }
- }
- [self setNeedsDisplay:YES];
- }
-}
-
-- (void)mouseDragged:(NSEvent *)theEvent {
- if([self lastMouseDownEvent] == nil) {
- return;
- }
-
- NSPoint currentPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];
-
- if(_resizing) {
- NSRect frame = [self frame];
- CGFloat resizeAmount = [theEvent deltaX];
- if((currentPoint.x > frame.size.width && resizeAmount > 0) || (currentPoint.x < frame.size.width && resizeAmount < 0)) {
- [[NSCursor resizeLeftRightCursor] push];
-
- NSRect partnerFrame = [partnerView frame];
-
- //do some bounds checking
- if((frame.size.width + resizeAmount > [self cellMinWidth]) && (frame.size.width + resizeAmount < [self cellMaxWidth])) {
- frame.size.width += resizeAmount;
- partnerFrame.size.width -= resizeAmount;
- partnerFrame.origin.x += resizeAmount;
-
- [self setFrame:frame];
- [partnerView setFrame:partnerFrame];
- [[self superview] setNeedsDisplay:YES];
- }
- }
- return;
- }
-
- NSRect cellFrame;
- NSPoint trackingStartPoint = [self convertPoint:[[self lastMouseDownEvent] locationInWindow] fromView:nil];
- PSMTabBarCell *cell = [self cellForPoint:trackingStartPoint cellFrame:&cellFrame];
- if(cell) {
- //check to see if the close button was the target in the clicked cell
- //highlight/unhighlight the close button as necessary
- NSRect iconRect = [cell closeButtonRectForFrame:cellFrame];
-
- if(_closeClicked && NSMouseInRect(trackingStartPoint, iconRect, [self isFlipped]) &&
- ([self allowsBackgroundTabClosing] || [[cell representedObject] isEqualTo:[tabView selectedTabViewItem]])) {
- [cell setCloseButtonPressed:NSMouseInRect(currentPoint, iconRect, [self isFlipped])];
- [self setNeedsDisplay:YES];
- return;
- }
-
- CGFloat dx = fabs(currentPoint.x - trackingStartPoint.x);
- CGFloat dy = fabs(currentPoint.y - trackingStartPoint.y);
- CGFloat distance = sqrt(dx * dx + dy * dy);
-
- if(distance >= 10 && !_didDrag && ![[PSMTabDragAssistant sharedDragAssistant] isDragging] &&
- [self delegate] && [[self delegate] respondsToSelector:@selector(tabView:shouldDragTabViewItem:fromTabBar:)] &&
- [[self delegate] tabView:tabView shouldDragTabViewItem:[cell representedObject] fromTabBar:self]) {
- _didDrag = YES;
- [[PSMTabDragAssistant sharedDragAssistant] startDraggingCell:cell fromTabBar:self withMouseDownEvent:[self lastMouseDownEvent]];
- }
- }
-}
-
-- (void)mouseUp:(NSEvent *)theEvent {
- if(_resizing) {
- _resizing = NO;
- [[NSCursor arrowCursor] set];
- } else {
- // what cell?
- NSPoint mousePt = [self convertPoint:[theEvent locationInWindow] fromView:nil];
- NSRect cellFrame, mouseDownCellFrame;
- PSMTabBarCell *cell = [self cellForPoint:mousePt cellFrame:&cellFrame];
- PSMTabBarCell *mouseDownCell = [self cellForPoint:[self convertPoint:[[self lastMouseDownEvent] locationInWindow] fromView:nil] cellFrame:&mouseDownCellFrame];
- if(cell) {
- NSPoint trackingStartPoint = [self convertPoint:[[self lastMouseDownEvent] locationInWindow] fromView:nil];
- NSRect iconRect = [mouseDownCell closeButtonRectForFrame:mouseDownCellFrame];
-
- if((NSMouseInRect(mousePt, iconRect, [self isFlipped])) && ![self disableTabClose] && ![cell isCloseButtonSuppressed] && [mouseDownCell closeButtonPressed]) {
- if(([[NSApp currentEvent] modifierFlags] & NSAlternateKeyMask) != 0) {
- //If the user is holding Option, close all other tabs
- NSEnumerator *enumerator = [[[[self cells] copy] autorelease] objectEnumerator];
- PSMTabBarCell *otherCell;
-
- while((otherCell = [enumerator nextObject])) {
- if(otherCell != cell) {
- [self performSelector:@selector(closeTabClick:) withObject:otherCell];
- }
- }
-
- //Fix the close button for the clicked tab not to be pressed
- [cell setCloseButtonPressed:NO];
- } else {
- //Otherwise, close this tab
- [self performSelector:@selector(closeTabClick:) withObject:cell];
- }
- } else if(NSMouseInRect(mousePt, mouseDownCellFrame, [self isFlipped]) &&
- (!NSMouseInRect(trackingStartPoint, [cell closeButtonRectForFrame:cellFrame], [self isFlipped]) || ![self allowsBackgroundTabClosing] || [self disableTabClose])) {
- [mouseDownCell setCloseButtonPressed:NO];
- // If -[self selectsTabsOnMouseDown] is TRUE, we already performed tabClick: on mouseDown.
- if(![self selectsTabsOnMouseDown]) {
- [self performSelector:@selector(tabClick:) withObject:cell];
- }
- } else {
- [mouseDownCell setCloseButtonPressed:NO];
- [self performSelector:@selector(tabNothing:) withObject:cell];
- }
- }
-
- _closeClicked = NO;
- }
-}
-
-- (NSMenu *)menuForEvent:(NSEvent *)event {
- NSMenu *menu = nil;
- NSTabViewItem *item = [[self cellForPoint:[self convertPoint:[event locationInWindow] fromView:nil] cellFrame:nil] representedObject];
-
- if(item && [[self delegate] respondsToSelector:@selector(tabView:menuForTabViewItem:)]) {
- menu = [[self delegate] tabView:tabView menuForTabViewItem:item];
- }
- return menu;
-}
-
-#pragma mark -
-#pragma mark Drag and Drop
-
-- (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent *)theEvent {
- return YES;
-}
-
-// NSDraggingSource
-- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal {
- return(isLocal ? NSDragOperationMove : NSDragOperationNone);
-}
-
-- (BOOL)ignoreModifierKeysWhileDragging {
- return YES;
-}
-
-- (void)draggedImage:(NSImage *)anImage beganAt:(NSPoint)screenPoint {
- [[PSMTabDragAssistant sharedDragAssistant] draggingBeganAt:screenPoint];
-}
-
-- (void)draggedImage:(NSImage *)image movedTo:(NSPoint)screenPoint {
- [[PSMTabDragAssistant sharedDragAssistant] draggingMovedTo:screenPoint];
-}
-
-// NSDraggingDestination
-- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
- if([[[sender draggingPasteboard] types] indexOfObject:@"PSMTabBarControlItemPBType"] != NSNotFound) {
- if([self delegate] && [[self delegate] respondsToSelector:@selector(tabView:shouldDropTabViewItem:inTabBar:)] &&
- ![[self delegate] tabView:[[sender draggingSource] tabView] shouldDropTabViewItem:[[[PSMTabDragAssistant sharedDragAssistant] draggedCell] representedObject] inTabBar:self]) {
- return NSDragOperationNone;
- }
-
- [[PSMTabDragAssistant sharedDragAssistant] draggingEnteredTabBar:self atPoint:[self convertPoint:[sender draggingLocation] fromView:nil]];
- return NSDragOperationMove;
- }
-
- return NSDragOperationNone;
-}
-
-- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender {
- PSMTabBarCell *cell = [self cellForPoint:[self convertPoint:[sender draggingLocation] fromView:nil] cellFrame:nil];
-
- if([[[sender draggingPasteboard] types] indexOfObject:@"PSMTabBarControlItemPBType"] != NSNotFound) {
- if([self delegate] && [[self delegate] respondsToSelector:@selector(tabView:shouldDropTabViewItem:inTabBar:)] &&
- ![[self delegate] tabView:[[sender draggingSource] tabView] shouldDropTabViewItem:[[[PSMTabDragAssistant sharedDragAssistant] draggedCell] representedObject] inTabBar:self]) {
- return NSDragOperationNone;
- }
-
- [[PSMTabDragAssistant sharedDragAssistant] draggingUpdatedInTabBar:self atPoint:[self convertPoint:[sender draggingLocation] fromView:nil]];
- return NSDragOperationMove;
- } else if(cell) {
- //something that was accepted by the delegate was dragged on
-
- //Test for the space bar (the skip-the-delay key).
- /*enum { virtualKeycodeForSpace = 49 }; //Source: IM:Tx (Fig. C-2)
- union {
- KeyMap keymap;
- char bits[16];
- } keymap;
- GetKeys(keymap.keymap);
- if ((GetCurrentEventKeyModifiers() == 0) && bit_test(keymap.bits, virtualKeycodeForSpace)) {
- //The user pressed the space bar. This skips the delay; the user wants to pop the spring on this tab *now*.
-
- //For some reason, it crashes if I call -fire here. I don't know why. It doesn't crash if I simply set the fire date to now.
- [_springTimer setFireDate:[NSDate date]];
- } else {*/
- //Wind the spring for a spring-loaded drop.
- //The delay time comes from Finder's defaults, which specifies it in milliseconds.
- //If the delegate can't handle our spring-loaded drop, we'll abort it when the timer fires. See fireSpring:. This is simpler than constantly (checking for spring-loaded awareness and tearing down/rebuilding the timer) at every delegate change.
-
- //If the user has dragged to a different tab, reset the timer.
- if(_tabViewItemWithSpring != [cell representedObject]) {
- [_springTimer invalidate];
- [_springTimer release]; _springTimer = nil;
- _tabViewItemWithSpring = [cell representedObject];
- }
- if(!_springTimer) {
- //Finder's default delay time, as of Tiger, is 668 ms. If the user has never changed it, there's no setting in its defaults, so we default to that amount.
- NSNumber *delayNumber = [(NSNumber *)CFPreferencesCopyAppValue((CFStringRef)@"SpringingDelayMilliseconds", (CFStringRef)@"com.apple.finder") autorelease];
- NSTimeInterval delaySeconds = delayNumber ?[delayNumber doubleValue] / 1000.0 : 0.668;
- _springTimer = [[NSTimer scheduledTimerWithTimeInterval:delaySeconds
- target:self
- selector:@selector(fireSpring:)
- userInfo:sender
- repeats:NO] retain];
- }
- return NSDragOperationCopy;
- }
-
- return NSDragOperationNone;
-}
-
-- (void)draggingExited:(id <NSDraggingInfo>)sender {
- [_springTimer invalidate];
- [_springTimer release]; _springTimer = nil;
-
- [[PSMTabDragAssistant sharedDragAssistant] draggingExitedTabBar:self];
-}
-
-- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender {
- //validate the drag operation only if there's a valid tab bar to drop into
- return [[[sender draggingPasteboard] types] indexOfObject:@"PSMTabBarControlItemPBType"] == NSNotFound ||
- [[PSMTabDragAssistant sharedDragAssistant] destinationTabBar] != nil;
-}
-
-- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender {
- if([[[sender draggingPasteboard] types] indexOfObject:@"PSMTabBarControlItemPBType"] != NSNotFound) {
- [[PSMTabDragAssistant sharedDragAssistant] performDragOperation];
- } else if([self delegate] && [[self delegate] respondsToSelector:@selector(tabView:acceptedDraggingInfo:onTabViewItem:)]) {
- //forward the drop to the delegate
- [[self delegate] tabView:tabView acceptedDraggingInfo:sender onTabViewItem:[[self cellForPoint:[self convertPoint:[sender draggingLocation] fromView:nil] cellFrame:nil] representedObject]];
- }
- return YES;
-}
-
-- (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint operation:(NSDragOperation)operation {
- [[PSMTabDragAssistant sharedDragAssistant] draggedImageEndedAt:aPoint operation:operation];
-}
-
-- (void)concludeDragOperation:(id <NSDraggingInfo>)sender {
-}
-
-#pragma mark -
-#pragma mark Spring-loading
-
-- (void)fireSpring:(NSTimer *)timer {
- NSAssert1(timer == _springTimer, @"Spring fired by unrecognized timer %@", timer);
-
- id <NSDraggingInfo> sender = [timer userInfo];
- PSMTabBarCell *cell = [self cellForPoint:[self convertPoint:[sender draggingLocation] fromView:nil] cellFrame:nil];
- [tabView selectTabViewItem:[cell representedObject]];
-
- _tabViewItemWithSpring = nil;
- [_springTimer invalidate];
- [_springTimer release]; _springTimer = nil;
-}
-
-#pragma mark -
-#pragma mark Actions
-
-- (void)overflowMenuAction:(id)sender {
- NSTabViewItem *tabViewItem = (NSTabViewItem *)[sender representedObject];
- [tabView selectTabViewItem:tabViewItem];
-}
-
-- (void)closeTabClick:(id)sender {
- NSTabViewItem *item = [sender representedObject];
- [sender retain];
- if(([_cells count] == 1) && (![self canCloseOnlyTab])) {
- return;
- }
-
- if([[self delegate] respondsToSelector:@selector(tabView:shouldCloseTabViewItem:)]) {
- if(![[self delegate] tabView:tabView shouldCloseTabViewItem:item]) {
- // fix mouse downed close button
- [sender setCloseButtonPressed:NO];
- return;
- }
- }
-
- [item retain];
-
- [tabView removeTabViewItem:item];
- [item release];
- [sender release];
-}
-
-- (void)tabClick:(id)sender {
- [tabView selectTabViewItem:[sender representedObject]];
-}
-
-- (void)tabNothing:(id)sender {
- //[self update]; // takes care of highlighting based on state
-}
-
-- (void)frameDidChange:(NSNotification *)notification {
- [self _checkWindowFrame];
-
- // trying to address the drawing artifacts for the progress indicators - hackery follows
- // this one fixes the "blanking" effect when the control hides and shows itself
- NSEnumerator *e = [_cells objectEnumerator];
- PSMTabBarCell *cell;
- while((cell = [e nextObject])) {
- [[cell indicator] stopAnimation:self];
-
- [[cell indicator] performSelector:@selector(startAnimation:)
- withObject:nil
- afterDelay:0];
- }
-
- [self update:NO];
-}
-
-- (void)viewDidMoveToWindow {
- [self _checkWindowFrame];
-}
-
-- (void)viewWillStartLiveResize {
- NSEnumerator *e = [_cells objectEnumerator];
- PSMTabBarCell *cell;
- while((cell = [e nextObject])) {
- [[cell indicator] stopAnimation:self];
- }
- [self setNeedsDisplay:YES];
-}
-
--(void)viewDidEndLiveResize {
- NSEnumerator *e = [_cells objectEnumerator];
- PSMTabBarCell *cell;
- while((cell = [e nextObject])) {
- [[cell indicator] startAnimation:self];
- }
-
- [self _checkWindowFrame];
- [self update:NO];
-}
-
-- (void)resetCursorRects {
- [super resetCursorRects];
- if([self orientation] == PSMTabBarVerticalOrientation) {
- NSRect frame = [self frame];
- [self addCursorRect:NSMakeRect(frame.size.width - 2, 0, 2, frame.size.height) cursor:[NSCursor resizeLeftRightCursor]];
- }
-}
-
-- (void)windowDidMove:(NSNotification *)aNotification {
- [self setNeedsDisplay:YES];
-}
-
-- (void)windowDidUpdate:(NSNotification *)notification {
- // hide? must readjust things if I'm not supposed to be showing
- // this block of code only runs when the app launches
- if([self hideForSingleTab] && ([_cells count] <= 1) && !_awakenedFromNib) {
- // must adjust frames now before display
- NSRect myFrame = [self frame];
- if([self orientation] == PSMTabBarHorizontalOrientation) {
- if(partnerView) {
- NSRect partnerFrame = [partnerView frame];
- // above or below me?
- if(myFrame.origin.y - 22 > [partnerView frame].origin.y) {
- // partner is below me
- [self setFrame:NSMakeRect(myFrame.origin.x, myFrame.origin.y + 21, myFrame.size.width, myFrame.size.height - 21)];
- [partnerView setFrame:NSMakeRect(partnerFrame.origin.x, partnerFrame.origin.y, partnerFrame.size.width, partnerFrame.size.height + 21)];
- } else {
- // partner is above me
- [self setFrame:NSMakeRect(myFrame.origin.x, myFrame.origin.y, myFrame.size.width, myFrame.size.height - 21)];
- [partnerView setFrame:NSMakeRect(partnerFrame.origin.x, partnerFrame.origin.y - 21, partnerFrame.size.width, partnerFrame.size.height + 21)];
- }
- [partnerView setNeedsDisplay:YES];
- [self setNeedsDisplay:YES];
- } else {
- // for window movement
- NSRect windowFrame = [[self window] frame];
- [[self window] setFrame:NSMakeRect(windowFrame.origin.x, windowFrame.origin.y + 21, windowFrame.size.width, windowFrame.size.height - 21) display:YES];
- [self setFrame:NSMakeRect(myFrame.origin.x, myFrame.origin.y, myFrame.size.width, myFrame.size.height - 21)];
- }
- } else {
- if(partnerView) {
- NSRect partnerFrame = [partnerView frame];
- //to the left or right?
- if(myFrame.origin.x < [partnerView frame].origin.x) {
- // partner is to the left
- [self setFrame:NSMakeRect(myFrame.origin.x, myFrame.origin.y, 1, myFrame.size.height)];
- [partnerView setFrame:NSMakeRect(partnerFrame.origin.x - myFrame.size.width + 1, partnerFrame.origin.y, partnerFrame.size.width + myFrame.size.width - 1, partnerFrame.size.height)];
- } else {
- // partner to the right
- [self setFrame:NSMakeRect(myFrame.origin.x + myFrame.size.width, myFrame.origin.y, 1, myFrame.size.height)];
- [partnerView setFrame:NSMakeRect(partnerFrame.origin.x, partnerFrame.origin.y, partnerFrame.size.width + myFrame.size.width, partnerFrame.size.height)];
- }
- _tabBarWidth = myFrame.size.width;
- [partnerView setNeedsDisplay:YES];
- [self setNeedsDisplay:YES];
- } else {
- // for window movement
- NSRect windowFrame = [[self window] frame];
- [[self window] setFrame:NSMakeRect(windowFrame.origin.x + myFrame.size.width - 1, windowFrame.origin.y, windowFrame.size.width - myFrame.size.width + 1, windowFrame.size.height) display:YES];
- [self setFrame:NSMakeRect(myFrame.origin.x, myFrame.origin.y, 1, myFrame.size.height)];
- }
- }
-
- _isHidden = YES;
-
- if([[self delegate] respondsToSelector:@selector(tabView:tabBarDidHide:)]) {
- [[self delegate] tabView:[self tabView] tabBarDidHide:self];
- }
- }
-
- _awakenedFromNib = YES;
- [self setNeedsDisplay:YES];
-
- //we only need to do this once
- [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidUpdateNotification object:nil];
-}
-
-#pragma mark -
-#pragma mark Menu Validation
-
-- (BOOL)validateMenuItem:(NSMenuItem *)sender {
- [sender setState:([[sender representedObject] isEqualTo:[tabView selectedTabViewItem]]) ? NSOnState : NSOffState];
-
- return [[self delegate] respondsToSelector:@selector(tabView:validateOverflowMenuItem:forTabViewItem:)] ?
- [[self delegate] tabView:[self tabView] validateOverflowMenuItem:sender forTabViewItem:[sender representedObject]] : YES;
-}
-
-#pragma mark -
-#pragma mark NSTabView Delegate
-
-- (void)tabView:(NSTabView *)aTabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem {
- // here's a weird one - this message is sent before the "tabViewDidChangeNumberOfTabViewItems"
- // message, thus I can end up updating when there are no cells, if no tabs were (yet) present
- NSUInteger tabIndex = [aTabView indexOfTabViewItem:tabViewItem];
-
- if([_cells count] > 0 && tabIndex < [_cells count]) {
- PSMTabBarCell *thisCell = [_cells objectAtIndex:tabIndex];
- if(_alwaysShowActiveTab && [thisCell isInOverflowMenu]) {
- //temporarily disable the delegate in order to move the tab to a different index
- id tempDelegate = [aTabView delegate];
- [aTabView setDelegate:nil];
-
- // move it all around first
- [tabViewItem retain];
- [thisCell retain];
- [aTabView removeTabViewItem:tabViewItem];
- [aTabView insertTabViewItem:tabViewItem atIndex:0];
- [_cells removeObjectAtIndex:tabIndex];
- [_cells insertObject:thisCell atIndex:0];
- [thisCell setIsInOverflowMenu:NO]; //very important else we get a fun recursive loop going
- [[_cells objectAtIndex:[_cells count] - 1] setIsInOverflowMenu:YES]; //these 2 lines are pretty uncool and this logic needs to be updated
- [thisCell release];
- [tabViewItem release];
-
- [aTabView setDelegate:tempDelegate];
-
- //reset the selection since removing it changed the selection
- [aTabView selectTabViewItem:tabViewItem];
-
- [self update];
- } else {
- [_controller setSelectedCell:thisCell];
- [self setNeedsDisplay:YES];
- }
- }
-
- if([[self delegate] respondsToSelector:@selector(tabView:didSelectTabViewItem:)]) {
- [[self delegate] performSelector:@selector(tabView:didSelectTabViewItem:) withObject:aTabView withObject:tabViewItem];
- }
-}
-
-- (BOOL)tabView:(NSTabView *)aTabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem {
- if([[self delegate] respondsToSelector:@selector(tabView:shouldSelectTabViewItem:)]) {
- return [[self delegate] tabView:aTabView shouldSelectTabViewItem:tabViewItem];
- } else {
- return YES;
- }
-}
-- (void)tabView:(NSTabView *)aTabView willSelectTabViewItem:(NSTabViewItem *)tabViewItem {
- if([[self delegate] respondsToSelector:@selector(tabView:willSelectTabViewItem:)]) {
- [[self delegate] performSelector:@selector(tabView:willSelectTabViewItem:) withObject:aTabView withObject:tabViewItem];
- }
-}
-
-- (void)tabViewDidChangeNumberOfTabViewItems:(NSTabView *)aTabView {
- NSArray *tabItems = [tabView tabViewItems];
- // go through cells, remove any whose representedObjects are not in [tabView tabViewItems]
- NSEnumerator *e = [[[_cells copy] autorelease] objectEnumerator];
- PSMTabBarCell *cell;
- while((cell = [e nextObject])) {
- //remove the observer binding
- if([cell representedObject] && ![tabItems containsObject:[cell representedObject]]) {
- if([[self delegate] respondsToSelector:@selector(tabView:didCloseTabViewItem:)]) {
- [[self delegate] tabView:aTabView didCloseTabViewItem:[cell representedObject]];
- }
-
- [self removeTabForCell:cell];
- }
- }
-
- // go through tab view items, add cell for any not present
- NSMutableArray *cellItems = [self representedTabViewItems];
- NSEnumerator *ex = [tabItems objectEnumerator];
- NSTabViewItem *item;
- while((item = [ex nextObject])) {
- if(![cellItems containsObject:item]) {
- [self addTabViewItem:item];
- }
- }
-
- // pass along for other delegate responses
- if([[self delegate] respondsToSelector:@selector(tabViewDidChangeNumberOfTabViewItems:)]) {
- [[self delegate] performSelector:@selector(tabViewDidChangeNumberOfTabViewItems:) withObject:aTabView];
- }
-
- // reset cursor tracking for the add tab button if one exists
- if([self addTabButton]) {
- [[self addTabButton] resetCursorRects];
- }
-}
-
-#pragma mark -
-#pragma mark Tooltips
-
-- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)userData {
- if([[self delegate] respondsToSelector:@selector(tabView:toolTipForTabViewItem:)]) {
- return [[self delegate] tabView:[self tabView] toolTipForTabViewItem:[[self cellForPoint:point cellFrame:nil] representedObject]];
- }
- return nil;
-}
-
-#pragma mark -
-#pragma mark Archiving
-
-- (void)encodeWithCoder:(NSCoder *)aCoder
-{
- [super encodeWithCoder:aCoder];
- if ([aCoder allowsKeyedCoding]) {
- [aCoder encodeObject:_cells forKey:@"PSMcells"];
- [aCoder encodeObject:tabView forKey:@"PSMtabView"];
- [aCoder encodeObject:_overflowPopUpButton forKey:@"PSMoverflowPopUpButton"];
- [aCoder encodeObject:_addTabButton forKey:@"PSMaddTabButton"];
- [aCoder encodeObject:style forKey:@"PSMstyle"];
- [aCoder encodeInteger:_orientation forKey:@"PSMorientation"];
- [aCoder encodeBool:_canCloseOnlyTab forKey:@"PSMcanCloseOnlyTab"];
- [aCoder encodeBool:_disableTabClose forKey:@"PSMdisableTabClose"];
- [aCoder encodeBool:_hideForSingleTab forKey:@"PSMhideForSingleTab"];
- [aCoder encodeBool:_allowsBackgroundTabClosing forKey:@"PSMallowsBackgroundTabClosing"];
- [aCoder encodeBool:_allowsResizing forKey:@"PSMallowsResizing"];
- [aCoder encodeBool:_selectsTabsOnMouseDown forKey:@"PSMselectsTabsOnMouseDown"];
- [aCoder encodeBool:_showAddTabButton forKey:@"PSMshowAddTabButton"];
- [aCoder encodeBool:_sizeCellsToFit forKey:@"PSMsizeCellsToFit"];
- [aCoder encodeInteger:_cellMinWidth forKey:@"PSMcellMinWidth"];
- [aCoder encodeInteger:_cellMaxWidth forKey:@"PSMcellMaxWidth"];
- [aCoder encodeInteger:_cellOptimumWidth forKey:@"PSMcellOptimumWidth"];
- [aCoder encodeInteger:_currentStep forKey:@"PSMcurrentStep"];
- [aCoder encodeBool:_isHidden forKey:@"PSMisHidden"];
- [aCoder encodeObject:partnerView forKey:@"PSMpartnerView"];
- [aCoder encodeBool:_awakenedFromNib forKey:@"PSMawakenedFromNib"];
- [aCoder encodeObject:_lastMouseDownEvent forKey:@"PSMlastMouseDownEvent"];
- [aCoder encodeObject:delegate forKey:@"PSMdelegate"];
- [aCoder encodeBool:_useOverflowMenu forKey:@"PSMuseOverflowMenu"];
- [aCoder encodeBool:_automaticallyAnimates forKey:@"PSMautomaticallyAnimates"];
- [aCoder encodeBool:_alwaysShowActiveTab forKey:@"PSMalwaysShowActiveTab"];
- }
-}
-
-- (id)initWithCoder:(NSCoder *)aDecoder
-{
- self = [super initWithCoder:aDecoder];
- if (self) {
- // Initialization
- [self initAddedProperties];
- [self registerForDraggedTypes:[NSArray arrayWithObjects:@"PSMTabBarControlItemPBType", nil]];
-
- // resize
- [self setPostsFrameChangedNotifications:YES];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(frameDidChange:) name:NSViewFrameDidChangeNotification object:self];
- if ([aDecoder allowsKeyedCoding]) {
- _cells = [[aDecoder decodeObjectForKey:@"PSMcells"] retain];
- tabView = [[aDecoder decodeObjectForKey:@"PSMtabView"] retain];
- _overflowPopUpButton = [[aDecoder decodeObjectForKey:@"PSMoverflowPopUpButton"] retain];
- _addTabButton = [[aDecoder decodeObjectForKey:@"PSMaddTabButton"] retain];
- style = [[aDecoder decodeObjectForKey:@"PSMstyle"] retain];
- _orientation = (PSMTabBarOrientation)[aDecoder decodeIntegerForKey:@"PSMorientation"];
- _canCloseOnlyTab = [aDecoder decodeBoolForKey:@"PSMcanCloseOnlyTab"];
- _disableTabClose = [aDecoder decodeBoolForKey:@"PSMdisableTabClose"];
- _hideForSingleTab = [aDecoder decodeBoolForKey:@"PSMhideForSingleTab"];
- _allowsBackgroundTabClosing = [aDecoder decodeBoolForKey:@"PSMallowsBackgroundTabClosing"];
- _allowsResizing = [aDecoder decodeBoolForKey:@"PSMallowsResizing"];
- _selectsTabsOnMouseDown = [aDecoder decodeBoolForKey:@"PSMselectsTabsOnMouseDown"];
- _showAddTabButton = [aDecoder decodeBoolForKey:@"PSMshowAddTabButton"];
- _sizeCellsToFit = [aDecoder decodeBoolForKey:@"PSMsizeCellsToFit"];
- _cellMinWidth = [aDecoder decodeIntegerForKey:@"PSMcellMinWidth"];
- _cellMaxWidth = [aDecoder decodeIntegerForKey:@"PSMcellMaxWidth"];
- _cellOptimumWidth = [aDecoder decodeIntegerForKey:@"PSMcellOptimumWidth"];
- _currentStep = [aDecoder decodeIntegerForKey:@"PSMcurrentStep"];
- _isHidden = [aDecoder decodeBoolForKey:@"PSMisHidden"];
- partnerView = [[aDecoder decodeObjectForKey:@"PSMpartnerView"] retain];
- _awakenedFromNib = [aDecoder decodeBoolForKey:@"PSMawakenedFromNib"];
- _lastMouseDownEvent = [[aDecoder decodeObjectForKey:@"PSMlastMouseDownEvent"] retain];
- _useOverflowMenu = [aDecoder decodeBoolForKey:@"PSMuseOverflowMenu"];
- _automaticallyAnimates = [aDecoder decodeBoolForKey:@"PSMautomaticallyAnimates"];
- _alwaysShowActiveTab = [aDecoder decodeBoolForKey:@"PSMalwaysShowActiveTab"];
- delegate = [[aDecoder decodeObjectForKey:@"PSMdelegate"] retain];
- }
- }
- [self setTarget:self];
- return self;
-}
-
-#pragma mark -
-#pragma mark IB Palette
-
-- (NSSize)minimumFrameSizeFromKnobPosition:(NSInteger)position {
- return NSMakeSize(100.0, 22.0);
-}
-
-- (NSSize)maximumFrameSizeFromKnobPosition:(NSInteger)knobPosition {
- return NSMakeSize(10000.0, 22.0);
-}
-
-- (void)placeView:(NSRect)newFrame {
- // this is called any time the view is resized in IB
- [self setFrame:newFrame];
- [self update:NO];
-}
-
-#pragma mark -
-#pragma mark Convenience
-
-- (void)bindPropertiesForCell:(PSMTabBarCell *)cell andTabViewItem:(NSTabViewItem *)item {
- [self _bindPropertiesForCell:cell andTabViewItem:item];
-
- // watch for changes in the identifier
- [item addObserver:self forKeyPath:@"identifier" options:0 context:nil];
-}
-
-- (void)_bindPropertiesForCell:(PSMTabBarCell *)cell andTabViewItem:(NSTabViewItem *)item {
- // bind the indicator to the represented object's status (if it exists)
- [[cell indicator] setHidden:YES];
- if([item identifier] != nil) {
- if([[[cell representedObject] identifier] respondsToSelector:@selector(isProcessing)]) {
- NSMutableDictionary *bindingOptions = [NSMutableDictionary dictionary];
- [bindingOptions setObject:NSNegateBooleanTransformerName forKey:@"NSValueTransformerName"];
- [[cell indicator] bind:@"animate" toObject:[item identifier] withKeyPath:@"isProcessing" options:nil];
- [[cell indicator] bind:@"hidden" toObject:[item identifier] withKeyPath:@"isProcessing" options:bindingOptions];
- [[item identifier] addObserver:cell forKeyPath:@"isProcessing" options:0 context:nil];
- }
- }
-
- // bind for the existence of an icon
- [cell setHasIcon:NO];
- if([item identifier] != nil) {
- if([[[cell representedObject] identifier] respondsToSelector:@selector(icon)]) {
- NSMutableDictionary *bindingOptions = [NSMutableDictionary dictionary];
- [bindingOptions setObject:NSIsNotNilTransformerName forKey:@"NSValueTransformerName"];
- [cell bind:@"hasIcon" toObject:[item identifier] withKeyPath:@"icon" options:bindingOptions];
- [[item identifier] addObserver:cell forKeyPath:@"icon" options:0 context:nil];
- }
- }
-
- // bind for the existence of a counter
- [cell setCount:0];
- if([item identifier] != nil) {
- if([[[cell representedObject] identifier] respondsToSelector:@selector(objectCount)]) {
- [cell bind:@"count" toObject:[item identifier] withKeyPath:@"objectCount" options:nil];
- [[item identifier] addObserver:cell forKeyPath:@"objectCount" options:0 context:nil];
- }
- }
-
- // bind for the color of a counter
- [cell setCountColor:nil];
- if([item identifier] != nil) {
- if([[[cell representedObject] identifier] respondsToSelector:@selector(countColor)]) {
- [cell bind:@"countColor" toObject:[item identifier] withKeyPath:@"countColor" options:nil];
- [[item identifier] addObserver:cell forKeyPath:@"countColor" options:0 context:nil];
- }
- }
-
- // bind for a large image
- [cell setHasLargeImage:NO];
- if([item identifier] != nil) {
- if([[[cell representedObject] identifier] respondsToSelector:@selector(largeImage)]) {
- NSMutableDictionary *bindingOptions = [NSMutableDictionary dictionary];
- [bindingOptions setObject:NSIsNotNilTransformerName forKey:@"NSValueTransformerName"];
- [cell bind:@"hasLargeImage" toObject:[item identifier] withKeyPath:@"largeImage" options:bindingOptions];
- [[item identifier] addObserver:cell forKeyPath:@"largeImage" options:0 context:nil];
- }
- }
-
- [cell setIsEdited:NO];
- if([item identifier] != nil) {
- if([[[cell representedObject] identifier] respondsToSelector:@selector(isEdited)]) {
- [cell bind:@"isEdited" toObject:[item identifier] withKeyPath:@"isEdited" options:nil];
- [[item identifier] addObserver:cell forKeyPath:@"isEdited" options:0 context:nil];
- }
- }
-
- // bind my string value to the label on the represented tab
- [cell bind:@"title" toObject:item withKeyPath:@"label" options:nil];
-}
-
-- (NSMutableArray *)representedTabViewItems {
- NSMutableArray *temp = [NSMutableArray arrayWithCapacity:[_cells count]];
- NSEnumerator *e = [_cells objectEnumerator];
- PSMTabBarCell *cell;
- while((cell = [e nextObject])) {
- if([cell representedObject]) {
- [temp addObject:[cell representedObject]];
- }
- }
- return temp;
-}
-
-- (id)cellForPoint:(NSPoint)point cellFrame:(NSRectPointer)outFrame {
- if([self orientation] == PSMTabBarHorizontalOrientation && !NSPointInRect(point, [self genericCellRect])) {
- return nil;
- }
-
- NSInteger i, cnt = [_cells count];
- for(i = 0; i < cnt; i++) {
- PSMTabBarCell *cell = [_cells objectAtIndex:i];
-
- if(NSPointInRect(point, [cell frame])) {
- if(outFrame) {
- *outFrame = [cell frame];
- }
- return cell;
- }
- }
- return nil;
-}
-
-- (PSMTabBarCell *)lastVisibleTab {
- NSInteger i, cellCount = [_cells count];
- for(i = 0; i < cellCount; i++) {
- if([[_cells objectAtIndex:i] isInOverflowMenu]) {
- return [_cells objectAtIndex:(i - 1)];
- }
- }
- return [_cells objectAtIndex:(cellCount - 1)];
-}
-
-- (NSInteger)numberOfVisibleTabs {
- NSUInteger i, cellCount = 0;
- PSMTabBarCell *nextCell;
-
- for(i = 0; i < [_cells count]; i++) {
- nextCell = [_cells objectAtIndex:i];
-
- if([nextCell isInOverflowMenu]) {
- break;
- }
-
- if(![nextCell isPlaceholder]) {
- cellCount++;
- }
- }
-
- return cellCount;
-}
-
-#pragma mark -
-#pragma mark Accessibility
-
--(BOOL)accessibilityIsIgnored {
- return NO;
-}
-
-- (id)accessibilityAttributeValue:(NSString *)attribute {
- id attributeValue = nil;
- if([attribute isEqualToString: NSAccessibilityRoleAttribute]) {
- attributeValue = NSAccessibilityGroupRole;
- } else if([attribute isEqualToString: NSAccessibilityChildrenAttribute]) {
- attributeValue = NSAccessibilityUnignoredChildren(_cells);
- } else {
- attributeValue = [super accessibilityAttributeValue:attribute];
- }
- return attributeValue;
-}
-
-- (id)accessibilityHitTest:(NSPoint)point {
- id hitTestResult = self;
-
- NSEnumerator *enumerator = [_cells objectEnumerator];
- PSMTabBarCell *cell = nil;
- PSMTabBarCell *highlightedCell = nil;
-
- while(!highlightedCell && (cell = [enumerator nextObject])) {
- if([cell isHighlighted]) {
- highlightedCell = cell;
- }
- }
-
- if(highlightedCell) {
- hitTestResult = [highlightedCell accessibilityHitTest:point];
- }
-
- return hitTestResult;
-}
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabBarController.h b/frontends/cocoa/PSMTabBarControl/PSMTabBarController.h
deleted file mode 100644
index a73a04f..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabBarController.h
+++ b/dev/null
@@ -1,38 +0,0 @@
-//
-// PSMTabBarController.h
-// PSMTabBarControl
-//
-// Created by Kent Sutherland on 11/24/06.
-// Copyright 2006 Kent Sutherland. All rights reserved.
-//
-
-#import <Cocoa/Cocoa.h>
-
-@class PSMTabBarControl, PSMTabBarCell;
-
-@interface PSMTabBarController : NSObject
-#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
- <NSMenuDelegate>
-#endif
-{
- PSMTabBarControl *_control;
- NSMutableArray *_cellTrackingRects;
- NSMutableArray *_closeButtonTrackingRects;
- NSMutableArray *_cellFrames;
- NSRect _addButtonRect;
- NSMenu *_overflowMenu;
-}
-
-- (id)initWithTabBarControl:(PSMTabBarControl *)control;
-
-- (NSRect)addButtonRect;
-- (NSMenu *)overflowMenu;
-- (NSRect)cellTrackingRectAtIndex:(NSUInteger)index;
-- (NSRect)closeButtonTrackingRectAtIndex:(NSUInteger)index;
-- (NSRect)cellFrameAtIndex:(NSUInteger)index;
-
-- (void)setSelectedCell:(PSMTabBarCell *)cell;
-
-- (void)layoutCells;
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabBarController.m b/frontends/cocoa/PSMTabBarControl/PSMTabBarController.m
deleted file mode 100644
index 68e1bc4..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabBarController.m
+++ b/dev/null
@@ -1,643 +0,0 @@
-//
-// PSMTabBarController.m
-// PSMTabBarControl
-//
-// Created by Kent Sutherland on 11/24/06.
-// Copyright 2006 Kent Sutherland. All rights reserved.
-//
-
-#import "PSMTabBarController.h"
-#import "PSMTabBarControl.h"
-#import "PSMTabBarCell.h"
-#import "PSMTabStyle.h"
-#import "NSString_AITruncation.h"
-
-#define MAX_OVERFLOW_MENUITEM_TITLE_LENGTH 60
-
-@interface PSMTabBarController (Private)
-- (NSArray *)_generateWidthsFromCells:(NSArray *)cells;
-- (void)_setupCells:(NSArray *)cells withWidths:(NSArray *)widths;
-@end
-
-@implementation PSMTabBarController
-
-/*!
- @method initWithTabBarControl:
- @abstract Creates a new PSMTabBarController instance.
- @discussion Creates a new PSMTabBarController for controlling a PSMTabBarControl. Should only be called by
- PSMTabBarControl.
- @param A PSMTabBarControl.
- @returns A newly created PSMTabBarController instance.
- */
-
-- (id)initWithTabBarControl:(PSMTabBarControl *)control {
- if((self = [super init])) {
- _control = control;
- _cellTrackingRects = [[NSMutableArray alloc] init];
- _closeButtonTrackingRects = [[NSMutableArray alloc] init];
- _cellFrames = [[NSMutableArray alloc] init];
- _addButtonRect = NSZeroRect;
- }
- return self;
-}
-
-- (void)dealloc {
- [_cellTrackingRects release];
- [_closeButtonTrackingRects release];
- [_cellFrames release];
- [super dealloc];
-}
-
-/*!
- @method addButtonRect
- @abstract Returns the position for the add tab button.
- @discussion Returns the position for the add tab button.
- @returns The rect for the add button rect.
- */
-
-- (NSRect)addButtonRect {
- return _addButtonRect;
-}
-
-/*!
- @method overflowMenu
- @abstract Returns current overflow menu or nil if there is none.
- @discussion Returns current overflow menu or nil if there is none.
- @returns The current overflow menu.
- */
-
-- (NSMenu *)overflowMenu {
- return _overflowMenu;
-}
-
-/*!
- @method cellTrackingRectAtIndex:
- @abstract Returns the rect for the tracking rect at the requested index.
- @discussion Returns the rect for the tracking rect at the requested index.
- @param Index of a cell.
- @returns The tracking rect of the cell at the requested index.
- */
-
-- (NSRect)cellTrackingRectAtIndex:(NSUInteger)index {
- NSRect rect;
- if(index < [_cellTrackingRects count]) {
- rect = [[_cellTrackingRects objectAtIndex:index] rectValue];
- } else {
- NSLog(@"cellTrackingRectAtIndex: Invalid index (%ld)", (long)index);
- rect = NSZeroRect;
- }
- return rect;
-}
-
-/*!
- @method closeButtonTrackingRectAtIndex:
- @abstract Returns the tracking rect for the close button at the requested index.
- @discussion Returns the tracking rect for the close button at the requested index.
- @param Index of a cell.
- @returns The close button tracking rect of the cell at the requested index.
- */
-
-- (NSRect)closeButtonTrackingRectAtIndex:(NSUInteger)index {
- NSRect rect;
- if(index < [_closeButtonTrackingRects count]) {
- rect = [[_closeButtonTrackingRects objectAtIndex:index] rectValue];
- } else {
- NSLog(@"closeButtonTrackingRectAtIndex: Invalid index (%ld)", (long)index);
- rect = NSZeroRect;
- }
- return rect;
-}
-
-/*!
- @method cellFrameAtIndex:
- @abstract Returns the frame for the cell at the requested index.
- @discussion Returns the frame for the cell at the requested index.
- @param Index of a cell.
- @returns The frame of the cell at the requested index.
- */
-
-- (NSRect)cellFrameAtIndex:(NSUInteger)index {
- NSRect rect;
-
- if(index < [_cellFrames count]) {
- rect = [[_cellFrames objectAtIndex:index] rectValue];
- } else {
- NSLog(@"cellFrameAtIndex: Invalid index (%ld)", (long)index);
- rect = NSZeroRect;
- }
- return rect;
-}
-
-/*!
- @method setSelectedCell:
- @abstract Changes the cell states so the given cell is the currently selected cell.
- @discussion Makes the given cell the active cell and properly recalculates the tab states for surrounding cells.
- @param An instance of PSMTabBarCell to make active.
- */
-
-- (void)setSelectedCell:(PSMTabBarCell *)cell {
- NSArray *cells = [_control cells];
- NSEnumerator *enumerator = [cells objectEnumerator];
- PSMTabBarCell *lastCell = nil, *nextCell;
-
- //deselect the previously selected tab
- while((nextCell = [enumerator nextObject]) && ([nextCell state] == NSOffState)) {
- lastCell = nextCell;
- }
-
- [nextCell setState:NSOffState];
- [nextCell setTabState:PSMTab_PositionMiddleMask];
-
- if(lastCell && lastCell != [_control lastVisibleTab]) {
- [lastCell setTabState:~[lastCell tabState] & PSMTab_RightIsSelectedMask];
- }
-
- if((nextCell = [enumerator nextObject])) {
- [nextCell setTabState:~[lastCell tabState] & PSMTab_LeftIsSelectedMask];
- }
-
- [cell setState:NSOnState];
- [cell setTabState:PSMTab_SelectedMask];
-
- if(![cell isInOverflowMenu]) {
- NSUInteger cellIndex = [cells indexOfObject:cell];
-
- if(cellIndex > 0) {
- nextCell = [cells objectAtIndex:cellIndex - 1];
- [nextCell setTabState:[nextCell tabState] | PSMTab_RightIsSelectedMask];
- }
-
- if(cellIndex < [cells count] - 1) {
- nextCell = [cells objectAtIndex:cellIndex + 1];
- [nextCell setTabState:[nextCell tabState] | PSMTab_LeftIsSelectedMask];
- }
- }
-}
-
-/*!
- @method layoutCells
- @abstract Recalculates cell positions and states.
- @discussion This method calculates the proper frame, tabState and overflow menu status for all cells in the
- tab bar control.
- */
-
-- (void)layoutCells {
- NSArray *cells = [_control cells];
- NSInteger cellCount = [cells count];
-
- // make sure all of our tabs are accounted for before updating
- if([[_control tabView] numberOfTabViewItems] != cellCount) {
- return;
- }
-
- [_cellTrackingRects removeAllObjects];
- [_closeButtonTrackingRects removeAllObjects];
- [_cellFrames removeAllObjects];
-
- NSArray *cellWidths = [self _generateWidthsFromCells:cells];
- [self _setupCells:cells withWidths:cellWidths];
-
- //set up the rect from the add tab button
- _addButtonRect = [_control genericCellRect];
- _addButtonRect.size = [[_control addTabButton] frame].size;
- if([_control orientation] == PSMTabBarHorizontalOrientation) {
- _addButtonRect.origin.y = MARGIN_Y;
- _addButtonRect.origin.x += [[cellWidths valueForKeyPath:@"@sum.floatValue"] doubleValue] + 2;
- } else {
- _addButtonRect.origin.x = 0;
- _addButtonRect.origin.y = [[cellWidths lastObject] doubleValue];
- }
-}
-
-/*!
- * @method _shrinkWidths:towardMinimum:withAvailableWidth:
- * @abstract Decreases widths in an array toward a minimum until they fit within availableWidth, if possible
- * @param An array of NSNumbers
- * @param The target minimum
- * @param The maximum available width
- * @returns The amount by which the total array width was shrunk
- */
-- (NSInteger)_shrinkWidths:(NSMutableArray *)newWidths towardMinimum:(NSInteger)minimum withAvailableWidth:(CGFloat)availableWidth {
- BOOL changed = NO;
- NSInteger count = [newWidths count];
- NSInteger totalWidths = [[newWidths valueForKeyPath:@"@sum.intValue"] integerValue];
- NSInteger originalTotalWidths = totalWidths;
-
- do {
- changed = NO;
-
- for(NSInteger q = (count - 1); q >= 0; q--) {
- CGFloat cellWidth = [[newWidths objectAtIndex:q] doubleValue];
- if(cellWidth - 1 >= minimum) {
- cellWidth--;
- totalWidths--;
-
- [newWidths replaceObjectAtIndex:q
- withObject:[NSNumber numberWithDouble:cellWidth]];
-
- changed = YES;
- }
- }
- } while(changed && (totalWidths > availableWidth));
-
- return(originalTotalWidths - totalWidths);
-}
-
-/*!
- * @function potentialMinimumForArray()
- * @abstract Calculate the minimum total for a given array of widths
- * @discussion The array is summed using, for each item, the minimum between the current value and the passed minimum value.
- * This is useful for getting a sum if the array has size-to-fit widths which will be allowed to be less than the
- * specified minimum.
- * @param An array of widths
- * @param The minimum
- * @returns The smallest possible sum for the array
- */
-static NSInteger potentialMinimumForArray(NSArray *array, NSInteger minimum){
- NSInteger runningTotal = 0;
- NSInteger count = [array count];
-
- for(NSInteger i = 0; i < count; i++) {
- NSInteger currentValue = [[array objectAtIndex:i] integerValue];
- runningTotal += MIN(currentValue, minimum);
- }
-
- return runningTotal;
-}
-
-/*!
- @method _generateWidthsFromCells:
- @abstract Calculates the width of cells that would be visible.
- @discussion Calculates the width of cells in the tab bar and returns an array of widths for the cells that would be
- visible. Uses large blocks of code that were previously in PSMTabBarControl's update method.
- @param An array of PSMTabBarCells.
- @returns An array of numbers representing the widths of cells that would be visible.
- */
-
-- (NSArray *)_generateWidthsFromCells:(NSArray *)cells {
- NSInteger cellCount = [cells count], i, numberOfVisibleCells = ([_control orientation] == PSMTabBarHorizontalOrientation) ? 1 : 0;
- NSMutableArray *newWidths = [NSMutableArray arrayWithCapacity:cellCount];
- id <PSMTabStyle> style = [_control style];
- CGFloat availableWidth = [_control availableCellWidth], currentOrigin = 0, totalOccupiedWidth = 0.0, width;
- NSRect cellRect = [_control genericCellRect], controlRect = [_control frame];
- PSMTabBarCell *currentCell;
-
- if([_control orientation] == PSMTabBarVerticalOrientation) {
- currentOrigin = [style topMarginForTabBarControl];
- }
-
- //Don't let cells overlap the add tab button if it is visible
- if([_control showAddTabButton]) {
- availableWidth -= [self addButtonRect].size.width;
- }
-
- for(i = 0; i < cellCount; i++) {
- currentCell = [cells objectAtIndex:i];
-
- // supress close button?
- [currentCell setCloseButtonSuppressed:((cellCount == 1 && [_control canCloseOnlyTab] == NO) ||
- [_control disableTabClose] ||
- ([[_control delegate] respondsToSelector:@selector(tabView:disableTabCloseForTabViewItem:)] &&
- [[_control delegate] tabView:[_control tabView] disableTabCloseForTabViewItem:[currentCell representedObject]]))];
-
- if([_control orientation] == PSMTabBarHorizontalOrientation) {
- // Determine cell width
- if([_control sizeCellsToFit]) {
- width = [currentCell desiredWidthOfCell];
- if(width > [_control cellMaxWidth]) {
- width = [_control cellMaxWidth];
- }
- } else {
- width = [_control cellOptimumWidth];
- }
-
- width = ceil(width);
-
- //check to see if there is not enough space to place all tabs as preferred
- if(totalOccupiedWidth + width >= availableWidth) {
- //There's not enough space to add currentCell at its preferred width!
-
- //If we're not going to use the overflow menu, cram all the tab cells into the bar regardless of minimum width
- if(![_control useOverflowMenu]) {
- NSInteger j, averageWidth = (availableWidth / cellCount);
-
- numberOfVisibleCells = cellCount;
- [newWidths removeAllObjects];
-
- for(j = 0; j < cellCount; j++) {
- CGFloat desiredWidth = [[cells objectAtIndex:j] desiredWidthOfCell];
- [newWidths addObject:[NSNumber numberWithDouble:(desiredWidth < averageWidth && [_control sizeCellsToFit]) ? desiredWidth : averageWidth]];
- }
-
- totalOccupiedWidth = [[newWidths valueForKeyPath:@"@sum.intValue"] integerValue];
- break;
- }
-
- //We'll be using the overflow menu if needed.
- numberOfVisibleCells = i;
- if([_control sizeCellsToFit]) {
- BOOL remainingCellsMustGoToOverflow = NO;
-
- totalOccupiedWidth = [[newWidths valueForKeyPath:@"@sum.intValue"] integerValue];
-
- /* Can I squeeze it in without violating min cell width? This is the width we would take up
- * if every cell so far were at the control minimum size (or their current size if that is less than the control minimum).
- */
- if((potentialMinimumForArray(newWidths, [_control cellMinWidth]) + MIN(width, [_control cellMinWidth])) <= availableWidth) {
- /* It's definitely possible for cells so far to be visible.
- * Shrink other cells to allow this one to fit
- */
- NSInteger cellMinWidth = [_control cellMinWidth];
-
- /* Start off adding it to the array; we know that it will eventually fit because
- * (the potential minimum <= availableWidth)
- *
- * This allows average and minimum aggregates on the NSArray to work.
- */
- [newWidths addObject:[NSNumber numberWithDouble:width]];
- numberOfVisibleCells++;
-
- totalOccupiedWidth += width;
-
- //First, try to shrink tabs toward the average. Tabs smaller than average won't change
- totalOccupiedWidth -= [self _shrinkWidths:newWidths
- towardMinimum:[[newWidths valueForKeyPath:@"@avg.intValue"] integerValue]
- withAvailableWidth:availableWidth];
-
-
-
- if(totalOccupiedWidth > availableWidth) {
- //Next, shrink tabs toward the smallest of the existing tabs. The smallest tab won't change.
- NSInteger smallestTabWidth = [[newWidths valueForKeyPath:@"@min.intValue"] integerValue];
- if(smallestTabWidth > cellMinWidth) {
- totalOccupiedWidth -= [self _shrinkWidths:newWidths
- towardMinimum:smallestTabWidth
- withAvailableWidth:availableWidth];
- }
- }
-
- if(totalOccupiedWidth > availableWidth) {
- //Finally, shrink tabs toward the imposed minimum size. All tabs larger than the minimum wll change.
- totalOccupiedWidth -= [self _shrinkWidths:newWidths
- towardMinimum:cellMinWidth
- withAvailableWidth:availableWidth];
- }
-
- if(totalOccupiedWidth > availableWidth) {
- NSLog(@"**** -[PSMTabBarController generateWidthsFromCells:] This is a failure (available %f, total %f, width is %f)",
- availableWidth, totalOccupiedWidth, width);
- remainingCellsMustGoToOverflow = YES;
- }
-
- if(totalOccupiedWidth < availableWidth) {
- /* We're not using all available space not but exceeded available width before;
- * stretch all cells to fully fit the bar
- */
- NSInteger leftoverWidth = availableWidth - totalOccupiedWidth;
- if(leftoverWidth > 0) {
- NSInteger q;
- for(q = numberOfVisibleCells - 1; q >= 0; q--) {
- NSInteger desiredAddition = (NSInteger)leftoverWidth / (q + 1);
- NSInteger newCellWidth = (NSInteger)[[newWidths objectAtIndex:q] doubleValue] + desiredAddition;
- [newWidths replaceObjectAtIndex:q withObject:[NSNumber numberWithDouble:newCellWidth]];
- leftoverWidth -= desiredAddition;
- totalOccupiedWidth += desiredAddition;
- }
- }
- }
- } else {
- // stretch - distribute leftover room among cells, since we can't add this cell
- NSInteger leftoverWidth = availableWidth - totalOccupiedWidth;
- NSInteger q;
- for(q = i - 1; q >= 0; q--) {
- NSInteger desiredAddition = (NSInteger)leftoverWidth / (q + 1);
- NSInteger newCellWidth = (NSInteger)[[newWidths objectAtIndex:q] doubleValue] + desiredAddition;
- [newWidths replaceObjectAtIndex:q withObject:[NSNumber numberWithDouble:newCellWidth]];
- leftoverWidth -= desiredAddition;
- }
-
- remainingCellsMustGoToOverflow = YES;
- }
-
- // done assigning widths; remaining cells go in overflow menu
- if(remainingCellsMustGoToOverflow) {
- break;
- }
- } else {
- //We're not using size-to-fit
- NSInteger revisedWidth = availableWidth / (i + 1);
- if(revisedWidth >= [_control cellMinWidth]) {
- NSUInteger q;
- totalOccupiedWidth = 0;
-
- for(q = 0; q < [newWidths count]; q++) {
- [newWidths replaceObjectAtIndex:q withObject:[NSNumber numberWithDouble:revisedWidth]];
- totalOccupiedWidth += revisedWidth;
- }
- // just squeezed this one in...
- [newWidths addObject:[NSNumber numberWithDouble:revisedWidth]];
- totalOccupiedWidth += revisedWidth;
- numberOfVisibleCells++;
- } else {
- // couldn't fit that last one...
- break;
- }
- }
- } else {
- //(totalOccupiedWidth < availableWidth)
- numberOfVisibleCells = cellCount;
- [newWidths addObject:[NSNumber numberWithDouble:width]];
- totalOccupiedWidth += width;
- }
- } else {
- //lay out vertical tabs
- if(currentOrigin + cellRect.size.height <= controlRect.size.height) {
- [newWidths addObject:[NSNumber numberWithDouble:currentOrigin]];
- numberOfVisibleCells++;
- currentOrigin += cellRect.size.height;
- } else {
- //out of room, the remaining tabs go into overflow
- if([newWidths count] > 0 && controlRect.size.height - currentOrigin < 17) {
- [newWidths removeLastObject];
- numberOfVisibleCells--;
- }
- break;
- }
- }
- }
-
- //make sure there are at least two items in the horizontal tab bar
- if([_control orientation] == PSMTabBarHorizontalOrientation) {
- if(numberOfVisibleCells < 2 && [cells count] > 1) {
- PSMTabBarCell *cell1 = [cells objectAtIndex:0], *cell2 = [cells objectAtIndex:1];
- NSNumber *cellWidth;
-
- [newWidths removeAllObjects];
- totalOccupiedWidth = 0;
-
- cellWidth = [NSNumber numberWithDouble:[cell1 desiredWidthOfCell] < availableWidth * 0.5f ?[cell1 desiredWidthOfCell] : availableWidth * 0.5f];
- [newWidths addObject:cellWidth];
- totalOccupiedWidth += [cellWidth doubleValue];
-
- cellWidth = [NSNumber numberWithDouble:[cell2 desiredWidthOfCell] < (availableWidth - totalOccupiedWidth) ?[cell2 desiredWidthOfCell] : (availableWidth - totalOccupiedWidth)];
- [newWidths addObject:cellWidth];
- totalOccupiedWidth += [cellWidth doubleValue];
-
- if(totalOccupiedWidth < availableWidth) {
- [newWidths replaceObjectAtIndex:0 withObject:[NSNumber numberWithDouble:availableWidth - [cellWidth doubleValue]]];
- }
-
- numberOfVisibleCells = 2;
- }
- }
-
- return newWidths;
-}
-
-/*!
- @method _setupCells:withWidths
- @abstract Creates tracking rect arrays and sets the frames of the visible cells.
- @discussion Creates tracking rect arrays and sets the cells given in the widths array.
- */
-
-- (void)_setupCells:(NSArray *)cells withWidths:(NSArray *)widths {
- NSUInteger i, tabState, cellCount = [cells count];
- NSRect cellRect = [_control genericCellRect];
- PSMTabBarCell *cell;
- NSTabViewItem *selectedTabViewItem = [[_control tabView] selectedTabViewItem];
- NSMenuItem *menuItem;
-
- [_overflowMenu release], _overflowMenu = nil;
-
- for(i = 0; i < cellCount; i++) {
- cell = [cells objectAtIndex:i];
-
- if(i < [widths count]) {
- tabState = 0;
-
- // set cell frame
- if([_control orientation] == PSMTabBarHorizontalOrientation) {
- cellRect.size.width = [[widths objectAtIndex:i] doubleValue];
- } else {
- cellRect.size.width = [_control frame].size.width;
- cellRect.origin.y = [[widths objectAtIndex:i] doubleValue];
- cellRect.origin.x = 0;
- }
-
- [_cellFrames addObject:[NSValue valueWithRect:cellRect]];
-
- //add tracking rects to arrays
- [_closeButtonTrackingRects addObject:[NSValue valueWithRect:[cell closeButtonRectForFrame:cellRect]]];
- [_cellTrackingRects addObject:[NSValue valueWithRect:cellRect]];
-
- if([[cell representedObject] isEqualTo:selectedTabViewItem]) {
- [cell setState:NSOnState];
- tabState |= PSMTab_SelectedMask;
- // previous cell
- if(i > 0) {
- [[cells objectAtIndex:i - 1] setTabState:([(PSMTabBarCell *)[cells objectAtIndex:i - 1] tabState] | PSMTab_RightIsSelectedMask)];
- }
- // next cell - see below
- } else {
- [cell setState:NSOffState];
- // see if prev cell was selected
- if((i > 0) && ([[cells objectAtIndex:i - 1] state] == NSOnState)) {
- tabState |= PSMTab_LeftIsSelectedMask;
- }
- }
-
- // more tab states
- if([widths count] == 1) {
- tabState |= PSMTab_PositionLeftMask | PSMTab_PositionRightMask | PSMTab_PositionSingleMask;
- } else if(i == 0) {
- tabState |= PSMTab_PositionLeftMask;
- } else if(i == [widths count] - 1) {
- tabState |= PSMTab_PositionRightMask;
- }
-
- [cell setTabState:tabState];
- [cell setIsInOverflowMenu:NO];
-
- // indicator
- if(![[cell indicator] isHidden] && ![_control isTabBarHidden]) {
- if(![[_control subviews] containsObject:[cell indicator]]) {
- [_control addSubview:[cell indicator]];
- [[cell indicator] startAnimation:self];
- }
- }
-
- // next...
- cellRect.origin.x += [[widths objectAtIndex:i] doubleValue];
- } else {
- [cell setState:NSOffState];
- [cell setIsInOverflowMenu:YES];
- [[cell indicator] removeFromSuperview];
-
- //position the cell well offscreen
- if([_control orientation] == PSMTabBarHorizontalOrientation) {
- cellRect.origin.x += [[_control style] rightMarginForTabBarControl] + 20;
- } else {
- cellRect.origin.y = [_control frame].size.height + 2;
- }
-
- [_cellFrames addObject:[NSValue valueWithRect:cellRect]];
-
- if(_overflowMenu == nil) {
- _overflowMenu = [[NSMenu alloc] init];
- [_overflowMenu insertItemWithTitle:@"" action:nil keyEquivalent:@"" atIndex:0]; // Because the overflowPupUpButton is a pull down menu
- [_overflowMenu setDelegate:self];
- }
-
- // Each item's title is limited to 60 characters. If more than 60 characters, use an ellipsis to indicate that more exists.
- menuItem = [_overflowMenu addItemWithTitle:[[[cell attributedStringValue] string] stringWithEllipsisByTruncatingToLength:MAX_OVERFLOW_MENUITEM_TITLE_LENGTH]
- action:@selector(overflowMenuAction:)
- keyEquivalent:@""];
- [menuItem setTarget:_control];
- [menuItem setRepresentedObject:[cell representedObject]];
-
- if([cell count] > 0) {
- [menuItem setTitle:[[menuItem title] stringByAppendingFormat:@" (%lu)", (unsigned long)[cell count]]];
- }
- }
- }
-}
-
-- (BOOL)menu:(NSMenu *)menu updateItem:(NSMenuItem *)menuItem atIndex:(NSInteger)index shouldCancel:(BOOL)shouldCancel {
- if(menu == _overflowMenu) {
- if([[[menuItem representedObject] identifier] respondsToSelector:@selector(icon)]) {
- [menuItem setImage:[[[menuItem representedObject] identifier] valueForKey:@"icon"]];
- }
- }
-
- return TRUE;
-}
-
-- (NSInteger)numberOfItemsInMenu:(NSMenu *)menu {
- if(menu == _overflowMenu) {
- return [_overflowMenu numberOfItems];
- } else {
- NSLog(@"Warning: Unexpected menu delegate call for menu %@", menu);
- return 0;
- }
-}
-
-@end
-
-/*
- PSMTabBarController will store what the current tab frame state should be like based off the last layout. PSMTabBarControl
- has to handle fetching the new frame and then changing the tab cell frame.
- Tab states will probably be changed immediately.
-
- Tabs that aren't going to be visible need to have their frame set offscreen. Treat them as if they were visible.
-
- The overflow menu is rebuilt and stored by the controller.
-
- Arrays of tracking rects will be created here, but not applied.
- Tracking rects are removed and added by PSMTabBarControl at the end of an animate/display cycle.
-
- The add tab button frame is handled by this controller. Visibility and location are set by the control.
-
- isInOverflowMenu should probably be removed in favor of a call that returns yes/no to if a cell is in overflow. (Not yet implemented)
-
- Still need to rewrite most of the code in PSMTabDragAssistant.
- */
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabDragAssistant.h b/frontends/cocoa/PSMTabBarControl/PSMTabDragAssistant.h
deleted file mode 100644
index 2632e11..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabDragAssistant.h
+++ b/dev/null
@@ -1,101 +0,0 @@
-//
-// PSMTabDragAssistant.h
-// PSMTabBarControl
-//
-// Created by John Pannell on 4/10/06.
-// Copyright 2006 Positive Spin Media. All rights reserved.
-//
-
-/*
- This class is a sigleton that manages the details of a tab drag and drop. The details were beginning to overwhelm me when keeping all of this in the control and cells :-)
- */
-
-#import <Cocoa/Cocoa.h>
-#import "PSMTabBarControl.h"
-
-#define kPSMTabDragAnimationSteps 8
-
-@class PSMTabBarCell, PSMTabDragWindowController;
-
-@interface PSMTabDragAssistant : NSObject {
- PSMTabBarControl *_sourceTabBar;
- PSMTabBarControl *_destinationTabBar;
- NSMutableSet *_participatingTabBars;
- PSMTabBarCell *_draggedCell;
- NSUInteger _draggedCellIndex; // for snap back
- BOOL _isDragging;
-
- // Support for dragging into new windows
- PSMTabDragWindowController *_draggedTab;
- PSMTabDragWindowController *_draggedView;
- NSSize _dragWindowOffset;
- NSTimer *_fadeTimer;
- BOOL _centersDragWindows;
- PSMTabBarTearOffStyle _currentTearOffStyle;
-
- // Animation
- NSTimer *_animationTimer;
- NSMutableArray *_sineCurveWidths;
- NSPoint _currentMouseLoc;
- PSMTabBarCell *_targetCell;
-}
-
-// Creation/destruction
-+ (PSMTabDragAssistant *)sharedDragAssistant;
-
-// Accessors
-- (PSMTabBarControl *)sourceTabBar;
-- (void)setSourceTabBar:(PSMTabBarControl *)tabBar;
-- (PSMTabBarControl *)destinationTabBar;
-- (void)setDestinationTabBar:(PSMTabBarControl *)tabBar;
-- (PSMTabBarCell *)draggedCell;
-- (void)setDraggedCell:(PSMTabBarCell *)cell;
-- (NSInteger)draggedCellIndex;
-- (void)setDraggedCellIndex:(NSInteger)value;
-- (BOOL)isDragging;
-- (void)setIsDragging:(BOOL)value;
-- (NSPoint)currentMouseLoc;
-- (void)setCurrentMouseLoc:(NSPoint)point;
-- (PSMTabBarCell *)targetCell;
-- (void)setTargetCell:(PSMTabBarCell *)cell;
-
-// Functionality
-- (void)startDraggingCell:(PSMTabBarCell *)cell fromTabBar:(PSMTabBarControl *)control withMouseDownEvent:(NSEvent *)event;
-- (void)draggingEnteredTabBar:(PSMTabBarControl *)control atPoint:(NSPoint)mouseLoc;
-- (void)draggingUpdatedInTabBar:(PSMTabBarControl *)control atPoint:(NSPoint)mouseLoc;
-- (void)draggingExitedTabBar:(PSMTabBarControl *)control;
-- (void)performDragOperation;
-- (void)draggedImageEndedAt:(NSPoint) aPoint operation:(NSDragOperation)operation;
-- (void)finishDrag;
-
-- (void)draggingBeganAt:(NSPoint)aPoint;
-- (void)draggingMovedTo:(NSPoint)aPoint;
-
-// Animation
-- (void)animateDrag:(NSTimer *)timer;
-- (void)calculateDragAnimationForTabBar:(PSMTabBarControl *)control;
-
-// Placeholder
-- (void)distributePlaceholdersInTabBar:(PSMTabBarControl *)control withDraggedCell:(PSMTabBarCell *)cell;
-- (void)distributePlaceholdersInTabBar:(PSMTabBarControl *)control;
-- (void)removeAllPlaceholdersFromTabBar:(PSMTabBarControl *)control;
-
-@end
-
-@interface PSMTabBarControl (DragAccessors)
-
-- (id<PSMTabStyle>)style;
-- (NSMutableArray *)cells;
-- (void)setControlView:(id)view;
-- (id)cellForPoint:(NSPoint) point cellFrame:(NSRectPointer)outFrame;
-- (PSMTabBarCell *)lastVisibleTab;
-- (NSInteger)numberOfVisibleTabs;
-
-@end
-
-void CGContextCopyWindowCaptureContentsToRect(void *grafport, CGRect rect, NSInteger cid, NSInteger wid, NSInteger zero);
-OSStatus CGSSetWindowTransform(NSInteger cid, NSInteger wid, CGAffineTransform transform);
-
-@interface NSApplication (CoreGraphicsUndocumented)
-- (NSInteger)contextID;
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabDragAssistant.m b/frontends/cocoa/PSMTabBarControl/PSMTabDragAssistant.m
deleted file mode 100644
index 4542e8d..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabDragAssistant.m
+++ b/dev/null
@@ -1,834 +0,0 @@
-//
-// PSMTabDragAssistant.m
-// PSMTabBarControl
-//
-// Created by John Pannell on 4/10/06.
-// Copyright 2006 Positive Spin Media. All rights reserved.
-//
-
-#import "PSMTabDragAssistant.h"
-#import "PSMTabBarCell.h"
-#import "PSMTabStyle.h"
-#import "PSMTabDragWindowController.h"
-
-#define PI 3.1417
-
-@interface PSMTabBarControl (Private)
-- (void)update:(BOOL)animate;
-@end
-
-@interface PSMTabDragAssistant (Private)
-- (NSImage *)_imageForViewOfCell:(PSMTabBarCell *)cell styleMask:(NSUInteger *)outMask;
-- (NSImage *)_miniwindowImageOfWindow:(NSWindow *)window;
-- (void)_expandWindow:(NSWindow *)window atPoint:(NSPoint)point;
-@end
-
-@implementation PSMTabDragAssistant
-
-static PSMTabDragAssistant *sharedDragAssistant = nil;
-
-#pragma mark -
-#pragma mark Creation/Destruction
-
-+ (PSMTabDragAssistant *)sharedDragAssistant {
- if(!sharedDragAssistant) {
- sharedDragAssistant = [[PSMTabDragAssistant alloc] init];
- }
-
- return sharedDragAssistant;
-}
-
-- (id)init {
- if((self = [super init])) {
- _sourceTabBar = nil;
- _destinationTabBar = nil;
- _participatingTabBars = [[NSMutableSet alloc] init];
- _draggedCell = nil;
- _animationTimer = nil;
- _sineCurveWidths = [[NSMutableArray alloc] initWithCapacity:kPSMTabDragAnimationSteps];
- _targetCell = nil;
- _isDragging = NO;
- }
-
- return self;
-}
-
-- (void)dealloc {
- [_sourceTabBar release];
- [_destinationTabBar release];
- [_participatingTabBars release];
- [_draggedCell release];
- [_animationTimer release];
- [_sineCurveWidths release];
- [_targetCell release];
- [super dealloc];
-}
-
-#pragma mark -
-#pragma mark Accessors
-
-- (PSMTabBarControl *)sourceTabBar {
- return _sourceTabBar;
-}
-
-- (void)setSourceTabBar:(PSMTabBarControl *)tabBar {
- [tabBar retain];
- [_sourceTabBar release];
- _sourceTabBar = tabBar;
-}
-
-- (PSMTabBarControl *)destinationTabBar {
- return _destinationTabBar;
-}
-
-- (void)setDestinationTabBar:(PSMTabBarControl *)tabBar {
- [tabBar retain];
- [_destinationTabBar release];
- _destinationTabBar = tabBar;
-}
-
-- (PSMTabBarCell *)draggedCell {
- return _draggedCell;
-}
-
-- (void)setDraggedCell:(PSMTabBarCell *)cell {
- [cell retain];
- [_draggedCell release];
- _draggedCell = cell;
-}
-
-- (NSInteger)draggedCellIndex {
- return _draggedCellIndex;
-}
-
-- (void)setDraggedCellIndex:(NSInteger)value {
- _draggedCellIndex = value;
-}
-
-- (BOOL)isDragging {
- return _isDragging;
-}
-
-- (void)setIsDragging:(BOOL)value {
- _isDragging = value;
-}
-
-- (NSPoint)currentMouseLoc {
- return _currentMouseLoc;
-}
-
-- (void)setCurrentMouseLoc:(NSPoint)point {
- _currentMouseLoc = point;
-}
-
-- (PSMTabBarCell *)targetCell {
- return _targetCell;
-}
-
-- (void)setTargetCell:(PSMTabBarCell *)cell {
- [cell retain];
- [_targetCell release];
- _targetCell = cell;
-}
-
-#pragma mark -
-#pragma mark Functionality
-
-- (void)startDraggingCell:(PSMTabBarCell *)cell fromTabBar:(PSMTabBarControl *)control withMouseDownEvent:(NSEvent *)event {
- [self setIsDragging:YES];
- [self setSourceTabBar:control];
- [self setDestinationTabBar:control];
- [_participatingTabBars addObject:control];
- [self setDraggedCell:cell];
- [self setDraggedCellIndex:[[control cells] indexOfObject:cell]];
-
- NSRect cellFrame = [cell frame];
- // list of widths for animation
- NSInteger i;
- CGFloat cellStepSize = ([control orientation] == PSMTabBarHorizontalOrientation) ? (cellFrame.size.width + 6) : (cellFrame.size.height + 1);
- for(i = 0; i < kPSMTabDragAnimationSteps - 1; i++) {
- NSInteger thisWidth = (NSInteger)(cellStepSize - ((cellStepSize / 2.0) + ((sin((PI / 2.0) + ((CGFloat)i / (CGFloat)kPSMTabDragAnimationSteps) * PI) * cellStepSize) / 2.0)));
- [_sineCurveWidths addObject:[NSNumber numberWithInteger:thisWidth]];
- }
- [_sineCurveWidths addObject:[NSNumber numberWithInteger:([control orientation] == PSMTabBarHorizontalOrientation) ? cellFrame.size.width : cellFrame.size.height]];
-
- // hide UI buttons
- [[control overflowPopUpButton] setHidden:YES];
- [[control addTabButton] setHidden:YES];
-
- [[NSCursor closedHandCursor] set];
-
- NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
- NSImage *dragImage = [cell dragImage];
- [[cell indicator] removeFromSuperview];
- [self distributePlaceholdersInTabBar:control withDraggedCell:cell];
-
- if([control isFlipped]) {
- cellFrame.origin.y += cellFrame.size.height;
- }
- [cell setHighlighted:NO];
- NSSize offset = NSZeroSize;
- [pboard declareTypes:[NSArray arrayWithObjects:@"PSMTabBarControlItemPBType", nil] owner: nil];
- [pboard setString:[[NSNumber numberWithInteger:[[control cells] indexOfObject:cell]] stringValue] forType:@"PSMTabBarControlItemPBType"];
- _animationTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / 30.0) target:self selector:@selector(animateDrag:) userInfo:nil repeats:YES];
-
- [[NSNotificationCenter defaultCenter] postNotificationName:PSMTabDragDidBeginNotification object:nil];
-
- //retain the control in case the drag operation causes the control to be released
- [control retain];
-
- if([control delegate] && [[control delegate] respondsToSelector:@selector(tabView:shouldDropTabViewItem:inTabBar:)] &&
- [[control delegate] tabView:[control tabView] shouldDropTabViewItem:[[self draggedCell] representedObject] inTabBar:nil]) {
- _currentTearOffStyle = [control tearOffStyle];
- _draggedTab = [[PSMTabDragWindowController alloc] initWithImage:dragImage styleMask:NSBorderlessWindowMask tearOffStyle:_currentTearOffStyle];
-
- cellFrame.origin.y -= cellFrame.size.height;
- [control dragImage:[[[NSImage alloc] initWithSize:NSMakeSize(1, 1)] autorelease] at:cellFrame.origin offset:offset event:event pasteboard:pboard source:control slideBack:NO];
- } else {
- [control dragImage:dragImage at:cellFrame.origin offset:offset event:event pasteboard:pboard source:control slideBack:YES];
- }
-
- [control release];
-}
-
-- (void)draggingEnteredTabBar:(PSMTabBarControl *)control atPoint:(NSPoint)mouseLoc {
- if(_currentTearOffStyle == PSMTabBarTearOffMiniwindow && ![self destinationTabBar]) {
- [_draggedTab switchImages];
- }
-
- [self setDestinationTabBar:control];
- [self setCurrentMouseLoc:mouseLoc];
- // hide UI buttons
- [[control overflowPopUpButton] setHidden:YES];
- [[control addTabButton] setHidden:YES];
- if([[control cells] count] == 0 || ![[[control cells] objectAtIndex:0] isPlaceholder]) {
- [self distributePlaceholdersInTabBar:control];
- }
- [_participatingTabBars addObject:control];
-
- //tell the drag window to display only the header if there is one
- if(_currentTearOffStyle == PSMTabBarTearOffAlphaWindow && _draggedView) {
- if(_fadeTimer) {
- [_fadeTimer invalidate];
- }
-
- [[_draggedTab window] orderFront:nil];
- _fadeTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(fadeOutDragWindow:) userInfo:nil repeats:YES];
- }
-}
-
-- (void)draggingUpdatedInTabBar:(PSMTabBarControl *)control atPoint:(NSPoint)mouseLoc {
- if([self destinationTabBar] != control) {
- [self setDestinationTabBar:control];
- }
- [self setCurrentMouseLoc:mouseLoc];
-}
-
-- (void)draggingExitedTabBar:(PSMTabBarControl *)control {
- if([[control delegate] respondsToSelector:@selector(tabView:shouldAllowTabViewItem:toLeaveTabBar:)] &&
- ![[control delegate] tabView:[control tabView] shouldAllowTabViewItem:[[self draggedCell] representedObject] toLeaveTabBar:control]) {
- return;
- }
-
- [self setDestinationTabBar:nil];
- [self setCurrentMouseLoc:NSMakePoint(-1.0, -1.0)];
-
- if(_fadeTimer) {
- [_fadeTimer invalidate];
- _fadeTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(fadeInDragWindow:) userInfo:nil repeats:YES];
- } else if(_draggedTab) {
- if(_currentTearOffStyle == PSMTabBarTearOffAlphaWindow) {
- //create a new floating drag window
- if(!_draggedView) {
- NSUInteger styleMask;
- NSImage *viewImage = [self _imageForViewOfCell:[self draggedCell] styleMask:&styleMask];
-
- _draggedView = [[PSMTabDragWindowController alloc] initWithImage:viewImage styleMask:styleMask tearOffStyle:PSMTabBarTearOffAlphaWindow];
- [[_draggedView window] setAlphaValue:0.0];
- }
-
- NSPoint windowOrigin = [[control window] frame].origin;
-
- windowOrigin.x -= _dragWindowOffset.width;
- windowOrigin.y += _dragWindowOffset.height;
- [[_draggedView window] setFrameOrigin:windowOrigin];
- [[_draggedView window] orderWindow:NSWindowBelow relativeTo:[[_draggedTab window] windowNumber]];
- } else if(_currentTearOffStyle == PSMTabBarTearOffMiniwindow && ![_draggedTab alternateImage]) {
- NSImage *image;
- NSSize imageSize;
- NSUInteger mask; //we don't need this but we can't pass nil in for the style mask, as some delegate implementations will crash
-
- if(!(image = [self _miniwindowImageOfWindow:[control window]])) {
- image = [[self _imageForViewOfCell:[self draggedCell] styleMask:&mask] copy];
- }
-
- imageSize = [image size];
- [image setScalesWhenResized:YES];
-
- if(imageSize.width > imageSize.height) {
- [image setSize:NSMakeSize(125, 125 * (imageSize.height / imageSize.width))];
- } else {
- [image setSize:NSMakeSize(125 * (imageSize.width / imageSize.height), 125)];
- }
-
- [_draggedTab setAlternateImage:image];
- }
-
- //set the window's alpha mask to zero if the last tab is being dragged
- //don't fade out the old window if the delegate doesn't respond to the new tab bar method, just to be safe
- if([[[self sourceTabBar] tabView] numberOfTabViewItems] == 1 && [self sourceTabBar] == control &&
- [[[self sourceTabBar] delegate] respondsToSelector:@selector(tabView:newTabBarForDraggedTabViewItem:atPoint:)]) {
- [[[self sourceTabBar] window] setAlphaValue:0.0];
-
- if([_sourceTabBar tearOffStyle] == PSMTabBarTearOffAlphaWindow) {
- [[_draggedView window] setAlphaValue:kPSMTabDragWindowAlpha];
- } else {
- //#warning fix me - what should we do when the last tab is dragged as a miniwindow?
- }
- } else {
- if([_sourceTabBar tearOffStyle] == PSMTabBarTearOffAlphaWindow) {
- _fadeTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(fadeInDragWindow:) userInfo:nil repeats:YES];
- } else {
- [_draggedTab switchImages];
- _centersDragWindows = YES;
- }
- }
- }
-}
-
-- (void)performDragOperation {
- // move cell
- NSUInteger destinationIndex = [[[self destinationTabBar] cells] indexOfObject:[self targetCell]];
-
- //there is the slight possibility of the targetCell now being set properly, so avoid errors
- if(destinationIndex >= [[[self destinationTabBar] cells] count]) {
- destinationIndex = [[[self destinationTabBar] cells] count] - 1;
- }
-
- [[[self destinationTabBar] cells] replaceObjectAtIndex:destinationIndex withObject:[self draggedCell]];
- [[self draggedCell] setControlView:[self destinationTabBar]];
-
- // move actual NSTabViewItem
- if([self sourceTabBar] != [self destinationTabBar]) {
- //remove the tracking rects and bindings registered on the old tab
- [[self sourceTabBar] removeTrackingRect:[[self draggedCell] closeButtonTrackingTag]];
- [[self sourceTabBar] removeTrackingRect:[[self draggedCell] cellTrackingTag]];
- [[self sourceTabBar] removeTabForCell:[self draggedCell]];
-
- NSUInteger i, insertIndex;
- NSArray *cells = [[self destinationTabBar] cells];
-
- //find the index of where the dragged cell was just dropped
- for(i = 0, insertIndex = 0; (i < [cells count]) && ([cells objectAtIndex:i] != [self draggedCell]); i++, insertIndex++) {
- if([[cells objectAtIndex:i] isPlaceholder]) {
- insertIndex--;
- }
- }
-
- [[[self sourceTabBar] tabView] removeTabViewItem:[[self draggedCell] representedObject]];
- [[[self destinationTabBar] tabView] insertTabViewItem:[[self draggedCell] representedObject] atIndex:insertIndex];
-
- //calculate the position for the dragged cell
- if([[self destinationTabBar] automaticallyAnimates]) {
- if(insertIndex > 0) {
- NSRect cellRect = [[cells objectAtIndex:insertIndex - 1] frame];
- cellRect.origin.x += cellRect.size.width;
- [[self draggedCell] setFrame:cellRect];
- }
- }
-
- //rebind the cell to the new control
- [[self destinationTabBar] bindPropertiesForCell:[self draggedCell] andTabViewItem:[[self draggedCell] representedObject]];
-
- //select the newly moved item in the destination tab view
- [[[self destinationTabBar] tabView] selectTabViewItem:[[self draggedCell] representedObject]];
- } else {
- //have to do this before checking the index of a cell otherwise placeholders will be counted
- [self removeAllPlaceholdersFromTabBar:[self sourceTabBar]];
-
- //rearrange the tab view items
- NSTabView *tabView = [[self sourceTabBar] tabView];
- NSTabViewItem *item = [[self draggedCell] representedObject];
- BOOL reselect = ([tabView selectedTabViewItem] == item);
- NSArray *cells = [[self sourceTabBar] cells];
- NSUInteger index;
- //find the index of where the dragged cell was just dropped
- for(index = 0; index < [cells count] && [cells objectAtIndex:index] != [self draggedCell]; index++) {
- ;
- }
-
- //temporarily disable the delegate in order to move the tab to a different index
- id tempDelegate = [tabView delegate];
- [tabView setDelegate:nil];
- [item retain];
- [tabView removeTabViewItem:item];
- [tabView insertTabViewItem:item atIndex:index];
- if(reselect) {
- [tabView selectTabViewItem:item];
- }
- [tabView setDelegate:tempDelegate];
- }
-
- if(([self sourceTabBar] != [self destinationTabBar] || [[[self sourceTabBar] cells] indexOfObject:[self draggedCell]] != _draggedCellIndex) && [[[self sourceTabBar] delegate] respondsToSelector:@selector(tabView:didDropTabViewItem:inTabBar:)]) {
- [[[self sourceTabBar] delegate] tabView:[[self sourceTabBar] tabView] didDropTabViewItem:[[self draggedCell] representedObject] inTabBar:[self destinationTabBar]];
- }
-
- [[NSNotificationCenter defaultCenter] postNotificationName:PSMTabDragDidEndNotification object:nil];
-
- [self finishDrag];
-}
-
-- (void)draggedImageEndedAt:(NSPoint)aPoint operation:(NSDragOperation)operation {
- if([self isDragging]) { // means there was not a successful drop (performDragOperation)
- id sourceDelegate = [[self sourceTabBar] delegate];
-
- //split off the dragged tab into a new window
- if([self destinationTabBar] == nil &&
- sourceDelegate && [sourceDelegate respondsToSelector:@selector(tabView:shouldDropTabViewItem:inTabBar:)] &&
- [sourceDelegate tabView:[[self sourceTabBar] tabView] shouldDropTabViewItem:[[self draggedCell] representedObject] inTabBar:nil] &&
- [sourceDelegate respondsToSelector:@selector(tabView:newTabBarForDraggedTabViewItem:atPoint:)]) {
- PSMTabBarControl *control = [sourceDelegate tabView:[[self sourceTabBar] tabView] newTabBarForDraggedTabViewItem:[[self draggedCell] representedObject] atPoint:aPoint];
-
- if(control) {
- //add the dragged tab to the new window
- [[control cells] insertObject:[self draggedCell] atIndex:0];
-
- //remove the tracking rects and bindings registered on the old tab
- [[self sourceTabBar] removeTrackingRect:[[self draggedCell] closeButtonTrackingTag]];
- [[self sourceTabBar] removeTrackingRect:[[self draggedCell] cellTrackingTag]];
- [[self sourceTabBar] removeTabForCell:[self draggedCell]];
-
- //rebind the cell to the new control
- [control bindPropertiesForCell:[self draggedCell] andTabViewItem:[[self draggedCell] representedObject]];
-
- [[self draggedCell] setControlView:control];
-
- [[[self sourceTabBar] tabView] removeTabViewItem:[[self draggedCell] representedObject]];
-
- [[control tabView] addTabViewItem:[[self draggedCell] representedObject]];
- [control update:NO]; //make sure the new tab is set in the correct position
-
- if(_currentTearOffStyle == PSMTabBarTearOffAlphaWindow) {
- [[control window] makeKeyAndOrderFront:nil];
- } else {
- //center the window over where we ended dragging
- [self _expandWindow:[control window] atPoint:[NSEvent mouseLocation]];
- }
-
- if([sourceDelegate respondsToSelector:@selector(tabView:didDropTabViewItem:inTabBar:)]) {
- [sourceDelegate tabView:[[self sourceTabBar] tabView] didDropTabViewItem:[[self draggedCell] representedObject] inTabBar:control];
- }
- } else {
- NSLog(@"Delegate returned no control to add to.");
- [[[self sourceTabBar] cells] insertObject:[self draggedCell] atIndex:[self draggedCellIndex]];
- }
- } else {
- // put cell back
- [[[self sourceTabBar] cells] insertObject:[self draggedCell] atIndex:[self draggedCellIndex]];
- }
-
- [[NSNotificationCenter defaultCenter] postNotificationName:PSMTabDragDidEndNotification object:nil];
-
- [self finishDrag];
- }
-}
-
-- (void)finishDrag {
- if([[[self sourceTabBar] tabView] numberOfTabViewItems] == 0 && [[[self sourceTabBar] delegate] respondsToSelector:@selector(tabView:closeWindowForLastTabViewItem:)]) {
- [[[self sourceTabBar] delegate] tabView:[[self sourceTabBar] tabView] closeWindowForLastTabViewItem:[[self draggedCell] representedObject]];
- }
-
- if(_draggedTab) {
- [[_draggedTab window] orderOut:nil];
- [_draggedTab release];
- _draggedTab = nil;
- }
-
- if(_draggedView) {
- [[_draggedView window] orderOut:nil];
- [_draggedView release];
- _draggedView = nil;
- }
-
- _centersDragWindows = NO;
-
- [self setIsDragging:NO];
- [self removeAllPlaceholdersFromTabBar:[self sourceTabBar]];
- [self setSourceTabBar:nil];
- [self setDestinationTabBar:nil];
- NSEnumerator *e = [_participatingTabBars objectEnumerator];
- PSMTabBarControl *tabBar;
- while((tabBar = [e nextObject])) {
- [self removeAllPlaceholdersFromTabBar:tabBar];
- }
- [_participatingTabBars removeAllObjects];
- [self setDraggedCell:nil];
- [_animationTimer invalidate];
- _animationTimer = nil;
- [_sineCurveWidths removeAllObjects];
- [self setTargetCell:nil];
-}
-
-- (void)draggingBeganAt:(NSPoint)aPoint {
- if(_draggedTab) {
- [[_draggedTab window] setFrameTopLeftPoint:aPoint];
- [[_draggedTab window] orderFront:nil];
-
- if([[[self sourceTabBar] tabView] numberOfTabViewItems] == 1) {
- [self draggingExitedTabBar:[self sourceTabBar]];
- [[_draggedTab window] setAlphaValue:0.0];
- }
- }
-}
-
-- (void)draggingMovedTo:(NSPoint)aPoint {
- if(_draggedTab) {
- if(_centersDragWindows) {
- if([_draggedTab isAnimating]) {
- return;
- }
-
- //Ignore aPoint, as it seems to give wacky values
- NSRect frame = [[_draggedTab window] frame];
- frame.origin = [NSEvent mouseLocation];
- frame.origin.x -= frame.size.width / 2;
- frame.origin.y -= frame.size.height / 2;
- [[_draggedTab window] setFrame:frame display:NO];
- } else {
- [[_draggedTab window] setFrameTopLeftPoint:aPoint];
- }
-
- if(_draggedView) {
- //move the view representation with the tab
- //the relative position of the dragged view window will be different
- //depending on the position of the tab bar relative to the controlled tab view
-
- aPoint.y -= [[_draggedTab window] frame].size.height;
- aPoint.x -= _dragWindowOffset.width;
- aPoint.y += _dragWindowOffset.height;
- [[_draggedView window] setFrameTopLeftPoint:aPoint];
- }
- }
-}
-
-- (void)fadeInDragWindow:(NSTimer *)timer {
- CGFloat value = [[_draggedView window] alphaValue];
- if(value >= kPSMTabDragWindowAlpha || _draggedTab == nil) {
- [timer invalidate];
- _fadeTimer = nil;
- } else {
- [[_draggedTab window] setAlphaValue:[[_draggedTab window] alphaValue] - kPSMTabDragAlphaInterval];
- [[_draggedView window] setAlphaValue:value + kPSMTabDragAlphaInterval];
- }
-}
-
-- (void)fadeOutDragWindow:(NSTimer *)timer {
- CGFloat value = [[_draggedView window] alphaValue];
- NSWindow *tabWindow = [_draggedTab window], *viewWindow = [_draggedView window];
-
- if(value <= 0.0) {
- [viewWindow setAlphaValue:0.0];
- [tabWindow setAlphaValue:kPSMTabDragWindowAlpha];
-
- [timer invalidate];
- _fadeTimer = nil;
- } else {
- if([tabWindow alphaValue] < kPSMTabDragWindowAlpha) {
- [tabWindow setAlphaValue:[tabWindow alphaValue] + kPSMTabDragAlphaInterval];
- }
- [viewWindow setAlphaValue:value - kPSMTabDragAlphaInterval];
- }
-}
-
-#pragma mark -
-#pragma mark Private
-
-- (NSImage *)_imageForViewOfCell:(PSMTabBarCell *)cell styleMask:(NSUInteger *)outMask {
- PSMTabBarControl *control = [cell controlView];
- NSImage *viewImage = nil;
-
- if(outMask) {
- *outMask = NSBorderlessWindowMask;
- }
-
- if([control delegate] && [[control delegate] respondsToSelector:@selector(tabView:imageForTabViewItem:offset:styleMask:)]) {
- //get a custom image representation of the view to drag from the delegate
- NSImage *tabImage = [_draggedTab image];
- NSPoint drawPoint;
- _dragWindowOffset = NSZeroSize;
- viewImage = [[control delegate] tabView:[control tabView] imageForTabViewItem:[cell representedObject] offset:&_dragWindowOffset styleMask:outMask];
- [viewImage lockFocus];
-
- //draw the tab into the returned window, that way we don't have two windows being dragged (this assumes the tab will be on the window)
- drawPoint = NSMakePoint(_dragWindowOffset.width, [viewImage size].height - _dragWindowOffset.height);
-
- if([control orientation] == PSMTabBarHorizontalOrientation) {
- drawPoint.y += [[control style] tabCellHeight] - [tabImage size].height;
- _dragWindowOffset.height -= [[control style] tabCellHeight] - [tabImage size].height;
- } else {
- drawPoint.x += [control frame].size.width - [tabImage size].width;
- }
-
- [tabImage compositeToPoint:drawPoint operation:NSCompositeSourceOver];
-
- [viewImage unlockFocus];
- } else {
- //the delegate doesn't give a custom image, so use an image of the view
- NSView *tabView = [[cell representedObject] view];
- viewImage = [[[NSImage alloc] initWithSize:[tabView frame].size] autorelease];
- [viewImage lockFocus];
- [tabView drawRect:[tabView bounds]];
- [viewImage unlockFocus];
- }
-
- if(*outMask | NSBorderlessWindowMask) {
- _dragWindowOffset.height += 22;
- }
-
- return viewImage;
-}
-
-- (NSImage *)_miniwindowImageOfWindow:(NSWindow *)window {
- NSRect rect = [window frame];
- NSImage *image = [[[NSImage alloc] initWithSize:rect.size] autorelease];
- [image lockFocus];
- rect.origin = NSZeroPoint;
- CGContextCopyWindowCaptureContentsToRect([[NSGraphicsContext currentContext] graphicsPort], *(CGRect *)&rect, [NSApp contextID], [window windowNumber], 0);
- [image unlockFocus];
-
- return image;
-}
-
-- (void)_expandWindow:(NSWindow *)window atPoint:(NSPoint)point {
- NSRect frame = [window frame];
- [window setFrameTopLeftPoint:NSMakePoint(point.x - frame.size.width / 2, point.y + frame.size.height / 2)];
- [window setAlphaValue:0.0];
- [window makeKeyAndOrderFront:nil];
-
- NSAnimation *animation = [[NSAnimation alloc] initWithDuration:0.25 animationCurve:NSAnimationEaseInOut];
- [animation setAnimationBlockingMode:NSAnimationNonblocking];
- [animation setCurrentProgress:0.1];
- [animation startAnimation];
- NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(_expandWindowTimerFired:) userInfo:[NSDictionary dictionaryWithObjectsAndKeys:window, @"Window", animation, @"Animation", nil] repeats:YES];
- [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSEventTrackingRunLoopMode];
-}
-
-- (void)_expandWindowTimerFired:(NSTimer *)timer {
- NSWindow *window = [[timer userInfo] objectForKey:@"Window"];
- NSAnimation *animation = [[timer userInfo] objectForKey:@"Animation"];
- CGAffineTransform transform;
- NSPoint translation;
- NSRect winFrame = [window frame];
-
- translation.x = (winFrame.size.width / 2.0);
- translation.y = (winFrame.size.height / 2.0);
- transform = CGAffineTransformMakeTranslation(translation.x, translation.y);
- transform = CGAffineTransformScale(transform, 1.0 / [animation currentValue], 1.0 / [animation currentValue]);
- transform = CGAffineTransformTranslate(transform, -translation.x, -translation.y);
-
- translation.x = -winFrame.origin.x;
- translation.y = winFrame.origin.y + winFrame.size.height - [[NSScreen mainScreen] frame].size.height;
-
- transform = CGAffineTransformTranslate(transform, translation.x, translation.y);
-
- CGSSetWindowTransform([NSApp contextID], [window windowNumber], transform);
-
- [window setAlphaValue:[animation currentValue]];
-
- if(![animation isAnimating]) {
- [timer invalidate];
- [animation release];
- }
-}
-
-#pragma mark -
-#pragma mark Animation
-
-- (void)animateDrag:(NSTimer *)timer {
- NSEnumerator *e = [[[_participatingTabBars copy] autorelease] objectEnumerator];
- PSMTabBarControl *tabBar;
- while((tabBar = [e nextObject])) {
- [self calculateDragAnimationForTabBar:tabBar];
- [[NSRunLoop currentRunLoop] performSelector:@selector(display) target:tabBar argument:nil order:1 modes:[NSArray arrayWithObjects:@"NSEventTrackingRunLoopMode", @"NSDefaultRunLoopMode", nil]];
- }
-}
-
-- (void)calculateDragAnimationForTabBar:(PSMTabBarControl *)control {
- BOOL removeFlag = YES;
- NSMutableArray *cells = [control cells];
- NSInteger i, cellCount = [cells count];
- CGFloat position = [control orientation] == PSMTabBarHorizontalOrientation ?[[control style] leftMarginForTabBarControl] :[[control style] topMarginForTabBarControl];
-
- // identify target cell
- // mouse at beginning of tabs
- NSPoint mouseLoc = [self currentMouseLoc];
- if([self destinationTabBar] == control) {
- removeFlag = NO;
- if(mouseLoc.x < [[control style] leftMarginForTabBarControl]) {
- [self setTargetCell:[cells objectAtIndex:0]];
- } else {
- NSRect overCellRect;
- PSMTabBarCell *overCell = [control cellForPoint:mouseLoc cellFrame:&overCellRect];
- if(overCell) {
- // mouse among cells - placeholder
- if([overCell isPlaceholder]) {
- [self setTargetCell:overCell];
- } else if([control orientation] == PSMTabBarHorizontalOrientation) {
- // non-placeholders - horizontal orientation
- if(mouseLoc.x < (overCellRect.origin.x + (overCellRect.size.width / 2.0))) {
- // mouse on left side of cell
- [self setTargetCell:[cells objectAtIndex:([cells indexOfObject:overCell] - 1)]];
- } else {
- // mouse on right side of cell
- [self setTargetCell:[cells objectAtIndex:([cells indexOfObject:overCell] + 1)]];
- }
- } else {
- // non-placeholders - vertical orientation
- if(mouseLoc.y < (overCellRect.origin.y + (overCellRect.size.height / 2.0))) {
- // mouse on top of cell
- [self setTargetCell:[cells objectAtIndex:([cells indexOfObject:overCell] - 1)]];
- } else {
- // mouse on bottom of cell
- [self setTargetCell:[cells objectAtIndex:([cells indexOfObject:overCell] + 1)]];
- }
- }
- } else {
- // out at end - must find proper cell (could be more in overflow menu)
- [self setTargetCell:[control lastVisibleTab]];
- }
- }
- } else {
- [self setTargetCell:nil];
- }
-
- for(i = 0; i < cellCount; i++) {
- PSMTabBarCell *cell = [cells objectAtIndex:i];
- NSRect newRect = [cell frame];
- if(![cell isInOverflowMenu]) {
- if([cell isPlaceholder]) {
- if(cell == [self targetCell]) {
- [cell setCurrentStep:([cell currentStep] + 1)];
- } else {
- [cell setCurrentStep:([cell currentStep] - 1)];
- if([cell currentStep] > 0) {
- removeFlag = NO;
- }
- }
-
- if([control orientation] == PSMTabBarHorizontalOrientation) {
- newRect.size.width = [[_sineCurveWidths objectAtIndex:[cell currentStep]] integerValue];
- } else {
- newRect.size.height = [[_sineCurveWidths objectAtIndex:[cell currentStep]] integerValue];
- }
- }
- } else {
- break;
- }
-
- if([control orientation] == PSMTabBarHorizontalOrientation) {
- newRect.origin.x = position;
- position += newRect.size.width;
- } else {
- newRect.origin.y = position;
- position += newRect.size.height;
- }
- [cell setFrame:newRect];
- if([cell indicator]) {
- [[cell indicator] setFrame:[[control style] indicatorRectForTabCell:cell]];
- }
- }
- if(removeFlag) {
- [_participatingTabBars removeObject:control];
- [self removeAllPlaceholdersFromTabBar:control];
- }
-}
-
-#pragma mark -
-#pragma mark Placeholders
-
-- (void)distributePlaceholdersInTabBar:(PSMTabBarControl *)control withDraggedCell:(PSMTabBarCell *)cell {
- // called upon first drag - must distribute placeholders
- [self distributePlaceholdersInTabBar:control];
-
- NSMutableArray *cells = [control cells];
-
- // replace dragged cell with a placeholder, and clean up surrounding cells
- NSInteger cellIndex = [cells indexOfObject:cell];
- PSMTabBarCell *pc = [[[PSMTabBarCell alloc] initPlaceholderWithFrame:[[self draggedCell] frame] expanded:YES inControlView:control] autorelease];
- [cells replaceObjectAtIndex:cellIndex withObject:pc];
- [cells removeObjectAtIndex:(cellIndex + 1)];
- [cells removeObjectAtIndex:(cellIndex - 1)];
-
- if(cellIndex - 2 >= 0) {
- pc = [cells objectAtIndex:cellIndex - 2];
- [pc setTabState:~[pc tabState] & PSMTab_RightIsSelectedMask];
- }
-}
-
-- (void)distributePlaceholdersInTabBar:(PSMTabBarControl *)control {
- NSUInteger i, numVisibleTabs = [control numberOfVisibleTabs];
- for(i = 0; i < numVisibleTabs; i++) {
- PSMTabBarCell *pc = [[[PSMTabBarCell alloc] initPlaceholderWithFrame:[[self draggedCell] frame] expanded:NO inControlView:control] autorelease];
- [[control cells] insertObject:pc atIndex:(2 * i)];
- }
-
- PSMTabBarCell *pc = [[[PSMTabBarCell alloc] initPlaceholderWithFrame:[[self draggedCell] frame] expanded:NO inControlView:control] autorelease];
- if([[control cells] count] > (2 * numVisibleTabs)) {
- [[control cells] insertObject:pc atIndex:(2 * numVisibleTabs)];
- } else {
- [[control cells] addObject:pc];
- }
-}
-
-- (void)removeAllPlaceholdersFromTabBar:(PSMTabBarControl *)control {
- NSInteger i, cellCount = [[control cells] count];
- for(i = (cellCount - 1); i >= 0; i--) {
- PSMTabBarCell *cell = [[control cells] objectAtIndex:i];
- if([cell isPlaceholder]) {
- [control removeTabForCell:cell];
- }
- }
- // redraw
- [control update:NO];
-}
-
-#pragma mark -
-#pragma mark Archiving
-
-- (void)encodeWithCoder:(NSCoder *)aCoder {
- //[super encodeWithCoder:aCoder];
- if([aCoder allowsKeyedCoding]) {
- [aCoder encodeObject:_sourceTabBar forKey:@"sourceTabBar"];
- [aCoder encodeObject:_destinationTabBar forKey:@"destinationTabBar"];
- [aCoder encodeObject:_participatingTabBars forKey:@"participatingTabBars"];
- [aCoder encodeObject:_draggedCell forKey:@"draggedCell"];
- [aCoder encodeInteger:_draggedCellIndex forKey:@"draggedCellIndex"];
- [aCoder encodeBool:_isDragging forKey:@"isDragging"];
- [aCoder encodeObject:_animationTimer forKey:@"animationTimer"];
- [aCoder encodeObject:_sineCurveWidths forKey:@"sineCurveWidths"];
- [aCoder encodePoint:_currentMouseLoc forKey:@"currentMouseLoc"];
- [aCoder encodeObject:_targetCell forKey:@"targetCell"];
- }
-}
-
-- (id)initWithCoder:(NSCoder *)aDecoder {
- //self = [super initWithCoder:aDecoder];
- //if (self) {
- if([aDecoder allowsKeyedCoding]) {
- _sourceTabBar = [[aDecoder decodeObjectForKey:@"sourceTabBar"] retain];
- _destinationTabBar = [[aDecoder decodeObjectForKey:@"destinationTabBar"] retain];
- _participatingTabBars = [[aDecoder decodeObjectForKey:@"participatingTabBars"] retain];
- _draggedCell = [[aDecoder decodeObjectForKey:@"draggedCell"] retain];
- _draggedCellIndex = [aDecoder decodeIntegerForKey:@"draggedCellIndex"];
- _isDragging = [aDecoder decodeBoolForKey:@"isDragging"];
- _animationTimer = [[aDecoder decodeObjectForKey:@"animationTimer"] retain];
- _sineCurveWidths = [[aDecoder decodeObjectForKey:@"sineCurveWidths"] retain];
- _currentMouseLoc = [aDecoder decodePointForKey:@"currentMouseLoc"];
- _targetCell = [[aDecoder decodeObjectForKey:@"targetCell"] retain];
- }
- //}
- return self;
-}
-
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabDragView.h b/frontends/cocoa/PSMTabBarControl/PSMTabDragView.h
deleted file mode 100644
index f8018d2..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabDragView.h
+++ b/dev/null
@@ -1,21 +0,0 @@
-//
-// PSMTabDragView.h
-// PSMTabBarControl
-//
-// Created by Kent Sutherland on 6/17/07.
-// Copyright 2007 Kent Sutherland. All rights reserved.
-//
-
-#import <Cocoa/Cocoa.h>
-
-@interface PSMTabDragView : NSView {
- NSImage *_image;
- NSImage *_alternateImage;
- CGFloat _alpha;
-}
-- (void)setFadeValue:(CGFloat)value;
-- (NSImage *)image;
-- (void)setImage:(NSImage *)image;
-- (NSImage *)alternateImage;
-- (void)setAlternateImage:(NSImage *)image;
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabDragView.m b/frontends/cocoa/PSMTabBarControl/PSMTabDragView.m
deleted file mode 100644
index 2c9781d..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabDragView.m
+++ b/dev/null
@@ -1,62 +0,0 @@
-//
-// PSMTabDragView.m
-// PSMTabBarControl
-//
-// Created by Kent Sutherland on 6/17/07.
-// Copyright 2007 Kent Sutherland. All rights reserved.
-//
-
-#import "PSMTabDragView.h"
-
-
-@implementation PSMTabDragView
-
-- (id)initWithFrame:(NSRect)frame {
- if((self = [super initWithFrame:frame])) {
- _alpha = 1.0;
- }
- return self;
-}
-
-- (void)dealloc {
- [_image release];
- [_alternateImage release];
- [super dealloc];
-}
-
-- (void)drawRect:(NSRect)rect {
- //1.0 fade means show the primary image
- //0.0 fade means show the secondary image
- CGFloat primaryAlpha = _alpha + 0.001f, alternateAlpha = 1.001f - _alpha;
- NSRect srcRect;
- srcRect.origin = NSZeroPoint;
- srcRect.size = [_image size];
-
- [_image drawInRect:[self bounds] fromRect:srcRect operation:NSCompositeSourceOver fraction:primaryAlpha];
- srcRect.size = [_alternateImage size];
- [_alternateImage drawInRect:[self bounds] fromRect:srcRect operation:NSCompositeSourceOver fraction:alternateAlpha];
-}
-
-- (void)setFadeValue:(CGFloat)value {
- _alpha = value;
-}
-
-- (NSImage *)image {
- return _image;
-}
-
-- (void)setImage:(NSImage *)image {
- [_image release];
- _image = [image retain];
-}
-
-- (NSImage *)alternateImage {
- return _alternateImage;
-}
-
-- (void)setAlternateImage:(NSImage *)image {
- [_alternateImage release];
- _alternateImage = [image retain];
-}
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabDragWindow.h b/frontends/cocoa/PSMTabBarControl/PSMTabDragWindow.h
deleted file mode 100644
index 04cde24..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabDragWindow.h
+++ b/dev/null
@@ -1,20 +0,0 @@
-//
-// PSMTabDragWindow.h
-// PSMTabBarControl
-//
-// Created by Kent Sutherland on 6/1/06.
-// Copyright 2006 Kent Sutherland. All rights reserved.
-//
-
-#import <Cocoa/Cocoa.h>
-
-@class PSMTabDragView;
-
-@interface PSMTabDragWindow : NSWindow {
- PSMTabDragView *_dragView;
-}
-+ (PSMTabDragWindow *)dragWindowWithImage:(NSImage *)image styleMask:(NSUInteger)styleMask;
-
-- (id)initWithImage:(NSImage *)image styleMask:(NSUInteger)styleMask;
-- (PSMTabDragView *)dragView;
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabDragWindow.m b/frontends/cocoa/PSMTabBarControl/PSMTabDragWindow.m
deleted file mode 100644
index d6fcc95..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabDragWindow.m
+++ b/dev/null
@@ -1,48 +0,0 @@
-//
-// PSMTabDragWindow.m
-// PSMTabBarControl
-//
-// Created by Kent Sutherland on 6/1/06.
-// Copyright 2006 Kent Sutherland. All rights reserved.
-//
-
-#import "PSMTabDragWindow.h"
-#import "PSMTabDragView.h"
-
-@implementation PSMTabDragWindow
-
-+ (PSMTabDragWindow *)dragWindowWithImage:(NSImage *)image styleMask:(NSUInteger)styleMask {
- return [[[PSMTabDragWindow alloc] initWithImage:image styleMask:styleMask] autorelease];
-}
-
-- (id)initWithImage:(NSImage *)image styleMask:(NSUInteger)styleMask {
- NSSize size = [image size];
-
- if((self = [super initWithContentRect:NSMakeRect(0, 0, size.width, size.height) styleMask:styleMask backing:NSBackingStoreBuffered defer:NO])) {
- _dragView = [[[PSMTabDragView alloc] initWithFrame:NSMakeRect(0, 0, size.width, size.height)] autorelease];
- [self setContentView:_dragView];
- [self setLevel:NSStatusWindowLevel];
- [self setIgnoresMouseEvents:YES];
- [self setOpaque:NO];
-
- [_dragView setImage:image];
-
- //Set the size of the window to be the exact size of the drag image
- NSRect windowFrame = [self frame];
- windowFrame.origin.y += windowFrame.size.height - size.height;
- windowFrame.size = size;
-
- if(styleMask | NSBorderlessWindowMask) {
- windowFrame.size.height += 22;
- }
-
- [self setFrame:windowFrame display:YES];
- }
- return self;
-}
-
-- (PSMTabDragView *)dragView {
- return _dragView;
-}
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabDragWindowController.h b/frontends/cocoa/PSMTabBarControl/PSMTabDragWindowController.h
deleted file mode 100644
index 5948207..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabDragWindowController.h
+++ b/dev/null
@@ -1,33 +0,0 @@
-//
-// PSMTabDragWindowController.h
-// PSMTabBarControl
-//
-// Created by Kent Sutherland on 6/18/07.
-// Copyright 2007 Kent Sutherland. All rights reserved.
-//
-
-#import <Cocoa/Cocoa.h>
-#import "PSMTabBarControl.h"
-
-#define kPSMTabDragWindowAlpha 0.75
-#define kPSMTabDragAlphaInterval 0.15
-
-@class PSMTabDragView;
-
-@interface PSMTabDragWindowController : NSWindowController {
- PSMTabBarTearOffStyle _tearOffStyle;
- PSMTabDragView *_view;
- NSAnimation *_animation;
- NSTimer *_timer;
-
- BOOL _showingAlternate;
- NSRect _originalWindowFrame;
-}
-- (id)initWithImage:(NSImage *)image styleMask:(NSUInteger) styleMask tearOffStyle:(PSMTabBarTearOffStyle)tearOffStyle;
-
-- (NSImage *)image;
-- (NSImage *)alternateImage;
-- (void)setAlternateImage:(NSImage *)image;
-- (BOOL)isAnimating;
-- (void)switchImages;
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabDragWindowController.m b/frontends/cocoa/PSMTabBarControl/PSMTabDragWindowController.m
deleted file mode 100644
index 3a6e8c6..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabDragWindowController.m
+++ b/dev/null
@@ -1,111 +0,0 @@
-//
-// PSMTabDragWindowController.m
-// PSMTabBarControl
-//
-// Created by Kent Sutherland on 6/18/07.
-// Copyright 2007 Kent Sutherland. All rights reserved.
-//
-
-#import "PSMTabDragWindowController.h"
-#import "PSMTabDragWindow.h"
-#import "PSMTabDragView.h"
-
-@implementation PSMTabDragWindowController
-
-- (id)initWithImage:(NSImage *)image styleMask:(NSUInteger)styleMask tearOffStyle:(PSMTabBarTearOffStyle)tearOffStyle {
- PSMTabDragWindow *window = [PSMTabDragWindow dragWindowWithImage:image styleMask:styleMask];
- if((self = [super initWithWindow:window])) {
- _view = [[window dragView] retain];
- _tearOffStyle = tearOffStyle;
-
- if(tearOffStyle == PSMTabBarTearOffMiniwindow) {
- [window setBackgroundColor:[NSColor clearColor]];
- [window setHasShadow:YES];
- }
-
- [window setAlphaValue:kPSMTabDragWindowAlpha];
- }
- return self;
-}
-
-- (void)dealloc {
- if(_timer) {
- [_timer invalidate];
- }
-
- if(_animation) {
- [_animation release];
- }
-
- [_view release];
- [super dealloc];
-}
-
-- (NSImage *)image {
- return [_view image];
-}
-
-- (NSImage *)alternateImage {
- return [_view alternateImage];
-}
-
-- (void)setAlternateImage:(NSImage *)image {
- [_view setAlternateImage:image];
-}
-
-- (BOOL)isAnimating {
- return _animation != nil;
-}
-
-- (void)switchImages {
- if(_tearOffStyle != PSMTabBarTearOffMiniwindow || ![_view alternateImage]) {
- return;
- }
-
- CGFloat progress = 0;
- _showingAlternate = !_showingAlternate;
-
- if(_animation) {
- //An animation already exists, get the current progress
- progress = 1.0f - [_animation currentProgress];
- [_animation stopAnimation];
- [_animation release];
- }
-
- //begin animating
- _animation = [[NSAnimation alloc] initWithDuration:0.25 animationCurve:NSAnimationEaseInOut];
- [_animation setAnimationBlockingMode:NSAnimationNonblocking];
- [_animation setCurrentProgress:progress];
- [_animation startAnimation];
-
- _originalWindowFrame = [[self window] frame];
-
- if(_timer) {
- [_timer invalidate];
- }
- _timer = [NSTimer scheduledTimerWithTimeInterval:1.0f / 30.0f target:self selector:@selector(animateTimer:) userInfo:nil repeats:YES];
-}
-
-- (void)animateTimer:(NSTimer *)timer {
- NSRect frame = _originalWindowFrame;
- NSImage *currentImage = _showingAlternate ?[_view alternateImage] :[_view image];
- NSSize size = [currentImage size];
- NSPoint mousePoint = [NSEvent mouseLocation];
- CGFloat animationValue = [_animation currentValue];
-
- frame.size.width = _originalWindowFrame.size.width + (size.width - _originalWindowFrame.size.width) * animationValue;
- frame.size.height = _originalWindowFrame.size.height + (size.height - _originalWindowFrame.size.height) * animationValue;
- frame.origin.x = mousePoint.x - (frame.size.width / 2);
- frame.origin.y = mousePoint.y - (frame.size.height / 2);
-
- [_view setFadeValue:_showingAlternate ? 1.0f - animationValue : animationValue];
- [[self window] setFrame:frame display:YES];
-
- if(![_animation isAnimating]) {
- [_animation release], _animation = nil;
- [timer invalidate];
- _timer = nil;
- }
-}
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMTabStyle.h b/frontends/cocoa/PSMTabBarControl/PSMTabStyle.h
deleted file mode 100644
index ca37174..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMTabStyle.h
+++ b/dev/null
@@ -1,57 +0,0 @@
-//
-// PSMTabStyle.h
-// PSMTabBarControl
-//
-// Created by John Pannell on 2/17/06.
-// Copyright 2006 Positive Spin Media. All rights reserved.
-//
-
-/*
- Protocol to be observed by all style delegate objects. These objects handle the drawing responsibilities for PSMTabBarCell; once the control has been assigned a style, the background and cells draw consistent with that style. Design pattern and implementation by David Smith, Seth Willits, and Chris Forsythe, all touch up and errors by John P. :-)
- */
-
-#import "PSMTabBarCell.h"
-#import "PSMTabBarControl.h"
-
-@protocol PSMTabStyle <NSObject>
-
-// identity
-- (NSString *)name;
-
-// control specific parameters
-- (CGFloat)leftMarginForTabBarControl;
-- (CGFloat)rightMarginForTabBarControl;
-- (CGFloat)topMarginForTabBarControl;
-- (void)setOrientation:(PSMTabBarOrientation)value;
-
-// add tab button
-- (NSImage *)addTabButtonImage;
-- (NSImage *)addTabButtonPressedImage;
-- (NSImage *)addTabButtonRolloverImage;
-
-// cell specific parameters
-- (NSRect)dragRectForTabCell:(PSMTabBarCell *)cell orientation:(PSMTabBarOrientation)orientation;
-- (NSRect)closeButtonRectForTabCell:(PSMTabBarCell *)cell withFrame:(NSRect)cellFrame;
-- (NSRect)iconRectForTabCell:(PSMTabBarCell *)cell;
-- (NSRect)indicatorRectForTabCell:(PSMTabBarCell *)cell;
-- (NSRect)objectCounterRectForTabCell:(PSMTabBarCell *)cell;
-- (CGFloat)minimumWidthOfTabCell:(PSMTabBarCell *)cell;
-- (CGFloat)desiredWidthOfTabCell:(PSMTabBarCell *)cell;
-- (CGFloat)tabCellHeight;
-
-// cell values
-- (NSAttributedString *)attributedObjectCountValueForTabCell:(PSMTabBarCell *)cell;
-- (NSAttributedString *)attributedStringValueForTabCell:(PSMTabBarCell *)cell;
-
-// drawing
-- (void)drawTabCell:(PSMTabBarCell *)cell;
-- (void)drawBackgroundInRect:(NSRect)rect;
-- (void)drawTabBar:(PSMTabBarControl *)bar inRect:(NSRect)rect;
-
-@end
-
-@interface PSMTabBarControl (StyleAccessors)
-
-- (NSMutableArray *)cells;
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMUnifiedTabStyle.h b/frontends/cocoa/PSMTabBarControl/PSMUnifiedTabStyle.h
deleted file mode 100644
index 2020253..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMUnifiedTabStyle.h
+++ b/dev/null
@@ -1,29 +0,0 @@
-//
-// PSMUnifiedTabStyle.h
-// --------------------
-//
-// Created by Keith Blount on 30/04/2006.
-// Copyright 2006 __MyCompanyName__. All rights reserved.
-//
-
-#import <Cocoa/Cocoa.h>
-#import "PSMTabStyle.h"
-
-@interface PSMUnifiedTabStyle : NSObject <PSMTabStyle> {
- NSImage *unifiedCloseButton;
- NSImage *unifiedCloseButtonDown;
- NSImage *unifiedCloseButtonOver;
- NSImage *unifiedCloseDirtyButton;
- NSImage *unifiedCloseDirtyButtonDown;
- NSImage *unifiedCloseDirtyButtonOver;
- NSImage *_addTabButtonImage;
- NSImage *_addTabButtonPressedImage;
- NSImage *_addTabButtonRolloverImage;
-
- NSDictionary *_objectCountStringAttributes;
-
- CGFloat leftMargin;
- PSMTabBarControl *tabBar;
-}
-- (void)setLeftMarginForTabBarControl:(CGFloat)margin;
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/PSMUnifiedTabStyle.m b/frontends/cocoa/PSMTabBarControl/PSMUnifiedTabStyle.m
deleted file mode 100644
index 77be601..0000000
--- a/frontends/cocoa/PSMTabBarControl/PSMUnifiedTabStyle.m
+++ b/dev/null
@@ -1,573 +0,0 @@
-//
-// PSMUnifiedTabStyle.m
-// --------------------
-//
-// Created by Keith Blount on 30/04/2006.
-// Copyright 2006 __MyCompanyName__. All rights reserved.
-//
-
-#import "PSMUnifiedTabStyle.h"
-#import "PSMTabBarCell.h"
-#import "PSMTabBarControl.h"
-#import "NSBezierPath_AMShading.h"
-
-#define kPSMUnifiedObjectCounterRadius 7.0
-#define kPSMUnifiedCounterMinWidth 20
-
-@interface PSMUnifiedTabStyle (Private)
-- (void)drawInteriorWithTabCell:(PSMTabBarCell *)cell inView:(NSView*)controlView;
-@end
-
-@implementation PSMUnifiedTabStyle
-
-- (NSString *)name {
- return @"Unified";
-}
-
-#pragma mark -
-#pragma mark Creation/Destruction
-
-- (id) init {
- if((self = [super init])) {
- unifiedCloseButton = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AquaTabClose_Front"]];
- unifiedCloseButtonDown = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AquaTabClose_Front_Pressed"]];
- unifiedCloseButtonOver = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AquaTabClose_Front_Rollover"]];
-
- unifiedCloseDirtyButton = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AquaTabCloseDirty_Front"]];
- unifiedCloseDirtyButtonDown = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AquaTabCloseDirty_Front_Pressed"]];
- unifiedCloseDirtyButtonOver = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AquaTabCloseDirty_Front_Rollover"]];
-
- _addTabButtonImage = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AquaTabNew"]];
- _addTabButtonPressedImage = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AquaTabNewPressed"]];
- _addTabButtonRolloverImage = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AquaTabNewRollover"]];
-
- _objectCountStringAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:[[NSFontManager sharedFontManager] convertFont:[NSFont fontWithName:@"Helvetica" size:11.0] toHaveTrait:NSBoldFontMask], NSFontAttributeName,
- [[NSColor whiteColor] colorWithAlphaComponent:0.85], NSForegroundColorAttributeName,
- nil, nil];
-
- leftMargin = 5.0;
- }
- return self;
-}
-
-- (void)dealloc {
- [unifiedCloseButton release];
- [unifiedCloseButtonDown release];
- [unifiedCloseButtonOver release];
- [unifiedCloseDirtyButton release];
- [unifiedCloseDirtyButtonDown release];
- [unifiedCloseDirtyButtonOver release];
- [_addTabButtonImage release];
- [_addTabButtonPressedImage release];
- [_addTabButtonRolloverImage release];
-
- [_objectCountStringAttributes release];
-
- [super dealloc];
-}
-
-#pragma mark -
-#pragma mark Control Specific
-
-- (void)setLeftMarginForTabBarControl:(CGFloat)margin {
- leftMargin = margin;
-}
-
-- (CGFloat)leftMarginForTabBarControl {
- return leftMargin;
-}
-
-- (CGFloat)rightMarginForTabBarControl {
- return 24.0f;
-}
-
-- (CGFloat)topMarginForTabBarControl {
- return 10.0f;
-}
-
-- (void)setOrientation:(PSMTabBarOrientation)value {
-}
-
-#pragma mark -
-#pragma mark Add Tab Button
-
-- (NSImage *)addTabButtonImage {
- return _addTabButtonImage;
-}
-
-- (NSImage *)addTabButtonPressedImage {
- return _addTabButtonPressedImage;
-}
-
-- (NSImage *)addTabButtonRolloverImage {
- return _addTabButtonRolloverImage;
-}
-
-#pragma mark -
-#pragma mark Cell Specific
-
-- (NSRect)dragRectForTabCell:(PSMTabBarCell *)cell orientation:(PSMTabBarOrientation)orientation {
- NSRect dragRect = [cell frame];
- dragRect.size.width++;
- return dragRect;
-}
-
-- (NSRect)closeButtonRectForTabCell:(PSMTabBarCell *)cell withFrame:(NSRect)cellFrame {
- if([cell hasCloseButton] == NO) {
- return NSZeroRect;
- }
-
- NSRect result;
- result.size = [unifiedCloseButton size];
- result.origin.x = cellFrame.origin.x + MARGIN_X;
- result.origin.y = cellFrame.origin.y + MARGIN_Y + 1.0;
-
- return result;
-}
-
-- (NSRect)iconRectForTabCell:(PSMTabBarCell *)cell {
- NSRect cellFrame = [cell frame];
-
- if([cell hasIcon] == NO) {
- return NSZeroRect;
- }
-
- NSRect result;
- result.size = NSMakeSize(kPSMTabBarIconWidth, kPSMTabBarIconWidth);
- result.origin.x = cellFrame.origin.x + MARGIN_X;
- result.origin.y = cellFrame.origin.y + MARGIN_Y - 1.0;
-
- if([cell hasCloseButton] && ![cell isCloseButtonSuppressed]) {
- result.origin.x += [unifiedCloseButton size].width + kPSMTabBarCellPadding;
- }
-
- return result;
-}
-
-- (NSRect)indicatorRectForTabCell:(PSMTabBarCell *)cell {
- NSRect cellFrame = [cell frame];
-
- if([[cell indicator] isHidden]) {
- return NSZeroRect;
- }
-
- NSRect result;
- result.size = NSMakeSize(kPSMTabBarIndicatorWidth, kPSMTabBarIndicatorWidth);
- result.origin.x = cellFrame.origin.x + cellFrame.size.width - MARGIN_X - kPSMTabBarIndicatorWidth;
- result.origin.y = cellFrame.origin.y + MARGIN_Y - 1.0;
-
- return result;
-}
-
-- (NSRect)objectCounterRectForTabCell:(PSMTabBarCell *)cell {
- NSRect cellFrame = [cell frame];
-
- if([cell count] == 0) {
- return NSZeroRect;
- }
-
- CGFloat countWidth = [[self attributedObjectCountValueForTabCell:cell] size].width;
- countWidth += (2 * kPSMUnifiedObjectCounterRadius - 6.0);
- if(countWidth < kPSMUnifiedCounterMinWidth) {
- countWidth = kPSMUnifiedCounterMinWidth;
- }
-
- NSRect result;
- result.size = NSMakeSize(countWidth, 2 * kPSMUnifiedObjectCounterRadius); // temp
- result.origin.x = cellFrame.origin.x + cellFrame.size.width - MARGIN_X - result.size.width;
- result.origin.y = cellFrame.origin.y + MARGIN_Y + 1.0;
-
- if(![[cell indicator] isHidden]) {
- result.origin.x -= kPSMTabBarIndicatorWidth + kPSMTabBarCellPadding;
- }
-
- return result;
-}
-
-
-- (CGFloat)minimumWidthOfTabCell:(PSMTabBarCell *)cell {
- CGFloat resultWidth = 0.0;
-
- // left margin
- resultWidth = MARGIN_X;
-
- // close button?
- if([cell hasCloseButton] && ![cell isCloseButtonSuppressed]) {
- resultWidth += [unifiedCloseButton size].width + kPSMTabBarCellPadding;
- }
-
- // icon?
- if([cell hasIcon]) {
- resultWidth += kPSMTabBarIconWidth + kPSMTabBarCellPadding;
- }
-
- // the label
- resultWidth += kPSMMinimumTitleWidth;
-
- // object counter?
- if([cell count] > 0) {
- resultWidth += [self objectCounterRectForTabCell:cell].size.width + kPSMTabBarCellPadding;
- }
-
- // indicator?
- if([[cell indicator] isHidden] == NO) {
- resultWidth += kPSMTabBarCellPadding + kPSMTabBarIndicatorWidth;
- }
-
- // right margin
- resultWidth += MARGIN_X;
-
- return ceil(resultWidth);
-}
-
-- (CGFloat)desiredWidthOfTabCell:(PSMTabBarCell *)cell {
- CGFloat resultWidth = 0.0;
-
- // left margin
- resultWidth = MARGIN_X;
-
- // close button?
- if([cell hasCloseButton] && ![cell isCloseButtonSuppressed]) {
- resultWidth += [unifiedCloseButton size].width + kPSMTabBarCellPadding;
- }
-
- // icon?
- if([cell hasIcon]) {
- resultWidth += kPSMTabBarIconWidth + kPSMTabBarCellPadding;
- }
-
- // the label
- resultWidth += [[cell attributedStringValue] size].width;
-
- // object counter?
- if([cell count] > 0) {
- resultWidth += [self objectCounterRectForTabCell:cell].size.width + kPSMTabBarCellPadding;
- }
-
- // indicator?
- if([[cell indicator] isHidden] == NO) {
- resultWidth += kPSMTabBarCellPadding + kPSMTabBarIndicatorWidth;
- }
-
- // right margin
- resultWidth += MARGIN_X;
-
- return ceil(resultWidth);
-}
-
-- (CGFloat)tabCellHeight {
- return kPSMTabBarControlHeight;
-}
-
-#pragma mark -
-#pragma mark Cell Values
-
-- (NSAttributedString *)attributedObjectCountValueForTabCell:(PSMTabBarCell *)cell {
- NSString *contents = [NSString stringWithFormat:@"%lu", (unsigned long)[cell count]];
- return [[[NSMutableAttributedString alloc] initWithString:contents attributes:_objectCountStringAttributes] autorelease];
-}
-
-- (NSAttributedString *)attributedStringValueForTabCell:(PSMTabBarCell *)cell {
- NSMutableAttributedString *attrStr;
- NSString * contents = [cell stringValue];
- attrStr = [[[NSMutableAttributedString alloc] initWithString:contents] autorelease];
- NSRange range = NSMakeRange(0, [contents length]);
-
- [attrStr addAttribute:NSFontAttributeName value:[NSFont systemFontOfSize:11.0] range:range];
-
- // Paragraph Style for Truncating Long Text
- static NSMutableParagraphStyle *TruncatingTailParagraphStyle = nil;
- if(!TruncatingTailParagraphStyle) {
- TruncatingTailParagraphStyle = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] retain];
- [TruncatingTailParagraphStyle setLineBreakMode:NSLineBreakByTruncatingTail];
- }
- [attrStr addAttribute:NSParagraphStyleAttributeName value:TruncatingTailParagraphStyle range:range];
-
- return attrStr;
-}
-
-#pragma mark -
-#pragma mark ---- drawing ----
-
-- (void)drawTabCell:(PSMTabBarCell *)cell {
- NSRect cellFrame = [cell frame];
-
- NSToolbar *toolbar = [[[cell controlView] window] toolbar];
- BOOL showsBaselineSeparator = (toolbar && [toolbar respondsToSelector:@selector(showsBaselineSeparator)] && [toolbar showsBaselineSeparator]);
- if(!showsBaselineSeparator) {
- cellFrame.origin.y += 1.0;
- cellFrame.size.height -= 1.0;
- }
-
- NSColor * lineColor = nil;
- NSBezierPath* bezier = [NSBezierPath bezierPath];
- lineColor = [NSColor colorWithCalibratedWhite:0.576 alpha:1.0];
-
- if(!showsBaselineSeparator || [cell state] == NSOnState) {
- // selected tab
- NSRect aRect = NSMakeRect(cellFrame.origin.x + 0.5, cellFrame.origin.y - 0.5, cellFrame.size.width, cellFrame.size.height);
-
- // frame
- CGFloat radius = MIN(6.0, 0.5f * MIN(NSWidth(aRect), NSHeight(aRect)));
- NSRect rect = NSInsetRect(aRect, radius, radius);
-
- [bezier appendBezierPathWithArcWithCenter:NSMakePoint(NSMinX(rect), NSMinY(rect)) radius:radius startAngle:180.0 endAngle:270.0];
-
- [bezier appendBezierPathWithArcWithCenter:NSMakePoint(NSMaxX(rect), NSMinY(rect)) radius:radius startAngle:270.0 endAngle:360.0];
-
- NSPoint cornerPoint = NSMakePoint(NSMaxX(aRect), NSMaxY(aRect));
- [bezier appendBezierPathWithPoints:&cornerPoint count:1];
-
- cornerPoint = NSMakePoint(NSMinX(aRect), NSMaxY(aRect));
- [bezier appendBezierPathWithPoints:&cornerPoint count:1];
-
- [bezier closePath];
-
- //[[NSColor windowBackgroundColor] set];
- //[bezier fill];
- if([NSApp isActive]) {
- if([cell state] == NSOnState) {
- [bezier linearGradientFillWithStartColor:[NSColor colorWithCalibratedWhite:0.99 alpha:1.0]
- endColor:[NSColor colorWithCalibratedWhite:0.941 alpha:1.0]];
- } else if([cell isHighlighted]) {
- [bezier linearGradientFillWithStartColor:[NSColor colorWithCalibratedWhite:0.80 alpha:1.0]
- endColor:[NSColor colorWithCalibratedWhite:0.80 alpha:1.0]];
- } else {
- [bezier linearGradientFillWithStartColor:[NSColor colorWithCalibratedWhite:0.835 alpha:1.0]
- endColor:[NSColor colorWithCalibratedWhite:0.843 alpha:1.0]];
- }
- }
-
- [lineColor set];
- [bezier stroke];
- } else{
- // unselected tab
- NSRect aRect = NSMakeRect(cellFrame.origin.x, cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height);
- aRect.origin.y += 0.5;
- aRect.origin.x += 1.5;
- aRect.size.width -= 1;
-
- aRect.origin.x -= 1;
- aRect.size.width += 1;
-
- // rollover
- if([cell isHighlighted]) {
- [[NSColor colorWithCalibratedWhite:0.0 alpha:0.1] set];
- NSRectFillUsingOperation(aRect, NSCompositeSourceAtop);
- }
-
- // frame
-
- [lineColor set];
- [bezier moveToPoint:NSMakePoint(aRect.origin.x + aRect.size.width, aRect.origin.y - 0.5)];
- if(!([cell tabState] & PSMTab_RightIsSelectedMask)) {
- [bezier lineToPoint:NSMakePoint(NSMaxX(aRect), NSMaxY(aRect))];
- }
-
- [bezier stroke];
-
- // Create a thin lighter line next to the dividing line for a bezel effect
- if(!([cell tabState] & PSMTab_RightIsSelectedMask)) {
- [[[NSColor whiteColor] colorWithAlphaComponent:0.5] set];
- [NSBezierPath strokeLineFromPoint:NSMakePoint(NSMaxX(aRect) + 1.0, aRect.origin.y - 0.5)
- toPoint:NSMakePoint(NSMaxX(aRect) + 1.0, NSMaxY(aRect) - 2.5)];
- }
-
- // If this is the leftmost tab, we want to draw a line on the left, too
- if([cell tabState] & PSMTab_PositionLeftMask) {
- [lineColor set];
- [NSBezierPath strokeLineFromPoint:NSMakePoint(aRect.origin.x, aRect.origin.y - 0.5)
- toPoint:NSMakePoint(aRect.origin.x, NSMaxY(aRect) - 2.5)];
- [[[NSColor whiteColor] colorWithAlphaComponent:0.5] set];
- [NSBezierPath strokeLineFromPoint:NSMakePoint(aRect.origin.x + 1.0, aRect.origin.y - 0.5)
- toPoint:NSMakePoint(aRect.origin.x + 1.0, NSMaxY(aRect) - 2.5)];
- }
- }
-
- [self drawInteriorWithTabCell:cell inView:[cell controlView]];
-}
-
-
-- (void)drawInteriorWithTabCell:(PSMTabBarCell *)cell inView:(NSView*)controlView {
- NSRect cellFrame = [cell frame];
- CGFloat labelPosition = cellFrame.origin.x + MARGIN_X;
-
- // close button
- if([cell hasCloseButton] && ![cell isCloseButtonSuppressed]) {
- NSSize closeButtonSize = NSZeroSize;
- NSRect closeButtonRect = [cell closeButtonRectForFrame:cellFrame];
- NSImage * closeButton = nil;
-
- closeButton = [cell isEdited] ? unifiedCloseDirtyButton : unifiedCloseButton;
-
- if([cell closeButtonOver]) {
- closeButton = [cell isEdited] ? unifiedCloseDirtyButtonOver : unifiedCloseButtonOver;
- }
- if([cell closeButtonPressed]) {
- closeButton = [cell isEdited] ? unifiedCloseDirtyButtonDown : unifiedCloseButtonDown;
- }
-
- closeButtonSize = [closeButton size];
- if([controlView isFlipped]) {
- closeButtonRect.origin.y += closeButtonRect.size.height;
- }
-
- [closeButton compositeToPoint:closeButtonRect.origin operation:NSCompositeSourceOver fraction:1.0];
-
- // scoot label over
- labelPosition += closeButtonSize.width + kPSMTabBarCellPadding;
- }
-
- // icon
- if([cell hasIcon]) {
- NSRect iconRect = [self iconRectForTabCell:cell];
- NSImage *icon = [[[cell representedObject] identifier] icon];
- if([controlView isFlipped]) {
- iconRect.origin.y += iconRect.size.height;
- }
-
- // center in available space (in case icon image is smaller than kPSMTabBarIconWidth)
- if([icon size].width < kPSMTabBarIconWidth) {
- iconRect.origin.x += (kPSMTabBarIconWidth - [icon size].width) / 2.0;
- }
- if([icon size].height < kPSMTabBarIconWidth) {
- iconRect.origin.y -= (kPSMTabBarIconWidth - [icon size].height) / 2.0;
- }
-
- [icon compositeToPoint:iconRect.origin operation:NSCompositeSourceOver fraction:1.0];
-
- // scoot label over
- labelPosition += iconRect.size.width + kPSMTabBarCellPadding;
- }
-
- // label rect
- NSRect labelRect;
- labelRect.origin.x = labelPosition;
- labelRect.size.width = cellFrame.size.width - (labelRect.origin.x - cellFrame.origin.x) - kPSMTabBarCellPadding;
- NSSize s = [[cell attributedStringValue] size];
- labelRect.origin.y = cellFrame.origin.y + (cellFrame.size.height - s.height) / 2.0 - 1.0;
- labelRect.size.height = s.height;
-
- if(![[cell indicator] isHidden]) {
- labelRect.size.width -= (kPSMTabBarIndicatorWidth + kPSMTabBarCellPadding);
- }
-
- // object counter
- if([cell count] > 0) {
- [[cell countColor] ?: [NSColor colorWithCalibratedWhite:0.3 alpha:0.6] set];
- NSBezierPath *path = [NSBezierPath bezierPath];
- NSRect myRect = [self objectCounterRectForTabCell:cell];
- myRect.origin.y -= 1.0;
- [path moveToPoint:NSMakePoint(myRect.origin.x + kPSMUnifiedObjectCounterRadius, myRect.origin.y)];
- [path lineToPoint:NSMakePoint(myRect.origin.x + myRect.size.width - kPSMUnifiedObjectCounterRadius, myRect.origin.y)];
- [path appendBezierPathWithArcWithCenter:NSMakePoint(myRect.origin.x + myRect.size.width - kPSMUnifiedObjectCounterRadius, myRect.origin.y + kPSMUnifiedObjectCounterRadius) radius:kPSMUnifiedObjectCounterRadius startAngle:270.0 endAngle:90.0];
- [path lineToPoint:NSMakePoint(myRect.origin.x + kPSMUnifiedObjectCounterRadius, myRect.origin.y + myRect.size.height)];
- [path appendBezierPathWithArcWithCenter:NSMakePoint(myRect.origin.x + kPSMUnifiedObjectCounterRadius, myRect.origin.y + kPSMUnifiedObjectCounterRadius) radius:kPSMUnifiedObjectCounterRadius startAngle:90.0 endAngle:270.0];
- [path fill];
-
- // draw attributed string centered in area
- NSRect counterStringRect;
- NSAttributedString *counterString = [self attributedObjectCountValueForTabCell:cell];
- counterStringRect.size = [counterString size];
- counterStringRect.origin.x = myRect.origin.x + ((myRect.size.width - counterStringRect.size.width) / 2.0) + 0.25;
- counterStringRect.origin.y = myRect.origin.y + ((myRect.size.height - counterStringRect.size.height) / 2.0) + 0.5;
- [counterString drawInRect:counterStringRect];
-
- labelRect.size.width -= myRect.size.width + kPSMTabBarCellPadding;
- }
-
- // label
- [[cell attributedStringValue] drawInRect:labelRect];
-}
-
-- (void)drawBackgroundInRect:(NSRect)rect {
- //Draw for our whole bounds; it'll be automatically clipped to fit the appropriate drawing area
- rect = [tabBar bounds];
-
- NSRect gradientRect = rect;
- gradientRect.size.height -= 1.0;
-
- NSBezierPath *path = [NSBezierPath bezierPathWithRect:gradientRect];
- [path linearGradientFillWithStartColor:[NSColor colorWithCalibratedWhite:0.835 alpha:1.0]
- endColor:[NSColor colorWithCalibratedWhite:0.843 alpha:1.0]];
- [[NSColor colorWithCalibratedWhite:0.576 alpha:1.0] set];
- [NSBezierPath strokeLineFromPoint:NSMakePoint(rect.origin.x, NSMaxY(rect) - 0.5)
- toPoint:NSMakePoint(NSMaxX(rect), NSMaxY(rect) - 0.5)];
-
- if(![[[tabBar tabView] window] isKeyWindow]) {
- [[NSColor windowBackgroundColor] set];
- NSRectFill(gradientRect);
- }
-}
-
-- (void)drawTabBar:(PSMTabBarControl *)bar inRect:(NSRect)rect {
- tabBar = bar;
- [self drawBackgroundInRect:rect];
-
- // no tab view == not connected
- if(![bar tabView]) {
- NSRect labelRect = rect;
- labelRect.size.height -= 4.0;
- labelRect.origin.y += 4.0;
- NSMutableAttributedString *attrStr;
- NSString *contents = @"PSMTabBarControl";
- attrStr = [[[NSMutableAttributedString alloc] initWithString:contents] autorelease];
- NSRange range = NSMakeRange(0, [contents length]);
- [attrStr addAttribute:NSFontAttributeName value:[NSFont systemFontOfSize:11.0] range:range];
- NSMutableParagraphStyle *centeredParagraphStyle = nil;
- if(!centeredParagraphStyle) {
- centeredParagraphStyle = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] retain];
- [centeredParagraphStyle setAlignment:NSCenterTextAlignment];
- }
- [attrStr addAttribute:NSParagraphStyleAttributeName value:centeredParagraphStyle range:range];
- [attrStr drawInRect:labelRect];
- return;
- }
-
- // draw cells
- NSEnumerator *e = [[bar cells] objectEnumerator];
- PSMTabBarCell *cell;
- while((cell = [e nextObject])) {
- if([bar isAnimating] || (![cell isInOverflowMenu] && NSIntersectsRect([cell frame], rect))) {
- [cell drawWithFrame:[cell frame] inView:bar];
- }
- }
-}
-
-#pragma mark -
-#pragma mark Archiving
-
-- (void)encodeWithCoder:(NSCoder *)aCoder {
- //[super encodeWithCoder:aCoder];
- if([aCoder allowsKeyedCoding]) {
- [aCoder encodeObject:unifiedCloseButton forKey:@"unifiedCloseButton"];
- [aCoder encodeObject:unifiedCloseButtonDown forKey:@"unifiedCloseButtonDown"];
- [aCoder encodeObject:unifiedCloseButtonOver forKey:@"unifiedCloseButtonOver"];
- [aCoder encodeObject:unifiedCloseDirtyButton forKey:@"unifiedCloseDirtyButton"];
- [aCoder encodeObject:unifiedCloseDirtyButtonDown forKey:@"unifiedCloseDirtyButtonDown"];
- [aCoder encodeObject:unifiedCloseDirtyButtonOver forKey:@"unifiedCloseDirtyButtonOver"];
- [aCoder encodeObject:_addTabButtonImage forKey:@"addTabButtonImage"];
- [aCoder encodeObject:_addTabButtonPressedImage forKey:@"addTabButtonPressedImage"];
- [aCoder encodeObject:_addTabButtonRolloverImage forKey:@"addTabButtonRolloverImage"];
- }
-}
-
-- (id)initWithCoder:(NSCoder *)aDecoder {
- // self = [super initWithCoder:aDecoder];
- //if (self) {
- if([aDecoder allowsKeyedCoding]) {
- unifiedCloseButton = [[aDecoder decodeObjectForKey:@"unifiedCloseButton"] retain];
- unifiedCloseButtonDown = [[aDecoder decodeObjectForKey:@"unifiedCloseButtonDown"] retain];
- unifiedCloseButtonOver = [[aDecoder decodeObjectForKey:@"unifiedCloseButtonOver"] retain];
- unifiedCloseDirtyButton = [[aDecoder decodeObjectForKey:@"unifiedCloseDirtyButton"] retain];
- unifiedCloseDirtyButtonDown = [[aDecoder decodeObjectForKey:@"unifiedCloseDirtyButtonDown"] retain];
- unifiedCloseDirtyButtonOver = [[aDecoder decodeObjectForKey:@"unifiedCloseDirtyButtonOver"] retain];
- _addTabButtonImage = [[aDecoder decodeObjectForKey:@"addTabButtonImage"] retain];
- _addTabButtonPressedImage = [[aDecoder decodeObjectForKey:@"addTabButtonPressedImage"] retain];
- _addTabButtonRolloverImage = [[aDecoder decodeObjectForKey:@"addTabButtonRolloverImage"] retain];
- }
- //}
- return self;
-}
-
-@end
diff --git a/frontends/cocoa/PSMTabBarControl/ReadMe.rtfd/TXT.rtf b/frontends/cocoa/PSMTabBarControl/ReadMe.rtfd/TXT.rtf
deleted file mode 100644
index acd9372..0000000
--- a/frontends/cocoa/PSMTabBarControl/ReadMe.rtfd/TXT.rtf
+++ b/dev/null
@@ -1,186 +0,0 @@
-{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf380
-{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fswiss\fcharset77 Helvetica-Oblique;
-\f3\fnil\fcharset77 Monaco;}
-{\colortbl;\red255\green255\blue255;\red118\green15\blue80;\red0\green0\blue255;\red35\green110\blue37;
-}
-{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1}}
-{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}}
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural
-
-\f0\b\fs24 \cf0 \
-PSMTabBarControl (and related classes)\
-
-\f1\b0 developed by John Pannell, Positive Spin Media\
-\
-as seen in the super-cool app...\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural
-\cf0 {{\NeXTGraphic startpage.gif \width7200 \height2820
-}}\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural
-\cf0 \
-\
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
-\cf0 This source code and all related materials are released under the BSD license, which is explained at the end of this document, along with some other legalese. I've made my best effort to make everything bug free, but please let me know of any bugs found or suggestions you have: johnp@positivespinmedia.com.\
-\
-
-\f0\b Purpose
-\f1\b0 \
-\
-PSMTabBarControl seeks to provide developers with a high-quality, easy to use GUI to manage an NSTabView (or subclasses) in a manner similar to Safari's tabbed browsing implementation. It attempts to add a few features as well. Here's what you get:\
-\
-
-\f0\b The look:
-\f1\b0 a control/cell architecture that draws the expected tab appearance below a toolbar or similar view. Included styles work consistently in Aqua, Metal, or customized metal variations by basing fills on the window's background color. Includes drawing of a close button, and rollover states for the close button and tab cell. Also provides pop-up button and menu when tabs overflow available space, and support for individual tab progress indicators, icons, and object counters. Tabs can be drawn sized to fit the string content of the label, or uniformly sized.\
-\
-
-\f0\b The functionality:
-\f1\b0 Close button removes tabs, click on a tab cell selects. Indicators start, stop, and hide if things are hooked up correctly.\
-\
-
-\f0\b Extras:
-\f1\b0 Supports multi-window drag-and-drop reordering of the tabs with aqua-licious animation.\
-\
-
-\f0\b Files
-\f1\b0 \
-\
-Your project will need the files in the "Framework" folder of the project. The actual framework packages these (and some images) up nicely for you, if desired. Please look over the "TabBarControlDemo" target of the source code project to see exactly what is needed to get everything to build. Building and playing with the demo is also a good way to get a feel for the features provided by these classes.\
-\
-
-\f0\b Usage
-\f1\b0 \
-\
-Simply drag a custom view object from the views palette in IB, read the PSMTabBarControl class into IB, and set the view's custom class to PSMTabBarControl. Then connect the control's tabview outlet to the tab view being controlled, and make the control the delegate of the tab view. You can also connect the control's "partner view" outlet to another view that will resize in response to the hide/show behavior of the control.\
-\
-Alternately, you can build the Palette subproject and add the built IB palette to Interface Builder. In this case, creating and configuring an instance is as easy and drag, drop, and a few clicks. A demo movie and the built palette are available in a separate download from my website: http://www.positivespinmedia.com/dev/PSMTabBarControl.html\
-\
-
-\f2\i Please read the PSMTabBarControlDoc.html file in the documentation folder of this project. It provides an Apple-ish page describing the interface and usage of this object.
-\f1\i0 \
-\
-
-\f0\b Patterns of Use
-\f1\b0 \
-\
-There are a few random notes I can think of for usage guidelines...\
-\
-- You may see a line between the toolbar and the control in your app; it is part of the toolbar. In Tiger, you can eliminate the appearance of this line:\
-\
-\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
-
-\f3\fs20 \cf0 \CocoaLigature0 SInt32 MacVersion;\
-\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
-\cf2 if\cf0 (Gestalt(gestaltSystemVersion, &MacVersion) == noErr)\{\
- \cf2 if\cf0 (MacVersion >= \cf3 0x1040\cf0 )\{\
- \cf4 // this call is Tiger only\cf0 \
- [toolbar setShowsBaselineSeparator:\cf2 NO\cf0 ];\
- \}\
-\}\
-\
-\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
-
-\f1\fs24 \cf0 - In general, there is no reason for your app objects to communicate (outside of configuration) with the PSMTabBarControl at all. Changes made to the NSTabView instance programmatically should be directed at the NSTabView instance itself, and the control will update to reflect the changes made.\
-\
-- Your app might want to receive tab view delegate notifications in order to perform some actions. No problem, simply make the desired object the delegate of the PSMTabBarControl instance... it passes along all tab view notifications. Note that it uses these notifications to make changes itself - read the source code to make sure you aren't tripping over something.\
-\
-- The control creates bindings between each cell's progress indicator and the represented NSTabViewItem's identifier object, if it can. In my app design, I set an instance of NSObjectController as the NSTabViewItem's identifier, and then bind to the "isProcessing" key of the controller's content object. All of this can be seen in the source of the demo app...\
-\
-- The control can be set to hide itself when there is only a single tab, and can also be told to hide/show on demand. It can animate to appear and disappear, and will resize something to compensate for the missing window real estate. By default, it will resize the window, but you can also connect the "partnerView" outlet in IB to specify another view to resize to take up the missing space. Note that this takes some attention to sizing springs and wires to get right, and complex views may need a container view to achieve the desired effect.\
-\
-- The control can be configured to draw an attractive "Add Tab" button at the end of the tab cells. Unfortunately, the button is all looks and no brains - it has no idea what your app wants to do when adding a tab. If you configure your app to show the add tab button, you need to hook up the add tab button to the proper target with the proper selector. Something like this will do nicely in your app controller's awakeFromNib:\
-\
-\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
-
-\f3\fs20 \cf4 // hook up add tab button\cf0 \
-[[tabBar addTabButton] setTarget:\cf2 self\cf0 ];\
-[[tabBar addTabButton] setAction:\cf2 @selector\cf0 (addNewTab:)];
-\f1\fs24 \
-\
-- The tabs have some sizing options: You can specify the minimum width, maximum width, and optimum width, as well as spcifying if the tabs should size to fit their label or not. The sizing bahavior of the tabs is as follows: If "size to fit" is specified, then tabs will be generated to fit the label, but will never exceed the specified max or min widths. Once the end of the control is reached, the overflow menu will appear as tabs are added; the last tab will squeeze in if it can, or the remaining tabs will stretch to occupy the full control. If "size to fit" is not specified, then all successive tabs will appear at the optimum width. Once the end of the control is reached, adding new tabs will cause all tabs to shrink to accomodate, until the minumum width is reached, and then the overflow menu will be used; max width is ignored in this case. Hopefully that all makes sense :-)\
-\
-- PSMTabBarControl will load the existing tabs from the tabView outlet at startup. However, many of the advanced features (icon display, progress indicator, object count) rely on binding to a controller that is likely not set up in IB. Solution? Nuke the existing tabs in the NSTabView and add new ones, configured the way you like. The demo app does this in the awakeFromNib: method of the app controller.\
-\
-- As a design choice, I elected to keep a cell object around until its tab was closed, instead of "churning" cell objects in each update cycle. Each cell keeps its NSTabViewItem as its representedObject and maintains reference that way, rather than by any index. As a result of this, drag-and-drop reordering of tabs does not change the underlying NSTabView instance at all. All that to say: don't rely on numerical indices if communicating with both the control and the tab view - the indices may not correlate if the user moved some tabs around (and remember - you shouldn't need to communicate with the control anyway :-). The Shiira Project, from which I gained much insight and inspiration from for this UI element, elected to scrap and rebuild the array of cells each time through the update cycle, and rely on indices to correlate between cells and NSTabViewItems. I felt the representedObject route was cleaner, and preferred not to churn objects.\
-\
-\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
-
-\f0\b \cf0 Improvements?
-\f1\b0 \
-\
-Pipe up if you think of something you'd like to see; here's my current list:\
-\
-- "Pop-up" tabs - like pop-up folders in the finder, in case you want to drag to a destination in another tab.\
-- Support for the
-\f3\fs22 \CocoaLigature1 NSUnifiedTitleAndToolbarWindowMask
-\f1\fs24 \CocoaLigature0 "unified" window appearance. (Help! I really searched around to try to make this work... the color pattern of the title and toolbar seem to be top secret! The new "unified" style is an excellent replication of a unified look, but isn't "built from" the unified appearance like the metal is.)\
-- During multi-window drag, having a "drag window/image" that shows the represented view getting moved to the other window.\
-- During multi-window drag, support for dragging out solo tabs to consolidate in another window, removing the source window in the process.\
-- Support vertical as well as horizontal alignment.\
-\
-
-\f0\b Version History
-\f1\b0 \
-\
-Version 1.3 (May 29, 2006)\
-- new feature: Unified tab style, compliments of Keith Blount\
-- new feature: allow multi-window drag config option (again from Keith).\
-- fixed bug: Palette installation/usage instructions were wrong.\
-- enhancement: exposed the
-\f3\fs20 representedTabViewItems
-\f1\fs24 method, which can be used to retrieve the order of the tabs as displayed in the control, since the underlying NSTabView does not get reordered during drag and drop rearrangement.\
-\
-Version 1.2 (April 20, 2006)\
-- new feature: multi-window drag and drop support.\
-- bug fixed: zombie issue with tabView:didCloseTabViewItem\
-- bugs fixed: some drawing issues around the progress indicators in tabs, and the add tab button.\
-- enhancement: the hide/show animation has been improved with less "flickering" of progress indicators during the hide and show.\
-\
-Version 1.1.2 (April 5, 2006)\
-- fixed bug: tabs of non-integer width resulted in occasional anti-aliased drawing issues of dividers between tabs in the Metal style (Thanks, Kent).\
-- added feature: delegate can now respond to -tabView:shouldCloseTabViewItem: and -tabView:willCloseTabViewItem:, and -tabView:didCloseTabViewItem: messages, so your app can take care of any needed setup/cleanup for these actions.\
-- fixed bug: tab close buttons now show down state when pressed down.\
-\
-Version 1.1.1 (March 16, 2006)\
-- fixed bug: Palette inspector would not reflect state of previously instantiated control. This has been fixed (Thanks, Guillaume).\
-- enhancement: Overflow button now highlights when mouse down (Thanks, Kent).\
-- fixed bug: when set to not close a solo tab, the close button would be hidden for the tab, but could still be closed if you clicked the tab in the right location. This has been fixed (Thanks, malcom).\
-\
-Version 1.1 (March 10, 2006)\
-- Bound the "title" of the cell to the "label" of the source tabview item. Just in case you wanted to change the label on the tab during the running of your application.\
-- PSMTabBarCell factored to support new tab "styles", or appearances in drawing. Now supported are the existing "Metal" style and a new "Aqua" style. Many thanks to David Smith, Seth Willits, and Chris Forsythe for their contributions!\
-- Control can be configured to "Hide for single tab", so it doesn't appear unless there are more than a single tab view present. Features animated show/hide behavior (that can be called anytime, and is called automatically in the case that a single tab exists). The show/hide behavior can also be set up to resize either the window (default) or a selected "partner view" to compensate for the lost height of the tab bar.\
-- Control can be configured for "Can close only tab" behavior. If set to NO, no close button will appear on a lone tab.\
-- Cells can be set to "size to fit", or given uniform min/max/optimum sizes.\
-- Added support for display of an icon and an object count, if the proper app design pattern is followed.\
-- Sweet animated drag-and-drop drawing!\
-- A few drawing bugs surrounding the progress indicators in cells were squished.\
-- New documentation, in case you found this read me a little pithy.\
-\
-Version 1.0 (December 2005)\
-Initial release of safari-like tab implementation.\
-\
-
-\f0\b The standard disavowal of this beautiful mess
-\f1\b0 \
-\
-I should note that portions of this source code were inspired by the Shiira project's implementation of Safari-style tabs. While I made some different design decisions, the drawing and some other aspects are only slight modifications of their excellent work. As such, I note their copyright under their BSD licence:\
-\
-\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
-
-\f3\fs20 \cf4 Portions of this software Copyright 2004 The Shiira Project. All rights reserved.\
-\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\tx10560\tx11520\tx12480\tx13440\tx14400\tx15360\tx16320\tx17280\tx18240\tx19200\tx20160\tx21120\tx22080\tx23040\tx24000\tx24960\tx25920\tx26880\tx27840\tx28800\tx29760\tx30720\tx31680\tx32640\tx33600\tx34560\tx35520\tx36480\tx37440\tx38400\tx39360\tx40320\tx41280\tx42240\tx43200\tx44160\tx45120\tx46080\tx47040\tx48000\tx48960\tx49920\tx50880\tx51840\tx52800\tx53760\tx54720\tx55680\tx56640\tx57600\tx58560\tx59520\tx60480\tx61440\tx62400\tx63360\tx64320\tx65280\tx66240\tx67200\tx68160\tx69120\tx70080\tx71040\tx72000\tx72960\tx73920\tx74880\tx75840\tx76800\tx77760\tx78720\tx79680\tx80640\tx81600\tx82560\tx83520\tx84480\tx85440\tx86400\tx87360\tx88320\tx89280\tx90240\tx91200\tx92160\tx93120\tx94080\tx95040\tx96000\ql\qnatural\pardirnatural
-
-\f1\fs24 \cf0 Check them out at: http://hmdt-web.net/shiira/\
-\
-This source code is provided under BSD license, the conditions of which are listed below. I hope you'll make note somewhere in your about window or ReadMe stating the sweet coding goodness of Positive Spin Media and link to the fascinating and informative website at www.positivespinmedia.com\
-\
-\pard\pardeftab720\sa320\ql\qnatural
-\cf0 \CocoaLigature1 Copyright (c) 2005, Positive Spin Media\uc0\u8232 All rights reserved.\
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\
-\pard\tx220\tx720\pardeftab720\li720\fi-720\ql\qnatural
-\ls1\ilvl0\cf0 {\listtext \'a5 }Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\
-{\listtext \'a5 }Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\
-{\listtext \'a5 }Neither the name of Positive Spin Media nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\
- \
-\pard\pardeftab720\sa320\ql\qnatural
-\cf0 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\CocoaLigature0 \
-} \ No newline at end of file
diff --git a/frontends/cocoa/PSMTabBarControl/ReadMe.rtfd/startpage.gif b/frontends/cocoa/PSMTabBarControl/ReadMe.rtfd/startpage.gif
deleted file mode 100644
index 8707a77..0000000
--- a/frontends/cocoa/PSMTabBarControl/ReadMe.rtfd/startpage.gif
+++ b/dev/null
Binary files differ
diff --git a/frontends/cocoa/PreferencesWindowController.h b/frontends/cocoa/PreferencesWindowController.h
deleted file mode 100644
index 8f72907..0000000
--- a/frontends/cocoa/PreferencesWindowController.h
+++ b/dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#import <Cocoa/Cocoa.h>
-
-
-@interface PreferencesWindowController : NSWindowController
-
-@property (readwrite, copy, nonatomic) NSString *homepageURL;
-
-- (IBAction) useCurrentPageAsHomepage: (id) sender;
-
-@end
diff --git a/frontends/cocoa/PreferencesWindowController.m b/frontends/cocoa/PreferencesWindowController.m
deleted file mode 100644
index 590a968..0000000
--- a/frontends/cocoa/PreferencesWindowController.m
+++ b/dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "utils/nsoption.h"
-#import "utils/nsurl.h"
-#import "netsurf/browser_window.h"
-
-#import "cocoa/PreferencesWindowController.h"
-#import "cocoa/NetsurfApp.h"
-#import "cocoa/gui.h"
-#import "cocoa/BrowserViewController.h"
-
-@implementation PreferencesWindowController
-
-- init;
-{
- if ((self = [super initWithWindowNibName: @"PreferencesWindow"]) == nil) return nil;
-
- return self;
-}
-
-- (IBAction) useCurrentPageAsHomepage: (id) sender;
-{
- struct browser_window *bw = [[(NetSurfApp *)NSApp frontTab] browser];
- const char *url = nsurl_access(browser_window_get_url(bw));
- [self setHomepageURL: [NSString stringWithUTF8String: url]];
-}
-
-- (void) setHomepageURL: (NSString *) newUrl;
-{
- nsoption_set_charp(homepage_url, strdup( [newUrl UTF8String] ));
- [[NSUserDefaults standardUserDefaults] setObject: newUrl forKey: kHomepageURLOption];
- [[NSUserDefaults standardUserDefaults] synchronize];
-}
-
-- (NSString *) homepageURL;
-{
- return [NSString stringWithUTF8String: nsoption_charp(homepage_url)];
-}
-
-@end
diff --git a/frontends/cocoa/Prefix.pch b/frontends/cocoa/Prefix.pch
deleted file mode 100644
index 7fa2c05..0000000
--- a/frontends/cocoa/Prefix.pch
+++ b/dev/null
@@ -1,11 +0,0 @@
-#include <Carbon/Carbon.h>
-
-#ifdef __OBJC__
-#import <Cocoa/Cocoa.h>
-#endif
-
-#undef offsetof
-
-#define HISTORY_COLOUR_BACKGROUND 0x000000
-#define HISTORY_COLOUR_FOREGROUND 0xFFFFFF
-#define HISTORY_COLOUR_SELECTED 0xFF6D27 \ No newline at end of file
diff --git a/frontends/cocoa/ScrollableView.h b/frontends/cocoa/ScrollableView.h
deleted file mode 100644
index 071a118..0000000
--- a/frontends/cocoa/ScrollableView.h
+++ b/dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-
-@interface ScrollableView : NSView {
- NSSize minimumSize;
- NSView *observedSuperview;
-}
-
-@property (readwrite, assign, nonatomic) NSSize minimumSize;
-
-- (void) adjustFrame;
-
-@end
diff --git a/frontends/cocoa/ScrollableView.m b/frontends/cocoa/ScrollableView.m
deleted file mode 100644
index 8f27b2b..0000000
--- a/frontends/cocoa/ScrollableView.m
+++ b/dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "cocoa/ScrollableView.h"
-
-@interface ScrollableView ()
-
-- (void) frameChangeNotification: (NSNotification *) note;
-
-@end
-
-@implementation ScrollableView
-@synthesize minimumSize;
-
-- (void) setMinimumSize: (NSSize)newSize
-{
- minimumSize = newSize;
- [self adjustFrame];
-}
-
-- (void) adjustFrame
-{
- NSSize frameSize = [[self superview] frame].size;
- [self setFrameSize: NSMakeSize( MAX( minimumSize.width, frameSize.width ),
- MAX( minimumSize.height, frameSize.height ) )];
-}
-
-- (void) frameChangeNotification: (NSNotification *) note
-{
- [self adjustFrame];
-}
-
-- (void) viewDidMoveToSuperview
-{
- if (observedSuperview) {
- [[NSNotificationCenter defaultCenter]
- removeObserver: self
- name: NSViewFrameDidChangeNotification
- object: observedSuperview];
- observedSuperview = nil;
- }
-
- NSView *newSuperView = [self superview];
-
- if (nil != newSuperView) {
- observedSuperview = newSuperView;
- [[NSNotificationCenter defaultCenter]
- addObserver: self
- selector: @selector(frameChangeNotification:)
- name: NSViewFrameDidChangeNotification
- object: observedSuperview];
- [observedSuperview setPostsFrameChangedNotifications: YES];
- }
-}
-
-@end
diff --git a/frontends/cocoa/SearchWindowController.h b/frontends/cocoa/SearchWindowController.h
deleted file mode 100644
index 7ce8c00..0000000
--- a/frontends/cocoa/SearchWindowController.h
+++ b/dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#import <Cocoa/Cocoa.h>
-
-@class BrowserViewController;
-
-typedef enum {
- SearchBackward,
- SearchForward
-} SearchDirection;
-
-@interface SearchWindowController : NSWindowController {
- BOOL caseSensitive;
- BOOL selectAll;
- BOOL canGoBack;
- BOOL canGoForward;
- NSString *searchString;
- BrowserViewController *browser;
-}
-
-@property (readwrite, assign, nonatomic) BOOL caseSensitive;
-@property (readwrite, assign, nonatomic) BOOL selectAll;
-@property (readwrite, assign, nonatomic) BOOL canGoBack;
-@property (readwrite, assign, nonatomic) BOOL canGoForward;
-@property (readwrite, copy, nonatomic) NSString *searchString;
-@property (readwrite, assign, nonatomic) BrowserViewController *browser;
-
-- (IBAction) searchNext: (id) sender;
-- (IBAction) searchPrevious: (id) sender;
-
-- (IBAction) searchStringDidChange: (id) sender;
-
-- (void) search: (SearchDirection)direction;
-
-@end
-
-struct gui_search_table *cocoa_search_table;
diff --git a/frontends/cocoa/SearchWindowController.m b/frontends/cocoa/SearchWindowController.m
deleted file mode 100644
index 95372fc..0000000
--- a/frontends/cocoa/SearchWindowController.m
+++ b/dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#import "cocoa/SearchWindowController.h"
-#import "cocoa/BrowserViewController.h"
-
-#import "netsurf/search.h"
-#import "netsurf/browser_window.h"
-#import "desktop/search.h"
-
-static void cocoa_search_set_back( bool active, void *p );
-static void cocoa_search_set_forward( bool active, void *p );
-
-static struct gui_search_table search_table = {
- .forward_state = cocoa_search_set_forward,
- .back_state = cocoa_search_set_back,
-};
-
-struct gui_search_table *cocoa_search_table = &search_table;
-
-@implementation SearchWindowController
-
-@synthesize caseSensitive;
-@synthesize selectAll;
-@synthesize canGoBack;
-@synthesize canGoForward;
-@synthesize searchString;
-@synthesize browser;
-
-- init;
-{
- if ((self = [super initWithWindowNibName: @"SearchWindow"]) == nil) return nil;
-
- [self bind: @"browser" toObject: NSApp withKeyPath: @"frontTab" options: nil];
- canGoBack = canGoForward = YES;
-
- return self;
-}
-
-- (void) dealloc;
-{
- [self unbind: @"browser"];
- [super dealloc];
-}
-
-- (IBAction) searchNext: (id) sender;
-{
- [self search: SearchForward];
-}
-
-- (IBAction) searchPrevious: (id) sender;
-{
- [self search: SearchBackward];
-}
-
-- (void) search: (SearchDirection)direction;
-{
- search_flags_t flags = (direction == SearchForward) ? SEARCH_FLAG_FORWARDS : 0;
- if (caseSensitive) flags |= SEARCH_FLAG_CASE_SENSITIVE;
- if (selectAll) flags |= SEARCH_FLAG_SHOWALL;
-
- struct browser_window *bw = [browser browser];
- browser_window_search( bw, self, flags, [searchString UTF8String] );
-}
-
-- (IBAction) searchStringDidChange: (id) sender;
-{
- struct browser_window *bw = [browser browser];
- browser_window_search_clear( bw );
-
- [self setCanGoBack: YES];
- [self setCanGoForward: YES];
-}
-
-- (void) setCaseSensitive: (BOOL) newValue;
-{
- if (caseSensitive != newValue) {
- caseSensitive = newValue;
- [self setCanGoBack: YES];
- [self setCanGoForward: YES];
- }
-}
-
-- (void) setSelectAll: (BOOL) newValue;
-{
- if (selectAll != newValue) {
- selectAll = newValue;
- [self setCanGoBack: YES];
- [self setCanGoForward: YES];
- }
-}
-
-static void cocoa_search_set_back( bool active, void *p )
-{
- [(SearchWindowController *)p setCanGoBack: active];
-}
-
-static void cocoa_search_set_forward( bool active, void *p )
-{
- [(SearchWindowController *)p setCanGoForward: active];
-}
-
-@end
diff --git a/frontends/cocoa/Tree.h b/frontends/cocoa/Tree.h
deleted file mode 100644
index 25c93b7..0000000
--- a/frontends/cocoa/Tree.h
+++ b/dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-#import "cocoa/desktop-tree.h"
-
-@class Tree;
-
-@protocol TreeDelegate
-
-- (void) tree: (Tree *)tree requestedRedrawInRect: (NSRect) rect;
-- (void) tree: (Tree *)tree resized: (NSSize) size;
-- (void) tree: (Tree *)tree scrollPoint: (NSPoint) point;
-- (NSSize) treeWindowSize: (Tree *)tree;
-
-@end
-
-
-@interface Tree : NSObject {
- id <TreeDelegate> delegate;
- struct tree *tree;
-}
-
-@property (readwrite, assign, nonatomic) id <TreeDelegate> delegate;
-
-- (id)initWithFlags: (unsigned int) flags;
-
-- (struct tree *) tree;
-
-@end
-
-
-@interface Tree (ViewInterface)
-
-- (void) drawRect: (NSRect) rect inView: (NSView *) view;
-- (void) mouseAction: (browser_mouse_state)state atPoint: (NSPoint)point;
-- (void) mouseDragEnd: (browser_mouse_state)state fromPoint: (NSPoint)p0 toPoint: (NSPoint) p1;
-- (void) keyPress: (uint32_t) key;
-
-@end
diff --git a/frontends/cocoa/Tree.m b/frontends/cocoa/Tree.m
deleted file mode 100644
index b5d4a3f..0000000
--- a/frontends/cocoa/Tree.m
+++ b/dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "cocoa/Tree.h"
-#import "cocoa/coordinates.h"
-#import "cocoa/font.h"
-#import "cocoa/plotter.h"
-
-#import "netsurf/plotters.h"
-#import "cocoa/desktop-tree.h"
-
-@implementation Tree
-
-@synthesize delegate;
-
-static void tree_redraw_request( int x, int y, int w, int h, void *data );
-static void tree_resized( struct tree *tree, int w, int h, void *data );
-static void tree_scroll_visible( int y, int height, void *data );
-static void tree_get_window_dimensions( int *width, int *height, void *data );
-
-static const struct treeview_table cocoa_tree_callbacks = {
- .redraw_request = tree_redraw_request,
- .resized = tree_resized,
- .scroll_visible = tree_scroll_visible,
- .get_window_dimensions = tree_get_window_dimensions
-};
-
-- (id)initWithFlags: (unsigned int)flags
-{
- if ((self = [super init]) == nil) return nil;
-
- tree = tree_create( flags, &cocoa_tree_callbacks, self );
- if (tree == NULL) {
- [self release];
- return nil;
- }
-
- return self;
-}
-
-
-- (void) dealloc
-{
- tree_delete( tree );
- [super dealloc];
-}
-
-- (struct tree *) tree
-{
- return tree;
-}
-
-- (void) setRedrawing: (BOOL) newRedrawing
-{
-}
-
-
-+ (void) initialize
-{
-}
-
-//MARK: -
-//MARK: Callbacks
-
-static void tree_redraw_request( int x, int y, int w, int h, void *data )
-{
- id <TreeDelegate> delegate = ((Tree *)data)->delegate;
- [delegate tree: (Tree *)data requestedRedrawInRect: cocoa_rect_wh( x, y, w, h )];
-}
-
-static void tree_resized( struct tree *tree, int w, int h, void *data )
-{
- id <TreeDelegate> delegate = ((Tree *)data)->delegate;
- [delegate tree: (Tree *)data resized: cocoa_size( w, h )];
-}
-
-static void tree_scroll_visible( int y, int height, void *data )
-{
- id <TreeDelegate> delegate = ((Tree *)data)->delegate;
- [delegate tree: (Tree *)data scrollPoint: cocoa_point( 0, y )];
-}
-
-static void tree_get_window_dimensions( int *width, int *height, void *data )
-{
- id <TreeDelegate> delegate = ((Tree *)data)->delegate;
- if (delegate == nil) return;
-
- NSSize size = [delegate treeWindowSize: (Tree *)data];
-
- if (width != NULL) *width = cocoa_pt_to_px( size.width );
- if (height != NULL) *height = cocoa_pt_to_px( size.height );
-}
-
-@end
-
-@implementation Tree (ViewInterface)
-
-- (void) drawRect: (NSRect) rect inView: (NSView *) view
-{
- struct redraw_context ctx = {
- .interactive = true,
- .background_images = true,
- .plot = &cocoa_plotters
- };
-
- tree_draw(tree, 0, 0,
- cocoa_pt_to_px(NSMinX( rect )),
- cocoa_pt_to_px(NSMinY( rect )),
- cocoa_pt_to_px(NSWidth( rect )),
- cocoa_pt_to_px(NSHeight( rect )),
- &ctx );
-}
-
-- (void) mouseAction: (browser_mouse_state)state atPoint: (NSPoint)point
-{
- tree_mouse_action(tree, state,
- cocoa_pt_to_px( point.x ), cocoa_pt_to_px( point.y ));
-}
-
-- (void) mouseDragEnd: (browser_mouse_state)state fromPoint: (NSPoint)p0 toPoint: (NSPoint) p1
-{
- tree_drag_end(tree, state,
- cocoa_pt_to_px( p0.x ), cocoa_pt_to_px( p0.y ),
- cocoa_pt_to_px( p1.x ), cocoa_pt_to_px( p1.y ));
-}
-
-- (void) keyPress: (uint32_t) key;
-{
- tree_keypress( tree, key );
-}
-
-@end
diff --git a/frontends/cocoa/TreeView.h b/frontends/cocoa/TreeView.h
deleted file mode 100644
index 31dedbb..0000000
--- a/frontends/cocoa/TreeView.h
+++ b/dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-#import "cocoa/ScrollableView.h"
-@class Tree;
-
-@interface TreeView : ScrollableView {
- Tree *tree;
-
- BOOL isDragging;
- NSPoint dragStart;
-
-}
-
-@property (readwrite, retain, nonatomic) Tree *tree;
-
-@end
diff --git a/frontends/cocoa/TreeView.m b/frontends/cocoa/TreeView.m
deleted file mode 100644
index 949c3c2..0000000
--- a/frontends/cocoa/TreeView.m
+++ b/dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "cocoa/TreeView.h"
-#import "cocoa/Tree.h"
-
-#import "netsurf/plotters.h"
-#import "netsurf/keypress.h"
-
-@interface TreeView () <TreeDelegate>
-@end
-
-@implementation TreeView
-
-@synthesize tree;
-
-- (void)drawRect:(NSRect)dirtyRect
-{
- [tree drawRect: dirtyRect inView: self];
-}
-
-- (BOOL) isFlipped
-{
- return YES;
-}
-
-- (BOOL) acceptsFirstResponder
-{
- return YES;
-}
-
-- (void) dealloc
-{
- [self setTree: nil];
- [super dealloc];
-}
-
-- (void) setTree: (Tree *)newTree
-{
- if (tree != newTree) {
- [tree setRedrawing: NO];
- [tree setDelegate: nil];
- [tree release];
-
- tree = [newTree retain];
- [tree setDelegate: self];
- [tree setRedrawing: YES];
-
- [self setNeedsDisplay: YES];
- }
-}
-
-//MARK: -
-//MARK: Event handlers
-
-- (void)mouseDown: (NSEvent *)event
-{
- isDragging = NO;
- dragStart = [self convertPoint: [event locationInWindow] fromView: nil];
- [tree mouseAction: BROWSER_MOUSE_PRESS_1 atPoint: dragStart];
-}
-
-#define squared(x) ((x)*(x))
-#define MinDragDistance (5.0)
-
-- (void) mouseDragged: (NSEvent *)event
-{
- const NSPoint point = [self convertPoint: [event locationInWindow] fromView: nil];
-
- if (!isDragging) {
- const CGFloat distance = squared( dragStart.x - point.x ) + squared( dragStart.y - point.y );
- if (distance >= squared( MinDragDistance)) {
- isDragging = YES;
- }
- }
-}
-
-- (void) mouseUp: (NSEvent *)event
-{
- const NSPoint point = [self convertPoint: [event locationInWindow] fromView: nil];
-
- browser_mouse_state modifierFlags = 0;
-
- if (isDragging) {
- isDragging = NO;
- [tree mouseDragEnd: modifierFlags fromPoint: dragStart toPoint: point];
- } else {
- modifierFlags |= BROWSER_MOUSE_CLICK_1;
- if ([event clickCount] == 2) {
- modifierFlags |= BROWSER_MOUSE_DOUBLE_CLICK;
- }
- [tree mouseAction: modifierFlags atPoint: point];
- }
-}
-
-//MARK: Keyboard events
-
-- (void) keyDown: (NSEvent *)theEvent
-{
- [self interpretKeyEvents: [NSArray arrayWithObject: theEvent]];
-}
-
-- (void) insertText: (id)string
-{
- for (NSUInteger i = 0, length = [string length]; i < length; i++) {
- unichar ch = [string characterAtIndex: i];
- [tree keyPress: ch];
- }
-}
-
-- (void) moveLeft: (id)sender
-{
- [tree keyPress: NS_KEY_LEFT];
-}
-
-- (void) moveRight: (id)sender
-{
- [tree keyPress: NS_KEY_RIGHT];
-}
-
-- (void) moveUp: (id)sender
-{
- [tree keyPress: NS_KEY_UP];
-}
-
-- (void) moveDown: (id)sender
-{
- [tree keyPress: NS_KEY_DOWN];
-}
-
-- (void) deleteBackward: (id)sender
-{
- [tree keyPress: NS_KEY_DELETE_LEFT];
-}
-
-- (void) deleteForward: (id)sender
-{
- [tree keyPress: NS_KEY_DELETE_RIGHT];
-}
-
-- (void) cancelOperation: (id)sender
-{
- [tree keyPress: NS_KEY_ESCAPE];
-}
-
-- (void) scrollPageUp: (id)sender
-{
- [tree keyPress: NS_KEY_PAGE_UP];
-}
-
-- (void) scrollPageDown: (id)sender
-{
- [tree keyPress: NS_KEY_PAGE_DOWN];
-}
-
-- (void) insertTab: (id)sender
-{
- [tree keyPress: NS_KEY_TAB];
-}
-
-- (void) insertBacktab: (id)sender
-{
- [tree keyPress: NS_KEY_SHIFT_TAB];
-}
-
-- (void) moveToBeginningOfLine: (id)sender
-{
- [tree keyPress: NS_KEY_LINE_START];
-}
-
-- (void) moveToEndOfLine: (id)sender
-{
- [tree keyPress: NS_KEY_LINE_END];
-}
-
-- (void) moveToBeginningOfDocument: (id)sender
-{
- [tree keyPress: NS_KEY_TEXT_START];
-}
-
-- (void) moveToEndOfDocument: (id)sender
-{
- [tree keyPress: NS_KEY_TEXT_END];
-}
-
-- (void) insertNewline: (id)sender
-{
- [tree keyPress: NS_KEY_NL];
-}
-
-- (void) selectAll: (id)sender
-{
- [tree keyPress: NS_KEY_SELECT_ALL];
-}
-
-- (void) copy: (id) sender
-{
- [tree keyPress: NS_KEY_COPY_SELECTION];
-}
-
-- (void) cut: (id) sender
-{
- [tree keyPress: NS_KEY_CUT_SELECTION];
-}
-
-- (void) paste: (id) sender
-{
- [tree keyPress: NS_KEY_PASTE];
-}
-
-//MARK: -
-//MARK: Tree delegate methods
-
-- (void) tree: (Tree *)t requestedRedrawInRect: (NSRect) rect
-{
- [self setNeedsDisplayInRect: rect];
-}
-
-- (void) tree: (Tree *)t resized: (NSSize) size
-{
- [self setMinimumSize: size];
-}
-
-- (void) tree: (Tree *)t scrollPoint: (NSPoint) point
-{
- [self scrollPoint: point];
-}
-
-- (NSSize) treeWindowSize: (Tree *)t
-{
- return [self frame].size;
-}
-
-@end
diff --git a/frontends/cocoa/URLFieldCell.h b/frontends/cocoa/URLFieldCell.h
deleted file mode 100644
index 38a75a1..0000000
--- a/frontends/cocoa/URLFieldCell.h
+++ b/dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-
-@interface URLFieldCell : NSTextFieldCell {
- NSButtonCell *refreshCell;
- NSImage *favicon;
-}
-
-@property (readwrite, assign, nonatomic) SEL refreshAction;
-@property (readwrite, assign, nonatomic) id refreshTarget;
-@property (readwrite, retain, nonatomic) NSImage *favicon;
-
-@end
diff --git a/frontends/cocoa/URLFieldCell.m b/frontends/cocoa/URLFieldCell.m
deleted file mode 100644
index e9e6647..0000000
--- a/frontends/cocoa/URLFieldCell.m
+++ b/dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import "cocoa/URLFieldCell.h"
-
-#import "utils/nsurl.h"
-#import "netsurf/url_db.h"
-
-@interface URLFieldCell ()
-
-@property (readonly, retain, nonatomic) NSButtonCell *refreshCell;
-
-- (NSRect) buttonFrame: (NSRect) cellFrame;
-- (NSRect) urlFrame: (NSRect) cellFrame;
-- (NSRect) iconFrame: (NSRect) cellFrame;
-
-@end
-
-
-@implementation URLFieldCell
-
-@synthesize favicon;
-
-- (void) setFavicon: (NSImage *)newIcon;
-{
- if (favicon != newIcon) {
- [favicon release];
- favicon = [newIcon retain];
- [[self controlView] setNeedsDisplay: YES];
- }
-}
-
-#define BUTTON_SIZE 32
-#define PADDING 2
-
-- (void) drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView *)controlView;
-{
- [favicon drawInRect: [self iconFrame: cellFrame] fromRect: NSZeroRect
- operation: NSCompositeSourceOver fraction: 1.0];
-
- [super drawInteriorWithFrame: [self urlFrame: cellFrame] inView: controlView];
-
- [[self refreshCell] drawInteriorWithFrame: [self buttonFrame: cellFrame]
- inView: controlView];
-}
-
-- (void) selectWithFrame: (NSRect)aRect inView: (NSView *)controlView editor: (NSText *)textObj
- delegate: (id)anObject start: (NSInteger)selStart length: (NSInteger)selLength;
-{
- const NSRect textFrame = [self urlFrame: aRect];
- [super selectWithFrame: textFrame inView: controlView editor: textObj
- delegate: anObject start: selStart length: selLength];
-}
-
-- (void) editWithFrame: (NSRect)aRect inView: (NSView *)controlView editor: (NSText *)textObj
- delegate: (id)anObject event: (NSEvent *)theEvent;
-{
- const NSRect textFrame = [self urlFrame: aRect];
- [super editWithFrame: textFrame inView: controlView editor: textObj
- delegate: anObject event: theEvent];
-}
-
-- (void) startDragURLAt: (NSPoint) point inView: (NSView *) view;
-{
- NSString *url = [self stringValue];
- NSString *title = url;
- nsurl *nsurl;
-
- if (nsurl_create( [url UTF8String] , &nsurl ) != NSERROR_OK)
- return;
-
- const struct url_data *data = urldb_get_url_data( nsurl );
-
- nsurl_unref(nsurl);
-
- if (data && data->title) title = [NSString stringWithUTF8String: data->title];
-
- NSPasteboard *pb = [NSPasteboard pasteboardWithName: NSDragPboard];
- [pb declareTypes: [NSArray arrayWithObjects: NSStringPboardType, NSURLPboardType,
- @"public.url", @"public.url-name", nil] owner: nil];
- [pb setString: url forType: NSStringPboardType];
- [pb setString: url forType: @"public.url"];
- [pb setString: title forType: @"public.url-name"];
- [[NSURL URLWithString: url] writeToPasteboard: pb];
-
- NSRect urlBounds = NSZeroRect;
- urlBounds.size = [title sizeWithAttributes: nil];
- urlBounds.size.width += urlBounds.size.height + 2;
-
- NSImage *image = [[NSImage alloc] initWithSize: urlBounds.size];
-
- [image lockFocus];
- [favicon drawInRect: NSMakeRect( urlBounds.origin.x, urlBounds.origin.y, urlBounds.size.height, urlBounds.size.height )
- fromRect: NSZeroRect operation: NSCompositeCopy fraction: 1.0];
- urlBounds.origin.x += urlBounds.size.height + 2;
- [title drawInRect: urlBounds withAttributes: nil];
- [image unlockFocus];
-
- point.x -= urlBounds.size.height / 2;
- point.y += urlBounds.size.height / 2;
-
- [view dragImage: image at: point offset: NSZeroSize event: [NSApp currentEvent]
- pasteboard: pb source: self slideBack: YES];
-
- [image release];
-}
-
-- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal
-{
- return NSDragOperationCopy | NSDragOperationGeneric;
-}
-
-- (BOOL) trackMouse: (NSEvent *)theEvent inRect: (NSRect)cellFrame ofView: (NSView *)controlView untilMouseUp: (BOOL)flag;
-{
- const NSPoint point = [controlView convertPoint: [theEvent locationInWindow] fromView: nil];
- const NSRect buttonRect = [self buttonFrame: cellFrame];
- if (NSPointInRect( point, [self iconFrame: cellFrame] )) {
- [self startDragURLAt: point inView: controlView];
- return NO;
- } else if (NSPointInRect( point, buttonRect )) {
- return [[self refreshCell] trackMouse: theEvent inRect: buttonRect
- ofView: controlView untilMouseUp: flag];
- } else {
- cellFrame.size.width -= BUTTON_SIZE + PADDING;
- return [super trackMouse: theEvent inRect: cellFrame ofView: controlView untilMouseUp: YES];
- }
-}
-
-- (void) dealloc;
-{
- [refreshCell release];
-
- [super dealloc];
-}
-
-- (NSRect) buttonFrame: (NSRect) cellFrame;
-{
- NSRect buttonRect = cellFrame;
- buttonRect.origin.x = NSMaxX( cellFrame ) - BUTTON_SIZE;
- buttonRect.size.width = BUTTON_SIZE;
- return buttonRect;
-}
-
-- (NSRect) urlFrame: (NSRect) cellFrame;
-{
- NSRect textFrame = cellFrame;
- textFrame.origin.x += cellFrame.size.height;
- textFrame.size.width -= cellFrame.size.height + BUTTON_SIZE + PADDING;
- return textFrame;
-}
-
-- (NSRect) iconFrame: (NSRect)cellFrame;
-{
- NSRect iconFrame = {
- .origin = {
- .x = cellFrame.origin.x + PADDING,
- .y = cellFrame.origin.y,
- },
- .size = NSMakeSize( NSHeight( cellFrame ), NSHeight( cellFrame ) )
- };
- return NSInsetRect( iconFrame, 2 * PADDING, 2 * PADDING );
-}
-
-- (NSButtonCell *) refreshCell;
-{
- if (nil == refreshCell) {
- refreshCell = [[NSButtonCell alloc] initImageCell: [NSImage imageNamed: NSImageNameRefreshTemplate]];
- [refreshCell setButtonType: NSMomentaryPushInButton];
- [refreshCell setBordered: NO];
- }
- return refreshCell;
-}
-
-- (void) setRefreshTarget: (id) newTarget;
-{
- [[self refreshCell] setTarget: newTarget];
-}
-
-- (id) refreshTarget;
-{
- return [[self refreshCell] target];
-}
-
-- (void) setRefreshAction: (SEL) newAction;
-{
- [[self refreshCell] setAction: newAction];
-}
-
-- (SEL) refreshAction;
-{
- return [[self refreshCell] action];
-}
-
-@end
diff --git a/frontends/cocoa/apple_image.h b/frontends/cocoa/apple_image.h
deleted file mode 100644
index 11248a6..0000000
--- a/frontends/cocoa/apple_image.h
+++ b/dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _NETSURF_COCOA_APPLE_IMAGE_H_
-#define _NETSURF_COCOA_APPLE_IMAGE_H_
-
-#include "utils/config.h"
-#include "utils/errors.h"
-
-#ifdef WITH_APPLE_IMAGE
-
-/**
- * Initialise apple image handlers instead of generic core ones.
- */
-nserror apple_image_init(void);
-
-#else
-
-#define apple_image_init() NSERROR_OK
-
-#endif /* WITH_APPLE_IMAGE */
-
-#endif
diff --git a/frontends/cocoa/apple_image.m b/frontends/cocoa/apple_image.m
deleted file mode 100644
index 0bbaabd..0000000
--- a/frontends/cocoa/apple_image.m
+++ b/dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef WITH_APPLE_IMAGE
-
-#import "cocoa/apple_image.h"
-
-#include "utils/config.h"
-#include "utils/utils.h"
-#include "netsurf/bitmap.h"
-#include "netsurf/plotters.h"
-#include "netsurf/content.h"
-#include "content/llcache.h"
-#include "content/content_protected.h"
-
-#import "cocoa/schedule.h"
-#import "cocoa/bitmap.h"
-
-typedef struct apple_image_content {
- struct content base;
-
- struct bitmap *bitmap; /**< Created NetSurf bitmap */
-
- NSUInteger frames;
- NSUInteger currentFrame;
- int *frameTimes;
-} apple_image_content;
-
-
-static void *apple_image_get_internal(const struct content *c, void *context)
-{
- apple_image_content *ai_c = (apple_image_content *)c;
-
- return ai_c->bitmap;
-}
-
-static nserror apple_image_create(const content_handler *handler,
- lwc_string *imime_type, const struct http_parameter *params,
- llcache_handle *llcache, const char *fallback_charset,
- bool quirks, struct content **c)
-{
- apple_image_content *ai;
- nserror error;
-
- ai = calloc(1, sizeof(apple_image_content));
- if (ai == NULL)
- return NSERROR_NOMEM;
-
- error = content__init(&ai->base, handler, imime_type, params,
- llcache, fallback_charset, quirks);
- if (error != NSERROR_OK) {
- free(ai);
- return error;
- }
-
- *c = (struct content *) ai;
-
- return NSERROR_OK;
-}
-
-
-static void animate_image_cb( void *ptr )
-{
- struct apple_image_content *ai = ptr;
- ++ai->currentFrame;
- if (ai->currentFrame >= ai->frames) ai->currentFrame = 0;
-
- [(NSBitmapImageRep *)ai->bitmap setProperty: NSImageCurrentFrame withValue: [NSNumber numberWithUnsignedInteger: ai->currentFrame]];
- cocoa_bitmap_modified( ai->bitmap );
-
- union content_msg_data data;
- data.redraw.full_redraw = true;
- data.redraw.x = data.redraw.object_x = 0;
- data.redraw.y = data.redraw.object_y = 0;
- data.redraw.width = data.redraw.object_width = ai->base.width;
- data.redraw.height = data.redraw.object_height = ai->base.height;
- data.redraw.object = &ai->base;
- content_broadcast( &ai->base, CONTENT_MSG_REDRAW, data );
-
- cocoa_schedule(ai->frameTimes[ai->currentFrame], animate_image_cb, ai );
-}
-
-/**
- * Convert a CONTENT_APPLE_IMAGE for display.
- */
-static bool apple_image_convert(struct content *c)
-{
- apple_image_content *ai_c = (apple_image_content *)c;
- unsigned long size;
- const char *bytes = content__get_source_data(c, &size);
-
- NSData *data = [NSData dataWithBytesNoCopy: (char *)bytes length: size freeWhenDone: NO];
- NSBitmapImageRep *image = [[NSBitmapImageRep imageRepWithData: data] retain];
-
- if (image == nil) {
- union content_msg_data msg_data;
- msg_data.error = "cannot decode image";
- content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
- return false;
- }
-
- c->width = [image pixelsWide];
- c->height = [image pixelsHigh];
- ai_c->bitmap = (void *)image;
-
- NSString *url = [NSString stringWithUTF8String: nsurl_access(llcache_handle_get_url( content_get_llcache_handle( c )) )];
- NSString *title = [NSString stringWithFormat: @"%@ (%dx%d)", [url lastPathComponent], c->width, c->height];
- content__set_title(c, [title UTF8String] );
-
- content_set_ready(c);
- content_set_done(c);
- content_set_status(c, "");
-
- struct apple_image_content *ai = (struct apple_image_content *)c;
- NSUInteger frames = [[image valueForProperty: NSImageFrameCount] unsignedIntegerValue];
- if (frames > 1) {
- ai->frames = frames;
- ai->currentFrame = 0;
- ai->frameTimes = calloc( ai->frames , sizeof(int));
- for (NSUInteger i = 0; i < frames; i++) {
- [image setProperty: NSImageCurrentFrame withValue: [NSNumber numberWithUnsignedInteger: i]];
- ai->frameTimes[i] = 1000 * [[image valueForProperty: NSImageCurrentFrameDuration] floatValue];
- }
- [image setProperty: NSImageCurrentFrame withValue: [NSNumber numberWithUnsignedInteger: 0]];
- cocoa_schedule( ai->frameTimes[0], animate_image_cb, ai );
- }
-
- return true;
-}
-
-
-static void apple_image_destroy(struct content *c)
-{
- apple_image_content *ai_c = (apple_image_content *)c;
-
- [(id)ai_c->bitmap release];
- ai_c->bitmap = NULL;
- cocoa_schedule(-1, animate_image_cb, c );
-}
-
-
-static nserror apple_image_clone(const struct content *old, struct content **newc)
-{
- apple_image_content *ai;
- apple_image_content *ai_old = (apple_image_content *)old;
- nserror error;
-
- ai = calloc(1, sizeof(apple_image_content));
- if (ai == NULL)
- return NSERROR_NOMEM;
-
- error = content__clone(old, &ai->base);
- if (error != NSERROR_OK) {
- content_destroy(&ai->base);
- return error;
- }
-
- if (old->status == CONTENT_STATUS_READY ||
- old->status == CONTENT_STATUS_DONE) {
- ai->base.width = old->width;
- ai->base.height = old->height;
- ai->bitmap = (void *)[(id)ai_old->bitmap retain];
- }
-
- *newc = (struct content *) ai;
-
- return NSERROR_OK;
-}
-
-static content_type apple_image_content_type(void)
-{
- return CONTENT_IMAGE;
-}
-
-/**
- * Redraw a CONTENT_APPLE_IMAGE with appropriate tiling.
- */
-static bool apple_image_redraw(struct content *c, struct content_redraw_data *data,
- const struct rect *clip, const struct redraw_context *ctx)
-{
- apple_image_content *ai_c = (apple_image_content *)c;
- bitmap_flags_t flags = BITMAPF_NONE;
-
- if (data->repeat_x)
- flags |= BITMAPF_REPEAT_X;
- if (data->repeat_y)
- flags |= BITMAPF_REPEAT_Y;
-
- return ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- ai_c->bitmap, data->background_colour, flags);
-}
-
-static const content_handler apple_image_content_handler = {
- .create = apple_image_create,
- .data_complete = apple_image_convert,
- .destroy = apple_image_destroy,
- .redraw = apple_image_redraw,
- .clone = apple_image_clone,
- .get_internal = apple_image_get_internal,
- .type = apple_image_content_type,
- .no_share = false
-};
-
-static nserror register_for_type( NSString *mime )
-{
- const char *type = [mime UTF8String];
- /* nsgif has priority since it supports animated GIF */
-#ifdef WITH_GIF
- if (strcmp(type, "image/gif") == 0)
- return NSERROR_OK;
-#endif
-
- nserror error = content_factory_register_handler( type, &apple_image_content_handler );
- if (error != NSERROR_OK) return error;
-
- return NSERROR_OK;
-}
-
-/* exported interface documented in cocoa/apple_image.h */
-nserror apple_image_init(void)
-{
- NSArray *utis = [NSBitmapImageRep imageTypes];
- for (NSString *uti in utis) {
- NSDictionary *declaration = [(NSDictionary *)UTTypeCopyDeclaration( (CFStringRef)uti ) autorelease];
- id mimeTypes = [[declaration objectForKey: (NSString *)kUTTypeTagSpecificationKey] objectForKey: (NSString *)kUTTagClassMIMEType];
-
- if (mimeTypes == nil) continue;
-
- if (![mimeTypes isKindOfClass: [NSArray class]]) {
- mimeTypes = [NSArray arrayWithObject: mimeTypes];
- }
-
- for (NSString *mime in mimeTypes) {
- nserror error = register_for_type( mime );
- if (error != NSERROR_OK) return error;
- }
- }
-
- return NSERROR_OK;
-}
-
-#endif /* WITH_APPLE_IMAGE */
diff --git a/frontends/cocoa/bitmap.h b/frontends/cocoa/bitmap.h
deleted file mode 100644
index 1eeed17..0000000
--- a/frontends/cocoa/bitmap.h
+++ b/dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef COCOA_BITMAP_H
-#define COCOA_BITMAP_H
-
-CGImageRef cocoa_get_cgimage( void *bitmap );
-
-void cocoa_bitmap_modified(void *bitmap);
-
-struct gui_bitmap_table *cocoa_bitmap_table;
-
-#endif
diff --git a/frontends/cocoa/bitmap.m b/frontends/cocoa/bitmap.m
deleted file mode 100644
index fe611f1..0000000
--- a/frontends/cocoa/bitmap.m
+++ b/dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * \file
- * Cocoa implementation of bitmap operations.
- */
-
-#import <Cocoa/Cocoa.h>
-
-#import "netsurf/browser_window.h"
-#import "netsurf/plotters.h"
-#import "netsurf/bitmap.h"
-#import "netsurf/content.h"
-
-#import "cocoa/plotter.h"
-#import "cocoa/bitmap.h"
-
-#define BITS_PER_SAMPLE (8)
-#define SAMPLES_PER_PIXEL (4)
-#define BITS_PER_PIXEL (BITS_PER_SAMPLE * SAMPLES_PER_PIXEL)
-#define BYTES_PER_PIXEL (BITS_PER_PIXEL / 8)
-#define RED_OFFSET (0)
-#define GREEN_OFFSET (1)
-#define BLUE_OFFSET (2)
-#define ALPHA_OFFSET (3)
-
-static CGImageRef cocoa_prepare_bitmap( void *bitmap );
-//static NSMapTable *cocoa_get_bitmap_cache( void );
-
-static inline NSMapTable *cocoa_get_bitmap_cache( void )
-{
- static NSMapTable *cache = nil;
- if (cache == nil) {
- cache = NSCreateMapTable( NSNonOwnedPointerMapKeyCallBacks, NSNonOwnedPointerMapValueCallBacks, 0 );
- }
- return cache;
-}
-
-static int bitmap_get_width(void *bitmap)
-{
- NSCParameterAssert( NULL != bitmap );
- NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
- return [bmp pixelsWide];
-}
-
-static int bitmap_get_height(void *bitmap)
-{
- NSCParameterAssert( NULL != bitmap );
- NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
- return [bmp pixelsHigh];
-}
-
-static bool bitmap_get_opaque(void *bitmap)
-{
- NSCParameterAssert( NULL != bitmap );
- NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
- return [bmp isOpaque];
-}
-
-static void bitmap_destroy(void *bitmap)
-{
- NSCParameterAssert( NULL != bitmap );
-
- NSMapTable *cache = cocoa_get_bitmap_cache();
- CGImageRef image = NSMapGet( cache, bitmap );
- if (NULL != image) {
- CGImageRelease( image );
- NSMapRemove( cache, bitmap );
- }
-
- NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
- [bmp release];
-}
-
-static void *bitmap_create(int width, int height, unsigned int state)
-{
- NSBitmapImageRep *bmp = [[NSBitmapImageRep alloc]
- initWithBitmapDataPlanes: NULL
- pixelsWide: width
- pixelsHigh: height
- bitsPerSample: BITS_PER_SAMPLE
- samplesPerPixel: SAMPLES_PER_PIXEL
- hasAlpha: YES
- isPlanar: NO
- colorSpaceName: NSDeviceRGBColorSpace
- bitmapFormat: NSAlphaNonpremultipliedBitmapFormat
- bytesPerRow: BYTES_PER_PIXEL * width
- bitsPerPixel: BITS_PER_PIXEL];
-
- return bmp;
-}
-
-static void bitmap_set_opaque(void *bitmap, bool opaque)
-{
- NSCParameterAssert( NULL != bitmap );
- NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
- [bmp setOpaque: opaque ? YES : NO];
-}
-
-static unsigned char *bitmap_get_buffer(void *bitmap)
-{
- NSCParameterAssert( NULL != bitmap );
- NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
- return [bmp bitmapData];
-}
-
-static size_t bitmap_get_rowstride(void *bitmap)
-{
- NSCParameterAssert( NULL != bitmap );
- NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
- return [bmp bytesPerRow];
-}
-
-static size_t bitmap_get_bpp(void *bitmap)
-{
- NSCParameterAssert( NULL != bitmap );
- NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
- return [bmp bitsPerPixel] / 8;
-}
-
-static bool bitmap_test_opaque(void *bitmap)
-{
- NSCParameterAssert( bitmap_get_bpp( bitmap ) == BYTES_PER_PIXEL );
-
- unsigned char *buf = bitmap_get_buffer( bitmap );
-
- const size_t height = bitmap_get_height( bitmap );
- const size_t width = bitmap_get_width( bitmap );
-
- const size_t line_step = bitmap_get_rowstride( bitmap ) - BYTES_PER_PIXEL * width;
-
- for (size_t y = 0; y < height; y++) {
- for (size_t x = 0; x < height; x++) {
- if (buf[ALPHA_OFFSET] != 0xFF) return false;
- buf += BYTES_PER_PIXEL;
- }
- buf += line_step;
- }
-
- return true;
-}
-
-static bool bitmap_save(void *bitmap, const char *path, unsigned flags)
-{
- NSCParameterAssert( NULL != bitmap );
- NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
-
- NSData *tiff = [bmp TIFFRepresentation];
- return [tiff writeToFile: [NSString stringWithUTF8String: path] atomically: YES];
-}
-
-void cocoa_bitmap_modified(void *bitmap)
-{
- NSMapTable *cache = cocoa_get_bitmap_cache();
- CGImageRef image = NSMapGet( cache, bitmap );
- if (NULL != image) {
- CGImageRelease( image );
- NSMapRemove( cache, bitmap );
- }
-}
-
-CGImageRef cocoa_get_cgimage( void *bitmap )
-{
- NSMapTable *cache = cocoa_get_bitmap_cache();
-
- CGImageRef result = NSMapGet( cache, bitmap );
- if (NULL == result) {
- result = cocoa_prepare_bitmap( bitmap );
- NSMapInsertKnownAbsent( cache, bitmap, result );
- }
-
- return result;
-}
-
-
-static CGImageRef cocoa_prepare_bitmap( void *bitmap )
-{
- NSCParameterAssert( NULL != bitmap );
-
- NSBitmapImageRep *bmp = (NSBitmapImageRep *)bitmap;
-
- size_t w = [bmp pixelsWide];
- size_t h = [bmp pixelsHigh];
-
- CGImageRef original = [bmp CGImage];
-
- if (h <= 1) return CGImageRetain( original );
-
- void *data = malloc( 4 * w * h );
-
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
- CGContextRef context = CGBitmapContextCreate( data, w, h, BITS_PER_SAMPLE,
- BYTES_PER_PIXEL * w, colorSpace,
- [bmp isOpaque] ? kCGImageAlphaNoneSkipLast
- : kCGImageAlphaPremultipliedLast );
- CGColorSpaceRelease( colorSpace );
-
- CGContextTranslateCTM( context, 0.0, h );
- CGContextScaleCTM( context, 1.0, -1.0 );
-
- CGRect rect = CGRectMake( 0, 0, w, h );
- CGContextClearRect( context, rect );
- CGContextDrawImage( context, rect, original );
-
- CGImageRef result = CGBitmapContextCreateImage( context );
-
- CGContextRelease( context );
- free( data );
-
- return result;
-}
-
-static nserror bitmap_render(struct bitmap *bitmap, struct hlcache_handle *content)
-{
- int bwidth = bitmap_get_width( bitmap );
- int bheight = bitmap_get_height( bitmap );
-
- struct redraw_context ctx = {
- .interactive = false,
- .background_images = true,
- .plot = &cocoa_plotters
- };
-
- CGColorSpaceRef cspace = CGColorSpaceCreateWithName( kCGColorSpaceGenericRGB );
- CGContextRef bitmapContext = CGBitmapContextCreate( bitmap_get_buffer( bitmap ),
- bwidth, bheight,
- bitmap_get_bpp( bitmap ) * 8 / 4,
- bitmap_get_rowstride( bitmap ),
- cspace, kCGImageAlphaNoneSkipLast );
- CGColorSpaceRelease( cspace );
-
- size_t width = MIN( content_get_width( content ), 1024 );
- size_t height = ((width * bheight) + bwidth / 2) / bwidth;
-
- CGContextTranslateCTM( bitmapContext, 0, bheight );
- CGContextScaleCTM( bitmapContext, (CGFloat)bwidth / width, -(CGFloat)bheight / height );
-
- [NSGraphicsContext setCurrentContext: [NSGraphicsContext graphicsContextWithGraphicsPort: bitmapContext flipped: YES]];
-
- content_scaled_redraw( content, width, height, &ctx );
-
- [NSGraphicsContext setCurrentContext: nil];
- CGContextRelease( bitmapContext );
-
- cocoa_bitmap_modified( bitmap );
-
- return true;
-}
-
-static struct gui_bitmap_table bitmap_table = {
- .create = bitmap_create,
- .destroy = bitmap_destroy,
- .set_opaque = bitmap_set_opaque,
- .get_opaque = bitmap_get_opaque,
- .test_opaque = bitmap_test_opaque,
- .get_buffer = bitmap_get_buffer,
- .get_rowstride = bitmap_get_rowstride,
- .get_width = bitmap_get_width,
- .get_height = bitmap_get_height,
- .get_bpp = bitmap_get_bpp,
- .save = bitmap_save,
- .modified = cocoa_bitmap_modified,
- .render = bitmap_render,
-};
-
-struct gui_bitmap_table *cocoa_bitmap_table = &bitmap_table;
diff --git a/frontends/cocoa/compile-xib.sh b/frontends/cocoa/compile-xib.sh
deleted file mode 100755
index 576f9bf..0000000
--- a/frontends/cocoa/compile-xib.sh
+++ b/dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-# call: compile-xib.sh [xib file] [language] [(optional output nib file)]
-DIR=`dirname "$1"`
-XIB=`basename -s .xib "$1"`
-
-STRINGS_FILE="$DIR/$2.lproj/$XIB.xib.strings"
-TRANSLATE=""
-if [ -f $STRINGS_FILE ]
-then
- TRANSLATE="--strings-file $STRINGS_FILE"
-fi
-
-OUTPUT="$2.$XIB.nib"
-
-if [ "x$3" != "x" ]
-then
- OUTPUT="$3"
-fi
-
-exec /usr/bin/ibtool $TRANSLATE --compile $OUTPUT $1
diff --git a/frontends/cocoa/coordinates.h b/frontends/cocoa/coordinates.h
deleted file mode 100644
index a961438..0000000
--- a/frontends/cocoa/coordinates.h
+++ b/dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef COCOA_COORDINATES_H
-#define COCOA_COORDINATES_H
-
-extern CGFloat cocoa_scale_factor;
-
-static inline CGFloat cocoa_px_to_pt( int location ) __attribute__((always_inline,pure));
-static inline CGFloat cocoa_px_to_pt_f( CGFloat location ) __attribute__((always_inline,pure));
-
-static inline int cocoa_pt_to_px( CGFloat location ) __attribute__((always_inline,pure));
-
-static inline NSPoint cocoa_point( int x, int y ) __attribute__((always_inline,pure));
-static inline NSPoint cocoa_scaled_point( CGFloat scale, int x, int y ) __attribute__((always_inline,pure));
-
-static inline NSSize cocoa_size( int w, int h ) __attribute__((always_inline,pure));
-static inline NSSize cocoa_scaled_size( CGFloat scale, int w, int h ) __attribute__((always_inline,pure));
-
-static inline NSRect cocoa_rect( int x0, int y0, int x1, int y1 ) __attribute__((always_inline,pure));
-static inline NSRect cocoa_rect_wh( int x, int y, int w, int h ) __attribute__((always_inline,pure));
-
-static inline NSRect cocoa_scaled_rect( CGFloat scale, int x0, int y0, int x1, int y1 ) __attribute__((always_inline,pure));
-static inline NSRect cocoa_scaled_rect_wh( CGFloat scale, int x, int y, int w, int h ) __attribute__((always_inline,pure));
-
-static inline CGFloat cocoa_px_to_pt( int location )
-{
- return (CGFloat)location * cocoa_scale_factor;
-}
-
-static inline CGFloat cocoa_px_to_pt_f( CGFloat location )
-{
- return floor( location ) * cocoa_scale_factor;
-}
-
-static inline int cocoa_pt_to_px( CGFloat location )
-{
- return location / cocoa_scale_factor;
-}
-
-static inline NSPoint cocoa_point( int x, int y )
-{
- return NSMakePoint( cocoa_px_to_pt( x ), cocoa_px_to_pt( y ) );
-}
-
-static inline NSPoint cocoa_scaled_point( CGFloat scale, int x, int y )
-{
- return NSMakePoint( cocoa_px_to_pt_f( scale * x ), cocoa_px_to_pt_f( scale * y ) );
-}
-
-static inline NSSize cocoa_size( int w, int h )
-{
- return NSMakeSize( cocoa_px_to_pt( w ), cocoa_px_to_pt( h ) );
-}
-
-static inline NSSize cocoa_scaled_size( CGFloat scale, int w, int h )
-{
- return NSMakeSize( cocoa_px_to_pt_f( scale * w ), cocoa_px_to_pt_f( scale * h ) );
-}
-
-static inline NSRect cocoa_rect( int x0, int y0, int x1, int y1 )
-{
- return cocoa_rect_wh( x0, y0, x1 - x0, y1 - y0 );
-}
-
-static inline NSRect cocoa_rect_wh( int x, int y, int w, int h )
-{
- const NSRect result = {
- .origin = cocoa_point( x, y ),
- .size = cocoa_size( w, h )
- };
- return result;
-}
-
-static inline NSRect cocoa_scaled_rect_wh( CGFloat scale, int x, int y, int w, int h )
-{
- const NSRect result = {
- .origin = cocoa_scaled_point( scale, x, y ),
- .size = cocoa_scaled_size( scale, w, h )
- };
- return result;
-}
-
-static inline NSRect cocoa_scaled_rect( CGFloat scale, int x0, int y0, int x1, int y1 )
-{
- return cocoa_scaled_rect_wh( scale, x0, y0, x1 - x0, y1 - y0 );
-}
-
-
-#endif
diff --git a/frontends/cocoa/desktop-tree.h b/frontends/cocoa/desktop-tree.h
deleted file mode 100644
index f8864e1..0000000
--- a/frontends/cocoa/desktop-tree.h
+++ b/dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2004 Richard Wilson <not_ginger_matt@users.sourceforge.net>
- * Copyright 2009 Paul Blokus <paul_pl@users.sourceforge.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** \file
- * deprecated compatibility layer for new treeview modules. Do not use.
- */
-
-#ifndef _NETSURF_DESKTOP_TREE_H_
-#define _NETSURF_DESKTOP_TREE_H_
-
-#include <stdbool.h>
-#include <stdint.h>
-
-#include "netsurf/mouse.h"
-
-struct sslcert_session_data;
-struct tree;
-struct redraw_context;
-
-/**
- * Current ssl session data for treeview
- *
- * @todo FIXME global certificate treeview state must go away, this is
- * just wrong.
- */
-extern struct sslcert_session_data *ssl_current_session;
-extern const char *tree_hotlist_path;
-
-/* Tree flags */
-enum tree_flags {
- TREE_HISTORY,
- TREE_COOKIES,
- TREE_SSLCERT,
- TREE_HOTLIST
-};
-
-typedef enum {
- TREE_NO_DRAG = 0,
- TREE_SELECT_DRAG,
- TREE_MOVE_DRAG,
- TREE_TEXTAREA_DRAG, /** < A drag that is passed to a textarea */
- TREE_UNKNOWN_DRAG /** < A drag the tree itself won't handle */
-} tree_drag_type;
-
-/** callbacks to perform necessary operations on treeview. */
-struct treeview_table {
- void (*redraw_request)(int x, int y, int width, int height,
- void *data); /**< request a redraw. */
- void (*resized)(struct tree *tree, int width, int height,
- void *data); /**< resize treeview area. */
- void (*scroll_visible)(int y, int height, void *data); /**< scroll visible treeview area. */
- void (*get_window_dimensions)(int *width, int *height, void *data); /**< get dimensions of window */
-};
-
-struct tree *tree_create(unsigned int flags,
- const struct treeview_table *callbacks,
- void *client_data);
-
-/** deprecated compatibility layer for new treeview modules. Do not use. */
-void tree_delete(struct tree *tree);
-tree_drag_type tree_drag_status(struct tree *tree);
-void tree_draw(struct tree *tree, int x, int y,
- int clip_x, int clip_y, int clip_width, int clip_height,
- const struct redraw_context *ctx);
-bool tree_mouse_action(struct tree *tree, browser_mouse_state mouse,
- int x, int y);
-void tree_drag_end(struct tree *tree, browser_mouse_state mouse, int x0, int y0,
- int x1, int y1);
-bool tree_keypress(struct tree *tree, uint32_t key);
-
-
-#endif
diff --git a/frontends/cocoa/desktop-tree.m b/frontends/cocoa/desktop-tree.m
deleted file mode 100644
index a010c6f..0000000
--- a/frontends/cocoa/desktop-tree.m
+++ b/dev/null
@@ -1,353 +0,0 @@
-/*
- * Copyright 2004 Richard Wilson <not_ginger_matt@users.sourceforge.net>
- * Copyright 2009 Paul Blokus <paul_pl@users.sourceforge.net>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** \file
- * deprecated compatibility layer for new treeview modules. Do not use.
- */
-
-#include <assert.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "utils/log.h"
-#include "utils/messages.h"
-#include "utils/utils.h"
-#include "utils/nsoption.h"
-#include "netsurf/browser_window.h"
-#include "netsurf/core_window.h"
-#include "content/content.h"
-#include "content/hlcache.h"
-
-#import "cocoa/desktop-tree.h"
-
-struct tree {
- unsigned int flags; /* Tree flags */
- tree_drag_type drag;
- const struct treeview_table *callbacks;
- void *client_data; /* User assigned data for the callbacks */
-};
-
-#include "netsurf/misc.h"
-#include "desktop/gui_internal.h"
-#include "desktop/treeview.h"
-#include "desktop/hotlist.h"
-#include "desktop/cookie_manager.h"
-#include "desktop/global_history.h"
-#include "desktop/sslcert_viewer.h"
-
-struct sslcert_session_data *ssl_current_session = NULL;
-const char *tree_hotlist_path = NULL;
-
-static void treeview_test_redraw_request(struct core_window *cw,
- const struct rect *r)
-{
- struct tree *tree = (struct tree *)cw;
-
- tree->callbacks->redraw_request(r->x0, r->y0,
- r->x1 - r->x0, r->y1 - r->y0,
- tree->client_data);
-}
-
-static void treeview_test_update_size(struct core_window *cw,
- int width, int height)
-{
- struct tree *tree = (struct tree *)cw;
-
- tree->callbacks->resized(tree, width, height, tree->client_data);
-}
-
-static void treeview_test_scroll_visible(struct core_window *cw,
- const struct rect *r)
-{
-}
-
-static void treeview_test_get_window_dimensions(struct core_window *cw,
- int *width, int *height)
-{
- struct tree *tree = (struct tree *)cw;
-
- tree->callbacks->get_window_dimensions(width, height,
- tree->client_data);
-}
-
-static void treeview_test_drag_status(struct core_window *cw,
- core_window_drag_status ds)
-{
- struct tree *tree = (struct tree *)cw;
-
- switch (ds) {
- case CORE_WINDOW_DRAG_NONE:
- tree->drag = TREE_NO_DRAG;
- break;
-
- case CORE_WINDOW_DRAG_SELECTION:
- tree->drag = TREE_SELECT_DRAG;
- break;
-
- case CORE_WINDOW_DRAG_MOVE:
- tree->drag = TREE_MOVE_DRAG;
- break;
-
- case CORE_WINDOW_DRAG_TEXT_SELECTION:
- tree->drag = TREE_TEXTAREA_DRAG;
- break;
-
- default:
- break;
- }
-}
-
-struct core_window_callback_table cw_t = {
- .redraw_request = treeview_test_redraw_request,
- .update_size = treeview_test_update_size,
- .scroll_visible = treeview_test_scroll_visible,
- .get_window_dimensions = treeview_test_get_window_dimensions,
- .drag_status = treeview_test_drag_status
-};
-
-static bool treeview_test_init(struct tree *tree)
-{
- nserror err;
-
- switch (tree->flags) {
- case TREE_COOKIES:
- err = cookie_manager_init(&cw_t, (struct core_window *)tree);
- if (err != NSERROR_OK)
- guit->misc->warning("Couldn't init new cookie manager.", 0);
- break;
- case TREE_HISTORY:
- err = global_history_init(&cw_t, (struct core_window *)tree);
- if (err != NSERROR_OK)
- guit->misc->warning("Couldn't init new global history.", 0);
- break;
- case TREE_HOTLIST:
- err = hotlist_init(tree_hotlist_path, tree_hotlist_path);
- if (err != NSERROR_OK)
- guit->misc->warning("Couldn't init new hotlist.", 0);
- err = hotlist_manager_init(&cw_t, (struct core_window *)tree);
- if (err != NSERROR_OK)
- guit->misc->warning("Couldn't init hotlist manager.", 0);
- break;
- case TREE_SSLCERT:
- assert(ssl_current_session == NULL &&
- "Call sslcert_viewer_init directly, "
- "this compat. layer can't cope with simultanious "
- "sslcert viewers");
- err = sslcert_viewer_init(&cw_t, (struct core_window *)tree,
- ssl_current_session);
- if (err != NSERROR_OK)
- guit->misc->warning("Couldn't init new sslcert viewer.", 0);
- break;
- }
-
- return true;
-}
-
-static bool treeview_test_fini(struct tree *tree)
-{
- nserror err;
-
- switch (tree->flags) {
- case TREE_COOKIES:
- err = cookie_manager_fini();
- if (err != NSERROR_OK)
- guit->misc->warning("Couldn't finalise cookie manager.", 0);
- break;
- case TREE_HISTORY:
- err = global_history_fini();
- if (err != NSERROR_OK)
- guit->misc->warning("Couldn't finalise cookie manager.", 0);
- break;
- case TREE_HOTLIST:
- err = hotlist_fini();
- if (err != NSERROR_OK)
- guit->misc->warning("Couldn't finalise hotlist.", 0);
- break;
- case TREE_SSLCERT:
- assert(ssl_current_session != NULL &&
- "Can't use sslcert window after sslcert_viewer_fini()");
- err = sslcert_viewer_fini(ssl_current_session);
- ssl_current_session = NULL;
- if (err != NSERROR_OK)
- guit->misc->warning("Couldn't finalise sslcert viewer.", 0);
- break;
- }
-
- return true;
-}
-
-static bool treeview_test_redraw(struct tree *tree, int x, int y,
- int clip_x, int clip_y, int clip_width, int clip_height,
- const struct redraw_context *ctx)
-{
- struct rect clip;
-
- clip.x0 = clip_x;
- clip.y0 = clip_y;
- clip.x1 = clip_x + clip_width;
- clip.y1 = clip_y + clip_height;
-
- switch (tree->flags) {
- case TREE_SSLCERT:
- if (ssl_current_session != NULL) {
- sslcert_viewer_redraw(ssl_current_session, x, y, &clip, ctx);
- }
- return true;
- case TREE_COOKIES:
- cookie_manager_redraw(x, y, &clip, ctx);
- return true;
- case TREE_HISTORY:
- global_history_redraw(x, y, &clip, ctx);
- return true;
- case TREE_HOTLIST:
- hotlist_redraw(x, y, &clip, ctx);
- return true;
- }
-
- return false;
-}
-
-static bool treeview_test_mouse_action(struct tree *tree,
- browser_mouse_state mouse, int x, int y)
-{
- switch (tree->flags) {
- case TREE_SSLCERT:
- assert(ssl_current_session != NULL &&
- "Can't use sslcert window after sslcert_viewer_fini()");
- sslcert_viewer_mouse_action(ssl_current_session, mouse, x, y);
- return true;
- case TREE_COOKIES:
- cookie_manager_mouse_action(mouse, x, y);
- return true;
- case TREE_HISTORY:
- global_history_mouse_action(mouse, x, y);
- return true;
- case TREE_HOTLIST:
- hotlist_mouse_action(mouse, x, y);
- return true;
- }
-
- return false;
-}
-
-static bool treeview_test_keypress(struct tree *tree, uint32_t key)
-{
- switch (tree->flags) {
- case TREE_SSLCERT:
- assert(ssl_current_session != NULL &&
- "Can't use sslcert window after sslcert_viewer_fini()");
- sslcert_viewer_keypress(ssl_current_session, key);
- return true;
- case TREE_COOKIES:
- cookie_manager_keypress(key);
- return true;
- case TREE_HISTORY:
- global_history_keypress(key);
- return true;
- case TREE_HOTLIST:
- hotlist_keypress(key);
- return true;
- }
-
- return false;
-}
-
-/* -------------------------------------------------------------------------- */
-
-/** deprecated compatibility layer for new treeview modules. Do not use. */
-struct tree *tree_create(unsigned int flags,
- const struct treeview_table *callbacks, void *client_data)
-{
- struct tree *tree;
-
- tree = calloc(sizeof(struct tree), 1);
- if (tree == NULL) {
- LOG("calloc failed");
- guit->misc->warning(messages_get_errorcode(NSERROR_NOMEM), 0);
- return NULL;
- }
-
- tree->flags = flags;
- tree->drag = TREE_NO_DRAG;
- tree->callbacks = callbacks;
- tree->client_data = client_data;
-
- treeview_test_init(tree);
-
- return tree;
-}
-
-/** deprecated compatibility layer for new treeview modules. Do not use. */
-void tree_delete(struct tree *tree)
-{
- treeview_test_fini(tree);
- free(tree);
-}
-
-/** deprecated compatibility layer for new treeview modules. Do not use. */
-void tree_draw(struct tree *tree, int x, int y,
- int clip_x, int clip_y, int clip_width, int clip_height,
- const struct redraw_context *ctx)
-{
- assert(tree != NULL);
-
- treeview_test_redraw(tree, x, y, clip_x, clip_y,
- clip_width, clip_height, ctx);
-}
-
-/** deprecated compatibility layer for new treeview modules. Do not use. */
-bool tree_mouse_action(struct tree *tree, browser_mouse_state mouse, int x,
- int y)
-{
- assert(tree != NULL);
-
- if (treeview_test_mouse_action(tree, mouse, x, y)) {
- return true;
- }
-
- return false;
-}
-
-/** deprecated compatibility layer for new treeview modules. Do not use. */
-void tree_drag_end(struct tree *tree, browser_mouse_state mouse, int x0, int y0,
- int x1, int y1)
-{
- assert(tree != NULL);
-
- treeview_test_mouse_action(tree, BROWSER_MOUSE_HOVER, x1, y1);
-}
-
-/** deprecated compatibility layer for new treeview modules. Do not use. */
-bool tree_keypress(struct tree *tree, uint32_t key)
-{
- if (treeview_test_keypress(tree, key)) {
- return true;
- }
-
- return false;
-}
-
-/** deprecated compatibility layer for new treeview modules. Do not use. */
-tree_drag_type tree_drag_status(struct tree *tree)
-{
- assert(tree != NULL);
- return tree->drag;
-}
diff --git a/frontends/cocoa/extract-strings.sh b/frontends/cocoa/extract-strings.sh
deleted file mode 100755
index c3f5826..0000000
--- a/frontends/cocoa/extract-strings.sh
+++ b/dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-for i in $1/*.xib
-do
- xib=`basename "$i"`
- strings="$2/$xib.strings"
-
- ibtool "$i" --generate-strings-file "$strings"
-done
-
-
diff --git a/frontends/cocoa/fetch.h b/frontends/cocoa/fetch.h
deleted file mode 100644
index 1b0991e..0000000
--- a/frontends/cocoa/fetch.h
+++ b/dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-extern struct gui_fetch_table *cocoa_fetch_table;
diff --git a/frontends/cocoa/fetch.m b/frontends/cocoa/fetch.m
deleted file mode 100644
index 0bbce09..0000000
--- a/frontends/cocoa/fetch.m
+++ b/dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-#import "utils/log.h"
-#import "utils/nsurl.h"
-#import "netsurf/fetch.h"
-
-#import "cocoa/fetch.h"
-
-static char cocoafiletype[200];
-
-static const struct mimemap_s {
- const char const *extension;
- const char const *mimetype;
-} cocoamimemap[] = {
- { "css", "text/css" },
- { "f79", "text/css" },
- { "jpg", "image/jpeg" },
- { "jpeg", "image/jpeg" },
- { "gif", "image/gif" },
- { "png", "image/png" },
- { "b60", "image/png" },
- { "jng", "image/jng" },
- { "svg", "image/svg" },
- { NULL, "text/html" }
-};
-
-
-static const char *fetch_filetype(const char *unix_path)
-{
- NSString *uti;
- NSString *mimeType = nil;
- NSError *utiError = nil;
-
- uti = [[NSWorkspace sharedWorkspace] typeOfFile: [NSString stringWithUTF8String: unix_path] error:&utiError];
- if (nil != uti) {
- LOG("Looking for mimetype from uti \"%s\"", [uti UTF8String] );
- mimeType = (NSString *)UTTypeCopyPreferredTagWithClass( (CFStringRef)uti, kUTTagClassMIMEType );
- } else {
- NSAlert *utiAlert = [NSAlert alertWithError:utiError];
- [utiAlert runModal]; // Ignore return value.
-
- LOG("uti call failed");
-
- strncpy(cocoafiletype, "text/html", sizeof(cocoafiletype));
- return cocoafiletype;
- }
-
- if (nil != mimeType) {
- strncpy(cocoafiletype, [mimeType UTF8String], sizeof(cocoafiletype));
- [mimeType release];
- } else {
- const char *extension;
-
- LOG("mimetype from uti failed");
-
- extension = [(NSString *)UTTypeCopyPreferredTagWithClass( (CFStringRef)uti, kUTTagClassFilenameExtension) UTF8String];
-
- if (extension == NULL) {
- /* give up and go with default */
- LOG("No extension going with default type");
- strncpy(cocoafiletype, "text/html", sizeof(cocoafiletype)); } else {
- int eidx = 0; /* index of extension entry */
-
- while ((cocoamimemap[eidx].extension != NULL) &&
- (strcmp(cocoamimemap[eidx].extension, extension) != 0)) {
- eidx++;
- }
-
- strncpy(cocoafiletype,
- cocoamimemap[eidx].mimetype,
- sizeof(cocoafiletype));
- }
- }
-
- LOG("\tMIME type for '%s' is '%s'", unix_path, cocoafiletype);
-
- return cocoafiletype;
-}
-
-static nsurl *gui_get_resource_url(const char *path)
-{
- nsurl *url = NULL;
- NSString *nspath = [[NSBundle mainBundle] pathForResource: [NSString stringWithUTF8String: path] ofType: @""];
- if (nspath == nil) return NULL;
- nsurl_create([[[NSURL fileURLWithPath: nspath] absoluteString] UTF8String], &url);
- return url;
-}
-
-static struct gui_fetch_table fetch_table = {
- .filetype = fetch_filetype,
-
- .get_resource_url = gui_get_resource_url,
-};
-
-struct gui_fetch_table *cocoa_fetch_table = &fetch_table;
diff --git a/frontends/cocoa/font.h b/frontends/cocoa/font.h
deleted file mode 100644
index ed04797..0000000
--- a/frontends/cocoa/font.h
+++ b/dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef COCOA_FONT_H
-#define COCOA_FONT_H
-
-#import "netsurf/plot_style.h"
-
-void cocoa_draw_string( CGFloat x, CGFloat y, const char *bytes, size_t length, const struct plot_font_style *style );
-
-struct gui_layout_table *cocoa_layout_table;
-
-#endif
diff --git a/frontends/cocoa/font.m b/frontends/cocoa/font.m
deleted file mode 100644
index 17212ff..0000000
--- a/frontends/cocoa/font.m
+++ b/dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-#import "utils/nsoption.h"
-#import "netsurf/layout.h"
-#import "netsurf/plotters.h"
-
-#import "cocoa/coordinates.h"
-#import "cocoa/plotter.h"
-#import "cocoa/font.h"
-
-static NSLayoutManager *cocoa_prepare_layout_manager( const char *string, size_t length,
- const plot_font_style_t *style );
-
-static CGFloat cocoa_layout_width( NSLayoutManager *layout );
-static CGFloat cocoa_layout_width_chars( NSLayoutManager *layout, size_t characters );
-static NSUInteger cocoa_glyph_for_location( NSLayoutManager *layout, CGFloat x );
-static size_t cocoa_bytes_for_characters( const char *string, size_t characters );
-static NSDictionary *cocoa_font_attributes( const plot_font_style_t *style );
-
-static NSTextStorage *cocoa_text_storage = nil;
-static NSTextContainer *cocoa_text_container = nil;
-
-static nserror cocoa_font_width(const plot_font_style_t *style,
- const char *string, size_t length,
- int *width)
-{
- NSLayoutManager *layout;
- layout = cocoa_prepare_layout_manager( string, length, style );
- *width = cocoa_layout_width( layout );
- return NSERROR_OK;
-}
-
-static nserror cocoa_font_position(const plot_font_style_t *style,
- const char *string, size_t length,
- int x, size_t *char_offset, int *actual_x)
-{
- NSLayoutManager *layout = cocoa_prepare_layout_manager( string, length, style );
- if (layout == nil) {
- return NSERROR_BAD_PARAMETER;
- }
-
- NSUInteger glyphIndex = cocoa_glyph_for_location( layout, x );
- NSUInteger chars = [layout characterIndexForGlyphAtIndex: glyphIndex];
-
- if (chars >= [cocoa_text_storage length]) *char_offset = length;
- else *char_offset = cocoa_bytes_for_characters( string, chars );
-
- *actual_x = cocoa_pt_to_px( NSMaxX( [layout boundingRectForGlyphRange: NSMakeRange( glyphIndex - 1, 1 )
- inTextContainer: cocoa_text_container] ) );
-
- return NSERROR_OK;
-}
-
-static nserror cocoa_font_split(const plot_font_style_t *style,
- const char *string, size_t length,
- int x, size_t *char_offset, int *actual_x)
-{
- NSLayoutManager *layout = cocoa_prepare_layout_manager( string, length, style );
- if (layout == nil) return NSERROR_BAD_PARAMETER;
-
- NSUInteger glyphIndex = cocoa_glyph_for_location( layout, x );
- NSUInteger chars = [layout characterIndexForGlyphAtIndex: glyphIndex];
-
- if (chars >= [cocoa_text_storage length]) {
- *char_offset = length;
- *actual_x = cocoa_layout_width( layout );
- return NSERROR_OK;
- }
-
-
- chars = [[cocoa_text_storage string] rangeOfString: @" " options: NSBackwardsSearch range: NSMakeRange( 0, chars + 1 )].location;
- if (chars == NSNotFound) {
- *char_offset = 0;
- *actual_x = 0;
- return NSERROR_OK;
- }
-
- *char_offset = cocoa_bytes_for_characters( string, chars );
- *actual_x = cocoa_layout_width_chars( layout, chars );
-
- return NSERROR_OK;
-}
-
-
-static struct gui_layout_table layout_table = {
- .width = cocoa_font_width,
- .position = cocoa_font_position,
- .split = cocoa_font_split,
-};
-
-struct gui_layout_table *cocoa_layout_table = &layout_table;
-
-
-#pragma mark -
-
-void cocoa_draw_string( CGFloat x, CGFloat y, const char *bytes, size_t length, const plot_font_style_t *style )
-{
- NSLayoutManager *layout = cocoa_prepare_layout_manager( bytes, length, style );
- if (layout == nil) return;
-
- NSFont *font = [cocoa_text_storage attribute: NSFontAttributeName atIndex: 0 effectiveRange: NULL];
- CGFloat baseline = [layout defaultLineHeightForFont: font] * 3.0 / 4.0;
-
- NSRange glyphRange = [layout glyphRangeForTextContainer: cocoa_text_container];
- [layout drawGlyphsForGlyphRange: glyphRange atPoint: NSMakePoint( x, y - baseline )];
-}
-
-
-#pragma mark -
-
-static inline CGFloat cocoa_layout_width( NSLayoutManager *layout )
-{
- if (layout == nil) return 0.0;
-
- return cocoa_pt_to_px( NSWidth( [layout usedRectForTextContainer: cocoa_text_container] ) );
-}
-
-static inline CGFloat cocoa_layout_width_chars( NSLayoutManager *layout, size_t characters )
-{
- NSUInteger glyphIndex = [layout glyphIndexForCharacterAtIndex: characters];
- return cocoa_pt_to_px( [layout locationForGlyphAtIndex: glyphIndex].x );
-}
-
-static inline NSUInteger cocoa_glyph_for_location( NSLayoutManager *layout, CGFloat x )
-{
- CGFloat fraction = 0.0;
- NSUInteger glyphIndex = [layout glyphIndexForPoint: NSMakePoint( cocoa_px_to_pt( x ), 0 )
- inTextContainer: cocoa_text_container
- fractionOfDistanceThroughGlyph: &fraction];
- if (fraction >= 1.0) ++glyphIndex;
- return glyphIndex;
-}
-
-static inline size_t cocoa_bytes_for_characters( const char *string, size_t chars )
-{
- size_t offset = 0;
- while (chars-- > 0) {
- uint8_t ch = ((uint8_t *)string)[offset];
-
- if (0xC2 <= ch && ch <= 0xDF) offset += 2;
- else if (0xE0 <= ch && ch <= 0xEF) offset += 3;
- else if (0xF0 <= ch && ch <= 0xF4) offset += 4;
- else offset++;
- }
- return offset;
-}
-
-static NSLayoutManager *cocoa_prepare_layout_manager( const char *bytes, size_t length,
- const plot_font_style_t *style )
-{
- if (NULL == bytes || 0 == length) return nil;
-
- NSString *string = [[[NSString alloc] initWithBytes: bytes length:length encoding:NSUTF8StringEncoding] autorelease];
- if (string == nil) return nil;
-
- static NSLayoutManager *layout = nil;
- if (nil == layout) {
- cocoa_text_container = [[NSTextContainer alloc] initWithContainerSize: NSMakeSize( CGFLOAT_MAX, CGFLOAT_MAX )];
- [cocoa_text_container setLineFragmentPadding: 0];
-
- layout = [[NSLayoutManager alloc] init];
- [layout addTextContainer: cocoa_text_container];
- }
-
- static NSString *oldString = 0;
- static plot_font_style_t oldStyle = { 0, 0, 0, 0, 0, 0 };
-
- const bool styleChanged = memcmp( style, &oldStyle, sizeof oldStyle ) != 0;
-
- if ([oldString isEqualToString: string] && !styleChanged) {
- return layout;
- }
-
- [oldString release];
- oldString = [string copy];
- oldStyle = *style;
-
- static NSDictionary *attributes = nil;
- if (styleChanged || attributes == nil) {
- [attributes release];
- attributes = [cocoa_font_attributes( style ) retain];
- }
-
- [cocoa_text_storage release];
- cocoa_text_storage = [[NSTextStorage alloc] initWithString: string attributes: attributes];
- [cocoa_text_storage addLayoutManager: layout];
-
- [layout ensureLayoutForTextContainer: cocoa_text_container];
-
- return layout;
-}
-
-static NSString * const cocoa_font_families[PLOT_FONT_FAMILY_COUNT] = {
- [PLOT_FONT_FAMILY_SERIF] = @"Times",
- [PLOT_FONT_FAMILY_SANS_SERIF] = @"Helvetica",
- [PLOT_FONT_FAMILY_MONOSPACE] = @"Courier",
- [PLOT_FONT_FAMILY_CURSIVE] = @"Apple Chancery",
- [PLOT_FONT_FAMILY_FANTASY] = @"Marker Felt"
-};
-
-static inline NSFont *cocoa_font_get_nsfont( const plot_font_style_t *style )
-{
- NSFont *font = [NSFont fontWithName: cocoa_font_families[style->family]
- size: (CGFloat)style->size / FONT_SIZE_SCALE];
-
- NSFontTraitMask traits = 0;
- if (style->flags & FONTF_ITALIC || style->flags & FONTF_OBLIQUE) traits |= NSItalicFontMask;
- if (style->flags & FONTF_SMALLCAPS) traits |= NSSmallCapsFontMask;
- if (style->weight > 400) traits |= NSBoldFontMask;
-
- if (0 != traits) {
- NSFontManager *fm = [NSFontManager sharedFontManager];
- font = [fm convertFont: font toHaveTrait: traits];
- }
-
- return font;
-}
-
-static inline NSDictionary *cocoa_font_attributes( const plot_font_style_t *style )
-{
- return [NSDictionary dictionaryWithObjectsAndKeys:
- cocoa_font_get_nsfont( style ), NSFontAttributeName,
- cocoa_convert_colour( style->foreground ), NSForegroundColorAttributeName,
- nil];
-}
diff --git a/frontends/cocoa/gui.h b/frontends/cocoa/gui.h
deleted file mode 100644
index b34e9b7..0000000
--- a/frontends/cocoa/gui.h
+++ b/dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-extern struct gui_window_table *cocoa_window_table;
-extern struct gui_clipboard_table *cocoa_clipboard_table;
-extern struct gui_misc_table *cocoa_misc_table;
-
-extern NSString * const kCookiesFileOption;
-extern NSString * const kURLsFileOption;
-extern NSString * const kHotlistFileOption;
-extern NSString * const kHomepageURLOption;
-extern NSString * const kOptionsFileOption;
-extern NSString * const kAlwaysCancelDownload;
-extern NSString * const kAlwaysCloseMultipleTabs;
-
-void cocoa_autorelease( void );
-
-nserror cocoa_warning(const char *warning, const char *detail);
diff --git a/frontends/cocoa/gui.m b/frontends/cocoa/gui.m
deleted file mode 100644
index 1bf191f..0000000
--- a/frontends/cocoa/gui.m
+++ b/dev/null
@@ -1,335 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#import <Cocoa/Cocoa.h>
-
-#import "utils/nsoption.h"
-#import "utils/utils.h"
-#import "utils/log.h"
-#import "utils/nsurl.h"
-#import "netsurf/mouse.h"
-#import "netsurf/window.h"
-#import "netsurf/misc.h"
-#import "netsurf/browser_window.h"
-#import "netsurf/content.h"
-
-#import "cocoa/gui.h"
-#import "cocoa/coordinates.h"
-#import "cocoa/plotter.h"
-#import "cocoa/BrowserView.h"
-#import "cocoa/BrowserViewController.h"
-#import "cocoa/BrowserWindowController.h"
-#import "cocoa/FormSelectMenu.h"
-#import "cocoa/fetch.h"
-#import "cocoa/schedule.h"
-
-
-NSString * const kCookiesFileOption = @"CookiesFile";
-NSString * const kURLsFileOption = @"URLsFile";
-NSString * const kHotlistFileOption = @"Hotlist";
-NSString * const kHomepageURLOption = @"HomepageURL";
-NSString * const kOptionsFileOption = @"ClassicOptionsFile";
-NSString * const kAlwaysCancelDownload = @"AlwaysCancelDownload";
-NSString * const kAlwaysCloseMultipleTabs = @"AlwaysCloseMultipleTabs";
-
-#define UNIMPL() NSLog( @"Function '%s' unimplemented", __func__ )
-
-struct browser_window;
-
-/* exported function docuemnted in cocoa/gui.h */
-nserror cocoa_warning(const char *warning, const char *detail)
-{
- NSRunAlertPanel( NSLocalizedString( @"Warning",
- @"Warning title" ),
- NSLocalizedString( @"Warning %s%s%s",
- @"Warning message" ),
- NSLocalizedString( @"OK", @"" ), nil, nil,
- warning, detail != NULL ? ": " : "",
- detail != NULL ? detail : "" );
- return NSERROR_OK;
-}
-
-
-static struct gui_window *
-gui_window_create(struct browser_window *bw,
- struct gui_window *existing,
- gui_window_create_flags flags)
-{
- BrowserWindowController *window = nil;
- BrowserViewController *result;
-
- browser_window_set_scale(bw, (float)nsoption_int(scale) / 100, false);
- if (existing != NULL) {
- window = [(BrowserViewController *)(existing) windowController];
- }
-
- result = [[BrowserViewController alloc] initWithBrowser: bw];
-
- if (!(flags & GW_CREATE_TAB) || nil == window) {
- window = [[[BrowserWindowController alloc] init] autorelease];
- [[window window] makeKeyAndOrderFront: nil];
- }
- [window addTab: result];
-
- return (struct gui_window *)result;
-}
-
-static void gui_window_destroy(struct gui_window *g)
-{
- BrowserViewController *vc = (BrowserViewController *)g;
- [vc release];
-}
-
-static void gui_window_set_title(struct gui_window *g, const char *title)
-{
- [(BrowserViewController *)g setTitle: [NSString stringWithUTF8String: title]];
-}
-
-static void gui_window_redraw_window(struct gui_window *g)
-{
- [[(BrowserViewController *)g browserView] setNeedsDisplay: YES];
-}
-
-static void gui_window_update_box(struct gui_window *g, const struct rect *rect)
-{
- const NSRect nsrect = cocoa_scaled_rect_wh(
- browser_window_get_scale([(BrowserViewController *)g browser]),
- rect->x0, rect->y0,
- rect->x1 - rect->x0, rect->y1 - rect->y0 );
- [[(BrowserViewController *)g browserView] setNeedsDisplayInRect: nsrect];
-}
-
-static bool gui_window_get_scroll(struct gui_window *g, int *sx, int *sy)
-{
- NSCParameterAssert( g != NULL && sx != NULL && sy != NULL );
-
- NSRect visible = [[(BrowserViewController *)g browserView] visibleRect];
- *sx = cocoa_pt_to_px( NSMinX( visible ) );
- *sy = cocoa_pt_to_px( NSMinY( visible ) );
- return true;
-}
-
-static void gui_window_set_scroll(struct gui_window *g, int sx, int sy)
-{
- [[(BrowserViewController *)g browserView] scrollPoint: cocoa_point( sx, sy )];
-}
-
-
-
-/**
- * Find the current dimensions of a cocoa browser window content area.
- *
- * \param gw The gui window to measure content area of.
- * \param width receives width of window
- * \param height receives height of window
- * \param scaled whether to return scaled values
- * \return NSERROR_OK on sucess and width and height updated
- * else error code.
- */
-static nserror gui_window_get_dimensions(struct gui_window *g,
- int *width, int *height,
- bool scaled)
-{
- NSCParameterAssert( width != NULL && height != NULL );
-
- NSRect frame = [[[(BrowserViewController *)g browserView] superview] frame];
- if (scaled) {
- const CGFloat scale = browser_window_get_scale([(BrowserViewController *)g browser]);
- frame.size.width /= scale;
- frame.size.height /= scale;
- }
- *width = cocoa_pt_to_px( NSWidth( frame ) );
- *height = cocoa_pt_to_px( NSHeight( frame ) );
-
- return NSERROR_OK;
-}
-
-static void gui_window_update_extent(struct gui_window *g)
-{
- BrowserViewController * const window = (BrowserViewController *)g;
- int width;
- int height;
- struct browser_window *browser = [window browser];
-
- browser_window_get_extents(browser, false, &width, &height);
-
- [[window browserView] setMinimumSize:
- cocoa_scaled_size( browser_window_get_scale(browser), width, height )];
-}
-
-static void gui_window_set_status(struct gui_window *g, const char *text)
-{
- [(BrowserViewController *)g setStatus: [NSString stringWithUTF8String: text]];
-}
-
-static void gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
-{
- switch (shape) {
- case GUI_POINTER_DEFAULT:
- case GUI_POINTER_WAIT:
- case GUI_POINTER_PROGRESS:
- [[NSCursor arrowCursor] set];
- break;
-
- case GUI_POINTER_CROSS:
- [[NSCursor crosshairCursor] set];
- break;
-
- case GUI_POINTER_POINT:
- case GUI_POINTER_MENU:
- [[NSCursor pointingHandCursor] set];
- break;
-
- case GUI_POINTER_CARET:
- [[NSCursor IBeamCursor] set];
- break;
-
- case GUI_POINTER_MOVE:
- [[NSCursor closedHandCursor] set];
- break;
-
- default:
- NSLog( @"Other cursor %d requested", shape );
- [[NSCursor arrowCursor] set];
- break;
- }
-}
-
-static nserror gui_window_set_url(struct gui_window *g, struct nsurl *url)
-{
- [(BrowserViewController *)g setUrl: [NSString stringWithUTF8String: nsurl_access(url)]];
- return NSERROR_OK;
-}
-
-static void gui_window_start_throbber(struct gui_window *g)
-{
- [(BrowserViewController *)g setIsProcessing: YES];
- [(BrowserViewController *)g updateBackForward];
-}
-
-static void gui_window_stop_throbber(struct gui_window *g)
-{
- [(BrowserViewController *)g setIsProcessing: NO];
- [(BrowserViewController *)g updateBackForward];
-}
-
-static void gui_window_set_icon(struct gui_window *g, struct hlcache_handle *icon)
-{
- NSBitmapImageRep *bmp = NULL;
- NSImage *image = nil;
-
- if (icon != NULL) {
- bmp = (NSBitmapImageRep *)content_get_bitmap( icon );
- }
-
- if (bmp != nil) {
- image = [[NSImage alloc] initWithSize: NSMakeSize( 32, 32 )];
- [image addRepresentation: bmp];
- } else {
- image = [[NSImage imageNamed: @"NetSurf"] copy];
- }
- [image setFlipped: YES];
-
- [(BrowserViewController *)g setFavicon: image];
- [image release];
-}
-
-static void
-gui_window_place_caret(struct gui_window *g, int x, int y, int height,
- const struct rect *clip)
-{
- [[(BrowserViewController *)g browserView]
- addCaretAt: cocoa_point( x, y )
- height: cocoa_px_to_pt( height )];
-}
-
-static void gui_window_remove_caret(struct gui_window *g)
-{
- [[(BrowserViewController *)g browserView] removeCaret];
-}
-
-static void gui_window_new_content(struct gui_window *g)
-{
- [(BrowserViewController *)g contentUpdated];
-}
-
-
-static void gui_create_form_select_menu(struct gui_window *g,
- struct form_control *control)
-{
- BrowserViewController * const window = (BrowserViewController *)g;
- FormSelectMenu *menu = [[FormSelectMenu alloc]
- initWithControl: control
- forWindow: [window browser]];
- [menu runInView: [window browserView]];
- [menu release];
-}
-
-static nserror gui_launch_url(nsurl *url)
-{
- [[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString: [NSString stringWithUTF8String: nsurl_access(url)]]];
- return NSERROR_OK;
-}
-
-struct ssl_cert_info;
-
-static nserror
-gui_cert_verify(nsurl *url,
- const struct ssl_cert_info *certs,
- unsigned long num,
- nserror (*cb)(bool proceed,void *pw), void *cbpw)
-{
- return NSERROR_NOT_IMPLEMENTED;
-}
-
-
-static struct gui_window_table window_table = {
- .create = gui_window_create,
- .destroy = gui_window_destroy,
- .redraw = gui_window_redraw_window,
- .update = gui_window_update_box,
- .get_scroll = gui_window_get_scroll,
- .set_scroll = gui_window_set_scroll,
- .get_dimensions = gui_window_get_dimensions,
- .update_extent = gui_window_update_extent,
-
- .set_title = gui_window_set_title,
- .set_url = gui_window_set_url,
- .set_icon = gui_window_set_icon,
- .set_status = gui_window_set_status,
- .set_pointer = gui_window_set_pointer,
- .place_caret = gui_window_place_caret,
- .remove_caret = gui_window_remove_caret,
- .new_content = gui_window_new_content,
- .start_throbber = gui_window_start_throbber,
- .stop_throbber = gui_window_stop_throbber,
- .create_form_select_menu = gui_create_form_select_menu,
-};
-
-struct gui_window_table *cocoa_window_table = &window_table;
-
-
-static struct gui_misc_table browser_table = {
- .schedule = cocoa_schedule,
- .warning = cocoa_warning,
-
- .launch_url = gui_launch_url,
- .cert_verify = gui_cert_verify,
-};
-
-struct gui_misc_table *cocoa_misc_table = &browser_table;
diff --git a/frontends/cocoa/plotter.h b/frontends/cocoa/plotter.h
deleted file mode 100644
index ce48653..0000000
--- a/frontends/cocoa/plotter.h
+++ b/dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef COCOA_PLOTTER_H
-#define COCOA_PLOTTER_H
-
-#import <Cocoa/Cocoa.h>
-#import "netsurf/plot_style.h"
-
-extern const struct plotter_table cocoa_plotters;
-
-NSColor *cocoa_convert_colour( colour clr );
-
-void cocoa_update_scale_factor( void );
-
-void cocoa_set_clip( NSRect rect );
-
-#endif
diff --git a/frontends/cocoa/plotter.m b/frontends/cocoa/plotter.m
deleted file mode 100644
index dea3245..0000000
--- a/frontends/cocoa/plotter.m
+++ b/dev/null
@@ -1,335 +0,0 @@
-/*
- * Copyright 2011 Sven Weidauer <sven.weidauer@gmail.com>
- *
- * This file is part of NetSurf, http://www.netsurf-browser.org/
- *
- * NetSurf is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * NetSurf is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <Cocoa/Cocoa.h>
-
-#import "utils/log.h"
-#import "utils/utils.h"
-#import "netsurf/browser_window.h"
-#import "netsurf/plotters.h"
-
-#import "cocoa/font.h"
-#import "cocoa/coordinates.h"
-#import "cocoa/plotter.h"
-#import "cocoa/bitmap.h"
-
-static void cocoa_plot_render_path(NSBezierPath *path,const plot_style_t *pstyle);
-static void cocoa_plot_path_set_stroke_pattern(NSBezierPath *path,const plot_style_t *pstyle);
-static inline void cocoa_center_pixel( bool x, bool y );
-
-static NSRect cocoa_plot_clip_rect;
-
-#define colour_red_component( c ) (((c) >> 0) & 0xFF)
-#define colour_green_component( c ) (((c) >> 8) & 0xFF)
-#define colour_blue_component( c ) (((c) >> 16) & 0xFF)
-#define colour_alpha_component( c ) (((c) >> 24) & 0xFF)
-#define colour_from_rgba( r, g, b, a) ((((colour)(r)) << 0) | \
- (((colour)(g)) << 8) | \
- (((colour)(b)) << 16) | \
- (((colour)(a)) << 24))
-#define colour_from_rgb( r, g, b ) colour_from_rgba( (r), (g), (b), 0xFF )
-
-NSColor *cocoa_convert_colour( colour clr )
-{
- return [NSColor colorWithDeviceRed: (float)colour_red_component( clr ) / 0xFF
- green: (float)colour_green_component( clr ) / 0xFF
- blue: (float)colour_blue_component( clr ) / 0xFF
- alpha: 1.0];
-}
-
-static void cocoa_plot_path_set_stroke_pattern(NSBezierPath *path,const plot_style_t *pstyle)
-{
- static const CGFloat dashed_pattern[2] = { 5.0, 2.0 };
- static const CGFloat dotted_pattern[2] = { 2.0, 2.0 };
-
- switch (pstyle->stroke_type) {
- case PLOT_OP_TYPE_DASH:
- [path setLineDash: dashed_pattern count: 2 phase: 0];
- break;
-
- case PLOT_OP_TYPE_DOT:
- [path setLineDash: dotted_pattern count: 2 phase: 0];
- break;
-
- default:
- // ignore
- break;
- }
-
- [path setLineWidth: cocoa_px_to_pt( pstyle->stroke_width > 0 ? pstyle->stroke_width : 1 )];
-}
-
-static bool plot_line(int x0, int y0, int x1, int y1, const plot_style_t *pstyle)
-{
- if (pstyle->stroke_type == PLOT_OP_TYPE_NONE) return true;
-
- [NSGraphicsContext saveGraphicsState];
- [NSBezierPath clipRect: cocoa_plot_clip_rect];
-
- NSBezierPath *path = [NSBezierPath bezierPath];
- [path moveToPoint: cocoa_point( x0, y0 )];
- [path lineToPoint: cocoa_point( x1, y1 )];
- cocoa_plot_path_set_stroke_pattern( path, pstyle );
-
- const bool horizontal = y0 == y1;
- const bool vertical = x0 == x1;
- const bool oddThickness = pstyle->stroke_width != 0 ? (pstyle->stroke_width % 2) != 0 : true;
-
- if (oddThickness) cocoa_center_pixel( !horizontal, !vertical );
-
- [cocoa_convert_colour( pstyle->stroke_colour ) set];
- [path stroke];
-
- [NSGraphicsContext restoreGraphicsState];
-
- return true;
-}
-
-static bool plot_rectangle(int x0, int y0, int x1, int y1, const plot_style_t *pstyle)
-{
- NSRect rect = cocoa_rect( x0, y0, x1, y1 );
- NSBezierPath *path = [NSBezierPath bezierPathWithRect: rect];
- cocoa_plot_render_path( path, pstyle );
-
- return true;
-}
-
-static bool plot_text(int x, int y, const char *text, size_t length,
- const plot_font_style_t *fstyle)
-{
- [NSGraphicsContext saveGraphicsState];
- [NSBezierPath clipRect: cocoa_plot_clip_rect];
-
- cocoa_draw_string( cocoa_px_to_pt( x ), cocoa_px_to_pt( y ), text, length, fstyle );
-
- [NSGraphicsContext restoreGraphicsState];
-
- return true;
-}
-
-void cocoa_set_clip( NSRect rect )
-{
- cocoa_plot_clip_rect = rect;
-}
-
-static bool plot_clip(const struct rect *clip)
-{
- cocoa_plot_clip_rect = cocoa_rect( clip->x0, clip->y0, clip->x1, clip->y1 );
- return true;
-}
-
-void cocoa_plot_render_path(NSBezierPath *path,const plot_style_t *pstyle)
-{
- [NSGraphicsContext saveGraphicsState];
- [NSBezierPath clipRect: cocoa_plot_clip_rect];
-
- if (pstyle->fill_type != PLOT_OP_TYPE_NONE) {
- [cocoa_convert_colour( pstyle->fill_colour ) setFill];
- [path fill];
- }
-
- if (pstyle->stroke_type != PLOT_OP_TYPE_NONE) {
- if (pstyle->stroke_width == 0 || pstyle->stroke_width % 2 != 0) cocoa_center_pixel( true, true );
-
- cocoa_plot_path_set_stroke_pattern(path,pstyle);
-
- [cocoa_convert_colour( pstyle->stroke_colour ) set];
-
- [path stroke];
- }
-
- [NSGraphicsContext restoreGraphicsState];
-}
-
-static bool plot_arc(int x, int y, int radius, int angle1, int angle2, const plot_style_t *pstyle)
-{
- NSBezierPath *path = [NSBezierPath bezierPath];
- [path appendBezierPathWithArcWithCenter: NSMakePoint( x, y ) radius: radius
- startAngle: angle1 endAngle: angle2
- clockwise: NO];
-
- cocoa_plot_render_path( path, pstyle);
-
- return true;
-}
-
-static bool plot_disc(int x, int y, int radius, const plot_style_t *pstyle)
-{
- NSBezierPath *path = [NSBezierPath bezierPathWithOvalInRect:
- NSMakeRect( x - radius, y-radius, 2*radius, 2*radius )];
-
- cocoa_plot_render_path( path, pstyle );
-
- return true;
-}
-
-static bool plot_polygon(const int *p, unsigned int n, const plot_style_t *pstyle)
-{
- if (n <= 1) return true;
-
- NSBezierPath *path = [NSBezierPath bezierPath];
- [path moveToPoint: cocoa_point( p[0], p[1] )];
- for (unsigned i = 1; i < n; i++) {
- [path lineToPoint: cocoa_point( p[2*i], p[2*i+1] )];
- }
- [path closePath];
-
- cocoa_plot_render_path( path, pstyle );
-
- return true;
-}
-
-/* complex path (for SVG) */
-static bool plot_path(const float *p, unsigned int n, colour fill, float width,
- colour c, const float transform[6])
-{
- if (n == 0) return true;
-
- if (*p != PLOTTER_PATH_MOVE) {
- LOG("Path does not start with move");
- return false;
- }
-
- NSBezierPath *path = [NSBezierPath bezierPath];
-
-#define NEXT_POINT() NSMakePoint( *p++, *p++ )
-
- while (n--) {
- switch ((int)*p++) {
- case PLOTTER_PATH_MOVE: {
- const NSPoint pt = NEXT_POINT();
- [path moveToPoint: pt];
- break;
- }
-
- case PLOTTER_PATH_LINE: {
- const NSPoint pt = NEXT_POINT();
- [path lineToPoint: pt];
- break;
- }
-
- case PLOTTER_PATH_BEZIER: {
- const NSPoint cp1 = NEXT_POINT();
- const NSPoint cp2 = NEXT_POINT();
- const NSPoint ep = NEXT_POINT();
- [path curveToPoint: ep controlPoint1: cp1 controlPoint2: cp2];
- break;
- }
-
- case PLOTTER_PATH_CLOSE:
- [path closePath];
- break;
-
- default:
- LOG("Invalid path");
- return false;
- }
- }
-
-#undef NEXT_POINT
-
- [path setLineWidth: width];
-
- CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
- CGContextSaveGState( context );
-
- CGContextClipToRect( context, NSRectToCGRect( cocoa_plot_clip_rect ) );
-
- CGContextConcatCTM( context, CGAffineTransformMake( transform[0], transform[1], transform[2],
- transform[3], transform[4], transform[5] ) );
-
- if (fill != NS_TRANSPARENT) {
- [cocoa_convert_colour( fill ) setFill];
- [path fill];
- }
-
- if (c != NS_TRANSPARENT) {
- cocoa_center_pixel( true, true );
- [cocoa_convert_colour( c ) set];
- [path stroke];
- }
-
- CGContextRestoreGState( context );
-
- return true;
-}
-
-/* Image */
-static bool plot_bitmap(int x, int y, int width, int height,
- struct bitmap *bitmap, colour bg,
- bitmap_flags_t flags)
-{
- CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
- CGContextSaveGState( context );
-
- CGContextClipToRect( context, NSRectToCGRect( cocoa_plot_clip_rect ) );
-
- const bool tileX = flags & BITMAPF_REPEAT_X;
- const bool tileY = flags & BITMAPF_REPEAT_Y;
-
- CGImageRef img = cocoa_get_cgimage( bitmap );
-
- CGRect rect = NSRectToCGRect( cocoa_rect_wh( x, y, width, height ) );
-
- if (tileX || tileY) {
- CGContextDrawTiledImage( context, rect, img );
- } else {
- CGContextDrawImage( context, rect, img );
- }
-
- CGContextRestoreGState( context );
-
- return true;
-}
-
-const struct plotter_table cocoa_plotters = {
- .clip = plot_clip,
- .arc = plot_arc,
- .disc = plot_disc,
- .rectangle = plot_rectangle,
- .line = plot_line,
- .polygon = plot_polygon,
-
- .path = plot_path,
-
- .bitmap = plot_bitmap,
-
- .text = plot_text,
-
- .option_knockout = true
-};
-
-
-CGFloat cocoa_scale_factor;
-static const CGFloat points_per_inch = 72.0;
-static CGFloat cocoa_half_pixel;
-
-void cocoa_update_scale_factor( void )
-{
- const CGFloat scale = [[NSScreen mainScreen] userSpaceScaleFactor];
- cocoa_scale_factor = scale == 1.0 ? 1.0 : 1.0 / scale;
- cocoa_half_pixel = 0.5 * cocoa_scale_factor;
- browser_set_dpi( points_per_inch * scale );
-}
-
-static inline void cocoa_center_pixel( bool x, bool y )
-{
- NSAffineTransform *transform = [NSAffineTransform transform];
- [transform translateXBy: x ? cocoa_half_pixel : 0.0 yBy: y ? cocoa_half_pixel : 0.0];
- [transform concat];
-}
diff --git a/frontends/cocoa/res/BookmarksWindow.xib b/frontends/cocoa/res/BookmarksWindow.xib
deleted file mode 100644
index b038e6c..0000000
--- a/frontends/cocoa/res/BookmarksWindow.xib
+++ b/dev/null
@@ -1,610 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
- <data>
- <int key="IBDocument.SystemTarget">1060</int>
- <string key="IBDocument.SystemVersion">10J567</string>
- <string key="IBDocument.InterfaceBuilderVersion">804</string>
- <string key="IBDocument.AppKitVersion">1038.35</string>
- <string key="IBDocument.HIToolboxVersion">462.00</string>
- <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
- <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string key="NS.object.0">804</string>
- </object>
- <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <integer value="1"/>
- </object>
- <object class="NSArray" key="IBDocument.PluginDependencies">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- </object>
- <object class="NSMutableDictionary" key="IBDocument.Metadata">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys" id="0">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- </object>
- <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSCustomObject" id="1001">
- <string key="NSClassName">BookmarksController</string>
- </object>
- <object class="NSCustomObject" id="1003">
- <string key="NSClassName">FirstResponder</string>
- </object>
- <object class="NSCustomObject" id="1004">
- <string key="NSClassName">NSApplication</string>
- </object>
- <object class="NSWindowTemplate" id="1005">
- <int key="NSWindowStyleMask">15</int>
- <int key="NSWindowBacking">2</int>
- <string key="NSWindowRect">{{196, 80}, {350, 400}}</string>
- <int key="NSWTFlags">1618477056</int>
- <string key="NSWindowTitle">Bookmarks</string>
- <string key="NSWindowClass">NSWindow</string>
- <nil key="NSViewClass"/>
- <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
- <string key="NSWindowContentMinSize">{200, 100}</string>
- <object class="NSView" key="NSWindowView" id="1006">
- <reference key="NSNextResponder"/>
- <int key="NSvFlags">256</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSScrollView" id="79136560">
- <reference key="NSNextResponder" ref="1006"/>
- <int key="NSvFlags">274</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSClipView" id="286793088">
- <reference key="NSNextResponder" ref="79136560"/>
- <int key="NSvFlags">2304</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSCustomView" id="347174519">
- <reference key="NSNextResponder" ref="286793088"/>
- <int key="NSvFlags">274</int>
- <string key="NSFrameSize">{350, 360}</string>
- <reference key="NSSuperview" ref="286793088"/>
- <string key="NSClassName">TreeView</string>
- </object>
- </object>
- <string key="NSFrame">{{1, 1}, {350, 360}}</string>
- <reference key="NSSuperview" ref="79136560"/>
- <reference key="NSNextKeyView" ref="347174519"/>
- <reference key="NSDocView" ref="347174519"/>
- <object class="NSColor" key="NSBGColor">
- <int key="NSColorSpace">6</int>
- <string key="NSCatalogName">System</string>
- <string key="NSColorName">controlColor</string>
- <object class="NSColor" key="NSColor">
- <int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
- </object>
- </object>
- <int key="NScvFlags">4</int>
- </object>
- <object class="NSScroller" id="343618412">
- <reference key="NSNextResponder" ref="79136560"/>
- <int key="NSvFlags">-2147483392</int>
- <string key="NSFrame">{{353, 1}, {15, 313}}</string>
- <reference key="NSSuperview" ref="79136560"/>
- <reference key="NSTarget" ref="79136560"/>
- <string key="NSAction">_doScroller:</string>
- <double key="NSCurValue">1</double>
- <double key="NSPercent">0.96363627910614014</double>
- </object>
- <object class="NSScroller" id="885399726">
- <reference key="NSNextResponder" ref="79136560"/>
- <int key="NSvFlags">-2147483392</int>
- <string key="NSFrame">{{1, 314}, {352, 15}}</string>
- <reference key="NSSuperview" ref="79136560"/>
- <int key="NSsFlags">1</int>
- <reference key="NSTarget" ref="79136560"/>
- <string key="NSAction">_doScroller:</string>
- <double key="NSPercent">0.50602412223815918</double>
- </object>
- </object>
- <string key="NSFrame">{{-1, 39}, {352, 362}}</string>
- <reference key="NSSuperview" ref="1006"/>
- <reference key="NSNextKeyView" ref="286793088"/>
- <int key="NSsFlags">562</int>
- <reference key="NSVScroller" ref="343618412"/>
- <reference key="NSHScroller" ref="885399726"/>
- <reference key="NSContentView" ref="286793088"/>
- </object>
- <object class="NSButton" id="1013386414">
- <reference key="NSNextResponder" ref="1006"/>
- <int key="NSvFlags">292</int>
- <string key="NSFrame">{{7, 7}, {29, 25}}</string>
- <reference key="NSSuperview" ref="1006"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="1030859690">
- <int key="NSCellFlags">-2080244224</int>
- <int key="NSCellFlags2">134217728</int>
- <string key="NSContents"/>
- <object class="NSFont" key="NSSupport" id="1037042855">
- <string key="NSName">LucidaGrande</string>
- <double key="NSSize">13</double>
- <int key="NSfFlags">1044</int>
- </object>
- <reference key="NSControlView" ref="1013386414"/>
- <int key="NSButtonFlags">-2033958657</int>
- <int key="NSButtonFlags2">163</int>
- <object class="NSCustomResource" key="NSNormalImage">
- <string key="NSClassName">NSImage</string>
- <string key="NSResourceName">NSAddTemplate</string>
- </object>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">400</int>
- <int key="NSPeriodicInterval">75</int>
- </object>
- </object>
- <object class="NSButton" id="812276353">
- <reference key="NSNextResponder" ref="1006"/>
- <int key="NSvFlags">292</int>
- <string key="NSFrame">{{43, 7}, {29, 25}}</string>
- <reference key="NSSuperview" ref="1006"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="142633288">
- <int key="NSCellFlags">-2080244224</int>
- <int key="NSCellFlags2">134217728</int>
- <string key="NSContents"/>
- <reference key="NSSupport" ref="1037042855"/>
- <reference key="NSControlView" ref="812276353"/>
- <int key="NSButtonFlags">-2033958657</int>
- <int key="NSButtonFlags2">163</int>
- <object class="NSCustomResource" key="NSNormalImage">
- <string key="NSClassName">NSImage</string>
- <string key="NSResourceName">NSRemoveTemplate</string>
- </object>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">400</int>
- <int key="NSPeriodicInterval">75</int>
- </object>
- </object>
- <object class="NSButton" id="482147213">
- <reference key="NSNextResponder" ref="1006"/>
- <int key="NSvFlags">292</int>
- <string key="NSFrame">{{80, 7}, {38, 25}}</string>
- <reference key="NSSuperview" ref="1006"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="586666285">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">134217728</int>
- <string key="NSContents">Edit</string>
- <reference key="NSSupport" ref="1037042855"/>
- <reference key="NSControlView" ref="482147213"/>
- <int key="NSButtonFlags">-2038152961</int>
- <int key="NSButtonFlags2">163</int>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">400</int>
- <int key="NSPeriodicInterval">75</int>
- </object>
- </object>
- </object>
- <string key="NSFrameSize">{350, 400}</string>
- <reference key="NSSuperview"/>
- </object>
- <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
- <string key="NSMinSize">{200, 122}</string>
- <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
- <bool key="NSAutorecalculatesContentBorderThicknessMinY">NO</bool>
- <double key="NSContentBorderThicknessMinY">39</double>
- </object>
- </object>
- <object class="IBObjectContainer" key="IBDocument.Objects">
- <object class="NSMutableArray" key="connectionRecords">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">window</string>
- <reference key="source" ref="1001"/>
- <reference key="destination" ref="1005"/>
- </object>
- <int key="connectionID">3</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">view</string>
- <reference key="source" ref="1001"/>
- <reference key="destination" ref="347174519"/>
- </object>
- <int key="connectionID">8</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">addFolder:</string>
- <reference key="source" ref="1001"/>
- <reference key="destination" ref="1013386414"/>
- </object>
- <int key="connectionID">17</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">deleteSelected:</string>
- <reference key="source" ref="1001"/>
- <reference key="destination" ref="812276353"/>
- </object>
- <int key="connectionID">18</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">editSelected:</string>
- <reference key="source" ref="1001"/>
- <reference key="destination" ref="482147213"/>
- </object>
- <int key="connectionID">19</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">initialFirstResponder</string>
- <reference key="source" ref="1005"/>
- <reference key="destination" ref="347174519"/>
- </object>
- <int key="connectionID">20</int>
- </object>
- </object>
- <object class="IBMutableOrderedSet" key="objectRecords">
- <object class="NSArray" key="orderedObjects">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBObjectRecord">
- <int key="objectID">0</int>
- <reference key="object" ref="0"/>
- <reference key="children" ref="1000"/>
- <nil key="parent"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">-2</int>
- <reference key="object" ref="1001"/>
- <reference key="parent" ref="0"/>
- <string key="objectName">File's Owner</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">-1</int>
- <reference key="object" ref="1003"/>
- <reference key="parent" ref="0"/>
- <string key="objectName">First Responder</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">-3</int>
- <reference key="object" ref="1004"/>
- <reference key="parent" ref="0"/>
- <string key="objectName">Application</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">1</int>
- <reference key="object" ref="1005"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1006"/>
- </object>
- <reference key="parent" ref="0"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">2</int>
- <reference key="object" ref="1006"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="79136560"/>
- <reference ref="1013386414"/>
- <reference ref="812276353"/>
- <reference ref="482147213"/>
- </object>
- <reference key="parent" ref="1005"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">4</int>
- <reference key="object" ref="79136560"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="343618412"/>
- <reference ref="885399726"/>
- <reference ref="347174519"/>
- </object>
- <reference key="parent" ref="1006"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5</int>
- <reference key="object" ref="343618412"/>
- <reference key="parent" ref="79136560"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">6</int>
- <reference key="object" ref="885399726"/>
- <reference key="parent" ref="79136560"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">7</int>
- <reference key="object" ref="347174519"/>
- <reference key="parent" ref="79136560"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">11</int>
- <reference key="object" ref="1013386414"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1030859690"/>
- </object>
- <reference key="parent" ref="1006"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">12</int>
- <reference key="object" ref="1030859690"/>
- <reference key="parent" ref="1013386414"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">13</int>
- <reference key="object" ref="812276353"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="142633288"/>
- </object>
- <reference key="parent" ref="1006"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">14</int>
- <reference key="object" ref="142633288"/>
- <reference key="parent" ref="812276353"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">15</int>
- <reference key="object" ref="482147213"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="586666285"/>
- </object>
- <reference key="parent" ref="1006"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">16</int>
- <reference key="object" ref="586666285"/>
- <reference key="parent" ref="482147213"/>
- </object>
- </object>
- </object>
- <object class="NSMutableDictionary" key="flattenedProperties">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>1.IBEditorWindowLastContentRect</string>
- <string>1.IBPluginDependency</string>
- <string>1.IBWindowTemplateEditedContentRect</string>
- <string>1.NSWindowTemplate.visibleAtLaunch</string>
- <string>1.WindowOrigin</string>
- <string>1.editorWindowContentRectSynchronizationRect</string>
- <string>1.windowTemplate.hasMinSize</string>
- <string>1.windowTemplate.minSize</string>
- <string>11.IBPluginDependency</string>
- <string>11.IBViewBoundsToFrameTransform</string>
- <string>12.IBPluginDependency</string>
- <string>13.IBPluginDependency</string>
- <string>13.IBViewBoundsToFrameTransform</string>
- <string>14.IBPluginDependency</string>
- <string>15.IBPluginDependency</str