rssguard/src/librssguard/services/abstract/gui/formaccountdetails.h
2021-05-07 07:19:39 +02:00

84 lines
1.9 KiB
C++

// For license of this file, see <project-root-folder>/LICENSE.md.
#ifndef FORMACCOUNTDETAILS_H
#define FORMACCOUNTDETAILS_H
#include <QDialog>
#include "ui_formaccountdetails.h"
#include "gui/networkproxydetails.h"
#include "miscellaneous/application.h"
#include "miscellaneous/databasefactory.h"
#include "miscellaneous/databasequeries.h"
class ServiceRoot;
class FormAccountDetails : public QDialog {
Q_OBJECT
public:
explicit FormAccountDetails(const QIcon& icon, QWidget* parent = nullptr);
template<class T>
T* addEditAccount(T* account_to_edit = nullptr);
template<class T>
T* account() const;
protected slots:
// Applies changes.
// NOTE: This must be reimplemented in subclasses. Also this base
// implementation must be called first.
virtual void apply();
protected:
void activateTab(int index);
void clearTabs();
void insertCustomTab(QWidget* custom_tab, const QString& title, int index);
// Sets the account which will be edited.
// NOTE: This must be reimplemented in subclasses. Also this
// base implementation must be called first.
virtual void loadAccountData();
private:
void createConnections();
protected:
Ui::FormAccountDetails m_ui;
NetworkProxyDetails* m_proxyDetails;
ServiceRoot* m_account;
bool m_creatingNew;
};
template<class T>
inline T* FormAccountDetails::addEditAccount(T* account_to_edit) {
m_creatingNew = account_to_edit == nullptr;
if (m_creatingNew) {
m_account = new T();
}
else {
m_account = account_to_edit;
}
// Load custom logic for account data loading.
loadAccountData();
if (exec() == QDialog::DialogCode::Accepted) {
return account<T>();
}
else {
return nullptr;
}
}
template<class T>
inline T* FormAccountDetails::account() const {
return qobject_cast<T*>(m_account);
}
#endif // FORMACCOUNTDETAILS_H