#include "ewindowattr.h" #include "ui_ewindowattr.h" #include "etext.h" #include "ephoto.h" #include "emovie.h" #include "egif.h" #include "edclock.h" #include "eaclock.h" #include "etimer.h" #include "ewindow.h" #include "etemp.h" #include "eweather.h" eWindowAttr::eWindowAttr(eWindow::Data &data, QWidget *parent) : eAttr(parent), ui(new Ui::eWindowAttr), m_attr(data) { ui->setupUi(this); ui->wList->setIconSize(QSize(20, 20)); ui->wList->setProperty("ssType", "elementWindow"); ui->wList->setProperty("ssName", "elementList"); std::sort(data.eList.begin(), data.eList.end(), [](eObject *a, eObject *b){ return a->zValue() < b->zValue(); }); foreach(eObject *e, data.eList) { restoreItem(e); } auto menu = new QMenu(); menu->addAction(QIcon(":/res/ProgramManager/EditProgram/Text.png"), tr("Text")) ->setData(eObject::Text); menu->addAction(QIcon(":/res/ProgramManager/EditProgram/Photo.png"), tr("Photo")) ->setData(eObject::Photo); menu->addAction(QIcon(":/res/ProgramManager/EditProgram/Movie.png"), tr("Movie")) ->setData(eObject::Movie); menu->addAction(QIcon(":/res/ProgramManager/EditProgram/Gif.png"), tr("Gif")) ->setData(eObject::Gif); menu->addAction(QIcon(":/res/ProgramManager/EditProgram/DClock.png"), tr("DClock")) ->setData(eObject::DClock); menu->addAction(QIcon(":/res/ProgramManager/EditProgram/AClock.png"), tr("AClock")) ->setData(eObject::AClock); // menu->addAction(QIcon(":/res/ProgramManager/EditProgram/Office.png"), tr("Office")) ->setData(eObject::Office); // menu->addAction(QIcon(":/res/ProgramManager/EditProgram/Temp.png"), tr("Temp")) ->setData(eObject::Temp); // menu->addAction(QIcon(":/res/ProgramManager/EditProgram/Weather.png"), tr("Weather")) ->setData(eObject::Weather); // menu->addAction(QIcon(":/res/ProgramManager/EditProgram/Rss.png"), tr("Rss")) ->setData(eObject::Rss); // menu->addAction(QIcon(":/res/ProgramManager/EditProgram/Timer.png"), tr("Timer")) ->setData(eObject::Timer); // menu->addAction(QIcon(":/res/ProgramManager/EditProgram/ColorText.png"), tr("ColorText"))->setData(eObject::ColorText); // menu->addAction(QIcon(":/res/ProgramManager/EditProgram/Window.png"), tr("Window")) ->setData(eObject::Window); ui->wAdd->setMenu(menu); connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(onCreateElement(QAction*))); connect(ui->wDel, SIGNAL(clicked()), this, SLOT(onDeleteElement())); connect(ui->wClean, SIGNAL(clicked()), this, SLOT(onClearElements())); connect(ui->wGoUp, SIGNAL(clicked()), this, SLOT(onGoUpElement())); connect(ui->wGoDown, SIGNAL(clicked()), this, SLOT(onGoDownElement())); connect(ui->wList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(onCurrentElementChanged(QListWidgetItem*, QListWidgetItem*))); if(m_attr.index >= 0) { ui->wList->setCurrentRow(static_cast(m_attr.index)); } } eWindowAttr::~eWindowAttr() { delete ui; } void eWindowAttr::restoreItem(eObject *e) { QIcon icon; QString name = ""; int type = e->type(); switch (type) { case eObject::Text : icon = QIcon(":/res/ProgramManager/EditProgram/Text.png"); name = tr("Text"); break; case eObject::Photo : { icon = QIcon(":/res/ProgramManager/EditProgram/Photo.png"); QString strtempName=dynamic_cast(e)->getData().name; name = tr("Photo")+" "+strtempName; } break; case eObject::Movie : { icon = QIcon(":/res/ProgramManager/EditProgram/Movie.png"); QString strtempName=dynamic_cast(e)->getData().strRawName; name = tr("Movie")+" "+strtempName; } break; case eObject::Gif : { icon = QIcon(":/res/ProgramManager/EditProgram/Gif.png"); QString strtempName=dynamic_cast(e)->getData().name; name = tr("Gif")+" "+strtempName; } break; case eObject::DClock : icon = QIcon(":/res/ProgramManager/EditProgram/DClock.png"); name = tr("DClock"); break; case eObject::AClock : icon = QIcon(":/res/ProgramManager/EditProgram/AClock.png"); name = tr("AClock"); break; case eObject::Office : icon = QIcon(":/res/ProgramManager/EditProgram/Office.png"); name = tr("Office"); break; case eObject::Temp : icon = QIcon(":/res/ProgramManager/EditProgram/Temp.png"); name = tr("Temp"); break; case eObject::Weather : icon = QIcon(":/res/ProgramManager/EditProgram/Weather.png"); name = tr("Weather"); break; case eObject::Rss : icon = QIcon(":/res/ProgramManager/EditProgram/Rss.png"); name = tr("Rss"); break; case eObject::Timer : icon = QIcon(":/res/ProgramManager/EditProgram/Timer.png"); name = tr("Timer"); break; case eObject::ColorText : break; case eObject::Window : icon = QIcon(":/res/ProgramManager/EditProgram/Window.png"); name = tr("Window"); break; default: break; } if(!name.isEmpty()) { QListWidgetItem *item = new QListWidgetItem(); item->setIcon(icon); item->setText(name); item->setData(Qt::UserRole, QVariant::fromValue(static_cast(e))); ui->wList->addItem(item); } } void eWindowAttr::OnGeometryChanged(const QRectF & rt) { m_eWindowRect=rt; qDebug()<<"OnGeometryChanged"<data().toInt(); int order = ui->wList->count(); eObject *element = nullptr; switch (type) { case eObject::Text : { element = new eText(m_eWindowRect,eObject::Static); icon = QIcon(":/res/ProgramManager/EditProgram/Text.png"); name = tr("Text"); break; } case eObject::Photo : { // QString file = LoAppTools::getInstance()->selectFile(ePhoto::filters(), this); // if(!file.isNull()) { // element = new ePhoto(QRect(0,0,16,16),file, eObject::Static); // icon = QIcon(":/res/ProgramManager/EditProgram/Photo.png"); // name = tr("Photo"); // } QStringList fileList = LoAppTools::getInstance()->selectPhotoFile(ePhoto::filters(), this); if(fileList.count()>0) { for(int i=0;i(element1)->getData().name; //dynamic_castelement1 name = tr("Photo")+ " "+strtempName; if(nullptr != element1) { QListWidgetItem *item = new QListWidgetItem(); item->setIcon(icon); item->setText(name); item->setData(Qt::UserRole, QVariant::fromValue(static_cast(element1))); element1->setZValue(order); element1->setFlag(QGraphicsItem::ItemStacksBehindParent); m_attr.eList.append(element1); ui->wList->addItem(item); if(i==fileList.count()-1) ui->wList->setCurrentItem(item); } } } break; } case eObject::Gif : { // QString file = LoAppTools::getInstance()->selectFile(eGif::filters(), this); // if(!file.isNull()) { // element = new eGif(m_eWindowRect,file, eObject::Static); // icon = QIcon(":/res/ProgramManager/EditProgram/Gif.png"); // name = tr("Gif"); // } QStringList fileList = LoAppTools::getInstance()->selectPhotoFile(eGif::filters(), this); if(fileList.count()>0) { for(int i=0;i(element1)->getData().name; name = tr("Gif")+ " "+strtempName; if(nullptr != element1) { QListWidgetItem *item = new QListWidgetItem(); item->setIcon(icon); item->setText(name); item->setData(Qt::UserRole, QVariant::fromValue(static_cast(element1))); element1->setZValue(order); element1->setFlag(QGraphicsItem::ItemStacksBehindParent); m_attr.eList.append(element1); ui->wList->addItem(item); if(i==fileList.count()-1) ui->wList->setCurrentItem(item); } } } break; } case eObject::Movie : { QString file = LoAppTools::getInstance()->selectFile(eMovie::filters(), this,true); if(!file.isNull()) { element = new eMovie(m_eWindowRect,file,this, eObject::Static); icon = QIcon(":/res/ProgramManager/EditProgram/Movie.png"); QString strtempName=dynamic_cast(element)->getData().strRawName; name = tr("Movie")+" "+strtempName; } break; } case eObject::DClock : element = new eDClock(m_eWindowRect,eObject::Static); icon = QIcon(":/res/ProgramManager/EditProgram/DClock.png"); name = tr("DClock"); break; case eObject::AClock : element = new eAClock(m_eWindowRect,eObject::Static); icon = QIcon(":/res/ProgramManager/EditProgram/AClock.png"); name = tr("AClock"); break; case eObject::Office : break; case eObject::Temp : element = new eTemp(m_eWindowRect,eObject::Static); icon = QIcon(":/res/ProgramManager/EditProgram/Temp.png"); name = tr("Temp"); break; case eObject::Weather : element = new eWeather(m_eWindowRect,eObject::Static); icon = QIcon(":/res/ProgramManager/EditProgram/Weather.png"); name = tr("Weather"); break; case eObject::Rss : break; case eObject::Timer : element = new eTimer(m_eWindowRect,eObject::Static); icon = QIcon(":/res/ProgramManager/EditProgram/Timer.png"); name = tr("Timer"); break; case eObject::ColorText : name = tr("ColorText"); break; case eObject::Window : element = new eWindow(m_eWindowRect,eObject::Static); icon = QIcon(":/res/ProgramManager/EditProgram/Window.png"); name = tr("Window"); break; default: element = nullptr; break; } if(nullptr != element) { QListWidgetItem *item = new QListWidgetItem(); item->setIcon(icon); item->setText(name); item->setData(Qt::UserRole, QVariant::fromValue(static_cast(element))); element->setZValue(order); element->setFlag(QGraphicsItem::ItemStacksBehindParent); m_attr.eList.append(element); ui->wList->addItem(item); ui->wList->setCurrentItem(item); } } void eWindowAttr::onCurrentElementChanged(QListWidgetItem *cur, QListWidgetItem *last) { eObject *eCur = nullptr; eObject *eLast = nullptr; QWidget *wCur = nullptr; QWidget *wLast = nullptr; if(nullptr != cur) { eCur = static_cast(cur->data(Qt::UserRole).value()); wCur = eCur->wAttrElement(); } if(nullptr != last) { eLast = static_cast(last->data(Qt::UserRole).value()); wLast = findChild("elementAttr"); } if(wCur != nullptr) { if(wLast==nullptr) { //static_cast(layout())->insertWidget(2, wCur); ui->verticalLayoutSubWidget->insertWidget(0,wCur); ui->verticalLayoutSubWidget->removeItem(ui->verticalSpacer); } else { //static_cast(layout())->replaceWidget(wLast,wCur); ui->verticalLayoutSubWidget->replaceWidget(wLast,wCur); } } if(wLast != nullptr) { delete wLast; } if(eLast != nullptr) { if(m_attr.self->scene() != nullptr) m_attr.self->scene()->removeItem(eLast); disconnect(m_attr.self, SIGNAL(rectChanged(const QRectF&)), eLast, SLOT(setGeometry(const QRectF&))); //alahover 20200329 masked disconnect( eLast, SIGNAL(requestUpdate(const QRectF&)), m_attr.self, SLOT(updateGeometry())); eLast->stopElectment(); } if(eCur != nullptr) { eCur->setParentItem(m_attr.self); eCur->setGeometry(m_attr.self->rect()); //窗口变化大小时,eobject跟随设置大小 connect(m_attr.self, SIGNAL(rectChanged(const QRectF&)), eCur, SLOT(setGeometry(const QRectF&))); // 窗口的绘制跟随窗口的大小动态更新 //alahover 20200329 masked connect( eCur, SIGNAL(requestUpdate(const QRectF&)), m_attr.self, SLOT(updateGeometry())); eCur->playElectment(); } m_attr.eCur = eCur; m_attr.index = ui->wList->currentRow(); //alahover 20200329 masked emit sRequestUpdate(); } void eWindowAttr::flashOrder() { int n = ui->wList->count(); for(int i=0; i(ui->wList->item(i)->data(Qt::UserRole).value())->setZValue(i); } } void eWindowAttr::onDeleteElement() { QListWidgetItem *item = ui->wList->currentItem(); if(item != nullptr) { eObject *e = static_cast(item->data(Qt::UserRole).value()); m_attr.eList.removeOne(e); ui->wList->takeItem(ui->wList->currentRow()); if(ui->wList->count() > 0) { ui->wList->setCurrentRow(0); } if(e!=nullptr) { switch(e->m_iType) { case eObject::Photo: dynamic_cast(e)->deleteContent(); break; case eObject::Movie: //dynamic_cast(e)->stopElectment(); dynamic_cast(e)->deleteContent(); break; case eObject::Gif: dynamic_cast(e)->deleteContent(); break; } delete e; } delete item; flashOrder(); } } void eWindowAttr::onClearElements() { ui->wList->clear(); foreach(eObject *e, m_attr.eList) { delete e; } m_attr.eList.clear(); } void eWindowAttr::onGoUpElement() { QListWidgetItem *item = ui->wList->currentItem(); if(item != nullptr) { int row = ui->wList->currentRow(); if(row > 0) { ui->wList->takeItem(row); ui->wList->insertItem(row-1, item); ui->wList->setCurrentRow(row-1); flashOrder(); m_attr.eList.swap(row,row-1); } } } void eWindowAttr::onGoDownElement() { QListWidgetItem *item = ui->wList->currentItem(); if(item != nullptr) { int cnt = ui->wList->count(); int row = ui->wList->currentRow(); if(row < cnt - 1) { ui->wList->takeItem(row); ui->wList->insertItem(row+1, item); ui->wList->setCurrentRow(row+1); flashOrder(); m_attr.eList.swap(row,row+1); } } }