qt/LedOK/wProgramManager/wEditProgram/wdrawingboard.cpp
2022-01-20 10:08:17 +08:00

1127 lines
37 KiB
C++

#include "wdrawingboard.h"
#include "wProgramManager/wEditProgram/wpageitem.h"
#include "wProgramManager/wEditProgram/wElement/eobject.h"
#include "wProgramManager/wEditProgram/wElement/etext.h"
#include "wProgramManager/wEditProgram/wElement/ephoto.h"
#include "wProgramManager/wEditProgram/wElement/emovie.h"
#include "wProgramManager/wEditProgram/wElement/egif.h"
#include "wProgramManager/wEditProgram/wElement/edclock.h"
#include "wProgramManager/wEditProgram/wElement/eaclock.h"
#include "wProgramManager/wEditProgram/wElement/etemp.h"
#include "wProgramManager/wEditProgram/wElement/eweather.h"
#include "wProgramManager/wEditProgram/wElement/etimer.h"
#include "wProgramManager/wEditProgram/wElement/ewindow.h"
//#include "wProgramManager/wEditProgram/wElement/eaudio.h"
#include <LoUIClass/x_uimsgboxokcancel.h>
#include "wProgramManager/wEditProgram/wElement/imagecutwidget.h"
wDrawingBoard::wDrawingBoard(const QSizeF &res, QWidget *parent) :
QWidget(parent),
m_scale(100),
m_resolution(res),
m_iScreen(res)
{
setAttribute(Qt::WA_DeleteOnClose);
//QAction *spacer = new QAction();
QAction *actScaleUp = new QAction(QIcon(":/res/ProgramManager/EditProgram/ScaleUp.png"), tr("Zoom In"));
QAction *actScaleDown = new QAction(QIcon(":/res/ProgramManager/EditProgram/ScaleDown.png"), tr("Zoom Out"));
QAction *actScaleOrg = new QAction(QIcon(":/res/ProgramManager/EditProgram/ScaleOrg.png"), tr("Original size"));
QAction *actDelete = new QAction(QIcon(":/res/ProgramManager/EditProgram/Delete.png"), tr("Delete the secect media"));
QAction *actClean = new QAction(QIcon(":/res/ProgramManager/EditProgram/Clean.png"), tr("Clear all media"));
QAction *actCut = new QAction(QIcon(":/res/ProgramManager/EditProgram/Cut.png"), tr("Cut media"));
QAction *actLayerUp = new QAction(QIcon(":/res/ProgramManager/EditProgram/LayerUp.png"), tr("Move layer up"));
QAction *actLayerDown = new QAction(QIcon(":/res/ProgramManager/EditProgram/LayerDown.png"), tr("Send backward"));
QAction *actLayerTop = new QAction(QIcon(":/res/ProgramManager/EditProgram/LayerTop.png"), tr("Bring to front"));
QAction *actLayerBottom = new QAction(QIcon(":/res/ProgramManager/EditProgram/LayerBottom.png"), tr("Move to the bottom layer"));
QAction *actTileFull = new QAction(QIcon(":/res/ProgramManager/EditProgram/TileFull.png"), tr("Fill the entire screen"));
QAction *actTileH = new QAction(QIcon(":/res/ProgramManager/EditProgram/TileH.png"), tr("Fill the screen horizontally"));
QAction *actTileV = new QAction(QIcon(":/res/ProgramManager/EditProgram/TileV.png"), tr("Fill the screen vertically"));
QAction *actArrayTop = new QAction(QIcon(":/res/ProgramManager/EditProgram/ArrayTop.png"), tr("Align top"));
QAction *actArrayHCenter = new QAction(QIcon(":/res/ProgramManager/EditProgram/ArrayHCenter.png"), tr("Center vertically"));
QAction *actArrayBottom = new QAction(QIcon(":/res/ProgramManager/EditProgram/ArrayBottom.png"), tr("Bottom align"));
QAction *actArrayLeft = new QAction(QIcon(":/res/ProgramManager/EditProgram/ArrayLeft.png"), tr("Align left"));
QAction *actArrayVCenter = new QAction(QIcon(":/res/ProgramManager/EditProgram/ArrayVCenter.png"), tr("Center horizontally"));
QAction *actArrayRight = new QAction(QIcon(":/res/ProgramManager/EditProgram/ArrayRight.png"), tr("Align right"));
QSpinBox *wScale = new QSpinBox();
wScale->setObjectName("wScale");
wScale->setMinimum(0);
wScale->setMaximum(768);
wScale->setFixedSize(30, 22);
wScale->setReadOnly(true);
wScale->setAlignment(Qt::AlignCenter);
wScale->setButtonSymbols(QAbstractSpinBox::NoButtons);
//主区域编辑工具栏
QToolBar *tb = new QToolBar();
tb->setIconSize(QSize(16, 16));
tb->setProperty("ssType", "progEditor");
tb->setProperty("ssName", "elementLayout");
// tb->addAction(spacer);
tb->addSeparator();
tb->addAction(actScaleUp);//放大
tb->addWidget(wScale);//当前视图比例
tb->addAction(actScaleDown);//缩小
tb->addAction(actScaleOrg);//1:1恢复视图
tb->addSeparator();
tb->addAction(actDelete);
tb->addAction(actClean);
tb->addAction(actCut);
tb->addSeparator();
tb->addAction(actLayerUp);
tb->addAction(actLayerDown);
tb->addAction(actLayerTop);
tb->addAction(actLayerBottom);
tb->addSeparator();
tb->addAction(actTileFull);
tb->addAction(actTileH);
tb->addAction(actTileV);
tb->addSeparator();
tb->addAction(actArrayTop);
tb->addAction(actArrayHCenter);
tb->addAction(actArrayBottom);
tb->addAction(actArrayLeft);
tb->addAction(actArrayVCenter);
tb->addAction(actArrayRight);
m_wView = new QGraphicsView();
m_wView->setScene(nullptr);
//垂直布局(编辑工具栏,编辑区域)
QVBoxLayout *playout = new QVBoxLayout();
playout->addWidget(tb, 0);
playout->addWidget(m_wView, 1);
playout->setSpacing(0);
playout->setContentsMargins(0, 0, 0, 0);
setLayout(playout);
// setStyleSheet("border:2px;solid:#000000;");
connect(actScaleUp, SIGNAL(triggered(bool)), this, SLOT(onScaleUp()));
connect(actScaleDown, SIGNAL(triggered(bool)), this, SLOT(onScaleDown()));
connect(actScaleOrg, SIGNAL(triggered(bool)), this, SLOT(onScaleOrg()));
connect(actDelete, SIGNAL(triggered(bool)), this, SLOT(onDelete()));
connect(actClean, SIGNAL(triggered(bool)), this, SLOT(onClean()));
connect(actCut, SIGNAL(triggered(bool)), this, SLOT(onCut()));
connect(actLayerUp, SIGNAL(triggered(bool)), this, SLOT(onLayerUp()));
connect(actLayerDown, SIGNAL(triggered(bool)), this, SLOT(onLayerDown()));
connect(actLayerTop, SIGNAL(triggered(bool)), this, SLOT(onLayerTop()));
connect(actLayerBottom, SIGNAL(triggered(bool)), this, SLOT(onLayerBottom()));
connect(actTileFull, SIGNAL(triggered(bool)), this, SLOT(onTileFull()));
connect(actTileH, SIGNAL(triggered(bool)), this, SLOT(onTileH()));
connect(actTileV, SIGNAL(triggered(bool)), this, SLOT(onTileV()));
connect(actArrayTop, SIGNAL(triggered(bool)), this, SLOT(onArrayTop()));
connect(actArrayHCenter, SIGNAL(triggered(bool)), this, SLOT(onArrayHCenter()));
connect(actArrayBottom, SIGNAL(triggered(bool)), this, SLOT(onArrayBottom()));
connect(actArrayLeft, SIGNAL(triggered(bool)), this, SLOT(onArrayLeft()));
connect(actArrayVCenter, SIGNAL(triggered(bool)), this, SLOT(onArrayVCenter()));
connect(actArrayRight, SIGNAL(triggered(bool)), this, SLOT(onArrayRight()));
connect(this, SIGNAL(scaleChanged(int)), wScale, SLOT(setValue(int)));
connect(this, SIGNAL(scaleChanged(int)), this, SLOT(adjustTrans()));
setScale(100);
}
void wDrawingBoard::keyReleaseEvent(QKeyEvent *event)
{
switch (event->key()) {
case Qt::Key_Delete: onDelete(); break;
case Qt::Key_Home: onLayerTop(); break;
case Qt::Key_End: onLayerBottom(); break;
case Qt::Key_PageUp: onLayerUp(); break;
case Qt::Key_PageDown: onLayerDown(); break;
case Qt::Key_Left: onSelectionLeft();break;
case Qt::Key_Right: onSelectionRight();break;
case Qt::Key_Up: onSelectionTop();break;
case Qt::Key_Down: onSelectionBottom();break;
default:break;
}
}
void wDrawingBoard::wheelEvent(QWheelEvent*event)
{
if(event->delta()>0){//如果滚轮往上滚
onScaleUp();
}else{//同样的
onScaleDown();
}
}
QList<eObject*> wDrawingBoard::getElementList()
{
QList<eObject*> list;
QGraphicsScene *scene = m_wView->scene();
if(nullptr == scene) return list;
QList<QGraphicsItem *> tmp_list = scene->items();
if(tmp_list.count() < 2) return list;
foreach(QGraphicsItem *item, tmp_list) {
if(item->type() > QGraphicsItem::UserType) {
eObject *element = static_cast<eObject*>(item);
if(element->interactiveType() == eObject::Dynamic)
list.append(element);
}
}
std::sort(list.begin(), list.end(), [](eObject *a, eObject *b) {
return a->zValue() < b->zValue();
});
return list;
}
QList<eObject*> wDrawingBoard::getElementSelectedList()
{
QList<eObject*> list;
QGraphicsScene *scene = m_wView->scene();
if(nullptr == scene) return list;
QList<QGraphicsItem *> tmp_list = scene->selectedItems();
if(tmp_list.count() == 0) return list;
foreach(QGraphicsItem *item, tmp_list) {
if(item->type() > QGraphicsItem::UserType) {
eObject *element = static_cast<eObject*>(item);
if(element->interactiveType() == eObject::Dynamic)
list.append(element);
}
}
std::sort(list.begin(), list.end(), [](eObject *a, eObject *b) {
return a->zValue() < b->zValue();
});
return list;
}
eObject* wDrawingBoard::getElementSelected()
{
eObject *element = nullptr;
QGraphicsScene *scene = m_wView->scene();
if(nullptr == scene) return element;
QList<QGraphicsItem *> list = scene->selectedItems();
if(list.count() != 1) return element;
element = static_cast<eObject*>(list.at(0));
return element;
}
void wDrawingBoard::refreshOrder()
{
int i = 0;
QList<eObject*> list = getElementList();
foreach(eObject *element, list) {
element->setZValue(i++);
}
}
void wDrawingBoard::setElementGeometry(eObject *element, const QRectF &r)
{
element->setGeometry(r);
emit element->geometryChanged(r);
update();
}
void wDrawingBoard::onCreatElement(int type)
{
QGraphicsScene *scene = m_wView->scene();
if(nullptr == scene) return;
int order = getElementList().count();
eObject *element = nullptr;
int iNewWidth=m_resolution.width();
int iNewHeight=m_resolution.height();
if(iNewWidth>64)
iNewWidth=iNewWidth*2/3;
if(iNewHeight>64)
iNewHeight=iNewHeight*2/3;
if(m_xOffset+iNewWidth>m_resolution.width())
{
m_xOffset=0;
}
if(m_yOffset+iNewHeight>m_resolution.height()){
m_yOffset=0;
}
switch (type)
{
case eObject::Text :
{
if(iNewHeight>80&&(m_resolution.width()>=m_resolution.height()))
iNewHeight=80;
QRectF rt(m_xOffset,m_yOffset,iNewWidth,iNewHeight);
element = new eText(rt);
}
break;
case eObject::Photo : {
QStringList fileList = LoAppTools::getInstance()->selectPhotoFile(ePhoto::filters(), this);
if(fileList.count()>0)
{
for(int i=0;i<fileList.count();i++)
{
QRectF rt(m_xOffset,m_yOffset,iNewWidth,iNewHeight);
eObject *element1 = nullptr;
element1 = new ePhoto(rt,m_resolution,fileList.at(i));
if(nullptr != element1) {
scene->addItem(element1);
element1->setZValue(order);
order++;
element1->setRLimit(QRectF(0, 0, m_resolution.width(), m_resolution.height()));
m_xOffset+=16;
m_yOffset+=16;
}
if(i==fileList.count()-1)
{
QGraphicsScene *scene = m_wView->scene();
if(nullptr != scene)
{
QList<QGraphicsItem *> list = scene->selectedItems();
if(list.count() == 1)
{
static_cast<eObject*>(list.at(0))->setSelected(false);
static_cast<eObject*>(list.at(0))->stopElectment();
}
}
element1->setSelected(true);
}
if(nullptr != element1)
{
connect(element1,SIGNAL(sigCiTie(bool,int)),this,SLOT(OnCiTieProcess(bool,int)));
}
}
}
}
break;
case eObject::Gif :
{
// QString file = LoAppTools::getInstance()->selectFile(eGif::filters(), this);
// if(!file.isNull())
// {
// QRectF rt(m_xOffset,m_yOffset,iNewWidth,iNewHeight);
// element = new eGif(rt,file);
// }
QStringList fileList = LoAppTools::getInstance()->selectPhotoFile(eGif::filters(), this);
if(fileList.count()>0)
{
for(int i=0;i<fileList.count();i++)
{
QRectF rt(m_xOffset,m_yOffset,iNewWidth,iNewHeight);
eObject *element1 = nullptr;
element1 = new eGif(rt,m_resolution,fileList.at(i));
if(nullptr != element1) {
scene->addItem(element1);
element1->setZValue(order);
order++;
element1->setRLimit(QRectF(0, 0, m_resolution.width(), m_resolution.height()));
m_xOffset+=16;
m_yOffset+=16;
}
if(i==fileList.count()-1)
{
QGraphicsScene *scene = m_wView->scene();
if(nullptr != scene)
{
QList<QGraphicsItem *> list = scene->selectedItems();
if(list.count() == 1)
{
static_cast<eObject*>(list.at(0))->setSelected(false);
static_cast<eObject*>(list.at(0))->stopElectment();
}
}
element1->setSelected(true);
}
if(nullptr != element1)
{
connect(element1,SIGNAL(sigCiTie(bool,int)),this,SLOT(OnCiTieProcess(bool,int)));
}
}
}
}
break;
case eObject::Movie :
{
QString file = LoAppTools::getInstance()->selectFile(eMovie::filters(), this,true);
if(!file.isNull())
{
QRectF rt(m_xOffset,m_yOffset,iNewWidth,iNewHeight);
element = new eMovie(rt,file,this);
}
}
break;
case eObject::DClock :
{
if(iNewHeight>80&&(m_resolution.width()>=m_resolution.height()))
iNewHeight=80;
QRectF rt(m_xOffset,m_yOffset,iNewWidth,iNewHeight);
element = new eDClock(rt);
}
break;
case eObject::AClock :
{
if(iNewWidth>120)
iNewWidth=120;
if(iNewHeight>120)
iNewHeight=120;
QRectF rt(m_xOffset,m_yOffset,iNewWidth,iNewHeight);
element = new eAClock(rt);
}
break;
case eObject::Office :
break;
case eObject::Temp :
{
QRectF rt(m_xOffset,m_yOffset,iNewWidth,iNewHeight);
element = new eTemp(rt);
}
break;
case eObject::Weather :
{
QRectF rt(m_xOffset,m_yOffset,iNewWidth,iNewHeight);
element = new eWeather(rt);
}
break;
case eObject::Rss :
break;
case eObject::Timer :
{
QRectF rt(m_xOffset,m_yOffset,iNewWidth,iNewHeight);
element = new eTimer(rt);
}
break;
case eObject::ColorText :
{
}
break;
case eObject::Audio :
{
QRectF rt(m_xOffset,m_yOffset,iNewWidth,iNewHeight);
// element = new eAudio(rt);
}
break;
case eObject::Window :
{
QRectF rt(m_xOffset,m_yOffset,iNewWidth,iNewHeight);
element = new eWindow(rt);
}
break;
default:
break;
}
if(nullptr != element && type!=eObject::Photo) {
scene->addItem(element);
element->setZValue(order);
element->setRLimit(QRectF(0, 0, m_resolution.width(), m_resolution.height()));
m_xOffset+=8;
m_yOffset+=8;
QGraphicsScene *scene = m_wView->scene();
if(nullptr != scene)
{
QList<QGraphicsItem *> list = scene->selectedItems();
if(list.count() == 1)
{
static_cast<eObject*>(list.at(0))->setSelected(false);
static_cast<eObject*>(list.at(0))->stopElectment();
}
}
element->setSelected(true);
}
if(nullptr != element)
{
connect(element,SIGNAL(sigCiTie(bool,int)),this,SLOT(OnCiTieProcess(bool,int)));
}
}
void wDrawingBoard::onScaleUp()
{
int s = scale();
if(s <= 790) {
s += 10;
} else {
s = 800;
}
setScale(s);
}
void wDrawingBoard::onScaleDown()
{
int s = scale();
if(s >= 10) {
s -= 10;
} else {
s = 0;
}
setScale(s);
}
void wDrawingBoard::onScaleOrg()
{
setScale(100);
}
void wDrawingBoard::onDelete()
{
QGraphicsScene *scene = m_wView->scene();
if(nullptr == scene) return;
QList<eObject *> list = getElementSelectedList();
foreach(QGraphicsItem *item, list) {
scene->removeItem(item);
delete item;
}
eObject* e=getElementSelected();
if(e!=nullptr)
{
switch(e->m_iType)
{
case eObject::Photo:
dynamic_cast<ePhoto *>(e)->deleteContent();
break;
case eObject::Movie:
dynamic_cast<eMovie *>(e)->deleteContent();
break;
case eObject::Gif:
dynamic_cast<eGif *>(e)->deleteContent();
break;
}
delete e;
}
refreshOrder();
}
void wDrawingBoard::onClean()
{
X_UIMsgBoxOkCancel *dlg = new X_UIMsgBoxOkCancel(tr("Tip Info"),tr("Clear all medias?"), this);
if(dlg->exec() == QDialog::Accepted)
{
QList<eObject*> list = getElementList();
foreach(eObject *element, list) {
m_wView->scene()->removeItem(element);
delete element;
}
}
else {
}
}
void wDrawingBoard::onCut()
{
//this->parentWidget()->parentWidget()->showMinimized();
eObject *element = getElementSelected();
if(element!=nullptr)
{
if(element->m_iType==eObject::Photo)
{
QImage * pImage=dynamic_cast<ePhoto *>(element)->GetCurImage();
ImageCutWidget *pImageCutWidget=new ImageCutWidget(pImage);
pImageCutWidget->setWindowModality(Qt::WindowModal);//阻塞父窗口,所有祖先窗口及其子窗口
connect(pImageCutWidget,SIGNAL(sigSaveRect(QRect)),this,SLOT(OnCropImage(QRect)));
pImageCutWidget->show();
}
}
}
void wDrawingBoard::OnCropImage(QRect rt)
{
eObject *element = getElementSelected();
if(element!=nullptr)
{
if(element->m_iType==eObject::Photo)
{
dynamic_cast<ePhoto *>(element)->CropCurImage(rt);
}
}
}
void wDrawingBoard::onLayerUp()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QList<eObject*> list = getElementList();
int n = list.count();
int o = static_cast<int>(element->zValue());
if(o < n-1) {
element->setZValue(o+1);
list.at(o+1)->setZValue(o);
}
}
void wDrawingBoard::onSelectionLeft()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF rt=element->geometry();
element->setX(rt.x()-1);
}
void wDrawingBoard::onSelectionRight()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF rt=element->geometry();
element->setX(rt.x()+1);
}
void wDrawingBoard::onSelectionTop()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF rt=element->geometry();
element->setY(rt.y()-1);
}
void wDrawingBoard::onSelectionBottom()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF rt=element->geometry();
element->setY(rt.y()+1);
}
void wDrawingBoard::onLayerDown()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QList<eObject*> list = getElementList();
int o = static_cast<int>(element->zValue());
if(o > 0) {
element->setZValue(o-1);
list.at(o-1)->setZValue(o);
}
}
void wDrawingBoard::onLayerTop()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QList<eObject*> list = getElementList();
int n = list.count();
int o = static_cast<int>(element->zValue());
if(o < n-1) {
for(int i=o+1; i<n; i++)
list.at(i)->setZValue(i-1);
element->setZValue(n-1);
}
}
void wDrawingBoard::onLayerBottom()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QList<eObject*> list = getElementList();
int o = static_cast<int>(element->zValue());
if(o > 0) {
for(int i=0; i<o; i++)
list.at(i)->setZValue(i+1);
element->setZValue(0);
}
}
void wDrawingBoard::onTileFull()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF r = QRectF(0, 0, m_resolution.width(), m_resolution.height());
setElementGeometry(element, r);
}
void wDrawingBoard::onTileH()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF r = element->geometry();
r.setX(0);
r.setWidth(m_resolution.width());
setElementGeometry(element, r);
}
void wDrawingBoard::onTileV()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF r = element->geometry();
r.setY(0);
r.setHeight(m_resolution.height());
setElementGeometry(element, r);
}
void wDrawingBoard::onArrayTop()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF r = element->geometry();
qreal h = r.height();
r.setY(0);
r.setHeight(h);
setElementGeometry(element, r);
}
void wDrawingBoard::onArrayHCenter()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF r = element->geometry();
qreal h = r.height();
r.setY(floor((m_resolution.height() - r.height()) / 2));
r.setHeight(h);
setElementGeometry(element, r);
}
void wDrawingBoard::onArrayBottom()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF r = element->geometry();
qreal h = r.height();
r.setY(m_resolution.height() - r.height() + 1);
r.setHeight(h);
setElementGeometry(element, r);
}
void wDrawingBoard::onArrayLeft()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF r = element->geometry();
qreal w = r.width();
r.setX(0);
r.setWidth(w);
setElementGeometry(element, r);
}
void wDrawingBoard::onArrayVCenter()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF r = element->geometry();
qreal w = r.width();
r.setX(floor((m_resolution.width() - r.width()) / 2));
r.setWidth(w);
setElementGeometry(element, r);
}
void wDrawingBoard::onArrayRight()
{
eObject *element = getElementSelected();
if(nullptr == element) return;
QRectF r = element->geometry();
qreal w = r.width();
r.setX(m_resolution.width() - r.width() + 1);
r.setWidth(w);
setElementGeometry(element, r);
}
void wDrawingBoard::adjustTrans()
{
qreal sr = static_cast<qreal>(scale()) / 100;
m_wView->resetTransform();
m_wView->scale(sr, sr);
}
void wDrawingBoard::onSlotPageSelected(wPageItem *page)
{
QGraphicsScene *scene = m_wView->scene();
if(scene != nullptr) {
disconnect(scene, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()));
page->disconnectCiTieSignal(this);
if(nullptr != scene)
{
QList<QGraphicsItem *> tmp_list = scene->items();
foreach(QGraphicsItem *item, tmp_list)
{
if(item->type() > QGraphicsItem::UserType)
{
eObject *element1 = static_cast<eObject*>(item);
element1->stopElectment();
}
}
}
}
m_page = page;
LoAppTools::getInstance()->setCurPage(page);
if(page == nullptr)
{
m_wView->setScene(nullptr);
}
else
{
setScale(100);
scene = page->scene();
m_wView->setScene(scene);
connect(scene, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()));
page->connectCiTieSignal(this);
}
}
void wDrawingBoard::onSelectionChanged()
{
eObject *element = nullptr;
QGraphicsScene *scene = m_wView->scene();
QList<QGraphicsItem *> list = scene->selectedItems();
if(list.count() == 1) {
element = static_cast<eObject*>(list.at(0));
if(nullptr != scene)
{
QList<QGraphicsItem *> tmp_list = scene->items();
if(tmp_list.count() != 0)
{
foreach(QGraphicsItem *item, tmp_list) {
if(item->type() > QGraphicsItem::UserType) {
eObject *element1 = static_cast<eObject*>(item);
if(element1!=element)
{
element1->stopElectment();
}
}
}
}
element->playElectment();
}
}
emit sigElementSelected(element);
}
void wDrawingBoard::OnCiTieProcess(bool b,int iTuoZhuaiDir)
{
if(b)
{
bool bNeedFlag=false;
int iCiTieSpace=8;
eObject *selectedElement = getElementSelected();
if(selectedElement!=nullptr)
{
QRectF selectedERt=selectedElement->geometry();
QList<eObject*> list = getElementList();
foreach(eObject *element, list) {//左竖线,左竖线
QRectF eRt=element->geometry();
if(element!=selectedElement)
{
if(fabs(selectedERt.x()-eRt.x())<=iCiTieSpace)
{
if((selectedERt.x()<iCiTieSpace&&selectedERt.x()>=0)||(selectedERt.right()>=m_iScreen.width()-iCiTieSpace))
{
}
else {
if(iTuoZhuaiDir==0)
{
if(eRt.x()>=0)
selectedElement->setX(eRt.x()) ;
else
selectedElement->setX(0) ;
}
}
selectedElement->setBrightBianLeft(true) ;
element->setBrightBianLeft(true);
bNeedFlag=true;
break;
}
else
{
selectedElement->setBrightBianLeft(false);
element->setBrightBianLeft(false);
}
}
}
foreach(eObject *element, list) {//上横线,上横线
QRectF eRt=element->geometry();
if(element!=selectedElement)
{
if(fabs(selectedERt.y()-eRt.y())<=iCiTieSpace)
{
if((selectedERt.y()<=iCiTieSpace&&selectedERt.y()>=0)||(selectedERt.bottom()>=m_iScreen.width()-iCiTieSpace))
{
}
else {
if(iTuoZhuaiDir==0)
{
if(eRt.y()>=0)
selectedElement->setY(eRt.y()) ;
else
selectedElement->setY(0) ;
}
}
selectedElement->setBrightBianTop(true) ;
element->setBrightBianTop(true);
bNeedFlag=true;
break;
}
else
{
selectedElement->setBrightBianTop(false);
element->setBrightBianTop(false);
}
}
}
foreach(eObject *element, list) {//右竖线,右竖线
QRectF eRt=element->geometry();
if(element!=selectedElement)
{
if(fabs(selectedERt.right()-eRt.right())<=iCiTieSpace)
{
if((selectedERt.right()>=m_iScreen.width()-iCiTieSpace)||selectedERt.left()<=iCiTieSpace)
{
}
else {
if(iTuoZhuaiDir==0)
{
if(eRt.right()-selectedERt.width()>=0)
selectedElement->setX(eRt.right()-selectedERt.width()) ;
else
selectedElement->setX(0) ;
}
}
selectedElement->setBrightBianRight(true) ;
element->setBrightBianRight(true);
bNeedFlag=true;
break;
}
else
{
selectedElement->setBrightBianRight(false);
element->setBrightBianRight(false);
}
}
}
foreach(eObject *element, list) {//下横线,下横线
QRectF eRt=element->geometry();
if(element!=selectedElement)
{
if(fabs(selectedERt.bottom()-eRt.bottom())<=iCiTieSpace)
{
if((selectedERt.bottom()>=m_iScreen.height()-iCiTieSpace)||(selectedERt.y()<=iCiTieSpace))
{
}
else {
if(iTuoZhuaiDir==0)
{
if(eRt.bottom()-selectedERt.height()>=0)
selectedElement->setY(eRt.bottom()-selectedERt.height()) ;
else
selectedElement->setY(0);
}
}
selectedElement->setBrightBianbottom(true) ;
element->setBrightBianbottom(true);
bNeedFlag=true;
break;
}
else
{
selectedElement->setBrightBianbottom(false);
element->setBrightBianbottom(false);
}
}
}
foreach(eObject *element, list) {//左竖线,右竖线
QRectF eRt=element->geometry();
if(element!=selectedElement)
{
if(fabs(selectedERt.x()-eRt.right())<=iCiTieSpace)
{
if(iTuoZhuaiDir==0)
{
if(selectedERt.right()>=m_iScreen.width()-iCiTieSpace)
{
}
else {
if(eRt.right()+1>=0)
{
if(eRt.right()+1+selectedERt.width()<=m_iScreen.width())
selectedElement->setX(eRt.right()+1) ;
}
else
selectedElement->setX(0) ;
}
}
selectedElement->setBrightBianLeft(true) ;
element->setBrightBianRight(true);
break;
}
else
{
if(!bNeedFlag)
{
selectedElement->setBrightBianLeft(false);
element->setBrightBianRight(false);
}
}
}
}
foreach(eObject *element, list) {//上横线,下横线
QRectF eRt=element->geometry();
if(element!=selectedElement)
{
if(fabs(selectedERt.y()-eRt.bottom())<=iCiTieSpace)
{
if(iTuoZhuaiDir==0)
{
if(selectedERt.bottom()>=m_iScreen.height()-iCiTieSpace)
{
}
else {
if(eRt.bottom()+1>=0)
{
if(eRt.bottom()+1+selectedERt.height()<=m_iScreen.height())
selectedElement->setY(eRt.bottom()+1) ;
}
else
selectedElement->setY(0) ;
}
}
selectedElement->setBrightBianTop(true) ;
element->setBrightBianbottom(true);
break;
}
else
{
if(!bNeedFlag)
{
selectedElement->setBrightBianTop(false);
element->setBrightBianbottom(false);
}
}
}
}
foreach(eObject *element, list) {//右横线,左横线
QRectF eRt=element->geometry();
if(element!=selectedElement)
{
if(fabs(selectedERt.right()-eRt.left())<=iCiTieSpace)
{
if(selectedERt.left()<=iCiTieSpace)
{
}
else {
if(iTuoZhuaiDir==0)
{
if(eRt.left()-selectedERt.width()-1>=0)
selectedElement->setX(eRt.left()-selectedERt.width()-1) ;
else
selectedElement->setX(0) ;
}
}
selectedElement->setBrightBianRight(true) ;
element->setBrightBianLeft(true);
break;
}
else
{
if(!bNeedFlag)
{
selectedElement->setBrightBianRight(false);
element->setBrightBianLeft(false);
}
}
}
}
foreach(eObject *element, list) {//下横线,上横线
QRectF eRt=element->geometry();
if(element!=selectedElement)
{
if(fabs(selectedERt.bottom()-eRt.top())<=iCiTieSpace)
{
if(selectedERt.top()<=iCiTieSpace)
{
}
else {
if(iTuoZhuaiDir==0)
{
if(eRt.top()-selectedERt.height()-1>=0)
selectedElement->setY(eRt.top()-selectedERt.height()-1) ;
else
selectedElement->setY(0) ;
}
}
selectedElement->setBrightBianbottom(true) ;
element->setBrightBianTop(true);
break;
}
else
{
if(!bNeedFlag)
{
selectedElement->setBrightBianbottom(false);
element->setBrightBianTop(false);
}
}
}
}
}
else {
QList<eObject*> list = getElementList();
foreach(eObject *element, list) {
element->setBrightBianLeft(false);
element->setBrightBianTop(false);
element->setBrightBianRight(false);
element->setBrightBianbottom(false);
}
}
}
else {
QList<eObject*> list = getElementList();
foreach(eObject *element, list) {
element->setBrightBianLeft(false);
element->setBrightBianTop(false);
element->setBrightBianRight(false);
element->setBrightBianbottom(false);
}
}
}