From a02a149dc26a380f5ee09dcaf08bd5e72922a6a5 Mon Sep 17 00:00:00 2001 From: Bjorn Winckler Date: Sun, 29 Jul 2007 18:01:14 +0000 Subject: [PATCH] - Added registering of user defaults, supported defaults: nowindow, tabminwidth, tabmaxwidth, taboptimumwidth, statuslineoff - Implemented hiding of status line via user default 'statuslineoff' git-svn-id: http://macvim.googlecode.com/svn/trunk@37 96c4425d-ca35-0410-94e5-3396d5c13a8f --- English.lproj/VimWindow.nib/classes.nib | 1 + English.lproj/VimWindow.nib/keyedobjects.nib | Bin 5460 -> 5543 bytes MMAppController.h | 8 ++++++ MMAppController.m | 24 ++++++++++++++++- MMWindowController.h | 1 + MMWindowController.m | 27 +++++++++++++------ 6 files changed, 52 insertions(+), 9 deletions(-) diff --git a/English.lproj/VimWindow.nib/classes.nib b/English.lproj/VimWindow.nib/classes.nib index 368d0f93b8..0757bf563a 100644 --- a/English.lproj/VimWindow.nib/classes.nib +++ b/English.lproj/VimWindow.nib/classes.nib @@ -6,6 +6,7 @@ CLASS = MMWindowController; LANGUAGE = ObjC; OUTLETS = { + statusSeparator = NSBox; statusTextField = NSTextField; tabBarControl = PSMTabBarControl; tabView = NSTabView; diff --git a/English.lproj/VimWindow.nib/keyedobjects.nib b/English.lproj/VimWindow.nib/keyedobjects.nib index ff924b86caca5a11881e053d123e1d3dbc10f7ce..a6dd7448112ba750159d19ccf8d7ed6eba928b47 100644 GIT binary patch delta 3369 zcmZ8i3tW{|5}!HW`+ZQs3=t4fM8%6GqKKxOuZUNO_(DMe!B7m*?4kEizEUyurWI>t zNNQ$jYUZ}-TB&6|Qbe&bU#XF)Yb?1v7Tt62#jL*jyZ4^&oHH~3nfcF5ZS?vs%L?5~ zzyK3sp(n&aUr2-jFbL9N6qG<2%z`=KhG$^`EQAVp5&jOZ!CI(>H{fk}2R6fY*a825 zJ@5(ag+p){zJOy;11I5Y_zyI~Pw+GRiij<-HMYeNY=@!P6}w>%ybt5BH}=B;_>dcu zFcU}M7|g+3%)=rq#pzgxW%xMG!YA-adbya+M6&0hQcs-2$JAoNQM+hWg3fO=`4d~vMe@=jbYi0*1{u@0YNYvGGPQ{dHySO z=`tF|z*xwJaWEcoAQvX^^NElL`B1<=g;2!Tk3um_fvKKkaZ|kab}qj&4Pu}arn49Z zEQvWa(2sAZJ5o7FYwlARbo3D{J8uc-7;QLk&OB7jJ@{?RKasH<_P=ST`wZ8{Tt2nX*|J(bpvx=uZAv+~wcT zERA(y!HoF2J{N5iW6ym*G38hwtGE`~X+s8eHdjzX3l&gXcl@_+&58 zn@~BD2c~FhUdiL$NPG7_flBYvoAuuyt(tq;1h?Qe_pm!lWP=$!?I#uz6i|d*lu$+m zf>1@xN3E@BqJ=g(NHG9gK)t72D+zAJ8H9l>*2^F-ExlB0f+oC|=g`pm28Urdw#Nvr zrvpY}N9+Ve*cqd-3!0t@`oz0A#u)70oa0k^SfVe-c)vHt17m@O90&hSFYivWE6f!W z@A5s~Ltjj>4<=M&0`|p3PfsJJdw+bO8XxcnKQkp`V9BgHKSCUcGRKqX^$G_;9uC2w zILx!chz)HwA#7vu*ikwoJDnvutzwHI*-iDFV3HoTb6&fncTt! zKAt7A;a;ANr_S`U+_D+dhv&~K8(frMoOkzXCRXsPUY3mDR|nrcxQ#3LK_(~8NPeK# z!XNCv=o2Aq^j}3*`^*kzW4&gxc|i=!E&W@`)Uwi&;=7ugu*!F>I~(V{_B*k}vE@^O0I@i;gue=|^YlUm^%I*8Jc`n<;g>J#0&3lWB z@bYRl?-e}G1+f-S;7P2*Q}`u*g*nmZuB|HJw!Zre-)A=Ni?{O-CikWZe6`5a2-)5zBj zcmP)N*~BBt=Z|+5`9nZ>_{Q+Ll+Gtp6!&S6w_|kXG1h!h_Q!;XJ`+SDGEs<1G@=uO zn8YGBaR?;=qy=e7T9H5!L|T)3NE^=}8aaL*o6i=o9GXab(cUzKhSPQwX;0dh_Mwq9 zfp(zx(>NMW+tLUcO2d3k5*MVcVbs6A@2-<1u6fNz3+YYzRFOWOk7!hfIFOorW$aL}~Sx8oqYO*5WuL2MLnia(3Lh`)(V;%&EtQVXe-6eQgv z-77^%9i=EKT1t?HNW-KgDOpODMoSZ=$7aC2`a(J;U6C53 z+p;DbvL!omfZS3Jl-tQsatBg}}lze5TGFzFeR46Ny z7nD`X%gQ=sv$9>;rR-OZD0Rvi(%Y*ZuOvg zLOriuR4=Rb>J{~>dflzwP#e@n^%wOwwMn~23)P~uSnWQouhvf+qNQn%Xv4J;+DL7* zwpe>f+oFQS9dx3LdZ6A~Z=(n6A$kve zsGh19>r7vwuhL)F-_}3SKh$^Yd-RX>z4`&&eOSMsU(_$__4*Y949lQK3nSF%W^^~= zjR8i6kz-6UrWsEdZez8v&e&jVG&UJ;8(WO6#&+YNan<*d+Bm^Zh!g6BI}uK#6XOhWhB(8V zBq!NPb<&*-C)3GtMmb}gY^T7P?YNzC=UHc-v%q=IS?p9e&pXQ3q77E}~25Qo4+;pfAu>^d(wJSJPMN8d^oG={mZBZls&&J9G=(O1IM; zbSM3Qen@xIJ@jL`m+q(iKck=1L-YteO24FE(bM!2y-e%rkFCr I`3(s8Klrne>Hq)$ delta 3321 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 D=-Q4g diff --git a/MMAppController.h b/MMAppController.h index 680330882e..20161306a2 100644 --- a/MMAppController.h +++ b/MMAppController.h @@ -12,6 +12,14 @@ #import "MacVim.h" +// NSUserDefaults keys +extern NSString *MMNoWindowKey; +extern NSString *MMTabMinWidthKey; +extern NSString *MMTabMaxWidthKey; +extern NSString *MMTabOptimumWidthKey; +extern NSString *MMStatuslineOffKey; + + @interface MMAppController : NSObject #if MM_USE_DO diff --git a/MMAppController.m b/MMAppController.m index 43ec804862..8a3e82f6d8 100644 --- a/MMAppController.m +++ b/MMAppController.m @@ -13,8 +13,30 @@ +// NSUserDefaults keys +NSString *MMNoWindowKey = @"nowindow"; +NSString *MMTabMinWidthKey = @"tabminwidth"; +NSString *MMTabMaxWidthKey = @"tabmaxwidth"; +NSString *MMTabOptimumWidthKey = @"taboptimumwidth"; +NSString *MMStatuslineOffKey = @"statuslineoff"; + + + @implementation MMAppController ++ (void)initialize +{ + NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithBool:NO], MMNoWindowKey, + [NSNumber numberWithInt:64], MMTabMinWidthKey, + [NSNumber numberWithInt:6*64], MMTabMaxWidthKey, + [NSNumber numberWithInt:132], MMTabOptimumWidthKey, + [NSNumber numberWithBool:NO], MMStatuslineOffKey, + nil]; + + [[NSUserDefaults standardUserDefaults] registerDefaults:dict]; +} + - (id)init { if ((self = [super init])) { @@ -77,7 +99,7 @@ { // NOTE! This way it possible to start the app with the command-line // argument '-nowindow yes' and no window will be opened by default. - return ![[NSUserDefaults standardUserDefaults] boolForKey:@"nowindow"]; + return ![[NSUserDefaults standardUserDefaults] boolForKey:MMNoWindowKey]; } - (BOOL)applicationOpenUntitledFile:(NSApplication *)sender diff --git a/MMWindowController.h b/MMWindowController.h index fbe82d2803..81945d26f5 100644 --- a/MMWindowController.h +++ b/MMWindowController.h @@ -21,6 +21,7 @@ IBOutlet PSMTabBarControl *tabBarControl; IBOutlet NSTabView *tabView; IBOutlet NSTextField *statusTextField; + IBOutlet NSBox *statusSeparator; MMVimController *vimController; BOOL vimTaskSelectedTab; diff --git a/MMWindowController.m b/MMWindowController.m index 08187e2e02..214be880a0 100644 --- a/MMWindowController.m +++ b/MMWindowController.m @@ -14,6 +14,7 @@ #import "MMTextStorage.h" #import "MMVimController.h" #import "MacVim.h" +#import "MMAppController.h" // Scroller type; these must match SBAR_* in gui.h @@ -23,9 +24,9 @@ enum { MMScrollerTypeBottom }; -// TODO! Implement hiding/showing of status line. +// NOTE! This value must match the actual position of the status line +// separator in VimWindow.nib. static float StatusLineHeight = 16.0f; -static BOOL statusLineIsVisible = NO; // NO is _not_ supported at the moment! // TODO: Move! @@ -138,7 +139,10 @@ NSMutableArray *buildMenuAddress(NSMenu *menu) // NOTE: Size to fit looks good, but not many tabs will fit and there are // quite a few drawing bugs in this code, so it is disabled for now. //[tabBarControl setSizeCellsToFit:YES]; - [tabBarControl setCellMinWidth:64]; + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + [tabBarControl setCellMinWidth:[ud integerForKey:MMTabMinWidthKey]]; + [tabBarControl setCellMaxWidth:[ud integerForKey:MMTabMaxWidthKey]]; + [tabBarControl setCellOptimumWidth:[ud integerForKey:MMTabOptimumWidthKey]]; [tabBarControl setAllowsDragBetweenWindows:NO]; [tabBarControl setShowAddTabButton:YES]; [[tabBarControl addTabButton] setTarget:self]; @@ -276,7 +280,10 @@ NSMutableArray *buildMenuAddress(NSMenu *menu) [[self window] makeKeyAndOrderFront:self]; - [statusTextField setHidden:!statusLineIsVisible]; + BOOL statusOff = [[NSUserDefaults standardUserDefaults] + boolForKey:MMStatuslineOffKey]; + [statusTextField setHidden:statusOff]; + [statusSeparator setHidden:statusOff]; [self flashStatusText:@"Welcome to MacVim!"]; } @@ -369,7 +376,8 @@ NSMutableArray *buildMenuAddress(NSMenu *menu) - (void)flashStatusText:(NSString *)text { - if (!statusLineIsVisible) return; + if ([[NSUserDefaults standardUserDefaults] boolForKey:MMStatuslineOffKey]) + return; [self setStatusText:text]; @@ -577,7 +585,7 @@ NSMutableArray *buildMenuAddress(NSMenu *menu) if (![tabBarControl isHidden]) size.height += [tabBarControl frame].size.height; - if (statusLineIsVisible) + if (![[NSUserDefaults standardUserDefaults] boolForKey:MMStatuslineOffKey]) size.height += StatusLineHeight; if ([self bottomScrollbarVisible]) @@ -596,7 +604,8 @@ NSMutableArray *buildMenuAddress(NSMenu *menu) if (![tabBarControl isHidden]) rect.size.height -= [tabBarControl frame].size.height; - if (statusLineIsVisible) { + if (![[NSUserDefaults standardUserDefaults] + boolForKey:MMStatuslineOffKey]) { rect.size.height -= StatusLineHeight; rect.origin.y += StatusLineHeight; } @@ -776,6 +785,8 @@ NSMutableArray *buildMenuAddress(NSMenu *menu) NSRect tabViewFrame = [tabView frame]; NSView *contentView = [[self window] contentView]; BOOL lsbVisible = [self leftScrollbarVisible]; + BOOL statusVisible = ![[NSUserDefaults standardUserDefaults] + boolForKey:MMStatuslineOffKey]; // HACK! Find the lowest left&right vertical scrollbars, as well as the // leftmost horizontal scrollbar. This hack continues further down. @@ -814,7 +825,7 @@ NSMutableArray *buildMenuAddress(NSMenu *menu) if ([scroller type] == MMScrollerTypeBottom) { rect = [textStorage rectForColumnsInRange:[scroller range]]; rect.size.height = [NSScroller scrollerWidth]; - if (statusLineIsVisible) + if (statusVisible) rect.origin.y += StatusLineHeight; if (lsbVisible) rect.origin.x += [NSScroller scrollerWidth];