Project Documentation Manager BRIGADOON-0002
Project Documentation Manager
Loading...
Searching...
No Matches
projectlistmanager.cpp
Go to the documentation of this file.
3#include "doxygenmanager.h"
4#include "readprojectinfo.h"
5#include "projectsubstitute.h"
6#include "logger.h"
7
8#include <QHBoxLayout>
9
14
16{
17 ProjectList.clear();
18 ui = UI_Window;
19 QObject::connect(ui->AutoInstallOff, SIGNAL(pressed()), this, SLOT(PressedInstallOff()));
20 QObject::connect(ui->AutoInstallOn, SIGNAL(pressed()), this, SLOT(PressedInstallOn()));
21
22 QObject::connect(ui->AutoArchiveOff, SIGNAL(pressed()), this, SLOT(PressedArchiveOff()));
23 QObject::connect(ui->AutoArchiveOn, SIGNAL(pressed()), this, SLOT(PressedArchiveOn()));
24
25 QObject::connect (ui->AutoPublishOff, SIGNAL (pressed ()), this,
26 SLOT (PressedPublishOff ()));
27
28 QObject::connect (ui->AutoPublishOn, SIGNAL (pressed ()), this,
29 SLOT (PressedPublishOn ()));
30
31 base_project_query = QString (
32 "select project_index from project where project_index != 1");
33
34 ui->ProjectTableWidget->setColumnCount( TABLE_COLUMN_COUNT );
36
37 ui->ProjectTableWidget->setHorizontalHeaderLabels( QStringList( {"Proj. Ident", "Proj. Name", "Target", "Status", "Proj. Contact", "Brief Desc.", "Dev. Family", "Comp. Lang.", "Assoc Group",
38 "S/W Licence", "H/W Licence", "Doc Licence", "Inst", "Arch", "Publish"} ));
39
40 ui->ProjectTableWidget->setColumnWidth( PROJECT_IDENT_COLUMN, PROJECT_IDENT_SIZE );
41 ui->ProjectTableWidget->setColumnWidth( PROJECT_NAME_COLUMN, PROJECT_NAME_SIZE );
42 ui->ProjectTableWidget->setColumnWidth( TARGET_FAMILY_COLUMN, TARGET_FAMILY_SIZE );
43 ui->ProjectTableWidget->setColumnWidth( PROJECT_CONTACT_COLUMN, PROJECT_CONTACT_SIZE );
44 ui->ProjectTableWidget->setColumnWidth( PROJECT_STATUS_COLUMN, PROJECT_STATUS_SIZE);
45 ui->ProjectTableWidget->setColumnWidth( BRIEF_DESC_COLUMN, BRIEF_DESC_SIZE );
46 ui->ProjectTableWidget->setColumnWidth( DEV_FAMILY_COLUMN, DEV_FAMILY_SIZE );
47 ui->ProjectTableWidget->setColumnWidth( COMPILER_FAMILY_COLUMN, COMPILER_FAMILY_SIZE );
48 ui->ProjectTableWidget->setColumnWidth( ASSOCIATION_COLUMN, ASSOCIATION_SIZE );
49 ui->ProjectTableWidget->setColumnWidth( SOFTWARE_LICENCE_COLUMN, SOFTWARE_LICENCE_SIZE );
50 ui->ProjectTableWidget->setColumnWidth( HARDWARE_LICENCE_COLUMN, HARDWARE_LICENCE_SIZE );
51 ui->ProjectTableWidget->setColumnWidth( DOC_LICENCE_COLUMN, DOC_LICENCE_SIZE );
52 ui->ProjectTableWidget->setColumnWidth( ARCHIVE_BUTTON_COLUMN, ARCHIVE_BUTTON_SIZE );
53 ui->ProjectTableWidget->setColumnWidth( INSTALL_BUTTON_COLUMN, INSTALL_BUTTON_SIZE );
54 ui->ProjectTableWidget->setColumnWidth( PUBLISH_BUTTON_COLUMN, PUBLISH_BUTTON_SIZE );
55}
56
57
62
63
65{
66 switch( Index )
67 {
69 break;
70
74 break;
75
77 break;
78
79 case LOG_TAB:
80 break;
81
82 case LICENCE_ACK_TAB:
83 break;
84 }
85}
86
87void
89{
90 QString list_table_string;
91
92 list_table_string = MakeHTMLProjectPage (
93 ui->ProjectListHeaderFile->text (), ui->ProjectListFooterFile->text (),
94 ui->ProjectListLineFile->text (), true);
95 WriteTextFile (ui->PrimaryWebsiteDirectory->text () + "/projects/"
96 + ui->ProjectListWebTableFile->text (),
97 list_table_string);
98 list_table_string = MakeOSProjectPage ();
99 WriteTextFile (ui->PrimaryWebsiteDirectory->text () + "/projects/"
100 + ui->ProjectOSListName->text (),
101 list_table_string);
102}
103
108
110{
111 ProjectList.clear();
113 QString sort_type;
114 sort_type = QString(" order by project_ident desc");
115 QString query_string = base_project_query + sort_type;
116
117 // Clear the Table Widget before Starting to Add Projects
118 ui->ProjectTableWidget->clearContents();
119 ui->ProjectTableWidget->setEnabled(true);
120
121 // Search for the Project List
122 QSqlQuery project_query(query_string);
123
124 int row = 0;
125 while( project_query.next())
126 {
127 PROJECT_INFORMATION* project_file_info = new PROJECT_INFORMATION;
128
129 // Load all of the Data about this Project
130 read_project_info->LoadProjectInfo(project_file_info, project_query.value(0).toInt(), ui->ProjectPrefix->currentIndex() + 1);
131 project_subs_manager->LoadFileSubsList(project_file_info);
132 ProjectList.append(project_file_info);
133
134 // Make A Table Widget for the Project Identifier and Insert
135 QTableWidgetItem *new_project_ident = new QTableWidgetItem(project_file_info->ProjectDesc.ProjectIdent);
136 new_project_ident->setFlags(new_project_ident->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
137 ui->ProjectTableWidget->setItem( row, PROJECT_IDENT_COLUMN, new_project_ident );
138 PrStateChange (project_file_info);
139
140 // Make A Table Widget for the Project Name and Insert
141 QTableWidgetItem *new_project_name = new QTableWidgetItem(project_file_info->ProjectDesc.ProjectName);
142 new_project_name->setFlags(new_project_name->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
143 ui->ProjectTableWidget->setItem( row, PROJECT_NAME_COLUMN, new_project_name );
144
145 // Make A Table Widget for the Target System and Insert
146 QTableWidgetItem *new_target_system = new QTableWidgetItem(project_file_info->TargetFamilyInfo.ShortName);
147 new_target_system->setFlags(new_target_system->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
148 ui->ProjectTableWidget->setItem( row, TARGET_FAMILY_COLUMN, new_target_system );
149
150 // Get the DEveloper Name, Create Table Widget and Insert in Table
151 QTableWidgetItem *new_project_contact = new QTableWidgetItem(project_file_info->Developer.Name);
152 new_project_contact->setFlags(new_project_contact->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
153 ui->ProjectTableWidget->setItem( row, PROJECT_CONTACT_COLUMN, new_project_contact );
154
155 // Get the Project Status Name, Create Table Widget and Insert in Table
156 QTableWidgetItem *new_project_status = new QTableWidgetItem(project_file_info->StatusInfo.StatusName);
157 new_project_status->setFlags(new_project_status->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
158 ui->ProjectTableWidget->setItem( row, PROJECT_STATUS_COLUMN, new_project_status );
159
160 // Get the Brief Description, Create Table Widget and Insert in Table
161 QTableWidgetItem *new_brief_desc = new QTableWidgetItem(project_file_info->ProjectDesc.BriefDescription);
162 new_brief_desc->setFlags(new_project_ident->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
163 ui->ProjectTableWidget->setItem( row, BRIEF_DESC_COLUMN, new_brief_desc );
164
165 // Get the Development Family, Create Table Widget and Insert in Table
166 QTableWidgetItem *new_dev_family = new QTableWidgetItem(project_file_info->DevFamilyInfo.ShortName);
167 new_dev_family->setFlags(new_dev_family->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
168 ui->ProjectTableWidget->setItem( row, DEV_FAMILY_COLUMN, new_dev_family );
169
170 // Get the Compiler Family, Create Table Widget and Insert in Table
171 QTableWidgetItem *new_comp_family = new QTableWidgetItem(project_file_info->LangFamilyInfo.ShortName);
172 new_comp_family->setFlags(new_comp_family->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
173 ui->ProjectTableWidget->setItem( row, COMPILER_FAMILY_COLUMN, new_comp_family );
174
175 // Get the Association Family, Create Table Widget and Insert in Table
176 QTableWidgetItem *new_assoc_family = new QTableWidgetItem(project_file_info->InAssocInfo.ShortName);
177 new_assoc_family->setFlags(new_assoc_family->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
178 ui->ProjectTableWidget->setItem( row, ASSOCIATION_COLUMN, new_assoc_family );
179
180 // Get the Software Licence, Create Table Widget and Insert in Table
181 QTableWidgetItem *new_software_licence = new QTableWidgetItem(project_file_info->SoftwareLicence.ShortName);
182 new_software_licence->setFlags(new_software_licence->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
183 ui->ProjectTableWidget->setItem( row, SOFTWARE_LICENCE_COLUMN, new_software_licence );
184
185 // Get the Software Licence, Create Table Widget and Insert in Table
186 QTableWidgetItem *new_hardware_licence = new QTableWidgetItem(project_file_info->HardwareLicence.ShortName);
187 new_hardware_licence->setFlags(new_hardware_licence->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
188 ui->ProjectTableWidget->setItem( row, HARDWARE_LICENCE_COLUMN, new_hardware_licence );
189
190 // Get the Documentation Licence, Create Table Widget and Insert in Table
191 QTableWidgetItem *new_doc_licence = new QTableWidgetItem(project_file_info->DocLicence.ShortName);
192 new_doc_licence->setFlags(new_doc_licence->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
193 ui->ProjectTableWidget->setItem( row, DOC_LICENCE_COLUMN, new_doc_licence );
194 QWidget *check_box_widget1 = new QWidget();
195 QCheckBox *install_button = new QCheckBox();
196 install_button->setText("");
197 install_button->setChecked((project_file_info->ProjectDesc.ProjectOptions & ALLOW_AUTOMATIC_INSTALL));
198 install_button->setCheckable((project_file_info->ProjectDesc.ProjectOptions & ALLOW_AUTOMATIC_INSTALL));
199 QHBoxLayout *layout_check_box1 = new QHBoxLayout( check_box_widget1 );
200 layout_check_box1->addWidget(install_button); //add QCheckBox to layout
201 layout_check_box1->setAlignment(Qt::AlignCenter); //set Alignment layout
202 layout_check_box1->setContentsMargins(0,0,0,0);
203 ui->ProjectTableWidget->setCellWidget( row, INSTALL_BUTTON_COLUMN, check_box_widget1);
204
205 QWidget *check_box_widget2 = new QWidget();
206 QCheckBox *archive_button = new QCheckBox();
207 archive_button->setText("");
208 archive_button->setChecked((project_file_info->ProjectDesc.ProjectOptions & CREATE_SOURCE_ARCHIVE));
209 archive_button->setCheckable((project_file_info->ProjectDesc.ProjectOptions & CREATE_SOURCE_ARCHIVE));
210 QHBoxLayout *layout_check_box2 = new QHBoxLayout( check_box_widget2 );
211 layout_check_box2->addWidget(archive_button); //add QCheckBox to layout
212 layout_check_box2->setAlignment(Qt::AlignCenter); //set Alignment layout
213 layout_check_box2->setContentsMargins(0,0,0,0);
214 ui->ProjectTableWidget->setCellWidget( row, ARCHIVE_BUTTON_COLUMN, check_box_widget2);
215
216 QWidget *check_box_widget3 = new QWidget();
217 QCheckBox *publish_button = new QCheckBox();
218 archive_button->setText("");
219 QHBoxLayout *layout_check_box3 = new QHBoxLayout( check_box_widget3 );
220 layout_check_box3->addWidget(publish_button); //add QCheckBox to layout
221 layout_check_box3->setAlignment(Qt::AlignCenter); //set Alignment layout
222 layout_check_box3->setContentsMargins(0,0,0,0);
223 ui->ProjectTableWidget->setCellWidget( row, PUBLISH_BUTTON_COLUMN, check_box_widget3);
224
225 // Next Row
226 row++;
227 }
228 ui->ProjectTableWidget->setEnabled(true);
229}
230
232{
233 int current_row_count = ui->ProjectTableWidget->rowCount();
234 int project_count = 0;
235
236 QString count_query = "select count(*) from project";
237 QSqlQuery project_counter(count_query);
238 while (project_counter.next())
239 {
240 project_count = project_counter.value(0).toInt();
241 }
242 int increased_project_count = project_count - 1;
243 if (current_row_count < increased_project_count) ui->ProjectTableWidget->setRowCount(increased_project_count);
244}
245
247{
248 int index = ui->ProjectTableWidget->currentRow();
249 if ((index > 1) && (ui->ProjectTableWidget->item (index, 0) != nullptr)
250 && (ui->ProjectTableWidget->item (index, 0)->text () != ""))
251 {
252 ProjectList[index]->ProjectDesc.ProjectSelections = FindSelections(index);
253 doxy_manager->ProcessProject (ProjectList[index]);
254 }
255}
256
258{
259 int selections = 0;
260
261 QCheckBox* check_widget = (QCheckBox*)ui->ProjectTableWidget->cellWidget(index, ARCHIVE_BUTTON_COLUMN);
262 if (check_widget->isChecked())
263 {
264 selections |= CREATE_SOURCE_ARCHIVE;
265 }
266
267 check_widget = (QCheckBox*)ui->ProjectTableWidget->cellWidget(index, INSTALL_BUTTON_COLUMN);
268 if (check_widget->isChecked())
269 {
270 selections |= INSTALL_SCRIPT_MASK;
271 }
272
273 check_widget = (QCheckBox *)ui->ProjectTableWidget->cellWidget (
274 index, PUBLISH_BUTTON_COLUMN);
275 if (check_widget->isChecked ())
276 {
277 selections |= PUBLISH_MASK;
278 }
279
280 return (selections);
281}
282
284{
285 int row_count = ui->ProjectTableWidget->rowCount();
286 for ( int index = 0; (index < row_count) && ( ui->ProjectTableWidget->item( index, 0 ) != nullptr) ; ++index )
287 {
288 if ( ( ui->ProjectTableWidget->item( index, 0 ) != nullptr) && ( ui->ProjectTableWidget->item( index, 0 )->text() != "") )
289 {
290 doxy_manager->ProcessProject(ProjectList[index]);
291 }
292 }
293}
294
295void ProjectListManager::LogAdd(LOGGING_SEVERITY Severity, LOGGING_MODE Mode, QString Message)
296{
297 REMOTE_LOG_ENTRY log_entry;
298 log_entry.Severity = Severity;
299 log_entry.Mode = Mode;
300 log_entry.Message = Message;
301 emit SendLogEntry(log_entry);
302}
303
305{
306 QString project_line;
307 QString project_table_opensim;
308
309 // Retreive the List of Projects
310 QString query_string = base_project_query;
311 QSqlQuery project_query(query_string + " order by project_name");
312
313 // Step Through the List of Projects
314 while( project_query.next())
315 {
316 PROJECT_INFORMATION* project_info = new PROJECT_INFORMATION;
317 read_project_info->LoadProjectInfo(project_info, project_query.value(0).toInt(), ui->ProjectPrefix->currentIndex() + 1);
318
319 uint options = project_info->ProjectDesc.ProjectOptions;
320 if ((options & (1 <<EXCLUDE_PROJECT_LIST_BIT)) == 0)
321 {
322 QString project_address = project_info->ProgramInformation.SiteURL + "/project_dynamic/" + project_info->ProjectDesc.ProjectIdent + "/html/index.html";
323 QString project_logo = project_info->ProgramInformation.SiteURL + "/project_dynamic/" + project_info->ProjectDesc.ProjectIdent + "/images/os_logo.png";
324 project_line = project_info->ProjectDesc.ProjectName + "=" + project_address + "=" + project_logo + "\r\n";
325 project_table_opensim += project_line;
326 }
327 delete project_info;
328 }
329 return(project_table_opensim);
330}
331
332QString ProjectListManager::MakeHTMLProjectPage(QString HeaderTemplateFile, QString FooterTemplateFile, QString LineTemplateFile, bool TableOnly)
333{
334 QString project_html_header;
335 QString project_html_line;
336 QString project_html_footer;
337
338 QString project_line;
339 QString project_table_html;
340
341 // Substitution Strings
342 QString p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, pa, pb, pc;
343
344
345 if (QFileInfo::exists(HeaderTemplateFile) && !TableOnly)
346 {
347 project_html_line = ReadTableTemplate(HeaderTemplateFile);
348 LogAdd(LOG_DEBUG, MODE_FILE, QString("Read Project List Header Template %1.").arg(HeaderTemplateFile));
349 }
350 else
351 {
352 // Initialise the HTML Table Header Template with Default
353 if (!TableOnly)
354 {
355 project_html_header =
356 QString("<!doctype html><html lang=\"en-au\">") +
357 QString("<head><meta charset=\"utf-8\">") +
358 QString("<title>Brigadoon Project List</title>") +
359 QString("<meta name=\"author\" content=\"RiverPirate\">") +
360 QString("<meta name=\"robots\" content=\"index, follow\">") +
361 QString("<meta name=\"revisit-after\" content=\"30 days\">") +
362 QString("<meta name=\"generator\" content=\"ProjectManager\">") +
363 QString("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">") +
364 QString("</head>") +
365 QString("<body>");
366 }
367 project_html_header +=
368 QString("<div Class=\"Title\">") +
369 QString("<span style=\"color:#000000;font-family:Arial;font-size:100px;\">BRIGADOON</span>") +
370 QString("</div>") +
371 QString("<DIV CLASS=\"ProjListTable\">") +
372 QString("<TABLE WIDTH=\"100%\" BORDER=\"1\"><TR>") +
373 QString("<TH>Prj. Ident.</TH><TH>Prj. Name</TH><TH>Target</TH><TH>Stat.</TH><TH>Contact</TH><TH>Brief Description</TH>") +
374 QString("<TH>Dev. Fam.</TH><TH>Comp. Lang.</TH><TH>Assoc. Grp.</TH>") +
375 QString("<TH>S/W Lic.</TH><TH>H/W Lic.</TH><TH>Doc.Lic.</TH>") +
376 QString("</TR>");
377
378 LogAdd(LOG_INFO, MODE_FILE, QString("Unable to Read Project List Header Template %1, using Default Template.").arg(HeaderTemplateFile));
379 }
380
381 if (QFileInfo::exists(LineTemplateFile))
382 {
383 project_html_line = ReadTableTemplate(LineTemplateFile);
384 LogAdd(LOG_DEBUG, MODE_FILE, QString("Read Project List Line Template %1.").arg(LineTemplateFile));
385 }
386 else
387 {
388 project_html_line =
389 QString("<TR>") +
390 QString("<TD>%1</TD><TD>%2</TD><TD>%3</TD><TD>%4</TD>") +
391 QString("<TD>%5</TD><TD>%6</TD><TD>%7</TD><TD>%8</TD>") +
392 QString("<TD>%9</TD><TD>%10</TD><TD>%11</TD><TD>%12</TD>") +
393 QString("</TR>");
394 LogAdd(LOG_INFO, MODE_FILE, QString("Unable to Read Project List Line Template %1, using Default Template.").arg(LineTemplateFile));
395 }
396
397 if (QFileInfo::exists(FooterTemplateFile))
398 {
399 project_html_line = ReadTableTemplate(FooterTemplateFile);
400 LogAdd(LOG_DEBUG, MODE_FILE, QString("Read Project List Footer Template %1.").arg(FooterTemplateFile));
401 }
402 else
403 {
404 project_html_footer = QString("</TABLE></DIV>");
405 if (!TableOnly) project_html_footer += "</BODY></HTML>";
406
407 LogAdd(LOG_INFO, MODE_FILE, QString("Unable to Read Project List Footer Template %1, using Default Template.").arg(FooterTemplateFile));
408 }
409
410 // Start Creating table
411 project_table_html = project_html_header;
412
413 // Retreive the List of Projects
414 QString query_string = base_project_query;
415 QSqlQuery project_query(query_string + " order by project_index desc");
416
417 // Step Through the List of Projects
418 while( project_query.next())
419 {
420 PROJECT_INFORMATION* project_info = new PROJECT_INFORMATION;
421
422 // Load all of the Data about this Project
423 read_project_info->LoadProjectInfo(project_info, project_query.value(0).toInt(), ui->ProjectPrefix->currentIndex() + 1);
424
425 if (!(project_info->ProjectDesc.ProjectOptions & EXCLUDE_PROJECT_LIST))
426 {
427
428 // Get the Project's URL and Project Identifier
429 pa = project_info->ProgramInformation.SiteURL + "/project_dynamic/" + project_info->ProjectDesc.ProjectIdent + "/html/index.html";
430 pb = project_info->ProjectDesc.ProjectIdent;
431 p1 = QString("<A HREF=\"")+pa + "\">" + pb + "</A>";
432
433 // Make A Table Widget for the Project Name and Insert
434 p2 = project_info->ProjectDesc.ProjectName;
435
436 // Get the Name of the target System
437 p3 = project_info->TargetFamilyInfo.ShortName;
438
439 // Get the Project Status Name, Create Table Widget and Insert in Table
440 p4 = project_info->StatusInfo.StatusName;
441
442 // Get the Developer Name, Create Table Widget and Insert in Table
443 pa = project_info->Developer.Email;
444 pb = project_info->Developer.Handle;
445 pc = project_info->ProjectDesc.ProjectIdent;
446 p5 = QString("<A HREF=\"mailto:") + pa +"?subject=re: " + pc + " Project.\">" + pb + "</A>";
447
448 // Get the Brief Description, Create Table Widget and Insert in Table
449 p6 = project_info->ProjectDesc.BriefDescription;
450
451 // Get the Development Family, Create Table Widget and Insert in Table
452 p7 = project_info->DevFamilyInfo.ShortName;
453
454 // Get the Language Family, Create Table Widget and Insert in Table
455 p8 = project_info->LangFamilyInfo.ShortName;
456
457 // Get the Association Family, Create Table Widget and Insert in Table
458 pa = project_info->InAssocInfo.ShortName;
459 if (project_info->InAssocInfo.InAssociationIndex != 0)
460 {
461 pb = project_info->InAssocInfo.AssociationURL;
462 p9 = QString("<A HREF=\"")+ pb + QString("\" target=\"_blank\">") + pa + "</A>";
463 }
464 else
465 {
466 p9 = pa;
467 }
468
469 // Get the Software Licence, Create Table Widget and Insert in Table
470 pa = project_info->SoftwareLicence.ShortName;
471 if( project_info->SoftwareLicence.LicenceIndex != 14)
472 {
473 pb = project_info->SoftwareLicence.LicenceURL;
474 p10 = QString("<A HREF=\"")+ pb + QString("\" target=\"_blank\">") + pa + "</A>";
475 }
476 else
477 {
478 p10 = pa;
479 }
480
481 // Get the Hardware Licence, Create Table Widget and Insert in Table
482 pa = project_info->HardwareLicence.ShortName;
483 if( project_info->HardwareLicence.LicenceIndex != 14)
484 {
485 pb = project_info->HardwareLicence.LicenceURL;
486 p11 = QString("<A HREF=\"")+ pb + QString("\" target=\"_blank\">") + pa + "</A>";
487 }
488 else
489 {
490 p11 = pa;
491 }
492
493 // Get the Documentation Licence, Create Table Widget and Insert in Table
494 pa = project_info->DocLicence.ShortName;
495 if( project_info->DocLicence.LicenceIndex != 14)
496 {
497 pb = project_info->DocLicence.LicenceURL;
498 p12 = QString("<A HREF=\"")+ pb + QString("\" target=\"_blank\">") + pa + "</A>";
499 }
500 else
501 {
502 p12 = pa;
503 }
504
505 project_line = project_html_line.arg(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
506 project_table_html += project_line;
507 }
508 }
509 project_table_html += project_html_footer;
510
511 // Write the Table Out to a File
512
513
514 return(project_table_html);
515}
516
517QString ProjectListManager::ReadTableTemplate(QString TemplateFile)
518{
519 QString text_result;
520 QFile file(TemplateFile);
521 if (file.open(QIODevice::ReadOnly | QIODevice::Text))
522 {
523 QTextStream in(&file);
524 while(!in.atEnd())
525 {
526 text_result += in.readLine();
527 }
528 }
529 return(text_result);
530}
531
532bool ProjectListManager::WriteTextFile(QString FileName, QString Contents)
533{
534 bool result = false;
535 QFile file(FileName);
536 if (file.open(QIODevice::WriteOnly | QIODevice::Text))
537 {
538 QTextStream out(&file);
539 out << Contents;
540 result = true;
541 LogAdd(LOG_DEBUG, MODE_FILE, QString("Wrote Project List File %1 ").arg(FileName));
542 }
543 else
544 {
545 LogAdd(LOG_ERROR, MODE_FILE, QString("Unable to write Project List File %1 ").arg(FileName));
546
547 }
548 return(result);
549}
550
552{
553 // Find the Line with this Project Ident
554 QList<QTableWidgetItem *> item_list = ui->ProjectTableWidget->findItems (
555 Project->ProjectDesc.ProjectIdent, Qt::MatchExactly);
556 if (item_list.count () != 1)
557 {
559 QString ("Error Finding Project %1 in the Table Widget. ")
560 .arg (Project->ProjectDesc.ProjectIdent));
561 }
562 else
563 {
564 if (!Project->ProjectLock)
565 {
566 item_list[0]->setForeground (QBrush (QColor (INACTIVE_COLOUR)));
567 }
568 else
569 {
570 if (Project->ProjectQueued)
571 item_list[0]->setForeground (QBrush (QColor (QUEUED_COLOUR)));
572 else
573 item_list[0]->setForeground (QBrush (QColor (LOCK_COLOUR)));
574 }
575 ui->ProjectTableWidget->repaint ();
576 }
577}
578
583
589
594
599
600void
605
606void
611
612void ProjectListManager::SetCheckState(int column, bool CheckState)
613{
614 int row_count = ui->ProjectTableWidget->rowCount();
615 for (int row = 0; row < row_count; row++)
616 {
617 QCheckBox* checkBox = nullptr;
618
619 if (QWidget* w = ui->ProjectTableWidget->cellWidget(row, column))
620 {
621 if (QLayout* layout = w->layout())
622 {
623 if (QLayoutItem* layoutItem = layout->itemAt(0))
624 {
625 if (QWidgetItem* widgetItem = dynamic_cast<QWidgetItem*>(layoutItem))
626 {
627 checkBox = qobject_cast<QCheckBox*>(widgetItem->widget());
628 checkBox->setChecked(CheckState);
629 }
630 }
631 }
632 }
633 }
634}
Class for utilising the Doxygen tool.
void SetMaximumProjects(void)
Set the Initial Line Count in the Project List table.
~ProjectListManager()
Project List Manager Class Destructor.
bool WriteTextFile(QString FileName, QString Contents)
Write a String to a File.
void PressedInstallOff(void)
Turn all Install Check boxes off in List table.
void SendLogEntry(REMOTE_LOG_ENTRY log_entry)
void LoadProjectTable(void)
Clear and Reload the Project table, Sort by Selected Button \SortButton Button pressed to sort the Ta...
void SetCheckState(int column, bool InstallState)
Set the State of all Project Selection in Table List.
QString MakeOSProjectPage(void)
QList< PROJECT_INFORMATION * > ProjectList
A list of Projects to be processed.
QString ReadTableTemplate(QString TemplateFile)
Read an HTML template from a File.
int FindSelections(int index)
Read and Encode selected options for a Project.
QString base_project_query
Basic SQL Query for listing Projects.
void LogAdd(LOGGING_SEVERITY Severity, LOGGING_MODE Mode, QString Message)
Send Message to the Log.
void ProcessFullList(void)
Add all Projects for Documentation Creation.
void InitaliseProjectTable(void)
Clear and Load the Project List Table.
QString MakeHTMLProjectPage(QString HeaderTemplateFile, QString FooterTemplateFile, QString LineTemplateFile, bool TableOnly=true)
ProjectListManager(Ui::MainWindow *UI_Window)
Project List Manager Class Constructor.
void OutputProjectLists(void)
Output the Project Lists to text and HTML.
void PressedArchiveOn(void)
Turn all Archive Check boxes on in List table.
void PressedArchiveOff(void)
Turn all Archive Check boxes off in List table.
void PressedInstallOn(void)
Turn all Install Check boxes on in List table.
void ProjectTabChanged(int Index)
Process the Change in Window Tab.
void ProcessSelection(void)
Add th Selected Project for Documentation Creation.
void PressedPublishOff(void)
Turn all Archive Check boxes off in List table.
void PrStateChange(PROJECT_INFORMATION *Project)
Update the Lock/Queued Status of Project in the Project List Table.
#define TABLE_COLUMN_COUNT
Number of Columns in the Project List Table.
@ EXCLUDE_PROJECT_LIST_BIT
#define PUBLISH_MASK
Bit Mask for publishing the Doxygen Files.
#define ALLOW_AUTOMATIC_INSTALL
#define QUEUED_COLOUR
@ DOC_LICENCE_COLUMN
@ SOFTWARE_LICENCE_COLUMN
@ PROJECT_CONTACT_COLUMN
@ TARGET_FAMILY_COLUMN
@ PUBLISH_BUTTON_COLUMN
@ PROJECT_STATUS_COLUMN
@ ASSOCIATION_COLUMN
@ INSTALL_BUTTON_COLUMN
@ COMPILER_FAMILY_COLUMN
@ ARCHIVE_BUTTON_COLUMN
@ HARDWARE_LICENCE_COLUMN
@ DEV_FAMILY_COLUMN
@ PROJECT_IDENT_COLUMN
@ PROJECT_NAME_COLUMN
@ BRIEF_DESC_COLUMN
#define EXCLUDE_PROJECT_LIST
Exclude Project from Public List Mask.
#define INACTIVE_COLOUR
The Text colour indicating an unlocked and unqueued Project.
#define INSTALL_SCRIPT_MASK
Bit Mask for the Install Script.
#define LOCK_COLOUR
The Text colour indicating a Locked Project.
#define CREATE_SOURCE_ARCHIVE
Create a SOurce Archive when Documentation Generated.
ReadProjectInfo * read_project_info
Doxygen Defintitions.
LOGGING_SEVERITY
Log Severity allow the selection of logging events based on Severity.
Definition logger.h:48
@ LOG_ERROR
Definition logger.h:52
@ LOG_INFO
Definition logger.h:55
@ 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_QT
Definition logger.h:23
@ MODE_FILE
Definition logger.h:32
ProjectOptionsManager * project_opts_manager
DoxygenManager * doxy_manager
ProjectSubstitute * project_subs_manager
Project List Manager Class.
#define ASSOCIATION_SIZE
The width of the Association Column.
#define PROJECT_CONTACT_SIZE
The width of the Project Contact Column.
#define COMPILER_FAMILY_SIZE
The width of the Compiler Family Column.
#define DEV_FAMILY_SIZE
#define PROJECT_NAME_SIZE
The width of the Project Name Column.
#define PROJECT_IDENT_SIZE
The width of the Project Ident Column.
#define BRIEF_DESC_SIZE
The width of the Brief Description Column.
#define ARCHIVE_BUTTON_SIZE
The width of the Archive Button Column.
#define SOFTWARE_LICENCE_SIZE
The width of the Software Licence Column.
#define HARDWARE_LICENCE_SIZE
#define INSTALL_BUTTON_SIZE
The width of the Install Button Column.
#define PUBLISH_BUTTON_SIZE
The width of the Publish Button Column.
#define TARGET_FAMILY_SIZE
The width of the Target Family Column.
@ LICENCE_ACK_TAB
@ CREATE_UPDATE_TAB
@ UPDATE_PROJECTS_TAB
@ PROGRAM_SETUP_TAB
@ LOG_TAB
#define PROJECT_STATUS_SIZE
The width of the Project Status Column.
#define DOC_LICENCE_SIZE
The width of the Documentation Licence Column.
Class Controlling the Database Creation.
Class Controlling Text Substitution.
Class for Reading Projects.
Project Information Passed Between Functions.
PROGRAM_INFORMATION ProgramInformation
TARGET_FAMILY_INFO TargetFamilyInfo
DEV_FAMILY_INFO DevFamilyInfo
PROJECT_DESCRIPTION ProjectDesc
LANG_FAMILY_INFO LangFamilyInfo
ASSOCIATED_GROUP_INFO InAssocInfo
Definition logger.h:60
LOGGING_MODE Mode
Definition logger.h:61
QString Message
Definition logger.h:63
LOGGING_SEVERITY Severity
Definition logger.h:62