UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2024 Olaf Wintermann. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #import "toolkit.h" 30 31 #import "../ui/container.h" 32 33 #define ui_lb2bool(b) ((b) == UI_LAYOUT_TRUE ? TRUE : FALSE) 34 #define ui_bool2lb(b) ((b) ? UI_LAYOUT_TRUE : UI_LAYOUT_FALSE) 35 36 typedef struct UiLayout UiLayout; 37 typedef enum UiLayoutBool UiLayoutBool; 38 39 enum UiLayoutBool { 40 UI_LAYOUT_UNDEFINED = 0, 41 UI_LAYOUT_TRUE, 42 UI_LAYOUT_FALSE, 43 }; 44 45 struct UiLayout { 46 UiTri fill; 47 //UiBool newline; 48 //char *label; 49 UiBool hexpand; 50 UiBool vexpand; 51 UiBool hfill; 52 UiBool vfill; 53 //int width; 54 int colspan; 55 int rowspan; 56 }; 57 58 #define UI_INIT_LAYOUT(args) (UiLayout) {\ 59 .fill = args.fill, \ 60 .hexpand = args.hexpand, \ 61 .vexpand = args.vexpand, \ 62 .hfill = args.hfill, \ 63 .vfill = args.vfill, \ 64 .colspan = args.colspan, \ 65 .rowspan = args.rowspan } 66 67 68 @protocol Container 69 70 @property UiLayout uilayout; 71 @property const char *label; 72 @property UiBool newline; 73 74 - (void) addView:(NSView*)view fill:(BOOL)fill; 75 76 @end 77 78 @interface BoxContainer : NSStackView<Container> 79 80 - (BoxContainer*)init:(NSUserInterfaceLayoutOrientation)orientation spacing:(int)spacing; 81 82 @end 83 84 85 86 87 88 UiContainerX* ui_create_container(UiObject *obj, id<Container> container); 89 90 void ui_container_add(UiObject *obj, NSView *view, UiLayout *layout, UiBool fill); 91