From 3d8301cc0c2aefd037a0f9662a36eff44c9d870d Mon Sep 17 00:00:00 2001 From: Yimgo Date: Tue, 21 Aug 2012 11:17:59 +0200 Subject: [PATCH 01/80] introduced aristo tool. TODO: * nice icon * nice brush * fix draw with marker --- resources/images/toolPalette/aristoTool.png | Bin 0 -> 10832 bytes resources/sankore.qrc | 1 + src/board/UBBoardController.cpp | 5 + src/core/UB.h | 1 + src/domain/UBGraphicsScene.cpp | 17 + src/domain/UBGraphicsScene.h | 1 + src/tools/UBGraphicsAristo.cpp | 757 ++++++++++++++++++++ src/tools/UBGraphicsAristo.h | 165 +++++ src/tools/UBToolsManager.cpp | 6 + src/tools/UBToolsManager.h | 1 + src/tools/tools.pri | 17 +- 11 files changed, 963 insertions(+), 8 deletions(-) create mode 100644 resources/images/toolPalette/aristoTool.png create mode 100644 src/tools/UBGraphicsAristo.cpp create mode 100644 src/tools/UBGraphicsAristo.h diff --git a/resources/images/toolPalette/aristoTool.png b/resources/images/toolPalette/aristoTool.png new file mode 100644 index 0000000000000000000000000000000000000000..225c0b1e0724c0b40cb15fdb5c514688337ca48b GIT binary patch literal 10832 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 Gp#KAHn-~88 literal 0 HcmV?d00001 diff --git a/resources/sankore.qrc b/resources/sankore.qrc index d9263dbd..94ef9a07 100644 --- a/resources/sankore.qrc +++ b/resources/sankore.qrc @@ -166,6 +166,7 @@ images/toolPalette/triangleTool.png images/toolPalette/protractorTool.png images/toolPalette/compassTool.png + images/toolPalette/aristoTool.png images/toolPalette/maskTool.png images/toolPalette/magnifierTool.png images/extraPalette/blackout.png diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 9ccd5bba..cb2a1a3e 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -1276,6 +1276,11 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri mActiveScene->addMask(pPos); UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector); } + else if (sourceUrl.toString() == UBToolsManager::manager()->aristo.id) + { + mActiveScene->addAristo(pPos); + UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector); + } else { showMessage(tr("Unknown tool type %1").arg(sourceUrl.toString())); diff --git a/src/core/UB.h b/src/core/UB.h index afc0f91e..c47c9c9b 100644 --- a/src/core/UB.h +++ b/src/core/UB.h @@ -145,6 +145,7 @@ struct UBGraphicsItemType TriangleItemType, MagnifierItemType, cacheItemType, + AristoItemType, groupContainerType, ToolWidgetItemType }; diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 19a7e851..27abf659 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -39,6 +39,7 @@ #include "tools/UBGraphicsTriangle.h" #include "tools/UBGraphicsCurtainItem.h" #include "tools/UBGraphicsCache.h" +#include "tools/UBGraphicsAristo.h" #include "document/UBDocumentProxy.h" @@ -2071,6 +2072,22 @@ void UBGraphicsScene::addCompass(QPointF center) setModified(true); } +void UBGraphicsScene::addAristo(QPointF center) +{ + UBGraphicsAristo* aristo = new UBGraphicsAristo(); + mTools << aristo; + + aristo->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool)); + + addItem(aristo); + + QPointF itemSceneCenter = aristo->sceneBoundingRect().center(); + aristo->moveBy(center.x() - itemSceneCenter.x(), center.y() - itemSceneCenter.y()); + + aristo->setVisible(true); + setModified(true); +} + void UBGraphicsScene::addCache() { UBGraphicsCache* cache = new UBGraphicsCache(); diff --git a/src/domain/UBGraphicsScene.h b/src/domain/UBGraphicsScene.h index 027ef706..eae7db84 100644 --- a/src/domain/UBGraphicsScene.h +++ b/src/domain/UBGraphicsScene.h @@ -220,6 +220,7 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem void addCompass(QPointF center); void addTriangle(QPointF center); void addMagnifier(UBMagnifierParams params); + void addAristo(QPointF center); void addMask(const QPointF ¢er = QPointF()); void addCache(); diff --git a/src/tools/UBGraphicsAristo.cpp b/src/tools/UBGraphicsAristo.cpp new file mode 100644 index 00000000..0cdeb69f --- /dev/null +++ b/src/tools/UBGraphicsAristo.cpp @@ -0,0 +1,757 @@ +/* + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include + +#include "tools/UBGraphicsAristo.h" +#include "core/UBApplication.h" +#include "board/UBBoardController.h" +#include "board/UBDrawingController.h" +#include "domain/UBGraphicsScene.h" + +#include "core/memcheck.h" + +const QRect UBGraphicsAristo::sDefaultRect = QRect(0, 0, 800, 400); +const UBGraphicsAristo::UBGraphicsAristoOrientation UBGraphicsAristo::sDefaultOrientation = UBGraphicsAristo::Bottom; + +UBGraphicsAristo::UBGraphicsAristo() + : UBAbstractDrawRuler() + , QGraphicsPolygonItem() + , angle(0) + , mResizing(false) + , mRotating(false) + , mMarking(false) + , mSpan(180) + , mStartAngle(0) + , mCurrentAngle(0) + + +{ + setRect(sDefaultRect, sDefaultOrientation); + + create(*this); + + mHFlipSvgItem = new QGraphicsSvgItem(":/images/vflipTool.svg", this); + mHFlipSvgItem->setVisible(false); + mHFlipSvgItem->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Control)); + + mResizeSvgItem = new QGraphicsSvgItem(":/images/resizeTool.svg", this); + mResizeSvgItem->setVisible(false); + mResizeSvgItem->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Control)); + + mRotateSvgItem = new QGraphicsSvgItem(":/images/rotateTool.svg", this); + mRotateSvgItem->setVisible(false); + mRotateSvgItem->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Control)); + + mMarkerSvgItem = new QGraphicsSvgItem(":/images/angleMarker.svg", this); + mMarkerSvgItem->setVisible(false); + mMarkerSvgItem->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool)); +} + +UBGraphicsAristo::~UBGraphicsAristo() +{ +} + +UBItem* UBGraphicsAristo::deepCopy(void) const +{ + UBGraphicsAristo* copy = new UBGraphicsAristo(); + copyItemParameters(copy); + return copy; +} + +void UBGraphicsAristo::copyItemParameters(UBItem *copy) const +{ + UBGraphicsAristo* cp = dynamic_cast(copy); + if (cp) + { + /* TODO: copy all members */ + cp->setPos(this->pos()); + cp->setPolygon(this->polygon()); + cp->setTransform(this->transform()); + } +} + +void UBGraphicsAristo::setRect(qreal x, qreal y, qreal w, qreal h, UBGraphicsAristoOrientation orientation) +{ + QPolygonF polygon; + polygon << QPointF(x, y) << QPoint(x, y + h) << QPoint(x+w, y + h); + setPolygon(polygon); + + setOrientation(orientation); +} + +void UBGraphicsAristo::setOrientation(UBGraphicsAristoOrientation orientation) +{ + mOrientation = orientation; + calculatePoints(rect()); + + QPolygonF polygon; + polygon << A << B << C; + setPolygon(polygon); +} + +UBGraphicsScene* UBGraphicsAristo::scene() const +{ + return static_cast(QGraphicsPolygonItem::scene()); +} + +/* calculatePoints() is used to calculate polygon's apexes coordinates. + * This function handles orientation changes too. + */ +void UBGraphicsAristo::calculatePoints(const QRectF& r) +{ + switch(mOrientation) + { + case Bottom: + A.setX(r.left()); A.setY(r.top()); + B.setX(r.right()); B.setY(r.top()); + C.setX(r.center().x()); C.setY(A.y() + r.width() / 2); + break; + case Top: + A.setX(r.left()); A.setY(r.bottom()); + B.setX(r.right()); B.setY(r.bottom()); + C.setX(r.center().x()); C.setY(A.y() - r.width() / 2); + break; + } +} + +void UBGraphicsAristo::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) +{ + QPolygonF polygon; + + painter->setBrush(Qt::NoBrush); + painter->setPen(drawColor()); + + polygon << A << B << C; + painter->drawPolygon(polygon); + polygon.clear(); + + paintGraduations(painter); + + mCloseSvgItem->setPos(closeButtonRect().topLeft() + rotationCenter()); + mHFlipSvgItem->setPos(hFlipRect().topLeft() + rotationCenter()); + mRotateSvgItem->setPos(rotateRect().topLeft() + rotationCenter()); + mResizeSvgItem->setPos(resizeButtonRect().topLeft() + rotationCenter()); + + + paintMarker(painter); + mMarkerSvgItem->setVisible(true); +} + +QPainterPath UBGraphicsAristo::shape() const +{ + QPainterPath tShape; + QPolygonF tPolygon; + + tPolygon << A << B << C; + tShape.addPolygon(tPolygon); + tPolygon.clear(); + + return tShape; +} + +/* paintMarker() adjust marker button according to the current angle, draw the line allowing user to set precisely the angle, and draw the current angle's value. */ +void UBGraphicsAristo::paintMarker(QPainter *painter) +{ + /* adjusting marker button */ + mMarkerSvgItem->setPos(markerButtonRect().topLeft() + rotationCenter()); + mMarkerSvgItem->resetTransform(); + mMarkerSvgItem->translate(-markerButtonRect().left(), -markerButtonRect().top()); + mMarkerSvgItem->rotate(mCurrentAngle); + mMarkerSvgItem->translate(markerButtonRect().left(), markerButtonRect().top()); + + + qreal co = cos((mCurrentAngle) * PI/180); + qreal si = sin((mCurrentAngle) * PI/180); + + /* Setting point composing the line (from point C) which intersects the line we want to draw. */ + QPointF referencePoint; + if (mOrientation == Bottom) { + if ((int)mCurrentAngle % 360 < 90) + referencePoint = B; + else + referencePoint = A; + } + else if (mOrientation == Top) { + if ((int)mCurrentAngle % 360 < 270 && (int)mCurrentAngle % 360 > 0) + referencePoint = A; + else + referencePoint = B; + } + + /* getting intersection point to draw the wanted line */ + QLineF intersectedLine(rotationCenter(), QPointF(rotationCenter().x()+co, rotationCenter().y()+si)); + QPointF intersectionPoint; + if (intersectedLine.intersect(QLineF(referencePoint, C), &intersectionPoint)) + painter->drawLine(QLineF(intersectionPoint, rotationCenter())); + + /* drawing angle value */ + qreal rightAngle = mOrientation == Bottom ? mCurrentAngle : 360 - mCurrentAngle; + + + QString angleText = QString("%1°").arg(rightAngle, 0, 'f', 1); + + QFont font1 = painter->font(); +#ifdef Q_WS_MAC + font1.setPointSizeF(font1.pointSizeF() - 3); +#endif + QFontMetricsF fm1(font1); + + if (mOrientation == Bottom) + painter->drawText(rotationCenter().x() - fm1.width(angleText)/2 - radius()/8, rotationCenter().y() + radius()/8 - fm1.height()/2, fm1.width(angleText), fm1.height(), Qt::AlignCenter, angleText); + else + painter->drawText(rotationCenter().x() - fm1.width(angleText)/2 - radius()/8, rotationCenter().y() - radius()/8 - fm1.height()/2, fm1.width(angleText), fm1.height(), Qt::AlignCenter, angleText); + + +} + +/* paintGraduations() paints graduations on the ruler side (length graduations) and the two other sides (angle graduation) */ +void UBGraphicsAristo::paintGraduations(QPainter *painter) +{ + paintRulerGraduations(painter); + paintProtractorGraduations(painter); +} + +void UBGraphicsAristo::paintRulerGraduations(QPainter *painter) +{ + /* defining useful constants */ + const int centimeterGraduationHeight = 15; + const int halfCentimeterGraduationHeight = 10; + const int millimeterGraduationHeight = 5; + const int millimetersPerCentimeter = 10; + const int millimetersPerHalfCentimeter = 5; + + painter->save(); + painter->setFont(font()); + QFontMetricsF fontMetrics(painter->font()); + + /* Browsing milliters in half width of ruler side */ + for (int millimeters = 0; millimeters < (rect().width() / 2 - sLeftEdgeMargin - sRoundingRadius) / sPixelsPerMillimeter; millimeters++) + { + /* defining graduationHeight ; values are different to draw bigger lines if millimiter considered is a centimeter or a half centimeter */ + int graduationHeight = (0 == millimeters % millimetersPerCentimeter) ? + centimeterGraduationHeight : + ((0 == millimeters % millimetersPerHalfCentimeter) ? + halfCentimeterGraduationHeight : millimeterGraduationHeight); + + /* correcting graduationHeight: draw the line in the other direction in case ruler is top-oriented, to stay inside the tool and inside the rect */ + graduationHeight = mOrientation == Bottom ? graduationHeight : - graduationHeight; + + /* drawing graduation to the left and to the right of origin, which is the center of graduated side */ + painter->drawLine(QLine(rotationCenter().x() + sPixelsPerMillimeter * millimeters, rotationCenter().y(), rotationCenter().x() + sPixelsPerMillimeter * millimeters, rotationCenter().y() + graduationHeight)); + if (millimeters != 0) + painter->drawLine(QLine(rotationCenter().x() - sPixelsPerMillimeter * millimeters, rotationCenter().y(), rotationCenter().x() - sPixelsPerMillimeter * millimeters, rotationCenter().y() + graduationHeight)); + + /* drawing associated value if considered graduation is a centimeter */ + if (0 == millimeters % millimetersPerCentimeter) + { + /* defining graduation value */ + QString text = QString("%1").arg((int)(millimeters / millimetersPerCentimeter)); + + /* staying inside polygon */ + if (rotationCenter().x() + sPixelsPerMillimeter * millimeters + fontMetrics.width(text) / 2 < rect().right()) + { + qreal textWidth = fontMetrics.width(text); + qreal textHeight = fontMetrics.tightBoundingRect(text).height() + 5; + + /* text y-coordinate is different according to tool's orientation */ + qreal textY = mOrientation == Bottom ? rect().top() + 5 + centimeterGraduationHeight : rect().bottom() - 5 - centimeterGraduationHeight + graduationHeight; + + /* if text's rect is not out of polygon's bounds, drawing value below or above graduation */ + QPointF intersectionPoint; + + bool paint = false; + + if (mOrientation == Bottom && QLineF(QPointF(rotationCenter().x() - sPixelsPerMillimeter * millimeters - textWidth / 2, rotationCenter().y()), QPointF(rotationCenter().x() - sPixelsPerMillimeter * millimeters - textWidth / 2, textY + textHeight)).intersect(QLineF(A, C), &intersectionPoint) != QLineF::BoundedIntersection && QLineF(QPointF(rotationCenter().x() - sPixelsPerMillimeter * millimeters + textWidth / 2, rotationCenter().y()), QPointF(rotationCenter().x() - sPixelsPerMillimeter * millimeters + textWidth / 2, textY + textHeight)).intersect(QLineF(A, C), &intersectionPoint) != QLineF::BoundedIntersection) { + paint = true; + } + else if (mOrientation == Top && QLineF(QPointF(rotationCenter().x() - sPixelsPerMillimeter * millimeters - textWidth / 2, rotationCenter().y()), QPointF(rotationCenter().x() - sPixelsPerMillimeter * millimeters - textWidth / 2, textY - textHeight)).intersect(QLineF(A, C), &intersectionPoint) != QLineF::BoundedIntersection && QLineF(QPointF(rotationCenter().x() - sPixelsPerMillimeter * millimeters + textWidth / 2, rotationCenter().y()), QPointF(rotationCenter().x() - sPixelsPerMillimeter * millimeters + textWidth / 2, textY - textHeight)).intersect(QLineF(A, C), &intersectionPoint) != QLineF::BoundedIntersection) { + paint = true; + } + + if (paint) { + painter->drawText( + QRectF(rotationCenter().x() + sPixelsPerMillimeter * millimeters - textWidth / 2, textY, textWidth, textHeight), + Qt::AlignVCenter, text); + if (millimeters != 0) + painter->drawText( + QRectF(rotationCenter().x() - sPixelsPerMillimeter * millimeters - textWidth / 2, textY, textWidth, textHeight), + Qt::AlignVCenter, text); + } + } + } + } + painter->restore(); +} + +void UBGraphicsAristo::paintProtractorGraduations(QPainter* painter) +{ + /* defining useful constants */ + const int tenDegreeGraduationLength = 15; + const int fiveDegreeGraduationLength = 10; + const int oneDegreeGraduationLength = 5; + + painter->save(); + + QFont font1 = painter->font(); +#ifdef Q_WS_MAC + font1.setPointSizeF(font1.pointSizeF() - 3); +#endif + QFontMetricsF fm1(font1); + + //Font for internal arc + QFont font2 = painter->font(); + font2.setPointSizeF(font1.pointSizeF()/1.5); + QFontMetricsF fm2(font2); + + /* defining virtual arc diameter */ + qreal rad = radius(); + + QPointF center = rotationCenter(); + + /* browsing angles */ + for (int angle = 1; angle < mSpan; angle++) + { + int graduationLength = (0 == angle % 10) ? tenDegreeGraduationLength : ((0 == angle % 5) ? fiveDegreeGraduationLength : oneDegreeGraduationLength); + + qreal co = cos(((qreal)angle + mStartAngle) * PI/180); + qreal si = sin(((qreal)angle + mStartAngle) * PI/180); + + /* inverse sinus according to the orientation, to draw graduations on the polygon */ + si = mOrientation == Bottom ? -si : si; + + /* drawing the graduation around the virtual arc */ + if (angle >= sArcAngleMargin && angle <= mSpan - sArcAngleMargin) + painter->drawLine(QLineF(QPointF(center.x()+ rad/2*co, center.y() - rad/2*si), + QPointF(center.x()+ (rad/2 + graduationLength)*co, + center.y() - (rad/2 + graduationLength)*si))); + + + QPointF intersectionPoint; + QLineF referenceLine; + if (angle < 90) + referenceLine.setP1(B); + else + referenceLine.setP1(A); + referenceLine.setP2(C); + + /* if angle is 10-multiple, drawing it's value, rotated to be easily red */ + if (0 == angle % 10) { + QString grad = QString("%1").arg((int)(angle)); + QString grad2 = QString("%1").arg((int)mSpan - angle); + + painter->setFont(font2); + + painter->save(); + painter->translate(center.x() + (rad/2 + graduationLength*1.5)*co, center.y() - (rad/2 + graduationLength*1.5)*si); + int degrees = mOrientation == Bottom ? angle : -angle; + painter->rotate(-90 + degrees); + painter->drawText(- fm2.width(grad)/2, - fm2.height()/2, fm2.width(grad), fm2.height(), Qt::AlignCenter, grad); + painter->restore(); + + painter->setFont(font1); + + + /* drawing the graduation near tool's side */ + if (QLineF(QPointF(center.x()+ rad/2*co, center.y() - rad/2*si), + QPointF(center.x()+ (rad/2 + graduationLength)*co, + center.y() - (rad/2 + graduationLength)*si)).intersect(referenceLine, &intersectionPoint) == QLineF::UnboundedIntersection) + + painter->drawLine(QLineF(QPointF(center.x() + (rad/2 + graduationLength*1.5 + fm2.width(grad)/2)*co, + center.y() - (rad/2 + graduationLength*1.5 + fm2.height()/2)*si), + intersectionPoint)); + + } + + /* drawing the graduation near tool's side */ + else + if (QLineF(QPointF(center.x()+ rad/2*co, center.y() - rad/2*si), + QPointF(center.x()+ (rad/2 + graduationLength)*co, + center.y() - (rad/2 + graduationLength)*si)).intersect(referenceLine, &intersectionPoint) == QLineF::UnboundedIntersection) + + painter->drawLine(QLineF(QPointF(intersectionPoint.x() - (graduationLength*1.5)*co, + intersectionPoint.y() + (graduationLength*1.5)*si), + intersectionPoint)); + } + + painter->restore(); +} + + +void UBGraphicsAristo::rotateAroundCenter(qreal angle) +{ + qreal oldAngle = this->angle; + this->angle = angle; + QTransform transform; + rotateAroundCenter(transform, rotationCenter()); + setTransform(transform, true); + this->angle = oldAngle + angle; // We have to store absolute value for FLIP case +} + +void UBGraphicsAristo::rotateAroundCenter(QTransform& transform, QPointF center) +{ + transform.translate(center.x(), center.y()); + transform.rotate(angle); + transform.translate(- center.x(), - center.y()); +} + +void UBGraphicsAristo::resize(qreal factor) +{ + prepareGeometryChange(); + translate(rotationCenter().x(), rotationCenter().y()); + scale(factor, factor); + translate(-rotationCenter().x(), -rotationCenter().y()); +} + + +QPointF UBGraphicsAristo::rotationCenter() const +{ + return QPointF((A.x() + B.x()) / 2, (A.y() + B.y()) / 2); +} + +QRectF UBGraphicsAristo::closeButtonRect() const +{ + qreal y = radius() / 4 + hFlipRect().height() + 3 + rotateRect().height() + 3; + if (mOrientation == Top) + y = -y; + return QRectF(- mCloseSvgItem->boundingRect().width() / 2, y, mCloseSvgItem->boundingRect().width(), mCloseSvgItem->boundingRect().height()); +} + +QRectF UBGraphicsAristo::resizeButtonRect() const +{ + return QRectF((B - rotationCenter()).x() - 100 - mResizeSvgItem->boundingRect().width()/2, - mResizeSvgItem->boundingRect().height()/2, mResizeSvgItem->boundingRect().width(), mResizeSvgItem->boundingRect().height()); +} + +QRectF UBGraphicsAristo::hFlipRect() const +{ + qreal y = radius() / 4; + if (mOrientation == Top) + y = -y; + + return QRectF(- mHFlipSvgItem->boundingRect().width() / 2, y, mHFlipSvgItem->boundingRect().width(), mHFlipSvgItem->boundingRect().height()); +} + +QRectF UBGraphicsAristo::rotateRect() const +{ + qreal y = radius() / 4 + hFlipRect().height() + 3; + if (mOrientation == Top) + y = -y; + return QRectF(- mRotateSvgItem->boundingRect().width() / 2, y, mRotateSvgItem->boundingRect().width(), mRotateSvgItem->boundingRect().height()); + +} + +QRectF UBGraphicsAristo::markerButtonRect() const +{ + return QRectF (radius()/2 - mMarkerSvgItem->boundingRect().width(), - mMarkerSvgItem->boundingRect().height()/2, mMarkerSvgItem->boundingRect().width(), mMarkerSvgItem->boundingRect().height()); +} + +QCursor UBGraphicsAristo::flipCursor() const +{ + return Qt::ArrowCursor; +} + +QCursor UBGraphicsAristo::resizeCursor() const +{ + return Qt::ArrowCursor; +} + +QCursor UBGraphicsAristo::markerCursor() const +{ + return Qt::ArrowCursor; +} + +void UBGraphicsAristo::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + switch (toolFromPos(event->pos())) { + case Rotate: + mRotating = true; + event->accept(); + break; + case Resize: + mResizing = true; + event->accept(); + break; + case MoveMarker: + mMarking = true; + event->accept(); + break; + default: + QGraphicsItem::mousePressEvent(event); + break; + } + + mShowButtons = false; + mHFlipSvgItem->setVisible(false); + mCloseSvgItem->setVisible(false); + mRotateSvgItem->setVisible(mRotating); + mResizeSvgItem->setVisible(mResizing); + update(); +} + +void UBGraphicsAristo::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +{ + + if (!mResizing && !mRotating && !mMarking) + { + QGraphicsItem::mouseMoveEvent(event); + } + else + { + QLineF currentLine(rotationCenter(), event->pos()); + QLineF lastLine(rotationCenter(), event->lastPos()); + + if (mRotating) { + + rotateAroundCenter(currentLine.angleTo(lastLine)); + } + else if (mResizing) { + QPointF delta = event->pos() - event->lastPos(); + setRect(QRectF(rect().topLeft(), QSizeF(rect().width() + delta.x(), rect().height() + delta.x() / 2)), mOrientation); + } + else if(mMarking) { + qreal angle = currentLine.angleTo(lastLine); + + mCurrentAngle += angle; + mCurrentAngle -= (int)(mCurrentAngle/360)*360; + + if (mOrientation == Bottom) { + if (mCurrentAngle >= 270) + mCurrentAngle = 0; + else if (mCurrentAngle > 180) + mCurrentAngle = 180; + } + else if (mOrientation == Top) { + if (mCurrentAngle < 90) + mCurrentAngle = 360; + else if (mCurrentAngle < 180) + mCurrentAngle = 180; + } + update(); + } + + event->accept(); + } +} + +void UBGraphicsAristo::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + if (mResizing || mRotating || mMarking) + { + mResizing = false; + mRotating = false; + mMarking = false; + event->accept(); + } + else + { + switch (toolFromPos(event->pos())) { + case Close : + hide(); + emit hidden(); + break; + case HorizontalFlip: + /* substracting difference to zero [2pi] twice, to obtain the desired angle */ + mCurrentAngle -= 2 * (mCurrentAngle - (int)(mCurrentAngle/360)*360) - 360; + /* setting new orientation */ + switch(mOrientation) { + case Bottom: + setOrientation(Top); + break; + case Top: + setOrientation(Bottom); + break; + } + default: + QGraphicsItem::mouseReleaseEvent(event); + break; + } + } + + mShowButtons = true; + update(); + if (scene()) + scene()->setModified(true); +} + +void UBGraphicsAristo::hoverEnterEvent(QGraphicsSceneHoverEvent *event) +{ + UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController ()->stylusTool (); + + if (currentTool == UBStylusTool::Selector) { + mShowButtons = true; + mHFlipSvgItem->setVisible(true); + mRotateSvgItem->setVisible(true); + mResizeSvgItem->setVisible(true); + mCloseSvgItem->setVisible(true); + + switch (toolFromPos(event->pos())) { + case HorizontalFlip: + setCursor(flipCursor()); + break; + case Rotate: + setCursor(rotateCursor()); + break; + case Resize: + setCursor(resizeCursor()); + break; + case MoveMarker: + setCursor(markerCursor()); + break; + case Close: + setCursor(closeCursor()); + break; + default: + setCursor(moveCursor()); + break; + } + + event->accept(); + update(); + + } else if (UBDrawingController::drawingController()->isDrawingTool()) { + setCursor(drawRulerLineCursor()); + UBDrawingController::drawingController()->mActiveRuler = this; + event->accept(); + } +} + +void UBGraphicsAristo::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) +{ + mShowButtons = false; + setCursor(Qt::ArrowCursor); + mHFlipSvgItem->setVisible(false); + mRotateSvgItem->setVisible(false); + mResizeSvgItem->setVisible(false); + mCloseSvgItem->setVisible(false); + UBDrawingController::drawingController()->mActiveRuler = NULL; + event->accept(); + update(); +} + +void UBGraphicsAristo::hoverMoveEvent(QGraphicsSceneHoverEvent *event) +{ + UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController ()->stylusTool (); + + if (currentTool == UBStylusTool::Selector) + { + mShowButtons = true; + mHFlipSvgItem->setVisible(true); + mRotateSvgItem->setVisible(true); + mResizeSvgItem->setVisible(true); + mCloseSvgItem->setVisible(true); + + switch (toolFromPos(event->pos())) { + case HorizontalFlip: + setCursor(flipCursor()); + break; + case Rotate: + setCursor(rotateCursor()); + break; + case Resize: + setCursor(resizeCursor()); + break; + case MoveMarker: + setCursor(markerCursor()); + break; + case Close: + setCursor(closeCursor()); + break; + default: + setCursor(moveCursor()); + break; + } + + event->accept(); + } + else if (UBDrawingController::drawingController()->isDrawingTool()) + event->accept(); +} + +/* + * toolfrompos() returns the item type corresponding to the given position. + * This method is used to reduce the amount of code in each event function and improve class' maintainability. + * pos: event's position ; a rotation is done to counter elements rotation, like the marker button. + */ +UBGraphicsAristo::Tool UBGraphicsAristo::toolFromPos(QPointF pos) +{ + pos = pos - rotationCenter(); + + qreal rotationAngle = mOrientation == Bottom ? - mCurrentAngle : 360 * (int)(mCurrentAngle / 360 + 1) - mCurrentAngle; + + QTransform t; + t.rotate(rotationAngle); + QPointF p2 = t.map(pos); + + if (resizeButtonRect().contains(pos)) + return Resize; + else if (closeButtonRect().contains(pos)) + return Close; + else if (rotateRect().contains(pos)) + return Rotate; + else if (markerButtonRect().contains(p2)) + return MoveMarker; + else if (hFlipRect().contains(pos)) + return HorizontalFlip; + else if (shape().contains(pos)) + return Move; + else + return None; +} + +void UBGraphicsAristo::StartLine(const QPointF &scenePos, qreal width) +{ + QPointF itemPos = mapFromScene(scenePos); + + qreal y; + + y = rotationCenter().y(); + + if (itemPos.x() < rect().x() + sLeftEdgeMargin) + itemPos.setX(rect().x() + sLeftEdgeMargin); + if (itemPos.x() > rect().x() + rect().width() - sLeftEdgeMargin) + itemPos.setX(rect().x() + rect().width() - sLeftEdgeMargin); + + itemPos.setY(y); + itemPos = mapToScene(itemPos); + + scene()->moveTo(itemPos); + scene()->drawLineTo(itemPos, width, true); +} + +void UBGraphicsAristo::DrawLine(const QPointF &scenePos, qreal width) +{ + QPointF itemPos = mapFromScene(scenePos); + + qreal y; + + y = rotationCenter().y(); + + if (itemPos.x() < rect().x() + sLeftEdgeMargin) + itemPos.setX(rect().x() + sLeftEdgeMargin); + if (itemPos.x() > rect().x() + rect().width() - sLeftEdgeMargin) + itemPos.setX(rect().x() + rect().width() - sLeftEdgeMargin); + + itemPos.setY(y); + itemPos = mapToScene(itemPos); + + // We have to use "pointed" line for marker tool + scene()->drawLineTo(itemPos, width, + UBDrawingController::drawingController()->stylusTool() != UBStylusTool::Marker); +} + +void UBGraphicsAristo::EndLine() +{ +} diff --git a/src/tools/UBGraphicsAristo.h b/src/tools/UBGraphicsAristo.h new file mode 100644 index 00000000..ee791d74 --- /dev/null +++ b/src/tools/UBGraphicsAristo.h @@ -0,0 +1,165 @@ +/* + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef UBGRAPHICSARISTO_H_ +#define UBGRAPHICSARISTO_H_ + +#include +#include +#include + +#include "core/UB.h" +#include "domain/UBItem.h" +#include "tools/UBAbstractDrawRuler.h" + + +class UBGraphicsScene; +class UBItem; + +class UBGraphicsAristo : public UBAbstractDrawRuler, public QGraphicsPolygonItem, public UBItem +{ + Q_OBJECT + + public: + UBGraphicsAristo(); + virtual ~UBGraphicsAristo(); + + enum { Type = UBGraphicsItemType::AristoItemType }; + enum Tool {None, Move, Resize, Rotate, Close, MoveMarker, HorizontalFlip}; + + virtual int type() const + { + return Type; + } + + virtual UBItem* deepCopy(void) const; + virtual void copyItemParameters(UBItem *copy) const; + + virtual void StartLine(const QPointF& scenePos, qreal width); + virtual void DrawLine(const QPointF& position, qreal width); + virtual void EndLine(); + + enum UBGraphicsAristoOrientation + { + Bottom = 0, + Top + }; + + static UBGraphicsAristoOrientation orientationFromStr(QStringRef& str) + { + if (str == "Bottom") return Bottom; + if (str == "Top") return Top; + return sDefaultOrientation; + } + static QString orientationToStr(UBGraphicsAristoOrientation orientation) + { + QString result; + if (orientation == 0) result = "Bottom"; + else if (orientation == 1) result = "Top"; + + return result; + } + + void setRect(const QRectF &rect, UBGraphicsAristoOrientation orientation) + { + setRect(rect.x(), rect.y(), rect.width(), rect.height(), orientation); + } + + void setRect(qreal x, qreal y, qreal w, qreal h, UBGraphicsAristoOrientation orientation); + + void setOrientation(UBGraphicsAristoOrientation orientation); + + UBGraphicsAristoOrientation getOrientation() const {return mOrientation;} + + QRectF rect() const {return boundingRect();} + + UBGraphicsScene* scene() const; + + protected: + + virtual void paint (QPainter *painter, const QStyleOptionGraphicsItem *styleOption, QWidget *widget); + virtual QPainterPath shape() const; + + virtual void rotateAroundCenter(qreal angle); + virtual void resize(qreal factor); + + virtual QPointF rotationCenter() const; + + virtual QRectF closeButtonRect() const; + QRectF resizeButtonRect () const; + QRectF hFlipRect() const; + QRectF rotateRect() const; + QRectF markerButtonRect() const; + + QCursor flipCursor() const; + QCursor resizeCursor() const; + QCursor markerCursor() const; + + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event); + virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); + virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); + + private: + UBGraphicsAristo::Tool toolFromPos(QPointF pos); + QTransform calculateRotationTransform(); + qreal angle; + + void rotateAroundCenter(QTransform& transform, QPointF center); + + bool mResizing; + bool mRotating; + bool mMarking; + QRect lastRect; + qreal mSpan; + + // Coordinates are transformed.... + QPoint lastPos; + QGraphicsSvgItem* mHFlipSvgItem; + QGraphicsSvgItem* mRotateSvgItem; + QGraphicsSvgItem* mResizeSvgItem; + QGraphicsSvgItem* mMarkerSvgItem; + qreal mStartAngle; + qreal mCurrentAngle; + + static const QRect sDefaultRect; + static const UBGraphicsAristoOrientation sDefaultOrientation; + + void paintGraduations(QPainter *painter); + void paintRulerGraduations(QPainter *painter); + void paintProtractorGraduations(QPainter* painter); + void paintMarker(QPainter *painter); + inline qreal radius () const + { + return sqrt(((B.x() - A.x())*(B.x() - A.x()))+((B.y() - A.y())*(B.y() - A.y()))) * 9 / 16 - 20; + } + + + UBGraphicsAristoOrientation mOrientation; + + void calculatePoints(const QRectF& rect); + + QPointF A, B, C; + + static const int d = 70; // width of triangle border + static const int sArrowLength = 30; + static const int sMinWidth = 380; + static const int sMinHeight = 200; + static const int sArcAngleMargin = 5; +}; + +#endif /* UBGRAPHICSARISTO_H_ */ diff --git a/src/tools/UBToolsManager.cpp b/src/tools/UBToolsManager.cpp index 95b40eec..d30e4fa1 100644 --- a/src/tools/UBToolsManager.cpp +++ b/src/tools/UBToolsManager.cpp @@ -91,6 +91,12 @@ UBToolsManager::UBToolsManager(QObject *parent) mDescriptors << cache; // -------------------------------------------------------------------------------- + aristo.id = "uniboardTool://uniboard.mnemis.com/aristo"; + aristo.icon = QPixmap(":/images/toolPalette/aristoTool.png"); + aristo.label = tr("Aristo"); + aristo.version = "1.0"; + mToolsIcon.insert(aristo.id, ":/images/toolPalette/aristoTool.png"); + mDescriptors << aristo; } UBToolsManager::~UBToolsManager() diff --git a/src/tools/UBToolsManager.h b/src/tools/UBToolsManager.h index eee12d61..410b224f 100644 --- a/src/tools/UBToolsManager.h +++ b/src/tools/UBToolsManager.h @@ -76,6 +76,7 @@ class UBToolsManager : public QObject UBToolDescriptor triangle; UBToolDescriptor magnifier; UBToolDescriptor cache; + UBToolDescriptor aristo; QString iconFromToolId(QString id) { return mToolsIcon.value(id);} diff --git a/src/tools/tools.pri b/src/tools/tools.pri index 90e69659..0196f84d 100644 --- a/src/tools/tools.pri +++ b/src/tools/tools.pri @@ -1,20 +1,21 @@ - -HEADERS += src/tools/UBGraphicsRuler.h \ - src/tools/UBGraphicsTriangle.h \ +HEADERS += src/tools/UBGraphicsRuler.h \ + src/tools/UBGraphicsTriangle.h \ src/tools/UBGraphicsProtractor.h \ src/tools/UBGraphicsCompass.h \ + src/tools/UBGraphicsAristo.h \ src/tools/UBToolsManager.h \ src/tools/UBGraphicsCurtainItem.h \ src/tools/UBGraphicsCurtainItemDelegate.h \ src/tools/UBAbstractDrawRuler.h \ - src/tools/UBGraphicsCache.h - -SOURCES += src/tools/UBGraphicsRuler.cpp \ - src/tools/UBGraphicsTriangle.cpp \ + src/tools/UBGraphicsCache.h + +SOURCES += src/tools/UBGraphicsRuler.cpp \ + src/tools/UBGraphicsTriangle.cpp \ src/tools/UBGraphicsProtractor.cpp \ src/tools/UBGraphicsCompass.cpp \ + src/tools/UBGraphicsAristo.cpp \ src/tools/UBToolsManager.cpp \ src/tools/UBGraphicsCurtainItem.cpp \ src/tools/UBGraphicsCurtainItemDelegate.cpp \ src/tools/UBAbstractDrawRuler.cpp \ - src/tools/UBGraphicsCache.cpp + src/tools/UBGraphicsCache.cpp From 98fe675b6593d3db62045cc468ce42ed9e2d9ebc Mon Sep 17 00:00:00 2001 From: Didier Bathily Date: Sat, 1 Sep 2012 14:34:03 +0200 Subject: [PATCH 02/80] Math apps updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Brings improvements Balance - No more empty weight - Left weight should not go to right scale - Reducing the size of half Morpion - Correction de l'évaluation des lignes Train - Add <1 and <0.1 options Signed-off-by: Didier Bathily --- .../Balance.wgt/config.xml | 4 +- .../Balance.wgt/css/images/delete.png | Bin 552 -> 1588 bytes .../Balance.wgt/css/images/graduations.png | Bin 1856 -> 2373 bytes .../Balance.wgt/css/images/pivot.png | Bin 1521 -> 2318 bytes .../Balance.wgt/css/images/scale.png | Bin 47788 -> 17368 bytes .../Balance.wgt/css/images/scales.png | Bin 31434 -> 9037 bytes .../Balance.wgt/css/images/weight-add.png | Bin 1280 -> 1776 bytes .../Balance.wgt/css/images/weight.png | Bin 2410 -> 2615 bytes .../Balance.wgt/css/main.css | 81 ++++++++-------- .../Balance.wgt/js/main.js | 88 +++++++++--------- .../Balance.wgt/js/templates.js | 4 +- .../Morpion.wgt/js/main.js | 3 +- .../interactivities/Train.wgt/js/main.js | 25 +++-- .../interactivities/Train.wgt/js/templates.js | 1 + .../Transformation.wgt/css/main.css | 1 + 15 files changed, 112 insertions(+), 95 deletions(-) diff --git a/resources/inDevelopmentWidgets/Balance.wgt/config.xml b/resources/inDevelopmentWidgets/Balance.wgt/config.xml index 738583bf..8b6e7741 100644 --- a/resources/inDevelopmentWidgets/Balance.wgt/config.xml +++ b/resources/inDevelopmentWidgets/Balance.wgt/config.xml @@ -3,8 +3,8 @@ xmlns:ub="http://uniboard.mnemis.com/widgets" id="http://www.njin.fr/sankore/apps/balance" version="1.0" - width="1025" - height="880" + width="540" + height="450" ub:resizable="true"> La Balance diff --git a/resources/inDevelopmentWidgets/Balance.wgt/css/images/delete.png b/resources/inDevelopmentWidgets/Balance.wgt/css/images/delete.png index 22bf8f29603e78ca5548f17751fd8211441790ee..c896c1abbc0a44f40c0193a172da944e532f40fb 100644 GIT binary patch delta 1585 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 literal 1856 zcmc(fX;4#F6vy8Kkswg0Wm9Pl;0CB6Ac`z*2}@c;42c4YC=e^4Ng)vexPVFwK`0WC zrG$uD46@56B~FMtLX!qTwuXcTkO*O4gsAj(`lZvEe(s&Q=bn4d|D5xC@6LNEzCND% ztJbc9AV?qQg~fw449ss3n!u`(zY~H*lX?J0Kp+r(1Bc{btMh|b02P9CSN}EPcIl;$ z;LwET?oY!+lTOjXDP$xe{2U2FJD}{GP-uI}p5y_bF#k*8M>$Q4JrzxY_J>hINJx+H zXi_XCI+BXS`0X6wKfD1!8ryxn3GP7u|Bm3`U;xnA*a&Q0UEP1d96WgNUm*_<4{*X_ zvBY9AaN641fW=@iEiEm;iI0y5_Md}HCWCEJQBhY{7jU>-ZbwH4aO~~v(P%WA%}z~C z1sI?p!07Ai@UTE209l=#oq$%QQjLy|DwRqgc>er3Xe5JrG)N?p`ucjHY;A1?nt_1b2BqDAo}UkCvd*Bw6wgu%!f88!7FQ|;eGrdSVMD#)=F)J&MI9!{Vxm* zzg+#5k+F%X*_yTM%)kC-J<`I`YQx6OTdZwtZMSaSwrxAg4sGwS!_jf)E~nkj&Mq!4 zuC8uwZu>Fr9-dyfZ@s;}!5#bH{rvp>0|J9ig`GJQ9uaYtOr}IrX|(e(v2=P|e0)N} zg~V$N7Ay5e`pwL&+`RmP0#0Gkox8>Nc_k$e9+Z|=H$37C1kKN0zIxpz68|P?f7AK4 zr%&2HFgW~fL^(P(Jv)a&89fBwT0RcDpWyXUm3{Egx}!!68FixV@dZ0x?^m>UL(pmS3b8`#p*Rw zTwd5eAcI8OlXNSsT5~Pg4UN)Rsc+%F&uRxxvHI#;@h$JKu@1CEM9>+tFRE64S24o6(LT zCL$Y1@0$LRGn?*0kJdPA1bAy^JdQY01k5w8K)gyhd#Coa7{Vjba8 z5Y)KRtnw1?&g;CZw!A@eheUz=%VgCfaHFL6dTK_JzIl`Xgpqnc3Hx zY@*8B&FzRK9@e__AYQ#KQY(YuWLI81s)?It?^7`0L|W*S3Rl_BeC3b29|s*v86_X> zjo+cI*CtC_k*F(JFNsKlq4p3=TYF_DkJP+Xl{%z49D(&|7UhnvYz~g<)q*!)zMv&v zvV@RsS^1kdgV~EiQr$D(@3d65Tr`c=4A0Vl@(kdU)zWe+<|EDvJKx!INba=JYkAQ2 z?c^mcoOEpahI2WjD*;ebH9N;*YDvS_tZJM#9hCXuZLX~BmrE{>Bdy~pgRpD5OVqH_ zk9%P`b>gh4f?ip>$nVdrNfR}}P$`GZ*_XKyu9E-c5S+82j5vBYzTP-r9tySKQP|@j z&G!il^^+bQDYzG%F74d~X9ao&xy9^Jh>c1k1!defDY`AXc>RY9x9--ytmPL?MF|d9 z?pj=p?5UOr?*-~7SiBIQe)YVZ+I!Jr4F##dnQ!im6uel=WS(H4GOJgZ2qPa~`3wt4 WYKmc8U?KR`Ksa|FY{h|-SN;U34^4jn diff --git a/resources/inDevelopmentWidgets/Balance.wgt/css/images/pivot.png b/resources/inDevelopmentWidgets/Balance.wgt/css/images/pivot.png index d5137e29944d8f44eda18af32247ad73b75275be..72e8e264e1e2fabff4b53c1c23334bcc4485d36d 100644 GIT binary patch literal 2318 zcmV+p3Gw!cP)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER00009a7bBm000XT000XT0n*)m`~Uz1kV!;AR9Fe^ znLSh6N)(3Ul`P8$@PMI+2@_YhNfBmJrXs%~WxD&jZkIB@fmA7(p`l3yLvV%(4g*B^ zQ&Qe%@ft-qxkGM1F7D3AXFrb4d3090+Fe(&EPM2CsiK6AbgirD9=W;YqDld*S>3 zUjk}Wl_bY%N+hk0yHS8fc~8$K#KK!C?35>gp4EdE4&3qWmc!Pbn}LvGqoy zu`Re~K@il$H55=HW0@jIG;BnQ#%Wgsu~8AAC(d9v9Ex$Ue|~=cUgp1WPu>^he3}WE zzhQZK`K7>Kg<%*8uCM43sb4|m?dS7=W{RQ_WZ3WbV}b5mTwHuWDep6X(=9-!C|O-u zS$QqEEp=^QkxF#YZT~qbsw7Wc9SU;q?Ck8FqB(ND^A7xc!6`^C3hqr5MQueco^<0M zfx{mUs+2A+F2?GS=c;PR=UYL3a}17a8bQ|}SzTLO`&(e`dc7X2>^bH8kb+8jyvP;fjj0U!|g#5Z-0g}eonl9dbyDQ`*n>b@g~bC>XiPkh5b zy<;-U(9NmDniLqV42Yji8_wn*m-xgt3}RWIFkMFuZ>y`Tb}G?J%l!7>fcV6>AS1DC z!$jgMk@1C41Cwx{I@?mtkAVRem|(LoD!kwe!O$;<>&7b#u)stu?_gb@F21cpmCNYb z8@lUU1s0fKGptHfXiUDX^8%Q_1e;NRw*^-fyqyP&k5f`Pg9$d?!IlavndTvSE*^9< zOf92KQ<<`+76(+61dBCh(`fFAlqr4m771a3t;{*E$TYM3Kj6%;+@aEFWy|hs?ji{j zY$kb>bX8zcI#=@`Ot2Y~nT|+V`p*?0Ot7)TI?$GIB*3|vs9}Q5bi3U{Hq~>~%|cQ4 ziU~H>gFS`wqhv5A-3(wbVd~k@s~y#@Hq-+F&ckRnu)ri9yB@44l%I4gu`lXSb!C3` zgph`?z@+uy&7MR@5Ibs!1z6UU!z{x2P0YEC@;2E$37`Tz)dqS;;U$V?OgWs}gfQr+ z?h8!3jP{+AwB34ga`Hh>u%|FDNP#8TgCu<66W=i4)GEV%-ZJIy=Tix8;d|eHy zTfXPBU#82a4|J{l+rK=tH%`XkXgJyWP?56-n8(M*cRRq80h?STDLh_!ydJCu+ggG@(^XU3P)|%mari4(2ZcFL z_XJGBy7q@(hwndMe*V29V4z%*VTQXM<;`aEi4HaGA-ba3&{b9Y7+6WGhzQ(cfQnFaQ7m07*qoM6N<$g4iEoO8@`> literal 1521 zcmah|do+}37@w=#m@y27Va%8d=E5*TXsUIa;*ch623@F`3XQQd6I!cvNhL%IU5GZz z37cD|8nlVD2#cgS$*pv@ZA&TbtSI|x+Q0XA&ilR3`#itj?|HuWd|!?*coW)yU;u$Y z&;kB_Az&A-E~tNNPrxuXf&FZ2|NMQ#>U3h)|N`8(&=;{2T4E%G$N5m zp-@25-rgR}qjdmUJ3Bj&0W|HLAP-D{xrK#=wka3}Xo0P^J1_@6z#nLVn^x}N;J{!o zm`o;%#bUGBj*gB_PEH&S$JyE0#l?lo(O$7wrFv#IH#Cg7p8xV&@eU_=w~Ie%@iCuIJ~%quzO8v+<3U>Na(1 zgF2PtU~Y<2KUA7D+b*xPadOoRMyjTqm5@?#u8huCKq}iKJ6ldYTRPT0S3qr6z`(qOmV>U6#2q&*|D_X+zV+zG-D1k z*75S51GCvp7l%hq^jsD{{qFi>W2Zr{;1E}$Rm1~V1u}xvqBG_ucuL0I$Y036XG!a+ z4USfQLlN#MM&7-8Y{iGOQfw{@d?zF;}uhjIE~Kh=m!z4L<9 zkk-Z+7Nlhpx<}{Uy!YrfIM27Sjf3$&oPN}o$V}>OIWBsBc8r9spmeVP26n?B4O-CeF?QR1LuB3sjf_Ibnl={ zR7_GVs+Qyyh}X(pyIwDgJ$GvWN00QFw$oBB3>t7T2ow!9z5tCsPT z_zKjDM$*u=6gM`nAeR5#x-NL-ap@=B$+2{C4o7L+mHSVq3iNhw?%sXM zMq|5i%lvfpBWeFg6f^SWEd>rS@u38B`~054%e5kfD&^|uq1dxYqFo!j4EsHDm-fQU zc!Pt1OBu70nsV$K=NNZxxt_W|$Cs7lGf`ZaMdM!!VI(CTq1F;MFo}62bhv7fPj+qo ymfbo<(1&VX5+WvAKmMbbiHkp2Ro99C3?=*$XWzFSa|!(UkN`oj-&LRJ%zps{TqW!P diff --git a/resources/inDevelopmentWidgets/Balance.wgt/css/images/scale.png b/resources/inDevelopmentWidgets/Balance.wgt/css/images/scale.png index 386184c280ff306cd3f3b53eb27fd236c6e5f52b..b201a38642add7ddee5353700f7f3c2aaa2d3168 100644 GIT binary patch literal 17368 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 P00000NkvXXu0mjf)0QvDk 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 Z{{sapk7EO3VB7!z002ovPDHLkV1i~H9Y_EG diff --git a/resources/inDevelopmentWidgets/Balance.wgt/css/images/scales.png b/resources/inDevelopmentWidgets/Balance.wgt/css/images/scales.png index 1fea726c02ea21812433a23b6de5564c33466ad3..cb25be600759870de83cdbbe85faeb1256b7d3ec 100644 GIT binary patch literal 9037 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

