Source code for GLXCurses.TextView
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# It script it publish under GNU GENERAL PUBLIC LICENSE
# http://www.gnu.org/licenses/gpl-3.0.en.html
# Author: the Galaxie Curses Team, all rights reserved
import GLXCurses
# Inspired from: https://developer.gnome.org/gtk3/stable/GtkTextView.html
[docs]class TextView(GLXCurses.Container):
def __init__(self):
GLXCurses.Container.__init__(self)
self.__accepts_tab = None
self.__bottom_margin = None
self.__buffer = None
self.__cursor_visible = None
self.__editable = None
# self.__im_module = None
self.__indent = None
self.__input_hints = None
self.__input_purpose = None
self.__justification = None
self.__left_margin = None
# self.__monospace = None
self.__overwrite = None
# self.__chars_above_lines = None
# self.__chars_below_lines = None
# self.__chars_inside_wrap = None
self.__populate_all = None
self.__right_margin = None
self.__tabs = None
self.__top_margin = None
self.__wrap_mode = None
self.__error_underline_color = None
# Set default value
self.accept_tab = True
self.bottom_margin = 0
self.buffer = GLXCurses.TextBuffer()
self.cursor_visible = True
self.editable = True
self.indent = 0
self.right_margin = 0
self.input_hints = GLXCurses.GLXC.INPUT_HINTS_NONE
self.input_purpose = GLXCurses.GLXC.INPUT_PURPOSE_FREE_FORM
self.justification = GLXCurses.GLXC.JUSTIFY_CENTER
self.left_margin = 0
self.overwrite = False
self.populate_all = True
self.top_margin = 0
self.wrap_mode = None
@property
def accept_tab(self):
"""
Whether Tab will result in a tab character being entered.
Default value is ``True``, and be restored when ``accept_tab`` is set to ``None``
:return: If ``True`` Tab key will produce Tab char \t
:rtype: bool
"""
return self.__accepts_tab
@accept_tab.setter
def accept_tab(self, value=True):
"""
Set the ``accept_tab`` property value
:param value: If ``True`` Tab key will produce Tab char \t
:type value: bool or None
:raise TypeError: When value is not bool type or None
"""
if value is None:
value = True
if type(value) != bool:
raise TypeError('"accept_tab" value must be a bool type or None')
if self.accept_tab != value:
self.__accepts_tab = value
@property
def bottom_margin(self):
"""
The bottom margin for text in the text view.
:return: The bottom margin padding
:rtype: int
"""
return self.__bottom_margin
@bottom_margin.setter
def bottom_margin(self, value=0):
"""
Set the ``bottom_margin`` property value
Default value is ``0``, and be restored when ``bottom_margin`` is set to ``None``
:param value: The value set here is padding
:type value: int or None
:raise TypeError: When value is not int type or None
"""
if value is None:
value = 0
if type(value) != int:
raise TypeError('"bottom_margin" value must be a int type or None')
if self.bottom_margin != GLXCurses.clamp_to_zero(value):
self.__bottom_margin = GLXCurses.clamp_to_zero(value)
@property
def buffer(self):
"""
The buffer which is displayed.
:return: a buffer
:rtype: GLXCurses.TextBuffer
"""
return self.__buffer
@buffer.setter
def buffer(self, value=None):
"""
Set the ``buffer`` property value
:param value: a Text Buffer
:type value: GLXCurses.TextBuffer
"""
if value is not None and not isinstance(value, GLXCurses.TextBuffer):
raise TypeError(
'"buffer" value must be a GLXCurses.TextBuffer instance or None'
)
if self.buffer != value:
self.__buffer = value
@property
def cursor_visible(self):
"""
If the insertion cursor is shown.
Default value is ``True``, and be restored when ``cursor_visible`` is set to ``None``
:return: If ``True`` the cursor will be visible
:rtype: bool
"""
return self.__cursor_visible
@cursor_visible.setter
def cursor_visible(self, value=True):
"""
Set the ``cursor_visible`` property value
:param value: If ``True`` the cursor will be visible
:type value: bool or None
:raise TypeError: When value is not bool type or None
"""
if value is None:
value = True
if type(value) != bool:
raise TypeError('"cursor_visible" value must be a bool type or None')
if self.cursor_visible != value:
self.__cursor_visible = value
@property
def editable(self):
"""
Whether the text can be modified by the user.
Default value is ``True``, and be restored when ``editable`` is set to ``None``
:return: If ``True`` the text can be modified
:rtype: bool
"""
return self.__editable
@editable.setter
def editable(self, value=True):
"""
Set the ``editable`` property value
:param value: If ``True`` the text can be modified
:type value: bool or None
:raise TypeError: When value is not bool type or None
"""
if value is None:
value = True
if type(value) != bool:
raise TypeError('"editable" value must be a bool type or None')
if self.editable != value:
self.__editable = value
@property
def indent(self):
"""
Amount to indent the paragraph, in chars.
:return: indentation in chars
:rtype: int
"""
return self.__indent
@indent.setter
def indent(self, value=0):
"""
Set the ``indent`` property value
Default value is ``0``, and be restored when ``indent`` is set to ``None``
:param value: Indentation of the paragraph, in chars.
:type value: int or None
:raise TypeError: When value is not int type or None
"""
if value is None:
value = 0
if type(value) != int:
raise TypeError('"indent" value must be a int type or None')
if self.indent != GLXCurses.clamp_to_zero(value):
self.__indent = GLXCurses.clamp_to_zero(value)
@property
def input_hints(self):
"""
Additional hints (beyond “``input_purpose``”) that allow input methods to fine-tune their behaviour.
:return: The right margin padding
:rtype: int
"""
return self.__input_hints
@input_hints.setter
def input_hints(self, value=None):
"""
Set the ``input_hints`` property value
Default value is ``GLXCurses.GLXC.INPUT_HINTS_NONE``, and be restored when ``input_hints`` is set to ``None``
:param value: Additional hints (beyond “input-purpose”)
:type value: GLXCurses.GLXC.InputHints
:raise TypeError: When value is str type or None
:raise ValueError: When value is not in GLXCurses.GLXC.InputHints
"""
if value is None:
value = GLXCurses.GLXC.INPUT_HINTS_NONE
if type(value) != str:
raise TypeError('"input_hints" value must be a str type or None')
if value not in GLXCurses.GLXC.InputHints:
raise ValueError('"input_hints" must be a valid GLXCurses.GLXC.InputHints')
if self.input_hints != value:
self.__input_hints = value
@property
def input_purpose(self):
"""
The purpose of this text field.
This property can be used by on-screen keyboards and other input methods to adjust their behaviour.
:return: The right margin padding
:rtype: int
"""
return self.__input_purpose
@input_purpose.setter
def input_purpose(self, value=None):
"""
Set the ``input_purpose`` property value
Default value is ``GLXCurses.GLXC.INPUT_PURPOSE_FREE_FORM``, and be restored
when ``input_purpose`` is set to ``None``
:param value: The purpose of this text field
:type value: str or None
:raise TypeError: When value is not str type or None
:raise ValueError: When value is not in GLXCurses.GLXC.InputPurpose
"""
if value is None:
value = GLXCurses.GLXC.INPUT_PURPOSE_FREE_FORM
if type(value) != str:
raise TypeError('"input_purpose" value must be a str type or None')
if value not in GLXCurses.GLXC.InputPurpose:
raise ValueError(
'"input_purpose" must be a valid GLXCurses.GLXC.InputPurpose'
)
if self.input_purpose != value:
self.__input_purpose = value
@property
def justification(self):
"""
Left, right, or center justification.
:return: str
:rtype: GLXCurses.GLXC.Justification
"""
return self.__justification
@justification.setter
def justification(self, value=None):
"""
Left, right, or center justification.
:param value: a justification
:type value: str
"""
if value is None:
value = GLXCurses.GLXC.JUSTIFY_CENTER
if type(value) != str:
raise TypeError('"justification" value must be a str type or None')
if value not in GLXCurses.GLXC.Justification:
raise ValueError(
'"justification" must be a valid GLXCurses.GLXC.Justification'
)
if self.justification != str(value).upper():
self.__justification = str(value).upper()
@property
def left_margin(self):
"""
The left margin for text in the text view.
:return: The left margin padding
:rtype: int
"""
return self.__left_margin
@left_margin.setter
def left_margin(self, value=0):
"""
Set the ``left_margin`` property value
Default value is ``0``, and be restored when ``left_margin`` is set to ``None``
:param value: The value set here is padding
:type value: int or None
:raise TypeError: When value is not int type or None
"""
if value is None:
value = 0
if type(value) != int:
raise TypeError('"left_margin" value must be a int type or None')
if self.left_margin != GLXCurses.clamp_to_zero(value):
self.__left_margin = GLXCurses.clamp_to_zero(value)
# Monospace is not use
@property
def overwrite(self):
"""
Whether entered text overwrites existing contents.
Default value is ``False``, and be restored when ``overwrite`` is set to ``None``
:return: If ``True`` text overwrites existing contents
:rtype: bool
"""
return self.__overwrite
@overwrite.setter
def overwrite(self, value=None):
"""
Set the ``overwrite`` property value
:param value: If ``True`` text overwrites existing contents
:type value: bool or None
:raise TypeError: When value is not bool type or None
"""
if value is None:
value = False
if type(value) != bool:
raise TypeError('"overwrite" value must be a bool type or None')
if self.overwrite != value:
self.__overwrite = value
# The “pixels-above-lines” property
# The “pixels-below-lines” property
# The “pixels-inside-wrap” property
@property
def populate_all(self):
return self.__populate_all
@populate_all.setter
def populate_all(self, value=None):
if value is None:
value = True
if type(value) != bool:
raise TypeError('"populate_all" value must be a bool type or None')
if self.populate_all != value:
self.__populate_all = value
@property
def right_margin(self):
"""
The right margin for text in the text view.
:return: The right margin padding
:rtype: int
"""
return self.__right_margin
@right_margin.setter
def right_margin(self, value=0):
"""
Set the ``right_margin`` property value
Default value is ``0``, and be restored when ``bottom_margin`` is set to ``None``
:param value: The value set here is padding
:type value: int or None
:raise TypeError: When value is not int type or None
"""
if value is None:
value = 0
if type(value) != int:
raise TypeError('"right_margin" value must be a int type or None')
if self.right_margin != GLXCurses.clamp_to_zero(value):
self.__right_margin = GLXCurses.clamp_to_zero(value)
# Tabs
@property
def top_margin(self):
"""
The top margin for text in the text view.
:return: The top margin padding
:rtype: int
"""
return self.__top_margin
@top_margin.setter
def top_margin(self, value=0):
"""
Set the ``top_margin`` property value
Default value is ``0``, and be restored when ``top_margin`` is set to ``None``
:param value: The value set here is padding
:type value: int or None
:raise TypeError: When value is not int type or None
"""
if value is None:
value = 0
if type(value) != int:
raise TypeError('"top_margin" value must be a int type or None')
if self.top_margin != GLXCurses.clamp_to_zero(value):
self.__top_margin = GLXCurses.clamp_to_zero(value)
@property
def wrap_mode(self):
return self.__wrap_mode
@wrap_mode.setter
def wrap_mode(self, value=None):
if value is None:
value = GLXCurses.GLXC.WRAP_NONE
if type(value) != str:
raise TypeError('"wrap_mode" value must be a str type or None')
if value.upper() not in GLXCurses.GLXC.WrapMode:
raise ValueError(
'"wrap_mode" value must be a valid GLXCurses.GLXC.WrapMode'
)
if self.wrap_mode != value.upper():
self.__wrap_mode = value.upper()