Project Documentation Manager BRIGADOON-0002
Project Documentation Manager
Loading...
Searching...
No Matches
projectsubstitute.cpp
Go to the documentation of this file.
1#include "projectsubstitute.h"
2#include <QWidget>
3#include <QSqlQuery>
4#include <QTableWidgetItem>
5#include <QDirIterator>
6
7ProjectSubstitute::ProjectSubstitute(Ui::MainWindow* UI_Window, ProjectOptionsManager* ProjectOptsManager)
8{
9 ui = UI_Window;
10 leadin_string = "[#";
11 leadout_string = "#]";
12 system_colour = QColor(255, 255, 220);
13
14 project_opts_manager = ProjectOptsManager;
15 option_name << "EXCLUDE_FROM_LIST"
16 << "CONTROL_DOC_ACCESS"
17 << "ONLY_DEFAULT_PAGE"
18 << "GROUP_ACCESS_ONLY"
19 << "ENABLE_CUSTOM_DOXY"
20 << "CAVEAT_LECTOR"
21 << "POTENTIAL_HAZARD"
22 << "ASSISTANCE_WELCOME"
23 << "DONATIONS_WELCOME"
24 << "OFFER_PAYPAL_DONATION";
25
26 sys_item_name << "PROJECT_NAME"
27 << "PROJECT_IDENT"
28 << "MAJOR_VERSION"
29 << "MINOR_VERSION"
30 << "REVISION"
31 << "BRIEF_DESCRIPTION"
32 << "DEV_FAMILY"
33 << "LANGUAGE_FAMILY"
34 << "PRIMARY_TOOL"
35 << "SYSTEM_FAMILY"
36 << "PROJECT_STATUS"
37 << "PROJECT_HISTORY"
38 << "STATUS_DATE"
39 << "DOCUMENT_LICENCE"
40 << "SOFTWARE_LICENCE"
41 << "HARDWARE_LICENCE"
42 << "PROJECT_CONTACT"
43 << "PROJECT_EMAIL"
44 << "FULL_DESCRIPTION"
45 << "PROJECT_DIRECTORY"
46 << "PROJECT_ICON"
47 << "DOXY_LOGO"
48 << "DOXY_HTML_HEADER"
49 << "DOXY_HTML_FOOTER"
50 << "DOXY_EXTRA_STYLESHEET"
51 << "ASSOCIATED_GROUP"
52 << "DEPARTURE_URL"
53 << "SITE_URL"
54 << "EXECUTABLE_DIR"
55 << "SOURCE_LIST";
56
57
58 QObject::connect(ui->ReloadSubstituitions, SIGNAL(pressed()), this, SLOT(ReloadSubstituteTable()));
59 QObject::connect(ui->ClearSubstituitions, SIGNAL(pressed()), this, SLOT(ClearSubstituteEntry()));
60 QObject::connect(ui->SaveSubstituitions, SIGNAL(pressed()), this, SLOT(SaveLocalSubstitutes()));
61
62 // Set the Substituition Table Column and Row Settings
63 ui->ProjectSubsList->setColumnCount(2);
64 ui->ProjectSubsList->setRowCount( MAXIMUM_KEY_VALUE_PAIRS );
65 ui->ProjectSubsList->setHorizontalHeaderLabels( QStringList( {"Key Word", "Substitution String"} ));
66 ui->ProjectSubsList->setColumnWidth(0, PROJECT_KEY_COLUMN_WIDTH);
67 ui->ProjectSubsList->setColumnWidth(1,(ui->ProjectSubsList->width() - ui->ProjectSubsList->columnWidth(0) ) );
68}
69
70void ProjectSubstitute::LogAdd(LOGGING_SEVERITY Severity, LOGGING_MODE Mode, QString Message)
71{
72 REMOTE_LOG_ENTRY log_entry;
73 log_entry.Severity = Severity;
74 log_entry.Mode = Mode;
75 log_entry.Message = Message;
76 emit SendLogEntry(log_entry);
77}
78
80{
81 project_info = ProjectInfo;
82 LoadSubsTable(project_info->ProjectDesc.ProjectIndex);
83}
84
86{
87 QString key, value;
88
89 // Clear any Existing Entries
90 ui->ProjectSubsList->clearContents();
91
92 // Insert the Program Defined Substitutions
93 int row_index = 0;
94
95 // Add Keys defined by the Project
96 QString timestamp_format_string = DATETIME_DISPLAY_FORMAT;
97
98 // If this is a project Creation, use the Current Date Time.
99 if (ProjectNo != 0)
100 {
101 key = sys_item_name[STATUS_DATE]; value = project_info->StatusInfo.StatusDateTime.toString(timestamp_format_string);
102 AddKeyValue(key, value, row_index++);
103 key = sys_item_name[FULL_DESCRIPTION]; value = project_info->ProjectDesc.FullDescription;
104 AddKeyValue(key, value, row_index++);
105 key = sys_item_name[PROJECT_DIRECTORY]; value = project_info->ProgramInformation.LocalDevelopmentDirectory;
106 AddKeyValue(key, value, row_index++);
107 key = sys_item_name[PROJECT_ICON]; value = project_info->ProjectDesc.ProjectIcon;
108 AddKeyValue(key, value, row_index++);
109 key = sys_item_name[DOXY_LOGO]; value = project_info->DoxyOptions.DoxyLogoFilename;
110 AddKeyValue(key, value, row_index++);
111 key = sys_item_name[DOXY_HTML_HEADER]; value = project_info->DoxyOptions.DoxyHtmlHeaderFilename;
112 AddKeyValue(key, value, row_index++);
113 key = sys_item_name[DOXY_HTML_FOOTER]; value = project_info->DoxyOptions.DoxyHtmlFooterFilename;
114 AddKeyValue(key, value, row_index++);
115 key = sys_item_name[DOXY_EXTRA_STYLESHEET]; value = project_info->DoxyOptions.DoxyExtraStylesheetFilename;
116 //AddKeyValue(key, value, row_index++);
117 //key = sys_item_name[SOURCE_LIST]; value = project_info->ProjectDesc->
118 }
119 else
120 {
121 key = sys_item_name[STATUS_DATE]; value = "";
122 AddKeyValue(key, value, row_index++);
123 key = sys_item_name[FULL_DESCRIPTION]; value = "";
124 AddKeyValue(key, value, row_index++);
125 key = sys_item_name[PROJECT_DIRECTORY]; value = "";
126 AddKeyValue(key, value, row_index++);
127 key = sys_item_name[PROJECT_ICON]; value = "";
128 AddKeyValue(key, value, row_index++);
129 key = sys_item_name[DOXY_LOGO]; value = "";
130 AddKeyValue(key, value, row_index++);
131 key = sys_item_name[DOXY_HTML_HEADER]; value = "";
132 AddKeyValue(key, value, row_index++);
133 key = sys_item_name[DOXY_HTML_FOOTER]; value = "";
134 AddKeyValue(key, value, row_index++);
135 key = sys_item_name[DOXY_EXTRA_STYLESHEET]; value = "";
136 AddKeyValue(key, value, row_index++);
137 }
138
139 if (ProjectNo == 0)
140 {
141 row_index = DecodeProjectOptions(0, row_index, true);
142 }
143 else
144 {
145 row_index = DecodeProjectOptions(project_info->ProjectDesc.ProjectOptions, row_index, false);
146 }
147 key = sys_item_name[PROJECT_NAME]; value = ui->ProjectName->text();
148 AddKeyValue(key, value, row_index++);
149
150 key = sys_item_name[DEPARTURE_URL]; value = ui->DepartureURL->text();
151 AddKeyValue(key, value, row_index++);
152 key = sys_item_name[EXECUTABLE_DIR]; value = ui->ExecutableDirectory->text();
153 AddKeyValue(key, value, row_index++);
154
155 key = sys_item_name[SITE_URL]; value = ui->SiteURL->text();
156 AddKeyValue(key, value, row_index++);
157 key = sys_item_name[PROJECT_IDENT]; value = ui->ProjectIdent->text();
158 AddKeyValue(key, value, row_index++);
159 key = sys_item_name[MAJOR_VERSION]; value = QString::number(ui->MajorVersion->value());
160 AddKeyValue(key, value, row_index++);
161 key = sys_item_name[MINOR_VERSION]; value = QString::number(ui->MinorVersion->value());
162 AddKeyValue(key, value, row_index++);
163 key = sys_item_name[REVISION]; value = QString::number(ui->Revision->value());
164 AddKeyValue(key, value, row_index++);
165 key = sys_item_name[BRIEF_DESCRIPTION]; value = ui->BriefDescription->text();
166 AddKeyValue(key, value, row_index++);
167 key = sys_item_name[DEV_FAMILY]; value = ui->DevelopmentFamily->currentText();
168 AddKeyValue(key, value, row_index++);
169 key = sys_item_name[LANGUAGE_FAMILY]; value = ui->LanguageFamily->currentText();
170 AddKeyValue(key, value, row_index++);
171 key = sys_item_name[PRIMARY_TOOL]; value = ui->PrimaryTool->currentText();
172 AddKeyValue(key, value, row_index++);
173 key = sys_item_name[SYSTEM_FAMILY]; value = ui->TargetFamily->currentText();
174 AddKeyValue(key, value, row_index++);
175 key = sys_item_name[PROJECT_STATUS]; value = ui->ProjectStatus->currentText();
176 AddKeyValue(key, value, row_index++);
177 key = sys_item_name[PROJECT_HISTORY]; value = ui->FullHistory->toHtml();
178 AddKeyValue(key, value, row_index++);
179 key = sys_item_name[ASSOCIATED_GROUP]; value = ui->InAssociationList->currentText();
180 AddKeyValue(key, value, row_index++);
181 key = sys_item_name[DOCUMENT_LICENCE]; value = ui->DocumentationLicenceList->currentText();
182 AddKeyValue(key, value, row_index++);
183 key = sys_item_name[SOFTWARE_LICENCE]; value = ui->SoftwareLicenceList->currentText();
184 AddKeyValue(key, value, row_index++);
185 key = sys_item_name[HARDWARE_LICENCE]; value = ui->HardwareLicenceList->currentText();
186 AddKeyValue(key, value, row_index++);
187 key = sys_item_name[PROJECT_CONTACT]; value = ui->ProjectContactList->currentText();
188 AddKeyValue(key, value, row_index++);
189 key = sys_item_name[PROJECT_EMAIL]; value = GetProjectEmail(ui->ProjectContactList->currentIndex() + 1);
190 AddKeyValue(key, value, row_index++);
191
192 LoadBasePresets(row_index, ProjectNo);
193 ui->ProjectSubsList->sortItems(0, Qt::AscendingOrder);
194 LogAdd(LOG_DEBUG, MODE_DATABASE, QString("Read %1 Substitution entries from table \"project_substitute\"").arg(QString::number(row_index)));
195}
196
198{
199 QString email_address;
200 QSqlQuery email_query(QString("select developer_email from developer where developer_index = %1").arg(QString::number(Index)));
201 while ( email_query.next() )
202 {
203 email_address = email_query.value(0).toString();
204 }
205 return(email_address);
206}
207
212
213void ProjectSubstitute::LoadBasePresets(int RowIndex, int ProjectNo)
214{
215 int row_index = RowIndex;
216
217 // Load the Substitution Items from the Database
218 QSqlQuery subs_query(QString("select key_word, substitution, lock_entry from project_substitute where project_index = 1 or project_index = %1 order by key_word").arg(QString::number(ProjectNo)));
219 QBrush locked_brush;
220 locked_brush.setColor(Qt::lightGray);
221
222 while ( subs_query.next() )
223 {
224 QString keyword = subs_query.value(0).toString();
225 QString substitution = subs_query.value(1).toString();
226 bool locked = subs_query.value(2).toBool();
227
228 QTableWidgetItem *new_key = new QTableWidgetItem( keyword );
229 new_key->data(locked);
230 QTableWidgetItem *new_value = new QTableWidgetItem( substitution );
231 if (locked)
232 {
233 new_key->setBackground(system_colour);
234 new_value->setBackground(system_colour);
235 new_key->setFlags(new_key->flags() ^ Qt::ItemIsEditable);
236 new_value->setFlags(new_value->flags() ^ Qt::ItemIsEditable);
237 }
238 ui->ProjectSubsList->setItem( row_index, 0, new_key );
239 ui->ProjectSubsList->setItem( row_index, 1, new_value );
240 row_index++;
241 }
242 ui->ProjectSubsList->sortItems(0, Qt::AscendingOrder);
243}
244
245
246void ProjectSubstitute::AddKeyValue(QString Key, QString Value, int RowIndex)
247{
248 QTableWidgetItem *new_key = new QTableWidgetItem( Key );
249 new_key->data(true);
250 QTableWidgetItem *new_value = new QTableWidgetItem( Value );
251 new_key->setBackground(system_colour);
252 new_value->setBackground(system_colour);
253 new_key->setFlags(new_key->flags() ^ Qt::ItemIsEditable);
254 new_value->setFlags(new_value->flags() ^ Qt::ItemIsEditable);
255 ui->ProjectSubsList->setItem( RowIndex, 0, new_key );
256 ui->ProjectSubsList->setItem( RowIndex, 1, new_value );
257}
258
260{
261 ui->ProjectSubsList->clearContents();
262}
263
265{
266 ui->ProjectSubsGroupBox->setEnabled(State);
267 ui->ProjectSubsList->setEnabled(State);
268 ui->ReloadSubstituitions->setEnabled(State);
269 ui->ClearSubstituitions->setEnabled(State);
270 ui->SaveSubstituitions->setEnabled(State);
271
272}
273
275{
276 if (project_info->ProjectDesc.ProjectIndex != 0) LoadSubsTable(project_info->ProjectDesc.ProjectIndex);
277}
278
280{
281 // Turn Off Sorting
282
283
284 // Get the List of Selected Items
285 QModelIndexList selection = ui->ProjectSubsList->selectionModel()->selectedRows();
286
287 // Multiple rows can be selected
288 for(int i=0; i< selection.count(); i++)
289 {
290 QModelIndex index = selection.at(i);
291 QTableWidgetItem* item = ui->ProjectSubsList->item(index.row(), 0);
292 if ((item != 0) && (item->flags() & Qt::ItemIsEditable)) ui->ProjectSubsList->removeRow(index.row());
293 }
294 ui->ProjectSubsList->sortItems(0, Qt::AscendingOrder);
295}
296
297int ProjectSubstitute::DecodeProjectOptions(uint Options, int RowIndex, bool NewProject)
298{
299 if (!NewProject)
300 {
301 QString key = option_name[EXCLUDE_PROJECT_LIST_BIT]; QString value = QVariant(project_opts_manager->CheckExcludeProjectList(Options)).toString();
302 AddKeyValue(key, value, RowIndex++);
303
304 key = option_name[CONTROL_DOC_ACCESS_BIT]; value = QVariant(project_opts_manager->CheckControlDocAccess(Options)).toString();
305 AddKeyValue(key, value, RowIndex++);
306
307 key = option_name[ONLY_DEFAULT_PAGE_BIT]; value = QVariant(project_opts_manager->CheckOnlyDefaultPage(Options)).toString();
308 AddKeyValue(key, value, RowIndex++);
309
310 key = option_name[GROUP_ACCESS_ONLY_BIT]; value = QVariant(project_opts_manager->CheckGroupAccessOnly(Options)).toString();
311 AddKeyValue(key, value, RowIndex++);
312
313 key = option_name[ENABLE_CUSTOM_DOXYGEN_BIT]; value = QVariant(project_opts_manager->CheckEnableCustomDoxygen(Options)).toString();
314 AddKeyValue(key, value, RowIndex++);
315
316 key = option_name[CAVEAT_LECTOR_BIT]; value = QVariant(project_opts_manager->CheckCaveatLector(Options)).toString();
317 AddKeyValue(key, value, RowIndex++);
318
319 key = option_name[POTENTIAL_HAZARD_BIT]; value = QVariant(project_opts_manager->CheckPotentialHazard(Options)).toString();
320 AddKeyValue(key, value, RowIndex++);
321
322 key = option_name[ASSISTANCE_WELCOME_BIT]; value = QVariant(project_opts_manager->CheckAssistanceWelcome(Options)).toString();
323 AddKeyValue(key, value, RowIndex++);
324
325 key = option_name[DONATIONS_WELCOME_BIT]; value = QVariant(project_opts_manager->ChecktDonationsWelcome(Options)).toString();
326 AddKeyValue(key, value, RowIndex++);
327
328 key = option_name[OFFER_PAYPAL_DONATION_BIT]; value = QVariant(project_opts_manager->CheckOfferPaypalDonation(Options)).toString();
329 AddKeyValue(key, value, RowIndex++);
330 }
331 else
332 {
333 QString key = option_name[EXCLUDE_PROJECT_LIST_BIT]; QString value = "false";
334 AddKeyValue(key, value, RowIndex++);
335
336 key = option_name[CONTROL_DOC_ACCESS_BIT]; value = "false";
337 AddKeyValue(key, value, RowIndex++);
338
339 key = option_name[ONLY_DEFAULT_PAGE_BIT]; value = "false";
340 AddKeyValue(key, value, RowIndex++);
341
342 key = option_name[GROUP_ACCESS_ONLY_BIT]; value = "false";
343 AddKeyValue(key, value, RowIndex++);
344
345 key = option_name[ENABLE_CUSTOM_DOXYGEN_BIT]; value = "false";
346 AddKeyValue(key, value, RowIndex++);
347
348 key = option_name[CAVEAT_LECTOR_BIT]; value = "false";
349 AddKeyValue(key, value, RowIndex++);
350
351 key = option_name[POTENTIAL_HAZARD_BIT]; value = "false";
352 AddKeyValue(key, value, RowIndex++);
353
354 key = option_name[ASSISTANCE_WELCOME_BIT]; value = "false";
355 AddKeyValue(key, value, RowIndex++);
356
357 key = option_name[DONATIONS_WELCOME_BIT]; value = "false";
358 AddKeyValue(key, value, RowIndex++);
359
360 key = option_name[OFFER_PAYPAL_DONATION_BIT]; value = "false";
361 AddKeyValue(key, value, RowIndex++);
362
363 }
364 return(RowIndex);
365}
366
367 QTableWidgetItem* ProjectSubstitute::FindItemByKey(QString Key)
368{
369 QTableWidgetItem* found_item = NULL;
370
371 // Find the Item witht the Match Name. There should only be one match as names are unique.
372 QList<QTableWidgetItem*> item_list = ui->ProjectSubsList->findItems(Key, Qt::MatchExactly);
373 if (item_list.count() == 1)
374 {
375 found_item = item_list[0];
376 }
377 else
378 {
379 LogAdd(LOG_DEBUG, MODE_DATABASE, QString("Unknown Key \"%1\" in the Substitute Table").arg(Key));
380 }
381 return(found_item);
382}
383
384
385bool ProjectSubstitute::UpdateItem(QString Key, QString Value)
386{
387 bool result;
388 QTableWidgetItem* item = FindItemByKey(Key);
389 if (item != NULL)
390 {
391 int row = item->row(); // Item's Row
392 int column = 1; // Value Column
393
394 QTableWidgetItem* value_item = ui->ProjectSubsList->item(row, column);
395 value_item->setText(Value);
396 LogAdd(LOG_DEBUG, MODE_GENERAL, QString("Set Key \"%1\" to \"%2\"in the Substitute Table").arg(Key, Value));
397 result = true;
398 }
399 else
400 {
401 LogAdd(LOG_DEBUG, MODE_GENERAL, QString("Unable to set Key \"%1\" to \"%2\"in the Substitute Table").arg(Key, Value));
402 result = false;
403 }
404 return(result);
405}
406
408{
409 UpdateItem("FULL_DESCRIPTION", TheText);
410}
411
413{
414 UpdateItem("MAJOR_VERSION", QString::number(Version.VersionInfo.MajorVersion));
415 UpdateItem("MINOR_VERSION", QString::number(Version.VersionInfo.MinorVersion));
416 UpdateItem("REVISION", QString::number(Version.VersionInfo.Revision));
417}
418
420{
421 UpdateItem("DEV_FAMILY", DevelopmentTypes.DevelopmentFamilyString);
422 UpdateItem("LANGUAGE_FAMILY", DevelopmentTypes.LanguageFamilyString);
423 UpdateItem("PRIMARY_TOOL", DevelopmentTypes.CompilerFamilyString);
424 UpdateItem("SYSTEM_FAMILY", DevelopmentTypes.TargetFamilyString);
425}
426
428{
429 UpdateItem("PROJECT_STATUS", StatusInfo.StatusName);
430 UpdateItem("STATUS_DATE", StatusInfo.StatusDateTimeString);
431}
432
434{
435 bool state = OptionState & ((uint)EXCLUDE_PROJECT_LIST);
436 UpdateItem(option_name[EXCLUDE_PROJECT_LIST_BIT], QVariant(state).toString());
437
438 state = OptionState & ((uint)CONTROL_DOC_ACCESS);
439 UpdateItem(option_name[CONTROL_DOC_ACCESS_BIT], QVariant(state).toString());
440 if (!state)
441 {
444 }
445 else
446 {
447 if (OptionState & (uint)ONLY_DEFAULT_PAGE)
448 {
451 }
452 else
453 {
456 }
457 }
458
459 state = OptionState & ((uint)ENABLE_CUSTOM_DOXYGEN);
460 UpdateItem(option_name[ENABLE_CUSTOM_DOXYGEN_BIT], QVariant(state).toString());
461
462 state = OptionState & ((uint)CAVEAT_LECTOR);
463 UpdateItem(option_name[CAVEAT_LECTOR_BIT], QVariant(state).toString());
464
465 state = OptionState & ((uint)POTENTIAL_HAZARD);
466 UpdateItem(option_name[POTENTIAL_HAZARD_BIT], QVariant(state).toString());
467
468 state = OptionState & ((uint)ASSISTANCE_WELCOME);
469 UpdateItem(option_name[ASSISTANCE_WELCOME_BIT], QVariant(state).toString());
470
471 state = OptionState & ((uint)DONATIONS_WELCOME);
472 UpdateItem(option_name[DONATIONS_WELCOME_BIT], QVariant(state).toString());
473 if (!state)
474 {
476 }
477
478 state = OptionState & ((uint)OFFER_PAYPAL_DONATION);
479 UpdateItem(option_name[OFFER_PAYPAL_DONATION_BIT], QVariant(state).toString());
480}
481
483{
484 // Remove the Project's Deletable Substituitions from the Database
485 uint project_index = project_info->ProjectDesc.ProjectIndex;
486 QString query_string(QString("delete from project_substitute where project_index = %1 and lock_entry = false").arg(QString::number(project_index)));
487 QSqlQuery remove_query;
488 if (!remove_query.exec(query_string))
489 {
490 LogAdd(LOG_ERROR, MODE_DATABASE, "Unable to remove Key-Value pairs.");
491 }
492 else
493 {
494 LogAdd(LOG_DEBUG, MODE_DATABASE, "Removed Project's Key-Value pairs.");
495
496 // Step Through the Substituition Table Widget and put the Projects Deletable Key-Value Pairs into the Database
497 int row_count = ui->ProjectSubsList->rowCount();
498 for (int row = 0; row < row_count; row++)
499 {
500 QTableWidgetItem* key_item = ui->ProjectSubsList->item(row, 0);
501 QTableWidgetItem* value_item = ui->ProjectSubsList->item(row, 1);
502
503 if (key_item != nullptr)
504 {
505 // If the Key-Value Pair isn't Locked, Process It
506 Qt::ItemFlags flags = key_item->flags();
507 Qt::ItemFlags flag_bit = flags & Qt::ItemIsEditable;
508 bool is_locked = !(flag_bit & Qt::ItemIsEditable);
509 if (is_locked)
510 {
511 LogAdd(LOG_DEBUG, MODE_DATABASE, "Key-Value pair Locked");
512 }
513 else
514 {
515 if (SaveKeyValuePair(project_index, key_item->text(), value_item->text(),false))
516 {
517 LogAdd(LOG_DEBUG, MODE_DATABASE, QString("Key-Value pair:") + key_item->text() + " saved to database" );
518 }
519 else
520 {
521 LogAdd(LOG_ERROR, MODE_DATABASE, QString("Key-Value pair:") + key_item->text() + " NOT saved to database" );
522 }
523 }
524 }
525 else
526 {
527 LogAdd(LOG_DEBUG, MODE_DATABASE, QString("No Item in this row %1").arg(QString::number(row)));
528 }
529 }
530 }
531
532 // Reload the Substituitions Table
533 LoadSubsTable(project_index);
534}
535
536bool ProjectSubstitute::SaveKeyValuePair(int ProjectId, QString Key, QString Value, bool Lock)
537{
538 QString insert_string = QString("insert into project_substitute values (null, %1, '%2', '%3', %4)").arg(QString::number(ProjectId), Key, Value, QString::number(Lock));
539 QSqlQuery insert_keyvalue;
540 bool result = insert_keyvalue.exec(insert_string);
541 if (!result)
542 {
543 LogAdd(LOG_ERROR, MODE_DATABASE, QString("Unable to Add Key-Value Pair \"%1 - %2\" to project Id %3").arg(Key, Value, QString::number(ProjectId)));
544 }
545 else
546 {
547 LogAdd(LOG_DEBUG, MODE_DATABASE, QString("Added Key-Value Pair \"%1 - %2\" to project Id %3").arg(Key, Value, QString::number(ProjectId)));
548 }
549
550 return(result);
551}
552
553void ProjectSubstitute::SetEditableState(QTableWidgetItem* Item)
554{
555 Item->setFlags(Item->flags() | Qt::ItemIsEditable);
556}
557
559{
561}
562
564{
566}
567
569{
571}
572
574{
575 UpdateItem(sys_item_name[MAJOR_VERSION], QString::number(MajorVersion));
576}
577
579{
580 UpdateItem(sys_item_name[MINOR_VERSION], QString::number(MinorVersion));
581}
582
584{
585 UpdateItem(sys_item_name[REVISION], QString::number(Revision));
586}
587
592
597
602
604{
606}
607
609{
611}
612
613void ProjectSubstitute::UpdateProjectDateTime(QString ProjectDateTimeString)
614{
615 UpdateItem(sys_item_name[STATUS_DATE], ProjectDateTimeString);
616}
617
618void ProjectSubstitute::UpdateDoxyProjectLogo(QString DoxyProjectLogo)
619{
620 UpdateItem(sys_item_name[DOXY_LOGO], DoxyProjectLogo);
621}
622
624{
626}
627
629{
631}
632
633void ProjectSubstitute::UpdateDoxyStylesheet(QString DoxyStylesheet)
634{
636}
637
639{
641}
642
644{
645 // Clear the Project Substitution Map
646 Project->SubsMap.clear();
647
648 // Load the System Defined Substitutions
649 QString web_directory = Project->ProgramInformation.PrimaryWebsiteDirectory + "/projects/" + Project->ProjectDesc.ProjectIdent;
650
651 // Convenient display of Lead-In and Lead-Out without it invokes the substitution process.
652 Project->SubsMap.insert("[#LEAD_IN#]", "'@htmlonly &lsqb;&num; @endhtmlonly'");
653 Project->SubsMap.insert("[#LEAD_OUT#]", "'@htmlonly &num;&rsqb; @endhtmlonly'");
654
655 Project->SubsMap.insert("[#PROJECT_NAME#]", Project->ProjectDesc.ProjectName);
656 Project->SubsMap.insert("[#PROJECT_IDENT#]", Project->ProjectDesc.ProjectIdent);
657 Project->SubsMap. insert("[#PROJECT_DIRECTORY#]", Project->ProjectDesc.ProjectDirectory);
658 Project->SubsMap.insert("[#BRIEF_DESC#]", Project->ProjectDesc.BriefDescription);
659 Project->SubsMap.insert("[#FULL_DESC#]", Project->ProjectDesc.FullDescription);
660 Project->SubsMap.insert("[#VERSION#]", Project->VersionInfo.VersionString);
661 Project->SubsMap.insert("[#VERSION_TEXT#]", Project->VersionInfo.CurrentVersionString);
662 Project->SubsMap.insert("[#VERSION_HISTORY#]", Project->VersionInfo.FullVersionString);
663 Project->SubsMap.insert("[#VERSION_DATE#]", Project->VersionInfo.VersionDateString);
664 Project->SubsMap.insert("[#DEV_SHORT_NAME#]", Project->DevFamilyInfo.ShortName);
665 Project->SubsMap.insert("[#DEV_FULL_NAME#]", Project->DevFamilyInfo.FullName);
666 Project->SubsMap.insert("[#DEV_IMAGE#]", Project->DevFamilyInfo.DevFamilyImage);
667 Project->SubsMap.insert("[#COMPILER_SHORT_NAME#]", Project->LangFamilyInfo.ShortName);
668 Project->SubsMap.insert("[#COMPILER_FULL_NAME#]", Project->LangFamilyInfo.FullName);
669 Project->SubsMap.insert("[#COMPILER_IMAGE#]", Project->LangFamilyInfo.LangFamilyImage);
670 Project->SubsMap.insert("[#TOOL_SHORT_NAME#]", Project->CompFamilyInfo.ShortName);
671 Project->SubsMap.insert("[#TOOL_FULL_NAME#]", Project->CompFamilyInfo.FullName);
672 Project->SubsMap.insert("[#TOOL_IMAGE#]", Project->CompFamilyInfo.CompilerToolImage);
673 Project->SubsMap.insert("[#TOOL_DIRECTORY#]", Project->CompFamilyInfo.CompilerDirectory);
674 Project->SubsMap.insert("[#TARGET_SHORT_NAME#]", Project->TargetFamilyInfo.ShortName);
675 Project->SubsMap.insert("[#TARGET_FULL_NAME#]", Project->TargetFamilyInfo.FullName);
676 Project->SubsMap.insert("[#TARGET_IMAGE#]", Project->TargetFamilyInfo.TargetFamilyImage);
677 Project->SubsMap.insert("[#STATUS_NAME#]", Project->StatusInfo.StatusName);
678 Project->SubsMap.insert("[#STATUS_DESC#]", Project->StatusInfo.StatusDescription);
679 Project->SubsMap.insert("[#STATUS_IMAGE#]", Project->StatusInfo.StatusImage);
680 Project->SubsMap.insert("[#STATUS_DATE#]", Project->StatusInfo.StatusDateTimeString);
681 Project->SubsMap.insert("[#DL_SHORT_NAME#]", Project->DocLicence.ShortName);
682 Project->SubsMap.insert("[#DL_FULL_NAME#]", Project->DocLicence.FullName);
683 Project->SubsMap.insert("[#DL_IMAGE#]", Project->DocLicence.LicenceImage);
684 Project->SubsMap.insert("[#DL_URL#]", Project->DocLicence.LicenceURL);
685 Project->SubsMap.insert("[#SL_SHORT_NAME#]", Project->SoftwareLicence.ShortName);
686 Project->SubsMap.insert("[#SL_FULL_NAME#]", Project->SoftwareLicence.FullName);
687 Project->SubsMap.insert("[#SL_IMAGE#]", Project->SoftwareLicence.LicenceImage);
688 Project->SubsMap.insert("[#SL_URL#]", Project->SoftwareLicence.LicenceURL);
689 Project->SubsMap.insert("[#HL_SHORT_NAME#]", Project->HardwareLicence.ShortName);
690 Project->SubsMap.insert("[#HL_FULL_NAME#]", Project->HardwareLicence.FullName);
691 Project->SubsMap.insert("[#HL_IMAGE#]", Project->HardwareLicence.LicenceImage);
692 Project->SubsMap.insert("[#HL_URL#]", Project->HardwareLicence.LicenceURL);
693 Project->SubsMap.insert("[#DEVELOPER_NAME#]", Project->Developer.Name);
694 Project->SubsMap.insert("[#DEVELOPER_EMAIL#]", Project->Developer.Email);
695 Project->SubsMap.insert("[#DEVELOPER_PHONE#]", Project->Developer.Phone);
696 Project->SubsMap.insert("[#DEVELOPER_INFO#]", Project->Developer.Info);
697 Project->SubsMap.insert("[#DEVELOPER_HANDLE#]", Project->Developer.Handle);
698 Project->SubsMap.insert("[#PROJECT_ICON#]", Project->ProjectDesc.ProjectIcon);
699 Project->SubsMap.insert("[#SITE_NAME#]", Project->ProgramInformation.SiteName);
700 Project->SubsMap.insert("[#SITE_URL#]", Project->ProgramInformation.SiteURL);
701 Project->SubsMap.insert("[#SITE_LOGO#]", Project->ProgramInformation.SiteLogo);
702 Project->SubsMap.insert("[#DEPARTURE_URL#]", Project->ProjectDesc.DepartureURL);
703 Project->SubsMap.insert("[#EXE_BUILD_DIR#]", Project->ProjectDesc.ExeDirectory);
704 Project->SubsMap.insert("[#EXE_NAME#]", Project->ProjectDesc.ExeName);
705 Project->SubsMap.insert("[#WEBSITE_DIR#]", Project->ProgramInformation.PrimaryWebsiteDirectory);
706 Project->SubsMap.insert("[#TEMPLATE_DIR#]", Project->ProgramInformation.SharedTemplateDirectory);
707 Project->SubsMap.insert("[#LOCAL_DEV_DIR#]", Project->ProgramInformation.LocalDevelopmentDirectory);
708 Project->SubsMap.insert("[#DOXY_LOGO#]", Project->DoxyOptions.DoxyLogoFilename);
709 Project->SubsMap.insert("[#DOXY_HEADER#]", Project->DoxyOptions.DoxyHtmlHeaderFilename);
710 Project->SubsMap.insert("[#DOXY_FOOTER#]", Project->DoxyOptions.DoxyHtmlFooterFilename);
711 Project->SubsMap.insert("[#DOXY_STYLESHEET#]", Project->DoxyOptions.DoxyExtraStylesheetFilename);
712 Project->SubsMap.insert("[#ASSOC_SHORT_NAME#]", Project->InAssocInfo.ShortName);
713 Project->SubsMap.insert("[#ASSOC_FULL_NAME#]", Project->InAssocInfo.FullName);
714 Project->SubsMap.insert("[#ASSOC_LOGO#]", Project->InAssocInfo.AssociationLogo);
715 Project->SubsMap.insert("[#ASSOC_URL#]", Project->InAssocInfo.AssociationURL);
716 Project->SubsMap.insert("[#EXCLUDE_FROM_LIST#]", QVariant(project_opts_manager->CheckExcludeProjectList(Project->ProjectDesc.ProjectOptions)).toString());
717 Project->SubsMap.insert("[#CONTROL_DOC_ACCESS#]", QVariant(project_opts_manager->CheckControlDocAccess(Project->ProjectDesc.ProjectOptions)).toString());
718 Project->SubsMap.insert("[#ONLY_DEFAULT_PAGE#]", QVariant(project_opts_manager->CheckOnlyDefaultPage(Project->ProjectDesc.ProjectOptions)).toString());
719 Project->SubsMap.insert("[#GROUP_ACCESS_ONLY#]", QVariant(project_opts_manager->CheckGroupAccessOnly(Project->ProjectDesc.ProjectOptions)).toString());
720 Project->SubsMap.insert("[#ENABLE_CUSTOM_DOXY#]", QVariant(project_opts_manager->CheckEnableCustomDoxygen(Project->ProjectDesc.ProjectOptions)).toString());
721 Project->SubsMap.insert("[#CAVEAT_LECTOR#]", QVariant(project_opts_manager->CheckCaveatLector(Project->ProjectDesc.ProjectOptions)).toString());
722 Project->SubsMap.insert("[#POTENTIAL_HAZARD#]", QVariant(project_opts_manager->CheckPotentialHazard(Project->ProjectDesc.ProjectOptions)).toString());
723 Project->SubsMap.insert("[#ASSISTANCE_WELCOME#]", QVariant(project_opts_manager->CheckAssistanceWelcome(Project->ProjectDesc.ProjectOptions)).toString());
724 Project->SubsMap.insert("[#DONATIONS_WELCOME#]", QVariant(project_opts_manager->ChecktDonationsWelcome(Project->ProjectDesc.ProjectOptions)).toString());
725 Project->SubsMap.insert("[#OFFER_PAYPAL_DONATION#]", QVariant(project_opts_manager->CheckOfferPaypalDonation(Project->ProjectDesc.ProjectOptions)).toString());
726 Project->SubsMap.insert("[#DOCUMENTATION_ADDRESS#]", Project->ProgramInformation.SiteURL + "/projects/" + Project->ProjectDesc.ProjectIdent);
727 Project->SubsMap.insert("[#CODE_DIR#]", Project->ProjectDesc.ProjectDirectory + "/source/" + Project->ProjectDesc.ExeName);
728 Project->SubsMap.insert("[#WEB_DIR#]", web_directory);
729 Project->SubsMap.insert("[#DIA_PATH#]", Project->ProjectDesc.ProjectDirectory + "/dia");
730 Project->SubsMap.insert("[#DOXY_LOG_FILE#]", Project->ProjectDesc.ProjectDirectory + "/scratch/" + DOXY_LOG_FILE);
731 Project->SubsMap.insert("[#DOXY_RESULTS#]", Project->ProgramInformation.SiteURL + "/project_dynamic/" + Project->ProjectDesc.ProjectIdent + "/html/" + DOXY_LOG_FILE);
732 Project->SubsMap.insert("[#CPPCHECK_RESULTS#]", Project->ProgramInformation.SiteURL + "/project_dynamic/" + Project->ProjectDesc.ProjectIdent + "/html/" + CPP_CHECK_FILE);
733 Project->SubsMap.insert("[#DOXY_IMAGE_PATH#]", web_directory + "/images");
734 Project->SubsMap.insert("[#DOT_IMAGE_FORMAT#]", ui->DotImageType->currentText());
735 if (ui->DotImageType->currentText() == "SVG") Project->SubsMap.insert("[#INTERACTIVE_SVG#]", "YES");
736 Project->SubsMap.insert("[#DOXY_TAB_SIZE#]", QString::number(ui->DoxyTabSize->value()));
737 Project->SubsMap.insert("[#DOXY_FILTERS#]", Project->ProgramInformation.SharedTemplateDirectory + "/support_template/doxygen_filters");
738 Project->SubsMap.insert("[#PUBLISHER_NAME#]", Project->ProgramInformation.PublisherName);
739 Project->SubsMap.insert("[#PUBLISHER_WEBSITE#]", Project->ProgramInformation.PublisherWebsite);
740 Project->SubsMap.insert("[#PUBLISHER_CONTACT#]", Project->ProgramInformation.PublisherContactEmail);
741 Project->SubsMap.insert("[#WEBDIR_PROJECT_HTML", Project->ProgramInformation.PrimaryWebsiteDirectory + "/html");
742 Project->SubsMap.insert("[#WEBDIR_PROJECT_IMAGES", Project->ProgramInformation.PrimaryWebsiteDirectory + "/images");
743 Project->SubsMap.insert("[#WEBDIR_PROJECT_DOCS", Project->ProgramInformation.PrimaryWebsiteDirectory + "/docs");
744 Project->SubsMap.insert("[#WEBSITE_PROJECT_HTML",Project->ProgramInformation.SiteURL + "/project_dynamic/" + Project->ProjectDesc.ProjectIdent + "/html");
745 Project->SubsMap.insert("[#WEBSITE_PROJECT_IMAGES", Project->ProgramInformation.SiteURL + "/project_dynamic/" + Project->ProjectDesc.ProjectIdent + "/images");
746 Project->SubsMap.insert("[#WEBSITE_PROJECT_DOCS", Project->ProgramInformation.SiteURL + "/project_dynamic/" + Project->ProjectDesc.ProjectIdent + "/docs");
747 Project->SubsMap.insert("[#LOCAL_DESKTOP#]", "/home/" + Project->ProgramInformation.CurrentUser + "/.local/share/applications/" + Project->ProjectDesc.ExeName + ".desktop");
748
750 {
751 QString archive_web_location = Project->ProgramInformation.SiteURL + "/project_dynamic/" +
752 Project->ProjectDesc.ProjectIdent + "/archive/" + Project->ProjectDesc.ExeName + ".tar.gz";
753 Project->SubsMap.insert("[#ARCHIVE_FILENAME#]", archive_web_location);
754 }
755
756 // Add Doxygen Optimisation for appropriate languages
757 QString key; QString value; bool key_set = false;
758 switch(Project->LangFamilyInfo.LangFamilyIndex)
759 {
760 case 5: // C++
761 key = "[#OPTIMIZE_C#]"; value = "YES"; key_set = true;
762 break;
763
764 case 16: // Java
765 key = "[#OPTIMIZE_JAVA#]"; value = "YES"; key_set = true;
766 break;
767
768 case 17: // Fortran
769 key = "[#OPTIMIZE_FORTRAN#]"; value = "YES"; key_set = true;
770 break;
771
772 case 18: // VDHL
773 key = "[#OPTIMIZE_FORTRAN#]"; value = "YES"; key_set = true;
774 break;
775
776 default:
777 key_set = false;
778 break;
779 }
780 if (key_set) Project->SubsMap.insert(key, value);
781
782
783 // Create Copyright Statement
784 QString created_query_template = "select version_timestamp from proj_version_info where project_id = %1 and major_version = 0 and minor_version = 0 and revision = 0";
785 QSqlQuery created_query(QString(created_query_template).arg(QString::number(Project->ProjectDesc.ProjectIndex)));
786
787 QString creation_year = "";
788 while ( created_query.next() )
789 {
790 QDateTime created_datetime = created_query.value(0).toDateTime();
791 creation_year = created_datetime.toString("yyyy");
792 }
793 QString current_year = QDateTime::currentDateTime().toString("yyyy");
794 QString copyright_year = creation_year + "-" + current_year;
795 QString copyright_template = "Copyright © %1 by %2";
796 QString copyright_statement = copyright_template.arg(copyright_year, Project->ProgramInformation.PublisherName);
797 Project->SubsMap.insert("[#COPYRIGHT_STATEMENT#]", copyright_statement);
798
799 // Create the
800 // Include the User Defined Substitutions
801 LoadUserSubstitutes(Project);
802}
803
805{
806 // Define Substitution Variables
807 QString key_string; QString value_string;
808
809 // Load the Substitution Items from the Database
810 QString user_subs_query = "select key_word, substitution, lock_entry from project_substitute where project_index = 1 or project_index = %1 order by key_word";
811 QSqlQuery subs_query(QString(user_subs_query).arg(QString::number(Project->ProjectDesc.ProjectIndex)));
812
813 while ( subs_query.next() )
814 {
815 key_string = leadin_string + subs_query.value(0).toString() + leadout_string;
816 value_string = subs_query.value(1).toString();
817 Project->SubsMap.insert(key_string, value_string);
818 }
819}
bool UpdateItem(QString Key, QString Value)
Update the Value of an Entry in the Substitution List.
void ReadProjectId(PROJECT_INFORMATION *ProjectInfo)
Load the Substitution Table for th Project.
void ReadMinorVersion(int MinorVersion)
Update the Minor Version in the Substitute Table.
QTableWidgetItem * FindItemByKey(QString Key)
Find a Substitution Entry in the Substitution List by Name.
ProjectSubstitute(Ui::MainWindow *UI_Window, ProjectOptionsManager *ProjectOptsManager)
LicenceManager Construction routine.
void ReadRevision(int Revision)
Update the Revision in the Substitute Table.
void UpdateDevFamily(DEVELOPMENT_FAMILY DevelopmentTypes)
Update the Dev Families Information in the Substitute Table.
void SaveLocalSubstitutes(void)
Save the Local Substitutes to the Database.
int DecodeProjectOptions(uint Options, int RowIndex, bool NewProject)
Add Key-Value items for all Project Options.
void UpdateProjectIcon(QString Name)
void UpdateDoxyFooter(QString DoxyFooter)
Update Doxygen's Footer Filename in Substitute Table.
void LoadBasePresets(int RowIndex, int ProjectNo)
void UpdateInAssocation(QString Association)
ProjectOptionsManager * project_opts_manager
Pointer the Project Options Manager Class.
void LoadFileSubsList(PROJECT_INFORMATION *Project)
Load the Substitution table from the Project Information.
void UpdateProjectContact(QString ContactName)
void UpdateVersion(REMOTE_VERSION_ENTRY Version)
Update the Version Information in the Substitute Table.
void SetEditableState(QTableWidgetItem *Item)
void AddKeyValue(QString Key, QString Value, int RowIndex)
Add a New Key-Value pair to the Substitution List.
void SendLogEntry(REMOTE_LOG_ENTRY LogEntry)
void UpdateDoxyHeader(QString DoxyHeader)
Update Doxygen's Header Filename in Substitute Table.
void SetOptionState(uint Options)
void DoClear(void)
Clear the Substitution lists and display.
QStringList sys_item_name
List of System Names for Subtitution process.
void UpdateProjectBrief(QString Text)
Update Project Brief in Substitute Table.
void LoadUserSubstitutes(PROJECT_INFORMATION *Project)
void LoadSubsTable(int ProjectNo)
QString GetProjectEmail(int Index)
void UpdateDocumentationLicence(QString LicenceName)
Update the Documentation Licence Information in the Substitute Table.
void LoadPresets(void)
Load the Substitution Table.
void ReadMajorVersion(int MajorVersion)
Update the Major Version in the Substitute Table.
void ReloadSubstituteTable(void)
Reload the Substituition Table & Display.
bool SaveKeyValuePair(int ProjectId, QString Key, QString Value, bool Lock)
void SetSubstituteState(bool State)
void LogAdd(LOGGING_SEVERITY Severity, LOGGING_MODE Mode, QString Message)
Add a Log Entry.
Ui::MainWindow * ui
Pointer to the Main Window.
PROJECT_INFORMATION * project_info
Structure to hold Project Information.
void UpdateProjectName(QString Name)
Update Project Name in Substitute Table.
void UpdateDoxyProjectLogo(QString DoxyProjectLogo)
Update Doxygen's Project Logo Filename in Substitute Table.
void UpdateHardwareLicence(QString LicenceName)
Update the Hardware Licence Information in the Substitute Table.
QString leadin_string
Lead in Characters for substitution blocks.
QStringList option_name
List of Option Names for Subtitution process.
void UpdateDepartureURL(QString Name)
Update Exit URL in Substitute Table.
void UpdateSoftwareLicence(QString LicenceName)
Update the Software Licence Information in the Substitute Table.
void UpdateProjectDateTime(QString ProjectDateTime)
Update Project's DateTime in Substitute Table.
void UpdateStatus(STATUS_INFO StatusInfo)
Update the Deve Families Information in the Substitute Table.
QColor system_colour
table Background Colour
QString leadout_string
Lead out Characters for substitution blocks.
void UpdateFullDescription(QString FullDescription)
Update the Full Description in the Substitute Table.
void UpdateDoxyStylesheet(QString DoxyStylesheet)
Update Doxygen's Stylesheet Filename in Substitute Table.
void ClearSubstituteEntry(void)
Clear the Select Substitution Row & data.
#define DOXY_LOG_FILE
The name of the Doxygen Log File.
@ DONATIONS_WELCOME_BIT
@ ONLY_DEFAULT_PAGE_BIT
@ CONTROL_DOC_ACCESS_BIT
@ GROUP_ACCESS_ONLY_BIT
@ POTENTIAL_HAZARD_BIT
@ ASSISTANCE_WELCOME_BIT
@ CAVEAT_LECTOR_BIT
@ ENABLE_CUSTOM_DOXYGEN_BIT
@ OFFER_PAYPAL_DONATION_BIT
@ EXCLUDE_PROJECT_LIST_BIT
#define ENABLE_CUSTOM_DOXYGEN
Enable Custom Doxygen Definitions Mask.
#define CAVEAT_LECTOR
Display User Warning Mask.
#define DATETIME_DISPLAY_FORMAT
DateTime formatting for the program displays.
#define EXCLUDE_PROJECT_LIST
Exclude Project from Public List Mask.
#define CPP_CHECK_FILE
#define DONATIONS_WELCOME
Display Donations Welcome Mask.
#define OFFER_PAYPAL_DONATION
Display Paypal Available Mask.
#define CONTROL_DOC_ACCESS
Control Document Access to Public Mask.
#define POTENTIAL_HAZARD
Display Potential Harzard Mask.
#define ASSISTANCE_WELCOME
Display Assistance Welcome Mask.
#define ONLY_DEFAULT_PAGE
Only Display Default Page to Public Mask.
#define CREATE_SOURCE_ARCHIVE
Create a SOurce Archive when Documentation Generated.
LOGGING_SEVERITY
Log Severity allow the selection of logging events based on Severity.
Definition logger.h:48
@ LOG_ERROR
Definition logger.h:52
@ LOG_DEBUG
Definition logger.h:56
LOGGING_MODE
Log Severity allow the selection of logging events based on the mode.
Definition logger.h:21
@ MODE_DATABASE
Definition logger.h:35
@ MODE_GENERAL
Definition logger.h:24
Class Controlling Text Substitution.
@ PROJECT_EMAIL
@ DOCUMENT_LICENCE
@ PRIMARY_TOOL
@ MAJOR_VERSION
@ PROJECT_IDENT
@ LANGUAGE_FAMILY
@ SOFTWARE_LICENCE
@ ASSOCIATED_GROUP
@ EXECUTABLE_DIR
@ PROJECT_CONTACT
@ MINOR_VERSION
@ DEV_FAMILY
@ PROJECT_STATUS
@ PROJECT_HISTORY
@ PROJECT_DIRECTORY
@ SITE_URL
@ REVISION
@ DOXY_LOGO
@ DOXY_HTML_FOOTER
@ BRIEF_DESCRIPTION
@ DOXY_HTML_HEADER
@ SYSTEM_FAMILY
@ PROJECT_NAME
@ HARDWARE_LICENCE
@ STATUS_DATE
@ PROJECT_ICON
@ DOXY_EXTRA_STYLESHEET
@ DEPARTURE_URL
@ FULL_DESCRIPTION
#define MAXIMUM_KEY_VALUE_PAIRS
Define the Maximum number of Key-Value pairs to Display.
#define PROJECT_KEY_COLUMN_WIDTH
Define the Key's Column Width in the display.
Summary of Project Types.
QString DoxyExtraStylesheetFilename
QString DoxyHtmlHeaderFilename
QString DoxyHtmlFooterFilename
Project Information Passed Between Functions.
PROGRAM_INFORMATION ProgramInformation
TARGET_FAMILY_INFO TargetFamilyInfo
DEV_FAMILY_INFO DevFamilyInfo
PROJECT_DESCRIPTION ProjectDesc
COMP_FAMILY_INFO CompFamilyInfo
LANG_FAMILY_INFO LangFamilyInfo
ASSOCIATED_GROUP_INFO InAssocInfo
QMap< QString, QString > SubsMap
Definition logger.h:60
LOGGING_MODE Mode
Definition logger.h:61
QString Message
Definition logger.h:63
LOGGING_SEVERITY Severity
Definition logger.h:62
Version Structure used between functions.
VERSION_INFO VersionInfo
Information about the Development Status.
QString StatusDescription
QString StatusDateTimeString
QString CurrentVersionString