Esempio n. 1
0
            private void AddFolderNode(KTreeNode node, KTreeNodes children, AvailableFolder folder)
            {
                StoreTreeNode rootNode = (StoreTreeNode)this.Children.Parent;

                // Create the tree node
                SharedFolder   share = rootNode.GetInitialShareState(folder);
                FolderTreeNode child = new FolderTreeNode(rootNode, folder, share);

                ApplyReadOnly(child, child.IsReadOnly);

                // Add
                children.Add(child);

                // Add the children
                foreach (AvailableFolder childFolder in folder.Children.OrderBy(f => f, new FolderComparer(false)))
                {
                    AddFolderNode(child, child.Children, childFolder);
                }

                // Set the initial share state
                if (share != null)
                {
                    child.IsChecked = true;
                }

                // Add the share; it might have become checked by any of the child nodes
                if (child.IsShared)
                {
                    rootNode.AddShare(folder, share);
                }
            }
        private void checkWholeStore_CheckedChanged(object sender, EventArgs e)
        {
            CheckState?reminders = null;

            for (int i = 0; i < _optionWholeStoreNodes.Count; ++i)
            {
                StoreTreeNode node       = _optionWholeStoreNodes[i];
                bool          wholeStore = false;
                switch (checkWholeStore.CheckState)
                {
                case CheckState.Checked: wholeStore = true; break;

                case CheckState.Indeterminate: wholeStore = _optionWholeStoreNodesInitial[i]; break;

                case CheckState.Unchecked: wholeStore = false; break;
                }

                if (wholeStore)
                {
                    CheckState remindersCheck = node.ShowReminders? CheckState.Checked: CheckState.Unchecked;
                    if (reminders == null)
                    {
                        reminders = remindersCheck;
                    }
                    else if (reminders.Value != remindersCheck)
                    {
                        reminders = CheckState.Indeterminate;
                    }
                }
                node.WantShare = wholeStore;
            }

            OptionWholeStoreReminders = reminders;
        }
Esempio n. 3
0
        private void AddUserFolders(GABUser user, Dictionary <BackendId, SharedFolder> currentShares, bool select)
        {
            if (user == null)
            {
                return;
            }

            // If the user is already fetched, reuse the node
            StoreTreeNode node;

            if (!_userFolders.TryGetValue(user, out node))
            {
                if (!user.HasFullName)
                {
                    // Try to fill in the full name
                    user = gabLookup.LookupExact(user.UserName);
                }

                // Add the node
                node = new StoreTreeNode(_folders, gabLookup.GAB,
                                         user, user.DisplayName, currentShares ?? new Dictionary <BackendId, SharedFolder>());
                node.DirtyChanged += UserSharesChanged;
                _userFolders.Add(user, node);
                kTreeFolders.RootNodes.Add(node);
            }

            if (select)
            {
                FocusNode(node);
            }
        }
        private void WholeStoreShareChanged(KTreeNode node)
        {
            // TODO: check duplicate email address
            StoreTreeNode storeNode = (StoreTreeNode)node;

            _dirtyWholeStores[storeNode.User] = storeNode.IsWholeStoreDirty;
            CheckDirty();
        }
        private void checkWholeStoreReminders_CheckedChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < _optionWholeStoreNodes.Count; ++i)
            {
                StoreTreeNode node = _optionWholeStoreNodes[i];
                switch (checkWholeStoreReminders.CheckState)
                {
                case CheckState.Checked: node.ShowReminders = true; break;

                case CheckState.Indeterminate: node.ShowReminders = node.ShowRemindersInitial; break;

                case CheckState.Unchecked: node.ShowReminders = false; break;
                }
                WholeStoreShareChanged(node);
            }
        }
Esempio n. 6
0
        public FolderTreeNode(StoreTreeNode store, AvailableFolder folder, SharedFolder share)
        {
            this._store  = store;
            this._folder = folder;
            this._share  = share;

            this.Text = folder.Name;

            // Image
            // TODO: clean this up
            int index = ((int)OutlookConstants.BASIC_SYNC_TYPES[(int)folder.Type]) - 1;

            if (index < 0 || index >= store.Owner.Images.Images.Count - 1)
            {
                index = 0;
            }
            ImageIndex = index;
        }