8o zf~?bhayrV#VtX94qxHa=&u$b->Li5fjFJX`8ZJi5SKB|XVcUTYoO{Lv1A zr}?OL(x>=D33+-dHi~}H2#8+sz}Yyzkw$0ChRvBM4YK19*)$Ss5+`kaIu>|{UkR>! zVak}v&N2;=ifLkwd{0`yeI63_o&*(pqwoe=cy(hA?FG0ia4@jk5%C8`>+u=%}M)<+xhXT`|4U?)KEpvii37ddS;7(wk1nnky8!o z&4~WNk5%p(Fa7b6WqoMy3qP@fD~k_gHAPM#2iZ5~sck^vm&?!6@RIPoX}G<8R3o?g z)>2^-6(2}f@uP8bo-c-L<0)GvswN7uIILu&<<#HxG&IR$xb}%BvFUM&UCdvCNMZ+2 z?>DzJL`CUAT-t7d2db!d~B)C@*3aHB?b9CpdDpa()4;7 zYMPbFh<@Ctrp?M|vYz!dhR-tV5JWO#afB(r@x7vG0Y&xicQx-OSfGNm7IyHah zvzWxw45agyl)^x|ES_IIsV>>tDazW$3IzJAUUj(f6GSO$7v=ZvX z`BfvCX7KNMV(XB^TfD$Fq?biVJR6BB`u4udZ6aQXR)ZEq_I2@P!sIH|<)JWBHi zVMOSRtV?rbnuk*j=}HOCkd#dEgKaK@C9uY)izAzwnwKiyigc>*OF1tUWk={gt7gdM zvnUMcFtcWNVPN;*`p?j`lqEJMmeWA=lYXiy`c!4L=N9s?eI2x2Y!cO-Ne4C)sH;As z^|e58lqWiKRGgp;9h=uP`c$atn+vgXFcaOJu-Tp>$EI53uJ*VD5zIW&_v3S)6*!B& zIkGr~aKqX-_U%uVvOJ4%UO3!F`B<&==3iAb>7<@6MR_gvTc~yy1)i5ttiPLENAAkU z#c46Pd?G*sSd1J%kajQtunDHH3T-Y~gxk~kAKhzH{lK0MV2_N|pWm7%AHI+6%oXfC zS~0vvpH0a>Q2BrIli@>`gr=vGhmOB+(m+M%^+&ot&%t;i#6q5n18xw7A zIireGgK{v00Z34X;!o69i>tD_pBPI3Q!Km=jlYCA%v)odtO+qdsSTB=>VRHxJTuuO zWMYHG;l#SKpt=H{$zix&TFoWY_?0CLhRoxc{&+|onmX+W00hNYEPO#$AUkfY8g0A{ z=>dlrnTNu4upC|7ljKtQc2GB!<`*hLDK4_pRjkfIXY@>)eOVrrDpes~QQX@FJX~`} z6ZrDmhvCVi>6#H4MOTF<*Ck1XMkjd2)ZP$I`3wZJO_~7Y+08)FrI6?%Rjoy> zKCHw17$F@E&!9-jP7W2_&v}y``Ji@-lP?cg_zj0MvVd!C8e{^e&Rk7zA!;jO+rqpy zjR(Fo4#lxBjZV5U+YNOmb3L2RWUfdRN1<;W`|Aa7?*J8bgg!ZpqU|smb*RN$mhFh; zRX}E2%vQ9<`s;eHvW;;*yj?~2iRbLkPfZd#{Sv+m9PGSZ~RPh2%agL7YO860~bPnz{yet^SD zirlXG`f^LaG%Z?`AGd5pCw!y9L{Oqeb)d%9agPe1-)9R+V?iMGf`gK{J(tJGgKMp| z#k452Ajfbrnf(@=Pe`#DE7zgW@J&UTi5KOg!Y7|Txr#YARrjqdT}yqV92P=VwOlbs zMh!gsps%L=zG@2hB?oJBOl%DXpZx3M1UIn*lxfRAkOmos2@~Dg%mFH4`S_j1S<&xu zIP94H^Ey7r^H?Yft14F{n@b%+9_+ND5|bmwM`xQDT}nzb)9#mPn&QPzl*xMMengFq zoU_I&Go;jyHe}<|iKTU{x)~7Z+fDV1f4|ETA3LSNZM(p4Q8i0LtNKYK-pELuQwfNF zwTkMX^ldci>L?Gaf_`+)oZR=bPYGWc$8+I3G4U)8o&2-?#@Ky4W6Af(#b1n|zRWU8 zeN$39+HHx{jqZLTa?Y`qM%Q!1>R<`yCO;g_f{r-3~e-5L31T<8^sJ9Qt4gbpCdZeNu$AQMee1)jv7!X`8qVN$B zz>957P5}*NG*`IWn}|eDK|*m3`+C<$Cm`%2BsoHPsmanS!54P+kQ143SAExmbI&g@ z&ED)?g#?yf8b#99`A8-kQfox%c&k2Jbs6!NI3`fO6E%00jv6*4C(d@VY~(-9DL zeOOz0+aEmBNqhGGWZTk2({f=`{sZ@{Wa5m48Ni)`P@&;ws$l~91pFTS9`!kOnDVq- zt|oc~M(h2NBq<$P4p!G8w{+lvRc-3^^&rh@nT!-$!Fatk7g+fm+X+&FYcl-&`G`=7 zN~D^aOAvwnCU+$jT=)NVcb0!qJ%1ZVkuMS=poqlM-7MW9-5pDJHw%Jpg|3i6yRHRX?<0F?PYfdQ`h6g3;XA`TYvhdr`0pL6DH@;i{ za%{{EdkJ!b=S;b1l=^@0>kjP4u`X30AHC6NRdABJ?J(Wx>f*%j?G5h_i_dlrYK$&MGWQV`Pa6@PG&xa&$7R-o+DvS~x z>y#4gw#+zPjbA!-3!ci<6uf&>9aWj_fPmwU&I-hG(4BLZ3!-|=E{lJ#RK`huK;=7_ z=jNAWgJXS@MwA{QY&5gHnCX3^>~X=GOM!`n-HT1Y)}MT#X_PtDekhhqVF`fn-l4Eq z=v`332}r!@(=+7Wu@VJ0-&wQ&<#-l@q5Xalg781*++j&s6OPWz_)d*0O*kBik9ZMP zzy@2*1l~^G|A}d!>-pM)Frzw?sF#Lz7 zVdWo*mdc#(KK!!Zi9OLtvAjqh-*BFK_-Hczf(MC z*CzQK;3`9CQwqL|Y~QFDjrXXuCoe>P{W^oXZ&YXwujow}t@NtOBQPVJC? zltwhT>tltM=R^2)xPHW5Qo9S!u=g<&0fslwe+d5JZ_yLTq4hT`D|kcpM>mg8>pw$2 zwSi4k4$M%X;ZO#wE`^Nos_9g0%n}<1rq(IfLKVz(Dh==S139cQPff-f^ILz*s(#n& zxMig;QN3G}!(^AO`K4>Q%nWl)wL1vQsvd*=D&g;3@M;Dkv!Z z-CidTr{5o^50GTz$Ed~Da@$=y24!Qc?7wDbP^M=6i?A<<__Zl~zme;I$-R$;wTuvbO#;`2MP~v578-yy0UsZmDIC ze;s>F7?r^A%TH^e!#)v0-tWIL5i+Gk``jwqRWp(9mV3p0@5Nw zco(Ole`8ZheH6*mE}G4Vu%kiCl5ma;nmSDhLe5(ef92d8_@4BF*O4*b7r3n@ux)tvunB zU-!-1F+#zou)>i%QMaI?vFv9Ljn!ZU%|^aa=dk>uQa1}qXy{jm-heMzNNhf@3UhR= z>iPyR*(u`&QdpuO7*%HH%-(l9>vn0vdbhs1_sR(a>Mg0(sV{6R)G)=yXn+%nQGJzh z@ycv+Sk%hv#*4L#skqB+%Y$-kRUPWusW1MSa@G9y+jF3aejQfY`F@m0!a(5eAZV|f z8QS*raHMHL?3~P6P+E~M=93CTP;KbWN!8)eBx`)A&6m7+AFU;@FB*~kgD4SfoFF`n zS4RWRLrN=U3$di_Rd6Kvsr509C&-@hv)DF4n0Ms5&f^e)weP3da^`ku4r(*;?z^@0 zr_QzUWI4!eu{i8OCu&n{-&Dzx6TM3>q^3XU#8B~)Its0j;*3i~918xk`soNw5(2z> z7$1@Pb%7yUz41QJj1aq`H1Qrx9HXPZ_Fl7x?dv2fQPLN+0bMp#8&=v~V6lEFD~b0k zn)V<^zwmVAzjlRkc2(M!jT9BmF7oVuOP;V1h$`m~5X(vWJS%6knB$a zg_u{3v9Hox4hjrLRmW1w@sxlH9Gi``e+nAfeI^zGHk2p%*%roVJ80Y;&aa^!=6oF& z$;{f}>FpXXJf%&Fa@F*~zwB|!3o8+CIW?B47!c!YdzIW$Q2UZ-uMk^Q@yt0I5H&lS zu^2GKJ}XD&Lift1ZqX;{Rj3sAiNQy7OV35{v}5F}O-&8G=$FMhr%GS{t~RHqe=4@_ zHg>}pU@qj)#-I4@OH6ZSoiBGQv-2KXE=tFPwV}9&4=}q&lr>`ymOMZmz~x%v?MUAV^Vqd+2}|Us9mzvG9)KUYU-Qj!xokAnvYFb1L5oU58Ja- z@|Y6uTA9Q1sc2k52*cjh@aj2B>FekHve7Z$lS(cFE2ih}?adzRDUpOP%)_mo=O7^|~cg2@z<3Q*(^@*#KO&Ud`&n2VE4tayA&&69W&rnVqNt!CE4`yTSb1yD z8HAm-?_>>z>Io+#-l3C(v^9+=d2SCh{v}#f#bg#@pr)rb?G7G3bW+abn(@2cDawoc ztLZO3r2%Kgs{l*3Dt0O%1hv>xQtaQD%l|_Dt+fx-9ZKI7>c`oI;23K906~bxtxQHA z(5BTv(Plo+jcBTC_8Bfp3Nz!ky{o{-yDX^L! z^rThiPXx)rQ)+B-c1cHgnTQzt4JqHD=|(a)%7G2xDn@4X9zNiC()iF_g}t*zHaFpq zx<6h^RIK<5j<*%U0xdFzV%2<$@m7*!&SQ0JWvT*L5Pvg;@#0{{HU8V%yBGt(Vig^q z8qZE)QvP*=A18uF_@<+J{)eQc*pP9F{;KTj)X&Zzacw^7oxKn+rnJdCsd8gCFiP@& zM`$+klKQ4kTPUOpKTn#EbcFj@NWt`^ zPA}$UjX!gW#B0qTE2!ZB06hW#Iz^!T%Zj`gMxOZH%BY665?k%iB}0M+3h$2WTNy>qg6o@5Zm=Gz^U zm1-R!(-*5~Y0T}fvhRVu=Ha$>jCH)&Hm4B8!}$TS@^mTbY#t~j`1)-wqZt`0xn0`JrYf0gX$a3q zWZv#n7y|wDR*d()YRAtZUx9Nd4thQ_t2ECMtFfj_Rz48*&Se(LJxQ3ZGM-{jzc;bN zOUwHj^Hxe8H8(1>vPv4EMxCddsEnr(jp9yYZMd%jOsSw|@ZhStbQJx0|0E2geleP3 zRXYqoRG%Oko*I3(`g>Nslex*k{c#|UU5|00iSO5cv{AN)Cytwd?-{(rTn#{j?M>L^Z8+l!Y!8RUufI z_hCYbZW71^c@c{^!K1aGtRr9e8_n{NZa9Nu%gvH@DxM6}s+EeL)W^IC5<=xCFc-&j zDAo=BK%u9-`+ExFCR7B()E}p?qY{s;hz0Qpjl~i(#?Njb{9C~*d}CLUit_f0lgrZ(UZ-nr6mH^Rp<_qJ~17ZA?oLu{iE@A zw{$%|QqX^6nj6#*VL<&F=cMCpT)#{t5l2O$Ci$v{haioL=Aq>-tK4r3JFQwxwvkf6 z=V@U%z^u3Y%W)g*5a}|#7$x3KaN-SUebfIXwsLEy8L{8*fPx7Nezr{|sCjI8OTHMt zjKkLhKy{+hy-5jEf4ee2X$44L`xm$?nc@(+-#1!?WP7<^FD#;C=)OU{Y5*9tFDlWa zaQI05=0MMszQ!7!wPt1FG5&`s6B75q3s{_kd9V4~L#FovFS*uIbFbc9i830~fmSi) zRzR8XyLE&g+*|9rMxy?3c7;twx?+<?l0@35l6-cr|6E5?KBFq!}sYDk*=d9#4z z^cygX$5-w0Zu!Ynp`GC!YKTMBeq?_wIXm1T$H5r?ML`l^oQ1xpqS@gDHa5&7H;A^ z0f``GAzdwMv}4(hisdiwLDIt3WaI;EdzNU%IJQT z2~S$*xFp_wKZx!AnhGEUkCy@t60apAi}5(*#gqdl9E8i9ZA`dWUrsDd%{o}iVCE-p zR)l+Nx{9#J=b*5nmv~8vh!jrsCgTLAa3(*&6==mA{dS}Ez&;3=X*Zkgq@s#)vd^0IbZ_46O0-tKjkA+NL?pYBGhl@4E$23mYZ)j?x{&A^3b~jv$p!d zj!0;wplmab-8tV8P@MHO0_2NQsh4SkdW&l^)Hs5A+9pkXPgv#uTBNPcta|spEHUV; z4H?Usry$D(Nep^Oy}?Ogn4bAHzYSXTog=0iY-j#Q-lJgWtdb0nALz$rRc46<1Z`uHF0xjVceBLW z9h4u}@$4*MwV`Fn3=Z!pW(QfrIfVDUU`pAKG~BF4A8oQKr-U<0Q_PtA)F`8yb++J2 zcH|D!0n{uSj&hv}*!fi8ZKycZtpB&FW_6t4%cSuPW{2>%TbzJ8f*1XShjp0K7W+9b zhrZGH0cBNy!?i+|1YENPF&@}lEUY|5jt#6k7GZxeKoRM21{BmPv3TX z`0O**%%8<=^)2D+GiPqgsA9-N&A8W}`OXmkOF@N*BG%w}ZbVOYi1mtkdEI>gIyD6q zYu%uSW%GX|4Fha+*Ybnl)j$KqipNz0Lwg*p)4uTJY+kUcBF=}6(a+}J@ZSxjB^vlB zlz4-`cEd^y$OO^Opd%2@T*)-XWdsX zE_9@u271N*e)~D=8tmRXt79M%2E{m zpwcerwd5B%en_OW8k{Z{8aWYC5TI&(y3A}*+s8lBvntHBpB%7@R%f01V>DeH$_Oz3 z-YR97eA*g)TV|=3t0Yu+u34GHtL>)etfYr@5f-ZU^r5%u>p7mRq&LcI7yo0R;l!Ut z9`lhY(Et+V?c39l8t$OScNqZyG}si{Yj2*DVOkZx=$K1H#7l1w8sq&IZXnHV;o#=x ziN;TorwrufelY12}L#fm?# zo}&FDRm6uQV(gnv^0?4wsK%cFEt_8KZ!4OTTi@!1AoB7YSJIhNBi~$5 z(+-CkE#@F*y3P415{#%=;v*|>cJN~Pw#PwSEYlXKp_*e})uW1Mt3|=P{GEk34HoRS zh~Cb1V&>urN4A)=xXrVoURZ`L)r-@VosDHByCR99e} zrN%e$ZW6B71ANj7y)x3Ce%HnGHj(8?CZ{cuN_eI`O)J0n zV2c7qMju*fRG*RV8HK#WNoBfV-n04Ff`dN@jEm7}i*IW`3He-BhjEE@`CEN1wn;gv zT2JODL_+Gm;H3-3W)2dGDEL&AF%~3-XEy>t@*_$e@V~)uAJ9XW1o+(sl^PFS&fJ2K zSBeVbE39qYN^@98T)^gRo!G9Q_4_0?j-6qKNZ^^c$KeK&zW z@%m+g(@mo{+W*t{KGudcGR;O}lqv7R@jzR zA$a5kTM=(D<%}=Xg@GPmY=@y0GfN&VQOdW6z+pJ8uHdnj-J8dWKT&> zrPuV!LG4^RlS;2MO;)amz?iYS^Q7jD(MB10oa=1Vvv&y~WnlkU`HP9!ud^s#**wn^ z=Wt7f@TPgWd}lfgr>|c4KNH`@rKS_dG0c8$2yF{={X%DIf}*a`SO;Ne@z7CA&Q0J+ z4ma}GYH@7lTI_hMMsn$Q$6sAn7|73^!QMli@<01L2FS^3MDKBWzF^CW2#bYSe|;1A z;bXJFm&@#en(6a)&N%Ds_xH`KX?e@MVm;jw>(l0)Yge{f~B%Hg+Ydy@WR zt)XTW-lnjJl4Qjjyy@$EVkF=HA~EXGD)X;caXZ6wx7P3L6aQ_ex6))3WlsR7W@l59JPG}@|B}1^YiBwN z*dlHCEBnju%gW@ty)b}%QHq33h)V)e*DFaa-Q&Hp82Sa%W*c%&fL%H{L}6lk^!sUw zFHNC=54l1j)q53vRtv}YP4!Z;O-}k_fSg)-AMd^BSWaU1#zx~1^t5RNEL)nlRn3YB z%-#k#G)*Z|?`k7-O^T32Ls7TTc~sV)R{Qt|ta(l9n-*!~Dp&AN#JYE}l;eW}=0@J~ zaOLE|f)J|1SH`gW0XCpXp=Ti@y2HzNE=g)9E@lvo{wehZxap^F?7v*0GXh0Vt=vhH zM1`8RD&{;jW%d20vgHj=G!W$p-h;yv($(fKpY)UEn^_`#<3tQ;*m;ZROYX$Qh-&1r z&~|nWep^c5^=hOQIztUHOfspJdqXgq3(4{-D;9tuJpEpN96O42CXuUN2&Gy0CdSF| zm-8_NQ2C6N3}?xPwg4QF<6aU2F38Hdpj(<9>+`N5sQ&E{K0lSh3M{a>Ji8IGesGTY z{C3roP7THOa$L$O$;Y_(7xHZitB4CTvDF#C7W4^2J8En0Tz(*&{PE1;t0l#^2zf|5 z0oKsZD`f_z1MAuknDT2XtQdxS#k852#jjNbKX7GfvwO>v z;5R6<(Y)3k*jV_ZVwv+_-?#SWO(1l$^h11w;6*>IyP?(X3`Xt%5{2(_yX@GjOvqs9 zvUU41A;+{^>2tmEnxkun<$%V^?HIMkNrYY;YWaCZr+J>=M0rf%DT0Cj!E6UVevpLA zvuxXSy_{jB2sUnohD}+|KVx2_i@_KB&FHB9Q3-r)5hoHULnEk>B$K&R$NRV92Sm!z zhT7&>8JC|DK8Rrwba++Ak%#n@ha|kh8L*)y2PvB8G*IDFch@Zz)Y834FYRT*wu#YLO3hzKv2VS{!7qhR4oVm*uDKPNKRI{t$&Mr zN^{aP%C+zHp1<0fPA+VDC>AqsCm{;n~jc%o~bm%Z#QE`e))XVd^Y+{qB+v3 zo>%m?>n`f96NmFXF_21r!Rp%m^IM0nVU(hF2DoV+z}WM!GgK7;Lq+0$1sF#w6lZUO zRVX{n?}ssu&Z4+($m5RANS>wADk7cc*8!aDJmfp^K_?uY7R}`sy)bFP^S;l9AEI!^ z3=d(TLMdCj?x{pk0(;c#+FOxh8T?!57OVaKa@WU0 z*BNT5pFkDoL;iN81aJ5LJ1X)-mq^yVRUQiSD0JAmtCw$c$Iacb6UoB`y1kA+NZ2l8 zOl1VHQERYN2}>5Qyv7)e$oCqtJawKiK06)a)Gt*uSUw3m&=>HO-czK)50NqUR-j@+ z2mCZIMNwYhT`+*z*6oC}^ntk02$$s3q+Pb%PWap3xK)eQ z!&)t)r};~^!hR!mDgw(EfWkmVWWp{*qYjjbc38i(bxZ8hW1q*+ZIZc6eT%zAz0E-) zbMWKY;Adn|oP~xszS_0debNefN643EJ9tlJhdpeKW%YVWm49{vbG4_ZOvf561n$G( zfZ2f;9?^qafYCF!_T_!A9;Aa7hgJ8~x!=LA<6D;A>!XuJc)k@icW^ntymX}oANgO7 zk2l*s+@gx0=mff%jxEBPenr9{!f~xgM1jHK(*OP*j`vXjql9my*fa0ACPeF)L?E8o z!94S$#L(By0ovtNFaD_HY~WE$?v4$)&g5~D5B{(=sgDxXY?J{K$W%Wk^+r|Cs#pLY2{x2hU00x4REY@$7sF>4t6L%E zb_gDniPE)!IJtf8AeBw*0iAA@!>qQrmPxWtwnJnxBqF(+ivvZrCp@KC?!u;uvl#(Q zUn+720+Klgh0fY969}0Hd4}i?ej!8tJImcI@?Md?Q9J9nOofCclOqu0@G#p4m`j06 z^kxd;1&X^eLt@u?OXPr8`(?ir#o4FDT*8=SgF?DU3#gwW_!*hJ*SIQpV6$NbIK!He z9l&Kp@XK{IEaLh9ke$HQGgPyd9#YC~Px7m9g|3g5^q41uTNTh4x8lVpK@80b1#6s~ zir#B4v7@(#JO*}zkIJ6=#YI0suU~N57RKvQl@;hk417z+ew$kqlL$~4gd(|+YScEK z$a*s3(jEIbt&?XWUNCn8m z&yra-y}Ofv##>3!iE*71qSg0uHG@^;6Pl`X|Vsp{YG^e3F{HX?goRW5;X8#8^LIsga0&fO=5`981lH<7`-W&VXUs&>#`WJFt+HCUF@P zW=5Fo=1T2pKEX$78lVX}5C%<1JcDo%^j&j1DQ91gw10XlL5CuAUg|4WRZ|sx$0jm{ zY1vuKQx;~`lm~RJ{aO{kq<;QMNO4|g&O(bqODysE_vov1gPI8LE(_vpvSilr#PVa= zQL;)AfV4|_p7%`7CUrp{voHxuCJg0`El(|&)KbbxA#8%P^Hjjg<82RY zgbDxxdkg@&q8vUEu~fG?w}KrNMeNORm-LHNpNarEKZWuW?-*M8mPy@x5reJ$C#@f9 zrLsRx3Ty@tBaI5|bi*P;>983`46B>kXYC_xa;cs&c9)e&RRB_)wsxx;cj5)#5FfV; zoA^ohJDk;EroK?8@V9Q_?-uSlq~zwij{y9A=vy#S)7P$hE6`VUZdK5I$~eq$=3I35 zaGVeT{vjp)5>ek>zR>liAL)POo%R=>f%bP$T)?!@s3V%=8gxG ze(0hc;XJB?ioLnJSX0a`dORk#K%^RFV*ae#YTz>tm+b>?dflq;{o-po?*b~Wx8K-< zCqVl71DHc!9jt`i#X&;ssy`=q3m=V!;&&7_E#WZpIiq#+*+M@>o3E>Nh)7<%E%v~o zi|ixlN#TwI`%x-Tm`U{Mu}|XhM0-qdJ%*l#GPC#z9UDn)$=#8xMnzvG?mkL!b#iw# z@78AWIy50k@}t^9OGfA3=KfCBaY=mdNV`5Ir36uskGkW&S z%eX2W*px_^o(>nvq#!>qxi!kfb3G_pi4W2itLGH}{WR>Gj3@`zzAWFm$@HHGrxj=_l;Jt2Zi_tuEp9st@dzVpOA|0b(jhxc18v79zW*Zc01jE5sT!SxFV7Bk8SHX z`T0QN+U@5bf3$Aubg#mRlnZvqG+I~gGEaB7ov5D>G&=iQkM!LMh6649LCDG7_%T1{ z5uCH3`hUj(aG=%P#Al-++@llIJsx2wbu4WP$+r%ea+kx1z*2q;*ZrhfDK7Mg=Z(X) zLk4^hfE*H(OZt5t1d1&08@K)p2fDE5PQLB>I1)@6bnBW~V6p)H(z+f)+g4u8FJEOJK9Ocus{OsP#aEswaC%Z_OJCK&gD3kT( zNPSn`10pN^eaSeW1j&3%+J9*YQ2 zdvhae$_NF|vuqcO{=zjH5^JF-Ka@x6m!GB#j!hhL1CsMmT=J!3McN3&S>cV;x-Jf1_HY~krW-!#5VEa?q&*r%qsQ8%Y_pgOLd_Wdxbk! zzA)P3q3;{_=q`bsY<92+-VFz z9hQDwk7yZ|b|xaJ*Z3(>EKCXuUAnKs6SN}4U#Wcl=E;l^-qHK2Dsc4V1Vgi!TC3y~ zb0b7FV&|yIt`a$7kB7JW2|Yl3Vq!mIHm%m~DC10|t@d)RSbflaX_CFN)(=`vd&Z_W z-LuP+Eig7O%y88*GQBIDT{-1DXD8mE-gSWht5D=30+!rz58NMpvKb`8E;CdqrUwr2 zuId0u7CDUZN0yauS3N6p;{Lx?%1kBU%;HN z?VKM^!{NXK;Lz%Bc<&|`wO;3F5^Rdxp87ZRmQMC=E6Yuf3syIl*(@?w`$hjsUZS#P z+T_jYp}niCoo|X-Cit;d&O^-|GCYvU=Ojm5@i3YU%~3al#okmo#G9hzvIJ{&zA z{CnOoJ_v;@)*ehUs`7tnYUNrlrG~63R!x`~>HvI^ZVbhnj*e=Gjpn(h{k=Na5wf-K zM_?Oca4s|ubr1mB_jUc;iaX8Y7o`4kK56;EVR?XmY{QTDz_=fX99>i|8QQpvT&{K4 z-m<)KX!A&F10V1h?ce=1C3EE*BfiV3o_S=yB%6N>Qn_<|8{g3yq#fB8blM{NRB&;) zmz`le?LK=+g1a|)37&J?+o+~^{GfWc4G%QiC(m8DT0L2s4pRGx9+(qX>gknrHt6&_$O>;R?cP*V_j%V(=xFRsR^3OUv@)oRp>~eXt>^7uQ@#Q*WqeYKF zqRt^#{Yx8r?hgNx`*t}i(HWDSYuyo8bChD?0 z4=cw@%AIN*jX<>ch|V=Krsdw>8$Ha!4tM~q%a<0_E_GIdqIUD*Dx(61xjmz$7Gex- zMqO5aN5=;O_qPWm-Vg2F)H(Stid`+71;MBWV(8|%%w`jLQwkjD48L1bZ{3LlcABbP z<}WofgZW+j!QKxS)4n-c?-a^})?>zdg8gp)#VLyieudb;_DSr@D009kLz8x|XJJe% zqPeFycJ(B~ zPQLA9sw!e8K62$+y(h^8`UI1j1oIXgYcu1<1fI4Wrw!Pt|K+pq}=u6CXs_9)N$?V6?l%H zp-xN`@3|&LIp^GvtwC?04;65K)w{s-fTtw!ZS`9+frWU9jfGsT$ZkSRy$3u6Nf>XS z!XV*_my5#_dZNb*l#cBx<4$|(aCe0`nj%u|Ws)`R7K_I7UGInV(yi>-21m7GG=>}t zZGP8)JlB3d4;#V9JRFTtgTP+#*sSZ!&%DmjuP|?wA8d; zsdltw(&A5^K&K1=iXP-i4fv!*L(B*qo_E(FQ@N@QK^ zO;2;3Zl8w?8ZKJl$e_&XgSbY5(%HG$o&G8bigf-j3<(zA78cYzpak25t4o5%j5zX#`ro(o{-av%DN z>?S|goa%)%kPhoLq~~9zFAJBVdqTUl`f?p@pwv>(-NCqsuBZOmh!KChY2d}wIL_0h zw2h7_so2x~+2Up|b4Jif4{?*E?NF*fi8D!yNsivT1m{v0MykwZzBVr0FNkSG5`;B; z;)otRxZ>ub^1X5DcFZvsrPsR=j@^it#{S~#Sk$iXN#P(%LEoKzS`6o%nQzw{0cRI< z@fO_|auwZ*2?>%^BZ500v&^YRnAr1SPSb*)XIrhl5R1~)_Y2ZsY4Pi~C)#GzE&G2t z9});Qd@+>jUm2R_ivX)i`iX@opmJN;uw1unk;c4BYQ5@;%aE2pXaP=g$qj?501r`u z^L(p|1%44Jk&n~Cn3?{K4+i6G5jqAv+VL#5+FC-UD1t&C;Q#NpMEx^S^;i>oDR{WY zJ#A866L=R_QRDD362OBRZ5x=bQt=%Lg29mljRd?q{sl$5o#*I=s@p8cZ%L zf#6j}>U@Re(&D1!vYRBS@qHoJ3;xTKK0f=rK%OLeD{+4uTt{7u#7%I8XP{t^b)k zt!zFW{CCnvdGxKO_1S$|!T{ksOGFfvZF2Eso6?nP-}&59uI^gFlW+g5Z1l4*>fJ0o zrw+b&CS2~MnivO=>Jp0>ui4!dR>t`Xtz!~*?I7Y*SZot;;Bz*kG3OmBrs_QEdquD& zCsI=1Y}MS9R{)1b#doR#!OH`DL(k*u<%2#V{`uq~8}~XN^+Zg{fa9=tYJ#h~lMR_} zT358JXI_$-#pHTu*ZYGhtT40Q+Rb98f7UOXX6nB)#!7WvwYVkZ@D)0AsMyU9#wPQEMbC#s zd5Rk@aIwEha-%Mlr{yll5E54M^NxMI@)er6S%)GFk3J(QCi6D-Hmt3LVmjv;#Fc2> zfoAzIaw#glQ-=|&i=N0_+-D_pOz^6 zS)}dsJO{*;H@p(0pI6YHV6R(%HQlz}3tn9n-_%!Gjv+7;q$>~`ZL6N#XUJdjzWcQ#pt z@$|IRjOjH`8^xb<74EGp+QgrH9N=Y^k}n4-epI9ph!MJvsiFu*|g0GfwK zj27?$#+VY(|F4QQUkK|Vr<+DW?v<{gL zM@0ok3R|Vq!Da$0cNe<)CKn3>&xGfv@+V9z1z0%?tEX8m?r*br%w6@DXlCX__yrAg zB+(1+IUj`M%FS2Db}v#=#s%wsni*_Pr*@rfXh?Yv~4YW6-_~2>#+i(W?mzFoE1iOhedo<^WfT6Wv74b*j(JNVe_M=y;BEZrF%EUwZj6XY?a&clg*g%R{0Oe z9GTQtXxCy_RdXjXS&HcY{^{erv#!7P+I{f4-Dysh z+=7D+CxbF7^))=bQM#L~4=GaYpJ=FFpk3}LKm4-Aq5|&jQWO0lH;u>QXw`du)d#E8 zm@KQfQpt^a1YX20{NuC zKmj@2dLiR-=)!+%w#^J`wAA0LXIn~DD`tfH)%Oog<0=>Gxw C77H!_ diff --git a/resources/inDevelopmentWidgets/Balance.wgt/css/images/weight-add.png b/resources/inDevelopmentWidgets/Balance.wgt/css/images/weight-add.png index 9e043661859f549641c48ca66f985c5c63539fda..329d49693a91fb8608a916fcdadf9cfcbb43bd94 100644 GIT binary patch delta 1775 zcmVd-#s*1~rR_=< zrRmrzB;-0biK!b0+v&EdPkVtk2K)g)*#i$qJRuDRVtd(t_Q14BQ-><5Nl1I>#1A1R z?FCigyLMtHQ^Z{L`pY@rIp;g)UfV=HUum_P8C8gutFE2TB$bn=7L=Y%iqf;xO9Rxa z=}s+?%gqul!4>z;>){=W2+Qq}?*2~pBfol!+|h|5Prz;!9eo-23{lL~Yqm=izX$vH zX}1R4^BnMh(>4SGs{)sOoDz7^$0t2bAwLO@&?@T{tq8mZJiORuFSlV|0~pAY;Z<%M zx*}$gv#pY0a?jx}k8!s#{|_#kb@c3AgIN2VrMY9c4~gC@_Ef%!Ki9SN9Pmr9U$41I zVSfeqkNVPl0(c)$^r@14bl&GjUtg^h-Ui+Ud(m)zrwdK{YIQMt92l|D^(E_=$Rjw{ zb!QT@q!)niR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX-FZ2WU_|EOVYio4;ar2Gci*3g? zux`e-!uZ&)u`T>C&?6>) z!9U18%+k5x(5n8T{;6)LU#J(<-#coA89SyVeJXt`{V07WeJ}k?iga1JBK;&?mA;WK z1v$I#y`Lr6d#_(%6WxkkXw_?sDx6s1tqd5cR(r+J^8>eC9KviwE_(z2fJiNaO~QQ#!EU`yJ^^;@xz& z(RhIORnI3xJ0CY1|E@P0J6|II7SUz%KUn~Acx)Rh6Ok|%e*$tzL_t(I5oMD-Xj4%X z$KQJ;MIQmNGKXf%4waU6R( zotneL!*83Lf16*@>2&vBy+sjC$B)+j{{EB6WYSjt-vEaf@t4mQ;H|*6?X!cy;Dfr~ zrPJQtUR{PQ*L9CH+_|~A#Y7@;6;7*Kjm2X3ze5ct8t!Ao#Iq7A{L1NVKFlg(x?>Kty-MyLNt+>!pqbw)Gl7y&1egTtc($A{mU zpPzTb;qZA~<7jtxx4N*fa8CRFD)C@;cJ?7+A~`rbI`sJPJK8hX>)lX19v_!VrO0qN zq$^u;e<JLeyJ%t!VuC2lsUbAAYtnESJkGRMTU6P^;B=Y(w&Ty}n+lRF;Y4 z8bf$=B>3}Hy3o`c6dmaipAm^nYw}DbOeV-hhCib$pl4+b|#adP;_Z& z>E_zn+EbnUyGEn&o=6T3k1i;nXq{9Nb80xcPSP{}^xlyE|6*d&nDP^h-=;TvI379> R4XgkF002ovPDHLkV1gm6ab*Ai literal 1280 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 Ze*s4{zAizHj1>R?002ovPDHLkV1kbB@@N16 literal 2410 zcmV-w36=JVP) zeIs6EI4YD^QE`=(mF43ek8k433HWki0w|rB;5^EMW#mJ?T<3*_LrdZn)Z3>{ovIie z8~q*yqobqH*Vp%-=H~O0&CSh|lpjNzC_^9er8-=9>8zYxyLPounbYZn;o)n(#KgosRF`9{mNw`JZg1IQ210j{ zm-(BejdLw;qHpmxz5%txVlfX4T)hh2-Q5r3BG zcviQ1`S~N7XU8u$ZQAt50|ySYWoBgF&&tY%>}*9@Sy_;kttjny8eF<`2`*p03@1*U z0QBWSroy3=Ly&UlkOJUDI%H;M3Lo;NI%x<>iA%Avg(!YzX4ZqlhY$CE{L#nz_%8M{ zzLPE3ERvr;sNpwOtXR4JlijgwvC{@gi{*UPbW9GBbFVLmG>^WOgb`^~YjvA>`1 zStKu)C~oM@xOd*!n39rGrO(siL#Xa#XS{AZgeoD(FIyyS;$dMztB_+jo%ofY{7K;VUW($baLa7;3 zvp+R+x!G(MKC<8GiqlYBT#N(GhkRTzMxz1B%gX`pK6sbv5-EvnR7O6Ad;=6072`}h zEn=uKEmHg-d#K0{`-8L2XD}N2KmBy?oMw@HyCooNH*em&DL>!PSXEv1-`d(*u%alf zwQ?FxqRc8}6?Lpo88tCiqqh}hSe$3bWrAF*2xM!emAyidY zgVkyk@vT<1FIImV=$|#vPqp39{$iX;OXWRXZf?bf4IAFWvHqOL9QKFna)$C6-YP%A z=LSbZL&JBCjZM(l*cet#;p|On{?YXs8XMs3*|SiDGw0yJgJN?X8XAP5!9f@l8p85A zQAV?ie6cU#`_Lq}Id|39*ZXi*eSu?6<|Xzrvj}=zr)l*TuIp*+%vW@aoG)FxcoAA! zTEwQ>(a{bgBTm!^(9-GfV2en5rd*pUP`o!1NE00MFZr4Av7P>|h$se|iqO1}O5{kXpj!}$1^_)`OE ze0&^jL!wM=$H9`XMI480cS!wF+j02o+HJNOT&52Jk-%(W22r74Vo@JH3XG~klgWqF zXOKE5azY@_*G^2GYYI>sThobvo79PLX#8 zwJEjXpVoSFpE)Fh^pQS?rtE-!6?93qO;7|mgL5t%l^{1qyqz(jh|3w9Z|L4AsXZ$*7tUTs8W)Km2I5Cos zTG88PAE0)lj%?k!wR0|j7CRUMf=5_7X>2^k4|vQm%wT!A|xLQhMoq0gI}ka6QIQg<}pCt<}to9+m};+6rjZd=4k?XDuA9f znE3?qB!CX%UF-@0dRAZ<$QA0#d;^&aAiCYrvGYHpQc-FAeq+WwE1la)<+hW#FAD-> zHh^OJW%2~R{Uz}?wh&6$!Q| c___c5AB?T169DKmX#fBK07*qoM6N<$f*vlM00000 diff --git a/resources/inDevelopmentWidgets/Balance.wgt/css/main.css b/resources/inDevelopmentWidgets/Balance.wgt/css/main.css index 616ed26e..baf0662b 100644 --- a/resources/inDevelopmentWidgets/Balance.wgt/css/main.css +++ b/resources/inDevelopmentWidgets/Balance.wgt/css/main.css @@ -15,7 +15,7 @@ } #scalesWrapper { - padding: 0px 100px 200px; + padding: 0px 100px 100px; position: relative; } @@ -29,10 +29,10 @@ .scale { position: absolute; - width: 250px; + width: 125px; height: 0; - padding: 200px 45px 50px; - top: 145px; + padding: 90px 20px 35px; + top: 72px; background: url(images/scale.png) no-repeat center bottom; } @@ -45,12 +45,12 @@ #leftScale { left: 0; - margin-left: -150px; + margin-left: -75px; } #rightScale { right: 0; - margin-right: -150px; + margin-right: -75px; } #tray { @@ -58,27 +58,27 @@ background-color: red; top: 50%; margin-top: -1px; - width: 550px; - height: 288px; + width: 225px; + height: 144px; background: url("images/scales.png") no-repeat center; } #graduations { - width: 100px; - height: 30px; + width: 50px; + height: 15px; position: absolute; top: 0; left: 50%; - margin-left: -50px; + margin-left: -25px; background: url(images/graduations.png) center no-repeat; } #pivot { position: absolute; - width: 80px; - height: 80px; - left: 235px; - top: 106px; + width: 40px; + height: 40px; + left: 93px; + top: 52px; background: url(images/pivot.png) center no-repeat; } @@ -101,14 +101,14 @@ text-indent: -100px; - width: 68px; - height: 70px; + width: 34px; + height: 34px; margin-left: 10px; cursor: pointer; - border-radius: 4px; + border-radius: 2px; border: 1px solid rgba(255,255,255, 0.15); background: rgba(0,0,0, 0.15) url(images/weight-add.png) center no-repeat; } @@ -124,15 +124,15 @@ .object input { border: none; - width: 40px; - padding: none; - margin: 0 2px 0 0; + width: 100%; + padding: 0; + margin: 0; text-align: center; - font-size: 16px; + font-size: 12px; color: #000; - border-radius: 3px; + border-radius: 2px; background-color: #FFF; box-shadow: 0 1px 2px rgba(0,0,0, 0.4); } @@ -140,7 +140,7 @@ .object .tools { display: none; position: absolute; - top: -23px; + top: -13px; width: 100%; text-align: center; } @@ -150,8 +150,8 @@ position: relative; overflow: hidden; cursor: pointer; - width: 22px; - height: 22px; + width: 11px; + height: 11px; text-indent: -100px; border: none; margin: 0; @@ -180,7 +180,7 @@ position: absolute; width: 100%; height: 20px; - top: 72px; + top: 36px; border-radius: 4px; box-shadow: 0 3px 0 #999, 0 1px 2px rgba(0,0,0, .65); background-color: #CCC; @@ -198,9 +198,9 @@ #weights { display: none; position: absolute; - top: 40px; - right: 40px; - width: 230px; + top: 20px; + right: 0px; + width: 160px; } .onEdit #weights { @@ -213,21 +213,26 @@ .weight { position: relative; - width: 64px; - height: 70px; - + + width: 32px; + height: 35px; + margin-left: 10px; margin-bottom: 30px; - font-size: 16px; + font-size: 12px; text-align: center; color: #CCC; text-shadow: 0 -1px 0 #000; } +.weight .unit { + font-size: 10px; +} + .weight .amount { height: 100%; - padding: 4px 4px 0; + padding: 4px 2px 0; border-radius: 4px; border: 1px solid rgba(255,255,255, 0.15); background-color: rgba(0,0,0, 0.15); @@ -235,10 +240,10 @@ .weight > div.bg { position: absolute; - left: -3px; + left: -2px; bottom: -18px; - width: 70px; - height: 64px; + width: 35px; + height: 32px; background: url(images/weight.png) no-repeat center bottom; } diff --git a/resources/inDevelopmentWidgets/Balance.wgt/js/main.js b/resources/inDevelopmentWidgets/Balance.wgt/js/main.js index 089559fb..9b5bc3f6 100644 --- a/resources/inDevelopmentWidgets/Balance.wgt/js/main.js +++ b/resources/inDevelopmentWidgets/Balance.wgt/js/main.js @@ -1,14 +1,47 @@ +var weighValues = [500,200,100,50,20,10]; + function onTemplateLoadedCallback(app) { - $("#weights").append($(Mustache.render(weightTemplate, {weight: 500}))); - $("#weights").append($(Mustache.render(weightTemplate, {weight: 200}))); - $("#weights").append($(Mustache.render(weightTemplate, {weight: 100}))); - $("#weights").append($(Mustache.render(weightTemplate, {weight: 50}))); - $("#weights").append($(Mustache.render(weightTemplate, {weight: 20}))); - $("#weights").append($(Mustache.render(weightTemplate, {weight: 10}))); + $.each(weighValues, function(){ + $("#weights").append($(Mustache.render(weightTemplate, {weight: this}))); + }); $("#weights > .weight").draggable({helper: "clone"}); + + $("#leftScale").droppable({ + accept: ".object", + drop: function(event, ui) { + if($(ui.draggable).hasClass("inScale")) + return; + + var object = $(ui.draggable).clone(); + object.data("weight", $(ui.draggable).data("weight")); + + object.addClass("inScale"); + $("#leftScale").append(object); + + placeObject($("#leftScale"), object); + + refreshScales(); + + object.draggable({ + stop: function(event, ui) { + if($(ui.helper).hasClass("onOut")) { + $(ui.helper).remove(); + refreshScales(); + } + } + }); + }, + out: function(event, ui) { + $(ui.draggable).addClass("onOut"); + }, + over: function(event, ui) { + $(ui.draggable).removeClass("onOut"); + } + }); + $("#rightScale").droppable({ - accept: ".weight", + accept: ".weight.right", drop: function(event, ui) { if($(ui.draggable).hasClass("inScale")) return; @@ -72,6 +105,10 @@ function objectForGUID(app, guid) { window.object = guid; var objectUi = $(Mustache.render(objectTemplate, window)); var weight = getWeightFor(app.parameters, guid); + + if(!app.onEdit && (weight == undefined || $.trim(weight) == "")) + weight = weighValues[Math.floor(Math.random()*weighValues.length)]; + if(weight !== undefined) { objectUi.data("weight", weight); objectUi.find("input[name=weight]").val(weight); @@ -137,8 +174,8 @@ function placeObject($container, $object) { var count = $container.children().size() - 1; - var left = width * (count % 4) + 25; - var bottom = height * (Math.floor(count / 4)) + 40; + var left = width * (count % 4) + 5; + var bottom = height * (Math.floor(count / 4)) + 12; log("Place at ["+left+" , "+bottom+"]"); $object.css("left", left+"px").css("bottom", bottom+"px"); @@ -215,39 +252,6 @@ function reloadApp(app) { } refreshScales(); - - $("#leftScale").droppable({ - accept: ".object", - drop: function(event, ui) { - if($(ui.draggable).hasClass("inScale")) - return; - - var object = $(ui.draggable).clone(); - object.data("weight", $(ui.draggable).data("weight")); - - object.addClass("inScale"); - $("#leftScale").append(object); - - placeObject($("#leftScale"), object); - - refreshScales(); - - object.draggable({ - stop: function(event, ui) { - if($(ui.helper).hasClass("onOut")) { - $(ui.helper).remove(); - refreshScales(); - } - } - }); - }, - out: function(event, ui) { - $(ui.draggable).addClass("onOut"); - }, - over: function(event, ui) { - $(ui.draggable).removeClass("onOut"); - } - }); if(app.onEdit) { diff --git a/resources/inDevelopmentWidgets/Balance.wgt/js/templates.js b/resources/inDevelopmentWidgets/Balance.wgt/js/templates.js index 1f683036..e18176e9 100644 --- a/resources/inDevelopmentWidgets/Balance.wgt/js/templates.js +++ b/resources/inDevelopmentWidgets/Balance.wgt/js/templates.js @@ -23,8 +23,8 @@ var objectTemplate = '

