2012-02-28 12:11:22 +01:00
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* * Copyright ( C ) 2011 Marco Martin < mart @ kde . org >
* *
* * Copyright ( C ) 2011 Nokia Corporation and / or its subsidiary ( - ies ) .
* * All rights reserved .
* * Contact: Nokia Corporation ( qt - info @ nokia . com )
* *
* * This file is part of the Qt Components project .
* *
* * $QT_BEGIN_LICENSE : BSD $
* * You may use this file under the terms of the BSD license as follows:
* *
* * " Redistribution and use in source and binary forms , with or without
* * modification , are permitted provided that the following conditions are
* * met:
* * * Redistributions of source code must retain the above copyright
* * notice , this list of conditions and the following disclaimer .
* * * Redistributions in binary form must reproduce the above copyright
* * notice , this list of conditions and the following disclaimer in
* * the documentation and / or other materials provided with the
* * distribution .
* * * Neither the name of Nokia Corporation and its Subsidiary ( - ies ) nor
* * the names of its contributors may be used to endorse or promote
* * products derived from this software without specific prior written
* * permission .
* *
* * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT
* * LIMITED TO , THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* * A PARTICULAR PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT
* * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL ,
* * SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT NOT
* * LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE ,
* * DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY
* * THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* * ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE
* * OF THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE . "
* * $QT_END_LICENSE $
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/ * * D o c u m e n t e d A P I
Inherits:
Item
Imports:
QtQuick 1.0
org . kde . plasma . core
Description:
Provides a top - level window for short - term tasks and brief interaction with the user .
2012-03-01 15:10:48 +01:00
Is intended to be for interaction more complex and bigger in size then Dialog . On the desktop its looks is almost identical to Dialog , on touch interfaces is an almost fullscreen sliding Sheet . It is provided mostly for compatibility with mobile implementations
2012-02-28 12:11:22 +01:00
Properties:
list < Item > content:
A list of items in the dialog ' s content area . You can use any component that is based on Item . For example , you can use ListView , so that the user can select from a list of names .
int status:
Indicates the dialog ' s phase in its life cycle . The values are as follows:
- DialogStatus . Opening - the dialog is opening
- DialogStatus . Open - the dialog is open and visible to the user
- DialogStatus . Closing - the dialog is closing
- DialogStatus . Closed - the dialog is closed and not visible to the user
The dialog ' s initial status is DialogStatus . Closed .
2012-03-01 15:10:48 +01:00
string title:
The title text of this Sheet .
Item acceptButton:
button that when pressed will close the dialog , representing the user accepting it , accepted ( ) will be called
Item rejectButton:
button that when pressed will close the dialog , representing the user rejecting it , rejected ( ) will be called
string acceptButtonText:
Text of the accept button
string rejectButtonText:
Text of the reject button
2012-02-28 12:11:22 +01:00
Item visualParent:
The item that is dimmed when the dialog opens . By default the root parent object is visualParent .
Signals:
accepted ( ) :
This signal is emitted when the user accepts the dialog ' s request or the accept ( ) method is called .
See also rejected ( ) .
clickedOutside ( ) : This signal is emitted when the user taps in the area that is inside the dialog 's visual parent area but outside the dialog' s area . Normally the visual parent is the root object . In that case this signal is emitted if the user taps anywhere outside the dialog ' s area .
See also visualParent .
rejected ( ) :
This signal is emitted when the user rejects the dialog ' s request or the reject ( ) method is called .
See also accepted ( ) .
Methods:
void accept ( ) :
Accepts the dialog ' s request without any user interaction . The method emits the accepted ( ) signal and closes the dialog .
See also reject ( ) .
void close ( ) :
Closes the dialog without any user interaction .
void open ( ) :
Shows the dialog to the user .
void reject ( ) :
Rejects the dialog ' s request without any user interaction . The method emits the rejected ( ) signal and closes the dialog .
See also accept ( ) .
* * /
import QtQuick 1.0
import org . kde . plasma . core 0.1 as PlasmaCore
import "private/AppManager.js" as Utils
import "." 0.1
Item {
id: root
2012-03-01 15:03:45 +01:00
property alias title: titleLabel . text
2012-02-28 12:11:22 +01:00
property alias content: contentItem . children
// property alias visualParent: dialog.visualParent
property int status: DialogStatus . Closed
2012-02-28 14:49:20 +01:00
property alias acceptButtonText: acceptButton . text
property alias rejectButtonText: rejectButton . text
property alias acceptButton: acceptButton
property alias rejectButton: rejectButton
2012-02-28 12:11:22 +01:00
property alias privateTitleHeight: titleBar . height
2012-02-28 14:49:20 +01:00
property alias privateButtonsHeight: buttonsRow . height
2012-02-28 12:11:22 +01:00
signal accepted
signal rejected
signal clickedOutside
function open ( )
{
var pos = dialog . popupPosition ( null , Qt . alignCenter )
dialog . x = pos . x
dialog . y = pos . y
dialog . visible = true
dialog . activateWindow ( )
}
function accept ( )
{
if ( status == DialogStatus . Open ) {
dialog . visible = false
accepted ( )
}
}
function reject ( ) {
if ( status == DialogStatus . Open ) {
dialog . visible = false
rejected ( )
}
}
function close ( ) {
dialog . visible = false
}
visible: false
PlasmaCore . Dialog {
id: dialog
windowFlags: Qt . Dialog
2012-03-01 15:03:45 +01:00
location: 4 //FIXME: replace with BottomEdge when we have an enum reachable from everywhere in core
2012-02-28 12:11:22 +01:00
//onFaderClicked: root.clickedOutside()
property Item rootItem
//state: "Hidden"
visible: false
onVisibleChanged: {
if ( visible ) {
status = DialogStatus . Open
} else {
status = DialogStatus . Closed
}
}
mainItem: Item {
id: mainItem
width: theme . defaultFont . mSize . width * 40
2012-03-01 15:03:45 +01:00
height: Math . max ( titleBar . childrenRect . height + contentItem . childrenRect . height + buttonsRow . childrenRect . height + 8 , theme . defaultFont . mSize . height * 25 )
2012-02-28 12:11:22 +01:00
// Consume all key events that are not processed by children
Keys.onPressed: event . accepted = true
Keys.onReleased: event . accepted = true
2012-03-01 15:03:45 +01:00
PlasmaCore . FrameSvgItem {
2012-02-28 12:11:22 +01:00
id: titleBar
2012-03-01 15:03:45 +01:00
imagePath: "widgets/extender-dragger"
prefix: "root"
anchors.left: parent . left
anchors.right: parent . right
//FIXME: +5 because of Plasma::Dialog margins
height: titleLabel . paintedHeight + margins . top + margins . bottom
Column {
id: titleLayoutHelper // needed to make the text mirror correctly
anchors {
right: parent . right
left: parent . left
top: parent . top
bottom: parent . bottom
leftMargin: parent . margins . left
rightMargin: parent . margins . right
topMargin: parent . margins . top
bottomMargin: parent . margins . bottom
}
Label {
id: titleLabel
elide: Text . ElideRight
height: paintedHeight
font.pointSize: theme . defaultFont . pointSize * 1.1
font.weight: Font . Bold
style: Text . Raised
styleColor: Qt . rgba ( 1 , 1 , 1 , 0.8 )
anchors {
left: parent . left
right: parent . right
}
horizontalAlignment: Text . AlignHCenter
verticalAlignment: Text . AlignVCenter
}
2012-02-28 12:11:22 +01:00
}
}
Item {
id: contentItem
2012-02-28 14:49:20 +01:00
onChildrenRectChanged: mainItem . width = Math . max ( childrenRect . width , buttonsRow . childrenRect . width )
2012-02-28 12:11:22 +01:00
clip: true
anchors {
top: titleBar . bottom
left: parent . left
right: parent . right
2012-02-28 14:49:20 +01:00
bottom: buttonsRow . top
2012-02-28 12:11:22 +01:00
bottomMargin: 8
}
}
2012-02-28 14:49:20 +01:00
Row {
id: buttonsRow
spacing: 8
2012-02-28 12:11:22 +01:00
anchors {
bottom: parent . bottom
2012-02-28 14:49:20 +01:00
horizontalCenter: parent . horizontalCenter
//the bottom margin is disabled but we want it anyways
bottomMargin: theme . defaultFont . mSize . height * 0.6
}
Button {
id: acceptButton
onClicked: accept ( )
}
Button {
id: rejectButton
onClicked: reject ( )
2012-02-28 12:11:22 +01:00
}
}
}
Component.onCompleted: {
rootItem = Utils . rootObject ( )
}
}
}