@@ -148,6 +148,7 @@ MainWindow::MainWindow(QString extraPluginPath, QString configFilePath, QWidget
148
148
149
149
// Import menu initialization
150
150
populateRecentImportsMenu ();
151
+ populateRecentExportsMenu ();
151
152
152
153
// create an initial state
153
154
checkOperatorInput ();
@@ -720,7 +721,7 @@ void MainWindow::requestImportRun(QString pluginName, QJsonObject pluginState)
720
721
if (result.isNull ()) {
721
722
return ;
722
723
}
723
- if (!result->getPluginState ().isEmpty ()) {
724
+ if (!result->getPluginState ().isEmpty () && !result-> getPluginState (). contains ( " error " ) ) {
724
725
this ->populateRecentImportsMenu ({plugin->getName (), result->getPluginState ()});
725
726
}
726
727
if (!result->getContainer ().isNull ()) {
@@ -737,7 +738,10 @@ void MainWindow::requestExportRun(QString pluginName, QJsonObject pluginState)
737
738
warningMessage (" Cannot export without a selected bit container" );
738
739
}
739
740
QSharedPointer<ImportExportInterface> plugin = m_pluginManager->getImporterExporter (pluginName);
740
- plugin->exportBits (currContainer (), pluginState, this );
741
+ auto result = plugin->exportBits (currContainer (), pluginState, this );
742
+ if (!result->getPluginState ().isEmpty () && !result->getPluginState ().contains (" error" )) {
743
+ this ->populateRecentExportsMenu ({plugin->getName (), result->getPluginState ()});
744
+ }
741
745
}
742
746
743
747
void MainWindow::on_pb_analyze_clicked ()
@@ -1116,6 +1120,7 @@ void MainWindow::populateRecentImportsMenu(QPair<QString, QJsonObject> addition,
1116
1120
1117
1121
SettingsManager::getInstance ().setPrivateSetting (key, recentlyImported);
1118
1122
1123
+ int invalidStateCount = 0 ;
1119
1124
ui->menuImport_Recent ->clear ();
1120
1125
for (QString importString : recentlyImported) {
1121
1126
QStringList importParts = importString.split (separator);
@@ -1133,6 +1138,7 @@ void MainWindow::populateRecentImportsMenu(QPair<QString, QJsonObject> addition,
1133
1138
1134
1139
QString menuLabel = plugin->getImportLabelForState (pluginState);
1135
1140
if (menuLabel.isEmpty ()) {
1141
+ invalidStateCount++;
1136
1142
continue ;
1137
1143
}
1138
1144
ui->menuImport_Recent ->addAction (
@@ -1142,7 +1148,75 @@ void MainWindow::populateRecentImportsMenu(QPair<QString, QJsonObject> addition,
1142
1148
});
1143
1149
}
1144
1150
1145
- ui->menuImport_Recent ->setEnabled (recentlyImported.length () > 0 );
1151
+ ui->menuImport_Recent ->setEnabled (recentlyImported.length () - invalidStateCount > 0 );
1152
+ }
1153
+
1154
+ void MainWindow::populateRecentExportsMenu (QPair<QString, QJsonObject> addition, QPair<QString, QJsonObject> removal)
1155
+ {
1156
+ QString key = " recently_exported" ;
1157
+ QString separator = " /[]\" []/" ;
1158
+
1159
+ QString additionString;
1160
+ if (!addition.first .isEmpty () && !addition.second .isEmpty ()) {
1161
+ QJsonDocument doc (addition.second );
1162
+ QString additionJson (doc.toJson (QJsonDocument::Compact));
1163
+ additionString = QString (" %1%2%3" ).arg (addition.first ).arg (separator).arg (additionJson);
1164
+ }
1165
+ QString removalString;
1166
+ if (!removal.first .isEmpty () && !removal.second .isEmpty ()) {
1167
+ QJsonDocument doc (removal.second );
1168
+ QString removalJson (doc.toJson (QJsonDocument::Compact));
1169
+ removalString = QString (" %1%2%3" ).arg (removal.first ).arg (separator).arg (removalJson);
1170
+ }
1171
+
1172
+ QStringList recentlyExported;
1173
+ QVariant currentSetting = SettingsManager::getInstance ().getPrivateSetting (key);
1174
+ if (!currentSetting.isNull () && currentSetting.canConvert <QStringList>()) {
1175
+ recentlyExported = currentSetting.toStringList ();
1176
+ }
1177
+
1178
+ if (!removalString.isEmpty ()) {
1179
+ recentlyExported.removeAll (removalString);
1180
+ }
1181
+
1182
+ if (!additionString.isEmpty ()) {
1183
+ recentlyExported.removeAll (additionString);
1184
+ recentlyExported.insert (0 , additionString);
1185
+ }
1186
+
1187
+ recentlyExported = recentlyExported.mid (0 , 10 );
1188
+
1189
+ SettingsManager::getInstance ().setPrivateSetting (key, recentlyExported);
1190
+
1191
+ int invalidStateCount = 0 ;
1192
+ ui->menuExport_Recent ->clear ();
1193
+ for (QString importString : recentlyExported) {
1194
+ QStringList importParts = importString.split (separator);
1195
+ if (importParts.size () != 2 ) {
1196
+ continue ;
1197
+ }
1198
+ QString pluginName = importParts.at (0 );
1199
+ QSharedPointer<ImportExportInterface> plugin = m_pluginManager->getImporterExporter (pluginName);
1200
+ if (plugin.isNull ()) {
1201
+ continue ;
1202
+ }
1203
+
1204
+ QByteArray pluginStateString = importParts.at (1 ).toUtf8 ();
1205
+ QJsonObject pluginState = QJsonDocument::fromJson (pluginStateString).object ();
1206
+
1207
+ QString menuLabel = plugin->getExportLabelForState (pluginState);
1208
+ if (menuLabel.isEmpty ()) {
1209
+ invalidStateCount++;
1210
+ continue ;
1211
+ }
1212
+ ui->menuExport_Recent ->addAction (
1213
+ menuLabel,
1214
+ [this , pluginName, pluginState]() {
1215
+ this ->requestExportRun (pluginName, pluginState);
1216
+ });
1217
+ }
1218
+
1219
+ ui->menuExport_Recent ->setEnabled (recentlyExported.length () - invalidStateCount > 0 );
1146
1220
}
1147
1221
1148
1222
void MainWindow::on_tb_scrollReset_clicked ()
0 commit comments