⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 messagemodel.h

📁 QT 开发环境里面一个很重要的文件
💻 H
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the Qt Linguist of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifndef MESSAGEMODEL_H#define MESSAGEMODEL_H#include "metatranslator.h"#include <QAbstractItemModel>#include <QList>#include <QHash>#include <QtCore/QCoreApplication>#include <QtCore/QLocale>class ContextItem;class QIODevice;class MessageItem{public:    MessageItem(const MetaTranslatorMessage &message,        const QString &text, const QString &comment, ContextItem *ctxtI);    inline virtual ~MessageItem() {}    inline virtual bool danger() const {return m_danger;}    void setTranslation(const QString &translation);        void setFinished(bool finished);    void setDanger(bool danger);    inline void setContextItem(ContextItem *ctxtI) {cntxtItem = ctxtI;}    inline ContextItem *contextItem() const {return cntxtItem;}    inline QString context() const {return m.context();}    inline QString sourceText() const {return tx;}    inline QString comment() const {return com;}    inline QString translation() const {return m.translation();}    inline QStringList translations() const { return m.translations(); }    inline void setTranslations(const QStringList &translations) { m.setTranslations(translations); }    inline bool finished() const {return m.type() == MetaTranslatorMessage::Finished;}    inline MetaTranslatorMessage message() const {return m;}    bool compare(const QString &findText, bool matchSubstring, Qt::CaseSensitivity cs)    {        bool found = false;        QString searchText = tx;        if (matchSubstring) {            if (searchText.indexOf(findText,0, cs) >= 0) {                found = true;            }        } else {            if (cs == Qt::CaseInsensitive) {                if (findText.toLower() == searchText.toLower()) {                    found = true;                }            } else {                if ( findText == searchText ) {                    found = true;                }            }        }        return found;    }private:    MetaTranslatorMessage m;    QString tx;    QString com;    bool m_danger;    ContextItem *cntxtItem;};class MessageModel;typedef QList<MetaTranslatorMessage> TML;class ContextItem{public:    ContextItem(QString c, MessageModel *model);    ~ContextItem();    inline bool danger() const {return dangerCount > 0;}    void appendToComment(const QString& x);    void incrementFinishedCount();    void decrementFinishedCount();    inline void incrementDangerCount() {++dangerCount;}    inline void decrementDangerCount() {--dangerCount;}    inline void incrementObsoleteCount() {++obsoleteCount;}    inline bool isContextObsolete() const {return (obsoleteCount == msgItemList.count());}    inline int finishedCount() const {        return m_finishedCount;    }    inline int unFinishedCount() const {        return msgItemList.count() - m_finishedCount - obsoleteCount;    }    inline int obsolete() const {return obsoleteCount;}    inline QString context() const {return ctxt;}    inline QString comment() const {return com;}    inline QString fullContext() const {return com.trimmed();}    inline bool isFinished() const {return unFinishedCount() == 0;}    MessageItem *messageItem(int i);    inline const QList<MessageItem *> messageItemList() const {return msgItemList;}    inline void appendMessageItem(MessageItem *msgItem) {msgItemList.append(msgItem);}    inline int messageItemsInList() const {return msgItemList.count();}    static bool compare(const MessageItem *left, const MessageItem *right);    void sortMessages(int column, Qt::SortOrder order);    bool sortParameters(Qt::SortOrder &so, int &sc) const;    MessageModel *model() {return m_model; }private:    Qt::SortOrder sortOrder;    int sortColumn;    QString com;    QString ctxt;    int m_finishedCount;    int dangerCount;    int obsoleteCount;    QList<MessageItem *> msgItemList;    MessageModel *m_model;};class ContextList : public QList<ContextItem *> {public:    ContextList();    MessageItem *messageItem(int context, int message) const;    ContextItem *contextItem(int context) const;    bool isModified();    void setModified(bool isModified)     {         m_modified = isModified;    }private:    bool m_modified;};class MessageModel : public QAbstractItemModel{    Q_OBJECTpublic:    MessageModel(QObject *parent = 0);    class iterator    {    public:        iterator(MessageModel *model, int contextNo = 0, int itemNo = -1);        iterator(ContextList *contextlist, int contextNo = 0, int itemNo = -1);        iterator(const iterator& other);        MessageItem *current() const;        MessageItem *operator*() const;        iterator &operator=(const iterator& other);        bool operator==(const iterator& other) const        {            return (other.m_contextList == m_contextList && other.m_contextNo == m_contextNo && other.m_itemNo == m_itemNo);        }        bool operator!=(const iterator& other) const        {            return !(*this==other);        }        iterator &operator++();        void reset();        int contextNo() const { return m_contextNo; }        int messageNo() const { return m_itemNo; }    private:        iterator() {}        ContextList *m_contextList;        int m_contextNo;        int m_itemNo;    };public:    iterator begin()    {        return Iterator(0, 0);    }    iterator end()    {        // both contextNo and itemNo points to the item behind the last item for end()        // remember to make sure that begin() == end() for an empty model        return Iterator(cntxtList.count(), cntxtList.count() ? cntxtList.last()->messageItemsInList() : 0);    }    iterator Iterator(int contextNo = 0, int itemNo = 0)    {        return iterator(&cntxtList, contextNo, itemNo);    }    enum {SourceText = 0x1, Translations = 0x2, Comments = 0x4};    // from QAbstractItemModel    void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);    // model index functions    QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;    QModelIndex parent(const QModelIndex& index) const;    int rowCount(const QModelIndex &parent = QModelIndex()) const;    int columnCount(const QModelIndex &parent = QModelIndex()) const;    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;    QVariant headerData(int section, Qt::Orientation orientation,                        int role = Qt::DisplayRole) const;    // Specializations    inline const QList<ContextItem *> contextList() const {return cntxtList;}    inline void appendContextItem(ContextItem *cntxtItem) {cntxtList.append(cntxtItem);}    inline int contextsInList() const {return cntxtList.count();}    bool findMessage(int *contextNo, int *itemNo, const QString &findItem, int where,         bool matchSubstring, Qt::CaseSensitivity cs = Qt::CaseSensitive);    ContextItem *createContextItem(const QString &c)    {        return new ContextItem(c, this);    }    bool finished(const QModelIndex &index);    void updateItem(QModelIndex indx);    void updateAll();    void clearContextList();    static bool compare(const ContextItem *left, const ContextItem *right);    bool sortParameters(Qt::SortOrder &so, int &sc) const;    ContextItem *contextItem(const QModelIndex &indx) const;    MessageItem *messageItem(const QModelIndex &indx) const;    ContextItem *contextItem(int context) const;    MessageItem *messageItem(int context, int message) const;    QModelIndex modelIndex(int context, int message, int column = 0);    void setTranslation(const iterator &it, const QString &translation);    int getMessageCount() const     {        return m_numMessages;    }    bool isEmpty() const    {        return m_numMessages == 0;    }    bool isModified()     {        return cntxtList.isModified();    }    void setModified(bool dirty)    {        cntxtList.setModified(dirty);    }    bool load(const QString &fileName);    bool save(const QString &fileName);    bool release(const QString& fileName,                     bool verbose = false, bool ignoreUnfinished = false,                    Translator::SaveMode mode = Translator::Stripped );    bool release(QIODevice *iod,                     bool verbose = false, bool ignoreUnfinished = false,                    Translator::SaveMode mode = Translator::Stripped );        QTranslator *translator();    MessageItem *findMessage(const char *context, const char *sourcetext, const char *comment = 0) const;    QLocale::Language language() const;    void setLanguage(QLocale::Language lang);    QLocale::Country country() const;    void setCountry(QLocale::Country country);    QStringList normalizedTranslations(const MessageItem &m) const;    void doCharCounting(const QString& text, int& trW, int& trC, int& trCS);    void updateStatistics();    int getNumFinished() { return m_numFinished; }    int getNumNonobsolete() { return m_numNonobsolete; }    int getSrcWords() { return m_srcWords; }    int getSrcChars() { return m_srcChars; }    int getSrcCharsSpc() { return m_srcCharsSpc; }    void incrementFinishedCount()    {        ++m_numFinished;    }    void decrementFinishedCount()    {        if (m_numFinished > 0)            --m_numFinished;    }signals:    void statsChanged(int words, int characters, int cs, int words2, int characters2, int cs2);    void progressChanged(int finishedCount, int oldFinishedCount);    void languageChanged(QLocale::Language lang);private:    Qt::SortOrder sortOrder;    int sortColumn;    QTranslator *m_translator;    ContextList cntxtList;    int m_numFinished;    int m_numNonobsolete;    int m_numMessages;    // For statistics    int m_srcWords;    int m_srcChars;    int m_srcCharsSpc;    QLocale::Language m_language;    QLocale::Country m_country;    friend class iterator;};#endif //MESSAGEMODEL_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -