Esempio n. 1
0
        //Вырезает запись типа "Работа" и ее "дела" во внутренний клипборд
        public void CutJobRecords(List <ViewRecord> SelectedViewRecords)
        {
            Int32[] number;
            Int32   index;
            Record  r;

            clipboard.Clear();
            ViewRecord vr = SelectedViewRecords[0];

            number = GetNumbers(vr.Number);
            foreach (Record rec in modelRecords)
            {
                if (rec.ProjNumber == number[0] && rec.JobNumber == number[1])
                {
                    index = IndexOfNumber(number[0], number[1], number[2]);
                    r     = rec.Clone();
                    Record     undoRecord = rec.Clone();
                    UndoAction undoAction = new UndoAction(ActionType.delRecord, undoRecord);
                    undoActions.Push(undoAction);
                    clipboard.Enqueue(r);
                }
            }
            foreach (Record rc in clipboard)
            {
                modelRecords.Remove(rc);
            }
            NumerationRepair();
        }
Esempio n. 2
0
        /// <summary>
        /// Изменение полей в существующей записи Record
        /// </summary>
        /// <param name="viewRecord">ViewRecord передается из ViewModel</param>
        public void UpdateModelRecord(ViewRecord viewRecord)
        {
            Int32  index;
            Record updatedRecord;

            //Поиск строки по номеру Проект/Работа/Дело
            String[] number = viewRecord.Number.Split(new char[] { '.' });
            Int32    proj   = Int32.Parse(number[0]);
            Int32    job    = Int32.Parse(number[1]);
            Int32    act    = Int32.Parse(number[2]);

            index = IndexOfNumber(proj, job, act);
            if (index < 0)
            {
                MessageBox.Show("Не найдена строка для обновления в modelRecords");
                return;
            }

            updatedRecord = modelRecords[index];
            Record     undoRecord = updatedRecord.Clone();
            UndoAction undoAction = new UndoAction(ActionType.editRecord, undoRecord);

            undoActions.Push(undoAction);
            redoActions.Clear();

            updatedRecord.RecordDate = viewRecord.RecordDate;
            updatedRecord.Content    = viewRecord.Content;
            updatedRecord.AlarmTime  = viewRecord.AlarmTime;
            updatedRecord.Note       = viewRecord.Note;
            //MessageBox.Show("Model Updated");
        }
Esempio n. 3
0
        private Queue <Record> clipboard;                     //Стэк для хранения скопированных или вырезаных записей

        public Model()
        {
            modelRecords = new List <Record>();      //Модель
            //viewRecords = new SpecialObservableCollection<ViewRecord>(); //Выборка из модели для отображения
            undoActions  = new Stack <UndoAction>(); //Список действий для команды Undo
            redoActions  = new Stack <UndoAction>(); //Список действий для отмены Undo
            lastRowAdded = new ViewRecord();
            clipboard    = new Queue <Record>();
        }
Esempio n. 4
0
        //Вставляет записи из внутреннего клипборда
        public void PasteRecords(List <ViewRecord> SelectedViewRecords)
        {
            if (clipboard.Count == 0)
            {
                return;
            }
            Int32[]    number;
            Int32      index;
            Boolean    lastRecordFlag = true;
            ViewRecord vr             = SelectedViewRecords[0];

            number = GetNumbers(vr.Number);
            index  = IndexOfNumber(number[0], number[1], number[2]);
            RecordType type = clipboard.Peek().RecordType;

            if (type == RecordType.act) //Вставляем группу записей Act
            {
                foreach (Record r in clipboard)
                {
                    Record     undoRecord = r.Clone();
                    UndoAction undoAction = new UndoAction(ActionType.addRecord, undoRecord);
                    undoActions.Push(undoAction);

                    modelRecords.Insert(++index, r);
                }
            }
            else //Вставляем Работу и ее Дела
            {
                for (Int32 i = ++index; i < modelRecords.Count(); i++) //Ищем следующую запись типа Проект или Работа
                {
                    if (modelRecords[i].RecordType == RecordType.job || modelRecords[i].RecordType == RecordType.project)
                    {
                        index          = i - 1;
                        lastRecordFlag = false;
                        break;
                    }
                }
                if (lastRecordFlag) //Если дошли до конца modelRecords
                {
                    index = modelRecords.Count() - 1;
                }
                foreach (Record r in clipboard)
                {
                    Record     undoRecord = r.Clone();
                    UndoAction undoAction = new UndoAction(ActionType.addRecord, undoRecord);
                    undoActions.Push(undoAction);

                    modelRecords.Insert(++index, r);
                }
            }
            NumerationRepair();
        }
Esempio n. 5
0
 //Этот метод срабатывает при редактировании ячеек (до принятия изменений)
 //Определяет измененную ячейку GataGrid и передает ее адрес и содержимое во ViewModel
 private void MainDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
 {
     if (e.EditAction == DataGridEditAction.Commit)
     {
         DataGridRow row = e.Row;
         ViewRecord  vr  = (ViewRecord)row.Item;
         //Int32 columnIndex = e.Column.DisplayIndex; //Номер ячейки в строке
         DataGridCell dataGridCell = (DataGridCell)e.EditingElement.Parent;
         TextBox      textBox      = (TextBox)dataGridCell.Content;
         String       content      = textBox.Text;
         String       columnName   = e.Column.SortMemberPath;
         viewModel.DataGridChanged(vr, columnName, content);
     }
 }