20#ifndef ORES_QT_APP_VERSION_DETAIL_DIALOG_HPP
21#define ORES_QT_APP_VERSION_DETAIL_DIALOG_HPP
27#include "ores.qt/ClientManager.hpp"
28#include "ores.qt/DetailDialogBase.hpp"
29#include "ores.logging/make_logger.hpp"
30#include "ores.compute.api/domain/app.hpp"
31#include "ores.compute.api/domain/app_version.hpp"
32#include "ores.compute.api/domain/app_version_platform.hpp"
33#include "ores.compute.api/messaging/platform_protocol.hpp"
35class QNetworkAccessManager;
38class AppVersionDetailDialog;
54 inline static std::string_view logger_name =
55 "ores.qt.app_version_detail_dialog";
57 [[nodiscard]]
static auto& lg() {
59 static auto instance = make_logger(logger_name);
68 void setUsername(
const std::string& username);
70 void setCreateMode(
bool createMode);
71 void setReadOnly(
bool readOnly);
72 void setHttpBaseUrl(
const std::string& url);
75 void app_versionSaved(
const QString& code);
76 void app_versionDeleted(
const QString& code);
80 void onDeleteClicked();
81 void onCodeChanged(
const QString& text);
82 void onFieldChanged();
83 void onAddPlatformClicked();
84 void onRemovePlatformClicked();
85 void onBrowsePackageRowClicked();
86 void onRetryPackageRowClicked();
100 struct PlatformEntry {
103 std::string display_name;
115 enum class State { NoFile, Selected, Uploading, Uploaded, Failed };
117 std::string platform_id;
118 std::string platform_code;
119 std::string platform_name;
122 State state = State::NoFile;
127 void setupConnections();
129 void loadPlatforms();
130 void loadAssignedPlatforms(
const std::string& app_version_id);
131 void populateAppCombo();
132 void populatePlatformsTab();
133 void syncPackagesTab();
134 void updatePackagesTableRow(
int row);
135 void setPackageRowState(
int row, PackageRow::State state,
136 const QString& error = {});
137 void updateUiFromVersion();
138 void updateVersionFromUi();
139 void updateSaveButtonState();
140 bool validateInput();
142 void uploadPendingPackages(std::function<
void(
bool, QString)> done);
145 Ui::AppVersionDetailDialog* ui_;
146 ClientManager* clientManager_;
147 QNetworkAccessManager* networkManager_;
148 std::string username_;
151 std::vector<PackageRow> package_rows_;
152 std::vector<AppEntry> appEntries_;
153 std::vector<PlatformEntry> availablePlatforms_;
154 bool createMode_{
true};
155 bool readOnly_{
false};
156 bool hasChanges_{
false};
157 bool saveInProgress_{
false};
Implements logging infrastructure for ORE Studio.
Definition boost_severity.hpp:28
Qt-based graphical user interface for ORE Studio.
Definition AccountController.hpp:32
A versioned wrapper+engine bundle for a compute grid application.
Definition app_version.hpp:37
Manages the lifecycle of the NATS client and login state.
Definition ClientManager.hpp:123
Base class for all detail dialogs.
Definition DetailDialogBase.hpp:75
Widget displaying the 6 standard record provenance fields.
Definition ProvenanceWidget.hpp:40
Detail dialog for viewing and editing app version records.
Definition AppVersionDetailDialog.hpp:50
ProvenanceWidget * provenanceWidget() const override
Returns the promoted ProvenanceWidget (named "provenanceWidget" in .ui).
Definition AppVersionDetailDialog.cpp:80
bool hasUnsavedChanges() const override
Definition AppVersionDetailDialog.hpp:92
QTabWidget * tabWidget() const override
Returns the dialog's QTabWidget (named "tabWidget" in .ui).
Definition AppVersionDetailDialog.cpp:72
QWidget * provenanceTab() const override
Returns the Provenance tab widget (named "provenanceTab" in .ui).
Definition AppVersionDetailDialog.cpp:76