private void OnSettingsKeyChanged(object sender, SettingsKeyChanged e) { string key = e.Key; if (key == CoreSettings.UseGroupedDates) { this.smartCollection.GroupBuilder = GroupBuilderFactory.GetGroupBuilder(this.folder, this.workbook.Settings); this.isDatesGrouped = this.workbook.Settings.GetValue <bool>(CoreSettings.UseGroupedDates); } else if (key.StartsWith("TaskOrdering")) { this.smartCollection.GroupBuilder = GroupBuilderFactory.GetGroupBuilder(this.folder, this.workbook.Settings); this.RaisePropertyChanged("DisplayFolder"); this.RaisePropertyChanged("DisplayDue"); } else if (key == CoreSettings.CompletedTasksMode) { this.hideCompletedTasks = this.workbook.Settings.GetValue <CompletedTaskMode>(CoreSettings.CompletedTasksMode) == CompletedTaskMode.Hide; this.smartCollection.GroupBuilder = GroupBuilderFactory.GetGroupBuilder(this.folder, this.workbook.Settings); this.smartCollection.Rebuild(); } else if (key == CoreSettings.ShowFutureStartDates) { this.showFutureStartDates = this.workbook.Settings.GetValue <bool>(CoreSettings.ShowFutureStartDates); this.smartCollection.Rebuild(); } }
public static List <ITask> SelectTasks(IAbstractFolder folder, ISettings settings) { var groupBuilder = GroupBuilderFactory.GetGroupBuilder(folder, settings); bool showCompleted = (folder is ISystemView) && ((ISystemView)folder).ViewKind == ViewKind.Completed; bool showTaskWithStartDateInFuture = settings.GetValue <bool>(CoreSettings.ShowFutureStartDates); DateTime dateTimeNow = DateTime.Now; var smartCollection = new SmartCollection <ITask>( folder.Tasks, groupBuilder, t => { return((!(folder is ISystemView) || t.Folder.ShowInViews.HasValue && t.Folder.ShowInViews.Value) && (showCompleted || !t.IsCompleted) && (showTaskWithStartDateInFuture || (!t.Start.HasValue || t.Start.Value <= dateTimeNow)) && t.ParentId == null); // exlude subtasks }); return(smartCollection.Items.SelectMany(g => g).ToList()); }
public FolderItemViewModel(IWorkbook workbook, IAbstractFolder folder) { if (workbook == null) { throw new ArgumentNullException(nameof(workbook)); } if (folder == null) { throw new ArgumentNullException(nameof(folder)); } this.workbook = workbook; this.settings = workbook.Settings; this.settings.KeyChanged += this.OnSettingsKeyChanged; this.folder = folder; this.setTargetGroupCommand = new RelayCommand <string>(taskGroup => this.SelectedTaskGroup = TaskGroupConverter.FromName(taskGroup)); this.contextualCommand = new RelayCommand(this.ContextualCommandExecute); this.showFutureStartDates = this.workbook.Settings.GetValue <bool>(CoreSettings.ShowFutureStartDates); this.isDatesGrouped = this.workbook.Settings.GetValue <bool>(CoreSettings.UseGroupedDates); this.hideCompletedTasks = this.workbook.Settings.GetValue <CompletedTaskMode>(CoreSettings.CompletedTasksMode) == CompletedTaskMode.Hide; ISystemView view = this.folder as ISystemView; if (view != null) { this.viewKind = view.ViewKind; } else if (this.folder is ViewSearch) { this.viewKind = ViewKind.Search; } else { this.viewKind = ViewKind.None; } this.trackedTasks = new List <ITask>(); this.folder.TaskAdded += (s, e) => this.AddTask(e.Item); this.folder.TaskRemoved += (s, e) => this.RemoveTask(e.Item); this.folder.PropertyChanged += (s, e) => { if (e.PropertyName == "Name") { this.RaisePropertyChanged("Name"); } else if (e.PropertyName == "TaskCount" && this.folder.HasCustomCommand) { this.RaisePropertyChanged("HasContextualCommand"); } }; this.folder.GroupingChanged += (s, e) => { this.smartCollection.GroupBuilder = GroupBuilderFactory.GetGroupBuilder(this.folder, this.settings); this.RaisePropertyChanged("DisplayFolder"); this.RaisePropertyChanged("DisplayDue"); }; // the last parameter is a function which returns the folder associated with a task // when we group by folder, it's the folder of the task // otherwise (most of the time), it's the folder of this ViewModel this.smartCollection = new SmartCollection <ITask>( this.folder.Tasks, GroupBuilderFactory.GetGroupBuilder(this.folder, this.workbook.Settings), this.TaskFilter, this, task => this.folder); foreach (var task in this.folder.Tasks) { this.StartTrackingTask(task); } }