From f7e1a383e9c59536afda93cd2d6b3d641aa69d39 Mon Sep 17 00:00:00 2001 From: Arin Alexander Date: Fri, 28 Jun 2019 20:12:47 +0300 Subject: [PATCH] geometryLocked property has been added to report items --- limereport/bands/lrdataband.cpp | 1 - limereport/bands/lrpagefooter.cpp | 1 + limereport/bands/lrpagefooter.h | 2 +- limereport/images/lock.png | Bin 0 -> 608 bytes limereport/images/unlock.png | Bin 0 -> 613 bytes limereport/items/lrimageitem.cpp | 1 + limereport/items/lrimageitem.h | 2 +- limereport/items/lrtextitem.cpp | 2 + limereport/items/lrtextitem.h | 2 +- limereport/lrbanddesignintf.cpp | 2 +- limereport/lrbasedesignintf.cpp | 60 ++++++++++++++++-- limereport/lrbasedesignintf.h | 15 ++++- limereport/lrpagedesignintf.cpp | 36 +++++++++++ limereport/lrpagedesignintf.h | 4 ++ limereport/lrreportdesignwidget.cpp | 18 ++++++ limereport/lrreportdesignwidget.h | 3 + limereport/lrreportdesignwindow.cpp | 44 ++++++++++++- limereport/lrreportdesignwindow.h | 8 +++ .../objectinspector/lrobjectitemmodel.cpp | 1 + limereport/report.qrc | 2 + translations/limereport_ru.qm | Bin 121930 -> 122748 bytes translations/limereport_ru.ts | 24 ++++++- 22 files changed, 208 insertions(+), 20 deletions(-) create mode 100644 limereport/images/lock.png create mode 100644 limereport/images/unlock.png diff --git a/limereport/bands/lrdataband.cpp b/limereport/bands/lrdataband.cpp index 2a6eaf7..7119440 100644 --- a/limereport/bands/lrdataband.cpp +++ b/limereport/bands/lrdataband.cpp @@ -142,7 +142,6 @@ void DataBand::processPopUpAction(QAction *action) if (action->text().compare(tr("Start from new page")) == 0){ setProperty("startFromNewPage",action->isChecked()); } - } BaseDesignIntf *DataBand::createSameTypeItem(QObject *owner, QGraphicsItem *parent) diff --git a/limereport/bands/lrpagefooter.cpp b/limereport/bands/lrpagefooter.cpp index 68b9f0a..8ee5959 100644 --- a/limereport/bands/lrpagefooter.cpp +++ b/limereport/bands/lrpagefooter.cpp @@ -87,6 +87,7 @@ void PageFooter::processPopUpAction(QAction *action) if (action->text().compare(tr("Print on last page")) == 0){ page()->setPropertyToSelectedItems("printOnLastPage",action->isChecked()); } + BandDesignIntf::processPopUpAction(action); } bool PageFooter::printOnFirstPage() const diff --git a/limereport/bands/lrpagefooter.h b/limereport/bands/lrpagefooter.h index 2f634a5..3422b60 100644 --- a/limereport/bands/lrpagefooter.h +++ b/limereport/bands/lrpagefooter.h @@ -35,7 +35,7 @@ #include namespace LimeReport{ -class PageFooter : public LimeReport::BandDesignIntf +class PageFooter : public BandDesignIntf { Q_OBJECT Q_PROPERTY(bool printOnFirstPage READ printOnFirstPage WRITE setPrintOnFirstPage) diff --git a/limereport/images/lock.png b/limereport/images/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..5485df1b16e43e97ceedef2d3506427c7bb7c38a GIT binary patch literal 608 zcmV-m0-ybfP)EX>4Tx04R}tkv&MmKpe$iQ?-6n9PA*{AwzYtC@SJ8RV;#q(pG5I!Q|2}Xws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;i>s5OinMHhnTLl4F!X6muzVhU}?*F8LZy$kcK_UHZ_{YutkfJY>rW4d7xZxGLH zS~}-_;s7g13h_Ddm_ZjLe&o9B@*C&8!vfC?7^%cOae!FNx3Jv8tYE0b)5IY~)hJ&` zyR2~D;;fb`tZ`5NLVs3UNphWL5K$~4hB!pXsGx`vEQD#*NHLM1{YV@Cu;Y)DOD0zl zj2sInLxtq{!T;cQw`Oi?(oOP5fX)}&{ulv#yFk5a+uz5wT|WW5&%l+|^p|VE>?i5f zrWQH^2DX8V>!v2}0hc?#(3371k|TL(3b`Ecen#Jv0S0e@-Zi(k#y(CTfE0DLd;=UD z0;74#UT^d6?$+M^J=5s#2ZRuEu8TAp6951J24YJ`L;%nL&;ZbT>?6Ve000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2jd1D4+IKEZnZ1`003M`L_t(I%VS`m5HO+(lEX>4Tx04R}tkv&MmKpe$iQ?-6n9PA*{AwzYtC@SJ8RV;#q(pG5I!Q|2}Xws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;i>s5OinMHhnTLl4F!X6muzVhU}?*F8LZy$kcK_UHZ_{YutkfJY>rW4d7xZxGLH zS~}-_;s7g13h_Ddm_ZjLe&o9B@*C&8!vfC?7^%cOae!FNx3Jv8tYE0b)5IY~)hJ&` zyR2~D;;fb`tZ`5NLVs3UNphWL5K$~4hB!pXsGx`vEQD#*NHLM1{YV@Cu;Y)DOD0zl zj2sInLxtq{!T;cQw`Oi?(oOP5fX)}&{ulv#yFk5a+uz5wT|WW5&%l+|^p|VE>?i5f zrWQH^2DX8V>!v2}0hc?#(3371k|TL(3b`Ecen#Jv0S0e@-Zi(k#y(CTfE0DLd;=UD z0;74#UT^d6?$+M^J=5s#2ZRuEu8TAp6951J24YJ`L;%nL&;ZbT>?6Ve000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2jd1D4+RjS7kw81003c0L_t(I%VS`m5HO+(ltext().compare(tr("Watermark")) == 0){ page()->setPropertyToSelectedItems("watermark",action->isChecked()); } + ItemDesignIntf::processPopUpAction(action); } bool ImageItem::useExternalPainter() const diff --git a/limereport/items/lrimageitem.h b/limereport/items/lrimageitem.h index 91a3d92..5d474e2 100644 --- a/limereport/items/lrimageitem.h +++ b/limereport/items/lrimageitem.h @@ -33,7 +33,7 @@ namespace LimeReport{ -class ImageItem : public LimeReport::ItemDesignIntf, public IPainterProxy +class ImageItem : public ItemDesignIntf, public IPainterProxy { Q_OBJECT Q_ENUMS(Format) diff --git a/limereport/items/lrtextitem.cpp b/limereport/items/lrtextitem.cpp index 0376655..50de9d5 100644 --- a/limereport/items/lrtextitem.cpp +++ b/limereport/items/lrtextitem.cpp @@ -152,6 +152,8 @@ void TextItem::processPopUpAction(QAction *action) if (action->text().compare(tr("Hide if empty")) == 0){ page()->setPropertyToSelectedItems("hideIfEmpty",action->isChecked()); } + + ContentItemDesignIntf::processPopUpAction(action); } void TextItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* style, QWidget* widget) { diff --git a/limereport/items/lrtextitem.h b/limereport/items/lrtextitem.h index abc1211..aa624eb 100644 --- a/limereport/items/lrtextitem.h +++ b/limereport/items/lrtextitem.h @@ -41,7 +41,7 @@ namespace LimeReport { class Tag; -class TextItem : public LimeReport::ContentItemDesignIntf, IPageInit { +class TextItem : public ContentItemDesignIntf, IPageInit { Q_OBJECT Q_ENUMS(AutoWidth) Q_ENUMS(AngleType) diff --git a/limereport/lrbanddesignintf.cpp b/limereport/lrbanddesignintf.cpp index 3751f44..caac574 100644 --- a/limereport/lrbanddesignintf.cpp +++ b/limereport/lrbanddesignintf.cpp @@ -607,7 +607,7 @@ void BandDesignIntf::processPopUpAction(QAction *action) if (action->text().compare(tr("Print if empty")) == 0){ setProperty("printIfEmpty",action->isChecked()); } - + ItemsContainerDesignInft::processPopUpAction(action); } void BandDesignIntf::recalcItems(DataSourceManager* dataManager) diff --git a/limereport/lrbasedesignintf.cpp b/limereport/lrbasedesignintf.cpp index 18d5130..52970c2 100644 --- a/limereport/lrbasedesignintf.cpp +++ b/limereport/lrbasedesignintf.cpp @@ -83,7 +83,8 @@ BaseDesignIntf::BaseDesignIntf(const QString &storageTypeName, QObject *owner, Q m_joinMarkerOn(false), m_selectionMarker(0), m_fillTransparentInDesignMode(true), - m_unitType(Millimeters) + m_unitType(Millimeters), + m_itemGeometryLocked(false) { setGeometry(QRectF(0, 0, m_width, m_height)); if (BaseDesignIntf *item = dynamic_cast(parent)) { @@ -96,12 +97,7 @@ BaseDesignIntf::BaseDesignIntf(const QString &storageTypeName, QObject *owner, Q QRectF BaseDesignIntf::boundingRect() const { - if (m_boundingRect.isNull()) { - qreal halfpw = pen().widthF() / 2; - halfpw += 2; - m_boundingRect = rect(); - }; - return m_boundingRect; + return rect(); } BaseDesignIntf::~BaseDesignIntf(void) { @@ -734,6 +730,32 @@ void BaseDesignIntf::updatePossibleDirectionFlags(){ } } +bool BaseDesignIntf::isItemGeometryLocked() const +{ + return m_itemGeometryLocked; +} + +void BaseDesignIntf::setItemGeometryLocked(bool itemLocked) +{ + if (m_itemGeometryLocked != itemLocked){ + m_itemGeometryLocked = itemLocked; + if (itemLocked){ + m_savedPossibleMoveDirectionFlags = m_possibleMoveDirectionFlags; + m_savedPossibleResizeDirectionFlags = m_possibleResizeDirectionFlags; + m_possibleMoveDirectionFlags = None; + m_possibleResizeDirectionFlags = Fixed; + } else { + m_possibleMoveDirectionFlags = m_savedPossibleMoveDirectionFlags; + m_possibleResizeDirectionFlags = m_savedPossibleResizeDirectionFlags; + } + if (!isLoading()){ + update(); + m_selectionMarker->update(); + notify("geometryLocked", !itemLocked, itemLocked); + } + } +} + bool BaseDesignIntf::fillTransparentInDesignMode() const { return m_fillTransparentInDesignMode; @@ -1287,6 +1309,13 @@ void BaseDesignIntf::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) this->setSelected(true); } QMenu menu(event->widget()); + + QAction* lockGeometryAction = menu.addAction(tr("Lock item geometry")); + lockGeometryAction->setCheckable(true); + lockGeometryAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L)); + lockGeometryAction->setChecked(isItemGeometryLocked()); + menu.addSeparator(); + QAction* copyAction = menu.addAction(QIcon(":/report/images/copy"), tr("Copy")); copyAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_C)); QAction* cutAction = menu.addAction(QIcon(":/report/images/cut"), tr("Cut")); @@ -1659,12 +1688,21 @@ void Marker::paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*) rect().bottom()-markerSize,markerSize*2,markerSize*2)); } +QColor Marker::color() const { + return m_color; +} + SelectionMarker::SelectionMarker(QGraphicsItem* parent, BaseDesignIntf* owner) : Marker(parent, owner) { setAcceptHoverEvents(true); } +QColor SelectionMarker::color() const +{ + return owner()->isItemGeometryLocked() ? Qt::darkGray : Marker::color(); +} + void SelectionMarker::hoverMoveEvent(QGraphicsSceneHoverEvent *event) { if (owner()) owner()->hoverMoveEvent(event); @@ -1697,4 +1735,12 @@ void SelectionMarker::mouseMoveEvent(QGraphicsSceneMouseEvent *event) if (owner()) owner()->mouseMoveEvent(event); } +void BaseDesignIntf::processPopUpAction(QAction *action){ + if (page()){ + if (action->text().compare(tr("Lock item geometry")) == 0){ + page()->setPropertyToSelectedItems("geometryLocked",action->isChecked()); + } + } +} + } //namespace LimeReport diff --git a/limereport/lrbasedesignintf.h b/limereport/lrbasedesignintf.h index 01dfc0f..646e00f 100644 --- a/limereport/lrbasedesignintf.h +++ b/limereport/lrbasedesignintf.h @@ -57,7 +57,7 @@ public: void setRect(QRectF rect){prepareGeometryChange();m_rect=rect;} void setColor(QColor color){m_color=color;} QRectF rect() const {return m_rect;} - QColor color() const {return m_color;} + virtual QColor color() const; BaseDesignIntf* owner() const {return m_owner;} private: QRectF m_rect; @@ -68,6 +68,7 @@ private: class SelectionMarker : public Marker{ public: SelectionMarker(QGraphicsItem* parent=0, BaseDesignIntf* owner = 0); + QColor color() const; protected: void hoverMoveEvent(QGraphicsSceneHoverEvent *event); void mousePressEvent(QGraphicsSceneMouseEvent *event); @@ -97,6 +98,7 @@ class BaseDesignIntf : Q_PROPERTY(int borderLineSize READ borderLineSize WRITE setBorderLineSize) Q_PROPERTY(bool isVisible READ isVisible WRITE setItemVisible DESIGNABLE false) Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor) + Q_PROPERTY(bool geometryLocked READ isItemGeometryLocked WRITE setItemGeometryLocked) friend class ReportRender; public: @@ -124,7 +126,8 @@ public: ResizeBottom = 8, AllDirections = 15 }; - enum MoveFlags { LeftRight=1, + enum MoveFlags { None = 0, + LeftRight=1, TopBotom=2, All=3 }; @@ -302,6 +305,9 @@ public: void setFillTransparentInDesignMode(bool fillTransparentInDesignMode); void emitPosChanged(QPointF oldPos, QPointF newPos); + bool isItemGeometryLocked() const; + void setItemGeometryLocked(bool itemLocked); + protected: //ICollectionContainer @@ -361,7 +367,7 @@ protected: QVariant m_varValue; virtual void preparePopUpMenu(QMenu& menu){Q_UNUSED(menu)} - virtual void processPopUpAction(QAction* action){Q_UNUSED(action)} + virtual void processPopUpAction(QAction* action); void addChildItems(QList* list); qreal calcAbsolutePosY(qreal currentOffset, BaseDesignIntf* item); @@ -378,6 +384,8 @@ private: int m_selectionPenSize; int m_possibleResizeDirectionFlags; int m_possibleMoveDirectionFlags; + int m_savedPossibleResizeDirectionFlags; + int m_savedPossibleMoveDirectionFlags; int m_resizeDirectionFlags; qreal m_width; qreal m_height; @@ -427,6 +435,7 @@ private: bool m_fillTransparentInDesignMode; QRect m_itemGeometry; UnitType m_unitType; + bool m_itemGeometryLocked; signals: void geometryChanged(QObject* object, QRectF newGeometry, QRectF oldGeometry); void posChanging(QObject* object, QPointF newPos, QPointF oldPos); diff --git a/limereport/lrpagedesignintf.cpp b/limereport/lrpagedesignintf.cpp index 5fe7288..eade90c 100644 --- a/limereport/lrpagedesignintf.cpp +++ b/limereport/lrpagedesignintf.cpp @@ -1169,6 +1169,14 @@ void PageDesignIntf::activateItemToJoin(QRectF itemRect, QList& if (m_joinItem) m_joinItem->turnOnJoinMarker(true); } +void PageDesignIntf::selectAllChildren(BaseDesignIntf *item) +{ + if (item) + foreach(BaseDesignIntf* child, item->childBaseItems()){ + child->setSelected(true); + } +} + void PageDesignIntf::rectMoved(QRectF itemRect, BaseDesignIntf* container){ if (!container){ container = bandAt(QPointF(itemRect.topLeft())); @@ -1772,6 +1780,34 @@ void PageDesignIntf::setBorders(const BaseDesignIntf::BorderLines& border) changeSelectedGroupProperty("borders", (int)border); } +void PageDesignIntf::lockSelectedItems() +{ + foreach(QGraphicsItem* graphicItem, selectedItems()){ + BaseDesignIntf* item = dynamic_cast(graphicItem); + if (item) item->setProperty("geometryLocked", true); + } +} + +void PageDesignIntf::unlockSelectedItems() +{ + foreach(QGraphicsItem* graphicItem, selectedItems()){ + BaseDesignIntf* item = dynamic_cast(graphicItem); + if (item) item->setProperty("geometryLocked", false); + } +} + + +void PageDesignIntf::selectOneLevelItems() +{ + foreach(QGraphicsItem* graphicItem, selectedItems()){ + BaseDesignIntf* item = dynamic_cast(graphicItem->parentItem()); + if (item) + selectAllChildren(item); + else + selectAllChildren(dynamic_cast(graphicItem)); + } +} + void PageDesignIntf::removeAllItems() { pageItem()->clear(); diff --git a/limereport/lrpagedesignintf.h b/limereport/lrpagedesignintf.h index 0a3c914..2ed583c 100644 --- a/limereport/lrpagedesignintf.h +++ b/limereport/lrpagedesignintf.h @@ -252,6 +252,9 @@ namespace LimeReport { void setFont(const QFont &font); void setTextAlign(const Qt::Alignment& alignment); void setBorders(const BaseDesignIntf::BorderLines& border); + void lockSelectedItems(); + void unlockSelectedItems(); + void selectOneLevelItems(); private slots: void slotPageGeometryChanged(QObject*, QRectF, QRectF ); void slotItemPropertyChanged(QString propertyName, @@ -277,6 +280,7 @@ namespace LimeReport { const QVariant& newPropertyValue); void changeSelectedGroupProperty(const QString& name,const QVariant& value); void activateItemToJoin(QRectF itemRect, QList& items); + void selectAllChildren(BaseDesignIntf* item); private: enum JoinType{Width, Height}; LimeReport::PageItemDesignIntf::Ptr m_pageItem; diff --git a/limereport/lrreportdesignwidget.cpp b/limereport/lrreportdesignwidget.cpp index de897e7..c2d52b3 100644 --- a/limereport/lrreportdesignwidget.cpp +++ b/limereport/lrreportdesignwidget.cpp @@ -880,6 +880,24 @@ void ReportDesignWidget::slotDialogDeleted(QString dialogName) } } +void ReportDesignWidget::lockSelectedItems() +{ + if (activePage()) + activePage()->lockSelectedItems(); +} + +void ReportDesignWidget::unlockSelectedItems() +{ + if (activePage()) + activePage()->unlockSelectedItems(); +} + +void ReportDesignWidget::selectOneLevelItems() +{ + if (activePage()) + activePage()->selectOneLevelItems(); +} + void ReportDesignWidget::slotDatasourceCollectionLoaded(const QString & /*collectionName*/) { } diff --git a/limereport/lrreportdesignwidget.h b/limereport/lrreportdesignwidget.h index 149dcb5..5de247e 100644 --- a/limereport/lrreportdesignwidget.h +++ b/limereport/lrreportdesignwidget.h @@ -201,6 +201,9 @@ public slots: void deleteCurrentPage(); void slotPagesLoadFinished(); void slotDialogDeleted(QString dialogName); + void lockSelectedItems(); + void unlockSelectedItems(); + void selectOneLevelItems(); #ifdef HAVE_QTDESIGNER_INTEGRATION void addNewDialog(); #endif diff --git a/limereport/lrreportdesignwindow.cpp b/limereport/lrreportdesignwindow.cpp index 1fdc9e7..20d1273 100644 --- a/limereport/lrreportdesignwindow.cpp +++ b/limereport/lrreportdesignwindow.cpp @@ -256,6 +256,24 @@ void ReportDesignWindow::createActions() m_addNewDialogAction->setIcon(QIcon(":/report//images/addDialog")); connect(m_addNewDialogAction, SIGNAL(triggered()), this, SLOT(slotAddNewDialog())); #endif + + m_lockSelectedItemsAction = new QAction(tr("Lock selected items"), this); + m_lockSelectedItemsAction->setIcon(QIcon(":/report/images/lock")); + m_lockSelectedItemsAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L)); + connect(m_lockSelectedItemsAction, SIGNAL(triggered()), + this, SLOT(slotLockSelectedItems())); + + m_unlockSelectedItemsAction = new QAction(tr("Unlock selected items"), this); + m_unlockSelectedItemsAction->setIcon(QIcon(":/report/images/unlock")); + m_unlockSelectedItemsAction->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_L)); + connect(m_unlockSelectedItemsAction, SIGNAL(triggered()), + this, SLOT(slotUnlockSelectedItems())); + + m_selectOneLevelItems = new QAction(tr("Select one level items"), this); + //m_unlockSelectedItemsAction->setIcon(QIcon(":/report/images/unlock")); + m_selectOneLevelItems->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A)); + connect(m_selectOneLevelItems, SIGNAL(triggered()), + this, SLOT(slotSelectOneLevelItems())); } void ReportDesignWindow::createReportToolBar() @@ -465,6 +483,10 @@ void ReportDesignWindow::createMainMenu() m_editMenu->addAction(m_pasteAction); m_editMenu->addAction(m_cutAction); m_editMenu->addAction(m_settingsAction); + m_editMenu->addSeparator(); + m_editMenu->addAction(m_lockSelectedItemsAction); + m_editMenu->addAction(m_unlockSelectedItemsAction); + m_editMenu->addAction(m_selectOneLevelItems); m_infoMenu = menuBar()->addMenu(tr("Info")); m_infoMenu->addAction(m_aboutAction); m_recentFilesMenu = m_fileMenu->addMenu(tr("Recent Files")); @@ -783,10 +805,10 @@ void ReportDesignWindow::restoreSetting() int screenWidth = desktop->screenGeometry().width(); int screenHeight = desktop->screenGeometry().height(); - int x = screenWidth*0.1; - int y = screenHeight*0.1; + int x = screenWidth * 0.1; + int y = screenHeight * 0.1; - resize(screenWidth*0.8, screenHeight*0.8); + resize(screenWidth * 0.8, screenHeight * 0.8); move(x, y); } v = settings()->value("PageEditorsState"); @@ -1495,8 +1517,24 @@ void ReportDesignWindow::slotAddNewDialog() { m_reportDesignWidget->addNewDialog(); } + #endif +void ReportDesignWindow::slotLockSelectedItems() +{ + m_reportDesignWidget->lockSelectedItems(); +} + +void ReportDesignWindow::slotUnlockSelectedItems() +{ + m_reportDesignWidget->unlockSelectedItems(); +} + +void ReportDesignWindow::slotSelectOneLevelItems() +{ + m_reportDesignWidget->selectOneLevelItems(); +} + void ReportDesignWindow::closeEvent(QCloseEvent * event) { if (checkNeedToSave()){ diff --git a/limereport/lrreportdesignwindow.h b/limereport/lrreportdesignwindow.h index d5dc790..5701894 100644 --- a/limereport/lrreportdesignwindow.h +++ b/limereport/lrreportdesignwindow.h @@ -125,6 +125,9 @@ private slots: void slotDeleteDialog(); void slotAddNewDialog(); #endif + void slotLockSelectedItems(); + void slotUnlockSelectedItems(); + void slotSelectOneLevelItems(); protected: void closeEvent(QCloseEvent *event); void resizeEvent(QResizeEvent *); @@ -232,6 +235,11 @@ private: QAction* m_deleteDialogAction; QAction* m_addNewDialogAction; #endif + + QAction* m_lockSelectedItemsAction; + QAction* m_unlockSelectedItemsAction; + QAction* m_selectOneLevelItems; + QMenu* m_recentFilesMenu; QSignalMapper* m_bandsAddSignalsMap; diff --git a/limereport/objectinspector/lrobjectitemmodel.cpp b/limereport/objectinspector/lrobjectitemmodel.cpp index 9aff3a0..23fa281 100644 --- a/limereport/objectinspector/lrobjectitemmodel.cpp +++ b/limereport/objectinspector/lrobjectitemmodel.cpp @@ -161,6 +161,7 @@ void QObjectPropertyModel::translatePropertyName() tr("hideText"); tr("option3"); tr("units"); + tr("geometryLocked"); } void QObjectPropertyModel::clearObjectsList() diff --git a/limereport/report.qrc b/limereport/report.qrc index 57fbf96..89999d9 100644 --- a/limereport/report.qrc +++ b/limereport/report.qrc @@ -184,5 +184,7 @@ images/object.png images/vlayuot_4_24.png images/designer.png + images/lock.png + images/unlock.png diff --git a/translations/limereport_ru.qm b/translations/limereport_ru.qm index 35a81f92e28904a273ad7365cb11b47aeee80cfe..c1d81cb6d1805cd682ed2e52293f42f979d5ea9c 100644 GIT binary patch delta 6085 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 Hw)cMkCUh<+ delta 5565 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 Vertical Layout Создать Вертикальную Компановку + + Lock item geometry + Блокировать изменения геометрии + LimeReport::ConnectionDesc @@ -1949,12 +1953,16 @@ p, li { white-space: pre-wrap; } option3 - + units Единицы измерения + + geometryLocked + Геометрия заблокирована + LimeReport::RectPropItem @@ -2279,6 +2287,18 @@ p, li { white-space: pre-wrap; } Dialog Designer Tools Панель Инструментов + + Lock selected items + Заблокировать выбранные элементы + + + Unlock selected items + Разблокировать выбранные элементы + + + Select one level items + Выбрать все элементы одного уровня + LimeReport::ReportEnginePrivate @@ -2450,7 +2470,7 @@ This preview is no longer valid. CSV - + Separator