91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
#
|
|
# Python GUI - PyObjC
|
|
#
|
|
# Base class for controls based on an NSTextField
|
|
#
|
|
|
|
from Foundation import NSRect, NSPoint, NSSize
|
|
from AppKit import NSTextField, NSSecureTextField, NSTextFieldCell
|
|
from GUI.Utils import NSMultiClass
|
|
from GUI import Color
|
|
from GUI.Utils import ns_size_to_fit, PyGUI_NS_EventHandler
|
|
from GUI.StdFonts import system_font
|
|
|
|
class TextFieldBasedControl(object):
|
|
|
|
_ns_handle_mouse = True
|
|
|
|
def _create_ns_textfield(self, editable, text, font,
|
|
multiline = False, password = False, border = False,
|
|
padding = (0, 0)):
|
|
self._ns_is_password = password
|
|
if password:
|
|
ns_class = PyGUI_NSSecureTextField
|
|
else:
|
|
ns_class = PyGUI_NSTextField
|
|
ns_frame = NSRect(NSPoint(0, 0), NSSize(20, 10))
|
|
ns_textfield = ns_class.alloc().initWithFrame_(ns_frame)
|
|
ns_textfield.pygui_component = self
|
|
if multiline and not password:
|
|
ns_textfield.pygui_multiline = True
|
|
# Be careful here -- calling setBordered_ seems to affect isBezeled as well
|
|
if editable:
|
|
ns_textfield.setBezeled_(border)
|
|
else:
|
|
ns_textfield.setBordered_(border)
|
|
if not editable:
|
|
ns_textfield.setDrawsBackground_(False)
|
|
ns_textfield.setEditable_(editable)
|
|
ns_textfield.setSelectable_(editable)
|
|
ns_textfield.setFont_(font._ns_font)
|
|
ns_textfield.setStringValue_(text)
|
|
ns_size_to_fit(ns_textfield, padding = padding)
|
|
return ns_textfield
|
|
|
|
def get_border(self):
|
|
ns_textfield = self._ns_inner_view
|
|
if ns_textfield.isEditable():
|
|
return ns_textfield.isBezeled()
|
|
else:
|
|
return ns_textfield.isBordered()
|
|
|
|
def set_border(self, border):
|
|
ns_textfield = self._ns_inner_view
|
|
if ns_textfield.isEditable():
|
|
ns_textfield.setBezeled_(border)
|
|
else:
|
|
ns_textfield.setBordered_(border)
|
|
|
|
def get_text(self):
|
|
return self._ns_inner_view.stringValue()
|
|
|
|
def set_text(self, v):
|
|
self._ns_inner_view.setStringValue_(v)
|
|
|
|
def get_color(self):
|
|
return Color._from_ns_color(self._ns_inner_view.textColor())
|
|
|
|
def set_color(self, v):
|
|
self._ns_inner_view.setTextColor_(v._ns_color)
|
|
|
|
def _get_vertical_padding(self):
|
|
if self.border:
|
|
return 5
|
|
else:
|
|
return 0
|
|
|
|
_vertical_padding = property(_get_vertical_padding)
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
class PyGUI_NSTextField(NSTextField): #, PyGUI_NS_EventHandler):
|
|
__metaclass__ = NSMultiClass
|
|
|
|
pygui_multiline = False
|
|
|
|
class PyGUI_NSSecureTextField(NSSecureTextField): #, PyGUI_NS_EventHandler):
|
|
__metaclass__ = NSMultiClass
|
|
|
|
pygui_multiline = False
|
|
|