blob: 91dffbe4aedb470b9e2013fdc858f951d055d4e3 [file] [log] [blame]
======================
core
======================
SyncInfo
- represents relative sync of local and remote gives access to resources
TeamSubscriber
- creates sync infos
SyncInfoSet/MutableSyncInfoSet (optimized collection of sync infos - immutable)
SyncInfoFilter (filtering of sync sets used by actions and creation of sync sets)
SyncInfoCollector (collects sync infos from subscriber, and optionally from workspace. Uses background thread to collect and calculate changes. Is updated automatically with changes)
FilteredSyncInfoSet (filters a provided sync info set with a given filter and possible roots)
======================
ui
======================
ISynchronizeManager (manages the lifesycle of synchronize participants)
ISynchronizeView
ISynchronizeParticipant (shows in the sync view, has a mode, working set, and creates a page with the UI pieces)
Modes in sync view (DirectionFilterActionGroup)
SyncInfoSetCompareConfiguration (encapsulates navigation, menus, content, label providers)this
is used to configure a viewer in different ways based on it's use.
SyncInfoDiffTreeViewer/SyncInfoDiffCheckboxViewer (shows diff nodes)
SyncInfoDiffNode -> DiffNode
SyncInfoSetCompareInput
DiffNode
SyncInfoDiffNode
Viewer
ContentProvider
Sorter
LabelProvider
ViewerInput
1. sync set is created
2. decide how to model the sync set (hierachy, compressed, change log...) sorter...
3. hook up chagnen listener
4. ensure model doesn't change while building it?
5. update model dynamically
6. dispose of listener when input changes
SuperCharged MVC
================
Sync Set Compare Input (displays a diff tree viewer with the compare panes)
Sync Info Compare Input (displays a compare pane for one sync info)
Viewer (viewers) -> view configurators (menus, content provider, label provider, controller)
Viewer Model (diff nodes) logical structure of sync info
Viewer Input (creates viewer model, keeps it up-to-date, sorter)
Data (sync info, sync info set)
1. when does the viewer model get created, it is implementation dependant
2. why is creating the viewer model takes a while.
How is progress shown?
======================
1. actions that run jobs that affect a view's content should schedule in the view
- object contributions, or delegates get this for free via SubscriberAction which
has a schedule which will schedule via the associated IWorkbenchPart.
- actions programatically added to a view should be initialized with the view part or view site
so that it can run the job in the view's context.
- this will get you (1) the view icon change hint, (2) the half-busy cursor
2. jobs should provide meaningful progress shown in progress view
- this will get you (1) a job listed in the progress support showing that something is happening
3. if working on syncinfodiffnodes in the background you can mark the nodes as working as a hint
to the UI to display them differently (e.g. should make this adapter specific)
- this will get you (1) nodes in the sync view showing that they are being worked on
4. Use progress groups in refresh to show remote refresh and sync calculation as one work item.
- this will get you (1) one entry in the progress view for both the remote refresh and background
processing of sync states. no more updating sync view message.