/// <summary> /// Releases the viewmodel instance and gives the factory the chance to clean up any related services /// </summary> /// <param name="viewModelInstance"></param> public void Release(IRibbonViewModel viewModelInstance) { // ReSharper disable once SuspiciousTypeConversion.Global var disposable = viewModelInstance as IDisposable; if (disposable != null) disposable.Dispose(); }
public void RegisterCustomTaskPanes(IRibbonViewModel ribbonViewModel, object view, object viewContext) { var registersCustomTaskPanes = ribbonViewModel as IRegisterCustomTaskPane; if (registersCustomTaskPanes == null) return; if (!registrationInfo.ContainsKey(ribbonViewModel)) { registersCustomTaskPanes.RegisterTaskPanes((controlFactory, title, initiallyVisible) => { var taskPaneRegistrationInfo = new TaskPaneRegistrationInfo(controlFactory, title); if (!registrationInfo.ContainsKey(ribbonViewModel)) registrationInfo.Add(ribbonViewModel, new List<TaskPaneRegistrationInfo>()); registrationInfo[ribbonViewModel].Add(taskPaneRegistrationInfo); var taskPane = Register(view, taskPaneRegistrationInfo); var taskPaneAdapter = new OneToManyCustomTaskPaneAdapter(taskPane, viewContext) { Visible = initiallyVisible }; if (!ribbonTaskPanes.ContainsKey(ribbonViewModel)) ribbonTaskPanes.Add(ribbonViewModel, new List<OneToManyCustomTaskPaneAdapter>()); if (!windowToTaskPaneLookup.ContainsKey(view)) windowToTaskPaneLookup.Add(view, new List<IRibbonViewModel>()); ribbonTaskPanes[ribbonViewModel].Add(taskPaneAdapter); windowToTaskPaneLookup[view].Add(ribbonViewModel); return taskPaneAdapter; }); } else { var adapters = ribbonTaskPanes[ribbonViewModel]; foreach (var taskPaneAdapter in adapters) { if (!taskPaneAdapter.ViewRegistered(view)) { foreach (var taskPaneRegistrationInfo in registrationInfo[ribbonViewModel]) { taskPaneAdapter.Add(Register(view, taskPaneRegistrationInfo)); } } else taskPaneAdapter.Refresh(view); } } foreach (var oneToManyCustomTaskPaneAdapter in windowToTaskPaneLookup[view] .Except(new[] { ribbonViewModel }) .SelectMany(viewModelToHide => ribbonTaskPanes[viewModelToHide])) { oneToManyCustomTaskPaneAdapter.HideIfVisible(); } foreach (var toRestore in ribbonTaskPanes[ribbonViewModel]) { toRestore.RestoreIfNeeded(); } }
/// <summary> /// Releases the viewmodel instance and gives the factory the chance to clean up any related services /// </summary> /// <param name="viewModelInstance"></param> public void Release(IRibbonViewModel viewModelInstance) { var lifetimeScope = lifetimeScopeLookups[viewModelInstance]; lifetimeScopeLookups.Remove(viewModelInstance); lifetimeScope.Dispose(); }
void InvalidateRibbonForViewModel(IRibbonViewModel viewModel) { if (viewModel.RibbonUi == null) return; foreach (var targets in notifyChangeTargetLookup[viewModel.GetType()]) { viewModel.RibbonUi.InvalidateControl(targets.Value); } }
public void Invoke(IRibbonControl control, Expression <Action> caller, params object[] parameters) { try { var methodName = caller.GetMethodName(); CallbackTarget callbackTarget = vstoContribContext.TagToCallbackTargetLookup[control.Tag + methodName]; var view = (object)control.Context; IRibbonViewModel viewModelInstance = ribbonViewModelResolver.ResolveInstanceFor(view); VstoContribLog.Debug(l => l("Ribbon callback {0} being invoked on {1} (View: {2}, ViewModel: {3})", methodName, control.Id, view.ToLogFormat(), viewModelInstance.ToLogFormat())); Type type = viewModelInstance.GetType(); PropertyInfo property = type.GetProperty(callbackTarget.Method); if (property != null) { type.InvokeMember(callbackTarget.Method, BindingFlags.SetProperty, null, viewModelInstance, new[] { parameters.Single() }); } else { type.InvokeMember(callbackTarget.Method, BindingFlags.InvokeMethod, null, viewModelInstance, new[] { control } .Concat(parameters) .ToArray()); } } catch (TargetInvocationException e) { var innerEx = e.InnerException; PreserveStackTrace(innerEx); if (vstoContribContext.ErrorHandlers.Count == 0) { Trace.TraceError(innerEx.ToString()); } var handled = vstoContribContext.ErrorHandlers.Any(errorHandler => errorHandler.Handle(innerEx)); if (!handled) { throw innerEx; } } }
internal RibbonView(IRibbonViewModel ribbonViewModel) { InitializeComponent(); if (!DesignerProperties.GetIsInDesignMode(this)) { DataContext = ribbonViewModel ?? ServiceLocator.Current.GetInstance<IRibbonViewModel>(); } }
private void ListenForINotifyPropertyChanged(IRibbonViewModel ribbonViewModel) { var notifiesOfPropertyChanged = ribbonViewModel as INotifyPropertyChanged; if (notifiesOfPropertyChanged != null) { notifiesOfPropertyChanged.PropertyChanged += NotifiesOfPropertyChangedPropertyChanged; } }
/// <summary> /// Releases the viewmodel instance and gives the factory the chance to clean up any related services /// </summary> /// <param name="viewModelInstance"></param> public void Release(IRibbonViewModel viewModelInstance) { // ReSharper disable once SuspiciousTypeConversion.Global var disposable = viewModelInstance as IDisposable; if (disposable != null) { disposable.Dispose(); } }
public void Invoke(IRibbonControl control, Expression <Action> caller, params object[] parameters) { try { CallbackTarget callbackTarget = vstoContribContext.TagToCallbackTargetLookup[control.Tag + caller.GetMethodName()]; IRibbonViewModel viewModelInstance = ribbonViewModelResolver.ResolveInstanceFor(control.Context); Type type = viewModelInstance.GetType(); PropertyInfo property = type.GetProperty(callbackTarget.Method); if (property != null) { type.InvokeMember(callbackTarget.Method, BindingFlags.SetProperty, null, viewModelInstance, new[] { parameters.Single() }); } else { type.InvokeMember(callbackTarget.Method, BindingFlags.InvokeMethod, null, viewModelInstance, new[] { control } .Concat(parameters) .ToArray()); } } catch (TargetInvocationException e) { var innerEx = e.InnerException; PreserveStackTrace(innerEx); if (vstoContribContext.ErrorHandlers.Count == 0) { Trace.TraceError(innerEx.ToString()); } var handled = vstoContribContext.ErrorHandlers.Any(errorHandler => errorHandler.Handle(innerEx)); if (!handled) { throw innerEx; } } }
public void RegisterCustomTaskPanes(IRibbonViewModel ribbonViewModel, object view, object viewContext) { var registersCustomTaskPanes = ribbonViewModel as IRegisterCustomTaskPane; if (registersCustomTaskPanes == null) { return; } if (!registrationInfo.ContainsKey(ribbonViewModel)) { registersCustomTaskPanes.RegisterTaskPanes((controlFactory, title, initiallyVisible) => { var taskPaneRegistrationInfo = new TaskPaneRegistrationInfo(controlFactory, title); if (!registrationInfo.ContainsKey(ribbonViewModel)) { registrationInfo.Add(ribbonViewModel, new List <TaskPaneRegistrationInfo>()); } registrationInfo[ribbonViewModel].Add(taskPaneRegistrationInfo); var taskPane = Register(view, taskPaneRegistrationInfo); var taskPaneAdapter = new OneToManyCustomTaskPaneAdapter(taskPane, viewContext) { Visible = initiallyVisible }; if (!ribbonTaskPanes.ContainsKey(ribbonViewModel)) { ribbonTaskPanes.Add(ribbonViewModel, new List <OneToManyCustomTaskPaneAdapter>()); } ribbonTaskPanes[ribbonViewModel].Add(taskPaneAdapter); return(taskPaneAdapter); }); } else { var adapters = ribbonTaskPanes[ribbonViewModel]; foreach (var taskPaneAdapter in adapters) { if (!taskPaneAdapter.ViewRegistered(view)) { foreach (var taskPaneRegistrationInfo in registrationInfo[ribbonViewModel]) { taskPaneAdapter.Add(Register(view, taskPaneRegistrationInfo)); } } else { taskPaneAdapter.Refresh(view); } } } }
void InvalidateRibbonForViewModel(IRibbonViewModel viewModel) { if (viewModel.RibbonUi == null) { return; } foreach (var targets in notifyChangeTargetLookup[viewModel.GetType()]) { viewModel.RibbonUi.InvalidateControl(targets.Value); } }
public void CleanupViewModel(IRibbonViewModel viewModelInstance) { if (!ribbonTaskPanes.ContainsKey(viewModelInstance)) { return; } var adaptersForViewModel = ribbonTaskPanes[viewModelInstance]; ribbonTaskPanes.Remove(viewModelInstance); foreach (var oneToManyCustomTaskPaneAdapter in adaptersForViewModel) { oneToManyCustomTaskPaneAdapter.Dispose(); } }
public DefaultRibbonView(IRibbonViewModel viewModel) { Helpers.NullCheck(viewModel); this.viewModel = viewModel; this.DataContext = viewModel; viewModel.RibbonTabs.CollectionChanged += RibbonTabs_CollectionChanged; viewModel.SelectionRibbonTabs.CollectionChanged += SelectionRibbonTabs_CollectionChanged; viewModel.PropertyChanged += viewModel_PropertyChanged; ribbonTabsCollectionChanged(); InitializeComponent(); }
public object InvokeGet(IRibbonControl control, Expression <Action> caller, params object[] parameters) { if (control.Context == null) { return(null); } var methodName = caller.GetMethodName(); CallbackTarget callbackTarget = vstoContribContext.TagToCallbackTargetLookup[control.Tag + methodName]; var view = (object)control.Context; IRibbonViewModel viewModelInstance = ribbonViewModelResolver.ResolveInstanceFor(view); VstoContribLog.Debug(l => l("Ribbon callback {0} being invoked on {1} (View: {2}, ViewModel: {3})", methodName, control.Id, view.ToLogFormat(), viewModelInstance.ToLogFormat())); Type type = viewModelInstance.GetType(); PropertyInfo property = type.GetProperty(callbackTarget.Method); if (property != null) { return(type.InvokeMember(callbackTarget.Method, BindingFlags.GetProperty, null, viewModelInstance, null)); } try { return(type.InvokeMember(callbackTarget.Method, BindingFlags.InvokeMethod, null, viewModelInstance, new[] { control } .Concat(parameters) .ToArray())); } catch (MissingMethodException) { throw new InvalidOperationException( string.Format("Expecting method with signature: {0}.{1}(IRibbonControl control)", type.Name, callbackTarget.Method)); } }
public MainViewModel(INavigationViewModel navigationViewModel, IProjectDetailViewModel projectDetailViewModel, IRibbonViewModel ribbonViewModel, IEventAggregator eventAggregator, IMessageDialogService messageDialogService) { _navigationViewModel = navigationViewModel; _ribbonViewModel = ribbonViewModel; _messageDialogService = messageDialogService; _eventAggregator = eventAggregator; ProjectDetailViewModel = projectDetailViewModel; _eventAggregator.GetEvent <AddDetailEvent>().Subscribe(OnAddDetailExecute); _eventAggregator.GetEvent <CancelDetailEvent>().Subscribe(OnCancelAddDetail); _eventAggregator.GetEvent <EditDetailEvent>().Subscribe(OnEditDetailExecute); _eventAggregator.GetEvent <AfterDetailSavedEvent>().Subscribe(OnAfterDetailSaved); }
public void RegisterCustomTaskPanes(IRibbonViewModel ribbonViewModel, object view, object viewContext) { var registersCustomTaskPanes = ribbonViewModel as IRegisterCustomTaskPane; if (registersCustomTaskPanes == null) return; if (!registrationInfo.ContainsKey(ribbonViewModel)) { registersCustomTaskPanes.RegisterTaskPanes( (controlFactory, title, initiallyVisible) => { var taskPaneRegistrationInfo = new TaskPaneRegistrationInfo(controlFactory, title); if (!registrationInfo.ContainsKey(ribbonViewModel)) registrationInfo.Add(ribbonViewModel, new List<TaskPaneRegistrationInfo>()); registrationInfo[ribbonViewModel].Add(taskPaneRegistrationInfo); var taskPane = Register(view, taskPaneRegistrationInfo); var taskPaneAdapter = new OneToManyCustomTaskPaneAdapter(taskPane, viewContext) { Visible = initiallyVisible }; if (!ribbonTaskPanes.ContainsKey(ribbonViewModel)) ribbonTaskPanes.Add(ribbonViewModel, new List<OneToManyCustomTaskPaneAdapter>()); ribbonTaskPanes[ribbonViewModel].Add(taskPaneAdapter); return taskPaneAdapter; }); } else { var adapters = ribbonTaskPanes[ribbonViewModel]; foreach (var taskPaneAdapter in adapters) { if (!taskPaneAdapter.ViewRegistered(view)) { foreach (var taskPaneRegistrationInfo in registrationInfo[ribbonViewModel]) { taskPaneAdapter.Add(Register(view, taskPaneRegistrationInfo)); } } else taskPaneAdapter.Refresh(view); } } }
IRibbonViewModel GetOrCreateViewModel(NewViewEventArgs e) { if (!ribbonTypeLookup.ContainsKey(e.RibbonType)) { return(null); } if (contextToViewModelLookup.ContainsKey(e.ViewContext)) { //Tell viewmodel there is a new view active var ribbonViewModel = contextToViewModelLookup[e.ViewContext]; ribbonViewModel.CurrentView = e.ViewInstance; return(ribbonViewModel); } currentlyLoadingRibbon = e.RibbonType; IRibbonViewModel buildViewModel = BuildViewModel(e.RibbonType, e.ViewInstance, e.ViewContext); contextToViewModelLookup.Add(e.ViewContext, buildViewModel); return(buildViewModel); }
IRibbonViewModel GetOrCreateViewModel(string ribbonType, object viewContext, object viewInstance) { if (!ribbonTypeLookup.ContainsKey(ribbonType)) { return(null); } if (contextToViewModelLookup.ContainsKey(viewContext)) { //Tell viewmodel there is a new view active var ribbonViewModel = contextToViewModelLookup[viewContext]; VstoContribLog.Debug(_ => _("ViewModel {0} found for context {1}", ribbonViewModel.ToLogFormat(), viewContext.ToLogFormat())); ribbonViewModel.CurrentView = viewInstance; return(ribbonViewModel); } currentlyLoadingRibbon = ribbonType; IRibbonViewModel buildViewModel = BuildViewModel(ribbonType, viewInstance, viewContext); contextToViewModelLookup.Add(viewContext, buildViewModel); return(buildViewModel); }
public object InvokeGet(IRibbonControl control, Expression <Action> caller, params object[] parameters) { CallbackTarget callbackTarget = vstoContribContext.TagToCallbackTargetLookup[control.Tag + caller.GetMethodName()]; IRibbonViewModel viewModelInstance = ribbonViewModelResolver.ResolveInstanceFor(control.Context); Type type = viewModelInstance.GetType(); PropertyInfo property = type.GetProperty(callbackTarget.Method); if (property != null) { return(type.InvokeMember(callbackTarget.Method, BindingFlags.GetProperty, null, viewModelInstance, null)); } try { return(type.InvokeMember(callbackTarget.Method, BindingFlags.InvokeMethod, null, viewModelInstance, new[] { control } .Concat(parameters) .ToArray())); } catch (MissingMethodException) { throw new InvalidOperationException( string.Format("Expecting method with signature: {0}.{1}(IRibbonControl control)", type.Name, callbackTarget.Method)); } }
public RibbonView(IRibbonViewModel viewModel) { DataContext = viewModel; InitializeComponent(); }
protected AbstractRibbonTabModel(IRibbonViewModel viewModel, IReadOnlyList <ICanInvalidate> models) { ViewModel = viewModel; Models = models; }
public void CleanupViewModel(IRibbonViewModel viewModelInstance) { if (!ribbonTaskPanes.ContainsKey(viewModelInstance)) return; var adaptersForViewModel = ribbonTaskPanes[viewModelInstance]; ribbonTaskPanes.Remove(viewModelInstance); foreach (var oneToManyCustomTaskPaneAdapter in adaptersForViewModel) { oneToManyCustomTaskPaneAdapter.Dispose(); } }
public void Release(IRibbonViewModel viewModelInstance) { }
protected AbstractRibbonGroupModel(IRibbonViewModel viewModel, string viewModelName, IStrings strings) : this(viewModel?.GetControl <GroupVM>(viewModelName), strings) { }
public void RegisterCustomTaskPanes(IRibbonViewModel ribbonViewModel, object view, object viewContext) { var registersCustomTaskPanes = ribbonViewModel as IRegisterCustomTaskPane; if (registersCustomTaskPanes == null) { return; } if (!registrationInfo.ContainsKey(ribbonViewModel)) { registersCustomTaskPanes.RegisterTaskPanes((controlFactory, title, initiallyVisible) => { var taskPaneRegistrationInfo = new TaskPaneRegistrationInfo(controlFactory, title); if (!registrationInfo.ContainsKey(ribbonViewModel)) { registrationInfo.Add(ribbonViewModel, new List <TaskPaneRegistrationInfo>()); } registrationInfo[ribbonViewModel].Add(taskPaneRegistrationInfo); var taskPane = Register(view, taskPaneRegistrationInfo); var taskPaneAdapter = new OneToManyCustomTaskPaneAdapter(taskPane, viewContext) { Visible = initiallyVisible }; if (!ribbonTaskPanes.ContainsKey(ribbonViewModel)) { ribbonTaskPanes.Add(ribbonViewModel, new List <OneToManyCustomTaskPaneAdapter>()); } if (!windowToTaskPaneLookup.ContainsKey(view)) { windowToTaskPaneLookup.Add(view, new List <IRibbonViewModel>()); } ribbonTaskPanes[ribbonViewModel].Add(taskPaneAdapter); windowToTaskPaneLookup[view].Add(ribbonViewModel); return(taskPaneAdapter); }); } else { var adapters = ribbonTaskPanes[ribbonViewModel]; foreach (var taskPaneAdapter in adapters) { if (!taskPaneAdapter.ViewRegistered(view)) { foreach (var taskPaneRegistrationInfo in registrationInfo[ribbonViewModel]) { taskPaneAdapter.Add(Register(view, taskPaneRegistrationInfo)); } } else { taskPaneAdapter.Refresh(view); } } } foreach (var oneToManyCustomTaskPaneAdapter in windowToTaskPaneLookup[view] .Except(new[] { ribbonViewModel }) .SelectMany(viewModelToHide => ribbonTaskPanes[viewModelToHide])) { oneToManyCustomTaskPaneAdapter.HideIfVisible(); } foreach (var toRestore in ribbonTaskPanes[ribbonViewModel]) { toRestore.RestoreIfNeeded(); } }
public CrudGroupControllerDependencies(IRibbonControlFactory ribbonControlFactory, IRibbonViewModel ribbonViewModel, IRibbonTabFactory ribbonTabFactory) { RibbonControlFactory = ribbonControlFactory; RibbonViewModel = ribbonViewModel; RibbonTabFactory = ribbonTabFactory; }