2025-02-08 19:58:54 -05:00
# include "zonefileviewer.h"
# include "ui_zonefileviewer.h"
2025-06-04 22:29:43 -04:00
# include "statusbarmanager.h"
2025-02-08 19:58:54 -05:00
ZoneFileViewer : : ZoneFileViewer ( QWidget * parent )
: QWidget ( parent )
2025-04-04 20:36:32 -04:00
, ui ( new Ui : : ZoneFileViewer ) {
2025-02-08 19:58:54 -05:00
ui - > setupUi ( this ) ;
2025-05-03 09:57:47 -04:00
mZoneFile = nullptr ;
2025-02-08 19:58:54 -05:00
2025-06-04 22:29:43 -04:00
ui - > tableWidget_RecordCounts - > setColumnCount ( 3 ) ;
ui - > tableWidget_RecordCounts - > setHorizontalHeaderLabels ( { " Identifier " , " Asset " , " Count " } ) ;
2025-02-08 19:58:54 -05:00
ui - > tableWidget_RecordCounts - > horizontalHeader ( ) - > setStretchLastSection ( true ) ;
2025-06-04 22:29:43 -04:00
ui - > tableWidget_RecordOrder - > setColumnCount ( 3 ) ;
ui - > tableWidget_RecordOrder - > setHorizontalHeaderLabels ( { " Identifier " , " Asset " , " Count " } ) ;
2025-02-08 19:58:54 -05:00
ui - > tableWidget_RecordOrder - > horizontalHeader ( ) - > setStretchLastSection ( true ) ;
2025-05-03 09:57:47 -04:00
connect ( ui - > lineEdit_TagSearch , & QLineEdit : : textChanged , this , & ZoneFileViewer : : SortTags ) ;
connect ( ui - > tableWidget_RecordCounts , & QTableWidget : : itemSelectionChanged , this , & ZoneFileViewer : : HighlightRecordInOrder ) ;
2025-06-04 22:29:43 -04:00
connect ( ui - > listWidget_Tags , & QListWidget : : currentTextChanged , this , [ this ] ( const QString & aCurrentText ) {
StatusBarManager : : instance ( ) . updateStatus ( QString ( " Selected tag '%1' with index %2 " ) . arg ( aCurrentText ) . arg ( mZoneFile - > GetTags ( ) . indexOf ( aCurrentText ) ) ) ;
} ) ;
2025-02-08 19:58:54 -05:00
}
2025-04-04 20:36:32 -04:00
ZoneFileViewer : : ~ ZoneFileViewer ( ) {
2025-02-08 19:58:54 -05:00
delete ui ;
}
2025-05-03 09:57:47 -04:00
void ZoneFileViewer : : HighlightRecordInOrder ( ) {
ui - > tableWidget_RecordOrder - > clearSelection ( ) ;
foreach ( auto selectedItem , ui - > tableWidget_RecordCounts - > selectedItems ( ) ) {
int selectedRow = selectedItem - > row ( ) ;
const QString assetId = ui - > tableWidget_RecordCounts - > item ( selectedRow , 0 ) - > text ( ) ;
for ( int i = 0 ; i < ui - > tableWidget_RecordOrder - > rowCount ( ) ; i + + ) {
const QString testAssetId = ui - > tableWidget_RecordOrder - > item ( i , 0 ) - > text ( ) ;
if ( testAssetId ! = assetId ) { continue ; }
ui - > tableWidget_RecordOrder - > selectRow ( i ) ;
ui - > tableWidget_RecordOrder - > item ( i , 0 ) - > setSelected ( true ) ;
ui - > tableWidget_RecordOrder - > item ( i , 1 ) - > setSelected ( true ) ;
ui - > tableWidget_RecordOrder - > item ( i , 2 ) - > setSelected ( true ) ;
ui - > tableWidget_RecordOrder - > item ( i , 3 ) - > setSelected ( true ) ;
}
}
}
void ZoneFileViewer : : SortTags ( const QString & aSearchText ) {
ui - > listWidget_Tags - > clear ( ) ;
const QStringList tags = mZoneFile - > GetTags ( ) ;
if ( aSearchText . isEmpty ( ) ) {
ui - > listWidget_Tags - > addItems ( tags ) ;
return ;
}
QStringList sortedTags ;
foreach ( const QString tag , tags ) {
if ( tag . contains ( aSearchText ) ) {
sortedTags < < tag ;
}
}
2025-06-04 22:29:43 -04:00
StatusBarManager : : instance ( ) . updateStatus ( QString ( " Found %1 tags. " ) . arg ( sortedTags . size ( ) ) ) ;
2025-05-03 09:57:47 -04:00
ui - > listWidget_Tags - > addItems ( sortedTags ) ;
}
2025-02-08 19:58:54 -05:00
void ZoneFileViewer : : SetZoneFile ( std : : shared_ptr < ZoneFile > aZoneFile ) {
2025-05-03 09:57:47 -04:00
mZoneFile = aZoneFile ;
2025-04-04 20:36:32 -04:00
ui - > tableWidget_RecordCounts - > clearContents ( ) ;
ui - > tableWidget_RecordOrder - > clearContents ( ) ;
2025-02-08 19:58:54 -05:00
ui - > listWidget_Tags - > clear ( ) ;
2025-05-03 09:57:47 -04:00
const QStringList tags = mZoneFile - > GetTags ( ) ;
2025-02-08 19:58:54 -05:00
ui - > listWidget_Tags - > addItems ( tags ) ;
2025-06-04 22:29:43 -04:00
ui - > label_Title - > setText ( mZoneFile - > GetBaseStem ( ) + " .zone " ) ;
ui - > groupBox_Tags - > setTitle ( QString ( " Tags (%1) " ) . arg ( tags . size ( ) ) ) ;
2025-02-08 19:58:54 -05:00
if ( tags . isEmpty ( ) ) {
ui - > groupBox_Tags - > hide ( ) ;
} else {
ui - > groupBox_Tags - > show ( ) ;
}
QMap < QString , int > recordCounts = QMap < QString , int > ( ) ;
2025-05-03 09:57:47 -04:00
QVector < QPair < QString , int > > assetOccurances = QVector < QPair < QString , int > > ( ) ;
for ( const QString & record : mZoneFile - > GetRecords ( ) ) {
2025-02-08 19:58:54 -05:00
if ( ! recordCounts . contains ( record ) ) {
recordCounts [ record ] = 0 ;
}
recordCounts [ record ] + + ;
2025-05-03 09:57:47 -04:00
if ( ! assetOccurances . isEmpty ( ) & & assetOccurances . last ( ) . first = = record ) {
assetOccurances . last ( ) . second + + ;
continue ;
}
QPair < QString , int > assetOccurance ( record , 1 ) ;
assetOccurances < < assetOccurance ;
}
ui - > tableWidget_RecordOrder - > setRowCount ( assetOccurances . size ( ) ) ;
int assetIndex = 0 ;
foreach ( auto assetOccurance , assetOccurances ) {
const QString record = assetOccurance . first ;
AssetType assetType = mZoneFile - > AssetStrToEnum ( record ) ;
int assetCount = assetOccurance . second ;
QIcon assetIcon = mZoneFile - > AssetTypeToIcon ( assetType ) ;
2025-04-04 20:36:32 -04:00
if ( assetIcon . isNull ( ) ) {
qDebug ( ) < < " Icon is null for record: " < < record ;
}
2025-05-03 09:57:47 -04:00
QTableWidgetItem * recordItem = new QTableWidgetItem ( record . toUpper ( ) ) ;
QTableWidgetItem * recordStrItem = new QTableWidgetItem ( mZoneFile - > AssetEnumToStr ( assetType ) ) ;
QTableWidgetItem * recordCountItem = new QTableWidgetItem ( QString : : number ( assetCount ) ) ;
2025-06-04 22:29:43 -04:00
recordItem - > setIcon ( assetIcon ) ;
2025-02-08 19:58:54 -05:00
2025-05-03 09:57:47 -04:00
ui - > tableWidget_RecordOrder - > setItem ( assetIndex , 0 , recordItem ) ;
ui - > tableWidget_RecordOrder - > setItem ( assetIndex , 1 , recordStrItem ) ;
ui - > tableWidget_RecordOrder - > setItem ( assetIndex , 2 , recordCountItem ) ;
2025-02-08 19:58:54 -05:00
2025-05-03 09:57:47 -04:00
assetIndex + + ;
}
2025-02-08 19:58:54 -05:00
int recordIndex = 0 ;
for ( const QString & record : recordCounts . keys ( ) ) {
int recordCount = recordCounts [ record ] ;
2025-02-19 19:17:31 -05:00
2025-05-03 09:57:47 -04:00
AssetType assetType = mZoneFile - > AssetStrToEnum ( record ) ;
QIcon assetIcon = mZoneFile - > AssetTypeToIcon ( assetType ) ;
2025-04-04 20:36:32 -04:00
if ( assetIcon . isNull ( ) ) {
qDebug ( ) < < " Icon is null for record: " < < record ;
}
2025-02-08 19:58:54 -05:00
ui - > tableWidget_RecordCounts - > setRowCount ( recordIndex + 1 ) ;
2025-04-04 20:36:32 -04:00
QTableWidgetItem * recordItem = new QTableWidgetItem ( record . toUpper ( ) ) ;
2025-06-04 22:29:43 -04:00
QTableWidgetItem * recordCountStrItem = new QTableWidgetItem ( mZoneFile - > AssetEnumToStr ( assetType ) ) ;
2025-02-08 19:58:54 -05:00
QTableWidgetItem * recordCountItem = new QTableWidgetItem ( QString : : number ( recordCount ) ) ;
2025-06-04 22:29:43 -04:00
recordItem - > setIcon ( assetIcon ) ;
2025-02-08 19:58:54 -05:00
2025-04-04 20:36:32 -04:00
ui - > tableWidget_RecordCounts - > setItem ( recordIndex , 0 , recordItem ) ;
ui - > tableWidget_RecordCounts - > setItem ( recordIndex , 1 , recordCountStrItem ) ;
ui - > tableWidget_RecordCounts - > setItem ( recordIndex , 2 , recordCountItem ) ;
2025-02-08 19:58:54 -05:00
recordIndex + + ;
}
2025-04-04 20:36:32 -04:00
ui - > tableWidget_RecordOrder - > resizeColumnsToContents ( ) ;
ui - > tableWidget_RecordCounts - > resizeColumnsToContents ( ) ;
2025-02-08 19:58:54 -05:00
}