#ifndef QINFOLISTWIDGET_H #define QINFOLISTWIDGET_H #include #include #include enum InfoType { Info, Event, Warning, Error, Succeed }; enum LevelType { None, Lower, Normal, Higher }; class QInfoListWidget; class QBaseListWidgetItem : public QListWidgetItem { public: QBaseListWidgetItem(const QString &text, InfoType it, LevelType lt); virtual ~QBaseListWidgetItem() {} void AppentToWidget(QInfoListWidget* container, bool insertFront = true); protected: virtual QColor FrontColor() const; virtual QColor BackgroundColor() const; InfoType infoType; LevelType levelType; }; class QInfoListWidgetItem : public QBaseListWidgetItem { public: QInfoListWidgetItem(const QString &text, LevelType lt = None); virtual ~QInfoListWidgetItem() {} }; class QWarnListWidgetItem : public QBaseListWidgetItem { public: QWarnListWidgetItem(const QString& text, LevelType lt = None) :QBaseListWidgetItem(text, InfoType::Warning, lt) {} virtual ~QWarnListWidgetItem() {} private: QColor FrontColor() const; }; class QLightWarnListWidgetItem : public QBaseListWidgetItem { public: QLightWarnListWidgetItem(const QString& text, LevelType lt = None) :QBaseListWidgetItem(text, InfoType::Warning, lt) {} virtual ~QLightWarnListWidgetItem() {} private: QColor FrontColor() const; QColor BackgroundColor() const; }; class QErrorListWidgetItem : public QBaseListWidgetItem { public: QErrorListWidgetItem(const QString &text, LevelType lt = None) :QBaseListWidgetItem(text, InfoType::Error, lt){} virtual ~QErrorListWidgetItem() {} private: QColor FrontColor() const; }; class QLightErrorListWidgetItem : public QBaseListWidgetItem { public: QLightErrorListWidgetItem(const QString &text, LevelType lt = None) :QBaseListWidgetItem(text, InfoType::Error, lt){} virtual ~QLightErrorListWidgetItem() {} private: QColor FrontColor() const; QColor BackgroundColor() const; }; class QTipErrorListWidgetItem : public QBaseListWidgetItem { public: QTipErrorListWidgetItem(const QString &text, LevelType lt = None) :QBaseListWidgetItem(text, InfoType::Error, lt){} virtual ~QTipErrorListWidgetItem() {} private: QColor FrontColor() const; QColor BackgroundColor() const; }; class QTipListWidgetItem : public QBaseListWidgetItem { public: QTipListWidgetItem(const QString &text) :QBaseListWidgetItem(text, InfoType::Error, Higher){ setTextAlignment(Qt::AlignCenter); } virtual ~QTipListWidgetItem() {} private: QColor FrontColor() const; QColor BackgroundColor() const; }; class QConsoleListWidgetItem : public QBaseListWidgetItem { public: QConsoleListWidgetItem(const QString &text) :QBaseListWidgetItem(text, InfoType::Info, None) { } virtual ~QConsoleListWidgetItem() {} private: QColor FrontColor() const; QColor BackgroundColor() const; }; class QInfoListWidget : public QListWidget { Q_OBJECT public: QInfoListWidget(QWidget* parent = nullptr); virtual ~QInfoListWidget() {} virtual void PostInit() { qDebug("parent::PostInit"); } virtual void RemoveDuplicateItem() { } protected: void Init(); void WheelEvent(QWheelEvent* event); }; class QLeftInfoListWidget : public QInfoListWidget { Q_OBJECT public: QLeftInfoListWidget(QWidget* parent = nullptr) :QInfoListWidget(parent){PostInit();} virtual ~QLeftInfoListWidget() {} virtual void PostInit() override; }; class QRightInfoListWidget : public QInfoListWidget { Q_OBJECT public: QRightInfoListWidget(QWidget* parent = nullptr) :QInfoListWidget(parent){PostInit();} virtual ~QRightInfoListWidget() {} virtual void PostInit() override; }; #endif // QINFOLISTWIDGET_H