00001 @import "CPTextField.j" 00002 00003 #include "Platform/Platform.h" 00004 00005 00006 var TOP_PADDING = 4.0, 00007 BOTTOM_PADDING = 3.0; 00008 HORIZONTAL_PADDING = 3.0; 00009 00010 var CPSecureTextFieldDOMInputElement = nil; 00011 00012 @implementation CPSecureTextField : CPTextField 00013 { 00014 } 00015 00016 #if PLATFORM(DOM) 00017 + (DOMElement)_inputElement 00018 { 00019 if (!CPSecureTextFieldDOMInputElement) 00020 { 00021 CPSecureTextFieldDOMInputElement = document.createElement("input"); 00022 CPSecureTextFieldDOMInputElement.type = "password"; 00023 CPSecureTextFieldDOMInputElement.style.position = "absolute"; 00024 CPSecureTextFieldDOMInputElement.style.top = "0px"; 00025 CPSecureTextFieldDOMInputElement.style.left = "0px"; 00026 CPSecureTextFieldDOMInputElement.style.width = "100%" 00027 CPSecureTextFieldDOMInputElement.style.height = "100%"; 00028 CPSecureTextFieldDOMInputElement.style.border = "0px"; 00029 CPSecureTextFieldDOMInputElement.style.padding = "0px"; 00030 CPSecureTextFieldDOMInputElement.style.whiteSpace = "pre"; 00031 CPSecureTextFieldDOMInputElement.style.background = "transparent"; 00032 CPSecureTextFieldDOMInputElement.style.outline = "none"; 00033 CPSecureTextFieldDOMInputElement.style.paddingLeft = HORIZONTAL_PADDING + "px"; 00034 CPSecureTextFieldDOMInputElement.style.paddingTop = TOP_PADDING - 2.0 + "px"; 00035 CPSecureTextFieldDOMInputElement.style.margin = "0px"; 00036 } 00037 00038 return CPSecureTextFieldDOMInputElement; 00039 } 00040 #endif 00041 00042 - (id)initWithFrame:(CGRect)aFrame 00043 { 00044 self = [super initWithFrame:aFrame]; 00045 00046 if (self) 00047 { 00048 #if PLATFORM(DOM) 00049 _DOMElement.removeChild(_DOMTextElement); 00050 00051 _DOMTextElement = document.createElement("input"); 00052 _DOMTextElement.type = "password"; 00053 _DOMTextElement.style.position = "absolute"; 00054 _DOMTextElement.style.top = TOP_PADDING + "px"; 00055 _DOMTextElement.style.left = HORIZONTAL_PADDING + "px"; 00056 _DOMTextElement.style.width = MAX(0.0, CGRectGetWidth(aFrame) - 2.0 * HORIZONTAL_PADDING) + "px"; 00057 _DOMTextElement.style.height = MAX(0.0, CGRectGetHeight(aFrame) - TOP_PADDING - BOTTOM_PADDING) + "px"; 00058 _DOMTextElement.style.whiteSpace = "pre"; 00059 _DOMTextElement.style.cursor = "default"; 00060 _DOMTextElement.style.zIndex = 100; 00061 _DOMTextElement.style.border = "0"; 00062 _DOMTextElement.style.font = _DOMElement.style.font; 00063 _DOMTextElement.style.padding = "0px"; 00064 _DOMTextElement.style.margin = "0px"; 00065 00066 _DOMElement.appendChild(_DOMTextElement); 00067 #endif 00068 } 00069 00070 return self; 00071 } 00072 00073 - (void)setFont:(CPFont)aFont 00074 { 00075 [super setFont:aFont]; 00076 00077 #if PLATFORM(DOM) 00078 if (_DOMTextElement) 00079 _DOMTextElement.style.font = _DOMElement.style.font; 00080 #endif 00081 } 00082 00083 - (CPString)stringValue 00084 { 00085 // All of this needs to be better. 00086 #if PLATFORM(DOM) 00087 if ([[self window] firstResponder] == self) 00088 return [[self class] _inputElement].value; 00089 #endif 00090 00091 return _DOMTextElement.value; 00092 } 00093 00094 - (void)setStringValue:(CPString)aStringValue 00095 { 00096 _value = aStringValue; 00097 00098 #if PLATFORM(DOM) 00099 _DOMTextElement.value = _value; 00100 #endif 00101 } 00102 00103 @end