====================== 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.