diff --git a/src/core/widgets/drag_area_widget.py b/src/core/widgets/drag_area_widget.py index e20c0ae..a87ea58 100644 --- a/src/core/widgets/drag_area_widget.py +++ b/src/core/widgets/drag_area_widget.py @@ -47,7 +47,6 @@ class DragArea(GtkSource.View): date_label = Gtk.Label(label = date) wrapped_date = self.wrap_widget_in_trap( date_label ) - ctx = entry.get_style_context() ctx.add_class("drag-area-title") diff --git a/src/core/widgets/template/dynamic_widget_template.py b/src/core/widgets/template/dynamic_widget_template.py index a5e3303..53b98be 100644 --- a/src/core/widgets/template/dynamic_widget_template.py +++ b/src/core/widgets/template/dynamic_widget_template.py @@ -20,8 +20,9 @@ class DynamicWidget(Gtk.Box): def __init__(self, move_callback, x, y): super(DynamicWidget, self).__init__() - self._header_widget = DynamicHeaderWidget(move_callback, x, y) self.uuid = str(uuid.uuid4()) + self._header_widget = DynamicHeaderWidget(move_callback, x, y) + self._body_widget = None self._setup_styling() self._setup_signals() @@ -46,16 +47,21 @@ class DynamicWidget(Gtk.Box): def _load_widgets(self): try: self.add(self._header_widget) - widget = event_system.emit_and_await("get_widget_type") - if not widget: + self._body_widget = event_system.emit_and_await("get_widget_type") + if not self._body_widget: raise Exception("No widget detected... Will not insert anything.") - self.add(widget) + self.add(self._body_widget) except DynamicWidgetException as e: logger.debug(e) def save(self): + save_collection = self._body_widget.get_saveable_data() + save_collection["w"] = self._header_widget._current_w + save_collection["h"] = self._header_widget._current_h + save_collection["x"] = self._header_widget._current_x + save_collection["y"] = self._header_widget._current_y + path = f"{settings.get_active_page()}/{self.uuid}" - logger.debug("Widget save stub...") - # with open(path, "wb") as f: - # pickle.dump(self, f, protocol=pickle.HIGHEST_PROTOCOL, fix_imports=True, buffer_callback=None) + with open(path, "wb") as f: + pickle.dump(save_collection, f, protocol=pickle.HIGHEST_PROTOCOL, fix_imports=True, buffer_callback=None) diff --git a/src/core/widgets/widget_selector/widgets/text_area.py b/src/core/widgets/widget_selector/widgets/text_area.py index 17c63b4..e992d7c 100644 --- a/src/core/widgets/widget_selector/widgets/text_area.py +++ b/src/core/widgets/widget_selector/widgets/text_area.py @@ -6,10 +6,10 @@ gi.require_version('Gtk', '3.0') from gi.repository import Gtk # Application imports +from utils.widget_save_load_controller import WidgetSaveLoadController - -class TextAreaWidget(Gtk.TextView): +class TextAreaWidget(WidgetSaveLoadController, Gtk.TextView): def __init__(self): super(TextAreaWidget, self).__init__() @@ -35,7 +35,20 @@ class TextAreaWidget(Gtk.TextView): def _load_widgets(self): ... + def get_buffer_text(self): + start, end = self.buffer.get_start_iter(), self.buffer.get_end_iter() + return self.buffer.get_slice(start, end, True) + + def load_saveable_data(self, data): + self.save_collection = data + self.buffer.set_text(self.save_collection["data"]) + + def get_saveable_data(self): + self.save_collection["data"] = self.get_buffer_text() + self.save_collection["widget_type"] = str(type(self).__name__) + return self.save_collection + def new(self): widget = TextAreaWidget() - widget.buffer.set_text("Poo") + widget.buffer.set_text("Lorem ipsum dolor") return widget diff --git a/src/utils/widget_save_load_controller.py b/src/utils/widget_save_load_controller.py new file mode 100644 index 0000000..cb6fc0c --- /dev/null +++ b/src/utils/widget_save_load_controller.py @@ -0,0 +1,33 @@ +# Python imports + +# Lib imports + +# Application imports + + + +class SaveLoadControllerException(Exception): + ... + + +class WidgetSaveLoadController: + def __init__(self): + super(WidgetSaveLoadController, self).__init__() + self.saveable_data = [] + self.save_collection = { + "width": -1, + "height": -1, + "x": 0, + "y": 0, + "data": None, + "widget_type": None + } + + def register_saveable_data(self, data): + self.saveable_data.append(data) + + def load_saveable_data(self, data): + self.save_collection = data + + def get_saveable_data(self): + return self.save_collection