00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #import "CocoaButton.h"
00011
00012
00013 static GWENHYWFAR_CB
00014 int CocoaGui_WPushButton_SetIntProperty(GWEN_WIDGET *w,
00015 GWEN_DIALOG_PROPERTY prop,
00016 int index,
00017 int value,
00018 int doSignal) {
00019
00020 CocoaButton *button;
00021
00022 button=(CocoaButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL));
00023 assert(button);
00024
00025 switch(prop) {
00026 case GWEN_DialogProperty_Enabled:
00027 [button setEnabled:(value==0)?NO:YES];
00028 return 0;
00029
00030 case GWEN_DialogProperty_Focus:
00031 if ([button window]) {
00032 [[button window] makeFirstResponder:button];
00033 }
00034 return 0;
00035
00036 case GWEN_DialogProperty_Width: {
00037 NSRect frame = [button frame];
00038 frame.size.width = value;
00039 [button setFrame:frame];
00040 }
00041 return 0;
00042
00043 case GWEN_DialogProperty_Height: {
00044 NSRect frame = [button frame];
00045 frame.size.height = value;
00046 [button setFrame:frame];
00047 }
00048 return 0;
00049
00050 default:
00051 break;
00052 }
00053
00054 DBG_WARN(GWEN_LOGDOMAIN,
00055 "Function is not appropriate for this type of widget (%s)",
00056 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00057 return GWEN_ERROR_INVALID;
00058 }
00059
00060
00061
00062
00063 static GWENHYWFAR_CB
00064 int CocoaGui_WPushButton_GetIntProperty(GWEN_WIDGET *w,
00065 GWEN_DIALOG_PROPERTY prop,
00066 int index,
00067 int defaultValue) {
00068 CocoaButton *button;
00069
00070 button=(CocoaButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL));
00071 assert(button);
00072
00073 switch(prop) {
00074 case GWEN_DialogProperty_Enabled:
00075 return ([button isEnabled]==YES)?1:0;
00076
00077 case GWEN_DialogProperty_Focus:
00078 if ([button window]) {
00079 if ([[button window] firstResponder] == button) return 1;
00080 }
00081 return 0;
00082
00083 case GWEN_DialogProperty_Width:
00084 return [button frame].size.width;
00085
00086 case GWEN_DialogProperty_Height:
00087 return [button frame].size.height;
00088
00089 default:
00090 break;
00091 }
00092
00093 DBG_WARN(GWEN_LOGDOMAIN,
00094 "Function is not appropriate for this type of widget (%s)",
00095 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00096 return defaultValue;
00097 }
00098
00099
00100
00101 static GWENHYWFAR_CB
00102 int CocoaGui_WPushButton_SetCharProperty(GWEN_WIDGET *w,
00103 GWEN_DIALOG_PROPERTY prop,
00104 int index,
00105 const char *value,
00106 int doSignal) {
00107
00108 CocoaButton *button;
00109
00110 button=(CocoaButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL));
00111 assert(button);
00112
00113 switch(prop) {
00114 case GWEN_DialogProperty_Title: {
00115 NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding];
00116 [button setTitle:stringValue];
00117 [stringValue release];
00118 }
00119 return 0;
00120 default:
00121 break;
00122 }
00123
00124 DBG_WARN(GWEN_LOGDOMAIN,
00125 "Function is not appropriate for this type of widget (%s)",
00126 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00127 return GWEN_ERROR_INVALID;
00128 }
00129
00130
00131
00132 static GWENHYWFAR_CB
00133 const char* CocoaGui_WPushButton_GetCharProperty(GWEN_WIDGET *w,
00134 GWEN_DIALOG_PROPERTY prop,
00135 int index,
00136 const char *defaultValue) {
00137 CocoaButton *button;
00138
00139 button=(CocoaButton*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL));
00140 assert(button);
00141
00142 switch(prop) {
00143 case GWEN_DialogProperty_Title:
00144 return [[button stringValue] cStringUsingEncoding:NSUTF8StringEncoding];
00145 default:
00146 break;
00147 }
00148
00149 DBG_WARN(GWEN_LOGDOMAIN,
00150 "Function is not appropriate for this type of widget (%s)",
00151 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00152 return defaultValue;
00153 }
00154
00155
00156
00157 static void CocoaGui_WPushButton_Clicked_handler(NSButton *button, void* data) {
00158 GWEN_WIDGET *w;
00159 int rv;
00160
00161 DBG_ERROR(0, "Clicked");
00162 w=(GWEN_WIDGET*)data;
00163 assert(w);
00164 rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
00165 GWEN_DialogEvent_TypeActivated,
00166 GWEN_Widget_GetName(w));
00167 if (rv==GWEN_DialogEvent_ResultAccept)
00168 CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1);
00169 else if (rv==GWEN_DialogEvent_ResultReject)
00170 CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0);
00171 }
00172
00173
00174
00175 int CocoaGui_WPushButton_Setup(GWEN_WIDGET *w) {
00176
00177 CocoaButton *button;
00178 const char *s;
00179 uint32_t flags;
00180 GWEN_WIDGET *wParent;
00181
00182 flags=GWEN_Widget_GetFlags(w);
00183 wParent=GWEN_Widget_Tree_GetParent(w);
00184 s=GWEN_Widget_GetText(w, 0);
00185
00186
00187
00188 button = [[[CocoaButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 60.0, 24.0)] autorelease];
00189 if (flags & GWEN_WIDGET_FLAGS_FILLX) button.fillX = YES;
00190 if (flags & GWEN_WIDGET_FLAGS_FILLY) button.fillY = YES;
00191 [button setBezelStyle:NSRoundedBezelStyle];
00192 if (s && *s) {
00193 NSString *title = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding];
00194 [button setTitle:title];
00195 [title release];
00196 }
00197
00198 s=GWEN_Widget_GetIconFileName(w);
00199 if (s && *s) {
00200 GWEN_STRINGLIST *sl;
00201
00202 sl=GWEN_Dialog_GetMediaPaths(GWEN_Widget_GetDialog(w));
00203 if (sl) {
00204 int rv;
00205 GWEN_BUFFER *tbuf;
00206
00207 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
00208 rv=GWEN_Directory_FindFileInPaths(sl, s, tbuf);
00209 if (rv<0) {
00210 DBG_ERROR(GWEN_LOGDOMAIN, "Image file [%s] not found (%d)", s, rv);
00211
00212 }
00213 else {
00214 NSString *pathToIconFile = [[NSString alloc] initWithCString:GWEN_Buffer_GetStart(tbuf) encoding:NSUTF8StringEncoding];
00215 if (pathToIconFile) {
00216 NSImage *icon = [[NSImage alloc] initWithContentsOfFile:pathToIconFile];
00217 CGFloat height = 15.0;
00218 NSSize imageSize = [icon size];
00219 imageSize.width = round(imageSize.width/(imageSize.height/height));
00220 imageSize.height = 15.0;
00221 [icon setSize:imageSize];
00222 [pathToIconFile release];
00223 if (icon) {
00224
00225 [button setImage:icon];
00226 [button setImagePosition:NSImageLeft];
00227
00228 [icon release];
00229 }
00230 }
00231 }
00232 GWEN_Buffer_free(tbuf);
00233 }
00234 }
00235
00236 GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) button);
00237 GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) button);
00238
00239 GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WPushButton_SetIntProperty);
00240 GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WPushButton_GetIntProperty);
00241 GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WPushButton_SetCharProperty);
00242 GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WPushButton_GetCharProperty);
00243
00244 gwenActionPtr ptr = CocoaGui_WPushButton_Clicked_handler;
00245 [button setC_ActionPtr:ptr Data:w];
00246
00247 if (wParent)
00248 GWEN_Widget_AddChildGuiWidget(wParent, w);
00249
00250 return 0;
00251 }
00252
00253