ui/cocoa/MainWindow.m

changeset 110
c00e968d018b
parent 109
c3dfcb8f0be7
child 112
c3f2f16fa4b8
equal deleted inserted replaced
109:c3dfcb8f0be7 110:c00e968d018b
27 */ 27 */
28 28
29 #import "MainWindow.h" 29 #import "MainWindow.h"
30 #import "Container.h" 30 #import "Container.h"
31 #import "GridLayout.h" 31 #import "GridLayout.h"
32 #import "BoxContainer.h"
32 #import "../common/object.h" 33 #import "../common/object.h"
33 #import <objc/runtime.h> 34 #import <objc/runtime.h>
34 35
35 #import "EventData.h" 36 #import "EventData.h"
36 #import "menu.h" 37 #import "menu.h"
37 #import "Toolbar.h" 38 #import "Toolbar.h"
38 39
39 @implementation MainWindow 40 @implementation MainWindow
40 41
41 - (MainWindow*)init:(UiObject*)obj { 42 - (MainWindow*)init:(UiObject*)obj withSidebar:(BOOL)sidebar {
42 NSRect frame = NSMakeRect(300, 200, 600, 500); 43 NSRect frame = NSMakeRect(300, 200, 600, 500);
43 44
44 self = [self initWithContentRect:frame 45 self = [self initWithContentRect:frame
45 styleMask:NSWindowStyleMaskTitled | 46 styleMask:NSWindowStyleMaskTitled |
46 NSWindowStyleMaskResizable | 47 NSWindowStyleMaskResizable |
47 NSWindowStyleMaskClosable | 48 NSWindowStyleMaskClosable |
48 NSWindowStyleMaskMiniaturizable 49 NSWindowStyleMaskMiniaturizable
49 backing:NSBackingStoreBuffered 50 backing:NSBackingStoreBuffered
50 defer:false]; 51 defer:false];
51 52
53
52 if(uic_toolbar_isenabled()) { 54 if(uic_toolbar_isenabled()) {
53 UiToolbar *toolbar = [[UiToolbar alloc]initWithObject:obj]; 55 UiToolbar *toolbar = [[UiToolbar alloc]initWithObject:obj];
54 [self setToolbar:toolbar]; 56 [self setToolbar:toolbar];
55 } 57 }
56 58
59 int top = 4;
60 NSView *content = self.contentView;
61 if(sidebar) {
62 self.styleMask |= NSWindowStyleMaskFullSizeContentView;
63 self.titleVisibility = NSWindowTitleHidden;
64 self.titlebarAppearsTransparent = YES;
65
66 NSSplitView *splitview = [[NSSplitView alloc]init];
67 splitview.vertical = YES;
68 splitview.dividerStyle = NSSplitViewDividerStyleThin;
69 splitview.translatesAutoresizingMaskIntoConstraints = false;
70 [self.contentView addSubview:splitview];
71
72 [NSLayoutConstraint activateConstraints:@[
73 [splitview.topAnchor constraintEqualToAnchor:self.contentView.topAnchor constant:0],
74 [splitview.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor],
75 [splitview.trailingAnchor constraintEqualToAnchor:self.contentView.trailingAnchor],
76 [splitview.bottomAnchor constraintEqualToAnchor:self.contentView.bottomAnchor]
77 ]];
78
79 _sidebar = [[NSView alloc]initWithFrame:NSMakeRect(0,0,100,100)];
80 [splitview addArrangedSubview:_sidebar];
81
82 content = [[NSView alloc]initWithFrame:NSMakeRect(0,0,100,100)];
83 [splitview addArrangedSubview:content];
84
85 top = 34;
86 }
57 87
58 // create a vertical stackview as default container 88 // create a vertical stackview as default container
59 BoxContainer *vbox = [[BoxContainer alloc] init:NSUserInterfaceLayoutOrientationVertical spacing:0]; 89 BoxContainer *vbox = [[BoxContainer alloc] init:NSUserInterfaceLayoutOrientationVertical spacing:0];
60 //GridLayout *vbox = [[GridLayout alloc] init]; 90 //GridLayout *vbox = [[GridLayout alloc] init];
61 vbox.translatesAutoresizingMaskIntoConstraints = false; 91 vbox.translatesAutoresizingMaskIntoConstraints = false;
62 [self.contentView addSubview:vbox]; 92 [content addSubview:vbox];
63 [NSLayoutConstraint activateConstraints:@[ 93 [NSLayoutConstraint activateConstraints:@[
64 [vbox.topAnchor constraintEqualToAnchor:self.contentView.topAnchor constant:4], 94 [vbox.topAnchor constraintEqualToAnchor:content.topAnchor constant:top],
65 [vbox.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor], 95 [vbox.leadingAnchor constraintEqualToAnchor:content.leadingAnchor],
66 [vbox.trailingAnchor constraintEqualToAnchor:self.contentView.trailingAnchor], 96 [vbox.trailingAnchor constraintEqualToAnchor:content.trailingAnchor],
67 [vbox.bottomAnchor constraintEqualToAnchor:self.contentView.bottomAnchor] 97 [vbox.bottomAnchor constraintEqualToAnchor:content.bottomAnchor],
68 ]]; 98 ]];
69
70 uic_object_push_container(obj, ui_create_container(obj, vbox)); 99 uic_object_push_container(obj, ui_create_container(obj, vbox));
71 100
72 return self; 101 return self;
73 } 102 }
74 103
75 @end 104 @end
76
77 105
78 106
79 @implementation MainWindowController 107 @implementation MainWindowController
80 108
81 - (MainWindowController*)initWithWindow:(UiObject*)obj window:(NSWindow*)window { 109 - (MainWindowController*)initWithWindow:(UiObject*)obj window:(NSWindow*)window {
271 for(MenuItemState *state in rgroup) { 299 for(MenuItemState *state in rgroup) {
272 state.state = value == index; 300 state.state = value == index;
273 index++; 301 index++;
274 } 302 }
275 } 303 }
304
305
306 UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs *args) {
307 MainWindow *window = (__bridge MainWindow*)obj->wobj;
308 if(window.sidebar == nil) {
309 return NULL;
310 }
311 NSView *sidebar = window.sidebar;
312
313 // create a vertical stackview as default container
314 BoxContainer *vbox = [[BoxContainer alloc] init:NSUserInterfaceLayoutOrientationVertical spacing:args->spacing];
315 //GridLayout *vbox = [[GridLayout alloc] init];
316 vbox.translatesAutoresizingMaskIntoConstraints = false;
317 [sidebar addSubview:vbox];
318 [NSLayoutConstraint activateConstraints:@[
319 [vbox.topAnchor constraintEqualToAnchor:sidebar.topAnchor constant:34],
320 [vbox.leadingAnchor constraintEqualToAnchor:sidebar.leadingAnchor],
321 [vbox.trailingAnchor constraintEqualToAnchor:sidebar.trailingAnchor],
322 [vbox.bottomAnchor constraintEqualToAnchor:sidebar.bottomAnchor]
323 ]];
324 uic_object_push_container(obj, ui_create_container(obj, vbox));
325
326 return NULL;
327 }

mercurial