2004-02-25 03:27:23 +00:00
|
|
|
/** <title>NSWindow+Toolbar</title>
|
|
|
|
|
|
|
|
<abstract>The window class category to include toolbar support</abstract>
|
|
|
|
|
|
|
|
Copyright (C) 2004 Free Software Foundation, Inc.
|
|
|
|
|
2004-03-12 22:55:02 +00:00
|
|
|
Author: Quentin Mathe <qmathe@club-internet.fr>
|
2004-02-25 03:27:23 +00:00
|
|
|
Date: January 2004
|
|
|
|
|
|
|
|
This file is part of the GNUstep GUI Library.
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
2007-10-29 21:16:17 +00:00
|
|
|
modify it under the terms of the GNU Lesser General Public
|
2004-02-25 03:27:23 +00:00
|
|
|
License as published by the Free Software Foundation; either
|
2008-06-10 04:01:49 +00:00
|
|
|
version 2 of the License, or (at your option) any later version.
|
2007-10-29 21:16:17 +00:00
|
|
|
|
2004-02-25 03:27:23 +00:00
|
|
|
This library 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
|
2007-10-29 21:16:17 +00:00
|
|
|
Lesser General Public License for more details.
|
2004-02-25 03:27:23 +00:00
|
|
|
|
2007-10-29 21:16:17 +00:00
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2004-02-25 03:27:23 +00:00
|
|
|
License along with this library; see the file COPYING.LIB.
|
2007-10-29 21:16:17 +00:00
|
|
|
If not, see <http://www.gnu.org/licenses/> or write to the
|
|
|
|
Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA.
|
2004-02-25 03:27:23 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include <Foundation/NSDebug.h>
|
|
|
|
#include <Foundation/NSException.h>
|
2004-07-07 21:25:42 +00:00
|
|
|
#include <Foundation/NSAutoreleasePool.h>
|
2004-04-02 15:40:49 +00:00
|
|
|
#include "AppKit/NSWindow+Toolbar.h"
|
2004-02-25 03:27:23 +00:00
|
|
|
#include "AppKit/NSView.h"
|
|
|
|
#include "AppKit/NSToolbar.h"
|
|
|
|
#include "GNUstepGUI/GSToolbarView.h"
|
|
|
|
|
2009-01-02 17:24:06 +00:00
|
|
|
#include "NSToolbarFrameworkPrivate.h"
|
2004-02-25 03:27:23 +00:00
|
|
|
|
|
|
|
@implementation NSWindow (Toolbar)
|
|
|
|
|
|
|
|
- (void) runToolbarCustomizationPalette: (id)sender
|
|
|
|
{
|
|
|
|
[[self toolbar] runCustomizationPalette: sender];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) toggleToolbarShown: (id)sender
|
|
|
|
{
|
|
|
|
NSToolbar *toolbar = [self toolbar];
|
2009-01-02 14:05:39 +00:00
|
|
|
BOOL isVisible = [toolbar isVisible];
|
2008-12-31 16:06:58 +00:00
|
|
|
|
|
|
|
if (!toolbar)
|
|
|
|
return;
|
|
|
|
|
2009-01-02 14:05:39 +00:00
|
|
|
if (isVisible)
|
|
|
|
{
|
2009-01-02 21:41:29 +00:00
|
|
|
[_wv removeToolbarView: [toolbar _toolbarView]];
|
2009-01-02 14:05:39 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2009-01-02 21:41:29 +00:00
|
|
|
[_wv addToolbarView: [toolbar _toolbarView]];
|
2009-01-02 14:05:39 +00:00
|
|
|
}
|
|
|
|
|
2008-12-31 16:06:58 +00:00
|
|
|
// Important to set _visible after the toolbar view has been toggled because
|
2009-01-02 14:05:39 +00:00
|
|
|
// NSWindow method _contentViewWithoutToolbar uses [NSToolbar visible]
|
2008-12-31 16:06:58 +00:00
|
|
|
// when we toggle the toolbar
|
|
|
|
// example : the toolbar needs to be still known visible in order to hide
|
|
|
|
// it.
|
2009-01-02 14:05:39 +00:00
|
|
|
[toolbar setVisible: !isVisible];
|
2008-12-31 16:06:58 +00:00
|
|
|
|
|
|
|
[self display];
|
2004-02-25 03:27:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Accessors
|
|
|
|
|
|
|
|
- (NSToolbar *) toolbar
|
|
|
|
{
|
2008-12-31 16:06:58 +00:00
|
|
|
return _toolbar;
|
2004-02-25 03:27:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setToolbar: (NSToolbar*)toolbar
|
|
|
|
{
|
2008-12-31 17:36:35 +00:00
|
|
|
if (toolbar == _toolbar)
|
2008-12-31 16:06:58 +00:00
|
|
|
return;
|
|
|
|
|
2008-12-31 17:36:35 +00:00
|
|
|
if (_toolbar != nil)
|
2008-12-28 15:16:05 +00:00
|
|
|
{
|
2008-12-31 17:36:35 +00:00
|
|
|
GSToolbarView *toolbarView = [_toolbar _toolbarView];
|
|
|
|
|
2008-12-28 15:16:05 +00:00
|
|
|
// We throw the last toolbar out
|
2008-12-31 17:36:35 +00:00
|
|
|
if ([_toolbar isVisible])
|
2008-12-31 16:06:58 +00:00
|
|
|
{
|
2009-01-02 21:41:29 +00:00
|
|
|
[_wv removeToolbarView: toolbarView];
|
2008-12-31 16:06:58 +00:00
|
|
|
}
|
2009-01-01 19:22:50 +00:00
|
|
|
[toolbarView setToolbar: nil];
|
2009-01-02 14:05:39 +00:00
|
|
|
// Release the toolbarView, this may release the toolbar
|
2008-12-31 17:36:35 +00:00
|
|
|
RELEASE(toolbarView);
|
2008-12-28 15:16:05 +00:00
|
|
|
}
|
2004-02-25 03:27:23 +00:00
|
|
|
|
2008-12-31 16:06:58 +00:00
|
|
|
ASSIGN(_toolbar, toolbar);
|
|
|
|
|
|
|
|
if (toolbar != nil)
|
2008-12-28 15:16:05 +00:00
|
|
|
{
|
2008-12-31 16:06:58 +00:00
|
|
|
GSToolbarView *toolbarView = [toolbar _toolbarView];
|
2004-02-25 03:27:23 +00:00
|
|
|
|
2008-12-31 16:06:58 +00:00
|
|
|
if (toolbarView != nil)
|
|
|
|
{
|
|
|
|
NSLog(@"Error: the new toolbar is still owned by a toolbar view");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// Instantiate the toolbar view
|
2009-01-02 17:24:06 +00:00
|
|
|
// FIXME: Currently this is reatined until the toolbar
|
|
|
|
// gets removed from the window.
|
2008-12-31 16:06:58 +00:00
|
|
|
toolbarView = [[GSToolbarView alloc]
|
|
|
|
initWithFrame:
|
|
|
|
NSMakeRect(0, 0,
|
|
|
|
[NSWindow contentRectForFrameRect: [self frame]
|
|
|
|
styleMask: [self styleMask]].size.width, 100)];
|
|
|
|
// _toggleToolbarView method will set the toolbar view to the right
|
|
|
|
// frame
|
|
|
|
[toolbarView setAutoresizingMask: NSViewWidthSizable | NSViewMinYMargin];
|
|
|
|
[toolbarView setBorderMask: GSToolbarViewBottomBorder];
|
|
|
|
// Load the toolbar inside the toolbar view
|
|
|
|
// Will set the _toolbarView variable for the toolbar
|
2009-01-01 19:22:50 +00:00
|
|
|
[toolbarView setToolbar: toolbar];
|
2008-12-31 16:06:58 +00:00
|
|
|
}
|
2004-04-13 13:12:53 +00:00
|
|
|
|
2008-12-31 16:06:58 +00:00
|
|
|
// Make the toolbar view visible
|
|
|
|
if ([toolbar isVisible])
|
|
|
|
{
|
2009-01-02 21:41:29 +00:00
|
|
|
[_wv addToolbarView: toolbarView];
|
2008-12-31 16:06:58 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// To show the changed toolbar
|
2009-01-02 14:05:39 +00:00
|
|
|
[self displayIfNeeded];
|
2004-02-25 03:27:23 +00:00
|
|
|
}
|
|
|
|
|
2009-01-02 14:05:39 +00:00
|
|
|
@end
|