00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #import "CocoaLineTextField.h"
00011
00012
00013 static GWENHYWFAR_CB
00014 int CocoaGui_WLineEdit_SetIntProperty(GWEN_WIDGET *w,
00015 GWEN_DIALOG_PROPERTY prop,
00016 int index,
00017 int value,
00018 int doSignal) {
00019 CocoaLineTextField *textField;
00020
00021 textField=(CocoaLineTextField*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL));
00022 assert(textField);
00023
00024 switch(prop) {
00025 case GWEN_DialogProperty_Enabled:
00026 [textField setEnabled:(value==0)?NO:YES];
00027 return 0;
00028
00029 case GWEN_DialogProperty_Focus:
00030 if ([textField window]) {
00031 [[textField window] makeFirstResponder:textField];
00032 }
00033 return 0;
00034
00035 case GWEN_DialogProperty_Width: {
00036 NSRect frame = [textField frame];
00037 frame.size.width = value;
00038 [textField setFrame:frame];
00039 }
00040 return 0;
00041
00042 case GWEN_DialogProperty_Height:{
00043 NSRect frame = [textField frame];
00044 frame.size.height = value;
00045 [textField setFrame:frame];
00046 }
00047 return 0;
00048
00049 default:
00050 break;
00051 }
00052
00053 DBG_WARN(GWEN_LOGDOMAIN,
00054 "Function is not appropriate for this type of widget (%s)",
00055 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00056 return GWEN_ERROR_INVALID;
00057 }
00058
00059
00060
00061
00062 static GWENHYWFAR_CB
00063 int CocoaGui_WLineEdit_GetIntProperty(GWEN_WIDGET *w,
00064 GWEN_DIALOG_PROPERTY prop,
00065 int index,
00066 int defaultValue) {
00067 CocoaLineTextField *textField;
00068
00069 textField=(CocoaLineTextField*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL));
00070 assert(textField);
00071
00072 switch(prop) {
00073 case GWEN_DialogProperty_Enabled:
00074 return ([textField isEnabled])?1:0;
00075
00076
00077 case GWEN_DialogProperty_Focus:
00078 if ([textField window]) {
00079 if ([[textField window] firstResponder] == textField) return 1;
00080 }
00081 return 0;
00082
00083 case GWEN_DialogProperty_Width:
00084 return [textField frame].size.width;
00085
00086 case GWEN_DialogProperty_Height:
00087 return [textField 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_WLineEdit_SetCharProperty(GWEN_WIDGET *w,
00103 GWEN_DIALOG_PROPERTY prop,
00104 int index,
00105 const char *value,
00106 int doSignal) {
00107 CocoaLineTextField *textField;
00108
00109 textField=(CocoaLineTextField*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL));
00110 assert(textField);
00111
00112 switch(prop) {
00113 case GWEN_DialogProperty_Value:{
00114 NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding];
00115 [textField setStringValue:stringValue];
00116 [stringValue release];
00117 }
00118 default:
00119 break;
00120 }
00121
00122 DBG_WARN(GWEN_LOGDOMAIN,
00123 "Function is not appropriate for this type of widget (%s)",
00124 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00125 return GWEN_ERROR_INVALID;
00126 }
00127
00128
00129
00130 static GWENHYWFAR_CB
00131 const char* CocoaGui_WLineEdit_GetCharProperty(GWEN_WIDGET *w,
00132 GWEN_DIALOG_PROPERTY prop,
00133 int index,
00134 const char *defaultValue) {
00135 CocoaLineTextField *textField;
00136
00137 textField=(CocoaLineTextField*)(GWEN_Widget_GetImplData(w, COCOA_DIALOG_WIDGET_REAL));
00138 assert(textField);
00139
00140 switch(prop) {
00141 case GWEN_DialogProperty_Title:
00142 return [[textField stringValue] cStringUsingEncoding:NSUTF8StringEncoding];
00143 default:
00144 break;
00145 }
00146
00147 DBG_WARN(GWEN_LOGDOMAIN,
00148 "Function is not appropriate for this type of widget (%s)",
00149 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00150 return defaultValue;
00151 }
00152
00153
00154
00155 static void CocoaGui_WLineEdit_End_Editing_text_handler(NSTextField *textField, void* data) {
00156 GWEN_WIDGET *w;
00157 int rv;
00158
00159
00160
00161 w=data;
00162 assert(w);
00163 rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
00164 GWEN_DialogEvent_TypeActivated,
00165 GWEN_Widget_GetName(w));
00166 if (rv==GWEN_DialogEvent_ResultAccept)
00167 CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1);
00168 else if (rv==GWEN_DialogEvent_ResultReject)
00169 CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0);
00170 }
00171
00172
00173
00174 static void CocoaGui_WLineEdit_Changed_text_handler(NSTextField *textField, void* data) {
00175 GWEN_WIDGET *w;
00176 int rv;
00177
00178
00179
00180 w=data;
00181 assert(w);
00182 rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
00183 GWEN_DialogEvent_TypeValueChanged,
00184 GWEN_Widget_GetName(w));
00185 if (rv==GWEN_DialogEvent_ResultAccept)
00186 CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1);
00187 else if (rv==GWEN_DialogEvent_ResultReject)
00188 CocoaGui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0);
00189 }
00190
00191
00192
00193 int CocoaGui_WLineEdit_Setup(GWEN_WIDGET *w) {
00194 CocoaLineTextField *textField;
00195 const char *s;
00196 uint32_t flags;
00197 GWEN_WIDGET *wParent;
00198
00199
00200
00201
00202 flags=GWEN_Widget_GetFlags(w);
00203 wParent=GWEN_Widget_Tree_GetParent(w);
00204 s=GWEN_Widget_GetText(w, 0);
00205
00206
00207 textField = [[[CocoaLineTextField alloc] initWithFrame:NSMakeRect(10.0, 10.0, 100.0, 22.0)] autorelease];
00208 if (flags & GWEN_WIDGET_FLAGS_FILLX) textField.fillX = YES;
00209 if (flags & GWEN_WIDGET_FLAGS_FILLY) textField.fillY = YES;
00210 if (flags & GWEN_WIDGET_FLAGS_PASSWORD) {
00211 [textField setCell:[[[NSSecureTextFieldCell alloc] init] autorelease]];
00212 [textField setDrawsBackground:YES];
00213 [textField setBezeled:YES];
00214 }
00215
00216 [[textField cell] setLineBreakMode:NSLineBreakByClipping];
00217
00218
00219 [textField setEditable:YES];
00220
00221
00222
00223 if (s && *s) {
00224 NSString *stringValue = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding];
00225 [textField setStringValue:stringValue];
00226 [stringValue release];
00227 }
00228
00229 GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_REAL, (void*) textField);
00230 GWEN_Widget_SetImplData(w, COCOA_DIALOG_WIDGET_CONTENT, (void*) textField);
00231
00232 GWEN_Widget_SetSetIntPropertyFn(w, CocoaGui_WLineEdit_SetIntProperty);
00233 GWEN_Widget_SetGetIntPropertyFn(w, CocoaGui_WLineEdit_GetIntProperty);
00234 GWEN_Widget_SetSetCharPropertyFn(w, CocoaGui_WLineEdit_SetCharProperty);
00235 GWEN_Widget_SetGetCharPropertyFn(w, CocoaGui_WLineEdit_GetCharProperty);
00236
00237 gwenTextFieldActionPtr ptr = CocoaGui_WLineEdit_End_Editing_text_handler;
00238 [textField setC_ActionPtr:ptr Data:w];
00239
00240 gwenTextFieldActionPtr changed_ptr = CocoaGui_WLineEdit_Changed_text_handler;
00241 [textField setC_TextChanged_ActionPtr:changed_ptr Data:w];
00242
00243
00244 if (wParent)
00245 GWEN_Widget_AddChildGuiWidget(wParent, w);
00246
00247 return 0;
00248 }
00249
00250