From e8e65d95ffc3103486cffa94e0b22647fdbf6762 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20Paul=20K=C3=BChne?= Date: Sat, 20 Feb 2010 01:29:08 +0100 Subject: [PATCH] macosx dialog provider: moved UI widgets out of the interface implementation --- modules/gui/macosx_dialog_provider/Modules.am | 5 +- .../gui/macosx_dialog_provider/VLCUIWidgets.h | 77 ++++ .../gui/macosx_dialog_provider/VLCUIWidgets.m | 378 ++++++++++++++++ .../macosx_dialog_provider/dialogProvider.m | 402 +----------------- 4 files changed, 461 insertions(+), 401 deletions(-) create mode 100644 modules/gui/macosx_dialog_provider/VLCUIWidgets.h create mode 100644 modules/gui/macosx_dialog_provider/VLCUIWidgets.m diff --git a/modules/gui/macosx_dialog_provider/Modules.am b/modules/gui/macosx_dialog_provider/Modules.am index e274b0a676..fc7e68a761 100644 --- a/modules/gui/macosx_dialog_provider/Modules.am +++ b/modules/gui/macosx_dialog_provider/Modules.am @@ -6,9 +6,12 @@ LIBTOOL=@LIBTOOL@ --tag=CC SOURCES_macosx_dialog_provider = \ VLCLoginPanel.m \ VLCProgressPanel.m \ + VLCUIWidgets.m \ dialogProvider.m \ $(NULL) noinst_HEADERS = \ VLCLoginPanel.h \ - VLCProgressPanel.h + VLCProgressPanel.h \ + VLCUIWidgets.h \ + dialogProvider.h diff --git a/modules/gui/macosx_dialog_provider/VLCUIWidgets.h b/modules/gui/macosx_dialog_provider/VLCUIWidgets.h new file mode 100644 index 0000000000..70268bf1cf --- /dev/null +++ b/modules/gui/macosx_dialog_provider/VLCUIWidgets.h @@ -0,0 +1,77 @@ +/***************************************************************************** + * VLCUIWidgets.h: Widgets for VLC's Minimal Dialog Provider for Mac OS X + ***************************************************************************** + * Copyright (C) 2009-2010 the VideoLAN team + * $Id$ + * + * Authors: Pierre d'Herbemont + * + * This program 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#import +#import + +@interface VLCDialogButton : NSButton +{ + extension_widget_t *widget; +} +@property (readwrite) extension_widget_t *widget; +@end + + +@interface VLCDialogPopUpButton : NSPopUpButton +{ + extension_widget_t *widget; +} +@property (readwrite) extension_widget_t *widget; +@end + + +@interface VLCDialogTextField : NSTextField +{ + extension_widget_t *widget; +} +@property (readwrite) extension_widget_t *widget; +@end + + +@interface VLCDialogWindow : NSWindow +{ + extension_dialog_t *dialog; +} +@property (readwrite) extension_dialog_t *dialog; +@end + + +@interface VLCDialogList : NSTableView +{ + extension_widget_t *widget; + NSMutableArray *contentArray; +} +@property (readwrite) extension_widget_t *widget; +@property (readwrite, retain) NSMutableArray *contentArray; +@end + + +@interface VLCDialogGridView : NSView { + NSUInteger _rowCount, _colCount; + NSMutableArray *_gridedViews; +} + +- (void)addSubview:(NSView *)view atRow:(NSUInteger)row column:(NSUInteger)column rowSpan:(NSUInteger)rowSpan colSpan:(NSUInteger)colSpan; +- (NSSize)flexSize:(NSSize)size; +- (void)removeSubview:(NSView *)view; +@end \ No newline at end of file diff --git a/modules/gui/macosx_dialog_provider/VLCUIWidgets.m b/modules/gui/macosx_dialog_provider/VLCUIWidgets.m new file mode 100644 index 0000000000..96fb44623b --- /dev/null +++ b/modules/gui/macosx_dialog_provider/VLCUIWidgets.m @@ -0,0 +1,378 @@ +/***************************************************************************** + * VLCUIWidgets.m: Widgets for VLC's Minimal Dialog Provider for Mac OS X + ***************************************************************************** + * Copyright (C) 2009-2010 the VideoLAN team + * $Id$ + * + * Authors: Pierre d'Herbemont + * + * This program 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#import "VLCUIWidgets.h" + +@implementation VLCDialogButton +@synthesize widget; +@end + + +@implementation VLCDialogPopUpButton +@synthesize widget; +@end + + +@implementation VLCDialogTextField +@synthesize widget; +@end + + +@implementation VLCDialogWindow +@synthesize dialog; +@end + + +@implementation VLCDialogList +@synthesize widget; +@synthesize contentArray; + +- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView +{ + return [contentArray count]; +} + +- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex +{ + return [[contentArray objectAtIndex:rowIndex] objectForKey:@"text"]; +} +@end + + +@implementation VLCDialogGridView + +- (void)dealloc +{ + [_gridedViews release]; + [super dealloc]; +} + +- (void)recomputeCount +{ + _colCount = 0; + _rowCount = 0; + for (NSDictionary *obj in _gridedViews) + { + NSUInteger row = [[obj objectForKey:@"row"] intValue]; + NSUInteger col = [[obj objectForKey:@"col"] intValue]; + if (col + 1 > _colCount) + _colCount = col + 1; + if (row + 1 > _rowCount) + _rowCount = row + 1; + } +} + +- (void)recomputeWindowSize +{ + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(recomputeWindowSize) object:nil]; + + NSWindow *window = [self window]; + NSRect frame = [window frame]; + NSRect contentRect = [window contentRectForFrameRect:frame]; + contentRect.size = [self flexSize:frame.size]; + NSRect newFrame = [window frameRectForContentRect:contentRect]; + newFrame.origin.y -= newFrame.size.height - frame.size.height; + newFrame.origin.x -= (newFrame.size.width - frame.size.width) / 2; + [window setFrame:newFrame display:YES animate:YES]; +} + +- (NSSize)objectSizeToFit:(NSView *)view +{ + if ([view isKindOfClass:[NSControl class]]) { + NSControl *control = (NSControl *)view; + return [[control cell] cellSize]; + } + return [view frame].size; +} + +- (CGFloat)marginX +{ + return 16; +} +- (CGFloat)marginY +{ + return 8; +} + +- (CGFloat)constrainedHeightOfRow:(NSUInteger)targetRow +{ + CGFloat height = 0; + for(NSDictionary *obj in _gridedViews) { + NSUInteger row = [[obj objectForKey:@"row"] intValue]; + if (row != targetRow) + continue; + NSUInteger rowSpan = [[obj objectForKey:@"rowSpan"] intValue]; + if (rowSpan != 1) + continue; + NSView *view = [obj objectForKey:@"view"]; + if ([view autoresizingMask] & NSViewHeightSizable) + continue; + NSSize sizeToFit = [self objectSizeToFit:view]; + if (height < sizeToFit.height) + height = sizeToFit.height; + } + return height; +} + +- (CGFloat)remainingRowsHeight +{ + NSUInteger height = [self marginY]; + if (!_rowCount) + return 0; + NSUInteger autosizedRows = 0; + for (NSUInteger i = 0; i < _rowCount; i++) { + CGFloat constrainedHeight = [self constrainedHeightOfRow:i]; + if (!constrainedHeight) + autosizedRows++; + height += constrainedHeight + [self marginY]; + } + CGFloat remaining = 0; + if (height < self.bounds.size.height && autosizedRows) + remaining = (self.bounds.size.height - height) / autosizedRows; + if (remaining < 0) + remaining = 0; + + return remaining; +} + +- (CGFloat)heightOfRow:(NSUInteger)targetRow +{ + NSAssert(targetRow < _rowCount, @"accessing a non existing row"); + CGFloat height = [self constrainedHeightOfRow:targetRow]; + if (!height) + height = [self remainingRowsHeight]; + return height; +} + + +- (CGFloat)topOfRow:(NSUInteger)targetRow +{ + CGFloat top = [self marginY]; + for (NSUInteger i = 1; i < _rowCount - targetRow; i++) + { + top += [self heightOfRow:_rowCount - i] + [self marginY]; + } + return top; +} + +- (CGFloat)constrainedWidthOfColumn:(NSUInteger)targetColumn +{ + CGFloat width = 0; + for(NSDictionary *obj in _gridedViews) { + NSUInteger col = [[obj objectForKey:@"col"] intValue]; + if (col != targetColumn) + continue; + NSUInteger colSpan = [[obj objectForKey:@"colSpan"] intValue]; + if (colSpan != 1) + continue; + NSView *view = [obj objectForKey:@"view"]; + if ([view autoresizingMask] & NSViewWidthSizable) + return 0; + NSSize sizeToFit = [self objectSizeToFit:view]; + if (width < sizeToFit.width) + width = sizeToFit.width; + } + return width; +} + +- (CGFloat)remainingColumnWidth +{ + NSUInteger width = [self marginX]; + if (!_colCount) + return 0; + NSUInteger autosizedCol = 0; + for (NSUInteger i = 0; i < _colCount; i++) { + CGFloat constrainedWidth = [self constrainedWidthOfColumn:i]; + if (!constrainedWidth) + autosizedCol++; + width += constrainedWidth + [self marginX]; + + } + CGFloat remaining = 0; + if (width < self.bounds.size.width && autosizedCol) + remaining = (self.bounds.size.width - width) / autosizedCol; + if (remaining < 0) + remaining = 0; + return remaining; +} + +- (CGFloat)widthOfColumn:(NSUInteger)targetColumn +{ + CGFloat width = [self constrainedWidthOfColumn:targetColumn]; + if (!width) + width = [self remainingColumnWidth]; + return width; +} + + +- (CGFloat)leftOfColumn:(NSUInteger)targetColumn +{ + CGFloat left = [self marginX]; + for (NSUInteger i = 0; i < targetColumn; i++) + { + left += [self widthOfColumn:i] + [self marginX]; + + } + return left; +} + +- (void)relayout +{ + for(NSDictionary *obj in _gridedViews) { + NSUInteger row = [[obj objectForKey:@"row"] intValue]; + NSUInteger col = [[obj objectForKey:@"col"] intValue]; + NSUInteger rowSpan = [[obj objectForKey:@"rowSpan"] intValue]; + NSUInteger colSpan = [[obj objectForKey:@"colSpan"] intValue]; + NSView *view = [obj objectForKey:@"view"]; + NSRect rect; + + // Get the height + if ([view autoresizingMask] & NSViewHeightSizable || rowSpan > 1) { + CGFloat height = 0; + for (NSUInteger r = 0; r < rowSpan; r++) { + if (row + r >= _rowCount) + break; + height += [self heightOfRow:row + r] + [self marginY]; + } + rect.size.height = height - [self marginY]; + } + else + rect.size.height = [self objectSizeToFit:view].height; + + // Get the width + if ([view autoresizingMask] & NSViewWidthSizable) { + CGFloat width = 0; + for (NSUInteger c = 0; c < colSpan; c++) + width += [self widthOfColumn:col + c] + [self marginX]; + rect.size.width = width - [self marginX]; + } + else + rect.size.width = [self objectSizeToFit:view].width; + + // Top corner + rect.origin.y = [self topOfRow:row] + ([self heightOfRow:row] - rect.size.height) / 2; + rect.origin.x = [self leftOfColumn:col]; + + [view setFrame:rect]; + [view setNeedsDisplay:YES]; + } +} + +- (NSMutableDictionary *)objectForView:(NSView *)view +{ + for (NSMutableDictionary *dict in _gridedViews) + { + if ([dict objectForKey:@"view"] == view) + return dict; + } + return nil; +} + +- (void)addSubview:(NSView *)view atRow:(NSUInteger)row column:(NSUInteger)column rowSpan:(NSUInteger)rowSpan colSpan:(NSUInteger)colSpan +{ + if (row + 1 > _rowCount) + _rowCount = row + 1; + if (column + 1 > _colCount) + _colCount = column + 1; + + if (!_gridedViews) + _gridedViews = [[NSMutableArray alloc] init]; + + NSMutableDictionary *dict = [self objectForView:view]; + if (!dict) { + dict = [NSMutableDictionary dictionary]; + [dict setObject:view forKey:@"view"]; + [_gridedViews addObject:dict]; + } + [dict setObject:[NSNumber numberWithInt:rowSpan] forKey:@"rowSpan"]; + [dict setObject:[NSNumber numberWithInt:colSpan] forKey:@"colSpan"]; + [dict setObject:[NSNumber numberWithInt:row] forKey:@"row"]; + [dict setObject:[NSNumber numberWithInt:column] forKey:@"col"]; + + + [self addSubview:view]; + [self relayout]; + + // Recompute the size of the window after making sure we won't see anymore update + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(recomputeWindowSize) object:nil]; + [self performSelector:@selector(recomputeWindowSize) withObject:nil afterDelay:0.1]; +} + +- (void)removeSubview:(NSView *)view +{ + NSDictionary *dict = [self objectForView:view]; + if (dict) + [_gridedViews removeObject:dict]; + [view removeFromSuperview]; + + [self recomputeCount]; + [self recomputeWindowSize]; + + [self relayout]; + [self setNeedsDisplay:YES]; +} + +- (void)setFrame:(NSRect)frameRect +{ + [super setFrame:frameRect]; + [self relayout]; +} + +- (NSSize)flexSize:(NSSize)size +{ + if (!_rowCount || !_colCount) + return size; + + CGFloat minHeight = [self marginY]; + BOOL canFlexHeight = NO; + for (NSUInteger i = 0; i < _rowCount; i++) { + CGFloat constrained = [self constrainedHeightOfRow:i]; + if (!constrained) { + canFlexHeight = YES; + constrained = 128; + } + minHeight += constrained + [self marginY]; + } + + CGFloat minWidth = [self marginX]; + BOOL canFlexWidth = NO; + for (NSUInteger i = 0; i < _colCount; i++) { + CGFloat constrained = [self constrainedWidthOfColumn:i]; + if (!constrained) { + canFlexWidth = YES; + constrained = 128; + } + minWidth += constrained + [self marginX]; + } + if (size.width < minWidth) + size.width = minWidth; + if (size.height < minHeight) + size.height = minHeight; + if (!canFlexHeight) + size.height = minHeight; + if (!canFlexWidth) + size.width = minWidth; + return size; +} + +@end diff --git a/modules/gui/macosx_dialog_provider/dialogProvider.m b/modules/gui/macosx_dialog_provider/dialogProvider.m index b60dfd51ff..113f60a845 100644 --- a/modules/gui/macosx_dialog_provider/dialogProvider.m +++ b/modules/gui/macosx_dialog_provider/dialogProvider.m @@ -38,6 +38,7 @@ #import #import "dialogProvider.h" +#import "VLCUIWidgets.h" /***************************************************************************** * Prototypes @@ -57,405 +58,6 @@ static void updateProgressPanel (void *, const char *, float); static bool checkProgressPanel (void *); static void destroyProgressPanel (void *); -@interface VLCDialogButton : NSButton -{ - extension_widget_t *widget; -} -@property (readwrite) extension_widget_t *widget; -@end - -@implementation VLCDialogButton -@synthesize widget; -@end - -@interface VLCDialogPopUpButton : NSPopUpButton -{ - extension_widget_t *widget; -} -@property (readwrite) extension_widget_t *widget; -@end - -@implementation VLCDialogPopUpButton -@synthesize widget; -@end - - -@interface VLCDialogTextField : NSTextField -{ - extension_widget_t *widget; -} -@property (readwrite) extension_widget_t *widget; -@end - -@implementation VLCDialogTextField -@synthesize widget; -@end - -@interface VLCDialogWindow : NSWindow -{ - extension_dialog_t *dialog; -} -@property (readwrite) extension_dialog_t *dialog; -@end - -@implementation VLCDialogWindow -@synthesize dialog; -@end - - -@interface VLCDialogList : NSTableView -{ - extension_widget_t *widget; - NSMutableArray *contentArray; -} -@property (readwrite) extension_widget_t *widget; -@property (readwrite, retain) NSMutableArray *contentArray; -@end - -@implementation VLCDialogList -@synthesize widget; -@synthesize contentArray; - -- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView -{ - return [contentArray count]; -} - -- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex -{ - return [[contentArray objectAtIndex:rowIndex] objectForKey:@"text"]; -} -@end - -@interface VLCDialogGridView : NSView { - NSUInteger _rowCount, _colCount; - NSMutableArray *_gridedViews; -} - -- (NSSize)flexSize:(NSSize)size; -- (void)removeSubview:(NSView *)view; -@end - - -// Move this to separate file -@implementation VLCDialogGridView - -- (void)dealloc -{ - [_gridedViews release]; - [super dealloc]; -} - -- (void)recomputeCount -{ - _colCount = 0; - _rowCount = 0; - for (NSDictionary *obj in _gridedViews) - { - NSUInteger row = [[obj objectForKey:@"row"] intValue]; - NSUInteger col = [[obj objectForKey:@"col"] intValue]; - if (col + 1 > _colCount) - _colCount = col + 1; - if (row + 1 > _rowCount) - _rowCount = row + 1; - } -} - -- (void)recomputeWindowSize -{ - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(recomputeWindowSize) object:nil]; - - NSWindow *window = [self window]; - NSRect frame = [window frame]; - NSRect contentRect = [window contentRectForFrameRect:frame]; - contentRect.size = [self flexSize:frame.size]; - NSRect newFrame = [window frameRectForContentRect:contentRect]; - newFrame.origin.y -= newFrame.size.height - frame.size.height; - newFrame.origin.x -= (newFrame.size.width - frame.size.width) / 2; - [window setFrame:newFrame display:YES animate:YES]; -} - -- (NSSize)objectSizeToFit:(NSView *)view -{ - if ([view isKindOfClass:[NSControl class]]) { - NSControl *control = (NSControl *)view; - return [[control cell] cellSize]; - } - return [view frame].size; -} - -- (CGFloat)marginX -{ - return 16; -} -- (CGFloat)marginY -{ - return 8; -} - -- (CGFloat)constrainedHeightOfRow:(NSUInteger)targetRow -{ - CGFloat height = 0; - for(NSDictionary *obj in _gridedViews) { - NSUInteger row = [[obj objectForKey:@"row"] intValue]; - if (row != targetRow) - continue; - NSUInteger rowSpan = [[obj objectForKey:@"rowSpan"] intValue]; - if (rowSpan != 1) - continue; - NSView *view = [obj objectForKey:@"view"]; - if ([view autoresizingMask] & NSViewHeightSizable) - continue; - NSSize sizeToFit = [self objectSizeToFit:view]; - if (height < sizeToFit.height) - height = sizeToFit.height; - } - return height; -} - -- (CGFloat)remainingRowsHeight -{ - NSUInteger height = [self marginY]; - if (!_rowCount) - return 0; - NSUInteger autosizedRows = 0; - for (NSUInteger i = 0; i < _rowCount; i++) { - CGFloat constrainedHeight = [self constrainedHeightOfRow:i]; - if (!constrainedHeight) - autosizedRows++; - height += constrainedHeight + [self marginY]; - } - CGFloat remaining = 0; - if (height < self.bounds.size.height && autosizedRows) - remaining = (self.bounds.size.height - height) / autosizedRows; - if (remaining < 0) - remaining = 0; - - return remaining; -} - -- (CGFloat)heightOfRow:(NSUInteger)targetRow -{ - NSAssert(targetRow < _rowCount, @"accessing a non existing row"); - CGFloat height = [self constrainedHeightOfRow:targetRow]; - if (!height) - height = [self remainingRowsHeight]; - return height; -} - - -- (CGFloat)topOfRow:(NSUInteger)targetRow -{ - CGFloat top = [self marginY]; - for (NSUInteger i = 1; i < _rowCount - targetRow; i++) - { - top += [self heightOfRow:_rowCount - i] + [self marginY]; - } - return top; -} - -- (CGFloat)constrainedWidthOfColumn:(NSUInteger)targetColumn -{ - CGFloat width = 0; - for(NSDictionary *obj in _gridedViews) { - NSUInteger col = [[obj objectForKey:@"col"] intValue]; - if (col != targetColumn) - continue; - NSUInteger colSpan = [[obj objectForKey:@"colSpan"] intValue]; - if (colSpan != 1) - continue; - NSView *view = [obj objectForKey:@"view"]; - if ([view autoresizingMask] & NSViewWidthSizable) - return 0; - NSSize sizeToFit = [self objectSizeToFit:view]; - if (width < sizeToFit.width) - width = sizeToFit.width; - } - return width; -} - -- (CGFloat)remainingColumnWidth -{ - NSUInteger width = [self marginX]; - if (!_colCount) - return 0; - NSUInteger autosizedCol = 0; - for (NSUInteger i = 0; i < _colCount; i++) { - CGFloat constrainedWidth = [self constrainedWidthOfColumn:i]; - if (!constrainedWidth) - autosizedCol++; - width += constrainedWidth + [self marginX]; - - } - CGFloat remaining = 0; - if (width < self.bounds.size.width && autosizedCol) - remaining = (self.bounds.size.width - width) / autosizedCol; - if (remaining < 0) - remaining = 0; - return remaining; -} - -- (CGFloat)widthOfColumn:(NSUInteger)targetColumn -{ - CGFloat width = [self constrainedWidthOfColumn:targetColumn]; - if (!width) - width = [self remainingColumnWidth]; - return width; -} - - -- (CGFloat)leftOfColumn:(NSUInteger)targetColumn -{ - CGFloat left = [self marginX]; - for (NSUInteger i = 0; i < targetColumn; i++) - { - left += [self widthOfColumn:i] + [self marginX]; - - } - return left; -} - -- (void)relayout -{ - for(NSDictionary *obj in _gridedViews) { - NSUInteger row = [[obj objectForKey:@"row"] intValue]; - NSUInteger col = [[obj objectForKey:@"col"] intValue]; - NSUInteger rowSpan = [[obj objectForKey:@"rowSpan"] intValue]; - NSUInteger colSpan = [[obj objectForKey:@"colSpan"] intValue]; - NSView *view = [obj objectForKey:@"view"]; - NSRect rect; - - // Get the height - if ([view autoresizingMask] & NSViewHeightSizable || rowSpan > 1) { - CGFloat height = 0; - for (NSUInteger r = 0; r < rowSpan; r++) { - if (row + r >= _rowCount) - break; - height += [self heightOfRow:row + r] + [self marginY]; - } - rect.size.height = height - [self marginY]; - } - else - rect.size.height = [self objectSizeToFit:view].height; - - // Get the width - if ([view autoresizingMask] & NSViewWidthSizable) { - CGFloat width = 0; - for (NSUInteger c = 0; c < colSpan; c++) - width += [self widthOfColumn:col + c] + [self marginX]; - rect.size.width = width - [self marginX]; - } - else - rect.size.width = [self objectSizeToFit:view].width; - - // Top corner - rect.origin.y = [self topOfRow:row] + ([self heightOfRow:row] - rect.size.height) / 2; - rect.origin.x = [self leftOfColumn:col]; - - [view setFrame:rect]; - [view setNeedsDisplay:YES]; - } -} - -- (NSMutableDictionary *)objectForView:(NSView *)view -{ - for (NSMutableDictionary *dict in _gridedViews) - { - if ([dict objectForKey:@"view"] == view) - return dict; - } - return nil; -} - -- (void)addSubview:(NSView *)view atRow:(NSUInteger)row column:(NSUInteger)column rowSpan:(NSUInteger)rowSpan colSpan:(NSUInteger)colSpan -{ - if (row + 1 > _rowCount) - _rowCount = row + 1; - if (column + 1 > _colCount) - _colCount = column + 1; - - if (!_gridedViews) - _gridedViews = [[NSMutableArray alloc] init]; - - NSMutableDictionary *dict = [self objectForView:view]; - if (!dict) { - dict = [NSMutableDictionary dictionary]; - [dict setObject:view forKey:@"view"]; - [_gridedViews addObject:dict]; - } - [dict setObject:[NSNumber numberWithInt:rowSpan] forKey:@"rowSpan"]; - [dict setObject:[NSNumber numberWithInt:colSpan] forKey:@"colSpan"]; - [dict setObject:[NSNumber numberWithInt:row] forKey:@"row"]; - [dict setObject:[NSNumber numberWithInt:column] forKey:@"col"]; - - - [self addSubview:view]; - [self relayout]; - - // Recompute the size of the window after making sure we won't see anymore update - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(recomputeWindowSize) object:nil]; - [self performSelector:@selector(recomputeWindowSize) withObject:nil afterDelay:0.1]; -} - -- (void)removeSubview:(NSView *)view -{ - NSDictionary *dict = [self objectForView:view]; - if (dict) - [_gridedViews removeObject:dict]; - [view removeFromSuperview]; - - [self recomputeCount]; - [self recomputeWindowSize]; - - [self relayout]; - [self setNeedsDisplay:YES]; -} - -- (void)setFrame:(NSRect)frameRect -{ - [super setFrame:frameRect]; - [self relayout]; -} - -- (NSSize)flexSize:(NSSize)size -{ - if (!_rowCount || !_colCount) - return size; - - CGFloat minHeight = [self marginY]; - BOOL canFlexHeight = NO; - for (NSUInteger i = 0; i < _rowCount; i++) { - CGFloat constrained = [self constrainedHeightOfRow:i]; - if (!constrained) { - canFlexHeight = YES; - constrained = 128; - } - minHeight += constrained + [self marginY]; - } - - CGFloat minWidth = [self marginX]; - BOOL canFlexWidth = NO; - for (NSUInteger i = 0; i < _colCount; i++) { - CGFloat constrained = [self constrainedWidthOfColumn:i]; - if (!constrained) { - canFlexWidth = YES; - constrained = 128; - } - minWidth += constrained + [self marginX]; - } - if (size.width < minWidth) - size.width = minWidth; - if (size.height < minHeight) - size.height = minHeight; - if (!canFlexHeight) - size.height = minHeight; - if (!canFlexWidth) - size.width = minWidth; - return size; -} - -@end - static inline NSDictionary *DictFromDialogFatal(dialog_fatal_t *dialog) { return [VLCDialogDisplayer dictionaryForDialog:dialog->title :dialog->message :NULL :NULL :NULL]; @@ -875,7 +477,7 @@ bool checkProgressPanel (void *priv) config_PutPsz(p_intf, "lastfm-username", [lastFMUsername UTF8String]); config_PutPsz(p_intf, "lastfm-password", [lastFMPassword UTF8String]); - config_SaveConfigFile( p_intf, "main" ); + config_SaveConfigFile(p_intf, "main"); config_SaveConfigFile(p_intf, "audioscrobbler"); } else -- 2.39.5