Esempio n. 7
0
        public FolderTreeNode(StoreTreeNode store, AvailableFolder folder, SharedFolder share)
        {
            this._store  = store;
            this._folder = folder;
            this._share  = share;

            this.Text = folder.Name;

            IsReadOnly      = share?.SyncId?.Kind == SyncKind.Configured;
            HasCheckBox     = true;
            CheckBoxEnabled = !IsReadOnly;

            // Image
            // TODO: clean this up
            int index = ((int)OutlookConstants.BASIC_SYNC_TYPES[(int)folder.Type]) - 1;

            if (index < 0 || index >= store.Owner.Images.Images.Count - 1)
            {
                index = 0;
            }
            ImageIndex = index;
        }
        private void AddUserFolders(GABUser user, ZPushAccount wholeStore, Dictionary <BackendId, SharedFolder> currentShares, bool select)
        {
            if (user == null)
            {
                return;
            }

            // If the user is already fetched, reuse the node
            StoreTreeNode node;

            if (!_userFolders.TryGetValue(user, out node))
            {
                if (!user.HasFullName)
                {
                    // Try to fill in the full name
                    user = gabLookup.LookupExact(user.UserName);
                }

                string sendAsAddress = _featureSendAs?.FindSendAsAddress(_account, user);

                // Add the node
                node = new StoreTreeNode(_folders, gabLookup.GAB,
                                         user, sendAsAddress,
                                         user.DisplayName, currentShares ?? new Dictionary <BackendId, SharedFolder>(),
                                         wholeStore != null,
                                         wholeStore?.ShowReminders == true);
                node.DirtyChanged      += UserSharesChanged;
                node.CheckStateChanged += WholeStoreShareChanged;
                _userFolders.Add(user, node);
                kTreeFolders.RootNodes.Add(node);
            }

            if (select)
            {
                FocusNode(node, !_folders.SupportsWholeStore);
            }
        }
Esempio n. 9
0
 public UserFolderLoader(StoreTreeNode parent, SharedFoldersManager folders, GABUser user) : base(parent)
 {
     this._folders = folders;
     this.User     = user;
 }
