コード例 #1
0
        /// <summary>
        /// Запоминание состояния папки при сворачивании
        /// </summary>
        /// <param name="sender">Объект, пославший сообщение</param>
        /// <param name="e">Объект, содержащий данные посланного сообщения</param>
        private void treeViewOperationType_AfterCollapse(object sender, TreeViewEventArgs e)
        {
            COperationType operationType = _operationTypeWorker.GetByGeneralData(e.Node.Text);

            operationType.NodeFolderStated = NodeFolderStated.Closed;
            _operationTypeWorker.Update(operationType);
        }
コード例 #2
0
        /// <summary>
        /// Отобразить все вложенные узлы для данного узла
        /// </summary>
        /// <param name="treeNodes">Узелы на списке узлов</param>
        /// <param name="operationTypeId">Id типа операции, который находится в этом узле</param>
        private void FillNodes(TreeNodeCollection treeNodes, int operationTypeId)
        {
            COperationType[] operationTypes = _operationTypeWorker.GetChilds(operationTypeId);

            foreach (COperationType operationType in operationTypes)
            {
                treeNodes.Add(operationType.Name);
            }

            foreach (TreeNode node in treeNodes)
            {
                if (IsSelectedOperationTypesContainOperationType(node.Text))
                {
                    node.Checked = true;
                }

                COperationType operationType = _operationTypeWorker.GetByGeneralData(node.Text);
                if (operationType.Type == NodeType.Folder)
                {
                    node.NodeFont           = new Font(treeViewOperationType.Font, FontStyle.Bold);
                    node.ImageIndex         = 1;
                    node.SelectedImageIndex = 1;
                    FillNodes(node.Nodes, operationType.Id);

                    if (operationType.NodeFolderStated == NodeFolderStated.Opened)
                    {
                        node.Expand();
                    }
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Открыть форму для добавления нового типа операции
        /// </summary>
        /// <param name="sender">Объект, пославший сообщение</param>
        /// <param name="e">Объект, содержащий данные посланного сообщения</param>
        private void buttonAdd_Click(object sender, EventArgs e)
        {
            if (treeViewOperationType.SelectedNode == null)
            {
                new OperationTypeViewForm(_workersKeeper, null).ShowDialog();
            }
            else
            {
                COperationType operationType = _operationTypeWorker.GetByGeneralData(treeViewOperationType.SelectedNode.Text);

                if (operationType.Type == NodeType.Folder)
                {
                    new OperationTypeViewForm(_workersKeeper, null, treeViewOperationType.SelectedNode.Text).ShowDialog();
                }
                else if (treeViewOperationType.SelectedNode.Level > 0)
                {
                    new OperationTypeViewForm(_workersKeeper, null, treeViewOperationType.SelectedNode.Parent.Text).ShowDialog();
                }
                else
                {
                    new OperationTypeViewForm(_workersKeeper, null).ShowDialog();
                }
            }

            ShowOperationType();
        }
コード例 #4
0
        public OperationTypeRemoveForm(CWorkersKeeper workersKeeper, COperationType operationTypeInfo)
        {
            InitializeComponent();

            _operationTypeInfo   = operationTypeInfo;
            _operationTypeWorker = workersKeeper.OperationTypeWorker;
            _operationWorker     = workersKeeper.OperationWorker;
            _operationsWithCurrentOperationTypeCnt = _operationWorker.GetCountContainedOperationType(_operationTypeInfo.Name);
        }
コード例 #5
0
        /// <summary>
        /// Обработка двойного нажатия на узле
        /// </summary>
        /// <param name="sender">Объект, пославший сообщение</param>
        /// <param name="e">Объект, содержащий данные посланного сообщения</param>
        private void treeViewOperationType_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            treeViewOperationType.SelectedNode = e.Node;
            COperationType operationType = _operationTypeWorker.GetByGeneralData(e.Node.Text);

            if (operationType.Type == NodeType.Type && e.Button == MouseButtons.Left)
            {
                buttonEdit_Click(sender, e);
            }
        }
コード例 #6
0
        /// <summary>
        /// Выделение узла при нажатии на правую кнопку мыши и показ контекстного меню для папки
        /// </summary>
        /// <param name="sender">Объект, пославший сообщение</param>
        /// <param name="e">Объект, содержащий данные посланного сообщения</param>
        private void treeViewOperationType_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            treeViewOperationType.SelectedNode = e.Node;
            COperationType operationType = _operationTypeWorker.GetByGeneralData(e.Node.Text);

            if (operationType.Type == NodeType.Folder && e.Button == MouseButtons.Right)
            {
                contextMenuStrip1.Show(Cursor.Position.X, Cursor.Position.Y);
            }
        }
コード例 #7
0
        /// <summary>
        /// Запрет выделения папок
        /// </summary>
        /// <param name="sender">Объект, пославший сообщение</param>
        /// <param name="e">Объект, содержащий данные посланного сообщения</param>
        private void treeViewOperationType_BeforeCheck(object sender, TreeViewCancelEventArgs e)
        {
            COperationType operationType = _operationTypeWorker.GetByGeneralData(e.Node.Text);

            if (operationType == null || operationType.Type == NodeType.Folder)
            {
                MessageBox.Show("Выделение папки невозможно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
                e.Cancel = true;
            }
        }
コード例 #8
0
        /// <summary>
        /// Добавить новый тип операции к списку типов операций
        /// </summary>
        /// <param name="operationTypeInfo">Информация о типе операции</param>
        public void Add(COperationType operationTypeInfo)
        {
            if (GetByGeneralData(operationTypeInfo.Name) != null)
            {
                throw new Exception("Тип операции с таким названием уже существует");
            }

            var newOperationTypeInfo = new COperationType(operationTypeInfo)
            {
                Id = GetNewID(_operationTypeList.ToArray())
            };

            _operationTypeList.Add(newOperationTypeInfo);
            Save();
        }
コード例 #9
0
        /// <summary>
        /// Загрузить список типов операций
        /// </summary>
        private void Load()
        {
            _operationTypeList = new List <COperationType>();
            string allDataStr = CDatabaseEngine.UnpackText(_operationTypePath);

            // Получаем набор объектов
            string[] objectsStr = allDataStr.Split(new[] { ObjSplitStr }, StringSplitOptions.RemoveEmptyEntries);

            // Проходим по всем объектам
            foreach (string objectStr in objectsStr)
            {
                // Для каждого объекта получаем список значений
                string[] datasStr = objectStr.Split(new[] { DataSplitStr }, StringSplitOptions.RemoveEmptyEntries);

                var operationTypeInfo = new COperationType();
                foreach (string dataStr in datasStr)
                {
                    string[] keyValue = dataStr.Split(new[] { '=' }, 2);
                    switch (keyValue[0])
                    {
                    case "Id":
                        operationTypeInfo.Id = Convert.ToInt32(keyValue[1]);
                        break;

                    case "Name":
                        operationTypeInfo.Name = keyValue[1];
                        break;

                    case "IdParent":
                        operationTypeInfo.IdParent = Convert.ToInt32(keyValue[1]);
                        break;

                    case "Type":
                        operationTypeInfo.Type = (NodeType)Enum.Parse(typeof(NodeType), keyValue[1]);
                        break;

                    case "NodeFolderStated":
                        operationTypeInfo.NodeFolderStated = (NodeFolderStated)Enum.Parse(typeof(NodeFolderStated), keyValue[1]);
                        break;
                    }
                }

                _operationTypeList.Add(operationTypeInfo);
            }
        }
コード例 #10
0
        /// <summary>
        /// Обновить информацию о типе операции
        /// </summary>
        /// <param name="operationTypeInfo">Информация о типе операции</param>
        public void Update(COperationType operationTypeInfo)
        {
            COperationType tempOperationType = GetByGeneralData(operationTypeInfo.Name);

            if (tempOperationType != null && tempOperationType.Id != operationTypeInfo.Id)
            {
                throw new Exception("Тип операции с таким названием уже существует");
            }

            int n = 0;

            while (_operationTypeList[n].Id != operationTypeInfo.Id)
            {
                n++;
            }

            _operationTypeList[n] = new COperationType(operationTypeInfo);
            Save();
        }
コード例 #11
0
        /// <summary>
        /// Сохранение изменений
        /// </summary>
        /// <param name="sender">Объект, пославший сообщение</param>
        /// <param name="e">Объект, содержащий данные посланного сообщения</param>
        private void buttonOk_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(textBoxOperationTypeName.Text))
            {
                MessageBox.Show("Поля, отмеченные звёздочкой, обязательны для заполнения", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            try
            {
                string oldOperationTypeName = _operationTypeInfo.Name;
                _operationTypeInfo.Name = textBoxOperationTypeName.Text;
                _operationTypeInfo.Type = comboBoxNodeType.Text == "Папка" ? NodeType.Folder : NodeType.Type;

                if (comboBoxParentNodeName.Text == "Корневая папка")
                {
                    _operationTypeInfo.IdParent = -1;
                }
                else
                {
                    COperationType operationType = _operationTypeWorker.GetByGeneralData(comboBoxParentNodeName.Text);
                    _operationTypeInfo.IdParent = operationType.Id;
                }

                if (_operationTypeInfo.Id == 0)
                {
                    _operationTypeWorker.Add(_operationTypeInfo);
                }
                else
                {
                    _operationTypeWorker.Update(_operationTypeInfo);
                    _operationWorker.ChangeOperationType(oldOperationTypeName, _operationTypeInfo.Name);
                }

                _isFormClosingByButton = true;
                Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
コード例 #12
0
        public OperationTypeViewForm(CWorkersKeeper workersKeeper, COperationType operationTypeInfo, string defaultParentFolderName)
        {
            InitializeComponent();
            comboBoxNodeType.SelectedIndex = 0;
            _operationTypeWorker           = workersKeeper.OperationTypeWorker;
            _operationWorker = workersKeeper.OperationWorker;

            if (operationTypeInfo == null)
            {
                _operationTypeInfo = new COperationType();
                Text = "Добавление нового типа операции";
                AddAllParentTypesToComboBox(string.Empty);
                comboBoxParentNodeName.Text = defaultParentFolderName;
            }
            else
            {
                _operationTypeInfo = new COperationType(operationTypeInfo);
                Text = "Редактирование типа операции";
                textBoxOperationTypeName.Text = _operationTypeInfo.Name;

                AddAllParentTypesToComboBox(_operationTypeInfo.Name);

                if (_operationTypeInfo.Type == NodeType.Folder)
                {
                    comboBoxNodeType.SelectedIndex = 1;
                }

                comboBoxNodeType.Enabled = false;

                if (_operationTypeInfo.IdParent != -1)
                {
                    COperationType operationType = _operationTypeWorker.GetById(_operationTypeInfo.IdParent);
                    comboBoxParentNodeName.Text = operationType.Name;
                }
            }
        }
コード例 #13
0
 public OperationTypeViewForm(CWorkersKeeper workersKeeper, COperationType operationTypeInfo)
     : this(workersKeeper, operationTypeInfo, string.Empty)
 {
 }