Skip to content

Commit

Permalink
qt: Unify handling of file loading (from UI or from CLI)
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonKagstrom committed Jul 7, 2024
1 parent a153c62 commit 2188dea
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 34 deletions.
16 changes: 4 additions & 12 deletions qt/emilpro/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,11 @@ main(int argc, char* argv[])

MainWindow w;

w.show();

if (argc > 1)
{
if (auto err = w.LoadFile(argv[1]); err)
{
fmt::print("Error loading file: {}\n\n", MainWindow::LoadErrorToString(*err));
Usage(argv[0]);
}
w.TriggerOpenFile(argv[1]);
}

w.show();

auto out = QApplication::exec();
w.UpdatePreferences();

return out;
return QApplication::exec();
}
37 changes: 23 additions & 14 deletions qt/emilpro/mainwindow.cc
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,19 @@ auto kSymbolDataColor = kSectionDataColor;
auto kSymbolDynamicDataColor = QBrush("salmon");
auto kSymbolDynamicColor = QBrush("lightgreen");

} // namespace

const char*
MainWindow::LoadErrorToString(LoadError error)
LoadErrorToString(MainWindow::LoadError error)
{
using LE = MainWindow::LoadError;

constexpr auto kErrorStrings = std::array {
std::pair {LoadError::kFileNotFound, "File not found"},
std::pair {LoadError::kParseError, "Parse error"},
std::pair {LoadError::kUnknownArchitecture, "Unknown architecture"},
std::pair {LE::kFileNotFound, "File not found"},
std::pair {LE::kParseError, "Parse error"},
std::pair {LE::kUnknownArchitecture, "Unknown architecture"},
};

if (auto it = std::find_if(kErrorStrings.begin(),
kErrorStrings.end(),
[error](auto& p) { return p.first == error; });
if (auto it =
std::ranges::find_if(kErrorStrings, [error](auto& p) { return p.first == error; });
it != kErrorStrings.end())
{
return it->second;
Expand All @@ -53,6 +52,8 @@ MainWindow::LoadErrorToString(LoadError error)
return "";
}

} // namespace

MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent)
, m_ui(new Ui::MainWindow)
Expand Down Expand Up @@ -96,6 +97,12 @@ MainWindow::~MainWindow()
delete m_ui;
}

void
MainWindow::TriggerOpenFile(const char* filename)
{
emit on_LoadFile(filename);
}

std::optional<MainWindow::LoadError>
MainWindow::LoadFile(const std::string& filename, std::optional<emilpro::Machine> machine_hint)
{
Expand Down Expand Up @@ -319,6 +326,12 @@ MainWindow::on_action_Open_triggered(bool activated)
return;
}

on_LoadFile(filename);
}

void
MainWindow::on_LoadFile(const QString& filename)
{
auto err = LoadFile(filename.toStdString());
if (err)
{
Expand Down Expand Up @@ -347,6 +360,7 @@ MainWindow::on_action_Open_triggered(bool activated)
}
}


void
MainWindow::on_action_Quit_triggered(bool activated)
{
Expand Down Expand Up @@ -1053,11 +1067,6 @@ MainWindow::UpdateHistoryView()
m_ui->addressHistoryListView->setCurrentIndex(idx);
}

void
MainWindow::UpdatePreferences()
{
}

const QString&
MainWindow::LookupSourceFile(std::string_view path)
{
Expand Down
15 changes: 7 additions & 8 deletions qt/emilpro/mainwindow.hh
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,7 @@ public:
explicit MainWindow(QWidget* parent = nullptr);
~MainWindow() final;

/// Parse a file, and return nullptr if successful, otherwise an error code
std::optional<LoadError> LoadFile(const std::string& filename,
std::optional<emilpro::Machine> machine_hint = std::nullopt);

static const char* LoadErrorToString(LoadError error);

// On quit etc
void UpdatePreferences();
void TriggerOpenFile(const char *filename);

private slots:
void on_symbolTableView_activated(const QModelIndex& index);
Expand Down Expand Up @@ -86,7 +79,13 @@ private slots:
void on_locationLineEdit_textChanged(const QString& text);
void on_locationLineEdit_returnPressed();

void on_LoadFile(const QString &filename);

private:
/// Parse a file, and return nullptr if successful, otherwise an error code
std::optional<LoadError> LoadFile(const std::string& filename,
std::optional<emilpro::Machine> machine_hint = std::nullopt);

void SetupSectionView();

void SetupSymbolView();
Expand Down

0 comments on commit 2188dea

Please sign in to comment.