├── WAYSourceListWindow.png
├── WAYSourceListWindow Example.png
├── WAYSourceListWindowDemo
├── we-are-yeah@2x.png
├── main.m
├── AppDelegate.h
├── AppDelegate.m
├── Info.plist
└── Base.lproj
│ └── MainMenu.xib
├── WAYSourceListWindowDemo.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── WAYSourceListWindowDemo.xccheckout
└── project.pbxproj
├── LICENSE
├── README.md
├── WAYSourceListWindow
├── WAYSourceListWindow.h
└── WAYSourceListWindow.m
└── .gitignore
/WAYSourceListWindow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weAreYeah/WAYSourceListWindow/HEAD/WAYSourceListWindow.png
--------------------------------------------------------------------------------
/WAYSourceListWindow Example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weAreYeah/WAYSourceListWindow/HEAD/WAYSourceListWindow Example.png
--------------------------------------------------------------------------------
/WAYSourceListWindowDemo/we-are-yeah@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weAreYeah/WAYSourceListWindow/HEAD/WAYSourceListWindowDemo/we-are-yeah@2x.png
--------------------------------------------------------------------------------
/WAYSourceListWindowDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/WAYSourceListWindowDemo/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // WAYSourceListWindowDemo
4 | //
5 | // Created by Raffael Hannemann on 16.11.14.
6 | // Copyright (c) 2014 We Are Yeah!. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | int main(int argc, const char * argv[]) {
12 | return NSApplicationMain(argc, argv);
13 | }
14 |
--------------------------------------------------------------------------------
/WAYSourceListWindowDemo/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // WAYSourceListWindowDemo
4 | //
5 | // Created by Raffael Hannemann on 16.11.14.
6 | // Copyright (c) 2014 We Are Yeah!. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : NSObject
12 |
13 |
14 | @end
15 |
16 |
--------------------------------------------------------------------------------
/WAYSourceListWindowDemo/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // WAYSourceListWindowDemo
4 | //
5 | // Created by Raffael Hannemann on 16.11.14.
6 | // Copyright (c) 2014 We Are Yeah!. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 |
11 | @interface AppDelegate ()
12 |
13 | @property (weak) IBOutlet NSWindow *window;
14 | @end
15 |
16 | @implementation AppDelegate
17 |
18 | - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
19 | // Insert code here to initialize your application
20 | }
21 |
22 | - (void)applicationWillTerminate:(NSNotification *)aNotification {
23 | // Insert code here to tear down your application
24 | }
25 |
26 | @end
27 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | WAYSourceListWindow
2 | by Raffael Hannemann (@raffael_me, @weAreYeah)
3 |
4 | Licensed under the BSD License http://www.opensource.org/licenses/bsd-license THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
/WAYSourceListWindowDemo/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | com.weareyeah.$(PRODUCT_NAME:rfc1034identifier)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1
25 | LSMinimumSystemVersion
26 | $(MACOSX_DEPLOYMENT_TARGET)
27 | NSHumanReadableCopyright
28 | Copyright © 2014 We Are Yeah!. All rights reserved.
29 | NSMainNibFile
30 | MainMenu
31 | NSPrincipalClass
32 | NSApplication
33 |
34 |
35 |
--------------------------------------------------------------------------------
/WAYSourceListWindowDemo.xcodeproj/project.xcworkspace/xcshareddata/WAYSourceListWindowDemo.xccheckout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDESourceControlProjectFavoriteDictionaryKey
6 |
7 | IDESourceControlProjectIdentifier
8 | B6E980F5-6B0F-4353-B9CA-40FD1B45B2F9
9 | IDESourceControlProjectName
10 | WAYSourceListWindowDemo
11 | IDESourceControlProjectOriginsDictionary
12 |
13 | 64DFD1C8A0A056CA1F6CCF8F80BD45F7F8AD6D2E
14 | https://github.com/weAreYeah/WAYSourceListWindow.git
15 |
16 | IDESourceControlProjectPath
17 | WAYSourceListWindowDemo.xcodeproj
18 | IDESourceControlProjectRelativeInstallPathDictionary
19 |
20 | 64DFD1C8A0A056CA1F6CCF8F80BD45F7F8AD6D2E
21 | ../..
22 |
23 | IDESourceControlProjectURL
24 | https://github.com/weAreYeah/WAYSourceListWindow.git
25 | IDESourceControlProjectVersion
26 | 111
27 | IDESourceControlProjectWCCIdentifier
28 | 64DFD1C8A0A056CA1F6CCF8F80BD45F7F8AD6D2E
29 | IDESourceControlProjectWCConfigurations
30 |
31 |
32 | IDESourceControlRepositoryExtensionIdentifierKey
33 | public.vcs.git
34 | IDESourceControlWCCIdentifierKey
35 | 64DFD1C8A0A056CA1F6CCF8F80BD45F7F8AD6D2E
36 | IDESourceControlWCCName
37 | WAYSourceListWindow
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | WAYSourceListWindow
2 | ===================
3 |
4 | The WAYSourceListWindow is a NSWindow subclass, which splits the window space vertically into the master view on the left, and the detail view on the right side as known from apps like Reminders or Notes.
5 |
6 | The window uses a NSSplitView for the splitting. You should add subviews to instances of this class by setting the masterView and detailView, e.g., via the IBOutlets in Interface Builder. These views will then be added as subviews internally to the masterViewWrapper or detailViewWrapper.
7 |
8 | By default, the Master View uses a Vibrant Light appearance. You can change this as you desire.
9 |
10 | Whenever it makes sense, the properties of your WAYSourceListWindow instance in Interface Builder are inspectable.
11 |
12 | Example
13 | -------
14 |
15 | 
16 |
17 | Usage
18 | -----
19 |
20 | 1. Drag a new ```NSWindow``` instance to your XIB
21 | 2. Set the class of the instance to ```WAYSourceListWindow```
22 | 3. Customize the properties via Interface Builder or programmatically
23 | 4. Create two new ```NSView``` instances in Interface Builder
24 | 5. Right-click-drag from your ```WAYSourceListWindow``` instance to one of the views and define it as the Master View.
25 | 5. Right-click-drag from your ```WAYSourceListWindow``` instance to one of the views and define it as the Detail View.
26 |
27 | Explanation
28 | -----------
29 |
30 |
31 |
32 |
33 | Interesting
34 | -----------
35 | We are new, weAreYeah.com.
36 | Follow us on [@weAreYeah](http://twitter.com/weAreYeah) for upcoming goodies.
37 |
38 | License
39 | -------
40 | Licensed under the BSD License
41 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
42 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
43 | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
44 | SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
45 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
46 | TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
47 | BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 | STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
49 | THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/WAYSourceListWindow/WAYSourceListWindow.h:
--------------------------------------------------------------------------------
1 | //
2 | // WAYSourceListWindow.h
3 | // WAYSourceListWindow
4 | //
5 | // Created by Raffael Hannemann on 15.11.14.
6 | // Copyright (c) 2014 Raffael Hannemann. All rights reserved.
7 | // Visit weAreYeah.com or follow @weareYeah for updates.
8 | //
9 | // Licensed under the BSD License
10 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
11 | // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
12 | // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
13 | // SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
15 | // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
16 | // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
17 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
18 | // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19 | //
20 |
21 | #import
22 |
23 | /** The WAYSourceListWindow is a NSWindow subclass, which splits the window space vertically into the master view on the left, and the detail view on the right side as known from apps like Reminders or Notes. The window uses a NSSplitView for the splitting. You should add subviews to instances of this class by setting the masterView and detailView. These views will then be added internally to the masterViewWrapper or detailViewWrapper.
24 | */
25 |
26 | NS_CLASS_AVAILABLE_MAC(10_10)
27 | @interface WAYSourceListWindow : NSWindow
28 |
29 | @property (strong) NSSplitView *splitView;
30 |
31 | /// The Master View is the view on the left side of the window
32 | @property (nonatomic,strong) IBOutlet NSView *masterView;
33 |
34 | /// The Detail View is the view on the right side of the window.
35 | @property (nonatomic,strong) IBOutlet NSView *detailView;
36 |
37 | /// The color of the Detail View. Default: white.
38 | @property (nonatomic,copy) IBInspectable NSColor *detailViewBackgroundColor;
39 |
40 | /// The minimum width of the Master View. Default: 150.
41 | @property (nonatomic) IBInspectable CGFloat minimumMasterViewWidth;
42 |
43 | /// The maximum width of the Master View. Default: 300.
44 | @property (nonatomic) IBInspectable CGFloat maximumMasterViewWidth;
45 |
46 | /// The maximum width of the Master View. Default: 200.
47 | @property (nonatomic) IBInspectable CGFloat initialMasterViewWidth;
48 |
49 | /// If set to YES, the Master View will use a Vibrant Dark look, instead of a Vibrant White look. Default: NO.
50 | @property (nonatomic) IBInspectable BOOL darkMasterViewMaterial;
51 |
52 | @end
53 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | #####
3 | # OS X temporary files that should never be committed
4 | #
5 | # c.f. http://www.westwind.com/reference/os-x/invisibles.html
6 |
7 | .DS_Store
8 |
9 | # c.f. http://www.westwind.com/reference/os-x/invisibles.html
10 |
11 | .Trashes
12 |
13 | # c.f. http://www.westwind.com/reference/os-x/invisibles.html
14 |
15 | *.swp
16 |
17 | #
18 | # *.lock - this is used and abused by many editors for many different things.
19 | # For the main ones I use (e.g. Eclipse), it should be excluded
20 | # from source-control, but YMMV.
21 | # (lock files are usually local-only file-synchronization on the local FS that should NOT go in git)
22 | # c.f. the "OPTIONAL" section at bottom though, for tool-specific variations!
23 |
24 | *.lock
25 |
26 |
27 | #
28 | # profile - REMOVED temporarily (on double-checking, I can't find it in OS X docs?)
29 | #profile
30 |
31 |
32 | ####
33 | # Xcode temporary files that should never be committed
34 | #
35 | # NB: NIB/XIB files still exist even on Storyboard projects, so we want this...
36 |
37 | *~.nib
38 |
39 |
40 | ####
41 | # Xcode build files -
42 | #
43 | # NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "DerivedData"
44 |
45 | DerivedData/
46 |
47 | # NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "build"
48 |
49 | build/
50 |
51 |
52 | #####
53 | # Xcode private settings (window sizes, bookmarks, breakpoints, custom executables, smart groups)
54 | #
55 | # This is complicated:
56 | #
57 | # SOMETIMES you need to put this file in version control.
58 | # Apple designed it poorly - if you use "custom executables", they are
59 | # saved in this file.
60 | # 99% of projects do NOT use those, so they do NOT want to version control this file.
61 | # ..but if you're in the 1%, comment out the line "*.pbxuser"
62 |
63 | # .pbxuser: http://lists.apple.com/archives/xcode-users/2004/Jan/msg00193.html
64 |
65 | *.pbxuser
66 |
67 | # .mode1v3: http://lists.apple.com/archives/xcode-users/2007/Oct/msg00465.html
68 |
69 | *.mode1v3
70 |
71 | # .mode2v3: http://lists.apple.com/archives/xcode-users/2007/Oct/msg00465.html
72 |
73 | *.mode2v3
74 |
75 | # .perspectivev3: http://stackoverflow.com/questions/5223297/xcode-projects-what-is-a-perspectivev3-file
76 |
77 | *.perspectivev3
78 |
79 | # NB: also, whitelist the default ones, some projects need to use these
80 | !default.pbxuser
81 | !default.mode1v3
82 | !default.mode2v3
83 | !default.perspectivev3
84 |
85 |
86 | ####
87 | # Xcode 4 - semi-personal settings
88 | #
89 | #
90 | # OPTION 1: ---------------------------------
91 | # throw away ALL personal settings (including custom schemes!
92 | # - unless they are "shared")
93 | #
94 | # NB: this is exclusive with OPTION 2 below
95 | xcuserdata
96 |
97 | # OPTION 2: ---------------------------------
98 | # get rid of ALL personal settings, but KEEP SOME OF THEM
99 | # - NB: you must manually uncomment the bits you want to keep
100 | #
101 | # NB: this *requires* git v1.8.2 or above; you may need to upgrade to latest OS X,
102 | # or manually install git over the top of the OS X version
103 | # NB: this is exclusive with OPTION 1 above
104 | #
105 | #xcuserdata/**/*
106 |
107 | # (requires option 2 above): Personal Schemes
108 | #
109 | #!xcuserdata/**/xcschemes/*
110 |
111 | ####
112 | # XCode 4 workspaces - more detailed
113 | #
114 | # Workspaces are important! They are a core feature of Xcode - don't exclude them :)
115 | #
116 | # Workspace layout is quite spammy. For reference:
117 | #
118 | # /(root)/
119 | # /(project-name).xcodeproj/
120 | # project.pbxproj
121 | # /project.xcworkspace/
122 | # contents.xcworkspacedata
123 | # /xcuserdata/
124 | # /(your name)/xcuserdatad/
125 | # UserInterfaceState.xcuserstate
126 | # /xcsshareddata/
127 | # /xcschemes/
128 | # (shared scheme name).xcscheme
129 | # /xcuserdata/
130 | # /(your name)/xcuserdatad/
131 | # (private scheme).xcscheme
132 | # xcschememanagement.plist
133 | #
134 | #
135 |
136 | ####
137 | # Xcode 4 - Deprecated classes
138 | #
139 | # Allegedly, if you manually "deprecate" your classes, they get moved here.
140 | #
141 | # We're using source-control, so this is a "feature" that we do not want!
142 |
143 | *.moved-aside
144 |
145 | ####
146 | # OPTIONAL: Some well-known tools that people use side-by-side with Xcode / iOS development
147 | #
148 | # NB: I'd rather not include these here, but gitignore's design is weak and doesn't allow
149 | # modular gitignore: you have to put EVERYTHING in one file.
150 | #
151 | # COCOAPODS:
152 | #
153 | # c.f. http://guides.cocoapods.org/using/using-cocoapods.html#what-is-a-podfilelock
154 | # c.f. http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
155 | #
156 | #!Podfile.lock
157 | #
158 | # RUBY:
159 | #
160 | # c.f. http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
161 | #
162 | #!Gemfile.lock
163 | #
164 | # IDEA:
165 | #
166 | #.idea
167 | #
168 | # TEXTMATE:
169 | #
170 | # -- UNVERIFIED: c.f. http://stackoverflow.com/a/50283/153422
171 | #
172 | #tm_build_errors
173 |
174 | ####
175 | # UNKNOWN: recommended by others, but I can't discover what these files are
176 | #
177 | # Community suggestions (unverified, no evidence available - DISABLED by default)
178 | #
179 | # 1. Xcode 5 - VCS file
180 | #
181 | # "The data in this file not represent state of your project.
182 | # If you'll leave this file in git - you will have merge conflicts during
183 | # pull your cahnges to other's repo"
184 | #
185 | #*.xccheckout
--------------------------------------------------------------------------------
/WAYSourceListWindow/WAYSourceListWindow.m:
--------------------------------------------------------------------------------
1 | //
2 | // WAYSourceListWindow.h
3 | // WAYSourceListWindow
4 | //
5 | // Created by Raffael Hannemann on 15.11.14.
6 | // Copyright (c) 2014 Raffael Hannemann. All rights reserved.
7 | // Visit weAreYeah.com or follow @weareYeah for updates.
8 | //
9 | // Licensed under the BSD License
10 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
11 | // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
12 | // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
13 | // SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
15 | // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
16 | // BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
17 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
18 | // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19 | //
20 |
21 | #import "WAYSourceListWindow.h"
22 |
23 | #define kWAYSourceListWindowDefaultMinimumMasterViewWidth 150
24 | #define kWAYSourceListWindowDefautInitialMasterViewWidth 200
25 | #define kWAYSourceListWindowDefaultMaximumMasterViewWidth 300
26 | #define kWAYSourceListWindowDefaultDarkMasterViewMaterial NO
27 | #define kWAYSourceListWindowDefaultDetailViewBackgroundColor [NSColor whiteColor]
28 |
29 | /** This NSSplitView subclass allows to define a custom divider color. */
30 | @interface WAYSourceListSplitView : NSSplitView
31 | @property (strong) NSColor *customDividerColor;
32 | @end
33 |
34 | @implementation WAYSourceListSplitView
35 | - (NSColor *) dividerColor {
36 | return _customDividerColor;
37 | }
38 | @end
39 |
40 | @interface WAYSourceListWindow ()
41 | @property (strong) NSView *customContentView;
42 | @property (strong) NSVisualEffectView *masterViewWrapper;
43 | @property (strong) NSView *detailViewWrapper;
44 | @end
45 |
46 | @implementation WAYSourceListWindow
47 |
48 | #pragma mark - NSWindow Overwritings
49 |
50 | - (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag {
51 | if ((self = [super initWithContentRect:contentRect styleMask:aStyle backing:bufferingType defer:flag])) {
52 | [self setUp];
53 | }
54 | return self;
55 | }
56 |
57 | - (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag screen:(NSScreen *)screen {
58 | if ((self = [super initWithContentRect:contentRect styleMask:aStyle backing:bufferingType defer:flag screen:screen])) {
59 | [self setUp];
60 | }
61 | return self;
62 | }
63 |
64 | - (void) awakeFromNib {
65 |
66 | }
67 |
68 | - (void) setInitialMasterViewWidth:(CGFloat)initialMasterViewWidth {
69 | _initialMasterViewWidth = initialMasterViewWidth;
70 | [self setMasterViewWidth: _initialMasterViewWidth];
71 | }
72 |
73 | - (void) setDetailViewBackgroundColor:(NSColor *)detailViewBackgroundColor {
74 | _detailViewBackgroundColor = detailViewBackgroundColor.copy;
75 | [self.detailViewWrapper.layer setBackgroundColor:_detailViewBackgroundColor.CGColor];
76 |
77 | // The divider color is automatically set to a darker variant of the background color
78 | CGFloat red = 0;
79 | CGFloat green = 0;
80 | CGFloat blue = 0;
81 | CGFloat factor = 0.7;
82 | if ([_detailViewBackgroundColor.colorSpace isEqual:[NSColorSpace genericGrayColorSpace]]) {
83 | red = _detailViewBackgroundColor.whiteComponent*factor;
84 | green = _detailViewBackgroundColor.whiteComponent*factor;
85 | blue = _detailViewBackgroundColor.whiteComponent*factor;
86 | } else {
87 | red = _detailViewBackgroundColor.redComponent*factor;
88 | green = _detailViewBackgroundColor.greenComponent*factor;
89 | blue = _detailViewBackgroundColor.blueComponent*factor;
90 | }
91 |
92 | NSColor *darkenedColor = [NSColor colorWithCalibratedRed:red green:green blue:blue alpha:1.0];
93 | [(WAYSourceListSplitView *)self.splitView setCustomDividerColor:darkenedColor];
94 | }
95 |
96 | - (void) setDarkMasterViewMaterial:(BOOL)darkMasterViewMaterial {
97 | _darkMasterViewMaterial = darkMasterViewMaterial;
98 | [self.masterViewWrapper setMaterial:_darkMasterViewMaterial?NSVisualEffectMaterialDark:NSVisualEffectMaterialLight];
99 | [self.masterViewWrapper setAppearance:[NSAppearance appearanceNamed:_darkMasterViewMaterial?NSAppearanceNameVibrantDark:NSAppearanceNameVibrantLight]];
100 | }
101 |
102 | - (void) setMasterView:(NSView *)view {
103 | [view removeFromSuperview];
104 | [view setFrame:self.masterViewWrapper.bounds];
105 | [view setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
106 |
107 | if (_masterView) {
108 | [_masterView removeFromSuperview];
109 | }
110 | _masterView = view;
111 | [self.masterViewWrapper addSubview:_masterView];
112 | }
113 |
114 | - (void) setMasterViewWidth: (CGFloat) masterViewWidth {
115 | [self.splitView setPosition:masterViewWidth ofDividerAtIndex:0];
116 | [self setNeedsLayout];
117 | }
118 |
119 | - (void) setDetailView:(NSView *)view {
120 | [view removeFromSuperview];
121 | [view setFrame:self.detailViewWrapper.bounds];
122 | [view setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
123 |
124 | if (_detailView) {
125 | [_detailView removeFromSuperview];
126 | }
127 | _detailView = view;
128 | [self.detailViewWrapper addSubview:_detailView];
129 | }
130 |
131 | - (void) setUp {
132 |
133 | [self setTitleVisibility:NSWindowTitleHidden];
134 | [self setTitlebarAppearsTransparent:YES];
135 | self.styleMask |= NSFullSizeContentViewWindowMask;
136 |
137 | WAYSourceListSplitView *splitView = [[WAYSourceListSplitView alloc] initWithFrame:NSMakeRect(0, 0, NSWidth(self.frame), NSHeight(self.frame))];
138 | [splitView setVertical:YES];
139 | self.splitView = splitView;
140 |
141 | self.masterViewWrapper = [[NSVisualEffectView alloc] initWithFrame:NSMakeRect(0, 0, kWAYSourceListWindowDefautInitialMasterViewWidth, NSHeight(self.frame))];
142 |
143 | [self setDarkMasterViewMaterial:kWAYSourceListWindowDefaultDarkMasterViewMaterial];
144 | [self.masterViewWrapper setBlendingMode:NSVisualEffectBlendingModeBehindWindow];
145 |
146 | self.detailViewWrapper = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, NSWidth(self.frame)-kWAYSourceListWindowDefaultMinimumMasterViewWidth, NSHeight(self.frame))];
147 |
148 | [self.detailViewWrapper setWantsLayer:YES];
149 | [self setDetailViewBackgroundColor:kWAYSourceListWindowDefaultDetailViewBackgroundColor];
150 |
151 | [self.splitView addSubview:self.masterViewWrapper];
152 | [self.splitView addSubview:self.detailViewWrapper];
153 | [self.splitView setDividerStyle:NSSplitViewDividerStyleThin];
154 | [self.splitView setDelegate:self];
155 |
156 | [self.splitView adjustSubviews];
157 | [self.splitView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
158 |
159 | [self.contentView addSubview:self.splitView];
160 |
161 | self.minimumMasterViewWidth = kWAYSourceListWindowDefaultMinimumMasterViewWidth;
162 | self.maximumMasterViewWidth = kWAYSourceListWindowDefaultMaximumMasterViewWidth;
163 | }
164 |
165 | - (void) restoreStateWithCoder:(NSCoder *)coder {
166 | [super restoreStateWithCoder:coder];
167 | [self setNeedsLayout];
168 | }
169 |
170 | - (void) setContentView:(id)contentView {
171 | if ([contentView subviews].count>0) {
172 | NSLog(@"WARNING: %@ does not allow to add subviews to a %@'s instance content view in Interface Builder. Add the subview(s) to the master or detail view instead directly.", [self className], [self className]);
173 | }
174 |
175 | if (self.customContentView) return;
176 | self.customContentView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 10, 10)];
177 | [super setContentView:self.customContentView];
178 | }
179 |
180 | - (void) setNeedsLayout {
181 | NSRect tmpRect = [self.splitView bounds];
182 | NSArray *subviews = [self.splitView subviews];
183 | NSView *collectionsSide = [subviews objectAtIndex:0];
184 | NSView *tableSide = [subviews objectAtIndex:1];
185 | float colllectionWidth = [collectionsSide bounds].size.width;
186 |
187 | tmpRect.size.width = tmpRect.size.width - colllectionWidth + 1;
188 | tmpRect.origin.x = tmpRect.origin.x + colllectionWidth + 1;
189 | [tableSide setFrame:tmpRect];
190 |
191 | tmpRect.size.width = colllectionWidth;
192 | tmpRect.origin.x = 0;
193 | [collectionsSide setFrame:tmpRect];
194 | }
195 |
196 | #pragma mark - NSSplitView Delegate
197 | - (CGFloat) splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMaximumPosition ofSubviewAt:(NSInteger)dividerIndex {
198 | return MIN(proposedMaximumPosition, self.maximumMasterViewWidth);
199 | }
200 |
201 | - (CGFloat) splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex {
202 | return MAX(proposedMinimumPosition, self.minimumMasterViewWidth);
203 | }
204 |
205 | - (BOOL) splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)view {
206 | return view == self.detailViewWrapper;
207 | }
208 |
209 | @end
210 |
--------------------------------------------------------------------------------
/WAYSourceListWindowDemo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 4D06F64D1A18B5A500B725C6 /* we-are-yeah@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4D06F64C1A18B5A500B725C6 /* we-are-yeah@2x.png */; };
11 | 4D06F6511A18BBE000B725C6 /* WAYSourceListWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D06F6501A18BBE000B725C6 /* WAYSourceListWindow.m */; };
12 | 4DF97B101A189CC200351BC9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DF97B0F1A189CC200351BC9 /* AppDelegate.m */; };
13 | 4DF97B121A189CC200351BC9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DF97B111A189CC200351BC9 /* main.m */; };
14 | 4DF97B171A189CC200351BC9 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4DF97B151A189CC200351BC9 /* MainMenu.xib */; };
15 | /* End PBXBuildFile section */
16 |
17 | /* Begin PBXFileReference section */
18 | 4D06F64C1A18B5A500B725C6 /* we-are-yeah@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "we-are-yeah@2x.png"; sourceTree = ""; };
19 | 4D06F64F1A18BBE000B725C6 /* WAYSourceListWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WAYSourceListWindow.h; sourceTree = ""; };
20 | 4D06F6501A18BBE000B725C6 /* WAYSourceListWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WAYSourceListWindow.m; sourceTree = ""; };
21 | 4DF97B091A189CC200351BC9 /* WAYSourceListWindowDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WAYSourceListWindowDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
22 | 4DF97B0D1A189CC200351BC9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
23 | 4DF97B0E1A189CC200351BC9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.objj.h; path = AppDelegate.h; sourceTree = ""; };
24 | 4DF97B0F1A189CC200351BC9 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
25 | 4DF97B111A189CC200351BC9 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
26 | 4DF97B161A189CC200351BC9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
27 | /* End PBXFileReference section */
28 |
29 | /* Begin PBXFrameworksBuildPhase section */
30 | 4DF97B061A189CC200351BC9 /* Frameworks */ = {
31 | isa = PBXFrameworksBuildPhase;
32 | buildActionMask = 2147483647;
33 | files = (
34 | );
35 | runOnlyForDeploymentPostprocessing = 0;
36 | };
37 | /* End PBXFrameworksBuildPhase section */
38 |
39 | /* Begin PBXGroup section */
40 | 4D06F64E1A18BBE000B725C6 /* WAYSourceListWindow */ = {
41 | isa = PBXGroup;
42 | children = (
43 | 4D06F64F1A18BBE000B725C6 /* WAYSourceListWindow.h */,
44 | 4D06F6501A18BBE000B725C6 /* WAYSourceListWindow.m */,
45 | );
46 | path = WAYSourceListWindow;
47 | sourceTree = "";
48 | };
49 | 4DF97B001A189CC200351BC9 = {
50 | isa = PBXGroup;
51 | children = (
52 | 4D06F64E1A18BBE000B725C6 /* WAYSourceListWindow */,
53 | 4DF97B0B1A189CC200351BC9 /* WAYSourceListWindow */,
54 | 4DF97B0A1A189CC200351BC9 /* Products */,
55 | );
56 | sourceTree = "";
57 | };
58 | 4DF97B0A1A189CC200351BC9 /* Products */ = {
59 | isa = PBXGroup;
60 | children = (
61 | 4DF97B091A189CC200351BC9 /* WAYSourceListWindowDemo.app */,
62 | );
63 | name = Products;
64 | sourceTree = "";
65 | };
66 | 4DF97B0B1A189CC200351BC9 /* WAYSourceListWindow */ = {
67 | isa = PBXGroup;
68 | children = (
69 | 4DF97B0E1A189CC200351BC9 /* AppDelegate.h */,
70 | 4DF97B0F1A189CC200351BC9 /* AppDelegate.m */,
71 | 4D06F64C1A18B5A500B725C6 /* we-are-yeah@2x.png */,
72 | 4DF97B151A189CC200351BC9 /* MainMenu.xib */,
73 | 4DF97B0C1A189CC200351BC9 /* Supporting Files */,
74 | );
75 | name = WAYSourceListWindow;
76 | path = WAYSourceListWindowDemo;
77 | sourceTree = "";
78 | };
79 | 4DF97B0C1A189CC200351BC9 /* Supporting Files */ = {
80 | isa = PBXGroup;
81 | children = (
82 | 4DF97B0D1A189CC200351BC9 /* Info.plist */,
83 | 4DF97B111A189CC200351BC9 /* main.m */,
84 | );
85 | name = "Supporting Files";
86 | sourceTree = "";
87 | };
88 | /* End PBXGroup section */
89 |
90 | /* Begin PBXNativeTarget section */
91 | 4DF97B081A189CC200351BC9 /* WAYSourceListWindowDemo */ = {
92 | isa = PBXNativeTarget;
93 | buildConfigurationList = 4DF97B261A189CC200351BC9 /* Build configuration list for PBXNativeTarget "WAYSourceListWindowDemo" */;
94 | buildPhases = (
95 | 4DF97B051A189CC200351BC9 /* Sources */,
96 | 4DF97B061A189CC200351BC9 /* Frameworks */,
97 | 4DF97B071A189CC200351BC9 /* Resources */,
98 | );
99 | buildRules = (
100 | );
101 | dependencies = (
102 | );
103 | name = WAYSourceListWindowDemo;
104 | productName = WAYSourceListWindow;
105 | productReference = 4DF97B091A189CC200351BC9 /* WAYSourceListWindowDemo.app */;
106 | productType = "com.apple.product-type.application";
107 | };
108 | /* End PBXNativeTarget section */
109 |
110 | /* Begin PBXProject section */
111 | 4DF97B011A189CC200351BC9 /* Project object */ = {
112 | isa = PBXProject;
113 | attributes = {
114 | LastUpgradeCheck = 0610;
115 | ORGANIZATIONNAME = "We Are Yeah!";
116 | TargetAttributes = {
117 | 4DF97B081A189CC200351BC9 = {
118 | CreatedOnToolsVersion = 6.1;
119 | };
120 | };
121 | };
122 | buildConfigurationList = 4DF97B041A189CC200351BC9 /* Build configuration list for PBXProject "WAYSourceListWindowDemo" */;
123 | compatibilityVersion = "Xcode 3.2";
124 | developmentRegion = English;
125 | hasScannedForEncodings = 0;
126 | knownRegions = (
127 | en,
128 | Base,
129 | );
130 | mainGroup = 4DF97B001A189CC200351BC9;
131 | productRefGroup = 4DF97B0A1A189CC200351BC9 /* Products */;
132 | projectDirPath = "";
133 | projectRoot = "";
134 | targets = (
135 | 4DF97B081A189CC200351BC9 /* WAYSourceListWindowDemo */,
136 | );
137 | };
138 | /* End PBXProject section */
139 |
140 | /* Begin PBXResourcesBuildPhase section */
141 | 4DF97B071A189CC200351BC9 /* Resources */ = {
142 | isa = PBXResourcesBuildPhase;
143 | buildActionMask = 2147483647;
144 | files = (
145 | 4D06F64D1A18B5A500B725C6 /* we-are-yeah@2x.png in Resources */,
146 | 4DF97B171A189CC200351BC9 /* MainMenu.xib in Resources */,
147 | );
148 | runOnlyForDeploymentPostprocessing = 0;
149 | };
150 | /* End PBXResourcesBuildPhase section */
151 |
152 | /* Begin PBXSourcesBuildPhase section */
153 | 4DF97B051A189CC200351BC9 /* Sources */ = {
154 | isa = PBXSourcesBuildPhase;
155 | buildActionMask = 2147483647;
156 | files = (
157 | 4DF97B121A189CC200351BC9 /* main.m in Sources */,
158 | 4DF97B101A189CC200351BC9 /* AppDelegate.m in Sources */,
159 | 4D06F6511A18BBE000B725C6 /* WAYSourceListWindow.m in Sources */,
160 | );
161 | runOnlyForDeploymentPostprocessing = 0;
162 | };
163 | /* End PBXSourcesBuildPhase section */
164 |
165 | /* Begin PBXVariantGroup section */
166 | 4DF97B151A189CC200351BC9 /* MainMenu.xib */ = {
167 | isa = PBXVariantGroup;
168 | children = (
169 | 4DF97B161A189CC200351BC9 /* Base */,
170 | );
171 | name = MainMenu.xib;
172 | sourceTree = "";
173 | };
174 | /* End PBXVariantGroup section */
175 |
176 | /* Begin XCBuildConfiguration section */
177 | 4DF97B241A189CC200351BC9 /* Debug */ = {
178 | isa = XCBuildConfiguration;
179 | buildSettings = {
180 | ALWAYS_SEARCH_USER_PATHS = NO;
181 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
182 | CLANG_CXX_LIBRARY = "libc++";
183 | CLANG_ENABLE_MODULES = YES;
184 | CLANG_ENABLE_OBJC_ARC = YES;
185 | CLANG_WARN_BOOL_CONVERSION = YES;
186 | CLANG_WARN_CONSTANT_CONVERSION = YES;
187 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
188 | CLANG_WARN_EMPTY_BODY = YES;
189 | CLANG_WARN_ENUM_CONVERSION = YES;
190 | CLANG_WARN_INT_CONVERSION = YES;
191 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
192 | CLANG_WARN_UNREACHABLE_CODE = YES;
193 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
194 | CODE_SIGN_IDENTITY = "-";
195 | COPY_PHASE_STRIP = NO;
196 | ENABLE_STRICT_OBJC_MSGSEND = YES;
197 | GCC_C_LANGUAGE_STANDARD = gnu99;
198 | GCC_DYNAMIC_NO_PIC = NO;
199 | GCC_OPTIMIZATION_LEVEL = 0;
200 | GCC_PREPROCESSOR_DEFINITIONS = (
201 | "DEBUG=1",
202 | "$(inherited)",
203 | );
204 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
205 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
206 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
207 | GCC_WARN_UNDECLARED_SELECTOR = YES;
208 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
209 | GCC_WARN_UNUSED_FUNCTION = YES;
210 | GCC_WARN_UNUSED_VARIABLE = YES;
211 | MACOSX_DEPLOYMENT_TARGET = 10.10;
212 | MTL_ENABLE_DEBUG_INFO = YES;
213 | ONLY_ACTIVE_ARCH = YES;
214 | SDKROOT = macosx;
215 | };
216 | name = Debug;
217 | };
218 | 4DF97B251A189CC200351BC9 /* Release */ = {
219 | isa = XCBuildConfiguration;
220 | buildSettings = {
221 | ALWAYS_SEARCH_USER_PATHS = NO;
222 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
223 | CLANG_CXX_LIBRARY = "libc++";
224 | CLANG_ENABLE_MODULES = YES;
225 | CLANG_ENABLE_OBJC_ARC = YES;
226 | CLANG_WARN_BOOL_CONVERSION = YES;
227 | CLANG_WARN_CONSTANT_CONVERSION = YES;
228 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
229 | CLANG_WARN_EMPTY_BODY = YES;
230 | CLANG_WARN_ENUM_CONVERSION = YES;
231 | CLANG_WARN_INT_CONVERSION = YES;
232 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
233 | CLANG_WARN_UNREACHABLE_CODE = YES;
234 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
235 | CODE_SIGN_IDENTITY = "-";
236 | COPY_PHASE_STRIP = YES;
237 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
238 | ENABLE_NS_ASSERTIONS = NO;
239 | ENABLE_STRICT_OBJC_MSGSEND = YES;
240 | GCC_C_LANGUAGE_STANDARD = gnu99;
241 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
242 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
243 | GCC_WARN_UNDECLARED_SELECTOR = YES;
244 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
245 | GCC_WARN_UNUSED_FUNCTION = YES;
246 | GCC_WARN_UNUSED_VARIABLE = YES;
247 | MACOSX_DEPLOYMENT_TARGET = 10.10;
248 | MTL_ENABLE_DEBUG_INFO = NO;
249 | SDKROOT = macosx;
250 | };
251 | name = Release;
252 | };
253 | 4DF97B271A189CC200351BC9 /* Debug */ = {
254 | isa = XCBuildConfiguration;
255 | buildSettings = {
256 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
257 | COMBINE_HIDPI_IMAGES = YES;
258 | INFOPLIST_FILE = "$(SRCROOT)/WAYSourceListWindowDemo/Info.plist";
259 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
260 | MACOSX_DEPLOYMENT_TARGET = 10.10;
261 | PRODUCT_NAME = WAYSourceListWindowDemo;
262 | };
263 | name = Debug;
264 | };
265 | 4DF97B281A189CC200351BC9 /* Release */ = {
266 | isa = XCBuildConfiguration;
267 | buildSettings = {
268 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
269 | COMBINE_HIDPI_IMAGES = YES;
270 | INFOPLIST_FILE = "$(SRCROOT)/WAYSourceListWindowDemo/Info.plist";
271 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
272 | MACOSX_DEPLOYMENT_TARGET = 10.10;
273 | PRODUCT_NAME = WAYSourceListWindowDemo;
274 | };
275 | name = Release;
276 | };
277 | /* End XCBuildConfiguration section */
278 |
279 | /* Begin XCConfigurationList section */
280 | 4DF97B041A189CC200351BC9 /* Build configuration list for PBXProject "WAYSourceListWindowDemo" */ = {
281 | isa = XCConfigurationList;
282 | buildConfigurations = (
283 | 4DF97B241A189CC200351BC9 /* Debug */,
284 | 4DF97B251A189CC200351BC9 /* Release */,
285 | );
286 | defaultConfigurationIsVisible = 0;
287 | defaultConfigurationName = Release;
288 | };
289 | 4DF97B261A189CC200351BC9 /* Build configuration list for PBXNativeTarget "WAYSourceListWindowDemo" */ = {
290 | isa = XCConfigurationList;
291 | buildConfigurations = (
292 | 4DF97B271A189CC200351BC9 /* Debug */,
293 | 4DF97B281A189CC200351BC9 /* Release */,
294 | );
295 | defaultConfigurationIsVisible = 0;
296 | defaultConfigurationName = Release;
297 | };
298 | /* End XCConfigurationList section */
299 | };
300 | rootObject = 4DF97B011A189CC200351BC9 /* Project object */;
301 | }
302 |
--------------------------------------------------------------------------------
/WAYSourceListWindowDemo/Base.lproj/MainMenu.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
669 |
670 |
671 |
672 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
719 |
720 |
721 |
722 |
723 |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 |
732 |
733 |
734 |
735 |
736 |
737 |
738 |
739 |
740 |
741 |
742 |
743 |
744 |
745 |
746 |
747 |
748 |
749 |
750 |
751 |
752 |
753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 |
762 |
763 |
764 |
765 |
766 |
767 |
768 |
769 |
770 |
771 |
772 |
773 |
774 |
775 |
776 |
--------------------------------------------------------------------------------