Files
pineapple-notepad/documentmanager.h

70 lines
1.9 KiB
C++

#pragma once
#include <QObject>
#include <QHash>
#include <QString>
#include <QStringList>
#include <QTextCodec>
class DocumentManager : public QObject
{
Q_OBJECT
public:
explicit DocumentManager(QObject *parent = nullptr);
~DocumentManager();
// 文档管理
int createNewDocument();
int openDocument(const QString &filePath);
bool saveDocument(int docId);
bool saveDocumentAs(int docId, const QString &filePath);
void closeDocument(int docId);
// 文档信息
QString getDocumentTitle(int docId) const;
QString getDocumentFilePath(int docId) const;
QString getDocumentContent(int docId) const;
QString getDocumentEncoding(int docId) const;
QString getDocumentLanguage(int docId) const;
bool isDocumentModified(int docId) const;
bool isDocumentUntitled(int docId) const;
// 文档内容操作
void setDocumentContent(int docId, const QString &content);
void setDocumentModified(int docId, bool modified);
void setDocumentEncoding(int docId, const QString &encoding);
void setDocumentLanguage(int docId, const QString &language);
// 获取所有文档
QList<int> getAllDocumentIds() const;
int getDocumentCount() const;
signals:
void documentCreated(int docId);
void documentOpened(int docId, const QString &filePath);
void documentSaved(int docId, const QString &filePath);
void documentClosed(int docId);
void documentModified(int docId, bool modified);
void documentTitleChanged(int docId, const QString &title);
private:
struct DocumentInfo {
int id;
QString title;
QString filePath;
QString content;
QString encoding;
QString language;
bool modified;
bool untitled;
};
QHash<int, DocumentInfo> m_documents;
int m_nextDocumentId;
static int s_untitledCounter;
QString generateUntitledName();
QString detectLanguageFromExtension(const QString &filePath);
};