'+ ''+ '
'+ - '
g
'+ + '
'+ ''; var weightTemplate = - '
{{weight}}g
'; \ No newline at end of file + '
{{weight}}
'; \ No newline at end of file diff --git a/resources/inDevelopmentWidgets/Morpion.wgt/js/main.js b/resources/inDevelopmentWidgets/Morpion.wgt/js/main.js index 70b0c546..1473f7e6 100644 --- a/resources/inDevelopmentWidgets/Morpion.wgt/js/main.js +++ b/resources/inDevelopmentWidgets/Morpion.wgt/js/main.js @@ -148,7 +148,8 @@ function isGameEnd(i, j) { } function isCellsWin(cells) { - if((player == cells.eq(0).data("player") == cells.eq(1).data("player") == cells.eq(2).data("player"))) + var n = ((3*player) - (parseInt(cells.eq(0).data("player")) + parseInt(cells.eq(1).data("player")) + parseInt(cells.eq(2).data("player")))); + if( n == 0 ) return cells; return null; } diff --git a/resources/library/interactivities/Train.wgt/js/main.js b/resources/library/interactivities/Train.wgt/js/main.js index a8d264e9..d77f3fca 100644 --- a/resources/library/interactivities/Train.wgt/js/main.js +++ b/resources/library/interactivities/Train.wgt/js/main.js @@ -8,9 +8,18 @@ function revert($e) { elmt.className = elmt.className.replace(/(d(\d+))/, ""); } +function getN(range) { + if(range > 1) + return Math.floor(Math.random()*range); + else if(range == 1) + return Math.round(Math.random()*10)/10; + else if(range == 0.1) + return Math.round(Math.random()*0.1*100)/100; +} + function reloadApp(app) { var operator = app.parameters.value("operator"); - var range = parseInt(app.parameters.value("range")); + var range = parseFloat(app.parameters.value("range")); var count = parseInt(app.parameters.value("count")); $scene = $("#scene"); @@ -25,16 +34,12 @@ function reloadApp(app) { var meeted = []; for (var i = 0; i < count; i++) { - var n = Math.floor(Math.random()*range); - - while($.inArray(n, meeted) != -1) { - if(range > 1) - n = Math.floor(Math.random()*range); - else - n = Math.round(Math.random()*range*100)/100; - } - + + var n = getN(range); + while($.inArray(n, meeted) != -1) + n = getN(range); + meeted.push(n); $label = $("
"+n+"
"); diff --git a/resources/library/interactivities/Train.wgt/js/templates.js b/resources/library/interactivities/Train.wgt/js/templates.js index e62c381e..f53d27dd 100644 --- a/resources/library/interactivities/Train.wgt/js/templates.js +++ b/resources/library/interactivities/Train.wgt/js/templates.js @@ -31,6 +31,7 @@ var parametersTemplate = '
'+ '