86 lines
2.6 KiB
Python
86 lines
2.6 KiB
Python
# SPDX-License-Identifier: WTFPL
|
|
|
|
"""
|
|
Generic view object
|
|
|
|
SPDX-License-Identifier: WTFPL
|
|
"""
|
|
import os
|
|
import gi
|
|
gi.require_version("Gtk", "3.0")
|
|
from gi.repository import Gtk
|
|
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 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
|