Пример #1
0
 private void ComboBoxCalc_SelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     MenuItemDelSelected.IsEnabled = true;
     if (mComboBoxCalc.SelectedIndex >= 0 && mComboBoxCalc.SelectedIndex < mCalcList.Count)
     {
         mCalcCur = new CalcItem(mCalcList[mComboBoxCalc.SelectedIndex]);
     }
 }
Пример #2
0
        private void OnIsMouseOver(object sender, EventArgs e)
        {
            ComboBoxItem cmb = sender as ComboBoxItem;

            if (cmb.IsMouseOver)
            {
                CalcItem item = cmb.DataContext as CalcItem;
                if (item != null)
                {
                    //Console.WriteLine(item.FullText);
                    mTextResult.Text = item.mCalcTextResult;

                    Size size = MeasureString(mTextResult.Text);
                    mTextResult.Width = size.Width;
                }
                //do something...
            }
        }
Пример #3
0
        private void ComboBoxItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            ComboBoxItem cbItem = sender as ComboBoxItem;

            if (e.RightButton == MouseButtonState.Pressed)
            {
                if (cbItem != null)
                {
                    CalcItem cItem = cbItem.DataContext as CalcItem;
                    if (cItem != null)
                    {
                        mCalcList.Remove(cItem);
                        mComboBoxCalc.ItemsSource = null;
                        mComboBoxCalc.ItemsSource = mCalcList;
                        e.Handled = true;
                    }
                }
            }
        }
Пример #4
0
        public MainWindow()
        {
            mGlobalKeyboardHook = new GlobalKeyboardHook();
            mGlobalKeyboardHook.KeyboardPressed += OnGlobalKeyPressed;

            InitializeComponent();

            mCalcCur  = null;
            mCalcList = new List <CalcItem>();
            mComboBoxCalc.ItemsSource = mCalcList;


            double res;

            //res = RegexFormulas.Eval("(99)+(-23-((3+101b)/(0xF0)+-0x123+(0+1+2-3/4*5%6pow7pow8--++----9)))");

            res = RegexFormulas.Eval("1-2pow-2");
            res = RegexFormulas.Eval("1+log2-3pow2");
            //res = RegexFormulas.Eval("-(1+2)");
            //res = RegexFormulas.Eval("100^165");
            //res = RegexFormulas.Eval("int(1111pow11111)");

            //RegexFormulas.Eval("0+1+2-3/4*5%6pow7pow8--++----9", out res);
        }
Пример #5
0
 public CalcItem(CalcItem item)
 {
     mCalcText       = item.mCalcText;
     mCalcResult     = item.mCalcResult;
     mCalcTextResult = item.mCalcTextResult;
 }
