Exemple #1
0
        private void checkSendAs_CheckedChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < _optionSendAsNodes.Count; ++i)
            {
                FolderTreeNode node   = _optionSendAsNodes[i];
                bool           sendAs = false;
                switch (checkSendAs.CheckState)
                {
                case CheckState.Checked: sendAs = true; break;

                case CheckState.Indeterminate: sendAs = _optionSendAsInitial[i]; break;

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

                if (node.SharedFolder.FlagSendAsOwner != sendAs)
                {
                    node.SharedFolder = node.SharedFolder.WithFlagSendAsOwner(sendAs);

                    // Send-as is applied recursively
                    foreach (FolderTreeNode desc in node.Descendants())
                    {
                        desc.SharedFolder = desc.SharedFolder.WithFlagSendAsOwner(sendAs);
                    }
                }
            }
        }
Exemple #2
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 TryInitSendAsAddressParent(FolderTreeNode node)
        {
            if (node == null)
            {
                return;
            }

            for (KTreeNode current = node.Parent; current is FolderTreeNode; current = current.Parent)
            {
                FolderTreeNode parentNode = (FolderTreeNode)current;
                if (parentNode.SharedFolder == null)
                {
                    break;
                }

                if (parentNode.SharedFolder.FlagSendAsOwner)
                {
                    if (!string.IsNullOrWhiteSpace(parentNode.SharedFolder.SendAsAddress))
                    {
                        node.SharedFolder.SendAsAddress = parentNode.SharedFolder.SendAsAddress;
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
        }
        private void textSendAsAddress_TextChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < _optionSendAsNodes.Count; ++i)
            {
                FolderTreeNode node = _optionSendAsNodes[i];

                if (node.SharedFolder.SendAsAddress != textSendAsAddress.Text)
                {
                    node.SharedFolder = node.SharedFolder.WithSendAsAddress(textSendAsAddress.Text);
                }
            }
        }
Exemple #5
0
        private void checkReminders_CheckedChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < _optionRemindersNodes.Count; ++i)
            {
                FolderTreeNode node      = _optionRemindersNodes[i];
                bool           reminders = false;
                switch (checkReminders.CheckState)
                {
                case CheckState.Checked: reminders = true; break;

                case CheckState.Indeterminate: reminders = _optionRemindersInitial[i]; break;

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

                if (node.SharedFolder.FlagCalendarReminders != reminders)
                {
                    node.SharedFolder = node.SharedFolder.WithFlagCalendarReminders(reminders);
                }
            }
        }
Exemple #6
0
        private void ShowOptions(KTreeNode[] nodes)
        {
            try
            {
                _layoutOptions.SuspendLayout();

                _optionNameNode = null;
                _optionSendAsNodes.Clear();
                _optionSendAsInitial.Clear();
                _optionRemindersNodes.Clear();
                _optionRemindersInitial.Clear();
                _optionPermissionNodes.Clear();
                OptionName        = null;
                OptionTrackName   = null;
                OptionSendAs      = null;
                OptionReminders   = null;
                OptionPermissions = null;

                foreach (KTreeNode node in nodes)
                {
                    // Ignore the root nodes
                    if (node is StoreTreeNode)
                    {
                        continue;
                    }

                    FolderTreeNode folderNode = (FolderTreeNode)node;
                    // Can only set options for shared folders
                    if (!folderNode.IsShared)
                    {
                        continue;
                    }

                    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

                // 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;
                    }
                }
                // 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;
                    }
                }
            }
            finally
            {
                _layoutOptions.ResumeLayout();
            }
        }
        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();
            }
        }