2
0

Calculator.cpp 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /******************************************************************************/
  2. #include "stdafx.h"
  3. /******************************************************************************/
  4. CalculatorClass Calculator;
  5. /******************************************************************************/
  6. /******************************************************************************/
  7. CalculatorClass& CalculatorClass::create(C Rect &rect)
  8. {
  9. ::EE::Window::create("Calculator").clientRect(rect);
  10. T+=expression.create(Rect(0.01f, -clientHeight()+0.01f, clientWidth()-0.01f, -clientHeight()+0.01f+0.05f)); button[2].func(HideEditAct, SCAST(GuiObj, T)).show();
  11. return T;
  12. }
  13. void CalculatorClass::update(C GuiPC &gpc)
  14. {
  15. ::EE::ClosableWindow::update(gpc);
  16. if(Gui.kb()==&expression)
  17. {
  18. CalcValue value; if(Kb.kf(KB_ENTER) && Calculate(value, expression())){expression.set(value.asText(-9)); expression.cursor(expression().length());}
  19. }
  20. }
  21. void CalculatorClass::draw(C GuiPC &gpc)
  22. {
  23. if(visible() && gpc.visible)
  24. {
  25. ::EE::Window::draw(gpc);
  26. D.clip(gpc.clip);
  27. CalcValue value; bool ok=Calculate(value, expression());
  28. TextStyleParams ts(true); ts.align.y=1;
  29. TextStyleParams tsb=ts;
  30. ts .size=0.040f;
  31. tsb.size=0.055f;
  32. Rect rect=clientRect(); rect.min.y+=expression.rect().max.y+clientHeight(); rect.extendX(-0.01f); rect+=gpc.offset;
  33. if(!ok){tsb.align.y=0; D.text(tsb, rect.center(), S+"Error : "+CalcError);}else
  34. {
  35. D.text(tsb, rect.down(), value.asText(-9));
  36. if(value.type==CVAL_INT || value.type==CVAL_REAL)
  37. {
  38. int i;
  39. flt f;
  40. dbl d;
  41. if(value.type==CVAL_INT ){d=value.i; f=value.i; i= value.i ;}else
  42. if(value.type==CVAL_REAL){d=value.r; f=value.r; i=Round(value.r);}
  43. ts.align.x=-1;
  44. D.text(ts, rect.max.x, rect.min.y+0.13f, TextInt (i ));
  45. D.text(ts, rect.max.x, rect.min.y+0.09f, TextReal(f, -9));
  46. D.text(ts, rect.max.x, rect.min.y+0.05f, TextReal(d, -9));
  47. ts.align.x=1;
  48. D.text(ts, rect.min.x, rect.min.y+0.13f, "Int");
  49. D.text(ts, rect.min.x, rect.min.y+0.09f, "Flt");
  50. D.text(ts, rect.min.x, rect.min.y+0.05f, "Dbl");
  51. D.text(ts, rect.min.x+0.07f, rect.min.y+0.13f, TextHex((uint&)i, 8, 0, true));
  52. D.text(ts, rect.min.x+0.07f, rect.min.y+0.09f, TextHex((uint&)f, 8, 0, true));
  53. uint *x=(uint*)&d; D.text(ts, rect.min.x+0.07f, rect.min.y+0.05f, TextHex( x[1], 8, 0, true)+TextHex(x[0], 8));
  54. }
  55. }
  56. }
  57. }
  58. /******************************************************************************/