UIMLProgressAndStateView.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #include "UIMLProgressAndStateView.h"
  2. #include <Bild.h>
  3. #include <DateiSystem.h>
  4. #include <TextFeld.h>
  5. #include <ToolTip.h>
  6. #include "Globals.h"
  7. #undef max
  8. UIMLProgressAndStateView::UIMLProgressAndStateView(Framework::Text id,
  9. Framework::Text background,
  10. Framework::Text foreground,
  11. int* targetAddress,
  12. int addressLength,
  13. char registerMessage,
  14. char unregisterMessage,
  15. Framework::Text toolTipPrefix,
  16. Framework::Text toolTipSuffix)
  17. : Framework::Zeichnung(),
  18. NetworkAPIProcessor(),
  19. id(id),
  20. background(0),
  21. foreground(0),
  22. registerMessage(registerMessage),
  23. unregisterMessage(unregisterMessage),
  24. toolTipPrefix(toolTipPrefix),
  25. toolTipSuffix(toolTipSuffix),
  26. targetAddress(targetAddress),
  27. addressLength(addressLength),
  28. max(0),
  29. current(0)
  30. {
  31. Framework::LTDBDatei file;
  32. file.setDatei(
  33. background.getTeilText(0, background.positionVon(".ltdb/") + 5));
  34. file.leseDaten(0);
  35. this->background = file.laden(
  36. 0, background.getTeilText(background.positionVon(".ltdb/") + 6));
  37. file.setDatei(
  38. foreground.getTeilText(0, foreground.positionVon(".ltdb/") + 5));
  39. file.leseDaten(0);
  40. this->foreground = file.laden(
  41. 0, foreground.getTeilText(foreground.positionVon(".ltdb/") + 6));
  42. char* msg = new char[id.getLength() + 6];
  43. msg[0] = registerMessage; // register progress/state observer
  44. msg[1] = (char)id.getLength();
  45. memcpy(msg + 2, id.getText(), id.getLength());
  46. *(int*)(msg + 2 + id.getLength()) = NetworkAPIProcessor::getId();
  47. World::INSTANCE->zClient()->componentAPIRequest(
  48. targetAddress, addressLength, msg, id.getLength() + 6);
  49. delete[] msg;
  50. }
  51. UIMLProgressAndStateView::~UIMLProgressAndStateView()
  52. {
  53. char* msg = new char[id.getLength() + 6];
  54. msg[0] = unregisterMessage; // unregister fuel state observer
  55. msg[1] = (char)id.getLength();
  56. memcpy(msg + 2, id.getText(), id.getLength());
  57. *(int*)(msg + 2 + id.getLength()) = NetworkAPIProcessor::getId();
  58. World::INSTANCE->zClient()->componentAPIRequest(
  59. targetAddress, addressLength, msg, id.getLength() + 6);
  60. delete[] msg;
  61. if (background)
  62. {
  63. background->release();
  64. }
  65. if (foreground)
  66. {
  67. foreground->release();
  68. }
  69. delete[] targetAddress;
  70. }
  71. void UIMLProgressAndStateView::api(char* message)
  72. {
  73. max = *(int*)message;
  74. current = *(int*)(message + 4);
  75. uiFactory.initParam.bildschirm->lock();
  76. lockZeichnung();
  77. Framework::Text toolTipText;
  78. toolTipText.append() << toolTipPrefix.getText() << current << " / " << max
  79. << toolTipSuffix;
  80. if (!toolTip)
  81. {
  82. setToolTipText(toolTipText,
  83. uiFactory.initParam.bildschirm,
  84. uiFactory.initParam.schrift);
  85. }
  86. else
  87. {
  88. Framework::TextFeld* textField
  89. = dynamic_cast<Framework::TextFeld*>(toolTip->zMember(0));
  90. if (textField)
  91. {
  92. textField->setText(toolTipText);
  93. textField->setSize(
  94. textField->getNeededWidth(), textField->getNeededHeight());
  95. }
  96. else
  97. {
  98. setToolTipText(toolTipText,
  99. uiFactory.initParam.bildschirm,
  100. uiFactory.initParam.schrift);
  101. }
  102. }
  103. toolTip->setRender();
  104. rend = 1;
  105. unlockZeichnung();
  106. uiFactory.initParam.bildschirm->unlock();
  107. }
  108. void UIMLProgressAndStateView::render(Framework::Bild& rObj)
  109. {
  110. if (hatStyleNicht(Style::Sichtbar)) return;
  111. lockZeichnung();
  112. if (!rObj.setDrawOptions(pos.x, pos.y, gr.x, gr.y))
  113. {
  114. unlockZeichnung();
  115. return;
  116. }
  117. Zeichnung::render(rObj);
  118. rObj.alphaBild(0, 0, gr.x, gr.y, *background);
  119. if (max > 0 && current > 0)
  120. {
  121. double progrss = (double)current / max;
  122. if (hatStyle(Style::Vertical))
  123. {
  124. int height = (int)(gr.y * progrss);
  125. if (hatStyle(Style::Reversed))
  126. {
  127. if (rObj.setDrawOptions(0, gr.y - height, gr.x, height))
  128. {
  129. rObj.alphaBild(0, height - gr.y, gr.x, gr.y, *foreground);
  130. rObj.releaseDrawOptions();
  131. }
  132. }
  133. else
  134. {
  135. rObj.alphaBild(0, 0, gr.x, height, *foreground);
  136. }
  137. }
  138. else
  139. {
  140. int width = (int)(gr.x * progrss);
  141. if (hatStyle(Style::Reversed))
  142. {
  143. if (rObj.setDrawOptions(gr.x - width, 0, width, gr.y))
  144. {
  145. rObj.alphaBild(width - gr.x, 0, gr.x, gr.y, *foreground);
  146. rObj.releaseDrawOptions();
  147. }
  148. }
  149. else
  150. {
  151. rObj.alphaBild(0, 0, width, gr.y, *foreground);
  152. }
  153. }
  154. }
  155. rObj.releaseDrawOptions();
  156. unlockZeichnung();
  157. }