#956 closed todo (done)

model diff representation

Reported by: Ichthyostega Owned by:
Priority: grave Milestone: 0integration
Component: lumieraGui Keywords: design
Sub Tickets: #992, #1047, #1066 Parent Tickets: #318, #569, #887, #955, #957, #959, #963, #1008, #1014, #1153, #1199, #1206, #1234

Description (last modified by Ichthyostega)

As an intermediary step to define a backbone for GUI ⟺ Steam communication, we need a mechanism to represent model changes. This needs to be combined in a sensible way with the placement-IDs used in Steam-Layer to denote the relevant model elements.

  • find a way to get this update notification handshake straight.
    • please note, the update is initiated from the builder, which does not run in the event thread
    • there are strict conventions how to use threads in GTK (in fact, in any modern GUI toolkit)
  • find a way to push model updates while avoiding duplicated state representations in need to be synched
  • structure the updates in a way to avoid spurious GUI updates for unchanged parts of the model. There will be lots of change notifications



Design Draft

The idea is to build the model updates on top of diff messages.

  • each such message holds a tree diff
  • using diffs, we get a loose coupling of similarly structured data
  • this leads to recursive breakdown and forwarding of messages
  • we define a diff language based on tokens of constant size
  • this allows lazy (demand driven) processing of diff detection and application

Change history (25)

comment:1 by Ichthyostega, at 2014-10-27T01:21:20Z

blocking: 955955, 951, 209, 957
Description: modified (diff)
Status: newaccepted

comment:2 by Ichthyostega, at 2014-12-11T03:49:07Z

blocking: 955, 951, 209, 957209, 951, 955, 957

As a first milestone, I've now drafted the design of a list diff language, given as sequence of diff verbs. Implemented the simple case, where a given diff
gets applied to a target sequence contained in a vector. Unit test pass!

comment:3 by Ichthyostega, at 2015-01-04T14:10:51Z

Next milestone reached, which is to generate/detect differences between arbitrary sequences. The unit test indeed generates the expected sequence of diff verbs in a simple, hard coded test scenario.

comment:4 by Ichthyostega, at 2015-01-05T09:13:48Z

blocking: 209, 951, 955, 957209, 951, 955, 957, 959

comment:5 by Ichthyostega, at 2015-01-05T09:15:07Z

blocking: 209, 951, 955, 957, 959209, 955, 957, 959

comment:6 by Ichthyostega, at 2015-04-02T01:27:17Z

Description: modified (diff)

meanwhile, I've drafted an implementation approach to deal with the handling of generic tree changes

comment:7 by Ichthyostega, at 2015-07-03T15:47:41Z

blocking: 209, 955, 957, 959209, 955, 957, 959, 963

comment:8 by Ichthyostega, at 2016-02-14T04:11:38Z

blockedby: 992

comment:9 by Ichthyostega, at 2016-10-02T23:31:39Z

blocking: 209, 955, 957, 959, 963209, 955, 957, 959, 963, 1008

comment:10 by Ichthyostega, at 2016-10-04T01:31:51Z

Owner: Ichthyostega removed
Status: acceptedassigned

this was a huge task, and is mostly settled by now

  • we can represent and apply tree changes by diff
  • handling of such diff messages was integrated into the UI-Element / UI-Bus protocol

What remainst to be done is to find a proper integration into the session/update mechanics; these are themselves still rather unclear, thus I'm leaving this task for now

comment:11 by Ichthyostega, at 2016-10-14T17:21:34Z

blocking: 209, 955, 957, 959, 963, 1008209, 955, 957, 959, 963, 1008, 1014

comment:12 by Ichthyostega, at 2016-12-03T22:54:57Z

blockedby: 992992, 1041

comment:13 by Ichthyostega, at 2016-12-09T22:25:36Z

blockedby: 992, 1041992, 1041, 1047

comment:14 by Ichthyostega, at 2017-01-14T07:48:31Z

blocking: 209, 955, 957, 959, 963, 1008, 1014318, 955, 957, 959, 963, 1008, 1014

comment:15 by Ichthyostega, at 2017-01-20T02:20:53Z

blockedby: 992, 1041, 1047992, 1041, 1047, 1066

comment:16 by Ichthyostega, at 2018-08-04T15:29:12Z

blocking: 318, 955, 957, 959, 963, 1008, 1014318, 955, 957, 959, 963, 1008, 1014, 1153

comment:17 by Ichthyostega, at 2019-06-20T16:32:31Z

blocking: 318, 955, 957, 959, 963, 1008, 1014, 1153318, 955, 957, 959, 963, 1008, 1014, 1153, 1199

comment:18 by Ichthyostega, at 2019-12-12T16:26:11Z

blocking: 318, 955, 957, 959, 963, 1008, 1014, 1153, 1199318, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206

comment:19 by Ichthyostega, at 2020-02-22T22:11:50Z

blockedby: 992, 1041, 1047, 1066992, 1047, 1066

comment:20 by Ichthyostega, at 2020-02-22T22:14:59Z

Resolution: done
Status: assignedclosed

So this can really be considered as settled by now. This Diff-Framework is in use, and there is enough experience to see how model elements are to be represented and altered. Last year, just addint a test diff to the DummySessionConnection was enough to trigger the buildup of a complex timelilne structure, to be elaborated on the implementation side.

comment:21 by Ichthyostega, at 2022-10-21T22:24:49Z

Description: modified (diff)

comment:22 by Ichthyostega, at 2023-09-12T00:45:28Z

blocking: 318, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206318, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206

comment:23 by Ichthyostega, at 2023-09-12T01:29:36Z

blocking: 318, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206318, 569, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206

comment:24 by Ichthyostega, at 2023-09-13T17:15:00Z

blocking: 318, 569, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206318, 569, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206, 1234

comment:25 by Undercover Agent, at 2025-12-25T00:00:00Z

blockedby: 992, 1047, 1066
blocking: 318, 569, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206, 1234
Parent Tickets: 318, 569, 887, 955, 957, 959, 963, 1008, 1014, 1153, 1199, 1206, 1234
Sub Tickets: 992, 1047, 1066

Migration MasterTickets ⟼ Subtickets-plugin

Note: See TracTickets for help on using tickets.