#include "PaiJobErrorInfoItem.h" #include "PaiJobErrorInfoWidget.h" #include "PaiJobErrorInfoBar.h" #include #include #include #include #include #include #include #include const int LIST_VALUE_MAX = 6; //列表框的最大条数 namespace pai { namespace gui { PaiArrowButton::PaiArrowButton(QString text, QWidget* pParent) : QPushButton(pParent) { SetBtnIcon(text); } void PaiArrowButton::SetUpIcon(const QString& icon) { m_UpIcon = icon; } void PaiArrowButton::SetDownIcon(const QString& icon) { m_DownIcon = icon; } void PaiArrowButton::enterEvent(QEvent *pEevent) { SetBtnIcon(m_UpIcon); QPushButton::enterEvent(pEevent); } void PaiArrowButton::leaveEvent(QEvent * pEevent) { SetBtnIcon(m_DownIcon); QPushButton::leaveEvent(pEevent); } void PaiArrowButton::SetBtnIcon(const QString& icon) { QIcon IConUp; QPixmap pixmap0(icon); IConUp.addPixmap(pixmap0); resize(510, 15); setIcon(IConUp); setIconSize(QSize(510, 15)); setAutoDefault(true); } PaiJobErrorInfoItemAgentWgt::PaiJobErrorInfoItemAgentWgt(QWidget *pParent, PaiJobErrorInfoItem *pItem) : QWidget(pParent) { m_pJobItem = pItem; QPalette palFather = palette(); palFather.setColor(QPalette::Background, Qt::white); setPalette(palFather); resize(680, 281); m_pBtnUp = new PaiArrowButton(":/log_Error_upmoren_tint.png", this); m_pBtnUp->SetUpIcon(":/log_Error_upmoren.png"); m_pBtnUp->SetDownIcon(":/log_Error_upmoren_tint.png"); m_pBtnDown = new PaiArrowButton(":/log_Error_downmoren_tint.png", this); m_pBtnDown->SetUpIcon(":/log_Error_downmoren.png"); m_pBtnDown->SetDownIcon(":/log_Error_downmoren_tint.png"); m_pBtnDown->move(0, 255); connect(m_pBtnUp, SIGNAL(clicked(bool)), this, SLOT(UpErrorBar(bool))); connect(m_pBtnDown, SIGNAL(clicked(bool)), this, SLOT(DownErrorBar(bool))); } PaiJobErrorInfoItemAgentWgt::~PaiJobErrorInfoItemAgentWgt() { } void PaiJobErrorInfoItemAgentWgt::setScroBarValue(QScrollBar *pScrollBar) { m_pVerScrollBar = pScrollBar; } void PaiJobErrorInfoItemAgentWgt::UpErrorBar(bool) { if(m_pJobItem) { m_pJobItem->UpButtonErrorInfo(); } } void PaiJobErrorInfoItemAgentWgt::DownErrorBar(bool) { if(m_pJobItem) { m_pJobItem->DownButtonErrorInfo(); } } void PaiJobErrorInfoItemAgentWgt::HideItem() { if(m_pJobItem) { m_pJobItem->hide(); } } PaiJobErrorInfoItem::PaiJobErrorInfoItem(QGraphicsItem *PaiJobErrorInfoItem) : QGraphicsItem(PaiJobErrorInfoItem) { m_width = 10; m_height = 10; QVBoxLayout *playout = new QVBoxLayout(); m_pErrorAgentWgt = new PaiJobErrorInfoItemAgentWgt(NULL,this); QWidget *pParent = new QWidget(m_pErrorAgentWgt); QPalette pal = pParent->palette(); pal.setColor(QPalette::Background, Qt::white); pParent->setPalette(pal); m_pErrorAgentWgt->hide(); pParent->setLayout(playout); pParent->resize(680,230); pParent->move(0,20); m_pJobErrorInofDlg = new PaiJobErrorInofWidget(pParent); QGraphicsProxyWidget *proxyWidgetItem = new QGraphicsProxyWidget(this); proxyWidgetItem->setWidget(m_pErrorAgentWgt); m_pscrollArea = new QScrollArea(pParent); QPalette pal1 = m_pscrollArea->palette(); pal1.setColor(QPalette::Background, Qt::white); m_pscrollArea->setPalette(pal); m_pErrorAgentWgt->setScroBarValue(m_pscrollArea->verticalScrollBar()); m_pscrollArea->move(-1,-1); m_pscrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_pscrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_pscrollArea->setWidget(m_pJobErrorInofDlg); m_pscrollArea->resize(685,240); m_pscrollArea->show(); m_UpdatePos = 1; } PaiJobErrorInfoItem::~PaiJobErrorInfoItem() { } int PaiJobErrorInfoItem::type() const { return Type; } void PaiJobErrorInfoItem::UpButtonErrorInfo() { if((m_pJobErrorInofDlg != NULL) && (m_pJobErrorInofDlg->GetEnableExpand())) { //获取展开项的索引号 int index = GetExpandedIndex(); if(index < m_pJobErrorInofDlg->GetErrorBarList().size()) { QList errorBarPosList = m_pJobErrorInofDlg->GetErrorBarList(); //关闭展开项 CloseExpanded(errorBarPosList); //打开下一项 if(errorBarPosList.at(index).pJobErrorBar != NULL) { errorBarPosList.at(index).pJobErrorBar->move(0,0); errorBarPosList.at(index).pJobErrorBar->show(); errorBarPosList.at(index).pJobErrorBar->GetDownWidget()->show(); } //记录当前被展开项 m_pJobErrorInofDlg->SetExpandedError(errorBarPosList.at(index).pJobErrorBar); } } if(m_errors.size() < LIST_VALUE_MAX) { return; } else { //判断更新条目不能超过存储日志的列表 if(m_errors.size() <= (LIST_VALUE_MAX - 1 + m_UpdatePos)) { return; } if(m_pJobErrorInofDlg != NULL) { m_pJobErrorInofDlg->AddErrorInofToBar(m_errors.at(5 + m_UpdatePos)); } } m_UpdatePos++; } void PaiJobErrorInfoItem::DownButtonErrorInfo() { if((m_pJobErrorInofDlg != NULL) && (m_pJobErrorInofDlg->GetEnableExpand())) { //获取当前被展开的infoBar索引 int index = GetExpandedIndex(); if(index > 1) { QList errorBarPosList = m_pJobErrorInofDlg->GetErrorBarList(); //关闭展开项 CloseExpanded(errorBarPosList); //打开下一项 if(errorBarPosList.at(index - 2).pJobErrorBar) { errorBarPosList.at(index-2).pJobErrorBar->move(0,0); errorBarPosList.at(index-2).pJobErrorBar->show(); errorBarPosList.at(index-2).pJobErrorBar->GetDownWidget()->show(); } //记录当前被展开项 m_pJobErrorInofDlg->SetExpandedError(errorBarPosList.at(index-2).pJobErrorBar); } } if(m_errors.size() < LIST_VALUE_MAX) { return; } else { if(m_UpdatePos < 1) { m_UpdatePos = 1; } m_UpdatePos--; if(m_pJobErrorInofDlg) { m_pJobErrorInofDlg->AddErrorInofToBar(m_errors.at(5 + m_UpdatePos)); } } } void PaiJobErrorInfoItem::ShowErrorInfoWgt() { if((m_pErrorAgentWgt != NULL) && (m_pErrorAgentWgt->isHidden())) { m_pErrorAgentWgt->show(); } } QRectF PaiJobErrorInfoItem::boundingRect() const { qreal dPenWidth = 2; qreal topLeftX = -(m_width + dPenWidth) / 2; qreal topLeftY = -(m_height + dPenWidth) / 2; return QRectF(topLeftX, topLeftY, m_width + dPenWidth, m_height + dPenWidth); } void PaiJobErrorInfoItem::AddErrorInfo(const QString& error) { if(m_pJobErrorInofDlg != NULL) { m_errors = error.split("[ERROR]"); for(int i = 0; i < m_errors.size() - 1; ++i) { m_pJobErrorInofDlg->AddErrorInofToBar(m_errors.at(i + 1)); } } } int PaiJobErrorInfoItem::GetExpandedIndex() const { if((m_pJobErrorInofDlg != NULL) && (m_pJobErrorInofDlg->GetExpandedError() != NULL)) { QString infoBarText = m_pJobErrorInofDlg->GetExpandedError()->GetLabel()->text(); int index = (infoBarText.data()[infoBarText.size()-1]).digitValue(); return index; } else { return -1; } } void PaiJobErrorInfoItem::CloseExpanded(QList &errorList) { if(m_pJobErrorInofDlg) { for(int i = 0; i < errorList.size(); ++i) { if((errorList.at(i).pJobErrorBar != NULL) && (errorList.at(i).pJobErrorBar == m_pJobErrorInofDlg->GetExpandedError())) { errorList.at(i).pJobErrorBar->move(0,errorList[i].yPos); errorList.at(i).pJobErrorBar->hide(); if(!errorList.at(i).pJobErrorBar->GetDownWidget()->isHidden()) { errorList.at(i).pJobErrorBar->GetDownWidget()->hide(); } break; } } } } bool PaiJobErrorInfoItem::EnableError() { if((m_pJobErrorInofDlg != NULL) && (0 == (m_pJobErrorInofDlg->GetErrorBarList().size()))) { return false; } else { return true; } } void PaiJobErrorInfoItem::UpdatePosition() { } void PaiJobErrorInfoItem::paint(QPainter */*pPainter*/, const QStyleOptionGraphicsItem */*pOption*/, QWidget */*pWidget*/) { // TODO } } }