1/*************************************************************************** 2 begin : August 19 2010 3 copyright : (C) 2010 by Samuel Strupp 4 5 *************************************************************************** 6 * Please see toplevel file COPYING for license details * 7 ***************************************************************************/ 8 9 10 11/* 12 * Note: This is a special use case for gtk_notebook. 13 * To use it as a WidgetStack we have to disable drawing od tabs 14 * and borders by calling: 15 * - gtk_notebook_set_show_tabs(GTK_NOTEBOOK(g), FALSE); 16 * - gtk_notebook_set_show_border(GTK_NOTEBOOK(g), FALSE); 17 * 18 */ 19 20 21 22static GWENHYWFAR_CB 23int CocoaGui_WStack_SetIntProperty(GWEN_WIDGET *w, 24 GWEN_DIALOG_PROPERTY prop, 25 int index, 26 int value, 27 int doSignal) { 28 CocoaTabView *stackView; 29 30 stackView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); 31 assert(stackView); 32 33 switch(prop) { 34 case GWEN_DialogProperty_Enabled: 35 return 0; 36 37 case GWEN_DialogProperty_Focus: 38 return 0; 39 40 case GWEN_DialogProperty_Width: { 41 NSRect frame = [stackView frame]; 42 frame.size.width = value; 43 [stackView setFrame:frame]; 44 } 45 return 0; 46 47 case GWEN_DialogProperty_Height: { 48 NSRect frame = [stackView frame]; 49 frame.size.height = value; 50 [stackView setFrame:frame]; 51 } 52 return 0; 53 54 case GWEN_DialogProperty_Value: 55 if (value >= 0 && value < [stackView numberOfTabViewItems]) { 56 [stackView selectTabViewItemAtIndex:value]; 57 } 58 return 0; 59 60 default: 61 break; 62 } 63 64 DBG_WARN(GWEN_LOGDOMAIN, 65 "Function is not appropriate for this type of widget (%s)", 66 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); 67 return GWEN_ERROR_INVALID; 68} 69 70 71 72 73static GWENHYWFAR_CB 74int CocoaGui_WStack_GetIntProperty(GWEN_WIDGET *w, 75 GWEN_DIALOG_PROPERTY prop, 76 int index, 77 int defaultValue) { 78 CocoaTabView *stackView; 79 80 stackView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); 81 assert(stackView); 82 83 switch(prop) { 84 case GWEN_DialogProperty_Enabled: 85 return 1; 86 87 case GWEN_DialogProperty_Focus: 88 return 0; 89 90 case GWEN_DialogProperty_Width: 91 return [stackView frame].size.width; 92 93 case GWEN_DialogProperty_Height: 94 return [stackView frame].size.height; 95 96 case GWEN_DialogProperty_Value: 97 return [stackView indexOfTabViewItem:[stackView selectedTabViewItem]]; 98 99 default: 100 break; 101 } 102 103 DBG_WARN(GWEN_LOGDOMAIN, 104 "Function is not appropriate for this type of widget (%s)", 105 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); 106 return defaultValue; 107} 108 109 110 111static GWENHYWFAR_CB 112int CocoaGui_WStack_SetCharProperty(GWEN_WIDGET *w, 113 GWEN_DIALOG_PROPERTY prop, 114 int index, 115 const char *value, 116 int doSignal) { 117 CocoaTabView *stackView; 118 119 stackView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); 120 assert(stackView); 121 122 DBG_WARN(GWEN_LOGDOMAIN, 123 "Function is not appropriate for this type of widget (%s)", 124 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); 125 return GWEN_ERROR_INVALID; 126} 127 128 129 130static GWENHYWFAR_CB 131const char* CocoaGui_WStack_GetCharProperty(GWEN_WIDGET *w, 132 GWEN_DIALOG_PROPERTY prop, 133 int index, 134 const char *defaultValue) { 135 CocoaTabView *stackView; 136 137 stackView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); 138 assert(stackView); 139 140 DBG_WARN(GWEN_LOGDOMAIN, 141 "Function is not appropriate for this type of widget (%s)", 142 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); 143 return defaultValue; 144} 145 146 147 148static GWENHYWFAR_CB 149int CocoaGui_WStack_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { 150 CocoaTabView *stackView; 151 152 stackView=(CocoaTabView*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); 153 assert(stackView); 154 155 NSView *subview =(NSView*)(GWEN_Widget_GetImplData(wChild, COCOA_DIALOG_WIDGET_REAL)); 156 assert(subview); 157 158 NSTabViewItem *item = [[NSTabViewItem alloc] init]; 159 160 [item setView:subview]; 161 162 [stackView addTabViewItem:item]; 163 [item release]; 164 165 return 0; 166} 167 168 169 170int CocoaGui_WStack_Setup(GWEN_WIDGET *w) { 171 CocoaTabView *stackView; 172 uint32_t flags; 173 GWEN_WIDGET *wParent; 174 175 flags=GWEN_Widget_GetFlags(w); 176 wParent=GWEN_Widget_Tree_GetParent(w); 177 178 stackView = [[[CocoaTabView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 100.0, 100.0)] autorelease]; 179 [stackView setTabViewType:NSNoTabsNoBorder]; 180 if (flags & GWEN_WIDGET_FLAGS_FILLX) stackView.fillX = YES; 181 if (flags & GWEN_WIDGET_FLAGS_FILLY) stackView.fillY = YES; 182 183 184 GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) stackView); 185 GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) stackView); 186 187 GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WStack_SetIntProperty); 188 GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WStack_GetIntProperty); 189 GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WStack_SetCharProperty); 190 GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WStack_GetCharProperty); 191 GWEN_Widget_SetAddChildGuiWidgetFn(w, CocoaGui_WStack_AddChildGuiWidget); 192 193 if (wParent) 194 GWEN_Widget_AddChildGuiWidget(wParent, w); 195 196 return 0; 197} 198 199 200