Add Qml web page context menu example
Signed-off-by: Juraj Oravec <jurajoravec@mailo.com>
This commit is contained in:
parent
19bd021dc3
commit
bb26607c5b
60
qml/articles/4.Adding_entry_to_the_web_context_menu.md
Normal file
60
qml/articles/4.Adding_entry_to_the_web_context_menu.md
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# Falkon QML Tutorial - 4. Adding entry to the web context extension menu
|
||||||
|
|
||||||
|
Hello, in this chapter I will show you how to add an entry to the
|
||||||
|
context menu on the webpage.
|
||||||
|
|
||||||
|
In the example I will reuse code from [Tutorial 3](tutorial3_link) and
|
||||||
|
increment the badge counter when menu entry is selected.
|
||||||
|
|
||||||
|
|
||||||
|
## Create entry in context menu
|
||||||
|
|
||||||
|
```qml
|
||||||
|
populateWebViewMenu: function(menu, webHitTestResult) {
|
||||||
|
// Create a menu entry
|
||||||
|
var action = menu.addAction({
|
||||||
|
text: 'Action',
|
||||||
|
icon: 'falkon'
|
||||||
|
})
|
||||||
|
|
||||||
|
// Bind some function to it
|
||||||
|
action.triggered.connect(function() {
|
||||||
|
// Do something
|
||||||
|
})
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Argument: menu
|
||||||
|
Menu to which the action will be added.
|
||||||
|
The submenu can also be created, might be added later. For now just go
|
||||||
|
see for yourself files
|
||||||
|
[qmlmenu.h](qmlmenu_h_link)
|
||||||
|
and for exact implementation also look at
|
||||||
|
[qmlmenu.cpp](qmlmenu_cpp_link)
|
||||||
|
|
||||||
|
### Argument: webHitTestResult
|
||||||
|
Result of a simple test, what is under the mouse?
|
||||||
|
I have use a test for an image in my example, more information can be
|
||||||
|
found in the code in file
|
||||||
|
[qmlwebhittestresult.h](qmlwebhittestresult_link)
|
||||||
|
|
||||||
|
|
||||||
|
## Example
|
||||||
|
The example code will add a button to main toolbar and statusbar. When
|
||||||
|
user invokes a context menu on the webpage at most 2 entries will be
|
||||||
|
added. One will be added always and second one only if the object on
|
||||||
|
which was clicked is an image.
|
||||||
|
|
||||||
|
![Populated context menu](../images/tutorial4/populated_context_menu.png)
|
||||||
|
|
||||||
|
|
||||||
|
### Code
|
||||||
|
The code for this example can be found at
|
||||||
|
[extensions/qml_tutorial_4](../extensions/qml_tutorial_4)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[tutorial3_link]: 3.Adding_a_button_to_the_toolbar.md
|
||||||
|
[qmlwebhittestresult_link]: https://github.com/KDE/falkon/blob/master/src/lib/plugins/qml/api/menus/qmlwebhittestresult.h
|
||||||
|
[qmlmenu_h_link]: https://github.com/KDE/falkon/blob/master/src/lib/plugins/qml/api/menus/qmlmenu.h
|
||||||
|
[qmlmenu_cpp_link]: https://github.com/KDE/falkon/blob/master/src/lib/plugins/qml/api/menus/qmlmenu.cpp
|
68
qml/extensions/qml_tutorial_4/main.qml
Normal file
68
qml/extensions/qml_tutorial_4/main.qml
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
import org.kde.falkon 1.0 as Falkon
|
||||||
|
import QtQuick 2.3
|
||||||
|
|
||||||
|
Falkon.PluginInterface {
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
id: tutorial3Object
|
||||||
|
property int clickCount
|
||||||
|
}
|
||||||
|
|
||||||
|
init: function(state, settingsPath){
|
||||||
|
console.log(i18n('"Tutorial4" plugin loaded'))
|
||||||
|
tutorial3Object.clickCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
testPlugin: function() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
unload: function() {
|
||||||
|
console.log(i18n('"Tutorial4" plugin unloaded'))
|
||||||
|
}
|
||||||
|
|
||||||
|
function buttonClicked() {
|
||||||
|
tutorial3Object.clickCount++;
|
||||||
|
console.log(i18n('"Tutorial4" clickCount increased to ' + tutorial3Object.clickCount))
|
||||||
|
}
|
||||||
|
|
||||||
|
Falkon.BrowserAction {
|
||||||
|
name: 'QML Tutorial 3'
|
||||||
|
identity: 'qml-tutorial-3-id'
|
||||||
|
title: i18n('Qml Tutorial 3')
|
||||||
|
toolTip: i18n('My little button')
|
||||||
|
icon: 'falkon'
|
||||||
|
badgeText: tutorial3Object.clickCount
|
||||||
|
location: Falkon.BrowserAction.NavigationToolBar | Falkon.BrowserAction.StatusBar
|
||||||
|
popup: Rectangle {
|
||||||
|
width: 100;
|
||||||
|
height: 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
populateWebViewMenu: function(menu, webHitTestResult) {
|
||||||
|
var action_always = menu.addAction({
|
||||||
|
text: 'Increment counter by one',
|
||||||
|
icon: 'falkon'
|
||||||
|
})
|
||||||
|
|
||||||
|
action_always.triggered.connect(function() {
|
||||||
|
tutorial3Object.clickCount++;
|
||||||
|
console.log(i18n('"Tutorial4" clickCount increased to ' + tutorial3Object.clickCount))
|
||||||
|
})
|
||||||
|
|
||||||
|
if (webHitTestResult.isImage()) {
|
||||||
|
var action_image = menu.addAction({
|
||||||
|
text: 'Image, increment by two',
|
||||||
|
icon: 'falkon'
|
||||||
|
})
|
||||||
|
|
||||||
|
action_image.triggered.connect(function() {
|
||||||
|
tutorial3Object.clickCount += 2;
|
||||||
|
console.log(i18n('"Tutorial4" Surprise, this is an image with url: ' + webHitTestResult.imageUrl))
|
||||||
|
console.log(i18n('"Tutorial4" clickCount increased to ' + tutorial3Object.clickCount))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
11
qml/extensions/qml_tutorial_4/metadata.desktop
Normal file
11
qml/extensions/qml_tutorial_4/metadata.desktop
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=Tutorial4 QML
|
||||||
|
Comment=Example QML extension with button and context button
|
||||||
|
Icon=
|
||||||
|
Type=Service
|
||||||
|
X-Falkon-Type=Extension/Qml
|
||||||
|
|
||||||
|
X-Falkon-Author=Juraj Oravec
|
||||||
|
X-Falkon-Email=jurajoravec@mailo.com
|
||||||
|
X-Falkon-Version=1.0.0
|
||||||
|
X-Falkon-Settings=false
|
BIN
qml/images/tutorial4/populated_context_menu.png
Normal file
BIN
qml/images/tutorial4/populated_context_menu.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
Loading…
Reference in New Issue
Block a user