Skip to content
Snippets Groups Projects
Commit b9195646 authored by Caspar Martens's avatar Caspar Martens
Browse files

Merge branch 'feature/ui/observability' of...

Merge branch 'feature/ui/observability' of ssh://gitlab.ost.ch:45022/blackfennec/blackfennec into feature/ui/observability
parents 02d50cb4 a2a3c68f
Branches
Tags
No related merge requests found
......@@ -4,6 +4,7 @@ from blackfennec.interpretation.specification import Specification
from base.date_time.date_time import DateTime
import gi
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
......@@ -11,7 +12,6 @@ from base.date_time.date_time_view_factory import DateTimeViewFactory
from base.file.file_view_factory import FileViewFactory
from base.image.image_view_factory import ImageViewFactory
BASE_NAME = Path(__file__).parent.as_posix()
__types = []
......@@ -46,10 +46,10 @@ def create_extension(extension_api: ExtensionApi):
extension_api.type_registry.register_type(type)
for type, factory in zip(_types(extension_api), factories):
extension_api.view_factory_registry.register_view_factory(
type, Specification(), factory)
extension_api.view_factory_registry.register_view_factory(
type, Specification(True), factory)
for specification in [Specification(), Specification(request_preview=True)]:
if factory.satisfies(specification):
extension_api.view_factory_registry.register_view_factory(
type, specification, factory)
def destroy_extension(extension_api: ExtensionApi):
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<template class="DateTimePreview" parent="GtkBin">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">Date-Time</property>
<child>
<object class="GtkEventBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<signal name="button-press-event" handler="_preview_clicked" swapped="no"/>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">7</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixbuf">src/visualisation/base/date_time/date.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="_date_time_value">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">&lt;value-here&gt;</property>
<property name="selectable">True</property>
<property name="ellipsize">start</property>
<property name="xalign">0</property>
<style>
<class name="base-value"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</template>
</interface>
using Gtk 4.0;
using Adw 1;
template DateTimeView : Adw.Bin {
visible: true;
focusable: false;
Box _item_container {
orientation: vertical;
spacing: 2;
Box {
Image {
file: "src/visualisation/base/date.png";
}
Label _date_time_title {
label: _("Date Time");
}
styles [
"base-title",
]
}
Box _date_time_line {
spacing: 2;
Label _date_time_key {
label: _("DateTime:");
width-chars: 10;
xalign: 0;
styles [
"base-key",
]
}
Label _date_time_value {
hexpand: true;
focusable: true;
label: _("<value-here>");
selectable: true;
ellipsize: start;
xalign: 0;
styles [
"base-value",
]
}
}
styles [
"base-box",
]
}
}
# -*- coding: utf-8 -*-
import logging
from pathlib import Path
from gi.repository import Gtk, Adw
from base.date_time.date_time_view_model import DateTimeViewModel
logger = logging.getLogger(__name__)
BASE_DIR = Path(__file__).resolve().parent
UI_TEMPLATE = str(BASE_DIR.joinpath('date_time_view.ui'))
@Gtk.Template(filename=UI_TEMPLATE)
class DateTimeView(Adw.Bin):
"""View for the core type DateTime."""
__gtype_name__ = 'DateTimeView'
_date_time_value: Gtk.Label = Gtk.Template.Child()
def __init__(self, view_model: DateTimeViewModel):
"""Construct with view_model.
Args:
view_model (DateTimeViewModel): The view_model.
"""
super().__init__()
self._view_model = view_model
self._set_date_time()
logger.info(
'DateTimeView created'
)
def _set_date_time(self):
date_time = self._view_model.date_time
self._date_time_value.set_text(str(date_time))
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"/>
<template class="DateTimeView" parent="AdwBin">
<property name="visible">true</property>
<property name="focusable">false</property>
<child>
<object class="GtkBox" id="_item_container">
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<object class="GtkBox">
<child>
<object class="GtkImage">
<property name="file">src/visualisation/base/date.png</property>
</object>
</child>
<child>
<object class="GtkLabel" id="_date_time_title">
<property name="label" translatable="true">Date Time</property>
</object>
</child>
<style>
<class name="base-title"/>
</style>
</object>
</child>
<child>
<object class="GtkBox" id="_date_time_line">
<property name="spacing">2</property>
<child>
<object class="GtkLabel" id="_date_time_key">
<property name="label" translatable="true">DateTime:</property>
<property name="width-chars">10</property>
<property name="xalign">0</property>
<style>
<class name="base-key"/>
</style>
</object>
</child>
<child>
<object class="GtkLabel" id="_date_time_value">
<property name="hexpand">true</property>
<property name="focusable">true</property>
<property name="label" translatable="true">&lt;value-here&gt;</property>
<property name="selectable">true</property>
<property name="ellipsize">start</property>
<property name="xalign">0</property>
<style>
<class name="base-value"/>
</style>
</object>
</child>
</object>
</child>
<style>
<class name="base-box"/>
</style>
</object>
</child>
</template>
</interface>
\ No newline at end of file
# -*- coding: utf-8 -*-
from base.date_time.date_time_view import DateTimeView
from base.date_time.date_time_view_model import DateTimeViewModel
from blackfennec.interpretation.interpretation import Interpretation
from blackfennec.interpretation.specification import Specification
......@@ -8,7 +7,7 @@ from base.date_time.date_time_preview import DateTimePreview
class DateTimeViewFactory:
"""Creator of the DateTimeView"""
"""Creator of the DateTimePreview"""
def satisfies(self, specification: Specification) -> bool:
"""Test if this view factory can satisfy the specification
......@@ -19,9 +18,9 @@ class DateTimeViewFactory:
Returns:
bool: True if the specification can be satisfied. Otherwise False.
"""
return True
return specification.is_request_for_preview
def create(self, interpretation: Interpretation) -> DateTimeView:
def create(self, interpretation: Interpretation) -> DateTimePreview:
"""creates a DateTimeView
Args:
......@@ -35,7 +34,4 @@ class DateTimeViewFactory:
"""
view_model = DateTimeViewModel(interpretation)
if interpretation.specification.is_request_for_preview:
return DateTimePreview(view_model)
return DateTimeView(view_model)
return DateTimePreview(view_model)
......@@ -3,9 +3,11 @@ import unittest
from blackfennec_doubles.interpretation.double_interpretation import InterpretationMock
from blackfennec_doubles.structure.double_map import MapMock
from blackfennec.interpretation.specification import Specification
from base.date_time.date_time_view import DateTimeView
from base.date_time.date_time_view_factory import DateTimeViewFactory
from base.date_time.date_time_preview import DateTimePreview
class DateTimeViewFactoryTestSuite(unittest.TestCase):
def test_can_construct(self):
DateTimeViewFactory()
......@@ -13,14 +15,14 @@ class DateTimeViewFactoryTestSuite(unittest.TestCase):
def test_can_create_map_view(self):
factory = DateTimeViewFactory()
view = factory.create(InterpretationMock(MapMock()))
self.assertIsInstance(view, DateTimeView)
self.assertIsInstance(view, DateTimePreview)
def test_satisfies_default(self):
def test_cannot_satisfy_view(self):
factory = DateTimeViewFactory()
satisfies = factory.satisfies(Specification())
self.assertTrue(satisfies)
self.assertFalse(satisfies)
def test_does_not_satisfy_preview(self):
def test_can_satisfy_preview(self):
factory = DateTimeViewFactory()
satisfies = factory.satisfies(Specification(request_preview=True))
self.assertTrue(satisfies)
......@@ -20,7 +20,6 @@ class BaseExtensionTestSuite(unittest.TestCase):
view_factory_registry=self.view_factory_registry,
type_loader=TypeLoaderMock(self.type_registry),
action_registry=Dummy('ActionRegistry'))
def test_create_base_extension(self):
create_extension(self.extension_api)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment