Opensim Control Panel BRIGADOON-0013
This program provides a control panel for an Open Simulator Instance
Loading...
Searching...
No Matches
dirclass.cpp
Go to the documentation of this file.
1#include "dirclass.h"
2#include <QDir>
3#include <QTableWidgetItem>
4#include <QHBoxLayout>
5#include "areacalculator.h"
6
7DirClass::DirClass(QObject *parent)
8 : QObject{parent}
9{
10
11}
12
13void DirClass::SetInputDirectory(QString DirectoryString)
14{
15 input_directory = DirectoryString;
16}
17
18void DirClass::SetInputTable(QTableWidget *InputTable)
19{
20 input_table = InputTable;
21 input_table->setColumnCount( INPUT_TABLE_COLUMN_COUNT );
22 input_table->setHorizontalHeaderLabels( QStringList( {"Sel.", "Region", "Done"} ));
23
27}
28
29void DirClass::SetOutputTable(QTableWidget *OutputTable)
30{
31 output_table = OutputTable;
32 output_table->setColumnCount( OUTPUT_TABLE_COLUMN_COUNT );
33 output_table->setColumnCount( INPUT_TABLE_COLUMN_COUNT );
34 output_table->setHorizontalHeaderLabels( QStringList( {"Sel.", "Region", "Done"} ));
35
39}
40
45
46bool DirClass::LoadInputTable(QString InputDirectory)
47{
48 bool result = false;
49 QList<DIR_INFO> file_list;
50
51 // Load Regios from the Database if ther eis access available
52 //if (useDatabase) result = LoadFromDatabase(InputDirectory);
53 // else
54 //{
55
56 // Process the Files in the Input Directory
57 file_list = ProcessInputFilenames(InputDirectory);
58 result = !file_list.empty();
59
60 //}
61
62 if (result) DisplayInputTable(file_list);
63 return(result);
64}
65
66bool DirClass::LoadOutputTable(QString OutputDirectory)
67{
68 bool result = false;
69
70 return(result);
71}
72
73
74bool DirClass::AddInputFiles(QString FileName)
75{
76 bool result = false;
77 return(result);
78}
79
80bool DirClass::AddOutputFiles(QString FileName)
81{
82 bool result = false;
83 return(result);
84}
85
86QList<DIR_INFO> DirClass::ProcessInputFilenames(QString InputDirectory)
87{
88 QDir dir(InputDirectory);
89 QList<DIR_INFO> dir_list;
90
91 // Check if the Directory Exists
92 if (dir.exists())
93 {
94 // Preset the Directory Filtering
95 dir.setFilter(QDir::Files | QDir::NoSymLinks);
96 QStringList name_filter;
97 name_filter << "*.r32";
98 dir.setNameFilters(name_filter);
99
100 // Get the Filtered List of Region Files
101
102 QFileInfoList list = dir.entryInfoList();
103
104 // Process the List of Files
105 for (int i = 0; i < list.size(); ++i)
106 {
107 // Save the Filename for Later
108 QFileInfo file_info = list.at(i);
109 DIR_INFO dir_info;
110 QString file_name =file_info.fileName();
111 dir_info.FileName = file_name;
112 LogAdd(LOG_DEBUG, MODE_FILE, "Found filename = " + file_name);
113
114 // Find the Size of the File
115 dir_info.file_size = file_info.size();
116
117 // Find out the size of the region
118
119 // Split the Filename to get the Region Name & Save it
120 QStringList filename_split = file_name.split(QRegularExpression("\\s+"));
121 QString region_name = filename_split.at(0);
122 dir_info.RegionName = region_name;
123
124 // Split the Remainder to Get the Region Address
125 QString part_name = filename_split.at(1);
126 int start_position = part_name.indexOf("(") + 1;
127 int end_position = part_name.indexOf(")");
128 int length = end_position - start_position;
129 QString location = part_name.mid(start_position, length);
130
131 // Split the address strings into X and Y
132 int break_position = location.indexOf(",");
133 dir_info.x_position = location.mid(0, break_position).toInt();
134 dir_info.y_position = location.mid((break_position + 1), -1).toInt();
135
136 // Flag that this is not to be processed by default
137 dir_info.doProcessing = false;
138
139 dir_list << dir_info;
140 }
141 }
142 return(dir_list);
143}
144
145void DirClass::LogAdd(LOGGING_SEVERITY Severity, LOGGING_MODE Mode, QString Message)
146{
147 REMOTE_LOG_ENTRY log_entry;
148 log_entry.Severity = Severity;
149 log_entry.Mode = Mode;
150 log_entry.Message = Message;
151 emit SendLogEntry(log_entry);
152}
153
154
155void DirClass::DisplayInputTable(QList<DIR_INFO> InputTableList)
156{
157 QBrush ItemBrush(Qt::black);
158
159 // Clear the Input Table
160 input_table->clearContents();
161 input_table->setSortingEnabled(false);
162 input_table->setRowCount(InputTableList.count());
163 // Load the Table with the Data from the Directory
164 int row = 0;
165 for (const auto &item : InputTableList)
166 {
167 // Include the Select Widget in the Table Row
168 QWidget *check_box_widget = new QWidget();
169 QCheckBox *select_button = new QCheckBox();
170 select_button->setText("");
171 select_button->setChecked(true);
172 select_button->setCheckable(true);
173 QHBoxLayout *layout_select_box = new QHBoxLayout(check_box_widget);
174 layout_select_box->addWidget(select_button); //add QCheckBox to layout
175 layout_select_box->setAlignment(Qt::AlignCenter); //set Alignment layout
176 layout_select_box->setContentsMargins(0,0,0,0);
177 input_table->setCellWidget(row, INPUT_SELECT_COLUMN, check_box_widget);
178
179 // Make A Table Widget for the Region Identifier and Insert
180 QString region_name = item.RegionName;
181 QTableWidgetItem *new_project_ident = new QTableWidgetItem(region_name);
182 new_project_ident->setFlags(new_project_ident->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsSelectable));
183 new_project_ident->setTextAlignment(Qt::AlignCenter);
184 new_project_ident->setForeground(ItemBrush);
185 input_table->setItem( row, INPUT_NAME_COLUMN, new_project_ident );
186
187 // Include the Processed Widget in the Table Row
188 QWidget *check_done_widget = new QWidget();
189 QCheckBox *done_button = new QCheckBox();
190 done_button->setText("");
191 done_button->setChecked(false);
192 done_button->setCheckable(false);
193 QHBoxLayout *layout_done_box = new QHBoxLayout(check_done_widget);
194 layout_done_box->addWidget(done_button); //add QCheckBox to layout
195 layout_done_box->setAlignment(Qt::AlignCenter); //set Alignment layout
196 layout_done_box->setContentsMargins(0,0,0,0);
197 input_table->setCellWidget(row, INPUT_DONE_COLUMN, check_done_widget);
198
199 // Pass the Location to the Auto Area Calculation
200 REMOTE_REGION_ADDRESS region_address;
201 region_address.RegionXLocation = item.x_position;
202 region_address.RegionYLocation = item.y_position;
203 emit SendRegionLocation(region_address);
204
205 // Move to the Next Row
206 row++;
207 }
208 input_table->repaint();
209}
QList< DIR_INFO > ProcessInputFilenames(QString InputDirectory)
Definition dirclass.cpp:86
void LogAdd(LOGGING_SEVERITY Severity, LOGGING_MODE Mode, QString Message)
Send Message to the Log.
Definition dirclass.cpp:145
QTableWidget * input_table
Definition dirclass.h:69
QString input_directory
Definition dirclass.h:72
void DisplayInputTable(QList< DIR_INFO > InputTableList)
Definition dirclass.cpp:155
void ListInputDirectory(void)
Definition dirclass.cpp:41
void SendLogEntry(REMOTE_LOG_ENTRY LogEntry)
Send Log Entry via the Signal-Slot Method.
bool LoadOutputTable(QString OutputDirectory)
Definition dirclass.cpp:66
bool AddInputFiles(QString FileName)
Definition dirclass.cpp:74
void SetOutputTable(QTableWidget *OutputTable)
Definition dirclass.cpp:29
bool AddOutputFiles(QString FileName)
Definition dirclass.cpp:80
void SetInputTable(QTableWidget *InputTable)
Definition dirclass.cpp:18
QTableWidget * output_table
Definition dirclass.h:70
void SendRegionLocation(REMOTE_REGION_ADDRESS region_address)
void SetInputDirectory(QString DirectoryString)
Definition dirclass.cpp:13
DirClass(QObject *parent=nullptr)
Definition dirclass.cpp:7
bool LoadInputTable(QString InputDirectory)
Definition dirclass.cpp:46
#define OUTPUT_DONE_WIDTH
Definition dirclass.h:51
#define OUTPUT_TABLE_COLUMN_COUNT
Definition dirclass.h:48
#define OUTPUT_NAME_WIDTH
Definition dirclass.h:52
#define INPUT_DONE_WIDTH
Definition dirclass.h:38
#define INPUT_SELECT_WIDTH
Definition dirclass.h:37
@ INPUT_DONE_COLUMN
Definition dirclass.h:32
@ INPUT_SELECT_COLUMN
Definition dirclass.h:30
@ INPUT_NAME_COLUMN
Definition dirclass.h:31
#define INPUT_TABLE_COLUMN_COUNT
Definition dirclass.h:35
#define OUTPUT_SELECT_WIDTH
Definition dirclass.h:50
@ OUTPUT_DONE_COLUMN
Definition dirclass.h:45
@ OUTPUT_SELECT_COLUMN
Definition dirclass.h:43
@ OUTPUT_NAME_COLUMN
Definition dirclass.h:44
#define INPUT_NAME_WIDTH
Definition dirclass.h:39
LOGGING_SEVERITY
Log Severity allow the selection of logging events based on Severity.
Definition logger.h:48
@ 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_FILE
Definition logger.h:32
bool doProcessing
Definition dirclass.h:16
int x_position
Definition dirclass.h:14
QString FileName
Definition dirclass.h:11
int y_position
Definition dirclass.h:15
QString RegionName
Definition dirclass.h:12
qint64 file_size
Definition dirclass.h:13
Definition logger.h:60
LOGGING_MODE Mode
Definition logger.h:61
QString Message
Definition logger.h:63
LOGGING_SEVERITY Severity
Definition logger.h:62