/*
NSToolbar.m
The toolbar class.
Copyright (C) 2002 Free Software Foundation, Inc.
Author: Gregory John Casamento ,
Fabien Vallon ,
Quentin Mathe
Date: May 2002
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; see the file COPYING.LIB.
If not, see or write to the
Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include
#include
#include
#include
#include
#include "AppKit/NSToolbarItem.h"
#include "AppKit/NSView.h"
#include "AppKit/NSWindow.h"
#include "AppKit/NSWindow+Toolbar.h"
#include "GNUstepGUI/GSToolbarView.h"
#include "GNUstepGUI/GSToolbar.h"
#include "AppKit/NSToolbar.h"
// internal
static const int current_version = 1;
@interface GSToolbar (GNUstepPrivate)
+ (NSArray *) _toolbarsWithIdentifier: (NSString *)identifier;
@end
@interface NSToolbar (GNUstepPrivate)
// Private methods with broadcast support
- (void) _setDisplayMode: (NSToolbarDisplayMode)displayMode
broadcast: (BOOL)broadcast;
- (void) _setSizeMode: (NSToolbarSizeMode)sizeMode
broadcast: (BOOL)broadcast;
- (void) _setVisible: (BOOL)shown broadcast: (BOOL)broadcast;
// Few other private methods
- (GSToolbar *) _toolbarModel;
@end
@interface GSToolbarView (GNUstepPrivate)
- (void) _reload;
// Accessors
- (void) _setSizeMode: (NSToolbarSizeMode)sizeMode;
- (NSToolbarSizeMode) _sizeMode;
@end
@interface NSWindow (ToolbarPrivate)
- (void) _adjustToolbarView;
@end
// ---
@implementation NSToolbar
// Class methods
// Initialize the class when it is loaded
+ (void) initialize
{
if (self == [NSToolbar class])
{
[self setVersion: current_version];
}
}
// Instance methods
- (id) initWithIdentifier: (NSString *)identifier
{
NSToolbar *toolbarModel = nil;
if ((self = [super initWithIdentifier: identifier]) == nil)
{
return nil;
}
toolbarModel = (NSToolbar *)[self _toolbarModel];
if (toolbarModel != nil)
{
_visible = [toolbarModel isVisible];
}
else
{
_visible = YES;
}
return self;
}
// Accessors
- (BOOL) isVisible
{
return _visible;
}
/**
* Sets the receivers delegate ... this is the object which will receive
* -toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:
* -toolbarAllowedItemIdentifiers: and -toolbarDefaultItemIdentifiers:
* messages.
*/
- (void) setDisplayMode: (NSToolbarDisplayMode)displayMode
{
[self _setDisplayMode: displayMode broadcast: YES];
}
- (void) setSizeMode: (NSToolbarSizeMode)sizeMode
{
[self _setSizeMode: sizeMode broadcast: YES];
}
- (void) setVisible: (BOOL)shown
{
[self _setVisible: shown broadcast: NO];
}
// Private methods
/*
*
* The methods below handle the toolbar edition and broacast each associated
* event to the other toolbars with identical identifiers.
*
*/
#define TRANSMIT(signature) \
NSEnumerator *e = [[GSToolbar _toolbarsWithIdentifier: _identifier] objectEnumerator]; \
NSToolbar *toolbar; \
\
while ((toolbar = [e nextObject]) != nil) \
{ \
if (toolbar != self && [self isMemberOfClass: [self class]]) \
[toolbar signature]; \
} \
- (void) _setDisplayMode: (NSToolbarDisplayMode)displayMode
broadcast: (BOOL)broadcast
{
if (_displayMode != displayMode)
{
_displayMode = displayMode;
[_toolbarView _reload];
[[_toolbarView window] _adjustToolbarView];
if (broadcast)
{
TRANSMIT(_setDisplayMode: _displayMode broadcast: NO);
}
}
}
- (void) _setSizeMode: (NSToolbarSizeMode)sizeMode
broadcast: (BOOL)broadcast
{
if (_sizeMode != sizeMode)
{
_sizeMode = sizeMode;
[_toolbarView _setSizeMode: _sizeMode];
[_toolbarView _reload];
[[_toolbarView window] _adjustToolbarView];
if (broadcast)
{
TRANSMIT(_setSizeMode: _sizeMode broadcast: NO);
}
}
}
// This method wont make a toolbar visible or invisible by itself.
// Use [NSWindow toggleToolbarShown:]
- (void) _setVisible: (BOOL)shown broadcast: (BOOL)broadcast
{
if (_visible != shown)
{
_visible = shown;
if (broadcast)
{
TRANSMIT(_setVisible: _visible broadcast: NO);
}
}
}
@end