2020-07-23 11:13:48 +00:00
|
|
|
/* Implementation of class NSTabViewController
|
|
|
|
Copyright (C) 2020 Free Software Foundation, Inc.
|
|
|
|
|
|
|
|
By: Gregory John Casamento
|
2020-07-25 13:28:01 +00:00
|
|
|
Date: 23-07-2020
|
2020-07-23 11:13:48 +00:00
|
|
|
|
|
|
|
This file is part of the GNUstep 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.1 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; if not, write to the Free
|
|
|
|
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110 USA.
|
|
|
|
*/
|
|
|
|
|
2020-07-23 17:30:05 +00:00
|
|
|
#import <Foundation/NSArray.h>
|
|
|
|
|
2020-07-23 11:13:48 +00:00
|
|
|
#import "AppKit/NSTabViewController.h"
|
2020-07-23 17:30:05 +00:00
|
|
|
#import "AppKit/NSTabViewItem.h"
|
|
|
|
#import "AppKit/NSTabView.h"
|
|
|
|
|
|
|
|
#import "GSFastEnumeration.h"
|
2020-07-23 11:13:48 +00:00
|
|
|
|
|
|
|
@implementation NSTabViewController
|
2020-07-23 17:30:05 +00:00
|
|
|
- (NSTabViewControllerTabStyle) tabStyle
|
|
|
|
{
|
|
|
|
return _tabStyle;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setTabStyle: (NSTabViewControllerTabStyle)ts
|
|
|
|
{
|
|
|
|
_tabStyle = ts;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSTabView *) tabView
|
|
|
|
{
|
|
|
|
return (NSTabView *)[self view];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setTabView: (NSTabView *)tv
|
|
|
|
{
|
|
|
|
[self setView: tv];
|
|
|
|
[tv setDelegate: self];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSViewControllerTransitionOptions) transitionOptions
|
|
|
|
{
|
|
|
|
return _transitionOptions;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setTransitionOptions: (NSViewControllerTransitionOptions)options
|
|
|
|
{
|
|
|
|
_transitionOptions = options;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL) canPropagateSelectedChildViewControllerTitle
|
|
|
|
{
|
|
|
|
return _canPropagateSelectedChildViewControllerTitle;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setCanPropagateSelectedChildViewControllerTitle: (BOOL)flag
|
|
|
|
{
|
|
|
|
_canPropagateSelectedChildViewControllerTitle = flag;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Managing tabViewItems...
|
|
|
|
- (NSArray *) tabViewItems
|
|
|
|
{
|
|
|
|
return [[self tabView] tabViewItems];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setTabViewItems: (NSArray *)items
|
|
|
|
{
|
|
|
|
FOR_IN(NSTabViewItem*, item, items)
|
|
|
|
[[self tabView] addTabViewItem: item];
|
|
|
|
END_FOR_IN(items);
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSTabViewItem *) tabViewItemForViewController: (NSViewController *)controller
|
|
|
|
{
|
|
|
|
NSArray *tabViewItems = [[self tabView] tabViewItems];
|
|
|
|
FOR_IN(NSTabViewItem*, tvi, tabViewItems)
|
|
|
|
if ([tvi viewController] == controller)
|
|
|
|
{
|
|
|
|
return tvi;
|
|
|
|
}
|
|
|
|
END_FOR_IN(tabViewItems);
|
|
|
|
return nil;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) addTabViewItem: (NSTabViewItem *)item
|
|
|
|
{
|
|
|
|
[[self tabView] addTabViewItem: item];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) insertTabViewItem: (NSTabViewItem *)item
|
|
|
|
atIndex: (NSInteger)index
|
|
|
|
{
|
|
|
|
[[self tabView] insertTabViewItem: item atIndex: index];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) removeTabViewItem: (NSTabViewItem *)item
|
|
|
|
{
|
|
|
|
[[self tabView] removeTabViewItem: item];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSInteger) selectedTabViewItemIndex
|
|
|
|
{
|
|
|
|
return [[self tabView] indexOfTabViewItem: [[self tabView] selectedTabViewItem]];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setSelectedTabViewItemIndex: (NSInteger)idx
|
|
|
|
{
|
|
|
|
[[self tabView] selectTabViewItemAtIndex: idx];
|
|
|
|
}
|
|
|
|
|
|
|
|
// Responding to tabview actions...
|
|
|
|
- (BOOL)tabView:(NSTabView *)tabView
|
|
|
|
shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem
|
|
|
|
{
|
|
|
|
return YES;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)tabView:(NSTabView *)tabView
|
|
|
|
willSelectTabViewItem:(NSTabViewItem *)tabViewItem
|
|
|
|
{
|
|
|
|
// not implemented
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)tabView:(NSTabView *)tabView
|
|
|
|
didSelectTabViewItem:(NSTabViewItem *)tabViewItem
|
|
|
|
{
|
|
|
|
// not implemented
|
|
|
|
}
|
|
|
|
|
|
|
|
// Responding to toolbar actions...
|
|
|
|
- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar
|
|
|
|
itemForItemIdentifier:(NSToolbarItemIdentifier)itemIdentifier
|
|
|
|
willBeInsertedIntoToolbar:(BOOL)flag
|
|
|
|
{
|
|
|
|
return nil;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar
|
|
|
|
{
|
|
|
|
return [NSArray array];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar
|
|
|
|
{
|
|
|
|
return [NSArray array];
|
|
|
|
}
|
|
|
|
|
|
|
|
// NSCoding
|
|
|
|
- (instancetype) initWithCoder: (NSCoder *)coder
|
|
|
|
{
|
|
|
|
self = [super initWithCoder: coder];
|
|
|
|
if ([coder allowsKeyedCoding])
|
|
|
|
{
|
|
|
|
if ([coder containsValueForKey: @"NSTabView"])
|
|
|
|
{
|
|
|
|
NSTabView *tv = [coder decodeObjectForKey: @"NSTabView"];
|
|
|
|
[self setTabView: tv];
|
2020-07-26 09:37:25 +00:00
|
|
|
|
|
|
|
// Currently we only support the tabs being on the top or the bottom.
|
|
|
|
// The rendering code doesn't support anything outside of these two
|
|
|
|
// cases. Here we force the use of the top case, when it is outside
|
|
|
|
// of either of the cases we handle... this is temporary. FIXME
|
|
|
|
if ([tv tabViewType] != NSTopTabsBezelBorder &&
|
|
|
|
[tv tabViewType] != NSBottomTabsBezelBorder)
|
|
|
|
{
|
|
|
|
[tv setTabViewType: NSTopTabsBezelBorder];
|
|
|
|
}
|
2020-07-23 17:30:05 +00:00
|
|
|
}
|
2020-07-27 09:40:48 +00:00
|
|
|
|
|
|
|
if ([coder containsValueForKey: @"NSTabViewControllerCanPropagateSelectedChildViewControllerTitle"])
|
|
|
|
{
|
|
|
|
BOOL flag = [coder decodeBoolForKey: @"NSTabViewControllerCanPropagateSelectedChildViewControllerTitle"];
|
|
|
|
[self setCanPropagateSelectedChildViewControllerTitle: flag];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
BOOL flag;
|
|
|
|
[self setTabView: [coder decodeObject]]; // get tabview...
|
|
|
|
[coder decodeValueOfObjCType: @encode(BOOL)
|
|
|
|
at: &flag];
|
|
|
|
[self setCanPropagateSelectedChildViewControllerTitle: flag];
|
2020-07-23 17:30:05 +00:00
|
|
|
}
|
|
|
|
return self;
|
|
|
|
}
|
2020-07-23 11:13:48 +00:00
|
|
|
|
2020-07-23 17:30:05 +00:00
|
|
|
- (void) encodeWithCoder: (NSCoder *)coder
|
|
|
|
{
|
2020-07-27 09:40:48 +00:00
|
|
|
[super encodeWithCoder: coder];
|
|
|
|
if ([coder allowsKeyedCoding])
|
|
|
|
{
|
|
|
|
NSTabView *tv = [self tabView];
|
|
|
|
[coder encodeObject: tv forKey: @"NSTabView"];
|
2020-07-27 10:18:21 +00:00
|
|
|
[coder encodeBool: [self canPropagateSelectedChildViewControllerTitle]
|
2020-07-27 09:40:48 +00:00
|
|
|
forKey: @"NSTabViewControllerCanPropagateSelectedChildViewControllerTitle"];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
BOOL flag = [self canPropagateSelectedChildViewControllerTitle];
|
|
|
|
[coder encodeObject: [self tabView]]; // get tabview...
|
|
|
|
[coder encodeValueOfObjCType: @encode(BOOL)
|
|
|
|
at: &flag];
|
|
|
|
}
|
2020-07-23 17:30:05 +00:00
|
|
|
}
|
2020-07-23 11:13:48 +00:00
|
|
|
@end
|
|
|
|
|