@ -38,183 +38,184 @@ PlasmaComponents.ListItem {
x: - listMargins . left
MouseArea {
anchors.fill: parent
hoverEnabled: true
onClicked: menuItem . itemSelected ( UuidRole )
onEntered: menuListView . currentIndex = index
onExited: menuListView . currentIndex = - 1
enabled: true
onClicked: menuItem . itemSelected ( UuidRole )
onContainsMouseChanged: {
if ( containsMouse ) {
menuListView . currentIndex = index
} else {
menuListView . currentIndex = - 1
}
}
Item {
id: label
height: childrenRect . height
Item {
id: label
height: childrenRect . height
anchors {
left: parent . left
leftMargin: units . gridUnit / 2
right: parent . right
verticalCenter: parent . verticalCenter
}
PlasmaComponents . Label {
anchors {
left: parent . left
leftMargin: units . gridUnit / 2
right: parent . right
verticalCenter: parent . verticalCenter
}
PlasmaComponents . Label {
maximumLineCount: 3
text: DisplayRole . trim ( )
visible: TypeRole == 0 / / T y p e R o l e : 0 : T e x t , 1 : I m a g e , 2 : U r l
elide: Text . ElideRight
wrapMode: Text . Wrap
textFormat: Text . PlainText
}
KQuickControlsAddons . QPixmapItem {
id: previewPixmap
width: parent . width
height: Math . round ( width * ( nativeHeight / nativeWidth ) + units . smallSpacing * 2 )
pixmap: DecorationRole
visible: TypeRole == 1
fillMode: KQuickControlsAddons . QPixmapItem . PreserveAspectFit
}
Item {
id: previewItem
visible: TypeRole == 2
height: visible ? ( units . gridUnit * 4 + units . smallSpacing * 2 ) : 0
width: parent . width
ListView {
id: previewList
model: TypeRole == 2 ? DisplayRole . split ( " " , maximumNumberOfPreviews ) : 0
property int itemWidth: units . gridUnit * 4
property int itemHeight: units . gridUnit * 4
interactive: contentWidth > width
spacing: units . smallSpacing
orientation: Qt . Horizontal
width: ( itemWidth + spacing ) * model . length
anchors {
top: parent . top
left: parent . left
right: parent . right
bottom: parent . bottom
}
maximumLineCount: 3
text: DisplayRole . trim ( )
visible: TypeRole == 0 / / T y p e R o l e : 0 : T e x t , 1 : I m a g e , 2 : U r l
elide: Text . ElideRight
wrapMode: Text . Wrap
textFormat: Text . PlainText
}
KQuickControlsAddons . QPixmapItem {
id: previewPixmap
width: parent . width
height: Math . round ( width * ( nativeHeight / nativeWidth ) + units . smallSpacing * 2 )
pixmap: DecorationRole
visible: TypeRole == 1
fillMode: KQuickControlsAddons . QPixmapItem . PreserveAspectFit
}
Item {
id: previewItem
visible: TypeRole == 2
height: visible ? ( units . gridUnit * 4 + units . smallSpacing * 2 ) : 0
width: parent . width
ListView {
id: previewList
model: TypeRole == 2 ? DisplayRole . split ( " " , maximumNumberOfPreviews ) : 0
property int itemWidth: units . gridUnit * 4
property int itemHeight: units . gridUnit * 4
interactive: contentWidth > width
spacing: units . smallSpacing
orientation: Qt . Horizontal
width: ( itemWidth + spacing ) * model . length
anchors {
top: parent . top
left: parent . left
bottom: parent . bottom
}
delegate: Item {
width: previewList . itemWidth
height: previewList . itemHeight
y: Math . round ( ( parent . height - previewList . itemHeight ) / 2 )
clip: true
delegate: Item {
width: previewList . itemWidth
height: previewList . itemHeight
y: Math . round ( ( parent . height - previewList . itemHeight ) / 2 )
clip: true
KQuickControlsAddons . QPixmapItem {
id: previewPixmap
KQuickControlsAddons . QPixmapItem {
id: previewPixmap
anchors.centerIn: parent
anchors.centerIn: parent
Component.onCompleted: {
function result ( job ) {
if ( ! job . error ) {
pixmap = job . result . preview ;
previewPixmap . width = job . result . previewWidth
previewPixmap . height = job . result . previewHeight
}
Component.onCompleted: {
function result ( job ) {
if ( ! job . error ) {
pixmap = job . result . preview ;
previewPixmap . width = job . result . previewWidth
previewPixmap . height = job . result . previewHeight
}
var service = clipboardSource . serviceForSource ( UuidRole )
var operation = service . operationDescription ( "preview" ) ;
operation . url = modelData ;
/ / W e r e q u e s t a b i g g e r s i z e a n d t h e n c l i p o u t a s q u a r e i n t h e m i d d l e
/ / s o w e g e t u n i f o r m d e l e g a t e s i z e s w i t h o u t d i s t o r t i o n
operation . previewWidth = previewList . itemWidth * 2 ;
operation . previewHeight = previewList . itemHeight * 2 ;
var serviceJob = service . startOperationCall ( operation ) ;
serviceJob . finished . connect ( result ) ;
}
var service = clipboardSource . serviceForSource ( UuidRole )
var operation = service . operationDescription ( "preview" ) ;
operation . url = modelData ;
/ / W e r e q u e s t a b i g g e r s i z e a n d t h e n c l i p o u t a s q u a r e i n t h e m i d d l e
/ / s o w e g e t u n i f o r m d e l e g a t e s i z e s w i t h o u t d i s t o r t i o n
operation . previewWidth = previewList . itemWidth * 2 ;
operation . previewHeight = previewList . itemHeight * 2 ;
var serviceJob = service . startOperationCall ( operation ) ;
serviceJob . finished . connect ( result ) ;
}
Rectangle {
id: overlay
color: theme . textColor
opacity: 0.6
height: units . gridUnit
anchors {
left: parent . left
right: parent . right
bottom: parent . bottom
}
}
Rectangle {
id: overlay
color: theme . textColor
opacity: 0.6
height: units . gridUnit
anchors {
left: parent . lef t
right: parent . right
bottom: parent . bottom
}
PlasmaComponents . Label {
font.pointSize: theme . smallestFont . pointSize
color: theme . backgroundColor
maximumLineCount: 1
anchors {
verticalCenter: overlay . verticalCenter
left: overlay . left
right: overlay . righ t
leftMargin: units . smallSpacing
righ tMargin: units . smallSpacing
}
elide: Text . ElideRight
horizontalAlignment: Text . AlignHCenter
text: {
var u = modelData . split ( "/" ) ;
return decodeURIComponent ( u [ u . length - 1 ] ) ;
}
}
PlasmaComponents . Label {
font.pointSize: theme . smallestFont . pointSize
color: theme . backgroundColor
maximumLineCount: 1
anchors {
verticalCenter: overlay . verticalCenter
left: overlay . lef t
right: overlay . right
lef tMargin: units . smallSpacing
rightMargin: units . smallSpacing
}
elide: Text . ElideRight
horizontalAlignment: Text . AlignHCenter
text: {
var u = modelData . split ( "/" ) ;
return decodeURIComponent ( u [ u . length - 1 ] ) ;
}
}
}
PlasmaComponents . Label {
property int additionalItems: DisplayRole . split ( " " ) . length - maximumNumberOfPreviews
visible: additionalItems > 0
opacity: 0.6
text: i18nc ( "Indicator that there are more urls in the clipboard than previews shown" , "+%1" , additionalItems )
anchors {
left: previewList . right
right: parent . right
bottom: parent . bottom
margins: units . smallSpacing
}
PlasmaComponents . Label {
property int additionalItems: DisplayRole . split ( " " ) . length - maximumNumberOfPreviews
visible: additionalItems > 0
opacity: 0.6
text: i18nc ( "Indicator that there are more urls in the clipboard than previews shown" , "+%1" , additionalItems )
anchors {
left: previewList . right
right: parent . right
bottom: parent . bottom
margins: units . smallSpacing
}
verticalAlignment: Text . AlignBottom
horizontalAlignment: Text . AlignCenter
font.pointSize: theme . smallestFont . pointSize
}
verticalAlignment: Text . AlignBottom
horizontalAlignment: Text . AlignCenter
font.pointSize: theme . smallestFont . pointSize
}
}
}
Row {
id: toolButtonsLayout
anchors {
right: label . right
verticalCenter: parent . verticalCenter
}
visible: menuListView . currentIndex == index
PlasmaComponents . ToolButton {
/ / T O D O : o n l y s h o w f o r i t e m s s u p p o r t i n g a c t i o n s ?
iconSource: "system-run"
flat: false
tooltip: i18n ( "Invoke action" )
onClicked: menuItem . action ( UuidRole )
}
PlasmaComponents . ToolButton {
id: barcodeToolButton
iconSource: "view-barcode"
flat: false
tooltip: i18n ( "Show barcode" )
onClicked: menuItem . barcode ( UuidRole )
}
PlasmaComponents . ToolButton {
iconSource: "document-edit"
enabled: ! clipboardSource . editing
flat: false
visible: TypeRole != 2
tooltip: i18n ( "Edit contents" )
onClicked: menuItem . edit ( UuidRole )
}
PlasmaComponents . ToolButton {
iconSource: "edit-delete"
flat: false
tooltip: i18n ( "Remove from history" )
onClicked: menuItem . remove ( UuidRole )
}
Row {
id: toolButtonsLayout
anchors {
right: label . right
verticalCenter: parent . verticalCenter
}
visible: menuListView . currentIndex == index
PlasmaComponents . ToolButton {
/ / T O D O : o n l y s h o w f o r i t e m s s u p p o r t i n g a c t i o n s ?
iconSource: "system-run"
flat: false
tooltip: i18n ( "Invoke action" )
onClicked: menuItem . action ( UuidRole )
}
PlasmaComponents . ToolButton {
id: barcodeToolButton
iconSource: "view-barcode"
flat: false
tooltip: i18n ( "Show barcode" )
onClicked: menuItem . barcode ( UuidRole )
}
PlasmaComponents . ToolButton {
iconSource: "document-edit"
enabled: ! clipboardSource . editing
flat: false
visible: TypeRole != 2
tooltip: i18n ( "Edit contents" )
onClicked: menuItem . edit ( UuidRole )
}
PlasmaComponents . ToolButton {
iconSource: "edit-delete"
flat: false
tooltip: i18n ( "Remove from history" )
onClicked: menuItem . remove ( UuidRole )
}
}
}