55 lines
2.0 KiB
C++
55 lines
2.0 KiB
C++
#pragma once
|
||
#include <QObject>
|
||
#include <QString>
|
||
#include <string>
|
||
#include <vector>
|
||
|
||
#include "repo/IProjectRepository.hpp"
|
||
|
||
namespace geopro::controller {
|
||
|
||
// 导航状态机:编排 IProjectRepository,持有当前 空间/项目 状态,经信号驱动 UI。不持有 widget。
|
||
class WorkbenchNavController : public QObject {
|
||
Q_OBJECT
|
||
public:
|
||
explicit WorkbenchNavController(data::IProjectRepository& repo, QObject* parent = nullptr);
|
||
|
||
void start(); // 启动:拉空间 → 项目 → 结构
|
||
|
||
QString currentCrsCode() const { return QString::fromStdString(currentCrsCode_); }
|
||
|
||
public slots:
|
||
void switchWorkspace(const QString& tenantId);
|
||
void switchProject(const QString& projectId);
|
||
void selectTm(const QString& tmObjectId);
|
||
void loadMoreData();
|
||
void loadMoreFiles();
|
||
|
||
signals:
|
||
void busyChanged(bool busy);
|
||
void workspacesLoaded(const std::vector<geopro::data::Workspace>& list, const QString& currentId);
|
||
void projectsLoaded(const std::vector<geopro::data::ProjectSummary>& list,
|
||
const QString& currentId, int total);
|
||
void structureLoaded(const QString& projectName, const std::vector<geopro::data::StructNode>& nodes);
|
||
void datasetsLoaded(const QString& tmObjectId, const std::vector<geopro::data::DsRow>& rows,
|
||
int total, bool append);
|
||
void filesLoaded(const QString& tmObjectId, const std::vector<geopro::data::DsRow>& rows,
|
||
int total, bool append);
|
||
void loadFailed(const QString& stage, const QString& message);
|
||
|
||
private:
|
||
void loadProjectsAndStructure(); // start + switchWorkspace 共用
|
||
|
||
data::IProjectRepository& repo_;
|
||
bool busy_ = false;
|
||
std::vector<data::ProjectSummary> lastProjects_;
|
||
std::string currentWorkspaceId_, currentProjectId_, currentProjectName_, currentCrsCode_;
|
||
std::string currentTmId_;
|
||
int dataPageNo_ = 0;
|
||
int filePageNo_ = 0;
|
||
int dataTotal_ = 0;
|
||
int fileTotal_ = 0;
|
||
};
|
||
|
||
} // namespace geopro::controller
|