Files
photog/desktop/mainwindow.h
T

97 lines
2.9 KiB
C++
Raw Normal View History

2026-08-26 00:28:35 +02:00
#pragma once
#include <QList>
2026-08-26 00:28:35 +02:00
#include <QMainWindow>
#include <QStringList>
2026-08-26 00:28:35 +02:00
#include "settings.h"
class QDateEdit;
class QLabel;
class QLineEdit;
class QPushButton;
class QSpinBox;
2026-08-26 00:28:35 +02:00
class QStackedWidget;
class QVBoxLayout;
class PhotoItemWidget;
class ManagePostWidget;
class UploadClient;
2026-08-26 00:28:35 +02:00
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
private:
QWidget *buildSettingsPage();
QWidget *buildPostPage();
QWidget *buildManagePage();
2026-08-26 00:28:35 +02:00
void showSettings();
void showPost();
void showManage();
2026-08-26 00:28:35 +02:00
void saveAndTest();
void chooseImages();
void addItem(const QString &path);
void removeItem(PhotoItemWidget *item);
void clearItems();
2026-08-26 00:28:35 +02:00
void submit();
void pumpQueue(); // starts queued items up to the concurrency cap
void startItem(PhotoItemWidget *item);
int inFlightCount() const; // items currently preparing or uploading
void refreshPosting(); // updates the Post button + summary from item states
2026-08-26 00:28:35 +02:00
// Manage page.
UploadClient *manageClient(); // lazily-built, lives as long as the window
void loadManage(); // fetches the post list and thumbnails
void clearManageItems();
void editItem(ManagePostWidget *item);
void deleteItem(ManagePostWidget *item);
// Tag autocomplete.
void refreshTags(); // fetches /api/tags.json
void applyTagSuggestions(); // pushes the list onto every post card
2026-08-26 00:28:35 +02:00
Settings m_settings;
QStackedWidget *m_stack = nullptr;
// Settings page
QLineEdit *m_baseUrl = nullptr;
QLineEdit *m_username = nullptr;
QLineEdit *m_password = nullptr;
QSpinBox *m_concurrency = nullptr;
2026-08-26 00:28:35 +02:00
QPushButton *m_saveButton = nullptr;
QPushButton *m_settingsBack = nullptr;
QLabel *m_settingsStatus = nullptr;
// Post page
QVBoxLayout *m_itemsLayout = nullptr; // holds the PhotoItemWidgets
QList<PhotoItemWidget *> m_items;
QLabel *m_emptyHint = nullptr;
2026-08-26 00:28:35 +02:00
QPushButton *m_postButton = nullptr;
QLabel *m_postSummary = nullptr;
2026-08-26 00:28:35 +02:00
QLabel *m_lastPost = nullptr;
// Bulk-post state: items waiting for a free upload slot, plus the batch's
// credentials captured once at submit time.
QList<PhotoItemWidget *> m_queue;
QString m_batchBaseUrl;
QString m_batchUsername;
QString m_batchPassword;
QString m_batchCacheDir;
// Manage page
QVBoxLayout *m_manageLayout = nullptr; // holds the ManagePostWidgets
QList<ManagePostWidget *> m_manageItems;
QLabel *m_manageEmptyHint = nullptr;
QLabel *m_manageStatus = nullptr;
QPushButton *m_manageRefresh = nullptr;
UploadClient *m_manageClient = nullptr; // lazily created, reused for manage ops
// Known tag names for autocomplete, shared by the post cards and the edit
// dialog. Best-effort: empty until /api/tags.json arrives.
QStringList m_tagSuggestions;
2026-08-26 00:28:35 +02:00
};