コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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);
            }
        }