9 namespace gp = google::protobuf;
15 ui =
new Ui::ProtobufLoader;
24 QString theme = settings.value(
"Preferences::theme",
"light").toString();
25 ui->pushButtonRemove->setIcon(
LoadSvg(
":/resources/svg/trash.svg", theme));
31 QString last_type = settings.value(
"ProtobufParserCreator.lastType").toString();
32 int combo_index =
ui->comboBox->findText(last_type, Qt::MatchExactly);
33 if( !last_type.isEmpty() && combo_index != -1)
35 ui->comboBox->setCurrentIndex(combo_index);
39 connect(
ui->comboBox, qOverload<const QString&>(&QComboBox::currentIndexChanged),
48 QMessageBox::warning(
nullptr, tr(
"Error loading file"),
49 tr(
"File %1 does not exist").
arg(filename),
53 file.open(QIODevice::ReadOnly);
55 QFileInfo fileinfo(filename);
56 QString file_basename = fileinfo.fileName();
62 _source_tree.MapPath(
"", fileinfo.absolutePath().toStdString());
71 if(error_collector.
errors().size() > 0)
73 QMessageBox::warning(
nullptr,
"Error parsing Proto file",
74 error_collector.
errors().front(),
80 ui->loadedProto->setText(file_basename);
82 ui->comboBox->clear();
87 auto descriptor = info.
file_descriptor->FindMessageTypeByName(type_name);
88 QString type_qname = QString::fromStdString(type_name);
90 ui->comboBox->addItem(type_qname);
97 ui->listWidget->clear();
98 ui->protoPreview->clear();
102 auto include_list = settings.value(
"ProtobufParserCreator.include_dirs").toStringList();
103 for (
const auto& include_dir: include_list)
105 QDir path_dir(include_dir);
106 if (path_dir.exists())
108 ui->listWidget->addItem(include_dir);
112 ui->listWidget->sortItems();
114 auto filename = settings.value(
"ProtobufParserCreator.protofile").toString();
115 if( !filename.isEmpty() ){
123 QStringList include_list;
124 for (
int row=0; row<
ui->listWidget->count(); row++)
126 include_list +=
ui->listWidget->item(row)->text();
128 settings.setValue(
"ProtobufParserCreator.include_dirs", include_list);
139 const std::string& schema,
142 QString descriptor_name = type_name.empty() ?
143 ui->comboBox->currentText() :
144 QString::fromStdString(type_name);
150 throw std::runtime_error(
"ParserFactoryProtobuf: can't find the descriptor");
152 auto selected_descriptor = descr_it->second;
153 return std::make_shared<ProtobufParser>(topic_name, selected_descriptor,
data );
157 gp::FileDescriptorSet field_set;
158 if (!field_set.ParseFromArray(schema.data(), schema.size()))
160 throw std::runtime_error(
"failed to parse schema data");
163 return std::make_shared<ProtobufParser>(topic_name,
type_name, field_set,
data );
170 QString directory_path =
171 settings.value(
"ProtobufParserCreator.loadDirectory", QDir::currentPath()).toString();
173 QString dirname = QFileDialog::getExistingDirectory(
_widget, tr(
"Load StyleSheet"), directory_path);
174 if (dirname.isEmpty())
178 settings.setValue(
"ProtobufParserCreator.loadDirectory", dirname);
179 if(
ui->listWidget->findItems(dirname, Qt::MatchExactly).empty() )
181 ui->listWidget->addItem( dirname );
182 ui->listWidget->sortItems();
190 QString directory_path =
191 settings.value(
"ProtobufParserCreator.loadDirectory", QDir::currentPath()).toString();
193 QString filename = QFileDialog::getOpenFileName(
_widget, tr(
"Load StyleSheet"),
194 directory_path, tr(
"(*.proto)"));
195 if (filename.isEmpty())
202 directory_path = QFileInfo(filename).absolutePath();
203 settings.setValue(
"ProtobufParserCreator.loadDirectory", directory_path);
210 auto selected =
ui->listWidget->selectedItems();
212 while(!selected.isEmpty())
214 auto item = selected.front();
215 delete ui->listWidget->takeItem(
ui->listWidget->row(item));
216 selected.pop_front();
229 settings.setValue(
"ProtobufParserCreator.lastType", text);
MessageParserPtr createParser(const std::string &topic_name, const std::string &type_name, const std::string &schema, PlotDataMapRef &data) override
~ParserFactoryProtobuf() override
google::protobuf::compiler::DiskSourceTree _source_tree
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
const QPixmap & LoadSvg(QString filename, QString style_name="light")
std::shared_ptr< MessageParser > MessageParserPtr
void importFile(QString filename)
std::string type_name(lua_State *L, type t)
std::unique_ptr< google::protobuf::compiler::Importer > _importer
const T & move(const T &v)
std::map< QString, const google::protobuf::Descriptor * > descriptors
void onIncludeDirectory()
const google::protobuf::FileDescriptor * file_descriptor
void onComboChanged(const QString &text)
const QStringList & errors()