class_new_flight_dialog.html 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
  5. <meta http-equiv="X-UA-Compatible" content="IE=9"/>
  6. <meta name="generator" content="Doxygen 1.9.1"/>
  7. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  8. <title>openPilotLog: NewFlightDialog Class Reference</title>
  9. <link href="tabs.css" rel="stylesheet" type="text/css"/>
  10. <script type="text/javascript" src="jquery.js"></script>
  11. <script type="text/javascript" src="dynsections.js"></script>
  12. <link href="navtree.css" rel="stylesheet" type="text/css"/>
  13. <script type="text/javascript" src="resize.js"></script>
  14. <script type="text/javascript" src="navtreedata.js"></script>
  15. <script type="text/javascript" src="navtree.js"></script>
  16. <link href="search/search.css" rel="stylesheet" type="text/css"/>
  17. <script type="text/javascript" src="search/searchdata.js"></script>
  18. <script type="text/javascript" src="search/search.js"></script>
  19. <link href="doxygen.css" rel="stylesheet" type="text/css" />
  20. <link href="custom_dark_theme.css" rel="stylesheet" type="text/css"/>
  21. </head>
  22. <body>
  23. <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
  24. <div id="titlearea">
  25. <table cellspacing="0" cellpadding="0">
  26. <tbody>
  27. <tr style="height: 56px;">
  28. <td id="projectlogo"><img alt="Logo" src="icon_main.png"/></td>
  29. <td id="projectalign" style="padding-left: 0.5em;">
  30. <div id="projectname">openPilotLog
  31. </div>
  32. </td>
  33. </tr>
  34. </tbody>
  35. </table>
  36. </div>
  37. <!-- end header part -->
  38. <!-- Generated by Doxygen 1.9.1 -->
  39. <script type="text/javascript">
  40. /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  41. var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
  42. /* @license-end */
  43. </script>
  44. <script type="text/javascript" src="menudata.js"></script>
  45. <script type="text/javascript" src="menu.js"></script>
  46. <script type="text/javascript">
  47. /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  48. $(function() {
  49. initMenu('',true,false,'search.php','Search');
  50. $(document).ready(function() { init_search(); });
  51. });
  52. /* @license-end */</script>
  53. <div id="main-nav"></div>
  54. </div><!-- top -->
  55. <div id="side-nav" class="ui-resizable side-nav-resizable">
  56. <div id="nav-tree">
  57. <div id="nav-tree-contents">
  58. <div id="nav-sync" class="sync"></div>
  59. </div>
  60. </div>
  61. <div id="splitbar" style="-moz-user-select:none;"
  62. class="ui-resizable-handle">
  63. </div>
  64. </div>
  65. <script type="text/javascript">
  66. /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  67. $(document).ready(function(){initNavTree('class_new_flight_dialog.html',''); initResizable(); });
  68. /* @license-end */
  69. </script>
  70. <div id="doc-content">
  71. <!-- window showing the filter options -->
  72. <div id="MSearchSelectWindow"
  73. onmouseover="return searchBox.OnSearchSelectShow()"
  74. onmouseout="return searchBox.OnSearchSelectHide()"
  75. onkeydown="return searchBox.OnSearchSelectKey(event)">
  76. </div>
  77. <!-- iframe showing the search results (closed by default) -->
  78. <div id="MSearchResultsWindow">
  79. <iframe src="javascript:void(0)" frameborder="0"
  80. name="MSearchResults" id="MSearchResults">
  81. </iframe>
  82. </div>
  83. <div class="header">
  84. <div class="summary">
  85. <a href="#pub-methods">Public Member Functions</a> &#124;
  86. <a href="#pro-methods">Protected Member Functions</a> &#124;
  87. <a href="class_new_flight_dialog-members.html">List of all members</a> </div>
  88. <div class="headertitle">
  89. <div class="title">NewFlightDialog Class Reference</div> </div>
  90. </div><!--header-->
  91. <div class="contents">
  92. <p>The <a class="el" href="class_new_flight_dialog.html" title="The NewFlightDialog is used to add or edit entries from the flights table in the database.">NewFlightDialog</a> is used to add or edit entries from the flights table in the database.
  93. <a href="class_new_flight_dialog.html#details">More...</a></p>
  94. <p><code>#include &lt;<a class="el" href="newflightdialog_8h_source.html">newflightdialog.h</a>&gt;</code></p>
  95. <div class="dynheader">
  96. Inheritance diagram for NewFlightDialog:</div>
  97. <div class="dyncontent">
  98. <div class="center">
  99. <img src="class_new_flight_dialog.png" alt=""/>
  100. </div></div>
  101. <table class="memberdecls">
  102. <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
  103. Public Member Functions</h2></td></tr>
  104. <tr class="memitem:abb96717e143dac3ea5f3d7f11fc30a5b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_new_flight_dialog.html#abb96717e143dac3ea5f3d7f11fc30a5b">NewFlightDialog</a> (<a class="el" href="class_o_p_l_1_1_db_completion_data.html">OPL::DbCompletionData</a> &amp;completion_data, QWidget *parent=nullptr)</td></tr>
  105. <tr class="memdesc:abb96717e143dac3ea5f3d7f11fc30a5b"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="class_new_flight_dialog.html" title="The NewFlightDialog is used to add or edit entries from the flights table in the database.">NewFlightDialog</a> - Creates a <a class="el" href="class_new_flight_dialog.html" title="The NewFlightDialog is used to add or edit entries from the flights table in the database.">NewFlightDialog</a> that can be used to add a new flight entry to the logbook. <a href="class_new_flight_dialog.html#abb96717e143dac3ea5f3d7f11fc30a5b">More...</a><br /></td></tr>
  106. <tr class="separator:abb96717e143dac3ea5f3d7f11fc30a5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
  107. <tr class="memitem:a6743b82918ae8af325723c86bdf31688"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_new_flight_dialog.html#a6743b82918ae8af325723c86bdf31688">NewFlightDialog</a> (<a class="el" href="class_o_p_l_1_1_db_completion_data.html">OPL::DbCompletionData</a> &amp;completion_data, int row_id, QWidget *parent=nullptr)</td></tr>
  108. <tr class="memdesc:a6743b82918ae8af325723c86bdf31688"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="class_new_flight_dialog.html" title="The NewFlightDialog is used to add or edit entries from the flights table in the database.">NewFlightDialog</a> - Creates a <a class="el" href="class_new_flight_dialog.html" title="The NewFlightDialog is used to add or edit entries from the flights table in the database.">NewFlightDialog</a> that can be used to edit an existing entry in the logbook. <a href="class_new_flight_dialog.html#a6743b82918ae8af325723c86bdf31688">More...</a><br /></td></tr>
  109. <tr class="separator:a6743b82918ae8af325723c86bdf31688"><td class="memSeparator" colspan="2">&#160;</td></tr>
  110. </table><table class="memberdecls">
  111. <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
  112. Protected Member Functions</h2></td></tr>
  113. <tr class="memitem:a22f8f768399ceb22f064fb8cb24c3c28"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_new_flight_dialog.html#a22f8f768399ceb22f064fb8cb24c3c28">eventFilter</a> (QObject *object, QEvent *event) override</td></tr>
  114. <tr class="memdesc:a22f8f768399ceb22f064fb8cb24c3c28"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="class_new_flight_dialog.html#a22f8f768399ceb22f064fb8cb24c3c28" title="NewFlightDialog::eventFilter invalidates mandatory line edits on focus in.">NewFlightDialog::eventFilter</a> invalidates mandatory line edits on focus in. <a href="class_new_flight_dialog.html#a22f8f768399ceb22f064fb8cb24c3c28">More...</a><br /></td></tr>
  115. <tr class="separator:a22f8f768399ceb22f064fb8cb24c3c28"><td class="memSeparator" colspan="2">&#160;</td></tr>
  116. </table>
  117. <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
  118. <div class="textblock"><p>The <a class="el" href="class_new_flight_dialog.html" title="The NewFlightDialog is used to add or edit entries from the flights table in the database.">NewFlightDialog</a> is used to add or edit entries from the flights table in the database. </p>
  119. <p><a class="el" href="class_new_flight_dialog.html" title="The NewFlightDialog is used to add or edit entries from the flights table in the database.">NewFlightDialog</a> offers two constructors, one is used to create a new flight entry from scratch, where the other one is used to edit an existing entry. This entry is identified by its ROW ID, which is used to retreive the entry data and pre-populate the user interface with the data from the database.</p>
  120. <p>The flights table is the core of the application's database and care needs to be taken when interfacing with it.</p>
  121. <p>To ensure only good data is written to the database, the <a class="el" href="class_validation_state.html" title="The ValidationState class encapsulates a QBitArray that has a bit set (or unset) depending on wether ...">ValidationState</a> class is used. It contains a QBitArray with each bit representing a mandatory data point. The array is initialized to all false and progressively changed to true as entry data is validated. An entry can only be submitted if all the verification bits are set.</p>
  122. <p>Inputs from the user are verified with a two-step process. The first level of verification is accomplished by QRegularExpressionValidator, which limits the user to only inputting generally acceptable data (like numbers for date or time, or characters for airport identifiers). If the input passes this sanity check, the line edits emit the editingFinished() signal, which triggers a more granular and sophisticated set of input verification, broadly based on cross-checking the entered data against known good values. The ACompletionData class is used to provide QHashs of known good values from the database and their respective ROW_IDs. If user-entered data has been matched to a known good database value, the data is considered acceptable. This means that in order to, for example, log a flight with a certain Pilot, that this pilot already has to exist in the pilots table. If this is not the case, the user is prompted to add a new pilot (or aircraft) to the database before proceeding. In order to make this matching process seamless for the user, the completionData also contains a set of QStringLists for each of the database tables which are used to create QCompleters that provide pop-up completion on the respective QLineEdits.</p>
  123. <p>Once the user is satisfied with his entries, a final set of input verification is triggered and the entry is submitted to the database, see on_buttonBox_accepted() and Database::commit() </p>
  124. </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
  125. <a id="abb96717e143dac3ea5f3d7f11fc30a5b"></a>
  126. <h2 class="memtitle"><span class="permalink"><a href="#abb96717e143dac3ea5f3d7f11fc30a5b">&#9670;&nbsp;</a></span>NewFlightDialog() <span class="overload">[1/2]</span></h2>
  127. <div class="memitem">
  128. <div class="memproto">
  129. <table class="mlabels">
  130. <tr>
  131. <td class="mlabels-left">
  132. <table class="memname">
  133. <tr>
  134. <td class="memname">NewFlightDialog::NewFlightDialog </td>
  135. <td>(</td>
  136. <td class="paramtype"><a class="el" href="class_o_p_l_1_1_db_completion_data.html">OPL::DbCompletionData</a> &amp;&#160;</td>
  137. <td class="paramname"><em>completion_data</em>, </td>
  138. </tr>
  139. <tr>
  140. <td class="paramkey"></td>
  141. <td></td>
  142. <td class="paramtype">QWidget *&#160;</td>
  143. <td class="paramname"><em>parent</em> = <code>nullptr</code>&#160;</td>
  144. </tr>
  145. <tr>
  146. <td></td>
  147. <td>)</td>
  148. <td></td><td></td>
  149. </tr>
  150. </table>
  151. </td>
  152. <td class="mlabels-right">
  153. <span class="mlabels"><span class="mlabel">explicit</span></span> </td>
  154. </tr>
  155. </table>
  156. </div><div class="memdoc">
  157. <p><a class="el" href="class_new_flight_dialog.html" title="The NewFlightDialog is used to add or edit entries from the flights table in the database.">NewFlightDialog</a> - Creates a <a class="el" href="class_new_flight_dialog.html" title="The NewFlightDialog is used to add or edit entries from the flights table in the database.">NewFlightDialog</a> that can be used to add a new flight entry to the logbook. </p>
  158. <dl class="params"><dt>Parameters</dt><dd>
  159. <table class="params">
  160. <tr><td class="paramname">completion_data</td><td>- contains QStringLists for the QCompleter to autocomplete Airport Codes, Pilot Names and aircraft registrationsn </td></tr>
  161. </table>
  162. </dd>
  163. </dl>
  164. </div>
  165. </div>
  166. <a id="a6743b82918ae8af325723c86bdf31688"></a>
  167. <h2 class="memtitle"><span class="permalink"><a href="#a6743b82918ae8af325723c86bdf31688">&#9670;&nbsp;</a></span>NewFlightDialog() <span class="overload">[2/2]</span></h2>
  168. <div class="memitem">
  169. <div class="memproto">
  170. <table class="mlabels">
  171. <tr>
  172. <td class="mlabels-left">
  173. <table class="memname">
  174. <tr>
  175. <td class="memname">NewFlightDialog::NewFlightDialog </td>
  176. <td>(</td>
  177. <td class="paramtype"><a class="el" href="class_o_p_l_1_1_db_completion_data.html">OPL::DbCompletionData</a> &amp;&#160;</td>
  178. <td class="paramname"><em>completion_data</em>, </td>
  179. </tr>
  180. <tr>
  181. <td class="paramkey"></td>
  182. <td></td>
  183. <td class="paramtype">int&#160;</td>
  184. <td class="paramname"><em>row_id</em>, </td>
  185. </tr>
  186. <tr>
  187. <td class="paramkey"></td>
  188. <td></td>
  189. <td class="paramtype">QWidget *&#160;</td>
  190. <td class="paramname"><em>parent</em> = <code>nullptr</code>&#160;</td>
  191. </tr>
  192. <tr>
  193. <td></td>
  194. <td>)</td>
  195. <td></td><td></td>
  196. </tr>
  197. </table>
  198. </td>
  199. <td class="mlabels-right">
  200. <span class="mlabels"><span class="mlabel">explicit</span></span> </td>
  201. </tr>
  202. </table>
  203. </div><div class="memdoc">
  204. <p><a class="el" href="class_new_flight_dialog.html" title="The NewFlightDialog is used to add or edit entries from the flights table in the database.">NewFlightDialog</a> - Creates a <a class="el" href="class_new_flight_dialog.html" title="The NewFlightDialog is used to add or edit entries from the flights table in the database.">NewFlightDialog</a> that can be used to edit an existing entry in the logbook. </p>
  205. <dl class="params"><dt>Parameters</dt><dd>
  206. <table class="params">
  207. <tr><td class="paramname">completion_data</td><td>- contains QStringLists for the QCompleter to autocomplete Airport Codes, Pilot Names and aircraft registrationsn </td></tr>
  208. <tr><td class="paramname">row_id</td><td>- The database ROW ID of the entry to be edited </td></tr>
  209. </table>
  210. </dd>
  211. </dl>
  212. </div>
  213. </div>
  214. <h2 class="groupheader">Member Function Documentation</h2>
  215. <a id="a22f8f768399ceb22f064fb8cb24c3c28"></a>
  216. <h2 class="memtitle"><span class="permalink"><a href="#a22f8f768399ceb22f064fb8cb24c3c28">&#9670;&nbsp;</a></span>eventFilter()</h2>
  217. <div class="memitem">
  218. <div class="memproto">
  219. <table class="mlabels">
  220. <tr>
  221. <td class="mlabels-left">
  222. <table class="memname">
  223. <tr>
  224. <td class="memname">bool NewFlightDialog::eventFilter </td>
  225. <td>(</td>
  226. <td class="paramtype">QObject *&#160;</td>
  227. <td class="paramname"><em>object</em>, </td>
  228. </tr>
  229. <tr>
  230. <td class="paramkey"></td>
  231. <td></td>
  232. <td class="paramtype">QEvent *&#160;</td>
  233. <td class="paramname"><em>event</em>&#160;</td>
  234. </tr>
  235. <tr>
  236. <td></td>
  237. <td>)</td>
  238. <td></td><td></td>
  239. </tr>
  240. </table>
  241. </td>
  242. <td class="mlabels-right">
  243. <span class="mlabels"><span class="mlabel">override</span><span class="mlabel">protected</span></span> </td>
  244. </tr>
  245. </table>
  246. </div><div class="memdoc">
  247. <p><a class="el" href="class_new_flight_dialog.html#a22f8f768399ceb22f064fb8cb24c3c28" title="NewFlightDialog::eventFilter invalidates mandatory line edits on focus in.">NewFlightDialog::eventFilter</a> invalidates mandatory line edits on focus in. </p>
  248. <p>Some of the QLineEdits have validators set that provide raw input validation. These validators have the side effect that if an input does not meet the raw input validation criteria, onEditingFinished() is not emitted when the line edit loses focus. This could lead to a line edit that previously had good input to be changed to bad input without the validation bit in validationState being unset, because the second step of input validation is only triggered when editingFinished() is emitted. </p>
  249. </div>
  250. </div>
  251. <hr/>The documentation for this class was generated from the following files:<ul>
  252. <li>src/gui/dialogues/<a class="el" href="newflightdialog_8h_source.html">newflightdialog.h</a></li>
  253. <li>src/gui/dialogues/newflightdialog.cpp</li>
  254. </ul>
  255. </div><!-- contents -->
  256. </div><!-- doc-content -->
  257. <!-- start footer part -->
  258. <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  259. <ul>
  260. <li class="navelem"><a class="el" href="class_new_flight_dialog.html">NewFlightDialog</a></li>
  261. <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  262. </ul>
  263. </div>
  264. </body>
  265. </html>