Esempio n. 10
0
 private void UserSharesChanged(StoreTreeNode node)
 {
     _dirtyUsers[node.User.UserName] = node.IsDirty;
     dialogButtons.IsDirty           = _dirtyUsers.Values.Any((x) => x);
 }
        private void ShowOptions(KTreeNode[] nodes)
        {
            try
            {
                _layoutOptions.SuspendLayout();

                _optionNameNode = null;
                _optionSendAsNodes.Clear();
                _optionSendAsInitial.Clear();
                _optionRemindersNodes.Clear();
                _optionRemindersInitial.Clear();
                _optionPermissionNodes.Clear();
                _optionWholeStoreNodes.Clear();
                _optionWholeStoreNodesInitial.Clear();
                OptionName                = null;
                OptionTrackName           = null;
                OptionSendAs              = null;
                OptionReminders           = null;
                OptionPermissions         = null;
                OptionWholeStore          = null;
                OptionWholeStoreReminders = null;
                bool readOnly        = false;
                bool haveStoreNodes  = false;
                bool haveFolderNodes = false;

                foreach (KTreeNode node in nodes)
                {
                    // Ignore the root nodes
                    if (node is StoreTreeNode)
                    {
                        if (!_folders.SupportsWholeStore || !node.HasCheckBox)
                        {
                            continue;
                        }

                        StoreTreeNode storeNode = (StoreTreeNode)node;
                        haveStoreNodes = true;
                        _optionWholeStoreNodes.Add(storeNode);
                        _optionWholeStoreNodesInitial.Add(storeNode.IsShared);
                    }
                    else
                    {
                        FolderTreeNode folderNode = (FolderTreeNode)node;
                        // Can only set options for shared folders
                        if (!folderNode.IsShared)
                        {
                            continue;
                        }

                        haveFolderNodes = true;

                        // Set all controls to read-only if any of the nodes is read-only
                        if (folderNode.IsReadOnly)
                        {
                            readOnly = true;
                        }

                        SharedFolder    share  = folderNode.SharedFolder;
                        AvailableFolder folder = folderNode.AvailableFolder;

                        // Assume we will edit the name for this node; cleared below if there are multiple
                        _optionNameNode = folderNode;

                        if (folder.Type.IsMail())
                        {
                            // Show send as if there are any mail folders
                            _optionSendAsNodes.Add(folderNode);
                            _optionSendAsInitial.Add(folderNode.SharedFolder.FlagSendAsOwner);
                        }
                        else if (folder.Type.IsAppointment())
                        {
                            // Show reminders for appointment folders
                            _optionRemindersNodes.Add(folderNode);
                            _optionRemindersInitial.Add(folderNode.SharedFolder.FlagCalendarReminders);
                        }

                        // Show permissions for all shared nodes
                        _optionPermissionNodes.Add(folderNode);
                    }
                }

                // Now check consistency of the options

                if (haveFolderNodes && haveStoreNodes)
                {
                    // Mixed nodes, no options
                    return;
                }

                if (haveStoreNodes)
                {
                    if (_optionWholeStoreNodes.Count > 0)
                    {
                        bool isShared  = _optionWholeStoreNodes.First().WantShare;
                        bool wasShared = _optionWholeStoreNodes.First().IsShared;
                        if (_optionWholeStoreNodes.All(x => x.WantShare == isShared))
                        {
                            OptionWholeStore = isShared ? CheckState.Checked : CheckState.Unchecked;

                            checkWholeStore.ThreeState = false;
                        }
                        else
                        {
                            OptionWholeStore           = CheckState.Indeterminate;
                            checkWholeStore.ThreeState = true;
                        }

                        _labelRestartRequired.Visible = isShared && !wasShared;
                    }
                }
                else
                {
                    // Only show the name if there is a single node.
                    // We do that here so there doesn't have to be duplication if testing if it's sharedd,
                    // ect
                    if (_optionNameNode != null && nodes.Length == 1)
                    {
                        OptionName      = _optionNameNode.SharedFolder.Name;
                        OptionTrackName = _optionNameNode.SharedFolder.FlagUpdateShareName;
                    }
                    else
                    {
                        _optionNameNode = null;
                    }

                    // Permissions shown if all are the same
                    if (_optionPermissionNodes.Count > 0)
                    {
                        Permission?permissions = _optionPermissionNodes.First().SharedFolder.Permissions;
                        if (_optionPermissionNodes.All(x => x.SharedFolder.Permissions == permissions))
                        {
                            OptionPermissions = permissions;
                        }
                    }

                    // Send as shown if any node supports it
                    if (_optionSendAsNodes.Count > 0)
                    {
                        bool sendAs = _optionSendAsNodes.First().SharedFolder.FlagSendAsOwner;
                        if (_optionSendAsNodes.All(x => x.SharedFolder.FlagSendAsOwner == sendAs))
                        {
                            OptionSendAs           = sendAs ? CheckState.Checked : CheckState.Unchecked;
                            checkSendAs.ThreeState = false;
                        }
                        else
                        {
                            OptionSendAs           = CheckState.Indeterminate;
                            checkSendAs.ThreeState = true;
                        }

                        textSendAsAddress.Text = TryInitSendAsAddress();
                        EnableSendAsAddress();
                    }
                    // Reminders shown if any node supports it
                    if (_optionRemindersNodes.Count > 0)
                    {
                        bool reminders = _optionRemindersNodes.First().SharedFolder.FlagCalendarReminders;
                        if (_optionRemindersNodes.All(x => x.SharedFolder.FlagCalendarReminders == reminders))
                        {
                            OptionReminders           = reminders ? CheckState.Checked : CheckState.Unchecked;
                            checkReminders.ThreeState = false;
                        }
                        else
                        {
                            OptionReminders           = CheckState.Indeterminate;
                            checkReminders.ThreeState = true;
                        }
                    }
                }

                // Apply read-only state
                _layoutOptions.Enabled = !readOnly;
            }
            finally
            {
                _layoutOptions.ResumeLayout();
            }
        }
 private void UserSharesChanged(StoreTreeNode node)
 {
     _dirtyUsers[node.User] = node.IsDirty;
     CheckDirty();
 }