void ArrowChooser::rebuildList(QList<ArrowDesc> *arrowStyles) { clear(); FPointArray Path; Path.resize(0); addItem(CommonStrings::tr_None); for (int a = 0; a < arrowStyles->count(); ++a) { QImage image(22, 22, QImage::Format_ARGB32); ScPainter *painter = new ScPainter(&image, 22, 22); painter->clear(); painter->setBrush(qRgb(0, 0, 0)); painter->setPen(qRgb(0, 0, 0)); painter->setFillMode(1); painter->translate(3.0, 3.0); Path.resize(0); Path = arrowStyles->at(a).points.copy(); FPoint min = getMinClipF(&Path); Path.translate(-min.x(), -min.y()); FPoint max = Path.WidthHeight(); QMatrix mm; QMatrix mm2; if (arrowDirection) { mm2.scale(-1, 1); mm2.translate(-max.x(), 0); } mm.scale(16.0 / qMax(max.x(), max.y()), 16.0 / qMax(max.x(), max.y())); Path.map(mm2 * mm); painter->setupPolygon(&Path); painter->setLineWidth(1.0); painter->drawPolygon(); painter->drawPolyLine(); painter->end(); delete painter; int wi = image.width(); int hi = image.height(); for( int yi=0; yi < hi; ++yi ) { QRgb *s = (QRgb*)(image.scanLine( yi )); for(int xi=0; xi < wi; ++xi ) { if((*s) == 0xffffffff) (*s) &= 0x00ffffff; s++; } } QPixmap Ico; Ico=QPixmap::fromImage(image); addItem(Ico, arrowStyles->at(a).name); } }
void BezierMode::mouseReleaseEvent(QMouseEvent *m) { const FPoint mousePointDoc = m_canvas->globalToCanvas(m->globalPos()); undoManager->setUndoEnabled(true); PageItem *currItem; m_MouseButtonPressed = false; m_canvas->resetRenderMode(); m->accept(); // m_view->stopDragTimer(); m_canvas->setRenderModeUseBuffer(false); if ((m_doc->appMode == modeDrawBezierLine) && (m->button() == Qt::LeftButton)) { m_canvas->setRenderModeUseBuffer(true); currItem = m_doc->m_Selection->itemAt(0); currItem->ClipEdited = true; currItem->FrameType = 3; QTransform pm = currItem->getTransform(); FPoint npf = m_doc->ApplyGridF(mousePointDoc).transformPoint(pm, true); currItem->PoLine.addPoint(npf); bool ssiz = currItem->Sizing; currItem->Sizing = true; if ((currItem->PoLine.size() % 4 == 0) && (currItem->PoLine.size() > 3)) { FPoint lxy(currItem->PoLine.point(currItem->PoLine.size()-2)); FPoint lk(currItem->PoLine.point(currItem->PoLine.size()-1)); double dx = lxy.x() - lk.x(); double dy = lxy.y() - lk.y(); lk.setX(lk.x() + dx*2); lk.setY(lk.y() + dy*2); currItem->PoLine.addPoint(lxy); currItem->PoLine.addPoint(lk); } FPoint np2(getMinClipF(&currItem->PoLine)); if (np2.x() < 0) { currItem->PoLine.translate(-np2.x(), 0); m_doc->MoveItem(np2.x(), 0, currItem); } if (np2.y() < 0) { currItem->PoLine.translate(0, -np2.y()); m_doc->MoveItem(0, np2.y(), currItem); } if (FirstPoly) { FirstPoly = false; currItem->Sizing = ssiz; } else { m_doc->SizeItem(currItem->PoLine.WidthHeight().x(), currItem->PoLine.WidthHeight().y(), currItem, false, false, false); m_doc->AdjustItemSize(currItem); currItem->Sizing = ssiz; currItem->ContourLine = currItem->PoLine.copy(); m_canvas->setRenderModeUseBuffer(false); currItem->update(); } m_canvas->setRenderModeFillBuffer(); int newX = qRound(mousePointDoc.x()); //m_view->translateToDoc(m->x(), m->y()).x()); int newY = qRound(mousePointDoc.y()); //m_view->translateToDoc(m->x(), m->y()).y()); m_canvas->newRedrawPolygon() << QPoint(newX - qRound(currItem->xPos()), newY - qRound(currItem->yPos())); m_view->updateCanvas(); } if ((m_doc->appMode == modeDrawBezierLine) && (m->button() == Qt::RightButton)) { currItem = m_doc->m_Selection->itemAt(0); if (currItem!=0) { finalizeItem(currItem); } if (!PrefsManager::instance()->appPrefs.uiPrefs.stickyTools) { // qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); m_view->requestMode(modeNormal); // m_view->requestMode(submodePaintingDone); } else m_view->requestMode(m_doc->appMode); m_doc->changed(); // emit DocChanged(); FirstPoly = true; inItemCreation = false; m_canvas->setRenderModeUseBuffer(false); // m_view->updateContents(); } m_doc->DragP = false; m_doc->leaveDrag = false; // m_canvas->m_viewMode.operItemResizing = false; m_view->MidButt = false; shiftSelItems = false; // m_doc->SubMode = -1; if (m_view->groupTransactionStarted()) { for (int i = 0; i < m_doc->m_Selection->count(); ++i) m_doc->m_Selection->itemAt(i)->checkChanges(true); m_view->endGroupTransaction(); } //??? for (int i = 0; i < m_doc->m_Selection->count(); ++i) //??? m_doc->m_Selection->itemAt(i)->checkChanges(true); // //Commit drag created items to undo manager. // if (m_doc->m_Selection->itemAt(0)!=NULL) // { // m_doc->itemAddCommit(m_doc->m_Selection->itemAt(0)->ItemNr); // } //Make sure the Zoom spinbox and page selector dont have focus if we click on the canvas m_view->m_ScMW->zoomSpinBox->clearFocus(); m_view->m_ScMW->pageSelector->clearFocus(); if (m_doc->m_Selection->itemAt(0) != 0) // is there the old clip stored for the undo action { currItem = m_doc->m_Selection->itemAt(0); m_doc->nodeEdit.finishTransaction(currItem); } else { //delete oldClip; //oldClip = 0; } }
void BezierMode::mousePressEvent(QMouseEvent *m) { const FPoint mousePointDoc = m_canvas->globalToCanvas(m->globalPos()); int z; double Rxp = 0; double Ryp = 0; double Rxpd = 0; double Rypd = 0; PageItem *currItem; // m_canvas->PaintSizeRect(QRect()); FPoint npf, npf2; QRect tx; QTransform pm; m_MouseButtonPressed = true; m_view->HaveSelRect = false; m_doc->DragP = false; m_doc->leaveDrag = false; MoveGX = MoveGY = false; // inItemCreation = false; // oldClip = 0; m->accept(); m_view->registerMousePress(m->globalPos()); Mxp = mousePointDoc.x(); //qRound(m->x()/m_canvas->scale() + 0*m_doc->minCanvasCoordinate.x()); Myp = mousePointDoc.y(); //qRound(m->y()/m_canvas->scale() + 0*m_doc->minCanvasCoordinate.y()); QRect mpo(m->x()-m_doc->guidesPrefs().grabRadius, m->y()-m_doc->guidesPrefs().grabRadius, m_doc->guidesPrefs().grabRadius*2, m_doc->guidesPrefs().grabRadius*2); // mpo.moveBy(qRound(m_doc->minCanvasCoordinate.x() * m_canvas->scale()), qRound(m_doc->minCanvasCoordinate.y() * m_canvas->scale())); Rxp = m_doc->ApplyGridF(FPoint(Mxp, Myp)).x(); Rxpd = Mxp - Rxp; Mxp = qRound(Rxp); Ryp = m_doc->ApplyGridF(FPoint(Mxp, Myp)).y(); Rypd = Myp - Ryp; Myp = qRound(Ryp); SeRx = Mxp; SeRy = Myp; if (m->button() == Qt::MidButton) { m_view->MidButt = true; if (m->modifiers() & Qt::ControlModifier) m_view->DrawNew(); return; } if (m->button() == Qt::RightButton) { m_view->stopGesture(); return; } if (FirstPoly) { selectPage(m); undoManager->setUndoEnabled(false); z = m_doc->itemAdd(PageItem::PolyLine, PageItem::Unspecified, Rxp, Ryp, 1+Rxpd, 1+Rypd, m_doc->itemToolPrefs().lineWidth, CommonStrings::None, m_doc->itemToolPrefs().lineColor); currItem = m_doc->Items->at(z); m_doc->m_Selection->clear(); m_doc->m_Selection->addItem(currItem); m_view->setCursor(QCursor(Qt::CrossCursor)); m_canvas->setRenderModeFillBuffer(); inItemCreation = true; } currItem = m_doc->m_Selection->itemAt(0); // pm.translate(-m_doc->minCanvasCoordinate.x()*m_canvas->scale(), -m_doc->minCanvasCoordinate.y()*m_canvas->scale()); pm = currItem->getTransform(); npf = m_doc->ApplyGridF(mousePointDoc).transformPoint(pm, true); currItem->PoLine.addPoint(npf); npf2 = getMinClipF(&currItem->PoLine); if (npf2.x() < 0) { currItem->PoLine.translate(-npf2.x(), 0); m_doc->MoveItem(npf2.x(), 0, currItem); } if (npf2.y() < 0) { currItem->PoLine.translate(0, -npf2.y()); m_doc->MoveItem(0, npf2.y(), currItem); } m_doc->SizeItem(currItem->PoLine.WidthHeight().x(), currItem->PoLine.WidthHeight().y(), currItem, false, false, false); currItem->setPolyClip(qRound(qMax(currItem->lineWidth() / 2, 1.0))); m_canvas->newRedrawPolygon(); undoManager->setUndoEnabled(false); }
PyObject *scribus_bezierline(PyObject* /* self */, PyObject* args) { char *Name = const_cast<char*>(""); PyObject *il; // FIXME: PyList_Check failing will cause the function to return NULL w/o an exception. Separarate out the check. if ((!PyArg_ParseTuple(args, "O|es", &il, "utf-8", &Name)) || (!PyList_Check(il))) return NULL; if(!checkHaveDocument()) return NULL; int len = PyList_Size(il); if (len < 8) { PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must contain at least four points (eight values).","python error").toLocal8Bit().constData()); return NULL; } if ((len % 6) != 0) { PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must have a multiple of six values.","python error").toLocal8Bit().constData()); return NULL; } // if (ItemExists(QString::fromUtf8(Name))) // { // PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error").toLocal8Bit().constData()); // return NULL; // } double x, y, w, h, kx, ky, kx2, ky2; int i = 0; x = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; y = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; kx = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; ky = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; kx2 = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; ky2 = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; //int ic = ScCore->primaryMainWindow()->view->PaintPolyLine(x, y, 1, 1, ScCore->primaryMainWindow()->doc->toolSettings.dWidth, ScCore->primaryMainWindow()->doc->toolSettings.dBrush, ScCore->primaryMainWindow()->doc->toolSettings.dPen); int ic = ScCore->primaryMainWindow()->doc->itemAdd(PageItem::PolyLine, PageItem::Unspecified, x, y, 1, 1, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineWidth, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeFillColor, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineColor, true); PageItem *it = ScCore->primaryMainWindow()->doc->Items->at(ic); it->PoLine.resize(2); it->PoLine.setPoint(0, 0, 0); it->PoLine.setPoint(1, kx-x, ky-y); int pp = 6; for (i = 6; i < len - 6; i += 6) { w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+1)))); kx = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+2)))); ky = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+3)))); kx2 = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+4)))); ky2 = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+5)))); it->PoLine.resize(pp); it->PoLine.setPoint(pp-4, w-x, h-y); it->PoLine.setPoint(pp-3, kx-x, ky-y); it->PoLine.setPoint(pp-2, it->PoLine.point(pp-4)); it->PoLine.setPoint(pp-1, kx2-x, ky2-y); pp += 4; } pp -= 2; w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-6)))); h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-5)))); kx = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-4)))); ky = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-3)))); it->PoLine.resize(pp); it->PoLine.setPoint(pp-2, w-x, h-y); it->PoLine.setPoint(pp-1, kx-x, ky-y); FPoint np2 = getMinClipF(&it->PoLine); if (np2.x() < 0) { it->PoLine.translate(-np2.x(), 0); ScCore->primaryMainWindow()->doc->MoveItem(np2.x(), 0, it); } if (np2.y() < 0) { it->PoLine.translate(0, -np2.y()); ScCore->primaryMainWindow()->doc->MoveItem(0, np2.y(), it); } ScCore->primaryMainWindow()->doc->SizeItem(it->PoLine.WidthHeight().x(), it->PoLine.WidthHeight().y(), ic, false, false, false); ScCore->primaryMainWindow()->doc->AdjustItemSize(it); if (Name != EMPTY_STRING) { QString objName = QString::fromUtf8(Name); if (!ItemExists(objName)) ScCore->primaryMainWindow()->doc->Items->at(ic)->setItemName(objName); } return PyString_FromString(it->itemName().toUtf8()); }
void CalligraphicMode::mouseReleaseEvent(QMouseEvent *m) { undoManager->setUndoEnabled(true); PageItem *currItem; m_MouseButtonPressed = false; m_canvas->resetRenderMode(); m->accept(); if (m_doc->appMode == modeDrawCalligraphicLine) { if (RecordP.size() > 1) { UndoTransaction createTransaction; if (UndoManager::undoEnabled()) createTransaction = UndoManager::instance()->beginTransaction(); uint z = m_doc->itemAdd(PageItem::Polygon, PageItem::Unspecified, Mxp, Myp, 1, 1, m_doc->itemToolPrefs().calligraphicPenLineWidth, m_doc->itemToolPrefs().calligraphicPenFillColor, m_doc->itemToolPrefs().calligraphicPenLineColor); currItem = m_doc->Items->at(z); currItem->PoLine.resize(0); QList<QPointF> clipU; QList<QPointF> clipL; double mx = sin(m_doc->itemToolPrefs().calligraphicPenAngle / 180.0 * M_PI) * (m_doc->itemToolPrefs().calligraphicPenWidth / 2.0); double my = cos(m_doc->itemToolPrefs().calligraphicPenAngle / 180.0 * M_PI) * (m_doc->itemToolPrefs().calligraphicPenWidth / 2.0); for (int px = 0; px < RecordP.size()-1; ++px) { FPoint clp = RecordP.point(px); clipU.append(QPointF(clp.x() - mx, clp.y() - my)); clipL.prepend(QPointF(clp.x() + mx, clp.y() + my)); } QPainterPath ppU = bezierFit(clipU, 5.0); QPainterPath ppL = bezierFit(clipL, 5.0); QPainterPath pp; pp.addPath(ppU); pp.connectPath(ppL); pp.closeSubpath(); currItem->PoLine.fromQPainterPath(pp); FPoint tp2(getMinClipF(&currItem->PoLine)); currItem->setXYPos(tp2.x(), tp2.y(), true); currItem->PoLine.translate(-tp2.x(), -tp2.y()); FPoint tp(getMaxClipF(&currItem->PoLine)); m_doc->sizeItem(tp.x(), tp.y(), currItem, false, false, false); m_doc->adjustItemSize(currItem); m_doc->m_Selection->clear(); m_doc->m_Selection->addItem(currItem); currItem->ClipEdited = true; currItem->FrameType = 3; currItem->OwnPage = m_doc->OnPage(currItem); currItem->PLineArt = Qt::PenStyle(m_doc->itemToolPrefs().calligraphicPenStyle); currItem->setFillShade(m_doc->itemToolPrefs().calligraphicPenFillColorShade); currItem->setLineShade(m_doc->itemToolPrefs().calligraphicPenLineColorShade); currItem->setFillEvenOdd(true); m_view->resetMousePressed(); currItem->checkChanges(); QString targetName = Um::ScratchSpace; if (currItem->OwnPage > -1) targetName = m_doc->Pages->at(currItem->OwnPage)->getUName(); if (createTransaction) createTransaction.commit(targetName, currItem->getUPixmap(), Um::Create + " " + currItem->getUName(), "", Um::ICreate); //FIXME m_canvas->m_viewMode.operItemResizing = false; m_doc->changed(); } if (!PrefsManager::instance()->appPrefs.uiPrefs.stickyTools) { m_view->requestMode(modeNormal); } else m_view->requestMode(m_doc->appMode); return; } m_canvas->setRenderModeUseBuffer(false); m_doc->DragP = false; m_doc->leaveDrag = false; m_view->MidButt = false; if (m_view->groupTransactionStarted()) { for (int i = 0; i < m_doc->m_Selection->count(); ++i) m_doc->m_Selection->itemAt(i)->checkChanges(true); m_view->endGroupTransaction(); } for (int i = 0; i < m_doc->m_Selection->count(); ++i) m_doc->m_Selection->itemAt(i)->checkChanges(true); //Commit drag created items to undo manager. if (m_doc->m_Selection->itemAt(0)!=NULL) { m_doc->itemAddCommit(m_doc->m_Selection->itemAt(0)); } //Make sure the Zoom spinbox and page selector don't have focus if we click on the canvas m_view->m_ScMW->zoomSpinBox->clearFocus(); m_view->m_ScMW->pageSelector->clearFocus(); if (m_doc->m_Selection->itemAt(0) != 0) // is there the old clip stored for the undo action { currItem = m_doc->m_Selection->itemAt(0); m_doc->nodeEdit.finishTransaction(currItem); } }
void PropertiesPalette_XYZ::handleNewH() { if (!m_ScMW || m_ScMW->scriptIsRunning()) return; if ((m_haveDoc) && (m_haveItem)) { double x,y,w,h, gx, gy, gh, gw; x = xposSpin->value() / m_unitRatio; y = yposSpin->value() / m_unitRatio; w = widthSpin->value() / m_unitRatio; h = heightSpin->value() / m_unitRatio; double oldW = (m_item->width() != 0.0) ? m_item->width() : 1.0; double oldH = (m_item->height() != 0.0) ? m_item->height() : 1.0; if (m_doc->m_Selection->isMultipleSelection()) { if (!_userActionOn) m_ScMW->view->startGroupTransaction(); m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh); if (keepFrameWHRatioButton->isChecked()) { m_doc->scaleGroup(h / gh, h / gh, false); displayWH((h / gh) * gw, h); } else { m_doc->scaleGroup(1.0, h / gh, false); m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh); displayWH(gw, gh); } if (!_userActionOn) { m_ScMW->view->endGroupTransaction(); } } else { bool oldS = m_item->Sizing; m_item->Sizing = false; m_item->OldB2 = m_item->width(); m_item->OldH2 = m_item->height(); if (m_item->asLine()) { if (m_lineMode) { double r = atan2(h-y,w-x)*(180.0/M_PI); m_item->setRotation(r, true); w = sqrt(pow(w-x,2)+pow(h-y,2)); } m_doc->SizeItem(w, m_item->height(), m_item, true, true, false); } else { if (m_item->isTableItem) { int rmo = m_doc->RotMode(); m_doc->RotMode ( 0 ); double dist = h - m_item->height(); PageItem* bb2; PageItem* bb = m_item; while (bb->LeftLink != 0) { bb = bb->LeftLink; } while (bb->RightLink != 0) { bb2 = bb; while (bb2->BottomLink != 0) { m_doc->MoveRotated(bb2->BottomLink, FPoint(0, dist), true); bb2 = bb2->BottomLink; } m_doc->MoveSizeItem(FPoint(0, 0), FPoint(0, -dist), bb, true); bb = bb->RightLink; } bb2 = bb; while (bb2->BottomLink != 0) { m_doc->MoveRotated(bb2->BottomLink, FPoint(0, dist), true); bb2 = bb2->BottomLink; } m_doc->MoveSizeItem(FPoint(0, 0), FPoint(0, -dist), bb, true); m_doc->RotMode ( rmo ); if (keepFrameWHRatioButton->isChecked()) { keepFrameWHRatioButton->setChecked(false); displayWH((h / oldH) * m_item->width(), h); handleNewW(); keepFrameWHRatioButton->setChecked(true); } } else { if (keepFrameWHRatioButton->isChecked()) { displayWH((h / oldH) * m_item->width(), h); m_doc->SizeItem((h / oldH) * m_item->width(), h, m_item, true, true, false); } else m_doc->SizeItem(m_item->width(), h, m_item, true, true, false); } } if (m_item->isArc()) { double dw = w - oldW; double dh = h - oldH; PageItem_Arc* item = m_item->asArc(); double dsch = item->arcHeight / oldH; double dscw = item->arcWidth / oldW; item->arcWidth += dw * dscw; item->arcHeight += dh * dsch; item->recalcPath(); FPoint tp2(getMinClipF(&m_item->PoLine)); m_item->PoLine.translate(-tp2.x(), -tp2.y()); m_doc->AdjustItemSize(m_item); } if (m_item->isSpiral()) { PageItem_Spiral* item = m_item->asSpiral(); item->recalcPath(); } m_item->Sizing = oldS; } //emit DocChanged(); m_doc->changed(); m_doc->regionsChanged()->update(QRect()); } }
PyObject *scribus_polygon(PyObject* /* self */, PyObject* args) { char *Name = const_cast<char*>(""); PyObject *il; // FIXME: PyList_Check failing will cause the function to return NULL w/o an exception. Separarate out the check. if ((!PyArg_ParseTuple(args, "O|es", &il, "utf-8", &Name)) || (!PyList_Check(il))) return NULL; if(!checkHaveDocument()) return NULL; int len = PyList_Size(il); if (len < 6) { PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must contain at least three points (six values).","python error").toLocal8Bit().constData()); return NULL; } if ((len % 2) != 0) { PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must contain an even number of values.","python error").toLocal8Bit().constData()); return NULL; } // if (ItemExists(QString::fromUtf8(Name))) // { // PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error").toLocal8Bit().constData()); // return NULL; // } double x, y, w, h; int i = 0; x = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; y = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; int ic = ScCore->primaryMainWindow()->doc->itemAdd(PageItem::Polygon, PageItem::Unspecified, x, y, 1, 1, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineWidth, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeFillColor, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineColor); PageItem *it = ScCore->primaryMainWindow()->doc->Items->at(ic); it->PoLine.resize(2); it->PoLine.setPoint(0, 0, 0); it->PoLine.setPoint(1, 0, 0); int pp = 6; for (i = 2; i < len - 2; i += 2) { w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+1)))); it->PoLine.resize(pp); it->PoLine.setPoint(pp-4, w-x, h-y); it->PoLine.setPoint(pp-3, w-x, h-y); it->PoLine.setPoint(pp-2, w-x, h-y); it->PoLine.setPoint(pp-1, w-x, h-y); pp += 4; } w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-2)))); h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-1)))); it->PoLine.resize(pp); it->PoLine.setPoint(pp-4, w-x, h-y); it->PoLine.setPoint(pp-3, w-x, h-y); it->PoLine.setPoint(pp-2, w-x, h-y); it->PoLine.setPoint(pp-1, w-x, h-y); pp += 2; it->PoLine.resize(pp); it->PoLine.setPoint(pp-2, 0, 0); it->PoLine.setPoint(pp-1, 0, 0); FPoint np2 = getMinClipF(&it->PoLine); if (np2.x() < 0) { it->PoLine.translate(-np2.x(), 0); ScCore->primaryMainWindow()->doc->moveItem(np2.x(), 0, it); } if (np2.y() < 0) { it->PoLine.translate(0, -np2.y()); ScCore->primaryMainWindow()->doc->moveItem(0, np2.y(), it); } ScCore->primaryMainWindow()->doc->sizeItem(it->PoLine.WidthHeight().x(), it->PoLine.WidthHeight().y(), it, false, false, false); ScCore->primaryMainWindow()->doc->adjustItemSize(it); if (strlen(Name) > 0) { QString objName = QString::fromUtf8(Name); if (!ItemExists(objName)) ScCore->primaryMainWindow()->doc->Items->at(ic)->setItemName(objName); } return PyString_FromString(it->itemName().toUtf8()); }
void ShapePlug::parseGroupProperties(QDomNode &DOC, double &minXCoor, double &minYCoor, double &maxXCoor, double &maxYCoor, bool &firstCheck) { QString FillCol = "White"; QString StrokeCol = "Black"; while(!DOC.isNull()) { double x1, y1, x2, y2; FPointArray PoLine; PoLine.resize(0); QDomElement pg = DOC.toElement(); QString STag = pg.tagName(); if (STag == "svg:line") { x1 = ScCLocale::toDoubleC(pg.attribute("x1")) * Conversion; y1 = ScCLocale::toDoubleC(pg.attribute("y1")) * Conversion; x2 = ScCLocale::toDoubleC(pg.attribute("x2")) * Conversion; y2 = ScCLocale::toDoubleC(pg.attribute("y2")) * Conversion; PoLine.addPoint(x1, y1); PoLine.addPoint(x1, y1); PoLine.addPoint(x2, y2); PoLine.addPoint(x2, y2); } else if (STag == "svg:rect") { x1 = ScCLocale::toDoubleC(pg.attribute("x")) * Conversion; y1 = ScCLocale::toDoubleC(pg.attribute("y")) * Conversion; x2 = ScCLocale::toDoubleC(pg.attribute("width")) * Conversion; y2 = ScCLocale::toDoubleC(pg.attribute("height")) * Conversion; static double rect[] = {0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0 }; for (int a = 0; a < 29; a += 4) { double xa = x2 * rect[a]; double ya = y2 * rect[a+1]; double xb = x2 * rect[a+2]; double yb = y2 * rect[a+3]; PoLine.addPoint(x1+xa, y1+ya); PoLine.addPoint(x1+xb, y1+yb); } } else if ((STag == "svg:polygon") || (STag == "svg:polyline")) { bool bFirst = true; double x = 0.0; double y = 0.0; QString points = pg.attribute( "points" ).simplified().replace(',', " "); QStringList pointList = points.split(' ', QString::SkipEmptyParts); FirstM = true; for( QStringList::Iterator it1 = pointList.begin(); it1 != pointList.end(); it1++ ) { x = ScCLocale::toDoubleC(*(it1++)); y = ScCLocale::toDoubleC(*it1); if( bFirst ) { svgMoveTo(x * Conversion, y * Conversion); bFirst = false; WasM = true; } else { svgLineTo(&PoLine, x * Conversion, y * Conversion); } } if (STag == "svg:polygon") svgClosePath(&PoLine); if (PoLine.size() < 4) { DOC = DOC.nextSibling(); continue; } } else if (STag == "svg:circle") { x1 = ScCLocale::toDoubleC(pg.attribute("r")) * Conversion; y1 = ScCLocale::toDoubleC(pg.attribute("r")) * Conversion; x2 = ScCLocale::toDoubleC(pg.attribute("cx")) * Conversion - x1; y2 = ScCLocale::toDoubleC(pg.attribute("cy")) * Conversion - y1; x1 *= 2.0; y1 *= 2.0; static double rect[] = {1.0, 0.5, 1.0, 0.77615235,0.5, 1.0, 0.77615235, 1.0, 0.5, 1.0, 0.22385765, 1.0, 0.0, 0.5, 0.0, 0.77615235, 0.0, 0.5, 0.0, 0.22385765, 0.5, 0.0, 0.22385765, 0.0, 0.5, 0.0, 0.77615235, 0.0, 1.0, 0.5, 1.0, 0.22385765 }; for (int a = 0; a < 29; a += 4) { double xa = x1 * rect[a]; double ya = y1 * rect[a+1]; double xb = x1 * rect[a+2]; double yb = y1 * rect[a+3]; PoLine.addPoint(x2+xa, y2+ya); PoLine.addPoint(x2+xb, y2+yb); } } else if (STag == "svg:ellipse") { x1 = ScCLocale::toDoubleC(pg.attribute("rx")) * Conversion; y1 = ScCLocale::toDoubleC(pg.attribute("ry")) * Conversion; x2 = ScCLocale::toDoubleC(pg.attribute("cx")) * Conversion - x1; y2 = ScCLocale::toDoubleC(pg.attribute("cy")) * Conversion - y1; x1 *= 2.0; y1 *= 2.0; static double rect[] = {1.0, 0.5, 1.0, 0.77615235,0.5, 1.0, 0.77615235, 1.0, 0.5, 1.0, 0.22385765, 1.0, 0.0, 0.5, 0.0, 0.77615235, 0.0, 0.5, 0.0, 0.22385765, 0.5, 0.0, 0.22385765, 0.0, 0.5, 0.0, 0.77615235, 0.0, 1.0, 0.5, 1.0, 0.22385765 }; for (int a = 0; a < 29; a += 4) { double xa = x1 * rect[a]; double ya = y1 * rect[a+1]; double xb = x1 * rect[a+2]; double yb = y1 * rect[a+3]; PoLine.addPoint(x2+xa, y2+ya); PoLine.addPoint(x2+xb, y2+yb); } } else if (STag == "svg:path") { parseSVG( pg.attribute( "d" ), &PoLine ); if (PoLine.size() < 4) { DOC = DOC.nextSibling(); continue; } } else if (STag == "svg:g") { QDomNode child = DOC.firstChild(); parseGroupProperties(child, minXCoor, minYCoor, maxXCoor, maxYCoor, firstCheck); } if (PoLine.size() < 4) { DOC = DOC.nextSibling(); continue; } FPoint tp2(getMinClipF(&PoLine)); PoLine.translate(-tp2.x(), -tp2.y()); FPoint wh(getMaxClipF(&PoLine)); if (firstCheck) { minXCoor = tp2.x(); minYCoor = tp2.y(); maxXCoor = tp2.x() + wh.x(); maxYCoor = tp2.y() + wh.y(); firstCheck = false; } else { minXCoor = qMin(minXCoor, tp2.x()); minYCoor = qMin(minYCoor, tp2.y()); maxXCoor = qMax(maxXCoor, tp2.x() + wh.x()); maxYCoor = qMax(maxYCoor, tp2.y() + wh.y()); } DOC = DOC.nextSibling(); } }
void ResizeGesture::doResize(bool scaleContent) { PageItem* currItem = m_doc->m_Selection->itemAt(0); QString targetName = Um::SelectionGroup; QPixmap* targetIcon = Um::IGroup; if (!m_doc->m_Selection->isMultipleSelection()) { targetName = currItem->getUName(); targetIcon = currItem->getUPixmap(); } if (!m_transactionStarted) { m_transactionStarted = new UndoTransaction(Um::instance()->beginTransaction(targetName, targetIcon, Um::Resize, "", Um::IResize)); // qDebug() << "ResizeGesture::doResize: begin transaction" << m_transactionStarted; } QRectF newBounds = m_bounds.normalized(); double dw = (newBounds.width() - m_extraWidth) - currItem->width(); double dh = (newBounds.height() - m_extraHeight) - currItem->height(); double dsch = 1.0; double dscw = 1.0; if (currItem->isArc()) { PageItem_Arc* item = currItem->asArc(); if (currItem->height() != 0.0) dsch = item->arcHeight / currItem->height(); if (currItem->width() != 0.0) dscw = item->arcWidth / currItem->width(); } if (m_doc->m_Selection->isMultipleSelection()) { int RotModeBack = m_doc->RotMode(); m_doc->RotMode ( 0 ); double gx, gy, gh, gw; m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh); QRectF oldBounds(gx, gy, gw, gh); double scx = oldBounds.width() == 0? 1.0 : (newBounds.width() - m_extraWidth) / oldBounds.width(); double scy = oldBounds.height() == 0? 1.0 : (newBounds.height() - m_extraHeight) / oldBounds.height(); //CB #3012 only scale text in a group if alt is pressed if ((currItem->itemType() == PageItem::TextFrame) && scaleContent) m_doc->scaleGroup(scx, scy, true); else m_doc->scaleGroup(scx, scy, false); double dx = newBounds.x() - oldBounds.x(); double dy = newBounds.y() - oldBounds.y(); if (dx != 0 || dy != 0) m_doc->moveGroup(dx + m_extraX, dy + m_extraY); m_doc->RotMode ( RotModeBack ); } else { if (currItem->itemType() == PageItem::ImageFrame && scaleContent) { double divX = (currItem->width() != 0) ? currItem->width() : 1.0; double divY = (currItem->height() != 0) ? currItem->height() : 1.0; double imgScX = (newBounds.width() - m_extraWidth) / divX * currItem->imageXScale(); double imgScY = (newBounds.height() - m_extraHeight) / divY * currItem->imageYScale(); // The aspect ratio has been fixed, so make the modification in the direction of the larger movement. if (currItem->keepAspectRatio() && currItem->fitImageToFrame()) { if (qAbs((newBounds.width() - m_extraWidth) - currItem->width()) > qAbs((newBounds.height() - m_extraHeight) - currItem->height())) imgScY = imgScX; else imgScX = imgScY; } currItem->setImageXYScale(imgScX, imgScY); } else if (currItem->itemType() == PageItem::ImageFrame && currItem->PictureIsAvailable) { double dx = ((newBounds.x() + m_extraX) - currItem->xPos()); double dy = ((newBounds.y() + m_extraY) - currItem->yPos()); double cosa = cos(currItem->rotation() * M_PI / 180.0); double sina = sin(currItem->rotation() * M_PI / 180.0); double xoff = -(cosa*dx + sina*dy); if (currItem->imageFlippedH()) xoff += (currItem->width() - (newBounds.width() - m_extraWidth)); double yoff = -(cosa*dy - sina*dx); if (currItem->imageFlippedV()) yoff += (currItem->height() - (newBounds.height() - m_extraHeight)); if (xoff != 0.0 || yoff != 0.0) { currItem->moveImageInFrame(xoff / currItem->imageXScale(), yoff / currItem->imageYScale()); } } // We do not want to scale the text of a linked frame // as it would alter text in other frames of the string else if((currItem->itemType() == PageItem::TextFrame) && (currItem->nextInChain() == 0) && (currItem->prevInChain() == 0) && scaleContent) { double divX = (currItem->width() != 0) ? currItem->width() : 1.0; double divY = (currItem->height() != 0) ? currItem->height() : 1.0; double txtScX = (newBounds.width() - m_extraWidth) / divX; double txtScY = (newBounds.height() - m_extraHeight) / divY; if (currItem->itemText.length() != 0) { for (int aa = 0; aa < currItem->itemText.length(); ++aa) { #if 0 // hard to decide if it’s batter to scale or to change font size currItem->itemText.item(aa)->setScaleV( qMax(qMin(qRound(currItem->itemText.item(aa)->scaleV()*txtScY), 4000), 100)); currItem->itemText.item(aa)->setScaleH( qMax(qMin(qRound(currItem->itemText.item(aa)->scaleH() * txtScX), 4000), 100)); #else currItem->itemText.item(aa)->setFontSize( qMax(qMin(currItem->itemText.item(aa)->fontSize() * txtScY, 4000.0), 1.0)); currItem->itemText.item(aa)->setScaleH( qMax(qMin(qRound(currItem->itemText.item(aa)->scaleH() * txtScX / txtScY), 4000), 100)); #endif // We need to scale the linespacing _only once_ per paragraph. if((aa == 0) || ( SpecialChars::isBreak(currItem->itemText.itemText(aa - 1).at(0)))) { ParagraphStyle ps(currItem->itemText.paragraphStyle(aa)); double oldLS(currItem->itemText.paragraphStyle(aa).lineSpacing()); ps.setLineSpacing(qMax(qRound(oldLS * txtScY), 1)); currItem->itemText.setStyle(aa,ps); } } } } currItem->setXYPos(newBounds.x() + m_extraX, newBounds.y() + m_extraY); currItem->setWidth(newBounds.width() - m_extraWidth); currItem->setHeight(newBounds.height() - m_extraHeight); currItem->updateClip(); if (currItem->isArc()) { PageItem_Arc* item = currItem->asArc(); item->arcWidth += dw * dscw; item->arcHeight += dh * dsch; item->recalcPath(); FPoint tp2(getMinClipF(&currItem->PoLine)); currItem->PoLine.translate(-tp2.x(), -tp2.y()); m_doc->AdjustItemSize(currItem); } if (currItem->isSpiral()) { PageItem_Spiral* item = currItem->asSpiral(); item->recalcPath(); } // rotation does not change } m_origBounds = m_bounds; }
ExtImageProps::ExtImageProps( QWidget* parent, ImageInfoRecord *info, PageItem *item, ScribusView *view ) : QDialog( parent ) { setModal(true); setWindowTitle( tr( "Extended Image Properties" ) ); setWindowIcon(QIcon(loadIcon ( "AppIcon.png" ))); ExtImagePropsLayout = new QVBoxLayout( this ); ExtImagePropsLayout->setMargin(6); ExtImagePropsLayout->setSpacing(6); viewWidget = view; currentItem = item; currentLayer = 0; originalInfo = *info; originalImageClip = item->imageClip.copy(); blendModes.clear(); blendModes.insert("norm", tr("Normal")); blendModes.insert("dark", tr("Darken")); blendModes.insert("lite", tr("Lighten")); blendModes.insert("hue ", tr("Hue")); blendModes.insert("sat ", tr("Saturation")); blendModes.insert("colr", tr("Color")); blendModes.insert("lum ", tr("Luminosity")); blendModes.insert("mul ", tr("Multiply")); blendModes.insert("scrn", tr("Screen")); blendModes.insert("diss", tr("Dissolve")); blendModes.insert("over", tr("Overlay")); blendModes.insert("hLit", tr("Hard Light")); blendModes.insert("sLit", tr("Soft Light")); blendModes.insert("diff", tr("Difference")); blendModes.insert("smud", tr("Exclusion")); blendModes.insert("div ", tr("Color Dodge")); blendModes.insert("idiv", tr("Color Burn")); blendModesRev.clear(); blendModesRev.insert( tr("Normal"), "norm"); blendModesRev.insert( tr("Darken"), "dark"); blendModesRev.insert( tr("Lighten"), "lite"); blendModesRev.insert( tr("Hue"), "hue "); blendModesRev.insert( tr("Saturation"), "sat "); blendModesRev.insert( tr("Color"), "colr"); blendModesRev.insert( tr("Luminosity"), "lum "); blendModesRev.insert( tr("Multiply"), "mul "); blendModesRev.insert( tr("Screen"), "scrn"); blendModesRev.insert( tr("Dissolve"), "diss"); blendModesRev.insert( tr("Overlay"), "over"); blendModesRev.insert( tr("Hard Light"), "hLit"); blendModesRev.insert( tr("Soft Light"), "sLit"); blendModesRev.insert( tr("Difference"), "diff"); blendModesRev.insert( tr("Exclusion"), "smud"); blendModesRev.insert( tr("Color Dodge"), "div "); blendModesRev.insert( tr("Color Burn"), "idiv"); propsTab = new QTabWidget( this ); QPalette palette; palette.setColor(backgroundRole(), Qt::white); if (info->layerInfo.count() != 0) { tab = new QWidget( propsTab ); tabLayout = new QVBoxLayout( tab ); tabLayout->setMargin(6); tabLayout->setSpacing(6); layout1 = new QHBoxLayout; layout1->setMargin(0); layout1->setSpacing(6); textLabel1 = new QLabel( tab ); textLabel1->setText( tr( "Blend Mode:" ) ); layout1->addWidget( textLabel1 ); blendMode = new ScComboBox( tab ); blendMode->clear(); blendMode->addItem( tr("Normal")); blendMode->addItem( tr("Darken")); blendMode->addItem( tr("Lighten")); blendMode->addItem( tr("Hue")); blendMode->addItem( tr("Saturation")); blendMode->addItem( tr("Color")); blendMode->addItem( tr("Luminosity")); blendMode->addItem( tr("Multiply")); blendMode->addItem( tr("Screen")); blendMode->addItem( tr("Dissolve")); blendMode->addItem( tr("Overlay")); blendMode->addItem( tr("Hard Light")); blendMode->addItem( tr("Soft Light")); blendMode->addItem( tr("Difference")); blendMode->addItem( tr("Exclusion")); blendMode->addItem( tr("Color Dodge")); blendMode->addItem( tr("Color Burn")); layout1->addWidget( blendMode ); textLabel2 = new QLabel( tab ); textLabel2->setText( tr( "Opacity:" ) ); layout1->addWidget( textLabel2 ); opacitySpinBox = new QSpinBox( tab ); opacitySpinBox->setMinimum(0); opacitySpinBox->setMaximum(100); opacitySpinBox->setSingleStep(10); opacitySpinBox->setSuffix( tr(" %")); layout1->addWidget( opacitySpinBox ); tabLayout->addLayout( layout1 ); layerTable = new QTableWidget(info->layerInfo.count(), 3, tab ); layerTable->setHorizontalHeaderItem(0, new QTableWidgetItem(QIcon(loadIcon("16/show-object.png")), "")); layerTable->setHorizontalHeaderItem(1, new QTableWidgetItem("")); layerTable->setHorizontalHeaderItem(2, new QTableWidgetItem( tr("Name"))); QHeaderView* headerH = layerTable->horizontalHeader(); headerH->setStretchLastSection(true); headerH->setMovable(false); headerH->setClickable(false); if (info->layerInfo.count() == 1) { layerTable->setColumnWidth(1, 40); layerTable->setColumnWidth(0, 24); } layerTable->setSortingEnabled(false); layerTable->setSelectionBehavior( QAbstractItemView::SelectRows ); QHeaderView *Header = layerTable->verticalHeader(); Header->setMovable(false); Header->setResizeMode(QHeaderView::Fixed); Header->hide(); FlagsSicht.clear(); int col2Width = 0; int col1Width = 0; if (info->layerInfo.count() != 0) { if ((info->isRequest) && (info->RequestProps.contains(0))) { opacitySpinBox->setValue(qRound(info->RequestProps[0].opacity / 255.0 * 100)); setCurrentComboItem(blendMode, blendModes[info->RequestProps[0].blend]); } else { opacitySpinBox->setValue(qRound(info->layerInfo[0].opacity / 255.0 * 100)); setCurrentComboItem(blendMode, blendModes[info->layerInfo[0].blend]); } opacitySpinBox->setEnabled(true); blendMode->setEnabled(true); QString tmp; QList<PSDLayer>::iterator it2; uint counter = 0; for (it2 = info->layerInfo.begin(); it2 != info->layerInfo.end(); ++it2) { QCheckBox *cp = new QCheckBox((*it2).layerName, this); cp->setPalette(palette); QPixmap pm; pm=QPixmap::fromImage((*it2).thumb); col1Width = qMax(col1Width, pm.width()); cp->setIcon(pm); FlagsSicht.append(cp); connect(cp, SIGNAL(clicked()), this, SLOT(changedLayer())); layerTable->setCellWidget(info->layerInfo.count()-counter-1, 0, cp); if ((info->isRequest) && (info->RequestProps.contains(counter))) cp->setChecked(info->RequestProps[counter].visible); else cp->setChecked(!((*it2).flags & 2)); if (!(*it2).thumb_mask.isNull()) { QCheckBox *cp2 = new QCheckBox((*it2).layerName, this); cp2->setPalette(palette); QPixmap pm2; pm2=QPixmap::fromImage((*it2).thumb_mask); col2Width = qMax(col2Width, pm2.width()); cp2->setIcon(pm2); connect(cp2, SIGNAL(clicked()), this, SLOT(changedLayer())); layerTable->setCellWidget(info->layerInfo.count()-counter-1, 1, cp2); if ((info->isRequest) && (info->RequestProps.contains(counter))) cp2->setChecked(info->RequestProps[counter].useMask); else cp2->setChecked(true); FlagsMask.append(cp2); } else FlagsMask.append(0); QTableWidgetItem *tW = new QTableWidgetItem((*it2).layerName); tW->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); layerTable->setItem(info->layerInfo.count()-counter-1, 2, tW); layerTable->setRowHeight(info->layerInfo.count()-counter-1, 40); counter++; } } tabLayout->addWidget( layerTable ); layerTable->setColumnWidth(1, 24 + col2Width); layerTable->setColumnWidth(0, 24 + col1Width); blendMode->setCurrentIndex(0); // headerH->setResizeMode(QHeaderView::Fixed); propsTab->addTab( tab, tr( "Layers" ) ); } tab_2 = new QWidget( propsTab ); tabLayout_2 = new QVBoxLayout( tab_2 ); tabLayout_2->setMargin(6); tabLayout_2->setSpacing(6); pathList = new QListWidget( tab_2 ); pathList->clear(); pathList->setIconSize(QSize(40, 40)); QMap<QString, FPointArray>::Iterator it; if (info->PDSpathData.count() != 0) { for (it = info->PDSpathData.begin(); it != info->PDSpathData.end(); ++it) { QImage pixm(40, 40, QImage::Format_ARGB32); ScPainter *p = new ScPainter(&pixm, 40, 40); p->clear(); p->translate(3.0, 3.0); if (it.key() == info->clipPath) { pixm.fill(Qt::green); p->clear(Qt::green); } else pixm.fill(Qt::white); FPointArray Path; Path.resize(0); Path = info->PDSpathData[it.key()].copy(); FPoint min = getMinClipF(&Path); Path.translate(-min.x(), -min.y()); FPoint max = Path.WidthHeight(); QMatrix mm; mm.scale(34.0 / qMax(max.x(), max.y()), 34.0 / qMax(max.x(), max.y())); Path.map(mm); p->setupPolygon(&Path); p->setPen(Qt::black); p->setBrush(Qt::white); p->setFillMode(0); p->setLineWidth(1.0); p->strokePath(); p->end(); delete p; QPixmap pm; pm=QPixmap::fromImage(pixm); new QListWidgetItem(QIcon(pm), it.key(), pathList); if (it.key() == info->usedPath) { pathList->setCurrentRow(pathList->count()-1); pathList->currentItem()->setSelected(true); } } } tabLayout_2->addWidget( pathList ); resetPath = new QPushButton( tr("Don't use any Path"), tab_2); tabLayout_2->addWidget( resetPath ); propsTab->addTab( tab_2, tr( "Paths" ) ); ExtImagePropsLayout->addWidget( propsTab ); layoutBottom = new QHBoxLayout; layoutBottom->setMargin(0); layoutBottom->setSpacing(6); livePreview = new QCheckBox( this ); livePreview->setText( tr( "Live Preview" ) ); livePreview->setChecked(true); doPreview = true; layoutBottom->addWidget( livePreview ); QSpacerItem* spacer = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum ); layoutBottom->addItem( spacer ); okButton = new QPushButton( CommonStrings::tr_OK, this ); layoutBottom->addWidget( okButton ); cancelButton = new QPushButton( CommonStrings::tr_Cancel, this ); cancelButton->setDefault( true ); layoutBottom->addWidget( cancelButton ); ExtImagePropsLayout->addLayout( layoutBottom ); resize(330, 320); connect(pathList, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( selPath(QListWidgetItem*) ) ); connect(resetPath, SIGNAL(clicked()), this, SLOT(noPath())); connect(livePreview, SIGNAL(clicked()), this, SLOT(changePreview())); connect(okButton, SIGNAL(clicked()), this, SLOT(leaveOK())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(leaveCancel())); if (info->layerInfo.count() != 0) { connect(layerTable, SIGNAL(cellClicked(int, int)), this, SLOT(selLayer(int))); connect(opacitySpinBox, SIGNAL(valueChanged(int)), this, SLOT(changedLayer())); connect(blendMode, SIGNAL(activated(int)), this, SLOT(changedLayer())); }