View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0015896 | Scribus | Properties Palette | public | 2019-11-01 17:15 | 2024-12-23 23:18 |
Reporter | ale | Assigned To | nitramr | ||
Priority | normal | Severity | feature | Reproducibility | N/A |
Status | closed | Resolution | fixed | ||
Product Version | 1.5.6.svn | ||||
Target Version | 1.7.0 | Fixed in Version | 1.7.0.svn | ||
Summary | 0015896: [PATCH] Indigo UI: shrink the size of the XYZ pane | ||||
Description | following martin's Indigo UI project, i've started shrinking the XYZ pane in the properties palette. some notes: - the name of the item disappears. martin planned, to put in an "advanced" expandable section, i'd prefer to make the name editable in the outline window: it's a better place for it! (a separate patch will follow; please wait for that patch before committing this one) - the group and ungroup buttons are removed (they are actions, not properties; the are other and better ways to group items) - martin puts the basepoint at top left (most prominent place!), i'd prefer putting it at the bottom right (it's not so often used...) - martin puts the "do not export item" button in the "advanced" expandable section. as i wrote in 0015894 i did not expect it, but i've found an ok place for it... please discuss there if we can remove the button. i would be really be really glad if we can get rid of it. | ||||
Tags | No tags attached. | ||||
Patch | Yes | ||||
|
|
|
[there is a newer patch further down...] here is the patch. the one open issue, is the rotation icon that cannot be read. we can of course keep the unicode character... it's probably good enough (and in the current state of the icon, probably even better) the images can be downloaded from the merge request on gitlab: https://gitlab.com/scribus/scribus/merge_requests/8 there will be an appimage as soon as the CI has done its work. just one note: if we can remove the "do not export" button, then i would align the basepoint widget to the right of the panel. and, as discussed on irc: if somebody can provide better (quality) icons: you're very welcome! i've not tested it throughly, but i think that the patch is ready for review and commit. (or as soon i've (somebody has) submitted a patch for the "outline" window... i plan to do it tomorrow...) indigo-pp-xyz.diff (32,117 bytes)
diff --git a/resources/iconsets/1_5_1/16/flip-object-horizontal.png b/resources/iconsets/1_5_1/16/flip-object-horizontal.png index b5053fa7f..ccc1e982a 100644 Binary files a/resources/iconsets/1_5_1/16/flip-object-horizontal.png and b/resources/iconsets/1_5_1/16/flip-object-horizontal.png differ diff --git a/resources/iconsets/1_5_1/16/flip-object-vertical.png b/resources/iconsets/1_5_1/16/flip-object-vertical.png index d94b746f7..d3281a0f0 100644 Binary files a/resources/iconsets/1_5_1/16/flip-object-vertical.png and b/resources/iconsets/1_5_1/16/flip-object-vertical.png differ diff --git a/resources/iconsets/1_5_1/chain-small-closed.png b/resources/iconsets/1_5_1/chain-small-closed.png new file mode 100644 index 000000000..d5105d0a4 Binary files /dev/null and b/resources/iconsets/1_5_1/chain-small-closed.png differ diff --git a/resources/iconsets/1_5_1/chain-small-open.png b/resources/iconsets/1_5_1/chain-small-open.png new file mode 100644 index 000000000..d32371f6a Binary files /dev/null and b/resources/iconsets/1_5_1/chain-small-open.png differ diff --git a/resources/iconsets/1_5_1/group.png b/resources/iconsets/1_5_1/group.png deleted file mode 100644 index d2aae0af6..000000000 Binary files a/resources/iconsets/1_5_1/group.png and /dev/null differ diff --git a/resources/iconsets/1_5_1/level-bottom.png b/resources/iconsets/1_5_1/level-bottom.png new file mode 100644 index 000000000..89dd044a8 Binary files /dev/null and b/resources/iconsets/1_5_1/level-bottom.png differ diff --git a/resources/iconsets/1_5_1/level-down.png b/resources/iconsets/1_5_1/level-down.png new file mode 100644 index 000000000..de94d3c76 Binary files /dev/null and b/resources/iconsets/1_5_1/level-down.png differ diff --git a/resources/iconsets/1_5_1/level-top.png b/resources/iconsets/1_5_1/level-top.png new file mode 100644 index 000000000..d34bc0084 Binary files /dev/null and b/resources/iconsets/1_5_1/level-top.png differ diff --git a/resources/iconsets/1_5_1/level-up.png b/resources/iconsets/1_5_1/level-up.png new file mode 100644 index 000000000..d863d84a8 Binary files /dev/null and b/resources/iconsets/1_5_1/level-up.png differ diff --git a/resources/iconsets/1_5_1/ungroup.png b/resources/iconsets/1_5_1/ungroup.png deleted file mode 100644 index 52a8f19b9..000000000 Binary files a/resources/iconsets/1_5_1/ungroup.png and /dev/null differ diff --git a/scribus/ui/propertiespalette_xyz.cpp b/scribus/ui/propertiespalette_xyz.cpp index 62be16af1..52268ee77 100644 --- a/scribus/ui/propertiespalette_xyz.cpp +++ b/scribus/ui/propertiespalette_xyz.cpp @@ -61,32 +61,30 @@ PropertiesPalette_XYZ::PropertiesPalette_XYZ( QWidget* parent) : QWidget(parent) connect(userActionSniffer, SIGNAL(actionStart()), this, SLOT(spinboxStartUserAction())); connect(userActionSniffer, SIGNAL(actionEnd()), this, SLOT(spinboxFinishUserAction())); - nameEdit->setFocusPolicy(Qt::ClickFocus); - installSniffer(xposSpin); installSniffer(yposSpin); installSniffer(widthSpin); installSniffer(heightSpin); + IconManager& im=IconManager::instance(); + keepFrameWHRatioButton->setCheckable( true ); - keepFrameWHRatioButton->setAutoRaise( true ); - keepFrameWHRatioButton->setMaximumSize( QSize( 15, 32767 ) ); - keepFrameWHRatioButton->setChecked(false); + { + QIcon icon = QIcon(); + icon.addPixmap(im.loadPixmap("chain-small-closed.png"), QIcon::Normal, QIcon::On); + icon.addPixmap(im.loadPixmap("chain-small-open.png"), QIcon::Normal, QIcon::Off); + keepFrameWHRatioButton->setIcon(icon); + } + // rotation->setPixmap(im.loadPixmap("rotation.png")); // TODO: using the unicode char might even be better... but i did not manage to load the pixmap in the label rotationSpin->setNewUnit(6); rotationSpin->setWrapping( true ); installSniffer(rotationSpin); - rotationLabel->setBuddy(rotationSpin); - - IconManager& im=IconManager::instance(); - levelUp->setIcon(im.loadIcon("16/go-up.png")); - levelDown->setIcon(im.loadIcon("16/go-down.png")); - levelTop->setIcon(im.loadIcon("16/go-top.png")); - levelBottom->setIcon(im.loadIcon("16/go-bottom.png")); - levelLabel->setAlignment( Qt::AlignCenter ); - doGroup->setIcon(im.loadIcon("group.png")); - doUnGroup->setIcon(im.loadIcon("ungroup.png")); + levelUp->setIcon(IconManager::instance().loadIcon("level-up.png")); + levelDown->setIcon(IconManager::instance().loadIcon("level-down.png")); + levelTop->setIcon(IconManager::instance().loadIcon("level-top.png")); + levelBottom->setIcon(IconManager::instance().loadIcon("level-bottom.png")); flipH->setIcon(im.loadIcon("16/flip-object-horizontal.png")); flipH->setCheckable( true ); @@ -128,12 +126,9 @@ PropertiesPalette_XYZ::PropertiesPalette_XYZ( QWidget* parent) : QWidget(parent) connect(levelBottom, SIGNAL(clicked()), this, SLOT(handleBack())); connect(basePointWidget, SIGNAL(buttonClicked(int)), this, SLOT(handleBasePoint(int))); - connect(nameEdit , SIGNAL(Leaved()) , this, SLOT(handleNewName())); connect(doLock , SIGNAL(clicked()), this, SLOT(handleLock())); connect(noPrint , SIGNAL(clicked()), this, SLOT(handlePrint())); connect(noResize , SIGNAL(clicked()), this, SLOT(handleLockSize())); - connect(doGroup , SIGNAL(clicked()), this, SLOT(handleGrouping()) ); - connect(doUnGroup, SIGNAL(clicked()), this, SLOT(handleUngrouping()) ); m_haveItem = false; xposSpin->showValue(0); @@ -203,19 +198,16 @@ void PropertiesPalette_XYZ::unsetDoc() m_haveItem = false; m_doc = nullptr; m_item = nullptr; - nameEdit->clear(); xposSpin->setConstants(nullptr); yposSpin->setConstants(nullptr); widthSpin->setConstants(nullptr); heightSpin->setConstants(nullptr); - doGroup->setEnabled(false); - doUnGroup->setEnabled(false); flipH->setEnabled(false); flipV->setEnabled(false); - xposLabel->setText( tr( "&X-Pos:" ) ); - yposLabel->setText( tr( "&Y-Pos:" ) ); - widthLabel->setText( tr( "&Width:" ) ); - heightLabel->setText( tr( "&Height:" ) ); + xposLabel->setText(tr("&X")); + yposLabel->setText(tr("&Y")); + widthLabel->setText(tr("&W")); + heightLabel->setText(tr("&H")); xposSpin->showValue(0); yposSpin->showValue(0); widthSpin->showValue(0); @@ -288,16 +280,11 @@ void PropertiesPalette_XYZ::setCurrentItem(PageItem *item) if (!m_doc) setDoc(item->doc()); - disconnect(nameEdit, SIGNAL(Leaved()), this, SLOT(handleNewName())); - m_haveItem = false; m_item = item; - nameEdit->setText(m_item->itemName()); levelLabel->setText( QString::number(m_item->level()) ); - connect(nameEdit, SIGNAL(Leaved()), this, SLOT(handleNewName())); - //CB replaces old emits from PageItem::emitAllToGUI() disconnect(xposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewX())); disconnect(yposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewY())); @@ -344,29 +331,34 @@ void PropertiesPalette_XYZ::setCurrentItem(PageItem *item) connect(flipV , SIGNAL(clicked()), this, SLOT(handleFlipV()), Qt::UniqueConnection); connect(rotationSpin, SIGNAL(valueChanged(double)), this, SLOT(handleRotation()), Qt::UniqueConnection); - bool setter = false; - xposSpin->setEnabled(!setter); - yposSpin->setEnabled(!setter); - bool haveSameParent = m_doc->m_Selection->objectsHaveSameParent(); - levelGroup->setEnabled(haveSameParent && !item->locked()); + xposSpin->setEnabled(true); + yposSpin->setEnabled(true); + { + bool enabled = m_doc->m_Selection->objectsHaveSameParent() && !item->locked(); + levelTop->setEnabled(enabled); + levelUp->setEnabled(enabled); + levelDown->setEnabled(enabled); + levelBottom->setEnabled(enabled); + } + // TODO: what is doing this? if ((m_item->isGroup()) && (!m_item->isSingleSel)) { setEnabled(true); } if ((m_item->itemType() == PageItem::Line) && m_lineMode) { - xposLabel->setText( tr( "&X1:" ) ); - yposLabel->setText( tr( "Y&1:" ) ); - widthLabel->setText( tr( "X&2:" ) ); - heightLabel->setText( tr( "&Y2:" ) ); + xposLabel->setText(tr("&X1")); + yposLabel->setText(tr("Y&1")); + widthLabel->setText(tr("X&2")); + heightLabel->setText(tr("&Y2")); rotationSpin->setEnabled(false); } else { - xposLabel->setText( tr( "&X-Pos:" ) ); - yposLabel->setText( tr( "&Y-Pos:" ) ); - widthLabel->setText( tr( "&Width:" ) ); - heightLabel->setText( tr( "&Height:" ) ); + xposLabel->setText(tr("&X")); + yposLabel->setText(tr("&Y")); + widthLabel->setText(tr("&W")); + heightLabel->setText(tr("&H")); rotationSpin->setEnabled(true); } m_haveItem = true; @@ -389,14 +381,6 @@ void PropertiesPalette_XYZ::setCurrentItem(PageItem *item) rrR = 360 - rrR; noResize->setEnabled(!m_item->isArc()); - doGroup->setEnabled(false); - doUnGroup->setEnabled(false); - if ((m_doc->m_Selection->count() > 1) && (haveSameParent)) - doGroup->setEnabled(true); - if (m_doc->m_Selection->count() == 1) - doUnGroup->setEnabled(m_item->isGroup()); - if ((m_doc->appMode == modeEditClip) && (m_item->isGroup())) - doUnGroup->setEnabled(false); if (m_item->asOSGFrame()) { setEnabled(true); @@ -413,7 +397,6 @@ void PropertiesPalette_XYZ::handleAppModeChanged(int oldMode, int mode) { if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning()) return; - doUnGroup->setEnabled(mode != modeEdit && mode != modeEditClip && m_item->isGroup()); doLock->setEnabled(mode != modeEditClip); } @@ -422,8 +405,6 @@ void PropertiesPalette_XYZ::handleSelectionChanged() if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning()) return; - nameEdit->setEnabled(m_doc->m_Selection->count() == 1); - PageItem* currItem = currentItemFromSelection(); if (m_doc->m_Selection->count() > 1) { @@ -458,7 +439,6 @@ void PropertiesPalette_XYZ::handleSelectionChanged() heightSpin->setEnabled(true); rotationSpin->setEnabled(true); - nameEdit->setEnabled(false); flipH->setCheckable( false ); flipV->setCheckable( false ); flipH->setChecked(false); @@ -474,12 +454,6 @@ void PropertiesPalette_XYZ::handleSelectionChanged() int itemType = currItem ? (int) currItem->itemType() : -1; m_haveItem = (itemType!=-1); - if (itemType == -1) - { - doGroup->setEnabled(false); - doUnGroup->setEnabled(false); - } - nameEdit->setEnabled(true); basePointWidget->setEnabled(true); setEnabled(true); @@ -1187,6 +1161,7 @@ void PropertiesPalette_XYZ::handleFlipV() m_ScMW->scrActions["itemFlipV"]->toggle(); } +/* void PropertiesPalette_XYZ::handleNewName() { if (m_ScMW->scriptIsRunning() || !m_haveDoc || !m_haveItem) @@ -1233,6 +1208,7 @@ void PropertiesPalette_XYZ::handleNewName() } } } +*/ void PropertiesPalette_XYZ::installSniffer(ScrSpinBox *spinBox) { @@ -1359,20 +1335,3 @@ void PropertiesPalette_XYZ::showFlippedV(bool isFlippedV) { flipV->setChecked(isFlippedV); } - -void PropertiesPalette_XYZ::handleGrouping() -{ - m_ScMW->GroupObj(); - doGroup->setEnabled(false); - doUnGroup->setEnabled(true); - handleSelectionChanged(); - //FIXME - //TabStack->setItemEnabled(idShapeItem, false); -} - -void PropertiesPalette_XYZ::handleUngrouping() -{ - m_ScMW->UnGroupObj(); - m_doc->invalidateAll(); - m_doc->regionsChanged()->update(QRect()); -} diff --git a/scribus/ui/propertiespalette_xyz.h b/scribus/ui/propertiespalette_xyz.h index 7892c5043..3d31181e5 100644 --- a/scribus/ui/propertiespalette_xyz.h +++ b/scribus/ui/propertiespalette_xyz.h @@ -84,9 +84,6 @@ private slots: void handleLock(); void handleLockSize(); void handlePrint(); - void handleNewName(); - void handleGrouping(); - void handleUngrouping(); protected slots: //virtual void reject(); diff --git a/scribus/ui/propertiespalette_xyzbase.ui b/scribus/ui/propertiespalette_xyzbase.ui index 06e9c35d5..9171e3d76 100644 --- a/scribus/ui/propertiespalette_xyzbase.ui +++ b/scribus/ui/propertiespalette_xyzbase.ui @@ -30,353 +30,104 @@ <number>0</number> </property> <item> - <widget class="QGroupBox" name="nameGroup"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string>Name</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="spacing"> - <number>2</number> - </property> - <property name="leftMargin"> - <number>2</number> - </property> - <property name="topMargin"> - <number>2</number> - </property> - <property name="rightMargin"> - <number>2</number> - </property> - <property name="bottomMargin"> - <number>2</number> - </property> - <item> - <widget class="NameWidget" name="nameEdit"> - <property name="focusPolicy"> - <enum>Qt::ClickFocus</enum> - </property> - <property name="toolTip"> - <string>Name of selected object</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="geoGroup"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string>Geometry</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="leftMargin"> - <number>2</number> - </property> - <property name="topMargin"> - <number>2</number> - </property> - <property name="rightMargin"> - <number>2</number> - </property> - <property name="bottomMargin"> - <number>2</number> - </property> - <item> - <layout class="QGridLayout" name="geoGroupLayout"> - <property name="leftMargin"> - <number>5</number> - </property> - <property name="topMargin"> - <number>5</number> - </property> - <property name="rightMargin"> - <number>5</number> - </property> - <property name="bottomMargin"> - <number>5</number> - </property> - <property name="spacing"> - <number>4</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="xposLabel"> - <property name="text"> - <string>&X-Pos:</string> - </property> - <property name="buddy"> - <cstring>xposSpin</cstring> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="ScrSpinBox" name="xposSpin"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="toolTip"> - <string>Horizontal position of current basepoint</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="widthLabel"> - <property name="text"> - <string>&Width:</string> - </property> - <property name="buddy"> - <cstring>widthSpin</cstring> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="yposLabel"> - <property name="text"> - <string>&Y-Pos:</string> - </property> - <property name="buddy"> - <cstring>yposSpin</cstring> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="ScrSpinBox" name="yposSpin"> - <property name="toolTip"> - <string>Vertical position of current basepoint</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="ScrSpinBox" name="widthSpin"> - <property name="toolTip"> - <string>Width of current selection</string> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="heightLabel"> - <property name="text"> - <string>&Height:</string> - </property> - <property name="buddy"> - <cstring>heightSpin</cstring> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="ScrSpinBox" name="heightSpin"> - <property name="toolTip"> - <string>Height of current selection</string> - </property> - </widget> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="rotationLabel"> - <property name="text"> - <string>&Rotation:</string> - </property> - </widget> - </item> - <item row="4" column="1"> - <widget class="ScrSpinBox" name="rotationSpin"> - <property name="toolTip"> - <string>Rotation of object at current basepoint</string> - </property> - <property name="wrapping"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="5" column="0"> - <widget class="QLabel" name="basepointLabel"> - <property name="toolTip"> - <string>Point from which measurements or rotation angles are referenced</string> - </property> - <property name="text"> - <string>Basepoint:</string> - </property> - </widget> - </item> - <item row="5" column="1"> - <widget class="BasePointWidget" name="basePointWidget" native="true"/> - </item> - <item row="2" column="2" rowspan="2"> - <widget class="LinkButton" name="keepFrameWHRatioButton"> - <property name="maximumSize"> - <size> - <width>15</width> - <height>32767</height> - </size> - </property> - <property name="toolTip"> - <string>Keep the aspect ratio</string> - </property> - <property name="text"> - <string>...</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoRaise"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="QGroupBox" name="levelGroup"> - <property name="title"> - <string>Level</string> + <layout class="QGridLayout" name="gridLayout_3"> + <item row="1" column="4"> + <widget class="QLabel" name="heightLabel"> + <property name="text"> + <string>&H</string> + </property> + <property name="buddy"> + <cstring>heightSpin</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="xposLabel"> + <property name="text"> + <string>&X:</string> + </property> + <property name="buddy"> + <cstring>xposSpin</cstring> + </property> + </widget> + </item> + <item row="1" column="5"> + <widget class="ScrSpinBox" name="heightSpin"> + <property name="toolTip"> + <string>Height of current selection</string> </property> - <layout class="QGridLayout" name="gridLayout"> - <property name="leftMargin"> - <number>5</number> - </property> - <property name="topMargin"> - <number>5</number> - </property> - <property name="rightMargin"> - <number>5</number> - </property> - <property name="bottomMargin"> - <number>5</number> - </property> - <property name="spacing"> - <number>4</number> - </property> - <item row="0" column="0"> - <widget class="QToolButton" name="levelUp"> - <property name="maximumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Move one level up</string> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QToolButton" name="levelDown"> - <property name="maximumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Move one level down</string> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QToolButton" name="levelTop"> - <property name="maximumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Move to front</string> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QToolButton" name="levelBottom"> - <property name="maximumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Move to back</string> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="0" column="2" rowspan="2"> - <widget class="QLabel" name="levelLabel"> - <property name="toolTip"> - <string>Indicates the level the object is on, 1 means the object is at the bottom</string> - </property> - <property name="text"> - <string>0</string> - </property> - </widget> - </item> - </layout> </widget> </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <item row="0" column="2"> + <widget class="ScrSpinBox" name="xposSpin"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> + <property name="toolTip"> + <string>Horizontal position of current basepoint</string> </property> - </spacer> + </widget> + </item> + <item row="1" column="2"> + <widget class="ScrSpinBox" name="widthSpin"> + <property name="toolTip"> + <string>Width of current selection</string> + </property> + </widget> </item> - <item> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="0" column="0"> - <widget class="QToolButton" name="doGroup"> + <item row="0" column="5"> + <widget class="ScrSpinBox" name="yposSpin"> + <property name="toolTip"> + <string>Vertical position of current basepoint</string> + </property> + </widget> + </item> + <item row="0" column="4"> + <widget class="QLabel" name="yposLabel"> + <property name="text"> + <string>&Y:</string> + </property> + <property name="buddy"> + <cstring>yposSpin</cstring> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="widthLabel"> + <property name="text"> + <string>&W</string> + </property> + <property name="buddy"> + <cstring>widthSpin</cstring> + </property> + </widget> + </item> + <item row="2" column="2" colspan="2"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="ScrSpinBox" name="rotationSpin"> <property name="toolTip"> - <string>Group the selected objects</string> + <string>Rotation of object at current basepoint</string> </property> - <property name="text"> - <string/> + <property name="wrapping"> + <bool>true</bool> </property> </widget> </item> - <item row="1" column="0"> - <widget class="QToolButton" name="doUnGroup"> + <item> + <widget class="QToolButton" name="flipV"> <property name="toolTip"> - <string>Ungroup the selected group</string> + <string>Flip vertically</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="0" column="1"> + <item> <widget class="QToolButton" name="flipH"> <property name="toolTip"> <string>Flip horizontally</string> @@ -386,48 +137,159 @@ </property> </widget> </item> - <item row="1" column="1"> - <widget class="QToolButton" name="flipV"> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="1" column="6"> + <widget class="QToolButton" name="noResize"> + <property name="toolTip"> + <string>Lock or unlock the size of the object</string> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QLabel" name="rotation"> + <property name="text"> + <string>⟳</string> + </property> + </widget> + </item> + <item row="0" column="6"> + <widget class="QToolButton" name="doLock"> + <property name="toolTip"> + <string>Lock or unlock the object</string> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="4" column="2" colspan="2"> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <item> + <widget class="QToolButton" name="levelTop"> + <property name="maximumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> <property name="toolTip"> - <string>Flip vertically</string> + <string>Move to front</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="0" column="2"> - <widget class="QToolButton" name="doLock"> + <item> + <widget class="QToolButton" name="levelUp"> + <property name="maximumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> <property name="toolTip"> - <string>Lock or unlock the object</string> + <string>Move one level up</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="1" column="2"> - <widget class="QToolButton" name="noPrint"> + <item> + <widget class="QToolButton" name="levelDown"> + <property name="maximumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> <property name="toolTip"> - <string>Enable or disable exporting of the object</string> + <string>Move one level down</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="0" column="3"> - <widget class="QToolButton" name="noResize"> + <item> + <widget class="QToolButton" name="levelBottom"> + <property name="maximumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> <property name="toolTip"> - <string>Lock or unlock the size of the object</string> + <string>Move to back</string> </property> <property name="text"> <string/> </property> </widget> </item> + <item> + <widget class="QLabel" name="levelLabel"> + <property name="toolTip"> + <string>Indicates the level the object is on, 1 means the object is at the bottom</string> + </property> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> </layout> </item> + <item row="2" column="5" rowspan="3"> + <widget class="BasePointWidget" name="basePointWidget" native="true"/> + </item> + <item row="2" column="6"> + <widget class="QToolButton" name="noPrint"> + <property name="toolTip"> + <string>Enable or disable exporting of the object</string> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="QToolButton" name="keepFrameWHRatioButton"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> </layout> </item> <item> @@ -446,11 +308,6 @@ </layout> </widget> <customwidgets> - <customwidget> - <class>NameWidget</class> - <extends>QLineEdit</extends> - <header>ui/propertiespalette_utils.h</header> - </customwidget> <customwidget> <class>ScrSpinBox</class> <extends>QDoubleSpinBox</extends> @@ -462,11 +319,6 @@ <header>ui/basepointwidget.h</header> <container>1</container> </customwidget> - <customwidget> - <class>LinkButton</class> - <extends>QToolButton</extends> - <header>ui/linkbutton.h</header> - </customwidget> </customwidgets> <resources/> <connections/> |
|
" - martin puts the basepoint at top left (most prominent place!), i'd prefer putting it at the bottom right (it's not so often used...)" Sorry ale, but I do not agree. Basepoint function is very important, it must be used many times during editing, in case if the work is serious! I suggest that if it is in the lower right corner, make bigger (like Martin's basepoint). |
|
There is one big problem with this patch: it removes the item name edit field without moving it in another place. |
|
Proposal: "Move icon" in the Inkscape (symbolic icons) very nice. What do you think? |
|
From field switch order (if you pressed the tabulator button) the H field is left out. |
|
@jean, as written above, my plan would be to move the editable item name to the outline window... i really would like to avoid to have it in a "hidden" part of the palette like martin was suggesting. @peter, yes i like those up and down icons, too can youp rovide 4 png files of the right size? i think that 16 x 16 should be fine. @peter: i'm fine with using martin's basepoint widget. but i prefer to first get the new laoyut with the existing one and -- as we shortly discussed with craig in irc -- later replace it with a nicer / more useful one. (martin's has also two more anchor points, which means that the logic of the code has to slightly change...) and yes, the icons need some more polishing... (and we also need the dark theme icons...). |
|
@ale, that would be the wrong way to do it, see my response on 0015897. That would also imply that user working on PDF forms would need to use an additional dialog window, the document outline window, to do their job. And given the performance impact this dialog has when opened, I would prefer to avoid giving users another reason to open it. |
|
Agree, this needs more work. Item name should not disappear from this palette. |
|
the performance argument is indeed a very valid one. the main goal of my effort is to make both the properties palette and content palette, with most sections expanded, to use at most half of the vertical space on a typical screen (ok, my screen). in my experience, very few users have a use for the item name and it's difficult to place it somewhere without using a full line. (of course, the ones who are participating in this thread are the ones that are most likely to see a use for it... but somebody who creates a book, a flyer or a magazine will probably never edit an item name) as written above, martin wanted an expanding "advanced" section for the xyz pane. personally, i don't like the idea: an item should belong to a place or not. so we should find the right place for each thing, rather than hiding what we don't like. a (temporary?) compromise, could to create an "advanced" collapsing section for the whole properties palette and put in there things like the "item name" and the "do not export" button... what do you think about that? |
|
" but somebody who creates a book, a flyer or a magazine will probably never edit an item name" Only a opinion. I've been using it for ten years the scribus but I've never edited name of item. |
|
Proposal: The values of X and Y shouldn't be side by side, but under each other. Side by side terrible. |
|
i've implemented this layout without much thoughts on this specific topic. i see that the three other main dtp software has them vertical. in two columns inkscape has it all horizontally: x, y, w, h. having x,y and w,h horizontally, allows us to use very little space and imo a very logical placement for the three lock buttons (proportions, position, size). i wonder if side by side is just something that is just as good once somebody gets used to it or if it has real drawbacks. (the tab order is currently broken, but i will fix it as soon as possible) personally, in scribus, i don't look at the values as having any meaning. i just go to adjust a single value to something correct and i check visually on the canvas that everything looks ok. but i agree that if you want to check the x,y coordinates (or the w.h pair) it's more comfortable if they are stacked on top of each other rather than side by side. if you can suggest a good layout with the three buttons, i can try a different proposal, otherwise i'd suggest to keep it as is and we will see if in practice it is as disturbing as it seems at first sight. now, that the single items are in place, it's not hard to move them around. and after having written all this i've tried to shuffle around the fields and buttons... would the attached proposal be better? the xy wh are for sure to your taste... but are the lock buttons ok? |
|
|
|
i attache the xcf with a layer per label / button |
|
New and old Properties. I thought so. Opinion? |
|
Just a idea... |
|
i don't know, i really don't like the basepoint on the left. personally, i (almost) never change it... it's probably because i don't rotate so often the items. i have the feeling that the last proposal with the three columns attracts my eyes fully in the wrong place. also, i'm trying to use as little vertical (and horizontal) space as possible... i can try to make a merge request with my poposal above, without the "do not export item", the new level icons, and with a new widget for the base point aligned to the right... (having seen your screenshot above has given me an idea how to easily tweak the current widget to look better... but four of the buttons won't be clickable for now) it will take a couple of hours... |
|
The left basepoint is important for the continuity of work. You choose the alignment and then X-pos or Y-pos. Set a simple example for you... |
|
|
|
i wrote a very intelligent note to this topic but it somehow got lost. i will not write it again just this: here is an appimage with the proposal above, inclusive the new widget for the basepoint (it does not work yet, but you can click the position that correspond at the ones that are implemented in scribus): https://gitlab.com/a.l.e/scribus/-/jobs/340092171/artifacts/file/Scribus-nightly-x86_64.AppImage personally, i really like it. ps.: btw, the new widget is much simpler and cleaner than the previous one : - ) |
|
-- Padlock icon is wrong place (I don't understand the logic). -- Would be needed a small padding inside the widget. -- ale! Please! Basepoint widget let it be the left of the panel. |
|
Compromise? Please consider the possibility. |
|
Move icons sequence: I change the order |
|
peter, i really don't understand why you want so hard the basepoint to the left. in the gif above, i don't understand either why you're changing the basepoint. you have the snap to item activated and you can align the frames without copy pasting the position. (it's a clever trick, but there are easier ways to get items to be on top of each other...) indeed, i've never seen somebody using the basepoint in such an intensive way! i would say that the most typical use of the base point i can think of is to get the rotation to behave correctly. but i might also be an edge case... my reasons for having on the right side are: - it allows to have a more compact widget. - normally, what i want to reach is one of fields among x, y, w, and h... and rotation... and it's those fields that i'd like to give the best visibility - we can use the same widgets for possibly creating an horizontal toolbar by separating this in two. for the lock buttons, i agree that the logic is not really good. martin's idea was to have the position (full) lock attached to the x, y fields and the size lock attached to the w and h. the size constraint is also attached to the w and h. i guess that the fact that it's easier to place the luck buttons was the reason why martin has put x and y on a line instead of a column. i've tried to put together one last proposal... https://gitlab.com/a.l.e/scribus/-/jobs/340133784/artifacts/file/Scribus-nightly-x86_64.AppImage this time the basepoint is working. there are some spacing and padding issues, but i'd like to solve them when all the widgets will be reworked and we can go through all the spacings and find a common solution for the whole palette. you're welcome to try it out in the appimage and see if it's really so terrible to use... |
|
your latest proposal has crossed mine. personally, the part i use most in the xyz panel are the level buttons... followed by the rotation... sometimes i set the width to a given value in mm. the two proposals are very similar. but i'd prefer to keep on the left side the small fields with rotation and levels... and the big basepoint can easily be reached on the right side. |
|
"you have the snap to item activated and you can align the frames without copy pasting the position." It is not the alignment that matters, but the order of the operation. If you first set a value and then click the basepoint, the end result will be different. Correct order: set the basepoint --> set the value That is why the basepoint should be to the left. Proposal: Please change the order of the movement buttons (https://bugs.scribus.net/file_download.php?file_id=10691&type=bug) Correct order: Move to back, Move one level down, Move level one up, Move up |
|
Hi ale. Thank you for your work, and your time. Basepoint is bigger, that's great. X below Y, thats excellent. Final request :-) In your original proposal the basepoint was below the H field. Is this possible? |
|
a new appimage with the order of the level ups an downs reversed and left aligned right basepoint... https://gitlab.com/a.l.e/scribus/-/jobs/340305155/artifacts/file/Scribus-nightly-x86_64.AppImage the behavior when enlarging the palette is not correct yet... this is a general issue with the panels... i'd like to find a solution for it when all the panes have been adapted. (then we will know what's the minimal and maximal width) |
|
|
|
I am very grateful for it. Two little things. 1) basepoint flipp horizontally icon is wrong 2) basepoint tool middle left icon bigger than the rest (yours too, but not so much: basepoint_middle_left_size.jpg) thanks again |
|
a new appimage with both things (hopefully) fixed! https://gitlab.com/a.l.e/scribus/-/jobs/340325646/artifacts/file/Scribus-nightly-x86_64.AppImage thanks for reporting the two issue! |
|
Icons on the Flip buttons need to be replace because, they represent the operation incorrectly. |
|
oooops. uploaded. https://gitlab.com/a.l.e/scribus/-/jobs/340353267/artifacts/file/Scribus-nightly-x86_64.AppImage i was testing with the wrong shape (a line...) and i did not see that it was not correct... |
|
Perfect :-) |
|
here is a new patch... https://gitlab.com/scribus/scribus/merge_requests/11 indigo-pp-xyz-peter.diff (52,026 bytes)
diff --git a/resources/iconsets/1_5_1/16/flip-object-horizontal.png b/resources/iconsets/1_5_1/16/flip-object-horizontal.png index b5053fa7f..32b36a363 100644 Binary files a/resources/iconsets/1_5_1/16/flip-object-horizontal.png and b/resources/iconsets/1_5_1/16/flip-object-horizontal.png differ diff --git a/resources/iconsets/1_5_1/16/flip-object-vertical.png b/resources/iconsets/1_5_1/16/flip-object-vertical.png index d94b746f7..6602230d6 100644 Binary files a/resources/iconsets/1_5_1/16/flip-object-vertical.png and b/resources/iconsets/1_5_1/16/flip-object-vertical.png differ diff --git a/resources/iconsets/1_5_1/16/level-bottom.png b/resources/iconsets/1_5_1/16/level-bottom.png new file mode 100644 index 000000000..d97871f60 Binary files /dev/null and b/resources/iconsets/1_5_1/16/level-bottom.png differ diff --git a/resources/iconsets/1_5_1/16/level-down.png b/resources/iconsets/1_5_1/16/level-down.png new file mode 100644 index 000000000..a7022c426 Binary files /dev/null and b/resources/iconsets/1_5_1/16/level-down.png differ diff --git a/resources/iconsets/1_5_1/16/level-top.png b/resources/iconsets/1_5_1/16/level-top.png new file mode 100644 index 000000000..f0a4400cb Binary files /dev/null and b/resources/iconsets/1_5_1/16/level-top.png differ diff --git a/resources/iconsets/1_5_1/16/level-up.png b/resources/iconsets/1_5_1/16/level-up.png new file mode 100644 index 000000000..7d64fe3b7 Binary files /dev/null and b/resources/iconsets/1_5_1/16/level-up.png differ diff --git a/resources/iconsets/1_5_1/rotation.png b/resources/iconsets/1_5_1/rotation.png new file mode 100644 index 000000000..4288effc9 Binary files /dev/null and b/resources/iconsets/1_5_1/rotation.png differ diff --git a/scribus/CMakeLists.txt b/scribus/CMakeLists.txt index a92433cb1..29dd78740 100644 --- a/scribus/CMakeLists.txt +++ b/scribus/CMakeLists.txt @@ -157,6 +157,7 @@ set(SCRIBUS_UI_SRC ui/prefs_pdfexportbase.ui ui/prefs_tableofcontentsbase.ui ui/prefs_documentitemattributesbase.ui + ui/basepointwidgetbase.ui ui/printdialogbase.ui ui/propertiespalette_groupbase.ui ui/propertiespalette_imagebase.ui diff --git a/scribus/ui/basepointwidget.cpp b/scribus/ui/basepointwidget.cpp index c6dca8f09..d9af4482d 100644 --- a/scribus/ui/basepointwidget.cpp +++ b/scribus/ui/basepointwidget.cpp @@ -7,197 +7,84 @@ for which a new license (GPL+exception) is in place. #include "basepointwidget.h" -BasePointWidget::BasePointWidget(QWidget *pa, int mode) : QWidget(pa) -{ - m_mode = mode; - if (m_mode == 0) - { - setMinimumSize(QSize(48, 48)); - setMaximumSize(QSize(48, 48)); - } - else - { - setMinimumSize(QSize(48, 16)); - setMaximumSize(QSize(48, 16)); - } - setMouseTracking(true); - selectedBase = 0; - hooveredBase = -1; - Mpressed = false; -} +#include <QButtonGroup> +#include "iconmanager.h" -void BasePointWidget::paintEvent(QPaintEvent *e) +BasePointWidget::BasePointWidget(QWidget *parent) : QWidget(parent) { - QPainter p; - p.begin(this); - p.setRenderHint(QPainter::Antialiasing, true); - p.setBrush(palette().color(QPalette::Window)); - p.setPen(Qt::NoPen); - p.drawRect(0, 0, width(), height()); - p.setBrush(Qt::black); - p.setPen(QPen(palette().color(QPalette::WindowText), 1)); - if (m_mode == 0) - { - p.drawEllipse( 4, 4, 10, 10); - p.drawEllipse(34, 4, 10, 10); - p.drawEllipse(19, 19, 10, 10); - p.drawEllipse( 4, 34, 10, 10); - p.drawEllipse(34, 34, 10, 10); - } - else - { - p.drawEllipse( 4, 4, 10, 10); - p.drawEllipse(19, 4, 10, 10); - p.drawEllipse(34, 4, 10, 10); - } - p.setPen(QPen(palette().color(QPalette::WindowText), 2)); - if (m_mode == 0) - { - p.drawLine(8, 8, 33, 8); - p.drawLine(8, 38, 33, 38); - p.drawLine(8, 8, 8, 33); - p.drawLine(38, 8, 38, 33); - } - else - p.drawLine(8, 8, 33, 8); - p.setBrush(Qt::white); - p.setPen(QPen(palette().color(QPalette::WindowText), 2)); - if (m_mode == 0) - { - p.drawEllipse( 3, 3, 10, 10); - p.drawEllipse(33, 3, 10, 10); - p.drawEllipse(18, 18, 10, 10); - p.drawEllipse( 3, 33, 10, 10); - p.drawEllipse(33, 33, 10, 10); - } - else - { - p.drawEllipse( 3, 3, 10, 10); - p.drawEllipse(18, 3, 10, 10); - p.drawEllipse(33, 3, 10, 10); - } - if (hooveredBase > -1) - { - p.setBrush(Qt::NoBrush); - p.setPen(QPen(palette().color(QPalette::Highlight), 1)); - if (hooveredBase == 0) - p.drawEllipse( 4, 4, 8, 8); - else if (hooveredBase == 1) - p.drawEllipse(34, 4, 8, 8); - else if (hooveredBase == 2) - { - if (m_mode == 0) - p.drawEllipse(19, 19, 8, 8); - else - p.drawEllipse(19, 4, 8, 8); - } - else if (hooveredBase == 3) - p.drawEllipse( 4, 34, 8, 8); - else if (hooveredBase == 4) - p.drawEllipse(34, 34, 8, 8); - } - p.setBrush(palette().color(QPalette::WindowText)); - p.setPen(Qt::NoPen); - if (selectedBase == 0) - p.drawEllipse( 5, 5, 6, 6); - else if (selectedBase == 1) - p.drawEllipse(35, 5, 6, 6); - else if (selectedBase == 2) - { - if (m_mode == 0) - p.drawEllipse(20, 20, 6, 6); - else - p.drawEllipse(20, 5, 6, 6); - } - else if (selectedBase == 3) - p.drawEllipse( 5, 35, 6, 6); - else if (selectedBase == 4) - p.drawEllipse(35, 35, 6, 6); - p.end(); -} + setupUi(this); -void BasePointWidget::mousePressEvent(QMouseEvent *m) -{ - m->accept(); - Mpressed = true; -} + auto group = new QButtonGroup(this); + group->addButton(buttonNE); + group->addButton(buttonNW); + group->addButton(buttonCenter); + group->addButton(buttonSE); + group->addButton(buttonSW); -void BasePointWidget::mouseReleaseEvent(QMouseEvent *m) -{ - m->accept(); - if (Mpressed) - { - QPoint p = m->pos(); - if (m_mode == 0) - { - if (QRect( 3, 3, 10, 10).contains(p)) - selectedBase = 0; - else if (QRect(33, 3, 10, 10).contains(p)) - selectedBase = 1; - else if (QRect(18, 18, 10, 10).contains(p)) - selectedBase = 2; - else if (QRect( 3, 33, 10, 10).contains(p)) - selectedBase = 3; - else if (QRect(33, 33, 10, 10).contains(p)) - selectedBase = 4; - } - else - { - if (QRect( 3, 3, 9, 9).contains(p)) - selectedBase = 0; - else if (QRect(33, 3, 10, 10).contains(p)) - selectedBase = 1; - else if (QRect(18, 3, 10, 10).contains(p)) - selectedBase = 2; - } - emit buttonClicked(selectedBase); - } - update(); -} + buttonE->setEnabled(false); + buttonN->setEnabled(false); + buttonW->setEnabled(false); + buttonS->setEnabled(false); -void BasePointWidget::mouseMoveEvent(QMouseEvent *m) -{ - m->accept(); - QPoint p = m->pos(); - hooveredBase = -1; - if (m_mode == 0) - { - if (QRect( 3, 3, 10, 10).contains(p)) - hooveredBase = 0; - else if (QRect(33, 3, 10, 10).contains(p)) - hooveredBase = 1; - else if (QRect(18, 18, 10, 10).contains(p)) - hooveredBase = 2; - else if (QRect( 3, 33, 10, 10).contains(p)) - hooveredBase = 3; - else if (QRect(33, 33, 10, 10).contains(p)) - hooveredBase = 4; - } - else - { - if (QRect( 3, 3, 10, 10).contains(p)) - hooveredBase = 0; - else if (QRect(33, 3, 10, 10).contains(p)) - hooveredBase = 1; - else if (QRect(18, 3, 10, 10).contains(p)) - hooveredBase = 2; - } - update(); -} + IconManager& im=IconManager::instance(); + + loadIcon(im, buttonNE); + loadIcon(im, buttonN); + loadIcon(im, buttonNW); + loadIcon(im, buttonE); + loadIcon(im, buttonCenter); + loadIcon(im, buttonW); + loadIcon(im, buttonSE); + loadIcon(im, buttonS); + loadIcon(im, buttonSW); -void BasePointWidget::leaveEvent(QEvent*) + connect(buttonNE, &QToolButton::clicked, [this]() { emit buttonClicked(0); }); + connect(buttonNW, &QToolButton::clicked, [this]() { emit buttonClicked(1); }); + connect(buttonCenter, &QToolButton::clicked, [this]() { emit buttonClicked(2); }); + connect(buttonSE, &QToolButton::clicked, [this]() { emit buttonClicked(3); }); + connect(buttonSW, &QToolButton::clicked, [this]() { emit buttonClicked(4); }); +} + +void BasePointWidget::loadIcon(IconManager& im, QToolButton* button) { - hooveredBase = -1; - update(); + QIcon icon = QIcon(); + icon.addPixmap(im.loadPixmap("16/baseline-checked.png"), QIcon::Normal, QIcon::On); + icon.addPixmap(im.loadPixmap("16/baseline-unchecked.png"), QIcon::Normal, QIcon::Off); + button->setIcon(icon); } int BasePointWidget::checkedId() { - return selectedBase; + if (buttonNE->isChecked()) + return 0; + else if (buttonNW->isChecked()) + return 1; + else if (buttonCenter->isChecked()) + return 2; + else if (buttonSE->isChecked()) + return 3; + else if (buttonSW->isChecked()) + return 4; + return 0; } void BasePointWidget::setCheckedId(int id) { - selectedBase = id; - update(); + switch (id) { + case 0: + buttonNE->setChecked(true); + break; + case 1: + buttonNW->setChecked(true); + break; + case 2: + buttonCenter->setChecked(true); + break; + case 3: + buttonSE->setChecked(true); + break; + case 4: + buttonSE->setChecked(true); + break; + } } diff --git a/scribus/ui/basepointwidget.h b/scribus/ui/basepointwidget.h index abfde3c9f..0ae85bd2c 100644 --- a/scribus/ui/basepointwidget.h +++ b/scribus/ui/basepointwidget.h @@ -7,18 +7,19 @@ for which a new license (GPL+exception) is in place. #ifndef BASEPOINTWIDGET_H #define BASEPOINTWIDGET_H +#include "ui_basepointwidgetbase.h" + #include <QWidget> -#include <QPaintEvent> -#include <QMouseEvent> -#include <QPainter> #include "scribusapi.h" -class SCRIBUS_API BasePointWidget : public QWidget +class IconManager; + +class SCRIBUS_API BasePointWidget : public QWidget, public Ui::BasePointWidgetBase { Q_OBJECT public: - BasePointWidget(QWidget *pa, int mode = 0); + BasePointWidget(QWidget *parent); ~BasePointWidget() {} /** BasePoint values: @@ -30,16 +31,8 @@ public: */ int checkedId(); void setCheckedId(int id); - void paintEvent(QPaintEvent *e); - void mousePressEvent(QMouseEvent *m); - void mouseReleaseEvent(QMouseEvent *); - void mouseMoveEvent(QMouseEvent *m); - void leaveEvent(QEvent*); private: - int m_mode; - int selectedBase; - int hooveredBase; - bool Mpressed; + void loadIcon(IconManager& im, QToolButton* button); signals: void buttonClicked(int); }; diff --git a/scribus/ui/basepointwidgetbase.ui b/scribus/ui/basepointwidgetbase.ui new file mode 100644 index 000000000..66d3a24f0 --- /dev/null +++ b/scribus/ui/basepointwidgetbase.ui @@ -0,0 +1,248 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>BasePointWidgetBase</class> + <widget class="QWidget" name="BasePointWidgetBase"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>62</width> + <height>51</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <property name="spacing"> + <number>1</number> + </property> + <item row="1" column="0"> + <widget class="QToolButton" name="buttonE"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QToolButton" name="buttonN"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="QToolButton" name="buttonW"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="3"> + <widget class="QToolButton" name="buttonNW"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QToolButton" name="buttonNE"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QToolButton" name="buttonCenter"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QToolButton" name="buttonSE"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QToolButton" name="buttonS"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="3"> + <widget class="QToolButton" name="buttonSW"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + <tabstops> + <tabstop>buttonNE</tabstop> + <tabstop>buttonN</tabstop> + <tabstop>buttonNW</tabstop> + <tabstop>buttonE</tabstop> + <tabstop>buttonCenter</tabstop> + <tabstop>buttonW</tabstop> + <tabstop>buttonSE</tabstop> + <tabstop>buttonS</tabstop> + <tabstop>buttonSW</tabstop> + </tabstops> + <resources/> + <connections/> +</ui> diff --git a/scribus/ui/propertiespalette_xyz.cpp b/scribus/ui/propertiespalette_xyz.cpp index 62be16af1..8666a0188 100644 --- a/scribus/ui/propertiespalette_xyz.cpp +++ b/scribus/ui/propertiespalette_xyz.cpp @@ -61,32 +61,35 @@ PropertiesPalette_XYZ::PropertiesPalette_XYZ( QWidget* parent) : QWidget(parent) connect(userActionSniffer, SIGNAL(actionStart()), this, SLOT(spinboxStartUserAction())); connect(userActionSniffer, SIGNAL(actionEnd()), this, SLOT(spinboxFinishUserAction())); - nameEdit->setFocusPolicy(Qt::ClickFocus); - installSniffer(xposSpin); installSniffer(yposSpin); installSniffer(widthSpin); installSniffer(heightSpin); - keepFrameWHRatioButton->setCheckable( true ); - keepFrameWHRatioButton->setAutoRaise( true ); - keepFrameWHRatioButton->setMaximumSize( QSize( 15, 32767 ) ); + IconManager& im=IconManager::instance(); + + // keepFrameWHRatioButton->setCheckable(true); + // { + // QIcon icon = QIcon(); + // icon.addPixmap(im.loadPixmap("chain-small-closed.png"), QIcon::Normal, QIcon::On); + // icon.addPixmap(im.loadPixmap("chain-small-open.png"), QIcon::Normal, QIcon::Off); + // keepFrameWHRatioButton->setIcon(icon); + // } + + keepFrameWHRatioButton->setCheckable(true); + keepFrameWHRatioButton->setAutoRaise(true); + keepFrameWHRatioButton->setMaximumSize(QSize(15, 32767)); keepFrameWHRatioButton->setChecked(false); + // rotation->setPixmap(im.loadPixmap("rotation.png")); // TODO: using the unicode char might even be better... but i did not manage to load the pixmap in the label rotationSpin->setNewUnit(6); rotationSpin->setWrapping( true ); installSniffer(rotationSpin); - rotationLabel->setBuddy(rotationSpin); - - IconManager& im=IconManager::instance(); - levelUp->setIcon(im.loadIcon("16/go-up.png")); - levelDown->setIcon(im.loadIcon("16/go-down.png")); - levelTop->setIcon(im.loadIcon("16/go-top.png")); - levelBottom->setIcon(im.loadIcon("16/go-bottom.png")); - levelLabel->setAlignment( Qt::AlignCenter ); - doGroup->setIcon(im.loadIcon("group.png")); - doUnGroup->setIcon(im.loadIcon("ungroup.png")); + levelUp->setIcon(IconManager::instance().loadIcon("16/level-up.png")); + levelDown->setIcon(IconManager::instance().loadIcon("16/level-down.png")); + levelTop->setIcon(IconManager::instance().loadIcon("16/level-top.png")); + levelBottom->setIcon(IconManager::instance().loadIcon("16/level-bottom.png")); flipH->setIcon(im.loadIcon("16/flip-object-horizontal.png")); flipH->setCheckable( true ); @@ -99,12 +102,6 @@ PropertiesPalette_XYZ::PropertiesPalette_XYZ( QWidget* parent) : QWidget(parent) a.addPixmap(im.loadPixmap("16/lock-unlocked.png"), QIcon::Normal, QIcon::Off); doLock->setIcon(a); - noPrint->setCheckable( true ); - QIcon a2 = QIcon(); - a2.addPixmap(im.loadPixmap("NoPrint.png"), QIcon::Normal, QIcon::On); - a2.addPixmap(im.loadPixmap("16/document-print.png"), QIcon::Normal, QIcon::Off); - noPrint->setIcon(a2); - noResize->setCheckable( true ); QIcon a3 = QIcon(); a3.addPixmap(im.loadPixmap("framenoresize.png"), QIcon::Normal, QIcon::On); @@ -128,12 +125,8 @@ PropertiesPalette_XYZ::PropertiesPalette_XYZ( QWidget* parent) : QWidget(parent) connect(levelBottom, SIGNAL(clicked()), this, SLOT(handleBack())); connect(basePointWidget, SIGNAL(buttonClicked(int)), this, SLOT(handleBasePoint(int))); - connect(nameEdit , SIGNAL(Leaved()) , this, SLOT(handleNewName())); connect(doLock , SIGNAL(clicked()), this, SLOT(handleLock())); - connect(noPrint , SIGNAL(clicked()), this, SLOT(handlePrint())); connect(noResize , SIGNAL(clicked()), this, SLOT(handleLockSize())); - connect(doGroup , SIGNAL(clicked()), this, SLOT(handleGrouping()) ); - connect(doUnGroup, SIGNAL(clicked()), this, SLOT(handleUngrouping()) ); m_haveItem = false; xposSpin->showValue(0); @@ -203,19 +196,16 @@ void PropertiesPalette_XYZ::unsetDoc() m_haveItem = false; m_doc = nullptr; m_item = nullptr; - nameEdit->clear(); xposSpin->setConstants(nullptr); yposSpin->setConstants(nullptr); widthSpin->setConstants(nullptr); heightSpin->setConstants(nullptr); - doGroup->setEnabled(false); - doUnGroup->setEnabled(false); flipH->setEnabled(false); flipV->setEnabled(false); - xposLabel->setText( tr( "&X-Pos:" ) ); - yposLabel->setText( tr( "&Y-Pos:" ) ); - widthLabel->setText( tr( "&Width:" ) ); - heightLabel->setText( tr( "&Height:" ) ); + xposLabel->setText(tr("&X")); + yposLabel->setText(tr("&Y")); + widthLabel->setText(tr("&W")); + heightLabel->setText(tr("&H")); xposSpin->showValue(0); yposSpin->showValue(0); widthSpin->showValue(0); @@ -235,20 +225,20 @@ void PropertiesPalette_XYZ::setLineMode(int lineMode) { if (lineMode == 0) { - xposLabel->setText( tr( "&X-Pos:" ) ); - yposLabel->setText( tr( "&Y-Pos:" ) ); - widthLabel->setText( tr( "&Width:" ) ); - heightLabel->setText( tr( "&Height:" ) ); + xposLabel->setText(tr("&X")); + yposLabel->setText(tr("&Y")); + widthLabel->setText(tr("&W")); + heightLabel->setText(tr("&H")); rotationSpin->setEnabled(true); heightSpin->setEnabled(false); m_lineMode = false; } else { - xposLabel->setText( tr( "&X1:" ) ); - yposLabel->setText( tr( "Y&1:" ) ); - widthLabel->setText( tr( "X&2:" ) ); - heightLabel->setText( tr( "&Y2:" ) ); + xposLabel->setText(tr("&X1:")); + yposLabel->setText(tr("Y&1:")); + widthLabel->setText(tr("X&2:")); + heightLabel->setText(tr("&Y2:")); rotationSpin->setEnabled(false); heightSpin->setEnabled(true); m_lineMode = true; @@ -288,23 +278,17 @@ void PropertiesPalette_XYZ::setCurrentItem(PageItem *item) if (!m_doc) setDoc(item->doc()); - disconnect(nameEdit, SIGNAL(Leaved()), this, SLOT(handleNewName())); - m_haveItem = false; m_item = item; - nameEdit->setText(m_item->itemName()); levelLabel->setText( QString::number(m_item->level()) ); - connect(nameEdit, SIGNAL(Leaved()), this, SLOT(handleNewName())); - //CB replaces old emits from PageItem::emitAllToGUI() disconnect(xposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewX())); disconnect(yposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewY())); disconnect(widthSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewW())); disconnect(heightSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewH())); disconnect(doLock, SIGNAL(clicked()), this, SLOT(handleLock())); - disconnect(noPrint, SIGNAL(clicked()), this, SLOT(handlePrint())); disconnect(noResize, SIGNAL(clicked()), this, SLOT(handleLockSize())); disconnect(flipH, SIGNAL(clicked()), this, SLOT(handleFlipH())); disconnect(flipV, SIGNAL(clicked()), this, SLOT(handleFlipV())); @@ -323,7 +307,6 @@ void PropertiesPalette_XYZ::setCurrentItem(PageItem *item) flipH->setCheckable(checkableFlip); flipV->setCheckable(checkableFlip); - noPrint->setChecked(!item->printEnabled()); showFlippedH(item->imageFlippedH()); showFlippedV(item->imageFlippedV()); double rr = item->rotation(); @@ -338,35 +321,39 @@ void PropertiesPalette_XYZ::setCurrentItem(PageItem *item) connect(widthSpin , SIGNAL(valueChanged(double)), this, SLOT(handleNewW()), Qt::UniqueConnection); connect(heightSpin , SIGNAL(valueChanged(double)), this, SLOT(handleNewH()), Qt::UniqueConnection); connect(doLock , SIGNAL(clicked()), this, SLOT(handleLock()), Qt::UniqueConnection); - connect(noPrint , SIGNAL(clicked()), this, SLOT(handlePrint()), Qt::UniqueConnection); connect(noResize, SIGNAL(clicked()), this, SLOT(handleLockSize()), Qt::UniqueConnection); connect(flipH , SIGNAL(clicked()), this, SLOT(handleFlipH()), Qt::UniqueConnection); connect(flipV , SIGNAL(clicked()), this, SLOT(handleFlipV()), Qt::UniqueConnection); connect(rotationSpin, SIGNAL(valueChanged(double)), this, SLOT(handleRotation()), Qt::UniqueConnection); - bool setter = false; - xposSpin->setEnabled(!setter); - yposSpin->setEnabled(!setter); - bool haveSameParent = m_doc->m_Selection->objectsHaveSameParent(); - levelGroup->setEnabled(haveSameParent && !item->locked()); + xposSpin->setEnabled(true); + yposSpin->setEnabled(true); + { + bool enabled = m_doc->m_Selection->objectsHaveSameParent() && !item->locked(); + levelTop->setEnabled(enabled); + levelUp->setEnabled(enabled); + levelDown->setEnabled(enabled); + levelBottom->setEnabled(enabled); + } + // TODO: what is doing this? if ((m_item->isGroup()) && (!m_item->isSingleSel)) { setEnabled(true); } if ((m_item->itemType() == PageItem::Line) && m_lineMode) { - xposLabel->setText( tr( "&X1:" ) ); - yposLabel->setText( tr( "Y&1:" ) ); - widthLabel->setText( tr( "X&2:" ) ); - heightLabel->setText( tr( "&Y2:" ) ); + xposLabel->setText(tr("&X1")); + yposLabel->setText(tr("Y&1")); + widthLabel->setText(tr("X&2")); + heightLabel->setText(tr("&Y2")); rotationSpin->setEnabled(false); } else { - xposLabel->setText( tr( "&X-Pos:" ) ); - yposLabel->setText( tr( "&Y-Pos:" ) ); - widthLabel->setText( tr( "&Width:" ) ); - heightLabel->setText( tr( "&Height:" ) ); + xposLabel->setText(tr("&X")); + yposLabel->setText(tr("&Y")); + widthLabel->setText(tr("&W")); + heightLabel->setText(tr("&H")); rotationSpin->setEnabled(true); } m_haveItem = true; @@ -389,14 +376,6 @@ void PropertiesPalette_XYZ::setCurrentItem(PageItem *item) rrR = 360 - rrR; noResize->setEnabled(!m_item->isArc()); - doGroup->setEnabled(false); - doUnGroup->setEnabled(false); - if ((m_doc->m_Selection->count() > 1) && (haveSameParent)) - doGroup->setEnabled(true); - if (m_doc->m_Selection->count() == 1) - doUnGroup->setEnabled(m_item->isGroup()); - if ((m_doc->appMode == modeEditClip) && (m_item->isGroup())) - doUnGroup->setEnabled(false); if (m_item->asOSGFrame()) { setEnabled(true); @@ -413,7 +392,6 @@ void PropertiesPalette_XYZ::handleAppModeChanged(int oldMode, int mode) { if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning()) return; - doUnGroup->setEnabled(mode != modeEdit && mode != modeEditClip && m_item->isGroup()); doLock->setEnabled(mode != modeEditClip); } @@ -422,8 +400,6 @@ void PropertiesPalette_XYZ::handleSelectionChanged() if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning()) return; - nameEdit->setEnabled(m_doc->m_Selection->count() == 1); - PageItem* currItem = currentItemFromSelection(); if (m_doc->m_Selection->count() > 1) { @@ -441,10 +417,10 @@ void PropertiesPalette_XYZ::handleSelectionChanged() m_ScMW->view->RCenter = FPoint(gx, gy + gh); else if (bp == 4) m_ScMW->view->RCenter = FPoint(gx + gw, gy + gh); - xposLabel->setText( tr( "&X-Pos:" ) ); - yposLabel->setText( tr( "&Y-Pos:" ) ); - widthLabel->setText( tr( "&Width:" ) ); - heightLabel->setText( tr( "&Height:" ) ); + xposLabel->setText(tr("&X")); + yposLabel->setText(tr("&Y")); + widthLabel->setText(tr("&W")); + heightLabel->setText(tr("&H")); xposSpin->showValue(gx); yposSpin->showValue(gy); @@ -458,7 +434,6 @@ void PropertiesPalette_XYZ::handleSelectionChanged() heightSpin->setEnabled(true); rotationSpin->setEnabled(true); - nameEdit->setEnabled(false); flipH->setCheckable( false ); flipV->setCheckable( false ); flipH->setChecked(false); @@ -474,12 +449,6 @@ void PropertiesPalette_XYZ::handleSelectionChanged() int itemType = currItem ? (int) currItem->itemType() : -1; m_haveItem = (itemType!=-1); - if (itemType == -1) - { - doGroup->setEnabled(false); - doUnGroup->setEnabled(false); - } - nameEdit->setEnabled(true); basePointWidget->setEnabled(true); setEnabled(true); @@ -509,10 +478,10 @@ void PropertiesPalette_XYZ::handleSelectionChanged() switch (itemType) { case -1: - xposLabel->setText( tr( "&X-Pos:" ) ); - yposLabel->setText( tr( "&Y-Pos:" ) ); - widthLabel->setText( tr( "&Width:" ) ); - heightLabel->setText( tr( "&Height:" ) ); + xposLabel->setText(tr("&X")); + yposLabel->setText(tr("&Y")); + widthLabel->setText(tr("&W")); + heightLabel->setText(tr("&H")); xposSpin->showValue(0); yposSpin->showValue(0); @@ -1166,13 +1135,6 @@ void PropertiesPalette_XYZ::handleLockSize() m_ScMW->scrActions["itemLockSize"]->toggle(); } -void PropertiesPalette_XYZ::handlePrint() -{ - if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning()) - return; - m_ScMW->scrActions["itemPrintingEnabled"]->toggle(); -} - void PropertiesPalette_XYZ::handleFlipH() { if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning()) @@ -1187,6 +1149,7 @@ void PropertiesPalette_XYZ::handleFlipV() m_ScMW->scrActions["itemFlipV"]->toggle(); } +/* void PropertiesPalette_XYZ::handleNewName() { if (m_ScMW->scriptIsRunning() || !m_haveDoc || !m_haveItem) @@ -1233,6 +1196,7 @@ void PropertiesPalette_XYZ::handleNewName() } } } +*/ void PropertiesPalette_XYZ::installSniffer(ScrSpinBox *spinBox) { @@ -1345,11 +1309,6 @@ void PropertiesPalette_XYZ::showSizeLocked(bool isSizeLocked) noResize->setChecked(isSizeLocked); } -void PropertiesPalette_XYZ::showPrintingEnabled(bool isPrintingEnabled) -{ - noPrint->setChecked(!isPrintingEnabled); -} - void PropertiesPalette_XYZ::showFlippedH(bool isFlippedH) { flipH->setChecked(isFlippedH); @@ -1359,20 +1318,3 @@ void PropertiesPalette_XYZ::showFlippedV(bool isFlippedV) { flipV->setChecked(isFlippedV); } - -void PropertiesPalette_XYZ::handleGrouping() -{ - m_ScMW->GroupObj(); - doGroup->setEnabled(false); - doUnGroup->setEnabled(true); - handleSelectionChanged(); - //FIXME - //TabStack->setItemEnabled(idShapeItem, false); -} - -void PropertiesPalette_XYZ::handleUngrouping() -{ - m_ScMW->UnGroupObj(); - m_doc->invalidateAll(); - m_doc->regionsChanged()->update(QRect()); -} diff --git a/scribus/ui/propertiespalette_xyz.h b/scribus/ui/propertiespalette_xyz.h index 7892c5043..4c2c2c3be 100644 --- a/scribus/ui/propertiespalette_xyz.h +++ b/scribus/ui/propertiespalette_xyz.h @@ -14,10 +14,10 @@ for which a new license (GPL+exception) is in place. #include "linkbutton.h" #include "sclistboxpixmap.h" #include "scguardedptr.h" +#include "pageitem.h" class BasePointWidget; class NameWidget; -class PageItem; class ScribusDoc; class Selection; class ScribusMainWindow; @@ -61,7 +61,6 @@ public slots: void showRotation(double r); void showLocked(bool); void showSizeLocked(bool); - void showPrintingEnabled(bool); void showFlippedH(bool); void showFlippedV(bool); @@ -83,10 +82,6 @@ private slots: void handleBasePoint(int m); void handleLock(); void handleLockSize(); - void handlePrint(); - void handleNewName(); - void handleGrouping(); - void handleUngrouping(); protected slots: //virtual void reject(); diff --git a/scribus/ui/propertiespalette_xyzbase.ui b/scribus/ui/propertiespalette_xyzbase.ui index 06e9c35d5..f97d98476 100644 --- a/scribus/ui/propertiespalette_xyzbase.ui +++ b/scribus/ui/propertiespalette_xyzbase.ui @@ -30,404 +30,265 @@ <number>0</number> </property> <item> - <widget class="QGroupBox" name="nameGroup"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string>Name</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="spacing"> - <number>2</number> - </property> - <property name="leftMargin"> - <number>2</number> - </property> - <property name="topMargin"> - <number>2</number> - </property> - <property name="rightMargin"> - <number>2</number> - </property> - <property name="bottomMargin"> - <number>2</number> - </property> - <item> - <widget class="NameWidget" name="nameEdit"> - <property name="focusPolicy"> - <enum>Qt::ClickFocus</enum> - </property> - <property name="toolTip"> - <string>Name of selected object</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="geoGroup"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string>Geometry</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="leftMargin"> - <number>2</number> - </property> - <property name="topMargin"> - <number>2</number> - </property> - <property name="rightMargin"> - <number>2</number> - </property> - <property name="bottomMargin"> - <number>2</number> - </property> - <item> - <layout class="QGridLayout" name="geoGroupLayout"> - <property name="leftMargin"> - <number>5</number> - </property> - <property name="topMargin"> - <number>5</number> - </property> - <property name="rightMargin"> - <number>5</number> - </property> - <property name="bottomMargin"> - <number>5</number> - </property> - <property name="spacing"> - <number>4</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="xposLabel"> - <property name="text"> - <string>&X-Pos:</string> - </property> - <property name="buddy"> - <cstring>xposSpin</cstring> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="ScrSpinBox" name="xposSpin"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="toolTip"> - <string>Horizontal position of current basepoint</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="widthLabel"> - <property name="text"> - <string>&Width:</string> - </property> - <property name="buddy"> - <cstring>widthSpin</cstring> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="yposLabel"> - <property name="text"> - <string>&Y-Pos:</string> - </property> - <property name="buddy"> - <cstring>yposSpin</cstring> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="ScrSpinBox" name="yposSpin"> - <property name="toolTip"> - <string>Vertical position of current basepoint</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="ScrSpinBox" name="widthSpin"> - <property name="toolTip"> - <string>Width of current selection</string> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="heightLabel"> - <property name="text"> - <string>&Height:</string> - </property> - <property name="buddy"> - <cstring>heightSpin</cstring> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="ScrSpinBox" name="heightSpin"> - <property name="toolTip"> - <string>Height of current selection</string> - </property> - </widget> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="rotationLabel"> - <property name="text"> - <string>&Rotation:</string> - </property> - </widget> - </item> - <item row="4" column="1"> - <widget class="ScrSpinBox" name="rotationSpin"> - <property name="toolTip"> - <string>Rotation of object at current basepoint</string> - </property> - <property name="wrapping"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="5" column="0"> - <widget class="QLabel" name="basepointLabel"> - <property name="toolTip"> - <string>Point from which measurements or rotation angles are referenced</string> - </property> - <property name="text"> - <string>Basepoint:</string> - </property> - </widget> - </item> - <item row="5" column="1"> - <widget class="BasePointWidget" name="basePointWidget" native="true"/> - </item> - <item row="2" column="2" rowspan="2"> - <widget class="LinkButton" name="keepFrameWHRatioButton"> - <property name="maximumSize"> - <size> - <width>15</width> - <height>32767</height> - </size> - </property> - <property name="toolTip"> - <string>Keep the aspect ratio</string> - </property> - <property name="text"> - <string>...</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoRaise"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="QGroupBox" name="levelGroup"> - <property name="title"> - <string>Level</string> + <layout class="QGridLayout" name="gridLayout_3"> + <item row="0" column="1"> + <widget class="QLabel" name="xposLabel"> + <property name="text"> + <string>&X:</string> + </property> + <property name="buddy"> + <cstring>xposSpin</cstring> </property> - <layout class="QGridLayout" name="gridLayout"> - <property name="leftMargin"> - <number>5</number> - </property> - <property name="topMargin"> - <number>5</number> - </property> - <property name="rightMargin"> - <number>5</number> - </property> - <property name="bottomMargin"> - <number>5</number> - </property> - <property name="spacing"> - <number>4</number> - </property> - <item row="0" column="0"> - <widget class="QToolButton" name="levelUp"> - <property name="maximumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Move one level up</string> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QToolButton" name="levelDown"> - <property name="maximumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Move one level down</string> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QToolButton" name="levelTop"> - <property name="maximumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Move to front</string> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QToolButton" name="levelBottom"> - <property name="maximumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Move to back</string> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="0" column="2" rowspan="2"> - <widget class="QLabel" name="levelLabel"> - <property name="toolTip"> - <string>Indicates the level the object is on, 1 means the object is at the bottom</string> - </property> - <property name="text"> - <string>0</string> - </property> - </widget> - </item> - </layout> </widget> </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <item row="0" column="2"> + <widget class="ScrSpinBox" name="xposSpin"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> + <property name="toolTip"> + <string>Horizontal position of current basepoint</string> </property> - </spacer> + </widget> </item> - <item> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="0" column="0"> - <widget class="QToolButton" name="doGroup"> + <item row="2" column="2" colspan="2"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="ScrSpinBox" name="rotationSpin"> + <property name="toolTip"> + <string>Rotation of object at current basepoint</string> + </property> + <property name="wrapping"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="flipH"> <property name="toolTip"> - <string>Group the selected objects</string> + <string>Flip horizontally</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="1" column="0"> - <widget class="QToolButton" name="doUnGroup"> + <item> + <widget class="QToolButton" name="flipV"> <property name="toolTip"> - <string>Ungroup the selected group</string> + <string>Flip vertically</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="0" column="1"> - <widget class="QToolButton" name="flipH"> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="1" column="6"> + <widget class="QToolButton" name="noResize"> + <property name="toolTip"> + <string>Lock or unlock the size of the object</string> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QLabel" name="rotation"> + <property name="text"> + <string>⟳</string> + </property> + </widget> + </item> + <item row="4" column="2" colspan="2"> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <item> + <widget class="QToolButton" name="levelBottom"> + <property name="maximumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> <property name="toolTip"> - <string>Flip horizontally</string> + <string>Move to back</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="1" column="1"> - <widget class="QToolButton" name="flipV"> + <item> + <widget class="QToolButton" name="levelDown"> + <property name="maximumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> <property name="toolTip"> - <string>Flip vertically</string> + <string>Move one level down</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="0" column="2"> - <widget class="QToolButton" name="doLock"> + <item> + <widget class="QToolButton" name="levelUp"> + <property name="maximumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> <property name="toolTip"> - <string>Lock or unlock the object</string> + <string>Move one level up</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="1" column="2"> - <widget class="QToolButton" name="noPrint"> + <item> + <widget class="QToolButton" name="levelTop"> + <property name="maximumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> <property name="toolTip"> - <string>Enable or disable exporting of the object</string> + <string>Move to front</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="0" column="3"> - <widget class="QToolButton" name="noResize"> + <item> + <widget class="QLabel" name="levelLabel"> <property name="toolTip"> - <string>Lock or unlock the size of the object</string> + <string>Indicates the level the object is on, 1 means the object is at the bottom</string> </property> <property name="text"> - <string/> + <string>0</string> </property> </widget> </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> </layout> </item> + <item row="1" column="1"> + <widget class="QLabel" name="yposLabel"> + <property name="text"> + <string>&Y:</string> + </property> + <property name="buddy"> + <cstring>yposSpin</cstring> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="ScrSpinBox" name="yposSpin"> + <property name="toolTip"> + <string>Vertical position of current basepoint</string> + </property> + </widget> + </item> + <item row="0" column="3"> + <widget class="QLabel" name="widthLabel"> + <property name="text"> + <string>&W</string> + </property> + <property name="buddy"> + <cstring>widthSpin</cstring> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="QLabel" name="heightLabel"> + <property name="text"> + <string>&H</string> + </property> + <property name="buddy"> + <cstring>heightSpin</cstring> + </property> + </widget> + </item> + <item row="0" column="4"> + <widget class="ScrSpinBox" name="widthSpin"> + <property name="toolTip"> + <string>Width of current selection</string> + </property> + </widget> + </item> + <item row="1" column="4"> + <widget class="ScrSpinBox" name="heightSpin"> + <property name="toolTip"> + <string>Height of current selection</string> + </property> + </widget> + </item> + <item row="0" column="6"> + <widget class="QToolButton" name="doLock"> + <property name="toolTip"> + <string>Lock or unlock the object</string> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="0" column="5" rowspan="2"> + <widget class="LinkButton" name="keepFrameWHRatioButton"> + <property name="minimumSize"> + <size> + <width>8</width> + <height>43</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="4" rowspan="3" alignment="Qt::AlignLeft"> + <widget class="BasePointWidget" name="basePointWidget" native="true"/> + </item> </layout> </item> <item> @@ -446,11 +307,6 @@ </layout> </widget> <customwidgets> - <customwidget> - <class>NameWidget</class> - <extends>QLineEdit</extends> - <header>ui/propertiespalette_utils.h</header> - </customwidget> <customwidget> <class>ScrSpinBox</class> <extends>QDoubleSpinBox</extends> @@ -468,6 +324,21 @@ <header>ui/linkbutton.h</header> </customwidget> </customwidgets> + <tabstops> + <tabstop>xposSpin</tabstop> + <tabstop>yposSpin</tabstop> + <tabstop>widthSpin</tabstop> + <tabstop>heightSpin</tabstop> + <tabstop>keepFrameWHRatioButton</tabstop> + <tabstop>rotationSpin</tabstop> + <tabstop>flipH</tabstop> + <tabstop>levelBottom</tabstop> + <tabstop>levelDown</tabstop> + <tabstop>levelUp</tabstop> + <tabstop>levelTop</tabstop> + <tabstop>doLock</tabstop> + <tabstop>noResize</tabstop> + </tabstops> <resources/> <connections/> </ui> |
|
I miss the padding of panel. Martin's solution in Indigo project: http://forums.scribus.net/index.php?action=dlattach;topic=1617.0;attach=1989;image |
|
@peterbenedek , i'd like to look at it towards the end of the implementation of the UI panels. currently, there are so many things that are not finished yet and i don't know what is wrong because of the older panels and how exactly the whole palette will look like at the end of the process. i'd like to suggest that i finish the panels in the properties panel and we can then, when everything is new in, talk about it again? before starting the huge work on the text panel... as soon as the xyz is in, i'd like to get in touch with martin: i need explanations on the color panels... he might also have more general feedback. |
|
I mean. Ok. They did a fantastic job. |
|
You don't have to do anything, just listen to this... Therefore, Basepoint is important to be first in the line of operation (related ticket 0015903)... I made a flowchart of the problem: Task: Adjust the height of the object, top to bottom. Explanation: All operations in the XYZ panel depend on the position of the currently selected base point, even if you do not need to set it before each operation. |
|
peter, i have understood your point very well. and you're 100% right. but i also believe that most of the time, most users want to look at the values or set them without changing the basepoint. i found it very interesting to see how intensively you use it, but i don't think i have ever seen anybody changing the basepoint at all. i also think that if you look for speed, scribus provides better ways to tweak your items, without the need to go to the properties palette. (personally, in most cases i would go for alt(-shift)-arrow or a guide.) in the past, i've never read any complaint that the "old" scribus placement of the basepoinit would be bad. and that's not because it was good (it was terrible), but because most people don't use it. or when they use it, they're in a slow workflow anyway. |
|
Hi devs, finally I found this discussion. I'm so happy to see you developing this feature. I'm nobody here just a translator and a user. But I try tho help you. As a user... 1. I agree to remove the label of the object from this palette. I never renamed object in normal document, only when I created PDF forms, but in PDF properties palette there are a possibility to rename the object. https://gitlab.com/scribus/scribus/merge_requests/8#note_239173966 2. I usually use origin tool. It's a useful tool. The original "vertical" Scribus XYZ palette was clear: origin tool belongs to X,Y,W,H fields _and_ rotate field. This is broken in new proposals here. 3. Original origin tool was better: It was clear that it has 5 states. When I see this new tool - inspired by InDesign - I think there is 9 states... but it's not true. And new tool is more checkbox like and not radio button like. When I see more squares (=checkboxes) I think I can select multiple states... but it's not true, I can select only one state (like radio buttons). So circles - original look - is better here. I don't want to criticize, but to help. So here is sketch mockup, how can we join origin tool to X, Y, W, H fields and rotate field. I hope this helps you. |
|
i plan to use the same widget also for the lines, so i would like to avoid the old 5 circles widget. i don't know why martin suggested 9 squares, but if we stick with 5 possible values, then i agree that we should make it more clear which buttons can be clicked and which not. it's probably just a matter of using a different color for those buttons... or simply hiding them. but i think that the final goal was to have 9 possible states. i really like the widget you propose above, but it's a bit harder to draw... (basically, the code must draw it; with the boxes martin suggests, it's just a bunch of buttons with a png on top of each; "automatically" layouted) if you have a proposal for better icons, they're very welcome. but, if possible, i'd like to keep the grid of buttons: it makes things much easier on the programming side. as said, the other constraint is that it should be easy, to use the same schema (and widget) also for the lines (with only three possible values). concerning the basepoint on the left: personally i don't "like" the fact that, then, the other buttons are layouted in a "random" way. where i could see a usable solution, is the proposal a, but with the flip buttons below the rotation input field b is too cramped for me. also, the levels are harder to reach... and that's the z part of xyz : - ) my conclusion? if possible i'd like to stick with the patch as is and get it accepted as fast as possible. once it's in, we can further discuss where to place the basepoint widget. and proposal a is not a bad start, if you both really are so uncomfortable with the widget on the right. |
|
here is a branch with what i could "easily" (still more than an hour of work i could not use for the color panel... mostly spent on fighting designer's grid awkwardness) do out of bubu's a proposal. https://gitlab.com/a.l.e/scribus/tree/indigo-pp-xyz-bubu https://gitlab.com/a.l.e/scribus/-/jobs/342954448/artifacts/file/Scribus-nightly-x86_64.AppImage two comments: - i'm not sure it would look good, but on the semantics side, i would switch levels and locks... - the basepoint widget could shrink a bit and/or get better icons... drawing a square behind the circles might be possible. my position has not changed: - the levels are a bit hidden (switching levels and locks might help) - i'd prefer to see the previous patch being committed asap and continue the discussion in a different ticket. |
|
ale, this fantastic. The basepoint tool is finally convenient to use I am grateful for it. |
|
Thank you ale, this layout is much better! |
|
yes @peterbenedek, but now it's the levels that are not convenient to use : - ( and the rotation. (if i change the basepoint, before the next movement, i have to take care to reset it to the top left; and if i don't change the basepoint, i have to move around my item to fix its position *and* look for the rotation in the middle of the widget). i really, think that this layout is worse for those who do not use often the basepoint. i wonder, if the basepoint shouldn't automatically go back to the top left if you have not used any function that rely on it for more than one minute (or other more or less short time : - ) and you could set the default basepoint in the document settings / preferences. and the basepoint widget feels too big to me... but i hope that you both will be able to improve on that : - ) (while respecting the fact that it's a 3 x 3 grid!) after this patch has been accepted! |
|
here is the "bubu" patch... please pick one of the two latest diff files (the new pngs can be downloaded from gitlab, see the links above) xyz-bubu.diff (54,014 bytes)
diff --git a/resources/iconsets/1_5_1/16/basepoint-checked.png b/resources/iconsets/1_5_1/16/basepoint-checked.png new file mode 100644 index 000000000..328a6c389 Binary files /dev/null and b/resources/iconsets/1_5_1/16/basepoint-checked.png differ diff --git a/resources/iconsets/1_5_1/16/basepoint-unchecked.png b/resources/iconsets/1_5_1/16/basepoint-unchecked.png new file mode 100644 index 000000000..15581f9d1 Binary files /dev/null and b/resources/iconsets/1_5_1/16/basepoint-unchecked.png differ diff --git a/resources/iconsets/1_5_1/16/flip-object-horizontal.png b/resources/iconsets/1_5_1/16/flip-object-horizontal.png index b5053fa7f..32b36a363 100644 Binary files a/resources/iconsets/1_5_1/16/flip-object-horizontal.png and b/resources/iconsets/1_5_1/16/flip-object-horizontal.png differ diff --git a/resources/iconsets/1_5_1/16/flip-object-vertical.png b/resources/iconsets/1_5_1/16/flip-object-vertical.png index d94b746f7..6602230d6 100644 Binary files a/resources/iconsets/1_5_1/16/flip-object-vertical.png and b/resources/iconsets/1_5_1/16/flip-object-vertical.png differ diff --git a/resources/iconsets/1_5_1/16/level-bottom.png b/resources/iconsets/1_5_1/16/level-bottom.png new file mode 100644 index 000000000..d97871f60 Binary files /dev/null and b/resources/iconsets/1_5_1/16/level-bottom.png differ diff --git a/resources/iconsets/1_5_1/16/level-down.png b/resources/iconsets/1_5_1/16/level-down.png new file mode 100644 index 000000000..a7022c426 Binary files /dev/null and b/resources/iconsets/1_5_1/16/level-down.png differ diff --git a/resources/iconsets/1_5_1/16/level-top.png b/resources/iconsets/1_5_1/16/level-top.png new file mode 100644 index 000000000..f0a4400cb Binary files /dev/null and b/resources/iconsets/1_5_1/16/level-top.png differ diff --git a/resources/iconsets/1_5_1/16/level-up.png b/resources/iconsets/1_5_1/16/level-up.png new file mode 100644 index 000000000..7d64fe3b7 Binary files /dev/null and b/resources/iconsets/1_5_1/16/level-up.png differ diff --git a/resources/iconsets/1_5_1/chain-small-closed.png b/resources/iconsets/1_5_1/chain-small-closed.png new file mode 100644 index 000000000..d5105d0a4 Binary files /dev/null and b/resources/iconsets/1_5_1/chain-small-closed.png differ diff --git a/resources/iconsets/1_5_1/chain-small-open.png b/resources/iconsets/1_5_1/chain-small-open.png new file mode 100644 index 000000000..d32371f6a Binary files /dev/null and b/resources/iconsets/1_5_1/chain-small-open.png differ diff --git a/resources/iconsets/1_5_1/group.png b/resources/iconsets/1_5_1/group.png deleted file mode 100644 index d2aae0af6..000000000 Binary files a/resources/iconsets/1_5_1/group.png and /dev/null differ diff --git a/resources/iconsets/1_5_1/rotation.png b/resources/iconsets/1_5_1/rotation.png new file mode 100644 index 000000000..4288effc9 Binary files /dev/null and b/resources/iconsets/1_5_1/rotation.png differ diff --git a/resources/iconsets/1_5_1/ungroup.png b/resources/iconsets/1_5_1/ungroup.png deleted file mode 100644 index 52a8f19b9..000000000 Binary files a/resources/iconsets/1_5_1/ungroup.png and /dev/null differ diff --git a/scribus/CMakeLists.txt b/scribus/CMakeLists.txt index a92433cb1..29dd78740 100644 --- a/scribus/CMakeLists.txt +++ b/scribus/CMakeLists.txt @@ -157,6 +157,7 @@ set(SCRIBUS_UI_SRC ui/prefs_pdfexportbase.ui ui/prefs_tableofcontentsbase.ui ui/prefs_documentitemattributesbase.ui + ui/basepointwidgetbase.ui ui/printdialogbase.ui ui/propertiespalette_groupbase.ui ui/propertiespalette_imagebase.ui diff --git a/scribus/ui/basepointwidget.cpp b/scribus/ui/basepointwidget.cpp index c6dca8f09..8d141a47b 100644 --- a/scribus/ui/basepointwidget.cpp +++ b/scribus/ui/basepointwidget.cpp @@ -7,197 +7,86 @@ for which a new license (GPL+exception) is in place. #include "basepointwidget.h" -BasePointWidget::BasePointWidget(QWidget *pa, int mode) : QWidget(pa) -{ - m_mode = mode; - if (m_mode == 0) - { - setMinimumSize(QSize(48, 48)); - setMaximumSize(QSize(48, 48)); - } - else - { - setMinimumSize(QSize(48, 16)); - setMaximumSize(QSize(48, 16)); - } - setMouseTracking(true); - selectedBase = 0; - hooveredBase = -1; - Mpressed = false; -} +#include <QButtonGroup> +#include "iconmanager.h" -void BasePointWidget::paintEvent(QPaintEvent *e) +BasePointWidget::BasePointWidget(QWidget *parent) : QWidget(parent) { - QPainter p; - p.begin(this); - p.setRenderHint(QPainter::Antialiasing, true); - p.setBrush(palette().color(QPalette::Window)); - p.setPen(Qt::NoPen); - p.drawRect(0, 0, width(), height()); - p.setBrush(Qt::black); - p.setPen(QPen(palette().color(QPalette::WindowText), 1)); - if (m_mode == 0) - { - p.drawEllipse( 4, 4, 10, 10); - p.drawEllipse(34, 4, 10, 10); - p.drawEllipse(19, 19, 10, 10); - p.drawEllipse( 4, 34, 10, 10); - p.drawEllipse(34, 34, 10, 10); - } - else - { - p.drawEllipse( 4, 4, 10, 10); - p.drawEllipse(19, 4, 10, 10); - p.drawEllipse(34, 4, 10, 10); - } - p.setPen(QPen(palette().color(QPalette::WindowText), 2)); - if (m_mode == 0) - { - p.drawLine(8, 8, 33, 8); - p.drawLine(8, 38, 33, 38); - p.drawLine(8, 8, 8, 33); - p.drawLine(38, 8, 38, 33); - } - else - p.drawLine(8, 8, 33, 8); - p.setBrush(Qt::white); - p.setPen(QPen(palette().color(QPalette::WindowText), 2)); - if (m_mode == 0) - { - p.drawEllipse( 3, 3, 10, 10); - p.drawEllipse(33, 3, 10, 10); - p.drawEllipse(18, 18, 10, 10); - p.drawEllipse( 3, 33, 10, 10); - p.drawEllipse(33, 33, 10, 10); - } - else - { - p.drawEllipse( 3, 3, 10, 10); - p.drawEllipse(18, 3, 10, 10); - p.drawEllipse(33, 3, 10, 10); - } - if (hooveredBase > -1) - { - p.setBrush(Qt::NoBrush); - p.setPen(QPen(palette().color(QPalette::Highlight), 1)); - if (hooveredBase == 0) - p.drawEllipse( 4, 4, 8, 8); - else if (hooveredBase == 1) - p.drawEllipse(34, 4, 8, 8); - else if (hooveredBase == 2) - { - if (m_mode == 0) - p.drawEllipse(19, 19, 8, 8); - else - p.drawEllipse(19, 4, 8, 8); - } - else if (hooveredBase == 3) - p.drawEllipse( 4, 34, 8, 8); - else if (hooveredBase == 4) - p.drawEllipse(34, 34, 8, 8); - } - p.setBrush(palette().color(QPalette::WindowText)); - p.setPen(Qt::NoPen); - if (selectedBase == 0) - p.drawEllipse( 5, 5, 6, 6); - else if (selectedBase == 1) - p.drawEllipse(35, 5, 6, 6); - else if (selectedBase == 2) - { - if (m_mode == 0) - p.drawEllipse(20, 20, 6, 6); - else - p.drawEllipse(20, 5, 6, 6); - } - else if (selectedBase == 3) - p.drawEllipse( 5, 35, 6, 6); - else if (selectedBase == 4) - p.drawEllipse(35, 35, 6, 6); - p.end(); -} + setupUi(this); -void BasePointWidget::mousePressEvent(QMouseEvent *m) -{ - m->accept(); - Mpressed = true; -} + auto group = new QButtonGroup(this); + group->addButton(buttonNE); + group->addButton(buttonNW); + group->addButton(buttonCenter); + group->addButton(buttonSE); + group->addButton(buttonSW); -void BasePointWidget::mouseReleaseEvent(QMouseEvent *m) -{ - m->accept(); - if (Mpressed) - { - QPoint p = m->pos(); - if (m_mode == 0) - { - if (QRect( 3, 3, 10, 10).contains(p)) - selectedBase = 0; - else if (QRect(33, 3, 10, 10).contains(p)) - selectedBase = 1; - else if (QRect(18, 18, 10, 10).contains(p)) - selectedBase = 2; - else if (QRect( 3, 33, 10, 10).contains(p)) - selectedBase = 3; - else if (QRect(33, 33, 10, 10).contains(p)) - selectedBase = 4; - } - else - { - if (QRect( 3, 3, 9, 9).contains(p)) - selectedBase = 0; - else if (QRect(33, 3, 10, 10).contains(p)) - selectedBase = 1; - else if (QRect(18, 3, 10, 10).contains(p)) - selectedBase = 2; - } - emit buttonClicked(selectedBase); - } - update(); -} + buttonE->setVisible(false); + buttonN->setVisible(false); + buttonW->setVisible(false); + buttonS->setVisible(false); -void BasePointWidget::mouseMoveEvent(QMouseEvent *m) -{ - m->accept(); - QPoint p = m->pos(); - hooveredBase = -1; - if (m_mode == 0) - { - if (QRect( 3, 3, 10, 10).contains(p)) - hooveredBase = 0; - else if (QRect(33, 3, 10, 10).contains(p)) - hooveredBase = 1; - else if (QRect(18, 18, 10, 10).contains(p)) - hooveredBase = 2; - else if (QRect( 3, 33, 10, 10).contains(p)) - hooveredBase = 3; - else if (QRect(33, 33, 10, 10).contains(p)) - hooveredBase = 4; - } - else - { - if (QRect( 3, 3, 10, 10).contains(p)) - hooveredBase = 0; - else if (QRect(33, 3, 10, 10).contains(p)) - hooveredBase = 1; - else if (QRect(18, 3, 10, 10).contains(p)) - hooveredBase = 2; - } - update(); + IconManager& im=IconManager::instance(); + + loadIcon(im, buttonNE); + loadIcon(im, buttonN); + loadIcon(im, buttonNW); + loadIcon(im, buttonE); + loadIcon(im, buttonCenter); + loadIcon(im, buttonW); + loadIcon(im, buttonSE); + loadIcon(im, buttonS); + loadIcon(im, buttonSW); + + setStyleSheet("QToolButton {border: none;}"); + + connect(buttonNE, &QToolButton::clicked, [this]() { emit buttonClicked(0); }); + connect(buttonNW, &QToolButton::clicked, [this]() { emit buttonClicked(1); }); + connect(buttonCenter, &QToolButton::clicked, [this]() { emit buttonClicked(2); }); + connect(buttonSE, &QToolButton::clicked, [this]() { emit buttonClicked(3); }); + connect(buttonSW, &QToolButton::clicked, [this]() { emit buttonClicked(4); }); } -void BasePointWidget::leaveEvent(QEvent*) +void BasePointWidget::loadIcon(IconManager& im, QToolButton* button) { - hooveredBase = -1; - update(); + QIcon icon = QIcon(); + icon.addPixmap(im.loadPixmap("16/basepoint-checked.png"), QIcon::Normal, QIcon::On); + icon.addPixmap(im.loadPixmap("16/basepoint-unchecked.png"), QIcon::Normal, QIcon::Off); + button->setIcon(icon); } int BasePointWidget::checkedId() { - return selectedBase; + if (buttonNE->isChecked()) + return 0; + else if (buttonNW->isChecked()) + return 1; + else if (buttonCenter->isChecked()) + return 2; + else if (buttonSE->isChecked()) + return 3; + else if (buttonSW->isChecked()) + return 4; + return 0; } void BasePointWidget::setCheckedId(int id) { - selectedBase = id; - update(); + switch (id) { + case 0: + buttonNE->setChecked(true); + break; + case 1: + buttonNW->setChecked(true); + break; + case 2: + buttonCenter->setChecked(true); + break; + case 3: + buttonSE->setChecked(true); + break; + case 4: + buttonSE->setChecked(true); + break; + } } diff --git a/scribus/ui/basepointwidget.h b/scribus/ui/basepointwidget.h index abfde3c9f..0ae85bd2c 100644 --- a/scribus/ui/basepointwidget.h +++ b/scribus/ui/basepointwidget.h @@ -7,18 +7,19 @@ for which a new license (GPL+exception) is in place. #ifndef BASEPOINTWIDGET_H #define BASEPOINTWIDGET_H +#include "ui_basepointwidgetbase.h" + #include <QWidget> -#include <QPaintEvent> -#include <QMouseEvent> -#include <QPainter> #include "scribusapi.h" -class SCRIBUS_API BasePointWidget : public QWidget +class IconManager; + +class SCRIBUS_API BasePointWidget : public QWidget, public Ui::BasePointWidgetBase { Q_OBJECT public: - BasePointWidget(QWidget *pa, int mode = 0); + BasePointWidget(QWidget *parent); ~BasePointWidget() {} /** BasePoint values: @@ -30,16 +31,8 @@ public: */ int checkedId(); void setCheckedId(int id); - void paintEvent(QPaintEvent *e); - void mousePressEvent(QMouseEvent *m); - void mouseReleaseEvent(QMouseEvent *); - void mouseMoveEvent(QMouseEvent *m); - void leaveEvent(QEvent*); private: - int m_mode; - int selectedBase; - int hooveredBase; - bool Mpressed; + void loadIcon(IconManager& im, QToolButton* button); signals: void buttonClicked(int); }; diff --git a/scribus/ui/basepointwidgetbase.ui b/scribus/ui/basepointwidgetbase.ui new file mode 100644 index 000000000..66d3a24f0 --- /dev/null +++ b/scribus/ui/basepointwidgetbase.ui @@ -0,0 +1,248 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>BasePointWidgetBase</class> + <widget class="QWidget" name="BasePointWidgetBase"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>62</width> + <height>51</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <property name="spacing"> + <number>1</number> + </property> + <item row="1" column="0"> + <widget class="QToolButton" name="buttonE"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QToolButton" name="buttonN"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="QToolButton" name="buttonW"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="3"> + <widget class="QToolButton" name="buttonNW"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QToolButton" name="buttonNE"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QToolButton" name="buttonCenter"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QToolButton" name="buttonSE"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QToolButton" name="buttonS"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="3"> + <widget class="QToolButton" name="buttonSW"> + <property name="minimumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16</width> + <height>16</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + <tabstops> + <tabstop>buttonNE</tabstop> + <tabstop>buttonN</tabstop> + <tabstop>buttonNW</tabstop> + <tabstop>buttonE</tabstop> + <tabstop>buttonCenter</tabstop> + <tabstop>buttonW</tabstop> + <tabstop>buttonSE</tabstop> + <tabstop>buttonS</tabstop> + <tabstop>buttonSW</tabstop> + </tabstops> + <resources/> + <connections/> +</ui> diff --git a/scribus/ui/propertiespalette_xyz.cpp b/scribus/ui/propertiespalette_xyz.cpp index 4eb8a45ed..9f86ff715 100644 --- a/scribus/ui/propertiespalette_xyz.cpp +++ b/scribus/ui/propertiespalette_xyz.cpp @@ -62,32 +62,35 @@ PropertiesPalette_XYZ::PropertiesPalette_XYZ( QWidget* parent) : QWidget(parent) connect(userActionSniffer, SIGNAL(actionStart()), this, SLOT(spinboxStartUserAction())); connect(userActionSniffer, SIGNAL(actionEnd()), this, SLOT(spinboxFinishUserAction())); - nameEdit->setFocusPolicy(Qt::ClickFocus); - installSniffer(xposSpin); installSniffer(yposSpin); installSniffer(widthSpin); installSniffer(heightSpin); - keepFrameWHRatioButton->setCheckable( true ); - keepFrameWHRatioButton->setAutoRaise( true ); - keepFrameWHRatioButton->setMaximumSize( QSize( 15, 32767 ) ); + IconManager& im=IconManager::instance(); + + // keepFrameWHRatioButton->setCheckable(true); + // { + // QIcon icon = QIcon(); + // icon.addPixmap(im.loadPixmap("chain-small-closed.png"), QIcon::Normal, QIcon::On); + // icon.addPixmap(im.loadPixmap("chain-small-open.png"), QIcon::Normal, QIcon::Off); + // keepFrameWHRatioButton->setIcon(icon); + // } + + keepFrameWHRatioButton->setCheckable(true); + keepFrameWHRatioButton->setAutoRaise(true); + keepFrameWHRatioButton->setMaximumSize(QSize(15, 32767)); keepFrameWHRatioButton->setChecked(false); + // rotation->setPixmap(im.loadPixmap("rotation.png")); // TODO: using the unicode char might even be better... but i did not manage to load the pixmap in the label rotationSpin->setNewUnit(6); rotationSpin->setWrapping( true ); installSniffer(rotationSpin); - rotationLabel->setBuddy(rotationSpin); - - IconManager& im=IconManager::instance(); - levelUp->setIcon(im.loadIcon("16/go-up.png")); - levelDown->setIcon(im.loadIcon("16/go-down.png")); - levelTop->setIcon(im.loadIcon("16/go-top.png")); - levelBottom->setIcon(im.loadIcon("16/go-bottom.png")); - levelLabel->setAlignment( Qt::AlignCenter ); - doGroup->setIcon(im.loadIcon("group.png")); - doUnGroup->setIcon(im.loadIcon("ungroup.png")); + levelUp->setIcon(IconManager::instance().loadIcon("16/level-up.png")); + levelDown->setIcon(IconManager::instance().loadIcon("16/level-down.png")); + levelTop->setIcon(IconManager::instance().loadIcon("16/level-top.png")); + levelBottom->setIcon(IconManager::instance().loadIcon("16/level-bottom.png")); flipH->setIcon(im.loadIcon("16/flip-object-horizontal.png")); flipH->setCheckable( true ); @@ -100,12 +103,6 @@ PropertiesPalette_XYZ::PropertiesPalette_XYZ( QWidget* parent) : QWidget(parent) a.addPixmap(im.loadPixmap("16/lock-unlocked.png"), QIcon::Normal, QIcon::Off); doLock->setIcon(a); - noPrint->setCheckable( true ); - QIcon a2 = QIcon(); - a2.addPixmap(im.loadPixmap("NoPrint.png"), QIcon::Normal, QIcon::On); - a2.addPixmap(im.loadPixmap("16/document-print.png"), QIcon::Normal, QIcon::Off); - noPrint->setIcon(a2); - noResize->setCheckable( true ); QIcon a3 = QIcon(); a3.addPixmap(im.loadPixmap("framenoresize.png"), QIcon::Normal, QIcon::On); @@ -129,12 +126,8 @@ PropertiesPalette_XYZ::PropertiesPalette_XYZ( QWidget* parent) : QWidget(parent) connect(levelBottom, SIGNAL(clicked()), this, SLOT(handleBack())); connect(basePointWidget, SIGNAL(buttonClicked(int)), this, SLOT(handleBasePoint(int))); - connect(nameEdit , SIGNAL(Leaved()) , this, SLOT(handleNewName())); connect(doLock , SIGNAL(clicked()), this, SLOT(handleLock())); - connect(noPrint , SIGNAL(clicked()), this, SLOT(handlePrint())); connect(noResize , SIGNAL(clicked()), this, SLOT(handleLockSize())); - connect(doGroup , SIGNAL(clicked()), this, SLOT(handleGrouping()) ); - connect(doUnGroup, SIGNAL(clicked()), this, SLOT(handleUngrouping()) ); m_haveItem = false; xposSpin->showValue(0); @@ -204,19 +197,16 @@ void PropertiesPalette_XYZ::unsetDoc() m_haveItem = false; m_doc = nullptr; m_item = nullptr; - nameEdit->clear(); xposSpin->setConstants(nullptr); yposSpin->setConstants(nullptr); widthSpin->setConstants(nullptr); heightSpin->setConstants(nullptr); - doGroup->setEnabled(false); - doUnGroup->setEnabled(false); flipH->setEnabled(false); flipV->setEnabled(false); - xposLabel->setText( tr( "&X-Pos:" ) ); - yposLabel->setText( tr( "&Y-Pos:" ) ); - widthLabel->setText( tr( "&Width:" ) ); - heightLabel->setText( tr( "&Height:" ) ); + xposLabel->setText(tr("&X")); + yposLabel->setText(tr("&Y")); + widthLabel->setText(tr("&W")); + heightLabel->setText(tr("&H")); xposSpin->showValue(0); yposSpin->showValue(0); widthSpin->showValue(0); @@ -236,20 +226,20 @@ void PropertiesPalette_XYZ::setLineMode(int lineMode) { if (lineMode == 0) { - xposLabel->setText( tr( "&X-Pos:" ) ); - yposLabel->setText( tr( "&Y-Pos:" ) ); - widthLabel->setText( tr( "&Width:" ) ); - heightLabel->setText( tr( "&Height:" ) ); + xposLabel->setText(tr("&X")); + yposLabel->setText(tr("&Y")); + widthLabel->setText(tr("&W")); + heightLabel->setText(tr("&H")); rotationSpin->setEnabled(true); heightSpin->setEnabled(false); m_lineMode = false; } else { - xposLabel->setText( tr( "&X1:" ) ); - yposLabel->setText( tr( "Y&1:" ) ); - widthLabel->setText( tr( "X&2:" ) ); - heightLabel->setText( tr( "&Y2:" ) ); + xposLabel->setText(tr("&X1:")); + yposLabel->setText(tr("Y&1:")); + widthLabel->setText(tr("X&2:")); + heightLabel->setText(tr("&Y2:")); rotationSpin->setEnabled(false); heightSpin->setEnabled(true); m_lineMode = true; @@ -289,23 +279,17 @@ void PropertiesPalette_XYZ::setCurrentItem(PageItem *item) if (!m_doc) setDoc(item->doc()); - disconnect(nameEdit, SIGNAL(Leaved()), this, SLOT(handleNewName())); - m_haveItem = false; m_item = item; - nameEdit->setText(m_item->itemName()); levelLabel->setText( QString::number(m_item->level()) ); - connect(nameEdit, SIGNAL(Leaved()), this, SLOT(handleNewName())); - //CB replaces old emits from PageItem::emitAllToGUI() disconnect(xposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewX())); disconnect(yposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewY())); disconnect(widthSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewW())); disconnect(heightSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewH())); disconnect(doLock, SIGNAL(clicked()), this, SLOT(handleLock())); - disconnect(noPrint, SIGNAL(clicked()), this, SLOT(handlePrint())); disconnect(noResize, SIGNAL(clicked()), this, SLOT(handleLockSize())); disconnect(flipH, SIGNAL(clicked()), this, SLOT(handleFlipH())); disconnect(flipV, SIGNAL(clicked()), this, SLOT(handleFlipV())); @@ -324,7 +308,6 @@ void PropertiesPalette_XYZ::setCurrentItem(PageItem *item) flipH->setCheckable(checkableFlip); flipV->setCheckable(checkableFlip); - noPrint->setChecked(!item->printEnabled()); showFlippedH(item->imageFlippedH()); showFlippedV(item->imageFlippedV()); double rr = item->rotation(); @@ -339,35 +322,39 @@ void PropertiesPalette_XYZ::setCurrentItem(PageItem *item) connect(widthSpin , SIGNAL(valueChanged(double)), this, SLOT(handleNewW()), Qt::UniqueConnection); connect(heightSpin , SIGNAL(valueChanged(double)), this, SLOT(handleNewH()), Qt::UniqueConnection); connect(doLock , SIGNAL(clicked()), this, SLOT(handleLock()), Qt::UniqueConnection); - connect(noPrint , SIGNAL(clicked()), this, SLOT(handlePrint()), Qt::UniqueConnection); connect(noResize, SIGNAL(clicked()), this, SLOT(handleLockSize()), Qt::UniqueConnection); connect(flipH , SIGNAL(clicked()), this, SLOT(handleFlipH()), Qt::UniqueConnection); connect(flipV , SIGNAL(clicked()), this, SLOT(handleFlipV()), Qt::UniqueConnection); connect(rotationSpin, SIGNAL(valueChanged(double)), this, SLOT(handleRotation()), Qt::UniqueConnection); - bool setter = false; - xposSpin->setEnabled(!setter); - yposSpin->setEnabled(!setter); - bool haveSameParent = m_doc->m_Selection->objectsHaveSameParent(); - levelGroup->setEnabled(haveSameParent && !item->locked()); + xposSpin->setEnabled(true); + yposSpin->setEnabled(true); + { + bool enabled = m_doc->m_Selection->objectsHaveSameParent() && !item->locked(); + levelTop->setEnabled(enabled); + levelUp->setEnabled(enabled); + levelDown->setEnabled(enabled); + levelBottom->setEnabled(enabled); + } + // TODO: what is doing this? if ((m_item->isGroup()) && (!m_item->isSingleSel)) { setEnabled(true); } if ((m_item->itemType() == PageItem::Line) && m_lineMode) { - xposLabel->setText( tr( "&X1:" ) ); - yposLabel->setText( tr( "Y&1:" ) ); - widthLabel->setText( tr( "X&2:" ) ); - heightLabel->setText( tr( "&Y2:" ) ); + xposLabel->setText(tr("&X1")); + yposLabel->setText(tr("Y&1")); + widthLabel->setText(tr("X&2")); + heightLabel->setText(tr("&Y2")); rotationSpin->setEnabled(false); } else { - xposLabel->setText( tr( "&X-Pos:" ) ); - yposLabel->setText( tr( "&Y-Pos:" ) ); - widthLabel->setText( tr( "&Width:" ) ); - heightLabel->setText( tr( "&Height:" ) ); + xposLabel->setText(tr("&X")); + yposLabel->setText(tr("&Y")); + widthLabel->setText(tr("&W")); + heightLabel->setText(tr("&H")); rotationSpin->setEnabled(true); } m_haveItem = true; @@ -390,14 +377,6 @@ void PropertiesPalette_XYZ::setCurrentItem(PageItem *item) rrR = 360 - rrR; noResize->setEnabled(!m_item->isArc()); - doGroup->setEnabled(false); - doUnGroup->setEnabled(false); - if ((m_doc->m_Selection->count() > 1) && (haveSameParent)) - doGroup->setEnabled(true); - if (m_doc->m_Selection->count() == 1) - doUnGroup->setEnabled(m_item->isGroup()); - if ((m_doc->appMode == modeEditClip) && (m_item->isGroup())) - doUnGroup->setEnabled(false); if (m_item->asOSGFrame()) { setEnabled(true); @@ -414,7 +393,6 @@ void PropertiesPalette_XYZ::handleAppModeChanged(int oldMode, int mode) { if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning()) return; - doUnGroup->setEnabled(mode != modeEdit && mode != modeEditClip && m_item->isGroup()); doLock->setEnabled(mode != modeEditClip); } @@ -423,8 +401,6 @@ void PropertiesPalette_XYZ::handleSelectionChanged() if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning()) return; - nameEdit->setEnabled(m_doc->m_Selection->count() == 1); - PageItem* currItem = currentItemFromSelection(); if (m_doc->m_Selection->count() > 1) { @@ -442,10 +418,10 @@ void PropertiesPalette_XYZ::handleSelectionChanged() m_ScMW->view->RCenter = FPoint(gx, gy + gh); else if (bp == 4) m_ScMW->view->RCenter = FPoint(gx + gw, gy + gh); - xposLabel->setText( tr( "&X-Pos:" ) ); - yposLabel->setText( tr( "&Y-Pos:" ) ); - widthLabel->setText( tr( "&Width:" ) ); - heightLabel->setText( tr( "&Height:" ) ); + xposLabel->setText(tr("&X")); + yposLabel->setText(tr("&Y")); + widthLabel->setText(tr("&W")); + heightLabel->setText(tr("&H")); xposSpin->showValue(gx); yposSpin->showValue(gy); @@ -459,7 +435,6 @@ void PropertiesPalette_XYZ::handleSelectionChanged() heightSpin->setEnabled(true); rotationSpin->setEnabled(true); - nameEdit->setEnabled(false); flipH->setCheckable( false ); flipV->setCheckable( false ); flipH->setChecked(false); @@ -475,12 +450,6 @@ void PropertiesPalette_XYZ::handleSelectionChanged() int itemType = currItem ? (int) currItem->itemType() : -1; m_haveItem = (itemType!=-1); - if (itemType == -1) - { - doGroup->setEnabled(false); - doUnGroup->setEnabled(false); - } - nameEdit->setEnabled(true); basePointWidget->setEnabled(true); setEnabled(true); @@ -510,10 +479,10 @@ void PropertiesPalette_XYZ::handleSelectionChanged() switch (itemType) { case -1: - xposLabel->setText( tr( "&X-Pos:" ) ); - yposLabel->setText( tr( "&Y-Pos:" ) ); - widthLabel->setText( tr( "&Width:" ) ); - heightLabel->setText( tr( "&Height:" ) ); + xposLabel->setText(tr("&X")); + yposLabel->setText(tr("&Y")); + widthLabel->setText(tr("&W")); + heightLabel->setText(tr("&H")); xposSpin->showValue(0); yposSpin->showValue(0); @@ -1155,13 +1124,6 @@ void PropertiesPalette_XYZ::handleLockSize() m_ScMW->scrActions["itemLockSize"]->toggle(); } -void PropertiesPalette_XYZ::handlePrint() -{ - if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning()) - return; - m_ScMW->scrActions["itemPrintingEnabled"]->toggle(); -} - void PropertiesPalette_XYZ::handleFlipH() { if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning()) @@ -1176,6 +1138,7 @@ void PropertiesPalette_XYZ::handleFlipV() m_ScMW->scrActions["itemFlipV"]->toggle(); } +/* void PropertiesPalette_XYZ::handleNewName() { if (m_ScMW->scriptIsRunning() || !m_haveDoc || !m_haveItem) @@ -1222,6 +1185,7 @@ void PropertiesPalette_XYZ::handleNewName() } } } +*/ void PropertiesPalette_XYZ::installSniffer(ScrSpinBox *spinBox) { @@ -1334,11 +1298,6 @@ void PropertiesPalette_XYZ::showSizeLocked(bool isSizeLocked) noResize->setChecked(isSizeLocked); } -void PropertiesPalette_XYZ::showPrintingEnabled(bool isPrintingEnabled) -{ - noPrint->setChecked(!isPrintingEnabled); -} - void PropertiesPalette_XYZ::showFlippedH(bool isFlippedH) { flipH->setChecked(isFlippedH); @@ -1348,20 +1307,3 @@ void PropertiesPalette_XYZ::showFlippedV(bool isFlippedV) { flipV->setChecked(isFlippedV); } - -void PropertiesPalette_XYZ::handleGrouping() -{ - m_ScMW->GroupObj(); - doGroup->setEnabled(false); - doUnGroup->setEnabled(true); - handleSelectionChanged(); - //FIXME - //TabStack->setItemEnabled(idShapeItem, false); -} - -void PropertiesPalette_XYZ::handleUngrouping() -{ - m_ScMW->UnGroupObj(); - m_doc->invalidateAll(); - m_doc->regionsChanged()->update(QRect()); -} diff --git a/scribus/ui/propertiespalette_xyz.h b/scribus/ui/propertiespalette_xyz.h index 7892c5043..4c2c2c3be 100644 --- a/scribus/ui/propertiespalette_xyz.h +++ b/scribus/ui/propertiespalette_xyz.h @@ -14,10 +14,10 @@ for which a new license (GPL+exception) is in place. #include "linkbutton.h" #include "sclistboxpixmap.h" #include "scguardedptr.h" +#include "pageitem.h" class BasePointWidget; class NameWidget; -class PageItem; class ScribusDoc; class Selection; class ScribusMainWindow; @@ -61,7 +61,6 @@ public slots: void showRotation(double r); void showLocked(bool); void showSizeLocked(bool); - void showPrintingEnabled(bool); void showFlippedH(bool); void showFlippedV(bool); @@ -83,10 +82,6 @@ private slots: void handleBasePoint(int m); void handleLock(); void handleLockSize(); - void handlePrint(); - void handleNewName(); - void handleGrouping(); - void handleUngrouping(); protected slots: //virtual void reject(); diff --git a/scribus/ui/propertiespalette_xyzbase.ui b/scribus/ui/propertiespalette_xyzbase.ui index 06e9c35d5..bc7e21453 100644 --- a/scribus/ui/propertiespalette_xyzbase.ui +++ b/scribus/ui/propertiespalette_xyzbase.ui @@ -6,7 +6,7 @@ <rect> <x>0</x> <y>0</y> - <width>280</width> + <width>635</width> <height>333</height> </rect> </property> @@ -30,404 +30,289 @@ <number>0</number> </property> <item> - <widget class="QGroupBox" name="nameGroup"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string>Name</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="spacing"> - <number>2</number> - </property> - <property name="leftMargin"> - <number>2</number> - </property> - <property name="topMargin"> - <number>2</number> - </property> - <property name="rightMargin"> - <number>2</number> - </property> - <property name="bottomMargin"> - <number>2</number> - </property> - <item> - <widget class="NameWidget" name="nameEdit"> - <property name="focusPolicy"> - <enum>Qt::ClickFocus</enum> - </property> - <property name="toolTip"> - <string>Name of selected object</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="geoGroup"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string>Geometry</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="leftMargin"> - <number>2</number> - </property> - <property name="topMargin"> - <number>2</number> - </property> - <property name="rightMargin"> - <number>2</number> - </property> - <property name="bottomMargin"> - <number>2</number> - </property> - <item> - <layout class="QGridLayout" name="geoGroupLayout"> - <property name="leftMargin"> - <number>5</number> - </property> - <property name="topMargin"> - <number>5</number> - </property> - <property name="rightMargin"> - <number>5</number> - </property> - <property name="bottomMargin"> - <number>5</number> - </property> - <property name="spacing"> - <number>4</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="xposLabel"> - <property name="text"> - <string>&X-Pos:</string> - </property> - <property name="buddy"> - <cstring>xposSpin</cstring> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="ScrSpinBox" name="xposSpin"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="toolTip"> - <string>Horizontal position of current basepoint</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="widthLabel"> - <property name="text"> - <string>&Width:</string> - </property> - <property name="buddy"> - <cstring>widthSpin</cstring> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="yposLabel"> - <property name="text"> - <string>&Y-Pos:</string> - </property> - <property name="buddy"> - <cstring>yposSpin</cstring> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="ScrSpinBox" name="yposSpin"> - <property name="toolTip"> - <string>Vertical position of current basepoint</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="ScrSpinBox" name="widthSpin"> - <property name="toolTip"> - <string>Width of current selection</string> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="heightLabel"> - <property name="text"> - <string>&Height:</string> - </property> - <property name="buddy"> - <cstring>heightSpin</cstring> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="ScrSpinBox" name="heightSpin"> - <property name="toolTip"> - <string>Height of current selection</string> - </property> - </widget> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="rotationLabel"> - <property name="text"> - <string>&Rotation:</string> - </property> - </widget> - </item> - <item row="4" column="1"> - <widget class="ScrSpinBox" name="rotationSpin"> - <property name="toolTip"> - <string>Rotation of object at current basepoint</string> - </property> - <property name="wrapping"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="5" column="0"> - <widget class="QLabel" name="basepointLabel"> - <property name="toolTip"> - <string>Point from which measurements or rotation angles are referenced</string> - </property> - <property name="text"> - <string>Basepoint:</string> - </property> - </widget> - </item> - <item row="5" column="1"> - <widget class="BasePointWidget" name="basePointWidget" native="true"/> - </item> - <item row="2" column="2" rowspan="2"> - <widget class="LinkButton" name="keepFrameWHRatioButton"> - <property name="maximumSize"> - <size> - <width>15</width> - <height>32767</height> - </size> - </property> - <property name="toolTip"> - <string>Keep the aspect ratio</string> - </property> - <property name="text"> - <string>...</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoRaise"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="QGroupBox" name="levelGroup"> - <property name="title"> - <string>Level</string> + <layout class="QGridLayout" name="gridLayout_3"> + <item row="1" column="5"> + <widget class="QLabel" name="heightLabel"> + <property name="text"> + <string>&H</string> + </property> + <property name="buddy"> + <cstring>heightSpin</cstring> </property> - <layout class="QGridLayout" name="gridLayout"> - <property name="leftMargin"> - <number>5</number> - </property> - <property name="topMargin"> - <number>5</number> - </property> - <property name="rightMargin"> - <number>5</number> - </property> - <property name="bottomMargin"> - <number>5</number> - </property> - <property name="spacing"> - <number>4</number> - </property> - <item row="0" column="0"> - <widget class="QToolButton" name="levelUp"> - <property name="maximumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Move one level up</string> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QToolButton" name="levelDown"> - <property name="maximumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Move one level down</string> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QToolButton" name="levelTop"> - <property name="maximumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Move to front</string> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QToolButton" name="levelBottom"> - <property name="maximumSize"> - <size> - <width>22</width> - <height>22</height> - </size> - </property> - <property name="toolTip"> - <string>Move to back</string> - </property> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="0" column="2" rowspan="2"> - <widget class="QLabel" name="levelLabel"> - <property name="toolTip"> - <string>Indicates the level the object is on, 1 means the object is at the bottom</string> - </property> - <property name="text"> - <string>0</string> - </property> - </widget> - </item> - </layout> </widget> </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <item row="0" column="7" rowspan="2"> + <widget class="LinkButton" name="keepFrameWHRatioButton"> + <property name="minimumSize"> + <size> + <width>8</width> + <height>43</height> + </size> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="checkable"> + <bool>true</bool> </property> - <property name="sizeHint" stdset="0"> + </widget> + </item> + <item row="0" column="5"> + <widget class="QLabel" name="widthLabel"> + <property name="text"> + <string>&W</string> + </property> + <property name="buddy"> + <cstring>widthSpin</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="xposLabel"> + <property name="text"> + <string>&X:</string> + </property> + <property name="buddy"> + <cstring>xposSpin</cstring> + </property> + </widget> + </item> + <item row="4" column="5" colspan="2"> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QToolButton" name="noResize"> + <property name="toolTip"> + <string>Lock or unlock the size of the object</string> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="doLock"> + <property name="toolTip"> + <string>Lock or unlock the object</string> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="yposLabel"> + <property name="text"> + <string>&Y:</string> + </property> + <property name="buddy"> + <cstring>yposSpin</cstring> + </property> + </widget> + </item> + <item row="2" column="2" rowspan="3"> + <widget class="BasePointWidget" name="basePointWidget" native="true"> + <property name="minimumSize"> <size> - <width>40</width> + <width>20</width> <height>20</height> </size> </property> - </spacer> + </widget> </item> - <item> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="0" column="0"> - <widget class="QToolButton" name="doGroup"> + <item row="1" column="6"> + <widget class="ScrSpinBox" name="heightSpin"> + <property name="toolTip"> + <string>Height of current selection</string> + </property> + </widget> + </item> + <item row="0" column="6"> + <widget class="ScrSpinBox" name="widthSpin"> + <property name="toolTip"> + <string>Width of current selection</string> + </property> + </widget> + </item> + <item row="2" column="5" colspan="2"> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <item> + <widget class="QToolButton" name="levelBottom"> + <property name="maximumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> <property name="toolTip"> - <string>Group the selected objects</string> + <string>Move to back</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="1" column="0"> - <widget class="QToolButton" name="doUnGroup"> + <item> + <widget class="QToolButton" name="levelDown"> + <property name="maximumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> <property name="toolTip"> - <string>Ungroup the selected group</string> + <string>Move one level down</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="0" column="1"> - <widget class="QToolButton" name="flipH"> + <item> + <widget class="QToolButton" name="levelUp"> + <property name="maximumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> <property name="toolTip"> - <string>Flip horizontally</string> + <string>Move one level up</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="1" column="1"> - <widget class="QToolButton" name="flipV"> + <item> + <widget class="QToolButton" name="levelTop"> + <property name="maximumSize"> + <size> + <width>22</width> + <height>22</height> + </size> + </property> <property name="toolTip"> - <string>Flip vertically</string> + <string>Move to front</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="0" column="2"> - <widget class="QToolButton" name="doLock"> + <item> + <widget class="QLabel" name="levelLabel"> <property name="toolTip"> - <string>Lock or unlock the object</string> + <string>Indicates the level the object is on, 1 means the object is at the bottom</string> </property> <property name="text"> - <string/> + <string>0</string> </property> </widget> </item> - <item row="1" column="2"> - <widget class="QToolButton" name="noPrint"> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="2" column="4"> + <widget class="ScrSpinBox" name="rotationSpin"> + <property name="toolTip"> + <string>Rotation of object at current basepoint</string> + </property> + <property name="wrapping"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="3"> + <widget class="QLabel" name="rotation"> + <property name="text"> + <string>⟳</string> + </property> + </widget> + </item> + <item row="4" column="4"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QToolButton" name="flipV"> <property name="toolTip"> - <string>Enable or disable exporting of the object</string> + <string>Flip vertically</string> </property> <property name="text"> <string/> </property> </widget> </item> - <item row="0" column="3"> - <widget class="QToolButton" name="noResize"> + <item> + <widget class="QToolButton" name="flipH"> <property name="toolTip"> - <string>Lock or unlock the size of the object</string> + <string>Flip horizontally</string> </property> <property name="text"> <string/> </property> </widget> </item> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> </layout> </item> + <item row="0" column="2" colspan="3"> + <widget class="ScrSpinBox" name="xposSpin"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="toolTip"> + <string>Horizontal position of current basepoint</string> + </property> + </widget> + </item> + <item row="1" column="2" colspan="3"> + <widget class="ScrSpinBox" name="yposSpin"> + <property name="toolTip"> + <string>Vertical position of current basepoint</string> + </property> + </widget> + </item> </layout> </item> <item> @@ -446,11 +331,6 @@ </layout> </widget> <customwidgets> - <customwidget> - <class>NameWidget</class> - <extends>QLineEdit</extends> - <header>ui/propertiespalette_utils.h</header> - </customwidget> <customwidget> <class>ScrSpinBox</class> <extends>QDoubleSpinBox</extends> @@ -468,6 +348,14 @@ <header>ui/linkbutton.h</header> </customwidget> </customwidgets> + <tabstops> + <tabstop>xposSpin</tabstop> + <tabstop>yposSpin</tabstop> + <tabstop>levelBottom</tabstop> + <tabstop>levelDown</tabstop> + <tabstop>levelUp</tabstop> + <tabstop>levelTop</tabstop> + </tabstops> <resources/> <connections/> </ui> |
|
What is the status of this feature? Will it go into the main code? |
|
I've not so fond of https://bugs.scribus.net/file_download.php?file_id=10714&type=bug It all feels too scrunched up, no label for level. Label for rotation is hidden next to the basepoint contorl. Flip H/V could easily be groups next to locking if you want to have 4 icons together. You could consider grouping the level in a 2x2 group? |
|
- what kind of label would you want for the levels? for the number? personally, i feel that we could remove the number altogether (it's probably of little to no practical use) the icon are exactly the same as they are in inkscape... and i think that they are rather clear in their meaning. i don't think that a text label is needed (there are tooltips that explain what each button does) - the rotation icon feels indeed a bit lost. currently, it's just a unicode character and it should be replaced by an icon. i welcome propositions to improve the placement of the rotation (if possible keeping it next to the flip buttons) - i'd prefer not to have the flipping and the locking together. imo, rotation and flips belong together. personally, i would welcome it, if this patch would finally be accepted as is. as long as the issues are with the placement of the buttons, it's all in an .ui file and it's easy for anybody to tweak it and propose a new version for discussion. (or make screenshots and reshuffle the items) personally, for the next step i'd like to focus on having the basepoint to support lines and to make the xyz + shape always shown in propeties palette (no expanding / collapsing for them, like in the main part of the text panel) but as long as this patch is not accepted i'm a bit stuck... (the line panel is mostly ready... and depends on this...) |
|
About the item name: couldn't the "Name" field be removed completely? The editable field on it's own would make it clear enough that this is the name of the item. Alternatively, "Name" could be moved to the left of the edit field: Name: _____________________ |
|
here the current state: - item name on top, but separated (i'm still for moving to a collapsing at the end of the PP) - better placement for the rotation - i suggest putting the current level in the tooltip over the level down / up buttons. i really can't find a different solution that does not require way to much space and "attention" compared to the usefulness of the information (normally, you just care if an item is above or below another, not the level value... in my experience it has almost only been useful for debugging purposes... not in production) - i'm tempted to switch the flipping buttons with the level ones and make the buttons on the right side right aligned (and remove the alignment with the x,y / h,w fields) and here the appimage: https://gitlab.com/a.l.e/scribus/-/jobs/399164588/artifacts/file/Scribus-nightly-x86_64.AppImage |
|
here is a mockup of the proposal above, with flip and levels switched and locking on the right side. (the xy/hw fields do not yet have the same width, sorry) |
|
This is verygood and I fully support to get it on the upstream code. If we can rework all other pallets like this then that will be great for scribus |
|
Hi, this is my current proposal for the XYZ panel. Name input and print button are in the "advanced panel" and not visible here. The "all" lock (formerly frame lock) on the left disable almost all buttons and inputs on the right side. I think this separation is much more obvious than in the previous interface. BTW: the basepoint widget is already implemented for version 1.7.0. It already supports all 9 base points as a 3 point mode for lines. And as you can see, the rotation of the item is represented too. |
|
nicely cleaned up and compacted. having a look at it after a long time, i wonder if x, y and w, h should not be on the same row... i played a bit with the screenshot and here is what come out... it somehow feels a bit more "calm" to me... p.s.: i'm not sure about what to do with the second lock... i wonder if we should simply have two of them, one in the properties palette and one in the content one, independent from each other. |
|
Hi everybody, Maybe split into tabs...? |
|
@ale #: "having a look at it after a long time, i wonder if x, y and w, h should not be on the same row..." => I think the reason it looks weird is because of the bottom label. The eye does not recognize X/Y and W/H inputs as a group. Looking at other players in the game, it looks like a standard UI, having the base point widget in the top left, the next column is the X/Y manipulation, and the third column is the W/H manipulation. (at least for desktop publishing software, vector image software, like Sketch or Figma having it like you proposed). In my view, there is no reason to reinvent the wheel. Even if it didn't work or was stupid, Adobe or Serif would probably change it because they make money off their tools. #: "i'm not sure about what to do with the second lock... i wonder if we should simply have two of them, one in the properties palette and one in the content one, independent from each other." => I described it wrongly. The lock button next to the width and height input is the frame size lock, the "all" one locks everything (rotation, size, layer). See the attached image of the feature mapping. @PeterBenedek Interesting approach. To me, it looks like a more explanatory user interface, grouping items by functions and explaining features. On the other hand, however, it takes up much more space than before and increases the number of user clicks. My question is: What problem does this concept address? Overall, I think it makes sense to question the buttons and functions. The lock buttons could be confusing. I also think it might make sense to not only rearrange items from the XYZ panel as its own items. I think it makes more sense to see the whole frame properties window at once, and regroup features thematically, possibly introducing new ones as well. For example, InDesign and Publisher have a "Shear" feature next to size and rotation manipulation. Scribus only has this in the Bezier node window. |
|
"What problem does this concept address?" * minimizes the Properties -- size of the X,Y,Z panel * the panel will be more organized * It does not require the introduction of new elements, it uses the existing functions of Scribus "On the other hand, however, it takes up much more space..." On the contrary. The panel has never been so small. " increases the number of user clicks" * This is the price of transparency... |
|
"What problem does this concept address?" ale wrote: "following martin's Indigo UI project, i've started shrinking the XYZ pane in the properties palette." Here is a screenshot, about concept. |
|
just two short further notes from my side: - i'd prefer not to have further tabs... personally, i mostly use the fields in this dialog for information... and the ones i actively use are mostly the levels buttons (since there is no comfortable alternative)... tabs would make that rather cumbersome. as far i can tell, the goal of the UI work is to make it easier for the user to have an overview and access the scribus features, not to hide them away... - if i look at the screenshot above, i feel the vertical layouts for x/y, w/h as pleasing in a ribbon layout (most of the screenshots), but not really in a panel (page plus). but that's not so important: i'm ok with any layout as long as it is compact and looks clean. |
|
After all these years of waiting, I'm so glad it's started! Thank you for trying again! I applaud your perseverance! � I think it is important to have uniform design principles that are applied consistently on the interface. Are there any? Which are affected here (as I see): 1) Be logically organized 2) Be compact (as much widgets as possible on the screen; no empty space) 3) Be quick to use (as few clicks as possible to access a function) 4) Follow industry practices (non-Scribus users can learn quickly) I see that @PeterBenedek prefers principle 1., but @nitramr prefers principles 2, 3, 4. I also find 2. and 3 more important. Perhaps you can reach unity in the development of each interface more quickly if the design principles are common! I'm really rooting for you guys! |
|
Hi all, I updated the UI concept of the XYZ section. In one screenshot, you can see labels below a group of controls, this is a new custom container widget I made. This widget has a property to hide the label, so we could have a global application setting to show/hide the labels to have a condensed or professional mode. What do you think about to move the name field and export button to a new "export" section? IMO, it is not geometry related. And what do you think about the new concept? |
|
without having tried it, i like the version without the labels. and i probably would still welcome the name being removed from the xyz palette. (i wonder if i could go to a newly created "item" section; the print visibility would somehow fit in there) i'm just a bit worried that the panel gets even wider but the input fields are getting smaller, so it might be ok. |
|
I've never used the name of the item... or if i ever have, that was so long ago i've forgotten everything about it. That would be very hacky a DTP process isnt ? |
|
It's very nice. Thanks, nitramr. The property to hide the label is a brilliant idea. I'm just thinking can I suggest a better layout... not really. The name property is important for scripting. But can go in another palette with printing property too. |
|
@ale the palette width is almost the same as before, but the height is ca. half the previous height. The second screenshot shows the implemented proposal from @ale and @bubu . Makes sense because the base point widget rotates with rotation input changes. Without the labels, it is even smaller. :) The UI structure is this (rows): 1. Box editing (Position + Size) 2. Transformation (Rotation, Mirroring) 3. Actions (Lock, Group, Layer) --> Actions don't change the geometry of the item. 4. Item properties --> will move into a separate section |
|
Its looking very nice Martin |
|
while writing about the width, i also checked and also came to the conclusion that it's not wider than the current 1.6 state. at the same time, i have the feeling that during the past years the text and properties palette got wider and i would not be unhappy to see it shrink it a bit again. (well, it might also be related to the way smaller resolution on my current monitor; on top of it, before 1.7, the tools were not docked to the left by default: that also makes a difference) but, of course, reducing the height is way more important! personally, the main goal should be that the xyz, shape, line, and color section can be open at the same time on a "normal" 1920 x1080 monitor. (which was not possible even in my old high resolution monitor!) and in that insight, your patches go in the very right direction! ps.: i played around a bit with the PP and when all other sections but the xyz are closed, i can shrink it to a width that i consider visually optimal for me... (see the screenshot) when everything is open, the minimal width is a bit wider than 1.6. but that's not a reason for not optimizing the height first! |
|
Martin, I appreciate your work! I was so looking forward to these times. Thank you for implementig our idea. I checked it: it's a little bit higher, but really narrower. The decision should be left to the main developers. |
|
i guess that this is resolved... |
Date Modified | Username | Field | Change |
---|---|---|---|
2019-11-01 17:15 | ale | New Issue | |
2019-11-01 17:15 | ale | File Added: xyz-3.png | |
2019-11-01 17:48 | ale | File Added: indigo-pp-xyz.diff | |
2019-11-01 17:48 | ale | Note Added: 0046896 | |
2019-11-01 19:31 | PeterBenedek | File Added: Martin's_basepoint.jpg | |
2019-11-01 19:31 | PeterBenedek | Note Added: 0046897 | |
2019-11-01 19:57 | jghali | Note Added: 0046898 | |
2019-11-01 19:57 | jghali | Summary | Inidigo UI: shrink the size of the XYZ pane => Indigo UI: shrink the size of the XYZ pane |
2019-11-01 20:20 | PeterBenedek | File Added: Move_icons.jpg | |
2019-11-01 20:20 | PeterBenedek | Note Added: 0046900 | |
2019-11-01 20:34 | PeterBenedek | Note Added: 0046901 | |
2019-11-01 21:33 | ale | Note Added: 0046902 | |
2019-11-02 05:38 | jghali | Note Added: 0046905 | |
2019-11-02 05:42 | jghali | Note Edited: 0046905 | |
2019-11-02 06:43 | cbradney | Note Added: 0046907 | |
2019-11-02 07:36 | ale | Note Added: 0046909 | |
2019-11-02 10:08 | PeterBenedek | Note Added: 0046911 | |
2019-11-02 10:10 | PeterBenedek | Note Edited: 0046911 | |
2019-11-02 10:33 | PeterBenedek | Note Added: 0046912 | |
2019-11-02 11:28 | ale | File Added: xyz-4.png | |
2019-11-02 11:28 | ale | Note Added: 0046914 | |
2019-11-02 11:29 | ale | File Deleted: xyz-4.png | |
2019-11-02 11:29 | ale | File Added: xyz-4.png | |
2019-11-02 11:31 | ale | Note Edited: 0046914 | |
2019-11-02 11:37 | ale | File Added: xyz-4.xcf | |
2019-11-02 11:37 | ale | Note Added: 0046916 | |
2019-11-02 12:22 | PeterBenedek | File Added: xyz_modified.jpg | |
2019-11-02 12:22 | PeterBenedek | File Added: xyz-4_modified_PeterB.xcf | |
2019-11-02 12:22 | PeterBenedek | File Added: Basepoint.jpg | |
2019-11-02 12:22 | PeterBenedek | Note Added: 0046917 | |
2019-11-02 13:00 | PeterBenedek | File Added: xyz_PeterB.jpg | |
2019-11-02 13:00 | PeterBenedek | Note Added: 0046919 | |
2019-11-02 13:24 | ale | Note Added: 0046923 | |
2019-11-02 14:20 | PeterBenedek | File Added: xyz_02_PeterB.jpg | |
2019-11-02 14:20 | PeterBenedek | File Added: alignment.gif | |
2019-11-02 14:20 | PeterBenedek | Note Added: 0046924 | |
2019-11-02 14:26 | PeterBenedek | File Deleted: xyz_02_PeterB.jpg | |
2019-11-02 14:26 | PeterBenedek | File Added: xyz_PeterB-2.jpg | |
2019-11-02 16:13 | ale | Note Added: 0046927 | |
2019-11-02 17:38 | PeterBenedek | File Deleted: xyz_modified.jpg | |
2019-11-02 17:49 | PeterBenedek | Note Added: 0046929 | |
2019-11-02 18:51 | PeterBenedek | File Added: XYZ_compromise.jpg | |
2019-11-02 18:51 | PeterBenedek | Note Added: 0046930 | |
2019-11-02 19:02 | PeterBenedek | File Deleted: XYZ_compromise.jpg | |
2019-11-02 19:05 | PeterBenedek | File Added: XYZ_compromise.jpg | |
2019-11-02 19:05 | PeterBenedek | Note Added: 0046931 | |
2019-11-02 19:30 | ale | File Added: xyz-5.png | |
2019-11-02 19:30 | ale | Note Added: 0046932 | |
2019-11-02 19:42 | ale | Note Added: 0046933 | |
2019-11-02 20:17 | PeterBenedek | Note Added: 0046934 | |
2019-11-03 08:09 | PeterBenedek | File Added: ale_original.jpg | |
2019-11-03 08:09 | PeterBenedek | File Added: peter_request.jpg | |
2019-11-03 08:09 | PeterBenedek | Note Added: 0046938 | |
2019-11-03 08:10 | PeterBenedek | Note Edited: 0046938 | |
2019-11-03 11:40 | ale | Note Added: 0046939 | |
2019-11-03 11:41 | ale | Note Edited: 0046939 | |
2019-11-03 11:43 | ale | File Added: xyz-6.png | |
2019-11-03 11:44 | ale | Note Edited: 0046939 | |
2019-11-03 12:14 | PeterBenedek | File Added: basepoint_flipp_horizontally.jpg | |
2019-11-03 12:14 | PeterBenedek | File Added: basepoint_middle_left_size.jpg | |
2019-11-03 12:14 | PeterBenedek | Note Added: 0046940 | |
2019-11-03 12:47 | ale | Note Added: 0046941 | |
2019-11-03 13:02 | PeterBenedek | File Added: Flip.jpg | |
2019-11-03 13:22 | PeterBenedek | File Deleted: Flip.jpg | |
2019-11-03 13:32 | PeterBenedek | File Added: Flip_buttons.jpg | |
2019-11-03 13:32 | PeterBenedek | Note Added: 0046943 | |
2019-11-03 13:34 | PeterBenedek | Note Edited: 0046943 | |
2019-11-03 14:48 | ale | Note Added: 0046945 | |
2019-11-03 15:26 | PeterBenedek | Note Added: 0046946 | |
2019-11-04 17:16 | ale | File Added: indigo-pp-xyz-peter.diff | |
2019-11-04 17:16 | ale | Note Added: 0046955 | |
2019-11-04 17:17 | ale | Summary | Indigo UI: shrink the size of the XYZ pane => [PATCH] Indigo UI: shrink the size of the XYZ pane |
2019-11-04 17:17 | ale | Patch | No => Yes |
2019-11-04 18:03 | PeterBenedek | Note Added: 0046957 | |
2019-11-04 18:04 | PeterBenedek | Note Edited: 0046957 | |
2019-11-04 18:24 | ale | Note Added: 0046958 | |
2019-11-04 18:24 | ale | Note Edited: 0046958 | |
2019-11-04 18:25 | ale | Note Edited: 0046896 | |
2019-11-04 18:46 | PeterBenedek | Note Added: 0046960 | |
2019-11-05 06:55 | ale | Note Edited: 0046958 | |
2019-11-05 07:41 | ale | Relationship added | related to 0015813 |
2019-11-05 08:34 | PeterBenedek | File Added: Basepoint_left.jpg | |
2019-11-05 08:34 | PeterBenedek | Note Added: 0046968 | |
2019-11-05 08:38 | PeterBenedek | Note Edited: 0046968 | |
2019-11-05 13:49 | ale | Note Added: 0046974 | |
2019-11-05 13:50 | ale | Note Edited: 0046974 | |
2019-11-05 14:06 | ale | Relationship added | related to 0009048 |
2019-11-05 19:17 | bubu | File Added: Scribus, shrink the size of the XYZ pane.svg.png | |
2019-11-05 19:17 | bubu | Note Added: 0046978 | |
2019-11-05 21:35 | ale | Note Added: 0046980 | |
2019-11-06 08:07 | ale | File Added: xyz-bubu-01.png | |
2019-11-06 08:07 | ale | Note Added: 0046986 | |
2019-11-06 08:45 | PeterBenedek | Note Added: 0046988 | |
2019-11-06 08:50 | bubu | Note Added: 0046989 | |
2019-11-06 10:22 | ale | Note Added: 0046991 | |
2019-11-08 09:30 | ale | File Added: xyz-bubu.diff | |
2019-11-08 09:30 | ale | Note Added: 0047034 | |
2019-11-27 07:09 | ranjithsiji | Note Added: 0047150 | |
2019-12-08 21:48 | cbradney | Note Added: 0047218 | |
2019-12-08 22:08 | ale | Note Added: 0047219 | |
2020-01-06 13:54 | jfl | Note Added: 0047319 | |
2020-01-10 10:45 | ale | File Added: indigo-pp-xyz-20200110.png | |
2020-01-10 10:45 | ale | Note Added: 0047329 | |
2020-01-10 10:47 | ale | File Added: indigo-pp-xyz-20200110-switched.png | |
2020-01-10 10:47 | ale | Note Added: 0047330 | |
2020-01-10 13:32 | ale | Note Edited: 0047329 | |
2020-02-07 04:01 | ranjithsiji | Note Added: 0047366 | |
2023-05-23 22:06 | nitramr | Note Added: 0050182 | |
2023-05-23 22:06 | nitramr | File Added: Bildschirmfoto vom 2023-05-23 23-58-02.png | |
2023-05-24 07:24 | ale | Note Added: 0050183 | |
2023-05-24 07:24 | ale | File Added: Bildschirmfoto vom 2023-05-23 23-58-02-order.png | |
2023-05-24 07:27 | ale | Note Edited: 0050183 | |
2023-05-24 10:29 | PeterBenedek | Note Added: 0050184 | |
2023-05-24 10:29 | PeterBenedek | File Added: 01.png | |
2023-05-24 10:29 | PeterBenedek | File Added: 02.png | |
2023-05-24 10:29 | PeterBenedek | File Added: 03.png | |
2023-05-24 10:29 | PeterBenedek | File Added: 04.png | |
2023-05-24 12:27 | nitramr | Note Added: 0050185 | |
2023-05-24 12:27 | nitramr | File Added: Bildschirmfoto 2023-05-24 um 13.45.43.png | |
2023-05-24 12:27 | nitramr | File Added: Bildschirmfoto 2023-05-24 um 13.45.17.png | |
2023-05-24 13:23 | PeterBenedek | Note Added: 0050186 | |
2023-05-24 14:11 | PeterBenedek | Note Added: 0050187 | |
2023-05-24 14:11 | PeterBenedek | File Added: 00.png | |
2023-05-24 18:30 | ale | Note Added: 0050188 | |
2023-05-24 18:31 | ale | Note Edited: 0050188 | |
2023-05-24 18:37 | bubu | Note Added: 0050189 | |
2023-05-27 16:21 | cbradney | Target Version | => 1.7.0 |
2023-11-05 18:48 | nitramr | Note Added: 0050420 | |
2023-11-05 18:48 | nitramr | File Added: Bildschirmfoto vom 2023-11-05 19-24-53.png | |
2023-11-05 18:48 | nitramr | File Added: Bildschirmfoto vom 2023-11-05 19-31-49.png | |
2023-11-05 20:12 | ale | Note Added: 0050422 | |
2023-11-05 22:09 | JLuc | Note Added: 0050423 | |
2023-11-05 23:21 | bubu | Note Added: 0050424 | |
2023-11-05 23:21 | bubu | File Added: image2.png | |
2023-11-08 18:44 | nitramr | Note Added: 0050427 | |
2023-11-08 18:44 | nitramr | File Added: Bildschirmfoto vom 2023-11-08 19-17-57.png | |
2023-11-08 18:44 | nitramr | File Added: Bildschirmfoto vom 2023-11-08 19-28-21.png | |
2023-11-08 18:44 | nitramr | File Added: Bildschirmfoto vom 2023-11-08 19-43-35.png | |
2023-11-08 18:45 | nitramr | Note Edited: 0050427 | |
2023-11-08 22:46 | cbradney | Note Added: 0050428 | |
2023-11-08 22:46 | cbradney | Note Edited: 0050428 | |
2023-11-09 06:32 | ale | Note Added: 0050429 | |
2023-11-09 06:32 | ale | File Added: ui-slim.png | |
2023-11-09 06:33 | ale | Note Edited: 0050429 | |
2023-11-09 07:50 | bubu | Note Added: 0050430 | |
2023-11-09 07:50 | bubu | File Added: comp2.png | |
2024-03-23 22:30 | nitramr | Relationship added | related to 0017180 |
2024-12-23 22:14 | ale | Note Added: 0051777 | |
2024-12-23 22:15 | cbradney | Assigned To | => nitramr |
2024-12-23 22:15 | cbradney | Status | new => resolved |
2024-12-23 22:15 | cbradney | Resolution | open => fixed |
2024-12-23 22:15 | cbradney | Fixed in Version | => 1.7.0.svn |
2024-12-23 23:18 | cbradney | Status | resolved => closed |