Files
YMS/yms/view/view.py
T

107 lines
3.3 KiB
Python

# SPDX-License-Identifier: WTFPL
"""
Generic view object
SPDX-License-Identifier: WTFPL
"""
import os
import locale
from gi.repository import GLib, Gtk, Gdk
from yms import gtkutils
class View:
def __init__(self, context, title, ui_file):
self.context = context
self.db = context.db
self.vessel = context.vessel
self.user = context.user
self.title = title
builder = Gtk.Builder()
builder.set_translation_domain(context.textdomain)
builder.add_from_file(os.path.join(context.ui_path, ui_file))
builder.connect_signals(self)
self.topwidget = builder.get_object("topobject")
gtkutils.init_named_controls(self, builder)
def format_int(self, ival, separator=True, suffix=None, default=''):
if ival is None:
return default
formatted = locale.format_string("%d", ival, separator)
if suffix:
formatted += f"\u00A0{suffix}"
return formatted
def format_float(self, fval, digits=2, grouping=True, suffix=None, default=''):
if fval is None:
return default
formatted = locale.format_string(f"%.{digits}f", fval, grouping)
if suffix:
formatted += f"\u00A0{suffix}"
return formatted
def format_date(self, dval, default=''):
if dval is None:
return default
return dval.strftime(self.context.datefmt)
def on_textview_keypress(self, widget, event):
# Generic limit length function
if event.state & Gdk.ModifierType.CONTROL_MASK:
allowed_ctrl_keys = (
Gdk.KEY_a,
Gdk.KEY_c,
Gdk.KEY_x,
)
if event.keyval in allowed_ctrl_keys:
return False
allowed_keys = (
Gdk.KEY_BackSpace,
Gdk.KEY_Delete,
Gdk.KEY_Left,
Gdk.KEY_Right,
Gdk.KEY_Up,
Gdk.KEY_Down,
Gdk.KEY_Home,
Gdk.KEY_End,
Gdk.KEY_Page_Up,
Gdk.KEY_Page_Down,
)
print("keypress")
if event.keyval in allowed_keys:
return False
buf = widget.get_buffer()
start = buf.get_start_iter()
end = buf.get_end_iter()
text = buf.get_text(start, end, True)
if len(text) >= 150:
return True
return False
def on_textview_paste(self, widget):
# Generic limit length function
print("paste")
buf = widget.get_buffer()
start = buf.get_start_iter()
end = buf.get_end_iter()
text = buf.get_text(start, end, True)
if buf.get_has_selection():
sel_start, sel_end = buf.get_selection_bounds()
selected_text = buf.get_text(sel_start, sel_end, True)
current_length = len(text) - len(selected_text)
else:
current_length = len(text)
remaining = 150 - current_length
if remaining <= 0:
return True
clipboard = widget.get_clipboard(Gdk.SELECTION_CLIPBOARD)
cliptext = clipboard.wait_for_text()
if cliptext:
cliptext = cliptext[:remaining]
if buf.get_has_selection():
sel_start, sel_end = buf.get_selection_bounds()
buf.delete(sel_start, sel_end)
buf.insert_at_cursor(text)
return True