Пример #1
0
        private void VarComboBox_Leave(object sender, EventArgs e)
        {
            ComboBox Sender = (ComboBox)sender;
            int      idx    = this.VarsComboBoxes.IndexOf(Sender);                                              // индекс переменной ComboBox'а в списке DebuggerParameters.ChartVars

            DebuggerParameters.VarDescription requestedVarDesc = this.debuggerEngine.Parameters.ChartVars[idx]; // текущая опрашиваемая переменная
            if (requestedVarDesc == null || requestedVarDesc.Name != Sender.Text)
            {
                // Выбранныя в ComboBox переменная не совпадает с опрашиваемой по тому же индексу
                if (Sender.Text != "")
                {
                    // В ComboBox не пустая строка
                    ControllerVar var = this.ControllerProgramSolution.Vars.GetVarByName(Sender.Text);
                    if (var == null || var.Address == 0 && (!(var is ControllerEmbeddedVar) && !(false)) || (var is ControllerStructVar) || (var is ControllerUserVar) && ((ControllerUserVar)var).Array)
                    {
                        // В ComboBox указано несуществующее имя переменной
                        Sender.Text = requestedVarDesc == null ? "" : requestedVarDesc.Name;
                        this.plVarsView.GraphPane.CurveList[idx].Label.Text = requestedVarDesc == null ? "Нет" : requestedVarDesc.Name;
                        this.Refresh();
                        return;
                    }
                    if (requestedVarDesc != null)
                    {
                        // По этому идексу переменная уже опрашивается => удаляем опрашиваемую переменную из очереди отладчика
                        this.debuggerEngine.RemoveReadItem(requestedVarDesc.Address, requestedVarDesc.MemoryType,
                                                           this.GetVarMarker(requestedVarDesc, idx));
                    }
                    // Создаем описание новой опрашиваемой переменной
                    DebuggerParameters.VarDescription varDesc =
                        requestedVarDesc == null ? new DebuggerParameters.VarDescription() : requestedVarDesc;
                    varDesc.Address    = var.Address;
                    varDesc.HasSign    = var.HasSign;
                    varDesc.Size       = var.Size;
                    varDesc.Name       = var.Name;
                    varDesc.MemoryType = var.Memory;
                    this.debuggerEngine.Parameters.ChartVars[idx] = varDesc;
                    // Добавляем переменную в очередь отладчика
                    this.debuggerEngine.AddReadItem(varDesc.Address, varDesc.MemoryType, varDesc.Size,
                                                    this.GetVarMarker(varDesc, idx), null, new ProceedingCompleetedDelegate(this.VarReaded));
                    this.plVarsView.GraphPane.CurveList[idx].Label.Text = varDesc.Name;
                    this.Refresh();
                }
                else
                {
                    // В ComboBox указана пустая строка
                    if (requestedVarDesc != null)
                    {
                        // Если по текущему индексу переменная уже опрашивалась, то удаляем ее из очереди отладчика и его параметров
                        this.debuggerEngine.RemoveReadItem(requestedVarDesc.Address, requestedVarDesc.MemoryType,
                                                           this.GetVarMarker(requestedVarDesc, idx));
                        this.debuggerEngine.Parameters.ChartVars[idx]       = null;
                        this.plVarsView.GraphPane.CurveList[idx].Label.Text = "Нет";
                    }
                    this.Refresh();
                }
            }
        }
Пример #2
0
 private void ViewGraphicsTabbedDocument_Closed(object sender, EventArgs e)
 {
     this.closed = true;
     for (int i = 0; i < this.debuggerEngine.Parameters.ChartVars.Count; i++)
     {
         // Удаляем опрашиваемые переменные из списка отладчика
         DebuggerParameters.VarDescription var = this.debuggerEngine.Parameters.ChartVars[i];
         if (var != null)
         {
             this.debuggerEngine.RemoveReadItem(var.Address, var.MemoryType, this.GetVarMarker(var, i));
         }
     }
 }
Пример #3
0
        /// <summary>
        /// Для заданной переменной преобразует ее значение из массива байт в целое число
        /// </summary>
        private long GetVarValue(DebuggerParameters.VarDescription var, byte[] data)
        {
            if (this.debuggerEngine.Parameters.InverseByteOrder)
            {
                data = Utils.ReflectArray <byte>(data);
            }
            long res = AppliedMath.BytesToLong(data);

            switch (var.Size)
            {
            case 1:
                if (var.HasSign)
                {
                    res = (sbyte)res;
                }
                else
                {
                    res = (byte)res;
                }
                break;

            case 2:
                if (var.HasSign)
                {
                    res = (short)res;
                }
                else
                {
                    res = (ushort)res;
                }
                break;

            case 4:
                if (var.HasSign)
                {
                    res = (int)res;
                }
                else
                {
                    res = (uint)res;
                }
                break;
            }
            return(res);
        }
Пример #4
0
 /// <summary>
 /// Инициализирует поля ComboBox'ов переменных
 /// </summary>
 private void SetRequestedVarsToComboBoxes()
 {
     for (int i = 0; i < this.VarsComboBoxes.Count; i++)
     {
         if (i >= this.debuggerEngine.Parameters.ChartVars.Count)
         {
             this.debuggerEngine.Parameters.ChartVars.Add(null);
         }
         else if (this.debuggerEngine.Parameters.ChartVars[i] != null)
         {
             DebuggerParameters.VarDescription var = this.debuggerEngine.Parameters.ChartVars[i];
             this.VarsComboBoxes[i].Text = var.Name;
             this.debuggerEngine.AddReadItem(var.Address, var.MemoryType, var.Size, this.GetVarMarker(var, i),
                                             null, new ProceedingCompleetedDelegate(this.VarReaded));
             this.plVarsView.GraphPane.CurveList[i].Label.Text = var.Name;
         }
     }
 }
Пример #5
0
 /// <summary>
 /// Создает маркер, идентифицирующий переменную в очереди переменной
 /// </summary>
 /// <param name="var">Переменная</param>
 /// <param name="idx">Дополнительный идентификационный параметр</param>
 private string GetVarMarker(DebuggerParameters.VarDescription var, int idx)
 {
     return("graph_" + Utils.AddChars('0', idx.ToString(), 3 - idx.ToString().Length) + "_" + var.Name);
 }