# Python imports # Lib imports import gi gi.require_version('Gtk', '3.0') gi.require_version('GtkSource', '4') from gi.repository import Gtk from gi.repository import GtkSource # Application imports from .dynamic_widget import DynamicWidget class DragArea(GtkSource.View): def __init__(self): super(DragArea, self).__init__() self.buffer = self.get_buffer() self._children_content = [] self._setup_styling() self._setup_signals() self._subscribe_to_events() self._load_widgets() def _setup_styling(self): self.set_size_request(1800, 1800) self.set_cursor_visible(False) def _setup_signals(self): self.connect("button-release-event", self.add_or_select_widget) def _subscribe_to_events(self): ... def _load_widgets(self): ... def add_fixed_base_widgets(self, name = None, date = None, update_header_callback = None): entry = Gtk.Entry(text = name) date_label = Gtk.Label(label = date) entry.connect("changed", update_header_callback) entry.set_width_chars(25) entry.set_max_length(25) # PRIVATE = 0, WIDGET = 1, TEXT = 2, LEFT = 3, RIGHT = 4, TOP = 5, BOTTOM = 6 self.add_child_in_window(entry, Gtk.TextWindowType.TEXT, 30, 30) self.add_child_in_window(date_label, Gtk.TextWindowType.TEXT, 30, 65) def add_or_select_widget(self, widget = None, eve = None): dynamic_widget = DynamicWidget(self._move_callback, eve.x, eve.y) self._children_content.append(dynamic_widget) self.add_child_in_window(dynamic_widget, Gtk.TextWindowType.TEXT, eve.x, eve.y) self.get_page_content() def get_page_content(self, widget = None, eve = None): # PRIVATE = 0, WIDGET = 1, TEXT = 2, LEFT = 3, RIGHT = 4, TOP = 5, BOTTOM = 6 text_window = self.get_window(Gtk.TextWindowType.TEXT) logger.info(text_window) # NOTE: Probably should use something similar to pass to custom widget content container def _move_callback(self, widget = None, x = None, y = None, call_back = None): logger.info(widget) logger.info(x) logger.info(y) logger.info(call_back) # self.move_child(widget, x, y)