Lightningbeam/PyGUI-2.5.3/build/lib/GUI/TextFieldBasedControls.py

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