From 570a2a56ffa25db172f2b2ab04b3ac74778eb7b7 Mon Sep 17 00:00:00 2001 From: cacaodev Date: Mon, 21 Sep 2009 22:05:42 +0200 Subject: [PATCH] Added sample app. Corrected style (tabs) --- AppKit/CPApplication.j | 42 +++--- AppKit/CPWindow/CPWindow.j | 129 +++++++++--------- AppKit/CPWindow/_CPDocModalWindowView.j | 8 +- Tests/AppKit/AttachedSheet/AppController.j | 84 ++++++++++++ Tests/AppKit/AttachedSheet/Info.plist | 12 ++ Tests/AppKit/AttachedSheet/Rakefile | 25 ++++ .../AttachedSheet/Resources/spinner.gif | Bin 0 -> 1849 bytes Tests/AppKit/AttachedSheet/index-debug.html | 83 +++++++++++ Tests/AppKit/AttachedSheet/index.html | 69 ++++++++++ Tests/AppKit/AttachedSheet/main.j | 18 +++ 10 files changed, 380 insertions(+), 90 deletions(-) create mode 100644 Tests/AppKit/AttachedSheet/AppController.j create mode 100644 Tests/AppKit/AttachedSheet/Info.plist create mode 100644 Tests/AppKit/AttachedSheet/Rakefile create mode 100644 Tests/AppKit/AttachedSheet/Resources/spinner.gif create mode 100644 Tests/AppKit/AttachedSheet/index-debug.html create mode 100644 Tests/AppKit/AttachedSheet/index.html create mode 100755 Tests/AppKit/AttachedSheet/main.j diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j index 626d36718..72f88a420 100644 --- a/AppKit/CPApplication.j +++ b/AppKit/CPApplication.j @@ -719,32 +719,32 @@ CPRunContinuesResponse = -1002; */ - (void)beginSheet:(CPWindow)aSheet modalForWindow:(CPWindow)aWindow modalDelegate:(id)aModalDelegate didEndSelector:(SEL)aDidEndSelector contextInfo:(id)aContextInfo { - var styleMask = [aSheet styleMask]; - if (!(styleMask & CPDocModalWindowMask)) - { - [CPException raise:CPInternalInconsistencyException reason:@"Currently only CPDocModalWindowMask style mask is supported for attached sheets"]; - return; - } - + var styleMask = [aSheet styleMask]; + if (!(styleMask & CPDocModalWindowMask)) + { + [CPException raise:CPInternalInconsistencyException reason:@"Currently only CPDocModalWindowMask style mask is supported for attached sheets"]; + return; + } + [aWindow _attachSheet:aSheet modalDelegate:aModalDelegate didEndSelector:aDidEndSelector contextInfo:aContextInfo]; } - (void)endSheet:(CPWindow)sheet returnCode:(int)returnCode { - var count = [_windows count]; - - while (--count >= 0) - { - var aWindow = [_windows objectAtIndex:count]; - var context = aWindow._sheetContext; - - if (context != nil && context["sheet"] === sheet) - { - context["returnCode"] = returnCode; - [aWindow _detachSheetWindow]; - return; - } - } + var count = [_windows count]; + + while (--count >= 0) + { + var aWindow = [_windows objectAtIndex:count]; + var context = aWindow._sheetContext; + + if (context != nil && context["sheet"] === sheet) + { + context["returnCode"] = returnCode; + [aWindow _detachSheetWindow]; + return; + } + } } - (void)endSheet:(CPWindow)sheet diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index a341b0852..6019bd4f6 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -310,7 +310,7 @@ var CPWindowSaveImage = nil, BOOL _isFullPlatformWindow; _CPWindowFullPlatformWindowSession _fullPlatformWindowSession; - CPDictionary _sheetContext; + CPDictionary _sheetContext; } /* @@ -443,7 +443,7 @@ CPTexturedBackgroundWindowMask return _CPBorderlessWindowView; else if (aStyleMask & CPDocModalWindowMask) - return _CPDocModalWindowView; + return _CPDocModalWindowView; return _CPStandardWindowView; } @@ -1729,11 +1729,11 @@ CPTexturedBackgroundWindowMask - (void)_setFrame:(CGRect)aFrame delegate:(id)delegate duration:(int)duration curve:(CPAnimationCurve)curve { - var animation = [[_CPWindowFrameAnimation alloc] initWithWindow:self targetFrame:aFrame]; - [animation setDelegate:delegate]; - [animation setAnimationCurve:curve]; - [animation setDuration:duration]; - [animation startAnimation]; + var animation = [[_CPWindowFrameAnimation alloc] initWithWindow:self targetFrame:aFrame]; + [animation setDelegate:delegate]; + [animation setAnimationCurve:curve]; + [animation setDuration:duration]; + [animation startAnimation]; } /* @ignore */ @@ -1744,60 +1744,60 @@ CPTexturedBackgroundWindowMask var contentRect = [[self contentView] frame], sheetFrame = CGRectMakeCopy([attachedSheet frame]); - sheetFrame.origin.y = CGRectGetMinY(_frame) + CGRectGetMinY(contentRect); - sheetFrame.origin.x = CGRectGetMinX(_frame) + FLOOR((CGRectGetWidth(_frame) - CGRectGetWidth(sheetFrame)) / 2.0); + sheetFrame.origin.y = CGRectGetMinY(_frame) + CGRectGetMinY(contentRect); + sheetFrame.origin.x = CGRectGetMinX(_frame) + FLOOR((CGRectGetWidth(_frame) - CGRectGetWidth(sheetFrame)) / 2.0); - [attachedSheet setFrameOrigin:sheetFrame.origin]; + [attachedSheet setFrameOrigin:sheetFrame.origin]; } /* @ignore */ - (void)_attachSheet:(CPWindow)aSheet modalDelegate:(id)aModalDelegate didEndSelector:(SEL)aDidEndSelector contextInfo:(id)aContextInfo { - var sheetFrame = [aSheet frame]; + var sheetFrame = [aSheet frame]; // setup contexts - _sheetContext = {"sheet":aSheet, "modalDelegate":aModalDelegate, "endSelector":aDidEndSelector, "contextInfo":aContextInfo, "frame":CGRectMakeCopy(sheetFrame), "returnCode":-1, "opened": NO}; - - [self _attachSheetWindow:aSheet]; + _sheetContext = {"sheet":aSheet, "modalDelegate":aModalDelegate, "endSelector":aDidEndSelector, "contextInfo":aContextInfo, "frame":CGRectMakeCopy(sheetFrame), "returnCode":-1, "opened": NO}; + + [self _attachSheetWindow:aSheet]; } /* @ignore */ - (void)_attachSheetWindow:(CPWindow)aSheet { var sheetFrame = [aSheet frame], - frame = [self frame], - sheetContent = [aSheet contentView]; + frame = [self frame], + sheetContent = [aSheet contentView]; // Configure sheet. // if ([aSheet styleMask] & CPHUDBackgroundWindowMask) -// [aSheet setMovableByWindowBackground:NO]; +// [aSheet setMovableByWindowBackground:NO]; - _sheetContext["autoresizingMask"] = [sheetContent autoresizingMask]; + _sheetContext["autoresizingMask"] = [sheetContent autoresizingMask]; [sheetContent setAutoresizingMask:CPViewMinYMargin]; [sheetContent setAutoresizesSubviews:NO]; aSheet._isSheet = YES; aSheet._parentView = self; // calculate start/end frames - var originx = frame.origin.x + FLOOR((frame.size.width - sheetFrame.size.width)/2); - var originy = frame.origin.y + [[self contentView] frame].origin.y; - var startFrame = CGRectMake(originx, originy , sheetFrame.size.width, 0); - var endFrame = CGRectMake(originx, originy ,sheetFrame.size.width,sheetFrame.size.height); + var originx = frame.origin.x + FLOOR((frame.size.width - sheetFrame.size.width)/2); + var originy = frame.origin.y + [[self contentView] frame].origin.y; + var startFrame = CGRectMake(originx, originy, sheetFrame.size.width, 0); + var endFrame = CGRectMake(originx, originy, sheetFrame.size.width, sheetFrame.size.height); // Notify the world we will open the sheet [[CPNotificationCenter defaultCenter] postNotificationName:@"CPWindowWillBeginSheetNotification" object:self]; // Start modal - [CPApp runModalForWindow:aSheet]; - + [CPApp runModalForWindow:aSheet]; + // Order front and animate the sheet -// aSheet._isAnimating = YES; +// aSheet._isAnimating = YES; [aSheet orderFront:self]; [aSheet setFrame:startFrame]; _sheetContext["opened"] = YES; [aSheet _setFrame:endFrame delegate:self duration:0.3 curve:CPAnimationEaseOut]; - // Should run the main loop here until _isAnimating = FALSE + // Should run the main loop here until _isAnimating = FALSE [aSheet becomeKeyWindow]; } @@ -1812,61 +1812,60 @@ CPTexturedBackgroundWindowMask endFrame.size.height = 0; // Set the new frame in case the sheet have been resized - _sheetContext["frame"] = startFrame; - + _sheetContext["frame"] = startFrame; + // Autoresizing - var sheetContent = [sheet contentView]; + var sheetContent = [sheet contentView]; [sheetContent setAutoresizingMask:CPViewMinYMargin]; [sheetContent setAutoresizesSubviews:NO]; - + + _sheetContext["opened"] = NO; // Start animation with delegate - _sheetContext["opened"] = NO; - - [sheet _setFrame:endFrame delegate:self duration:0.2 curve:CPAnimationLinear]; + [sheet _setFrame:endFrame delegate:self duration:0.2 curve:CPAnimationLinear]; } /* @ignore */ - (void)animationDidEnd:(id)anim { - var sheet = _sheetContext["sheet"]; - if (anim._window != sheet) - return; + var sheet = _sheetContext["sheet"]; + if (anim._window != sheet) + return; // Retore autoresizing - var sheetContent = [sheet contentView]; - [sheetContent setAutoresizingMask:_sheetContext["autoresizingMask"]]; - [sheetContent setAutoresizesSubviews:YES]; + var sheetContent = [sheet contentView]; + [sheetContent setAutoresizingMask:_sheetContext["autoresizingMask"]]; + [sheetContent setAutoresizesSubviews:YES]; -// If we are opened return now - if (_sheetContext["opened"] == YES) - return; - +// If we are opened return now + if (_sheetContext["opened"] === YES) + return; + // Stop modal - [CPApp stopModal]; - + [CPApp stopModal]; + // Notify the world we closed the sheet - [[CPNotificationCenter defaultCenter] postNotificationName:@"CPWindowDidEndSheetNotification" object:self]; + [[CPNotificationCenter defaultCenter] postNotificationName:@"CPWindowDidEndSheetNotification" object:self]; // check first if front ? - [sheet orderOut:self]; + [sheet orderOut:self]; // Set the sheet frame to its last open state. - var lastFrame = _sheetContext["frame"]; - [sheet setFrame:lastFrame]; - -// Send didEndSelector - var delegate = _sheetContext["modalDelegate"]; - var endSelector = _sheetContext["endSelector"]; - if(delegate != nil && endSelector != nil) - objj_msgSend(_sheetContext["modalDelegate"], - _sheetContext["endSelector"], - sheet, - _sheetContext["returnCode"], - _sheetContext["contextInfo"]); - + var lastFrame = _sheetContext["frame"]; + [sheet setFrame:lastFrame]; + +// Send didEndSelector + var delegate = _sheetContext["modalDelegate"]; + var endSelector = _sheetContext["endSelector"]; + if (delegate != nil && endSelector != nil) + objj_msgSend(_sheetContext["modalDelegate"], + _sheetContext["endSelector"], + sheet, + _sheetContext["returnCode"], + _sheetContext["contextInfo"]); + // reset contexts - _sheetContext = nil; - sheet._parentView = nil; + _sheetContext = nil; + sheet._parentView = nil; } /*! @@ -1874,9 +1873,9 @@ CPTexturedBackgroundWindowMask */ - (CPWindow)attachedSheet { - if (_sheetContext == nil) - return nil; - + if (_sheetContext === nil) + return nil; + return _sheetContext["sheet"]; } diff --git a/AppKit/CPWindow/_CPDocModalWindowView.j b/AppKit/CPWindow/_CPDocModalWindowView.j index af233e84d..9db0ee9c7 100644 --- a/AppKit/CPWindow/_CPDocModalWindowView.j +++ b/AppKit/CPWindow/_CPDocModalWindowView.j @@ -5,7 +5,7 @@ var _CPStandardWindowViewBodyBackgroundColor = nil; @implementation _CPDocModalWindowView : _CPWindowView { - CPView _bodyView; + CPView _bodyView; } + (CPColor)bodyBackgroundColor @@ -22,9 +22,9 @@ var _CPStandardWindowViewBodyBackgroundColor = nil; if (self) { - var theClass = [self class], + var theClass = [self class], bounds = [self bounds]; - + _bodyView = [[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, CGRectGetWidth(bounds), CGRectGetHeight(bounds))]; [_bodyView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; @@ -34,7 +34,7 @@ var _CPStandardWindowViewBodyBackgroundColor = nil; [self addSubview:_bodyView]; } - return self; + return self; } - (CGRect)contentRectForFrameRect:(CGRect)aFrameRect diff --git a/Tests/AppKit/AttachedSheet/AppController.j b/Tests/AppKit/AttachedSheet/AppController.j new file mode 100644 index 000000000..e40c804b6 --- /dev/null +++ b/Tests/AppKit/AttachedSheet/AppController.j @@ -0,0 +1,84 @@ +/* + * AppController.j + * AttachedSheet + * + * Created by Cacaodev on August 1, 2009. + * Copyright 2009, Your Company All rights reserved. + */ + +@import + +@implementation AppController : CPObject +{ + CPWindow window; + CPWindow sheet; + CPTextField textField; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + window = [[CPWindow alloc] initWithContentRect:CGRectMake(100,100,500,300) styleMask:CPResizableWindowMask], + contentView = [window contentView]; + + sheet = [[CPWindow alloc] initWithContentRect:CGRectMake(0,0,300,100) styleMask:CPDocModalWindowMask|CPResizableWindowMask]; + // [sheet setMinSize:CGSizeMake(300,100)]; + + var sheetContent = [sheet contentView]; + + textField = [[CPTextField alloc] initWithFrame:CGRectMake(10,30,280,30)]; + [textField setEditable:YES]; + [textField setBezeled:YES]; + [textField setAutoresizingMask:CPViewMinYMargin|CPViewWidthSizable]; + + var okButton = [[CPButton alloc] initWithFrame:CGRectMake(230,70,50,24)]; + [okButton setTitle:"OK"]; + [okButton setTarget:self]; + [okButton setTag:1]; + [okButton setAction:@selector(closeSheet:)]; + [okButton setAutoresizingMask:CPViewMinXMargin|CPViewMinYMargin]; + + var cancelButton = [[CPButton alloc] initWithFrame:CGRectMake(120,70,100,24)]; + [cancelButton setTitle:"Cancel"]; + [cancelButton setTarget:self]; + [cancelButton setTag:0]; + [cancelButton setAction:@selector(closeSheet:)]; + [cancelButton setAutoresizingMask:CPViewMinXMargin|CPViewMinYMargin]; + + [sheetContent addSubview:textField]; + [sheetContent addSubview:okButton]; + [sheetContent addSubview:cancelButton]; + + var displayButton = [[CPButton alloc] initWithFrame:CGRectMake(200,150,100,24)]; + [displayButton setTitle:"Display Sheet"]; + [displayButton setTarget:self]; + [displayButton setAction:@selector(displaySheet:)]; + + [contentView addSubview:displayButton]; + [window orderFront:self] +} + +- (void)displaySheet:(id)sender +{ + [textField setStringValue:""]; + [sheet makeFirstResponder:textField]; + + [CPApp beginSheet:sheet modalForWindow:window modalDelegate:self didEndSelector:@selector(didEndSheet:returnCode:contextInfo:) contextInfo:nil]; +} + +- (void)closeSheet:(id)sender +{ + [CPApp endSheet:sheet returnCode:[sender tag]]; +} + +- (void)didEndSheet:(CPWindow)sheet returnCode:(int)returnCode contextInfo:(id)contextInfo +{ + var str = [textField stringValue]; + + [sheet orderOut:self]; + if (returnCode == CPOKButton && [str length] > 0) + { + [window setTitle:str]; + } +} + +@end \ No newline at end of file diff --git a/Tests/AppKit/AttachedSheet/Info.plist b/Tests/AppKit/AttachedSheet/Info.plist new file mode 100644 index 000000000..143e86dbd --- /dev/null +++ b/Tests/AppKit/AttachedSheet/Info.plist @@ -0,0 +1,12 @@ + + + + + CPApplicationDelegateClass + AppController + CPBundleName + FullOfSheet + CPPrincipalClass + CPApplication + + diff --git a/Tests/AppKit/AttachedSheet/Rakefile b/Tests/AppKit/AttachedSheet/Rakefile new file mode 100644 index 000000000..3fc1dbfa1 --- /dev/null +++ b/Tests/AppKit/AttachedSheet/Rakefile @@ -0,0 +1,25 @@ + +require 'objective-j' +require 'objective-j/bundletask' + +if !ENV['CONFIG'] + ENV['CONFIG'] = 'Debug' +end + +ObjectiveJ::BundleTask.new(:SplitView) do |t| + t.name = 'SplitView' + t.identifier = 'com.yourcompany.SplitView' + t.version = '1.0' + t.author = 'Your Company' + t.email = 'feedback @nospam@ yourcompany.com' + t.summary = 'SplitView' + t.sources = FileList['*.j'] + t.resources = FileList['Resources/*'] + t.index_file = 'index.html' + t.info_plist = 'Info.plist' + t.build_path = File.join('Build', ENV['CONFIG'], 'SplitView') + t.flag = '-DDEBUG' if ENV['CONFIG'] == 'Debug' + t.flag = '-O' if ENV['CONFIG'] == 'Release' +end + +task :default => [:SplitView] diff --git a/Tests/AppKit/AttachedSheet/Resources/spinner.gif b/Tests/AppKit/AttachedSheet/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..06dbc2bc21dddcf0e09b566d5b211aee89570f52 GIT binary patch literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/Tests/AppKit/AttachedSheet/index-debug.html b/Tests/AppKit/AttachedSheet/index-debug.html new file mode 100644 index 000000000..12093852b --- /dev/null +++ b/Tests/AppKit/AttachedSheet/index-debug.html @@ -0,0 +1,83 @@ + + + + + + + + Untitled + + + + + + + + + + + + + +
+ + + +
+ + + diff --git a/Tests/AppKit/AttachedSheet/index.html b/Tests/AppKit/AttachedSheet/index.html new file mode 100644 index 000000000..d44a75d39 --- /dev/null +++ b/Tests/AppKit/AttachedSheet/index.html @@ -0,0 +1,69 @@ + + + + + + + + Attached Sheet + + + + + + + + + + + + +
+ + + +
+ + + + diff --git a/Tests/AppKit/AttachedSheet/main.j b/Tests/AppKit/AttachedSheet/main.j new file mode 100755 index 000000000..b67c4550b --- /dev/null +++ b/Tests/AppKit/AttachedSheet/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * SplitView + * + * Created by You on August 1, 2009. + * Copyright 2009, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +}