Exemple #1
0
        private void AddItemToList(IWorkspaceMapping mapping, bool specialNewItem)
        {
            try
            {
                ListViewItem         viewItem;
                WorkspaceMappingType mappingType;
                string status;
                string serverFolder;
                string localFolder;

                ListViewItem.ListViewSubItem subItemServerFolder;
                ListViewItem.ListViewSubItem subItemLocalFolder;

                if (specialNewItem)
                {
                    viewItem     = AddNewItemHint();
                    mapping      = null;
                    status       = "Active";
                    serverFolder = string.Empty;
                    localFolder  = string.Empty;
                    mappingType  = WorkspaceMappingType.Map;
                }
                else
                {
                    mappingType  = mapping.MappingType;
                    status       = mappingType == WorkspaceMappingType.Map ? "Active" : "Cloaked";
                    serverFolder = mapping.ServerItem;
                    localFolder  = mapping.LocalItem;
                    viewItem     = this.lvWorkspaces.Items.Add(status);
                    viewItem.SubItems.Add(mapping.ServerItem);
                    viewItem.SubItems.Add(mapping.LocalItem);
                }

                subItemServerFolder = viewItem.SubItems[COLUMN_SERVERFOLDER];
                subItemLocalFolder  = viewItem.SubItems[COLUMN_LOCALFOLDER];

                viewItem.Tag = mapping;
                int rowIndex = this.lvWorkspaces.Items.Count - 1;

                var cmbStatus = new ComboBox();
                cmbStatus.DrawMode       = DrawMode.OwnerDrawFixed;
                cmbStatus.ItemHeight     = 11;
                cmbStatus.IntegralHeight = true;
                cmbStatus.DrawItem      += ((sender, e) =>
                {
                    e.DrawBackground();
                    if (e.Index > -1)
                    {
                        var text = cmbStatus.Items[e.Index] as string;
                        e.Graphics.DrawString(text, e.Font, new SolidBrush(e.ForeColor), e.Bounds);
                    }
                });

                cmbStatus.FlatStyle     = FlatStyle.Flat;
                cmbStatus.Font          = new Font("Microsoft Sans Serif", 6.75F, FontStyle.Regular, GraphicsUnit.Point, 238);
                cmbStatus.DropDownStyle = ComboBoxStyle.DropDownList;
                cmbStatus.Items.Add("Active");
                cmbStatus.Items.Add("Cloaked");
                cmbStatus.Text          = status;
                cmbStatus.SelectedIndex = mappingType == WorkspaceMappingType.Map ? 0 : 1;
                this.lvWorkspaces.AddEmbeddedControl(cmbStatus, COLUMN_STATUS, rowIndex, DockStyle.Fill, false);

                var serverFolderPanel = new Panel();
                serverFolderPanel.Tag = viewItem;
                int buttonSize = 19;
                serverFolderPanel.BackColor = Color.Transparent;
                var serverFolderEdit = new TextBox();
                serverFolderEdit.Text        = serverFolder;
                serverFolderEdit.Name        = "edit";
                serverFolderEdit.BorderStyle = BorderStyle.FixedSingle;
                serverFolderPanel.Controls.Add(serverFolderEdit);
                serverFolderEdit.Location = new Point(0, 0);
                serverFolderEdit.Size     = new Size(serverFolderPanel.ClientRectangle.Width - buttonSize,
                                                     serverFolderPanel.ClientRectangle.Height);
                serverFolderEdit.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
                //serverFolderEdit.Dock = DockStyle.Left;
                var serverFolderButton = new Button();
                serverFolderPanel.Controls.Add(serverFolderButton);
                serverFolderButton.Text = "???";
                serverFolderButton.Font = new Font("Microsoft Sans Serif", 6.75F, FontStyle.Regular, GraphicsUnit.Point,
                                                   238);
                serverFolderButton.BackColor = Color.FromKnownColor(KnownColor.Control);
                serverFolderButton.Location  = new Point(serverFolderPanel.ClientRectangle.Right - buttonSize, 0);
                serverFolderButton.Size      = new Size(buttonSize, buttonSize);
                serverFolderButton.Dock      = DockStyle.Right;
                serverFolderButton.Click    += BrowseForServerFolder_Click;
                subItemServerFolder.Tag      = serverFolderEdit;
                this.lvWorkspaces.AddEmbeddedControl(serverFolderPanel, COLUMN_SERVERFOLDER, rowIndex, DockStyle.Fill,
                                                     false);


                var localFolderPanel = new Panel();
                localFolderPanel.Tag       = viewItem;
                localFolderPanel.BackColor = Color.Transparent;
                var localFolderEdit = new TextBox();
                localFolderEdit.Text        = localFolder;
                localFolderEdit.Name        = "edit";
                localFolderEdit.BorderStyle = BorderStyle.FixedSingle;
                localFolderPanel.Controls.Add(localFolderEdit);
                localFolderEdit.Location = new Point(0, 0);
                localFolderEdit.Size     = new Size(localFolderPanel.ClientRectangle.Width - buttonSize,
                                                    localFolderPanel.ClientRectangle.Height);
                localFolderEdit.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
                //localFolderEdit.Dock = DockStyle.Left;
                var localFolderButton = new Button();
                localFolderPanel.Controls.Add(localFolderButton);
                localFolderButton.Text = "???";
                localFolderButton.Font = new Font("Microsoft Sans Serif", 6.75F, FontStyle.Regular, GraphicsUnit.Point,
                                                  238);
                localFolderButton.BackColor = Color.FromKnownColor(KnownColor.Control);
                localFolderButton.Location  = new Point(localFolderPanel.ClientRectangle.Right - buttonSize, 0);
                localFolderButton.Size      = new Size(buttonSize, buttonSize);
                localFolderButton.Dock      = DockStyle.Right;
                localFolderButton.Click    += BrowseForLocalFolder_Click;
                subItemLocalFolder.Tag      = localFolderEdit;
                this.lvWorkspaces.AddEmbeddedControl(localFolderPanel, COLUMN_LOCALFOLDER, rowIndex, DockStyle.Fill,
                                                     false);
            }
            finally
            {
                UpdateWarning();
            }
        }
Exemple #2
0
        private void lvWorkspaces_EmbeddControlEndEditing(EmbeddControlEndEditingArgs args)
        {
            bool   isHintItem        = args.ControlItem.Tag == null;
            bool   convertToRealItem = false;
            string serverFolder;
            string localFolder;

            if (!args.Editing)
            {
                switch (args.Column)
                {
                case COLUMN_STATUS:
                {
                    serverFolder = (args.ControlItem.SubItems[COLUMN_SERVERFOLDER].Tag as TextBox).Text;
                    localFolder  = (args.ControlItem.SubItems[COLUMN_LOCALFOLDER].Tag as TextBox).Text;

                    convertToRealItem = (isHintItem &&
                                         (!string.IsNullOrEmpty(serverFolder) || !string.IsNullOrEmpty(localFolder)));

                    var cmb = args.EmbeddControl as ComboBox;
                    if (convertToRealItem)
                    {
                        args.ControlItem.SubItems[args.Column].Text = cmb.SelectedItem as string;
                    }

                    break;
                }

                case COLUMN_SERVERFOLDER:
                case COLUMN_LOCALFOLDER:
                {
                    var       pnl       = args.EmbeddControl as Panel;
                    Control[] controls  = pnl.Controls.Find("edit", false);
                    var       edit      = controls[0] as TextBox;
                    bool      textEmpty = string.IsNullOrEmpty(edit.Text);

                    if (!isHintItem || !textEmpty)
                    {
                        args.ControlItem.SubItems[args.Column].Text = edit.Text;
                    }

                    convertToRealItem = (isHintItem && !textEmpty);
                    break;
                }
                }

                string status = args.ControlItem.SubItems[COLUMN_STATUS].Text;
                serverFolder = args.ControlItem.SubItems[COLUMN_SERVERFOLDER].Text;
                localFolder  = args.ControlItem.SubItems[COLUMN_LOCALFOLDER].Text;

                // item with tag null is 'hint' item
                if (convertToRealItem)
                {
                    if (string.IsNullOrEmpty(localFolder))
                    {
                        string[] items = serverFolder.Split('/');
                        // $/FAST/Development/Main/Source
                        //LOCAL_FOLDER_SOURCEDIR
                        var part = new StringBuilder();
                        if (items.Length >= 3)
                        {
                            part.Append("\\");
                            for (int i = 2; i < items.Length; i++)
                            {
                                part.Append(items[i]);
                                if (i + 1 < items.Length)
                                {
                                    part.Append("\\");
                                }
                            }
                        }

                        localFolder = LOCAL_FOLDER_SOURCEDIR + part;
                        (args.ControlItem.SubItems[COLUMN_LOCALFOLDER].Tag as TextBox).Text = localFolder;
                        args.ControlItem.SubItems[COLUMN_LOCALFOLDER].Text = localFolder;
                    }

                    WorkspaceMappingType mappingType = (status.ToLower() == "active"
                        ? WorkspaceMappingType.Map : WorkspaceMappingType.Cloak);
                    IWorkspaceMapping mapping = this.definition.Workspace.AddMapping(serverFolder, localFolder,
                                                                                     mappingType);

                    args.ControlItem.UseItemStyleForSubItems = true;
                    args.ControlItem.SubItems[COLUMN_SERVERFOLDER].ForeColor =
                        Color.FromKnownColor(KnownColor.ControlText);

                    args.ControlItem.Tag = mapping;
                    AddItemToList(null, true);
                }

                if ((isHintItem && !convertToRealItem) &&
                    args.ControlItem.SubItems[COLUMN_STATUS].Text.ToLower() == "active")
                {
                    args.ControlItem.SubItems[COLUMN_STATUS].Text       = string.Empty;
                    args.ControlItem.SubItems[COLUMN_SERVERFOLDER].Text = HINT_ITEM_TEXT;
                }
            }
            else
            {
                if ((args.Column == COLUMN_SERVERFOLDER || args.Column == COLUMN_LOCALFOLDER))
                {
                    ListViewItem.ListViewSubItem subItemServerFolder = args.ControlItem.SubItems[COLUMN_SERVERFOLDER];
                    string editText = (subItemServerFolder.Tag as TextBox).Text;
                    if (subItemServerFolder.Text != string.Empty && editText == string.Empty)
                    {
                        subItemServerFolder.Text = string.Empty;
                    }

                    if (args.ControlItem.SubItems[COLUMN_STATUS].Text == string.Empty)
                    {
                        args.ControlItem.SubItems[COLUMN_STATUS].Text = "Active";
                    }
                }

                if (args.Column == COLUMN_STATUS && isHintItem)
                {
                    if (args.ControlItem.SubItems[COLUMN_STATUS].Text.ToLower() == "active")
                    {
                        args.ControlItem.SubItems[COLUMN_STATUS].Text = string.Empty;
                    }

                    args.ControlItem.SubItems[COLUMN_SERVERFOLDER].Text = HINT_ITEM_TEXT;
                }
            }
        }