[PlasmaComponents Menu] Add maximumWidth property
This allows to limit the maximum width of a menu. It can be useful for instance in task manager where long file names for recent documents will result in gigantic menus. The property has a RESET method (which is called if you assign "undefined") which will set it back to QWIDGETSIZE_MAX to remove the size restriction. Differential Revision: https://phabricator.kde.org/D4257
This commit is contained in:
parent
c65edd7167
commit
ceeb57d17f
@ -153,6 +153,25 @@ void QMenuProxy::setMinimumWidth(int width)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int QMenuProxy::maximumWidth() const
|
||||||
|
{
|
||||||
|
return m_menu->maximumWidth();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QMenuProxy::setMaximumWidth(int width)
|
||||||
|
{
|
||||||
|
if (m_menu->maximumWidth() != width) {
|
||||||
|
m_menu->setMaximumWidth(width);
|
||||||
|
|
||||||
|
emit maximumWidthChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QMenuProxy::resetMaximumWidth()
|
||||||
|
{
|
||||||
|
setMaximumWidth(QWIDGETSIZE_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
bool QMenuProxy::event(QEvent *event)
|
bool QMenuProxy::event(QEvent *event)
|
||||||
{
|
{
|
||||||
switch (event->type()) {
|
switch (event->type()) {
|
||||||
|
@ -93,6 +93,13 @@ class QMenuProxy : public QObject
|
|||||||
*/
|
*/
|
||||||
Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth NOTIFY minimumWidthChanged)
|
Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth NOTIFY minimumWidthChanged)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A maximum width for the menu.
|
||||||
|
*
|
||||||
|
* @since 5.31
|
||||||
|
*/
|
||||||
|
Q_PROPERTY(int maximumWidth READ maximumWidth WRITE setMaximumWidth RESET resetMaximumWidth NOTIFY maximumWidthChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QMenuProxy(QObject *parent = 0);
|
QMenuProxy(QObject *parent = 0);
|
||||||
~QMenuProxy();
|
~QMenuProxy();
|
||||||
@ -114,6 +121,10 @@ public:
|
|||||||
int minimumWidth() const;
|
int minimumWidth() const;
|
||||||
void setMinimumWidth(int width);
|
void setMinimumWidth(int width);
|
||||||
|
|
||||||
|
int maximumWidth() const;
|
||||||
|
void setMaximumWidth(int maximumWidth);
|
||||||
|
void resetMaximumWidth();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This opens the menu at position x,y on the given visualParent. By default x and y are set to 0
|
* This opens the menu at position x,y on the given visualParent. By default x and y are set to 0
|
||||||
*/
|
*/
|
||||||
@ -163,6 +174,7 @@ Q_SIGNALS:
|
|||||||
void transientParentChanged();
|
void transientParentChanged();
|
||||||
void placementChanged();
|
void placementChanged();
|
||||||
void minimumWidthChanged();
|
void minimumWidthChanged();
|
||||||
|
void maximumWidthChanged();
|
||||||
void triggered(QMenuItem *item);
|
void triggered(QMenuItem *item);
|
||||||
void triggeredIndex(int index);
|
void triggeredIndex(int index);
|
||||||
|
|
||||||
|
@ -68,5 +68,36 @@ Rectangle {
|
|||||||
PlasmaComponents.MenuItem { text: "Another item" }
|
PlasmaComponents.MenuItem { text: "Another item" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Row {
|
||||||
|
spacing: units.smallSpacing
|
||||||
|
|
||||||
|
PlasmaComponents.Button {
|
||||||
|
id: minMaxButton
|
||||||
|
text: "Fixed minimum and maximum width"
|
||||||
|
onClicked: minMaxMenu.open(0, height)
|
||||||
|
|
||||||
|
PlasmaComponents.Menu {
|
||||||
|
id: minMaxMenu
|
||||||
|
|
||||||
|
minimumWidth: minMaxButton.width
|
||||||
|
maximumWidth: limitMenuMaxWidth.checked ? minMaxButton.width : undefined // has a RESET property
|
||||||
|
|
||||||
|
PlasmaComponents.MenuItem { text: "Hello" }
|
||||||
|
PlasmaComponents.MenuItem { text: "This is just a simple" }
|
||||||
|
PlasmaComponents.MenuItem { text: "Menu" }
|
||||||
|
PlasmaComponents.MenuItem { text: "with some very very long text in one item that will "
|
||||||
|
+ "make the menu super huge if you don't do anything about it" }
|
||||||
|
PlasmaComponents.MenuItem { text: "and other stuff" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PlasmaComponents.CheckBox {
|
||||||
|
id: limitMenuMaxWidth
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
text: "Limit maximum width"
|
||||||
|
checked: true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user