gwenhywfar
4.3.1
|
00001 /*************************************************************************** 00002 begin : Aug 10 2010 00003 copyright : (C) 2010 by Samuel Strupp 00004 00005 *************************************************************************** 00006 * Please see toplevel file COPYING for license details * 00007 ***************************************************************************/ 00008 00009 00010 #import "CocoaRadioButton.h" 00011 00012 00013 static GWENHYWFAR_CB 00014 int CocoaGui_WRadioButton_SetIntProperty(GWEN_WIDGET *w, 00015 GWEN_DIALOG_PROPERTY prop, 00016 int index, 00017 int value, 00018 int doSignal) { 00019 NSButton *radioButton; 00020 00021 radioButton = (NSButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); 00022 assert(radioButton); 00023 00024 switch(prop) { 00025 case GWEN_DialogProperty_Enabled: 00026 [radioButton setEnabled:(value==0)?NO:YES]; 00027 return 0; 00028 00029 case GWEN_DialogProperty_Focus: 00030 if ([radioButton window]) { 00031 [[radioButton window] makeFirstResponder:radioButton]; 00032 } 00033 return 0; 00034 00035 case GWEN_DialogProperty_Width: { 00036 NSRect frame = [radioButton frame]; 00037 frame.size.width = value; 00038 [radioButton setFrame:frame]; 00039 } 00040 return 0; 00041 00042 case GWEN_DialogProperty_Height: { 00043 NSRect frame = [radioButton frame]; 00044 frame.size.height = value; 00045 [radioButton setFrame:frame]; 00046 } 00047 return 0; 00048 00049 case GWEN_DialogProperty_Value:{ 00050 if (value==0) [radioButton setState:NSOffState]; 00051 else [radioButton setState:NSOnState]; 00052 } 00053 return 0; 00054 00055 default: 00056 break; 00057 } 00058 00059 DBG_WARN(GWEN_LOGDOMAIN, 00060 "Function is not appropriate for this type of widget (%s)", 00061 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); 00062 return GWEN_ERROR_INVALID; 00063 } 00064 00065 00066 00067 00068 static GWENHYWFAR_CB 00069 int CocoaGui_WRadioButton_GetIntProperty(GWEN_WIDGET *w, 00070 GWEN_DIALOG_PROPERTY prop, 00071 int index, 00072 int defaultValue) { 00073 NSButton *radioButton; 00074 00075 radioButton = (NSButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); 00076 assert(radioButton); 00077 00078 switch(prop) { 00079 case GWEN_DialogProperty_Enabled: 00080 return ([radioButton isEnabled]==YES)?1:0; 00081 00082 case GWEN_DialogProperty_Focus: 00083 if ([radioButton window]) { 00084 if ([[radioButton window] firstResponder] == radioButton) return 1; 00085 } 00086 return 0; 00087 00088 case GWEN_DialogProperty_Width: 00089 return [radioButton frame].size.width; 00090 00091 case GWEN_DialogProperty_Height: 00092 return [radioButton frame].size.height; 00093 00094 case GWEN_DialogProperty_Value: 00095 return ([radioButton state]==NSOnState)?1:0; 00096 00097 default: 00098 break; 00099 } 00100 00101 DBG_WARN(GWEN_LOGDOMAIN, 00102 "Function is not appropriate for this type of widget (%s)", 00103 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); 00104 return defaultValue; 00105 } 00106 00107 00108 00109 static GWENHYWFAR_CB 00110 int CocoaGui_WRadioButton_SetCharProperty(GWEN_WIDGET *w, 00111 GWEN_DIALOG_PROPERTY prop, 00112 int index, 00113 const char *value, 00114 int doSignal) { 00115 NSButton *radioButton; 00116 00117 radioButton = (NSButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); 00118 assert(radioButton); 00119 00120 switch(prop) { 00121 case GWEN_DialogProperty_Title: { 00122 NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding]; 00123 [radioButton setTitle:stringValue]; 00124 [stringValue release]; 00125 } 00126 return 0; 00127 default: 00128 break; 00129 } 00130 00131 DBG_WARN(GWEN_LOGDOMAIN, 00132 "Function is not appropriate for this type of widget (%s)", 00133 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); 00134 return GWEN_ERROR_INVALID; 00135 } 00136 00137 00138 00139 static GWENHYWFAR_CB 00140 const char* CocoaGui_WRadioButton_GetCharProperty(GWEN_WIDGET *w, 00141 GWEN_DIALOG_PROPERTY prop, 00142 int index, 00143 const char *defaultValue) { 00144 NSButton *radioButton; 00145 00146 radioButton = (NSButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL)); 00147 assert(radioButton); 00148 00149 switch(prop) { 00150 case GWEN_DialogProperty_Title: 00151 return [[radioButton stringValue] cStringUsingEncoding:NSUTF8StringEncoding]; 00152 default: 00153 break; 00154 } 00155 00156 DBG_WARN(GWEN_LOGDOMAIN, 00157 "Function is not appropriate for this type of widget (%s)", 00158 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); 00159 return defaultValue; 00160 } 00161 00162 00163 00164 static void CocoaGui_WRadioButton_Toggled_handler(NSButton *button, void* data) { 00165 GWEN_WIDGET *w; 00166 int rv; 00167 00168 DBG_ERROR(0, "Toggled"); 00169 w=data; 00170 assert(w); 00171 rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), 00172 GWEN_DialogEvent_TypeActivated, 00173 GWEN_Widget_GetName(w)); 00174 if (rv==GWEN_DialogEvent_ResultAccept) 00175 CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); 00176 else if (rv==GWEN_DialogEvent_ResultReject) 00177 CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); 00178 } 00179 00180 00181 00182 int CocoaGui_WRadioButton_Setup(GWEN_WIDGET *w) { 00183 CocoaRadioButton *radioButton; 00184 const char *s; 00185 uint32_t flags; 00186 GWEN_WIDGET *wParent; 00187 00188 GWEN_WIDGET *wT; 00189 int groupId; 00190 00191 flags=GWEN_Widget_GetFlags(w); 00192 wParent=GWEN_Widget_Tree_GetParent(w); 00193 groupId=GWEN_Widget_GetGroupId(w); 00194 00195 s=GWEN_Widget_GetText(w, 0); 00196 00197 //Create Button 00198 radioButton = [[[CocoaRadioButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 60.0, 24.0)] autorelease]; 00199 if (flags & GWEN_WIDGET_FLAGS_FILLX) radioButton.fillX = YES; 00200 if (flags & GWEN_WIDGET_FLAGS_FILLY) radioButton.fillY = YES; 00201 if (s && *s) { 00202 NSString *title = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding]; 00203 [radioButton setTitle:title]; 00204 [title release]; 00205 } 00206 00207 /* get root widget */ 00208 wT=wParent; 00209 while(GWEN_Widget_Tree_GetParent(wT)) 00210 wT=GWEN_Widget_Tree_GetParent(wT); 00211 00212 // get first radio button of the same group 00213 while(wT) { 00214 if ((GWEN_Widget_GetType(wT)==GWEN_Widget_TypeRadioButton) && 00215 GWEN_Widget_GetGroupId(wT)==groupId) 00216 break; 00217 wT=GWEN_Widget_Tree_GetBelow(wT); 00218 } 00219 00220 if (wT && wT!=w) { 00221 CocoaRadioButton *sameGroupRadioButton = (CocoaRadioButton*)(GWEN_Widget_GetImplData(wT, COCOA_DIALOG_WIDGET_REAL)); 00222 [radioButton setGroupManager:[sameGroupRadioButton getGroupManager]]; 00223 } 00224 else { 00225 [radioButton createNewGroupManagerWithGroupID:groupId]; 00226 } 00227 00228 00229 // set pointers 00230 GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) radioButton); 00231 GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) radioButton); 00232 00233 GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WRadioButton_SetIntProperty); 00234 GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WRadioButton_GetIntProperty); 00235 GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WRadioButton_SetCharProperty); 00236 GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WRadioButton_GetCharProperty); 00237 00238 gwenActionPtr ptr = CocoaGui_WRadioButton_Toggled_handler; 00239 [radioButton setC_ActionPtr:ptr Data:w]; 00240 00241 if (wParent) 00242 GWEN_Widget_AddChildGuiWidget(wParent, w); 00243 00244 return 0; 00245 } 00246 00247