Пример #6
0
        private void CalText(string text)
        {
            //MenuItemDebug.Header = "[Debug] " + (mDebugMode == 0?"Both":mDebugMode == 1? "3rd":"Native");
            double resultNative = double.NaN;
            double result3rd    = double.NaN;

            mTextEqualitySign.Text = "=";
            bool isErrorDetected = false;

            if (mDebugMode == 0 || mDebugMode >= 2)
            {
                try
                {
                    RegexFormulas.EvalWarningFlags flags = RegexFormulas.EvalWarningFlags.None;
                    resultNative = RegexFormulas.Eval(text, ref flags);
                    if ((flags & RegexFormulas.EvalWarningFlags.DoubleToInt) != 0)
                    {
                        Console.WriteLine(RegexFormulas.EvalWarningFlags.DoubleToInt);
                        mTextEqualitySign.Text = "≈";
                    }
                }
                catch (ArgumentOutOfRangeException ea)
                {
                    isErrorDetected  = true;
                    mTextResult.Text = "OutOfRange:" + ea.Message;
                    resultNative     = double.NaN;
                }
                catch (OverflowException eof)
                {
                    isErrorDetected  = true;
                    mTextResult.Text = "Overflow:" + eof.Message;
                    resultNative     = double.NaN;
                }
                catch (DivideByZeroException ediv)
                {
                    isErrorDetected  = true;
                    mTextResult.Text = "DivideByZero";
                    resultNative     = double.NaN;
                }
                catch (Exception ex)
                {
                    //Console.WriteLine(ex.Message);
                    resultNative = double.NaN;
                }
            }

#if !ENABLE_DynamicExpresso
            if (mDebugMode == 0 || mDebugMode == 1)
            {
                try
                {
                    var result = mInterpreter.Eval(cb.Text);

                    if (result.GetType() == typeof(int))
                    {
                        result3rd = (int)result;
                    }
                    else if (result.GetType() == typeof(float))
                    {
                        result3rd = (double)((float)result);
                    }
                    else if (result.GetType() == typeof(double))
                    {
                        result3rd = (double)result;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    result3rd = double.NaN;
                }
            }
#else
            result3rd = resultNative;
#endif

            if (double.IsNaN(resultNative) && double.IsNaN(result3rd))
            {
                if (!isErrorDetected)
                {
                    mTextResult.Text = "----";
                }
                ;
                mTextResult.Opacity = 0.5;
                if (mCalcCur != null)
                {
                    mCalcCur.mCalcResult     = Double.NaN;
                    mCalcCur.mCalcTextResult = "";
                }
            }
            else
            {
                if (mCalcCur == null)
                {
                    mCalcCur = new CalcItem();
                }
                mCalcCur.mCalcText = text;

                if (!double.IsNaN(resultNative))
                {
                    mCalcCur.mCalcResult = resultNative;
                }
                else if (!double.IsNaN(result3rd))
                {
                    mCalcCur.mCalcResult = result3rd;
                }

                mCalcCur.mCalcTextResult = mCalcCur.mCalcResult.ToString();

                if (mDebugMode == 0)
                {
                    Console.WriteLine("Native:" + resultNative + " 3rd:" + result3rd);
                }


                {
                    UpdateResult();
                    if (mDebugMode == 0)
                    {
                        if ((!double.IsNaN(resultNative) && !double.IsNaN(result3rd) && Math.Abs(resultNative - result3rd) > 2) ||
                            (double.IsNaN(resultNative) && !double.IsNaN(result3rd)))
                        {
                            mTextResult.Text = "N:" + resultNative + " 3:" + result3rd;
                        }
                    }


                    mTextResult.Opacity = 1;
                }
            }
        }
Пример #7
0
        private void ComboBoxCalc_KeyUp(object sender, KeyEventArgs e)
        {
            ComboBox cb = sender as ComboBox;

            if (cb == null)
            {
                return;
            }

            Size size = MeasureString(cb.Text);

            cb.Width = size.Width + 17 + 2 + 24;

            MenuItemDelSelected.IsEnabled = false;

            string   cmdResultMsg;
            CMD_TYPE cmdType = CheckCmd(cb.Text, false, out cmdResultMsg);

            if (e.Key == Key.Escape)
            {
                if (cb.Text.Length == 0)
                {
                    this.Hide();
                }
                else
                {
                    cb.Text             = "";
                    mTextResult.Text    = "----";
                    mTextResult.Opacity = 0.5;
                }
            }
            else if (e.Key == Key.Up && mComboBoxCalc.IsDropDownOpen)
            {
                mComboBoxCalc.IsDropDownOpen = false;
            }
            else if (e.Key == Key.Down && !mComboBoxCalc.IsDropDownOpen)
            {
                mComboBoxCalc.IsDropDownOpen = true;
            }
            else if (cmdType != CMD_TYPE.None)
            {
                if (e.Key == Key.Enter && (cmdType & CMD_TYPE.Done) != 0)
                {
                    cmdType = CheckCmd(cb.Text, true, out cmdResultMsg);
                    if ((cmdType & CMD_TYPE.Done) != 0)
                    {
                        cb.Text          = "";
                        mTextResult.Text = "Saved";
                        cmdType          = CMD_TYPE.None;
                    }
                    else
                    {
                        mTextResult.Text = "ERROR?!?!";
                    }
                }
                else
                {
                    mTextResult.Text = cmdResultMsg;
                }

                mTextResult.Opacity =
                    ((cmdType & CMD_TYPE.Done) != 0 || (cmdType & CMD_TYPE.Default) != 0) ? 1:0.5;
            }
            else
            {
                CalText(cb.Text);
                if (e != null && e.Key == Key.Enter)
                {
                    cb.Text             = "";
                    mTextResult.Text    = "Saved";
                    mTextResult.Opacity = 0.5;
                    mCalcList.Add(mCalcCur);
                    mComboBoxCalc.ItemsSource = null;
                    mComboBoxCalc.ItemsSource = mCalcList;
                    mCalcCur = null;
                }
            }

            size = MeasureString(mTextResult.Text);
            mTextResult.Width = size.Width;
            e.Handled         = true;
        }