// $Id: DiagMsgDataModel.hpp,v 1.2 2012/02/26 19:50:52 philw Exp $ // Diagnostic Message List QAbstractTableModel // // CLASSES: // class DiagMsgDataModel : public QAbstractTableModel // ... devised for use with QTreeViews (not QTableViews). // // class DiagMsgDataModel::Rec // message line record // class DiagMsgDataModel::Block // block of message line records //-- #ifndef DiagMsgDataModelINCLUDED #define DiagMsgDataModelINCLUDED #ifndef cwReturnStatusINCLUDED #include "cwReturnStatus.hpp" // for okstat #endif #ifndef cwDiagINCLUDED #include "cwDiag.hpp" #endif #include #include //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // ****************************************************** // *** class DiagMsgDataModel : QAbstractTableModel *** // ****************************************************** class DiagMsgDataModel : public QAbstractTableModel { Q_OBJECT public: enum { COL_LNUM = 0, // Column: Line Number COL_CTX = 1, // Column: Context COL_MSG = 2, // Column: Message COL_COUNT = 3 // Number of columns }; public: class Rec; // message line record class Block; // block of message line records private: // Two-level message record list QList _messageBlockList; // Column geometry computations int _ctxMaxCharCnt; // [chars] int _msgMaxCharCnt; // [chars] int _ctxColDataWidth; // [pixels] int _msgColDataWidth; // [pixels] public: DiagMsgDataModel (QObject* parentObj); virtual ~DiagMsgDataModel(); public: // *** Virtual methods from QAbstractTableModel *** int rowCount (const QModelIndex& parentInx=QModelIndex()) const; int columnCount (const QModelIndex& parentInx=QModelIndex()) const; QVariant data (const QModelIndex&, int role=Qt::DisplayRole) const; QVariant headerData (int section, Qt::Orientation, int role=Qt::DisplayRole) const; public: void clearItems(); int itemCount() const; void appendItem (cwDiagLevel, const QString& ctx, const QString& msg, const QWidget* refWid); const Rec& record (int lineInx) const; const QString& ctxStr (int lineInx) const; const QString& msgStr (int lineInx) const; cwDiagLevel level (int lineInx) const; QString displayText (int lineInx, int col) const; QString headerText (int col) const; int ctxColDataWidth() const { return _ctxColDataWidth; } // [pixels] int msgColDataWidth() const { return _msgColDataWidth; } // [pixels] }; //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // ************************************************************* // *** class DiagMsgDataModel : Rec (message line record) *** // ************************************************************* class DiagMsgDataModel::Rec { private: QString _ctxStr; QString _msgStr; cwDiagLevel _level; // See Utils/cwDiag.hpp public: Rec() : _ctxStr (QString::null), _msgStr (QString::null), _level (cwDiagNone) {} Rec (const QString& ctxStr, const QString& msgStr, cwDiagLevel level) : _ctxStr (ctxStr), _msgStr (msgStr), _level (level) {} const QString& ctxStr() const { return _ctxStr; } const QString& msgStr() const { return _msgStr; } cwDiagLevel level() const { return _level; } }; //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // ************************************************************************* // *** class DiagMsgDataModel : Block (block of message line records) *** // ************************************************************************* class DiagMsgDataModel::Block { public: enum { CAPACITY = 1000 }; private: int _count; Rec _recArray [CAPACITY]; public: Block() : _count (0) {} ~Block() { _count = 0; } int recCount() const { return (_count); } bool isEmpty() const { return (_count <= 0); } bool isFull() const { return (_count >= CAPACITY); } okstat appendItem (cwDiagLevel, const QString& ctx, const QString& msg); const Rec& record (int recIndex) const; const QString& ctxStr (int recIndex) const; const QString& msgStr (int recIndex) const; cwDiagLevel level (int recIndex) const; }; #endif // DiagMsgDataModelINCLUDED //--- (end DiagMsgDataModel.hpp) ---