Commit e932f7bc authored by Aleksi Suomalainen's avatar Aleksi Suomalainen Committed by GitHub

Merge pull request #75 from neochapay/master

Update search panel
parents 3f5bc9c9 8442ef11
// This file is part of colorful-home, a nice user experience for touchscreens. // This file is part of colorful-home, a nice user experience for touchscreens.
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
...@@ -22,308 +21,184 @@ ...@@ -22,308 +21,184 @@
// Copyright (c) 2011, Tom Swindell <t.swindell@rubyx.co.uk> // Copyright (c) 2011, Tom Swindell <t.swindell@rubyx.co.uk>
// Copyright (c) 2012, Timur Kristóf <venemo@fedoraproject.org> // Copyright (c) 2012, Timur Kristóf <venemo@fedoraproject.org>
// Copyright (c) 2017, Eetu Kahelin // Copyright (c) 2017, Eetu Kahelin
// Copyright (c) 2018, Chupligin Sergey <neochapay@gmail.com>
import QtQuick 2.6 import QtQuick 2.6
import org.nemomobile.lipstick 0.1 import org.nemomobile.lipstick 0.1
import org.nemomobile.configuration 1.0
import QtQuick.Controls.Nemo 1.0 import QtQuick.Controls.Nemo 1.0
import QtQuick.Controls.Styles.Nemo 1.0 import QtQuick.Controls.Styles.Nemo 1.0
import "applauncher"
// App Launcher page // App Launcher page
// the place for browsing installed applications and launching them // the place for browsing installed applications and launching them
Flickable{
GridView { id: appLauncher
id: gridview width: parent.width
width: cellWidth * columns height: desktop.height
cacheBuffer: gridview.contentHeight
property Item reorderItem
property bool onUninstall
property alias deleter: deleter
property var switcher: null property var switcher: null
property string searchString property string searchString
property int minCellSize: Theme.iconSizeLauncher + Theme.iconSizeLauncher/2
property int rows: Math.floor(parent.height / minCellSize)
property int columns: Math.floor(parent.width / minCellSize)
cellWidth: parent.width / columns
cellHeight: Math.round(parent.height / rows)
property int folderIndex: -1
property bool isRootFolder:true
property bool newFolderActive
property bool newFolder: newFolderActive && isRootFolder && folderIndex >= 0
clip: true
onContentYChanged: { ConfigurationValue {
if( contentY < -Theme.itemHeightHuge*2 ) { id: alwaysShowSearch
headerItem.visible = true; key: "/home/glacier/appLauncher/alwaysShowSearch"
timer.running = true; defaultValue: true
}
} }
onSearchStringChanged: timer.restart() /*top search line*/
SearchListView {
Timer{ id: searchListView
id: timer; running: false; interval: 7000; repeat: true width: appLauncher.width
onTriggered: { visible: alwaysShowSearch.value == true
if(searchString.length < 1 ) headerItem.visible = false
Timer{
id: searchListViewTimer;
running: false;
interval: 7000;
repeat: true
onTriggered: {
if(searchString.length < 1 && !alwaysShowSearch.value == true)
{
searchListView.visible = false
}
}
} }
} }
Connections { Connections {
target: headerItem target: lockScreen
onHeightChanged:{ onVisibleChanged: {
if(headerItem.oldHeight < headerItem.height) if(lockscreenVisible()) {
if(!flicking) gridview.contentY = headerItem.y searchListView.cleanup()
headerItem.oldHeight = headerItem.height }
} }
onVisibleChanged:timer.restart()
} }
Connections { Connections {
target: Lipstick.compositor target: Lipstick.compositor
onDisplayOff: { onDisplayOff: {
headerItem.searchField.text = "" searchListView.cleanup()
headerItem.visible = false
} }
onWindowAdded: { onWindowAdded: {
if(window.category=="" && window.title !== "Home"){ if(window.category === "" && window.title !== "Home"){
headerItem.searchField.text = "" searchListView.cleanup()
headerItem.visible = false
} }
} }
onWindowRaised: { onWindowRaised: {
if(window.category=="" && window.title !== "Home"){ if(window.category === "" && window.title !== "Home"){
headerItem.searchField.text = "" searchListView.cleanup()
headerItem.visible = false
} }
} }
} }
Connections {
target: pager
onFlickEnded: {
headerItem.searchField.text = ""
headerItem.visible = false
onSearchStringChanged: searchListViewTimer.restart()
/*app grid*/
GridView {
id: gridview
width: parent.width
height: parent.height-searchListView.height-Theme.itemSpacingHuge
visible: searchString.length === 0
cacheBuffer: gridview.contentHeight
property Item reorderItem
property bool onUninstall
property int minCellSize: Theme.iconSizeLauncher + Theme.iconSizeLauncher/2
property int rows: Math.floor(parent.height / minCellSize)
property int columns: Math.floor(parent.width / minCellSize)
cellWidth: parent.width / columns
cellHeight: Math.round(parent.height / rows)
anchors{
top: searchListView.bottom
topMargin: Theme.itemSpacingHuge
} }
}
Connections { onContentYChanged: {
target: lockScreen if( contentY < -Theme.itemHeightHuge*2 && alwaysShowSearch.value == false ) {
onVisibleChanged: { searchListView.visible = true
if(lockscreenVisible()) { searchListViewTimer.running = true
headerItem.searchField.text = ""
headerItem.visible = false
} }
} }
}
header: SearchListView { property int folderIndex: -1
width: gridview.width property bool isRootFolder:true
} property bool newFolderActive
property bool newFolder: newFolderActive && isRootFolder && folderIndex >= 0
footer: Item { clip: true
height: Theme.itemHeightLarge*1.5
}
Item {//Doesn't yet uninstall applications /*onContentYChanged: {
id: deleter if( contentY < -Theme.itemHeightHuge ) {
anchors.top: parent.top headerItem.visible = true;
property alias remove: remove timer.running = true;
property alias uninstall: uninstall
function uninstalling(action, caption) {
state = action
if (action==="remove") {
remove.text = qsTr("Removing") + " " + caption
} else if (action == "uninstall") {
uninstall.text = qsTr("Uninstalling") + " " + caption
} }
}*/
footer: Item {
height: Theme.itemHeightLarge*1.5
} }
states: [ onFolderIndexChanged: if (folderIndex == -1) newFolderActive = false
State {
name: "remove"
PropertyChanges {
target: remove
color1: "#D9ff0000"
color2: "#D9ff0000"
color3: "#D9ff0000"
}
PropertyChanges {
target: uninstall
color1: "#D9ff0000"
color2: "#80ff0000"
color3: "#4Dff0000"
}
PropertyChanges {
target: uninstall
text: qsTr("Uninstall")
}
},
State {
name: "uninstall"
PropertyChanges {
target: uninstall
color1: "#D9ff0000"
color2: "#D9ff0000"
color3: "#D9ff0000"
}
PropertyChanges {
target: remove
color1: "#D9ff0000"
color2: "#80ff0000"
color3: "#4Dff0000"
}
PropertyChanges {
target: remove
text: qsTr("Remove")
}
},
State {
name:"basic"
PropertyChanges {
target: remove
color1: "#D9ff0000"
color2: "#80ff0000"
color3: "#4Dff0000"
}
PropertyChanges {
target: remove
text: qsTr("Remove")
}
PropertyChanges {
target: uninstall
color1: "#D9ff0000"
color2: "#80ff0000"
color3: "#4Dff0000"
}
PropertyChanges {
target: uninstall
text: qsTr("Uninstall")
}
}
]
Rectangle {//WHY? model: LauncherFolderModel{
id: remove id: launcherModel
property color color1: "#D9ff0000" }
property color color2: "#80ff0000"
property color color3: "#4Dff0000"
property alias text: removeLabel.text
anchors.left: parent.left
visible: gridview.onUninstall
height: Theme.itemHeightExtraLarge
width: gridview.width / 2
gradient: Gradient {
GradientStop { position: 0.0; color: remove.color1 }
GradientStop { position: 0.5; color: remove.color2 }
GradientStop { position: 1.0; color: remove.color3 }
}
Row {
width: parent.width
height: parent.height
Image {
id:removeIcon
fillMode: Image.PreserveAspectFit
height: parent.height -Theme.itemSpacingExtraSmall
width: height
anchors.verticalCenter: parent.verticalCenter
source: "image://theme/remove"
visible: deleter.state != "remove"
}
Label { //Using loader that in the future we can also have widgets as delegate
id: removeLabel delegate: Loader {
text: qsTr("Remove") id:loader
height: parent.height width: gridview.cellWidth
width: parent.width - (removeIcon.visible ? removeIcon.width : 0) height: gridview.cellHeight
anchors.verticalCenter: parent.verticalCenter onXChanged: item.x = x
font.pixelSize: Theme.fontSizeSmall onYChanged: item.y = y
elide:Text.ElideRight property QtObject modelData : model
horizontalAlignment:Text.AlignHCenter property int cellIndex: index
verticalAlignment:Text.AlignVCenter sourceComponent: object.type == LauncherModel.Folder ? folder : app
}
}
} }
Rectangle {
id: uninstall Component {
property color color1: "#D9ff0000" id:app
property color color2: "#80ff0000" LauncherItemDelegate {
property color color3: "#4Dff0000" id: launcherItem
property alias text: uninstallLabel.text parent: gridview
anchors.left: remove.right parentItem: gridview
visible: gridview.onUninstall iconCaption.color:Theme.textColor
width: gridview.width / 2 iconCaption.text: modelData.object.title
height: Theme.itemHeightExtraLarge isFolder: modelData.object.type == LauncherModel.Folder
gradient: Gradient { source: modelData.object.iconId == "" ? "/usr/share/lipstick-glacier-home-qt5/qml/theme/default-icon.png" : (modelData.object.iconId.indexOf("/") == 0 ? "file://" : "image://theme/") + modelData.object.iconId
GradientStop { position: 0.0; color: uninstall.color1 } notNemoIcon: isFolder || modelData.object.iconId == "" ? false : modelData.object.iconId.indexOf("harbour") > -1 || modelData.object.iconId.indexOf("apkd_launcher") > -1 ? true : false
GradientStop { position: 0.5; color: uninstall.color2 } folderModel:launcherModel
GradientStop { position: 1.0; color: uninstall.color3 }
} }
Row { }
width: parent.width Component {
height: parent.height id:folder
Image { LauncherItemFolder {
id:trashIcon id: launcherfolder
fillMode: Image.PreserveAspectFit parent: gridview
height: parent.height -Theme.itemSpacingExtraSmall iconCaption.color:Theme.textColor
width: height iconCaption.text: modelData.object.title
anchors.verticalCenter: parent.verticalCenter isFolder: modelData.object.type == LauncherModel.Folder
source: "image://theme/trash" folderAppsCount: isFolder && modelData.object ? modelData.object.itemCount : 0
visible: deleter.state != "uninstall" notNemoIcon: isFolder || modelData.object.iconId == "" ? false : modelData.object.iconId.indexOf("harbour") > -1 || modelData.object.iconId.indexOf("apkd_launcher") > -1 ? true : false
} folderModel:launcherModel
Label {
id: uninstallLabel
height: parent.height
width: parent.width - (trashIcon.visible ? trashIcon.width : 0)
anchors.verticalCenter: parent.verticalCenter
text: qsTr("Uninstall")
font.pixelSize: Theme.fontSizeSmall
elide:Text.ElideRight
horizontalAlignment:Text.AlignHCenter
verticalAlignment:Text.AlignVCenter
}
} }
} }
} }
onFolderIndexChanged: if (folderIndex == -1) newFolderActive = false Deleter{
id: deleter
model: LauncherFolderModel { id: launcherModel } anchors{
//Using loader that in the future we can also have widgets as delegate bottom: parent.bottom
delegate: Loader {
id:loader
width: cellWidth
height: cellHeight
onXChanged: item.x = x
onYChanged: item.y = y
property QtObject modelData : model
property int cellIndex: index
sourceComponent: object.type == LauncherModel.Folder ? folder : app
}
Component {
id:app
LauncherItemDelegate {
id: launcherItem
parent: gridview
parentItem: gridview
iconCaption.color:Theme.textColor
iconCaption.text: modelData.object.title
isFolder: modelData.object.type == LauncherModel.Folder
source: modelData.object.iconId == "" ? "/usr/share/lipstick-glacier-home-qt5/qml/theme/default-icon.png" : (modelData.object.iconId.indexOf("/") == 0 ? "file://" : "image://theme/") + modelData.object.iconId
notNemoIcon: isFolder || modelData.object.iconId == "" ? false : modelData.object.iconId.indexOf("harbour") > -1 || modelData.object.iconId.indexOf("apkd_launcher") > -1 ? true : false
folderModel:launcherModel
}
}
Component {
id:folder
LauncherItemFolder {
id: launcherfolder
parent: gridview
iconCaption.color:Theme.textColor
iconCaption.text: modelData.object.title
isFolder: modelData.object.type == LauncherModel.Folder
folderAppsCount: isFolder && modelData.object ? modelData.object.itemCount : 0
notNemoIcon: isFolder || modelData.object.iconId == "" ? false : modelData.object.iconId.indexOf("harbour") > -1 || modelData.object.iconId.indexOf("apkd_launcher") > -1 ? true : false
folderModel:launcherModel
} }
state: "uninstall"
} }
} }
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
// //
// Copyright (c) 2012, Timur Kristóf <venemo@fedoraproject.org> // Copyright (c) 2012, Timur Kristóf <venemo@fedoraproject.org>
import QtQuick 2.0 import QtQuick 2.6
Image { Image {
id: closeButton id: closeButton
......
import QtQuick 2.1 import QtQuick 2.6
import QtQuick.Controls 1.0 import QtQuick.Controls 1.0
import QtQuick.Controls.Nemo 1.0 import QtQuick.Controls.Nemo 1.0
import QtQuick.Controls.Styles.Nemo 1.0 import QtQuick.Controls.Styles.Nemo 1.0
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
// Copyright (c) 2011, Tom Swindell <t.swindell@rubyx.co.uk> // Copyright (c) 2011, Tom Swindell <t.swindell@rubyx.co.uk>
// Copyright (c) 2012, Timur Kristóf <venemo@fedoraproject.org> // Copyright (c) 2012, Timur Kristóf <venemo@fedoraproject.org>
import QtQuick 2.1 import QtQuick 2.6
import org.nemomobile.lipstick 0.1 import org.nemomobile.lipstick 0.1
import QtQuick.Controls.Nemo 1.0 import QtQuick.Controls.Nemo 1.0
import QtQuick.Controls.Styles.Nemo 1.0 import QtQuick.Controls.Styles.Nemo 1.0
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
** **
****************************************************************************************/ ****************************************************************************************/
import QtQuick 2.1 import QtQuick 2.6
import QtQuick.Window 2.1 import QtQuick.Window 2.1
import org.nemomobile.lipstick 0.1 import org.nemomobile.lipstick 0.1
......
import QtQuick 2.1 import QtQuick 2.6
import org.nemomobile.devicelock 1.0 import org.nemomobile.devicelock 1.0
import QtQuick.Controls.Nemo 1.0 import QtQuick.Controls.Nemo 1.0
import QtQuick.Controls.Styles.Nemo 1.0 import QtQuick.Controls.Styles.Nemo 1.0
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
** **
****************************************************************************************/ ****************************************************************************************/
import QtQuick 2.1 import QtQuick 2.6
import QtQuick.Controls 1.0 import QtQuick.Controls 1.0
import QtQuick.Controls.Nemo 1.0 import QtQuick.Controls.Nemo 1.0
import QtQuick.Controls.Styles.Nemo 1.0 import QtQuick.Controls.Styles.Nemo 1.0
...@@ -43,6 +43,7 @@ import org.nemomobile.devicelock 1.0 ...@@ -43,6 +43,7 @@ import org.nemomobile.devicelock 1.0
import "scripts/desktop.js" as Desktop import "scripts/desktop.js" as Desktop
Page { Page {
id: desktop
// This is used in the favorites page and in the lock screen // This is used in the favorites page and in the lock screen
WallClock { WallClock {
id: wallClock id: wallClock
...@@ -63,7 +64,7 @@ Page { ...@@ -63,7 +64,7 @@ Page {
key: "/home/glacier/homeScreen/wallpaperImage" key: "/home/glacier/homeScreen/wallpaperImage"
defaultValue: "/usr/share/lipstick-glacier-home-qt5/qml/images/wallpaper-portrait-bubbles.png" defaultValue: "/usr/share/lipstick-glacier-home-qt5/qml/images/wallpaper-portrait-bubbles.png"
} }
id: desktop
property alias lockscreen: lockScreen property alias lockscreen: lockScreen
property alias switcher: switcher property alias switcher: switcher
property int statusBarHeight: statusbar.height property int statusBarHeight: statusbar.height
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
// //
// Copyright (c) 2012, Timur Kristóf <venemo@fedoraproject.org> // Copyright (c) 2012, Timur Kristóf <venemo@fedoraproject.org>
import QtQuick 2.0 import QtQuick 2.6
PathView { PathView {
id: pager id: pager
......
import QtQuick 2.0 import QtQuick 2.6
import QtQuick.Window 2.0 import QtQuick.Window 2.0
import org.nemomobile.lipstick 0.1 import org.nemomobile.lipstick 0.1
import ".." import ".."
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
** **
****************************************************************************************/ ****************************************************************************************/
import QtQuick 2.1 import QtQuick 2.6
import QtQuick.Layouts 1.0 import QtQuick.Layouts 1.0
import QtQuick.Controls.Nemo 1.0 import QtQuick.Controls.Nemo 1.0
import QtQuick.Controls.Styles.Nemo 1.0 import QtQuick.Controls.Styles.Nemo 1.0
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
// Copyright (c) 2011, Tom Swindell <t.swindell@rubyx.co.uk> // Copyright (c) 2011, Tom Swindell <t.swindell@rubyx.co.uk>
// Copyright (c) 2012, Timur Kristóf <venemo@fedoraproject.org> // Copyright (c) 2012, Timur Kristóf <venemo@fedoraproject.org>
import QtQuick 2.0 import QtQuick 2.6
import org.nemomobile.lipstick 0.1 import org.nemomobile.lipstick 0.1
import QtQuick.Controls.Nemo 1.0 import QtQuick.Controls.Nemo 1.0
import QtQuick.Controls.Styles.Nemo 1.0 import QtQuick.Controls.Styles.Nemo 1.0
......
import QtQuick 2.0 import QtQuick 2.6
import QtQuick.Controls.Nemo 1.0 import QtQuick.Controls.Nemo 1.0
Item { Item {
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
** **
****************************************************************************************/ ****************************************************************************************/
import QtQuick 2.1 import QtQuick 2.6
import QtQuick.Controls 1.0 import QtQuick.Controls 1.0
import QtQuick.Controls.Nemo 1.0 import QtQuick.Controls.Nemo 1.0
import QtQuick.Controls.Styles.Nemo 1.0 import QtQuick.Controls.Styles.Nemo 1.0
......
// This file is part of glacier-home, a nice user experience for touchscreens.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// Copyright (c) 2018, Chupligin Sergey <neochapay@gmail.com>
import QtQuick 2.6
import QtQuick.Controls.Nemo 1.0
import QtQuick.Controls.Styles.Nemo 1.0
Item {//Doesn't yet uninstall applications
id: deleter
property alias remove: remove
property alias uninstall: uninstall
function uninstalling(action, caption) {
state = action
if (action==="remove") {
remove.text = qsTr("Removing") + " " + caption
} else if (action == "uninstall") {
uninstall.text = qsTr("Uninstalling") + " " + caption
}
}
states: [
State {
name: "remove"
PropertyChanges {
target: remove
color1: "#D9ff0000"
color2: "#D9ff0000"
color3: "#D9ff0000"
}
PropertyChanges {
target: uninstall
color1: "#D9ff0000"
color2: "#80ff0000"
color3: "#4Dff0000"
}
PropertyChanges {
target: uninstall
text: qsTr("Uninstall")
}
},
State {
name: "uninstall"
PropertyChanges {
target: uninstall
color1: "#D9ff0000"
color2: "#D9ff0000"
color3: "#D9ff0000"
}
PropertyChanges {
target: remove
color1: "#D9ff0000"
color2: "#80ff0000"
color3: "#4Dff0000"
}
PropertyChanges {
target: remove
text: qsTr("Remove")
}
},
State {
name:"basic"
PropertyChanges {
target: remove
color1: "#D9ff0000"
color2: "#80ff0000"
color3: "#4Dff0000"
}
PropertyChanges {
target: remove
text: qsTr("Remove")
}
PropertyChanges {
target: uninstall
color1: "#D9ff0000"
color2: "#80ff0000"
color3: "#4Dff0000"
}
PropertyChanges {
target: uninstall
text: qsTr("Uninstall")
}
}
]
Rectangle {//WHY?
id: remove
property color color1: "#D9ff0000"
property color color2: "#80ff0000"
property color color3: "#4Dff0000"
property alias text: removeLabel.text
anchors.left: parent.left
visible: gridview.onUninstall
height: Theme.itemHeightExtraLarge
width: gridview.width / 2
gradient: Gradient {
GradientStop { position: 0.0; color: remove.color1 }
GradientStop { position: 0.5; color: remove.color2 }
GradientStop { position: 1.0; color: remove.color3 }
}
Row {
width: parent.width
height: parent.height
Image {
id:removeIcon
fillMode: Image.PreserveAspectFit
height: parent.height -Theme.itemSpacingExtraSmall
width: height
anchors.verticalCenter: parent.verticalCenter
source: "image://theme/remove"
visible: deleter.state != "remove"
}
Label {
id: removeLabel
text: qsTr("Remove")
height: parent.height
width: parent.width - (removeIcon.visible ? removeIcon.width : 0)
anchors.verticalCenter: parent.verticalCenter
font.pixelSize: Theme.fontSizeSmall
elide:Text.ElideRight
horizontalAlignment:Text.AlignHCenter
verticalAlignment:Text.AlignVCenter
}
}
}
Rectangle {
id: uninstall
property color color1: "#D9ff0000"
property color color2: "#80ff0000"
property color color3: "#4Dff0000"
property alias text: uninstallLabel.text
anchors.left: remove.right
visible: gridview.onUninstall
width: gridview.width / 2
height: Theme.itemHeightExtraLarge
gradient: Gradient {
GradientStop { position: 0.0; color: uninstall.color1 }
GradientStop { position: 0.5; color: uninstall.color2 }
GradientStop { position: 1.0; color: uninstall.color3 }
}
Row {
width: parent.width
height: parent.height
Image {
id:trashIcon
fillMode: Image.PreserveAspectFit
height: parent.height -Theme.itemSpacingExtraSmall
width: height
anchors.verticalCenter: parent.verticalCenter
source: "image://theme/trash"
visible: deleter.state != "uninstall"
}
Label {
id: uninstallLabel
height: parent.height
width: parent.width - (trashIcon.visible ? trashIcon.width : 0)
anchors.verticalCenter: parent.verticalCenter
text: qsTr("Uninstall")
font.pixelSize: Theme.fontSizeSmall
elide:Text.ElideRight
horizontalAlignment:Text.AlignHCenter
verticalAlignment:Text.AlignVCenter
}
}
}
}
/**************************************************************************************** /****************************************************************************************
** **
** Copyright (c) 2017, Eetu Kahelin ** Copyright (c) 2017, Eetu Kahelin
** Copyright (c) 2018, Chupligin Sergey
** All rights reserved. ** All rights reserved.
** **
** You may use this file under the terms of BSD license as follows: ** You may use this file under the terms of BSD license as follows:
...@@ -29,41 +30,68 @@ ...@@ -29,41 +30,68 @@
** **
****************************************************************************************/ ****************************************************************************************/
import QtQuick 2.6 import QtQuick 2.6
import org.nemomobile.lipstick 0.1
import QtQuick.Controls.Nemo 1.0 import QtQuick.Controls.Nemo 1.0
import QtQuick.Controls.Styles.Nemo 1.0 import QtQuick.Controls.Styles.Nemo 1.0
import org.nemomobile.lipstick 0.1
import org.nemomobile.contacts 1.0 import org.nemomobile.contacts 1.0
Item { Item {
id:rootItem id:rootItem
height: (searchField.text.length > 0 ? listView.height+searchField.height : searchField.height) + (visible ? Theme.itemSpacingHuge + margin.height : 0) height: calculateHeight()
visible: false
anchors.bottomMargin:Theme.itemSpacingHuge anchors.bottomMargin:Theme.itemSpacingHuge
property alias searchField: searchField property alias searchField: searchField
property int oldHeight property int oldHeight
Behavior on height { InverseMouseArea {
enabled:!visible anchors.fill: parent
NumberAnimation{ duration: 300 } onPressed: cleanup()
} }
onVisibleChanged: { function cleanup(){
if( visible){ searchField.focus = false
searchField.focus = true appLauncher.searchString = ""
searchField.forceActiveFocus() searchField.text = ""
} else searchField.focus = false
oldHeight=height if(!alwaysShowSearch.value == true)
{
searchListView.visible = false;
}
} }
Item { function calculateHeight()
id:margin {
height: Theme.itemSpacingSmall if(rootItem.visible){
if(searchField.text.length > 0){
return parent.height
}
return searchRow.height+Theme.itemSpacingHuge
}
else
{
return 0;
}
} }
onVisibleChanged: {
if(alwaysShowSearch.value == false)
{
if(visible){
rootItem.height = calculateHeight()
searchField.focus = true
searchField.forceActiveFocus()
} else {
searchField.focus = false
}
oldHeight=height
}
}
Row { Row {
id:searchRow id:searchRow
anchors { anchors {
top:margin.bottom top: parent.top
left: parent.left left: parent.left
right: parent.right right: parent.right
topMargin: Theme.itemSpacingHuge topMargin: Theme.itemSpacingHuge
...@@ -78,6 +106,15 @@ Item { ...@@ -78,6 +106,15 @@ Item {
height: searchField.height height: searchField.height
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
source: "image://theme/search" source: "image://theme/search"
MouseArea{
id: hideShowMouseArea
anchors.fill: parent
onPressAndHold: {
hideShowRow.visible = true
rootItem.height = rootItem.height+hideShowRow.height
}
}
} }
TextField { TextField {
...@@ -85,25 +122,64 @@ Item { ...@@ -85,25 +122,64 @@ Item {
width:parent.width - searchIcon.width - Theme.itemSpacingMedium width:parent.width - searchIcon.width - Theme.itemSpacingMedium
placeholderText: qsTr("Search") placeholderText: qsTr("Search")
Binding { Binding {
target: gridview target: appLauncher
property: "searchString" property: "searchString"
value: searchField.text.toLowerCase().trim() value: searchField.text.toLowerCase().trim()
} }
onTextChanged: { onTextChanged: {
if(tex.lenght>0) { if(searchField.lenght>0) {
searchField.forceActiveFocus() searchField.forceActiveFocus()
} }
} }
} }
}
Row{
id: hideShowRow
visible: false
width: parent.width-Theme.itemSpacingMedium*2
height: visible ? hideShowButton.height+Theme.itemSpacingMedium : 0
anchors{
top: searchRow.bottom
topMargin: visible ? Theme.itemSpacingMedium : 0
}
Button{
id: hideShowButton
text: alwaysShowSearch.value == true ? qsTr("Hide search panel") : qsTr("Pinup search panel")
width: parent.width
onClicked: {
rootItem.height = rootItem.height-hideShowRow.height
hideShowRow.visible = false
if(alwaysShowSearch.value == true)
{
alwaysShowSearch.value = false
}
else
{
alwaysShowSearch.value = true
}
}
}
InverseMouseArea {
anchors.fill: parent
onPressed: {
rootItem.height = rootItem.height-hideShowRow.height
hideShowRow.visible = false
}
}
} }
ListView { ListView {
id:listView id:listView
clip: true clip: true
width: parent.width width: parent.width
height:contentHeight height:contentHeight
anchors.top: searchRow.bottom anchors{
anchors.topMargin: Theme.itemSpacingSmall top: searchRow.bottom
topMargin: listModel.count > 0 ? Theme.itemSpacingSmall : 0
}
visible: searchString.length>0 visible: searchString.length>0
section.property: 'category' section.property: 'category'
section.delegate: Component{ section.delegate: Component{
...@@ -155,7 +231,7 @@ Item { ...@@ -155,7 +231,7 @@ Item {
} }
Connections { Connections {
target: gridview target: appLauncher
onSearchStringChanged: listView.update() onSearchStringChanged: listView.update()
} }
...@@ -190,15 +266,34 @@ Item { ...@@ -190,15 +266,34 @@ Item {
for (i = 0; i < searchLauncherModel.itemCount; ++i) { for (i = 0; i < searchLauncherModel.itemCount; ++i) {
if (searchLauncherModel.get(i).type === LauncherModel.Folder) { if (searchLauncherModel.get(i).type === LauncherModel.Folder) {
for(var j = 0; j< searchLauncherModel.get(i).itemCount; ++j ) { for(var j = 0; j< searchLauncherModel.get(i).itemCount; ++j ) {
titles.push({'iconTitle':searchLauncherModel.get(i).get(j).title, 'iconSource':searchLauncherModel.get(i).get(j).iconId, 'id':i, 'folderId':j, 'category':qsTr("Application")}) titles.push({
'iconTitle':searchLauncherModel.get(i).get(j).title,
'iconSource':searchLauncherModel.get(i).get(j).iconId,
'id':i,
'folderId':j,
'category':qsTr("Application"),
'extraCaption': qsTr("installed on you device")
})
} }
} else { } else {
titles.push({'iconTitle':searchLauncherModel.get(i).title, 'iconSource':searchLauncherModel.get(i).iconId, 'id':i, 'folderId':-1, 'category':qsTr("Application")}) titles.push({
'iconTitle':searchLauncherModel.get(i).title,
'iconSource':searchLauncherModel.get(i).iconId,
'id':i,
'folderId':-1,
'category':qsTr("Application"),
'extraCaption': qsTr("installed on you device")
})
} }
} }
for (i = 0; i < peopleModel.count; ++i) { for (i = 0; i < peopleModel.count; ++i) {
if(peopleModel.get(i).firstName && peopleModel.get(i).lastName) { if(peopleModel.get(i).firstName && peopleModel.get(i).lastName) {
contacts.push({'title':(peopleModel.get(i).firstName + " " + peopleModel.get(i).lastName), 'iconSource':peopleModel.get(i).avatarUrl.toString(), 'extraCaption':peopleModel.get(i).phoneNumbers, 'category':qsTr("Contact")}) contacts.push({
'title':(peopleModel.get(i).firstName + " " + peopleModel.get(i).lastName),
'iconSource':peopleModel.get(i).avatarUrl.toString(),
'extraCaption':peopleModel.get(i).phoneNumbers,
'category':qsTr("Contact")
})
} }
} }
var filteredTitles = titles.filter(function (icon) { var filteredTitles = titles.filter(function (icon) {
...@@ -236,7 +331,7 @@ Item { ...@@ -236,7 +331,7 @@ Item {
found = existingTitleObject.hasOwnProperty(iconTitle) found = existingTitleObject.hasOwnProperty(iconTitle)
if (!found) { if (!found) {
// for simplicity, just adding to end instead of corresponding position in original list // for simplicity, just adding to end instead of corresponding position in original list
listModel.append({'title':iconTitle, 'iconSource':iconId, 'id':id, 'folderId':folderId, 'category':category}) listModel.append({'title':iconTitle, 'iconSource':iconId, 'id':id, 'folderId':folderId, 'category':category, 'extraCaption': ""})
} }
} }
for (i = 0; i < contacts.length; ++i) { for (i = 0; i < contacts.length; ++i) {
......
...@@ -21,9 +21,8 @@ ...@@ -21,9 +21,8 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
import QtQuick 2.0 import QtQuick 2.6
import org.nemomobile.lipstick 0.1 import org.nemomobile.lipstick 0.1
import org.nemomobile.devicelock 1.0 import org.nemomobile.devicelock 1.0
import "compositor" import "compositor"
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
import QtQuick 2.0 import QtQuick 2.6
import QtQuick.Window 2.0 import QtQuick.Window 2.0
import org.nemomobile.lipstick 0.1 import org.nemomobile.lipstick 0.1
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
import QtQuick 2.0 import QtQuick 2.6
WindowWrapperBase { WindowWrapperBase {
id: wrapper id: wrapper
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
import QtQuick 2.0 import QtQuick 2.6
Item { Item {
id: wrapper id: wrapper
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
import QtQuick 2.1 import QtQuick 2.6
import QtQuick.Window 2.1 import QtQuick.Window 2.1
import org.nemomobile.lipstick 0.1 import org.nemomobile.lipstick 0.1
......
...@@ -46,8 +46,7 @@ qml.files = qml/MainScreen.qml \ ...@@ -46,8 +46,7 @@ qml.files = qml/MainScreen.qml \
qml/GlacierRotation.qml \ qml/GlacierRotation.qml \
qml/DeviceLockUI.qml \ qml/DeviceLockUI.qml \
qml/LauncherItemWrapper.qml \ qml/LauncherItemWrapper.qml \
qml/LauncherItemFolder.qml \ qml/LauncherItemFolder.qml
qml/SearchListView.qml
qmlcompositor.path = /usr/share/lipstick-glacier-home-qt5/qml/compositor qmlcompositor.path = /usr/share/lipstick-glacier-home-qt5/qml/compositor
qmlcompositor.files = qml/compositor/WindowWrapperMystic.qml \ qmlcompositor.files = qml/compositor/WindowWrapperMystic.qml \
...@@ -83,6 +82,10 @@ statusbar.files = qml/statusbar/BatteryPanel.qml\ ...@@ -83,6 +82,10 @@ statusbar.files = qml/statusbar/BatteryPanel.qml\
qml/statusbar/NumButton.qml \ qml/statusbar/NumButton.qml \
qml/statusbar/MediaController.qml qml/statusbar/MediaController.qml
applauncher.path = /usr/share/lipstick-glacier-home-qt5/qml/applauncher
applauncher.files = qml/applauncher/SearchListView.qml \
qml/applauncher/Deleter.qml
settingswallpaperplugin.files = settings-plugins/wallpaper/wallpaper.qml \ settingswallpaperplugin.files = settings-plugins/wallpaper/wallpaper.qml \
settings-plugins/wallpaper/selectImage.qml \ settings-plugins/wallpaper/selectImage.qml \
settings-plugins/wallpaper/wallpaper.svg settings-plugins/wallpaper/wallpaper.svg
...@@ -112,7 +115,8 @@ INSTALLS += styles \ ...@@ -112,7 +115,8 @@ INSTALLS += styles \
statusbar\ statusbar\
settingswallpaperplugin\ settingswallpaperplugin\
settingsnotificationsplugin\ settingsnotificationsplugin\
settingspluginconfig settingspluginconfig \
applauncher
CONFIG += qt link_pkgconfig CONFIG += qt link_pkgconfig
QT += quick compositor QT += quick compositor
...@@ -130,43 +134,17 @@ PKGCONFIG += lipstick-qt5 \ ...@@ -130,43 +134,17 @@ PKGCONFIG += lipstick-qt5 \
nemodevicelock nemodevicelock
OTHER_FILES += qml/*.qml \ OTHER_FILES += qml/*.qml \
qml/MainScreen.qml \ qml/compositor/*.qml \
qml/compositor.qml \
qml/LauncherItemDelegate.qml \
qml/Lockscreen.qml \
qml/LockscreenClock.qml \
qml/AppSwitcher.qml \
qml/AppLauncher.qml \
qml/ToolBarLayoutExample.qml \
qml/SwitcherItem.qml \
qml/CloseButton.qml \
qml/compositor/WindowWrapperMystic.qml \
qml/compositor/WindowWrapperBase.qml \
qml/compositor/WindowWrapperAlpha.qml \
qml/compositor/ScreenGestureArea.qml \
qml/NotificationPreview.qml \
qml/scripts/desktop.js \ qml/scripts/desktop.js \
qml/FeedsPage.qml \ nemovars.conf \
qml/Statusbar.qml \ qml/connectivity/*.qml
qml/StatusbarItem.qml \
qml/WifiPanel.qml \
nemovars.conf \
qml/SimPanel.qml \
qml/NumButton.qml \
qml/USBModeSelector.qml \
qml/VolumeControl.qml \
qml/BatteryPanel.qml \
qml/CommonPanel.qml \
qml/ShutdownScreen.qml \
qml/GlacierRotation.qml
TRANSLATIONS += i18n/glacer-home.ts TRANSLATIONS += i18n/glacer-home.ts
DISTFILES += \ DISTFILES += \
i18n/glacer-home.ts \ i18n/glacer-home.ts \
qml/connectivity/ConnectionSelector.qml \ qml/*/*.qml \
qml/statusbar/BatteryIndicator.qml \ settings-plugins/*/*.qml \
settings-plugins/wallpaper/selectImage.qml \ settings-plugins/*/*.json \
settings-plugins/notifications/notifications.json \ settings-plugins/*/*.svg
settings-plugins/notifications/notifications.svg \
settings-plugins/notifications/notifications.qml
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment