Add calendar QML components to the Plugin
This allows us to keep minimal API, since the calendar view and import really belong together. Also makes it a lot easier to provide a separate Calendar Plasmoid.
This commit is contained in:
parent
859e2ce352
commit
19db9c9663
@ -25,5 +25,5 @@ target_link_libraries(calendarplugin
|
|||||||
)
|
)
|
||||||
|
|
||||||
install(TARGETS calendarplugin DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/calendar)
|
install(TARGETS calendarplugin DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/calendar)
|
||||||
install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/calendar)
|
install(DIRECTORY qml/ DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/calendar)
|
||||||
|
|
||||||
|
98
src/declarativeimports/calendar/qml/CalendarToolbar.qml
Normal file
98
src/declarativeimports/calendar/qml/CalendarToolbar.qml
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013 Heena Mahour <heena393@gmail.com>
|
||||||
|
* Copyright 2013 Sebastian Kügler <sebas@kde.org>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
import QtQuick 2.0
|
||||||
|
import org.kde.plasma.calendar 2.0
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.plasma.components 2.0 as Components
|
||||||
|
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||||||
|
|
||||||
|
Row {
|
||||||
|
id: calendarOperations
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
top: parent.top
|
||||||
|
right: parent.right
|
||||||
|
}
|
||||||
|
spacing: 4
|
||||||
|
|
||||||
|
Components.ToolButton {
|
||||||
|
id: monthright
|
||||||
|
flat: true;
|
||||||
|
text: "<";
|
||||||
|
width: height;
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.rightMargin: 20
|
||||||
|
onClicked: {
|
||||||
|
monthCalendar.previousMonth()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Components.ToolButton {
|
||||||
|
id: month
|
||||||
|
anchors.left: monthright.right
|
||||||
|
anchors.right: monthYear.left
|
||||||
|
anchors.leftMargin: 20
|
||||||
|
Loader {
|
||||||
|
id: menuLoader
|
||||||
|
}
|
||||||
|
onClicked: {
|
||||||
|
if (menuLoader.source == "") {
|
||||||
|
menuLoader.source = "MonthMenu.qml"
|
||||||
|
} else {
|
||||||
|
//menuLoader.source = ""
|
||||||
|
}
|
||||||
|
menuLoader.item.open(0, height);
|
||||||
|
}
|
||||||
|
text: monthCalendar.monthName
|
||||||
|
}
|
||||||
|
|
||||||
|
Components.ToolButton {
|
||||||
|
id: monthYear
|
||||||
|
text: monthCalendar.year
|
||||||
|
anchors.leftMargin: 20
|
||||||
|
anchors.left: month.right
|
||||||
|
Components.ToolButton {
|
||||||
|
id: increase
|
||||||
|
text: "^"
|
||||||
|
width: 12
|
||||||
|
height: 12
|
||||||
|
anchors.left: monthYear.right
|
||||||
|
onClicked: monthCalendar.nextYear()
|
||||||
|
}
|
||||||
|
Components.ToolButton {
|
||||||
|
id: decrease
|
||||||
|
text: "v"
|
||||||
|
width: 12
|
||||||
|
height: 12
|
||||||
|
anchors.left: monthYear.right
|
||||||
|
anchors.top: increase.bottom
|
||||||
|
onClicked: monthCalendar.previousYear()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Components.ToolButton {
|
||||||
|
id: previous
|
||||||
|
flat: true;
|
||||||
|
text: ">";
|
||||||
|
width: height;
|
||||||
|
anchors.right: parent.right
|
||||||
|
onClicked: {
|
||||||
|
monthCalendar.nextMonth()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
52
src/declarativeimports/calendar/qml/DayDelegate.qml
Normal file
52
src/declarativeimports/calendar/qml/DayDelegate.qml
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013 Heena Mahour <heena393@gmail.com>
|
||||||
|
* Copyright 2013 Sebastian Kügler <sebas@kde.org>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
import QtQuick 2.0
|
||||||
|
import org.kde.plasma.calendar 2.0
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.plasma.components 2.0 as Components
|
||||||
|
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||||||
|
|
||||||
|
|
||||||
|
DayStyle {
|
||||||
|
id: myRectangle
|
||||||
|
width: cellWidth
|
||||||
|
height: cellHeight
|
||||||
|
|
||||||
|
Components.Label {
|
||||||
|
id: label
|
||||||
|
anchors.centerIn: parent
|
||||||
|
//anchors.topMargin: 10
|
||||||
|
font.pixelSize: Math.max(theme.defaultFont.pixelSize, cellHeight / 3)
|
||||||
|
text: dayNumber
|
||||||
|
z: 99
|
||||||
|
font.bold: (containsEventItems)||(containsTodoItems) ? true: false
|
||||||
|
opacity: (isPreviousMonth || isNextMonth) ? 0.5: 1.0
|
||||||
|
}
|
||||||
|
MouseArea {
|
||||||
|
id: dateMouse
|
||||||
|
anchors.fill: parent
|
||||||
|
z: label.z + 1
|
||||||
|
hoverEnabled: true
|
||||||
|
onClicked: {
|
||||||
|
var rowNumber = Math.floor ( index / 7) ;
|
||||||
|
week = 1+monthCalendar.weeksModel[rowNumber];
|
||||||
|
date = dayNumber + "/" + monthNumber + "/" + yearNumber
|
||||||
|
calendarDays.selectedItem = myRectangle
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
120
src/declarativeimports/calendar/qml/DayStyle.qml
Normal file
120
src/declarativeimports/calendar/qml/DayStyle.qml
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013 Heena Mahour <heena393@gmail.com>
|
||||||
|
* Copyright 2013 Sebastian Kügler <sebas@kde.org>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
import QtQuick 2.0
|
||||||
|
import org.kde.plasma.calendar 2.0
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.plasma.components 2.0 as Components
|
||||||
|
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||||||
|
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: dayStyle
|
||||||
|
|
||||||
|
//property int borderWidth: root.borderWidth`
|
||||||
|
property real borderOpacity: 0.2
|
||||||
|
|
||||||
|
property bool showtop: false
|
||||||
|
property bool showright: true
|
||||||
|
property bool showleft: false
|
||||||
|
property bool showbottom: true
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: todayRect
|
||||||
|
x: 0
|
||||||
|
y: 0
|
||||||
|
z: -1
|
||||||
|
width: parent.width - (borderWidth)
|
||||||
|
height: parent.height - (borderWidth)
|
||||||
|
// anchors.fill: parent
|
||||||
|
opacity: calendarDays.selectedItem == dayStyle ? 0.8 : 0
|
||||||
|
Behavior on opacity { NumberAnimation {} }
|
||||||
|
color: theme.highlightColor
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: highlightDate
|
||||||
|
anchors {
|
||||||
|
fill: todayRect
|
||||||
|
}
|
||||||
|
opacity: dateMouse.containsMouse ? 0.3 : 0
|
||||||
|
//visible: dateMouse.containsMouse
|
||||||
|
Behavior on opacity { NumberAnimation {} }
|
||||||
|
color: theme.viewBackgroundColor
|
||||||
|
border.color: isToday(dayNumber+"/"+monthNumber+"/"+yearNumber) ? theme.highlightColor : "transparent"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rectangle {
|
||||||
|
// id: frameTop
|
||||||
|
// height: borderWidth
|
||||||
|
// color: theme.textColor
|
||||||
|
// opacity: borderOpacity
|
||||||
|
// visible: showtop
|
||||||
|
//
|
||||||
|
// anchors {
|
||||||
|
// top: parent.top
|
||||||
|
// left: parent.left
|
||||||
|
// right: parent.right
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: frameRight
|
||||||
|
width: borderWidth
|
||||||
|
color: theme.textColor
|
||||||
|
opacity: borderOpacity
|
||||||
|
visible: showright
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
top: parent.top
|
||||||
|
bottom: parent.bottom
|
||||||
|
right: parent.right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: frameBottom
|
||||||
|
height: borderWidth
|
||||||
|
color: theme.textColor
|
||||||
|
opacity: borderOpacity
|
||||||
|
visible: showbottom
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
bottom: parent.bottom
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rectangle {
|
||||||
|
// id: frameLeft
|
||||||
|
// width: borderWidth
|
||||||
|
// color: theme.textColor
|
||||||
|
// opacity: borderOpacity
|
||||||
|
// visible: showleft
|
||||||
|
//
|
||||||
|
// anchors {
|
||||||
|
// top: parent.top
|
||||||
|
// left: parent.left
|
||||||
|
// bottom: parent.bottom
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
123
src/declarativeimports/calendar/qml/DaysCalendar.qml
Normal file
123
src/declarativeimports/calendar/qml/DaysCalendar.qml
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013 Heena Mahour <heena393@gmail.com>
|
||||||
|
* Copyright 2013 Sebastian Kügler <sebas@kde.org>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
import QtQuick 2.0
|
||||||
|
import org.kde.plasma.calendar 2.0
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.plasma.components 2.0 as Components
|
||||||
|
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||||||
|
Item {
|
||||||
|
property real borderOpacity: 0.2
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: frameTop
|
||||||
|
height: borderWidth
|
||||||
|
width: root.columns * root.cellWidth
|
||||||
|
color: theme.textColor
|
||||||
|
opacity: borderOpacity
|
||||||
|
// visible: showtop
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
top: parent.top
|
||||||
|
left: calendarDays.left
|
||||||
|
//right: calendarDays.right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: frameLeft
|
||||||
|
width: borderWidth
|
||||||
|
height: root.cellHeight * root.columns
|
||||||
|
color: theme.textColor
|
||||||
|
opacity: borderOpacity
|
||||||
|
// visible: showtop
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
right: calendarDays.left
|
||||||
|
top: calendarDays.top
|
||||||
|
//bottom: calendarDays.bottom
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: frameRight
|
||||||
|
width: borderWidth
|
||||||
|
height: root.cellHeight
|
||||||
|
color: theme.textColor
|
||||||
|
opacity: borderOpacity
|
||||||
|
// visible: showtop
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
right: frameTop.right
|
||||||
|
top: calendarDays.top
|
||||||
|
//bottom: calendarDays.bottom
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: frameSecond
|
||||||
|
height: borderWidth
|
||||||
|
color: theme.textColor
|
||||||
|
opacity: borderOpacity
|
||||||
|
// // visible: /*showtop*/
|
||||||
|
y: cellHeight - borderWidth
|
||||||
|
anchors {
|
||||||
|
//top: parent.top
|
||||||
|
left: calendarDays.left
|
||||||
|
right: frameTop.right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Grid {
|
||||||
|
id: calendarDays
|
||||||
|
anchors.fill: parent
|
||||||
|
columns: monthCalendar.days
|
||||||
|
rows: 1 + monthCalendar.weeks
|
||||||
|
spacing: 0
|
||||||
|
property Item selectedItem
|
||||||
|
property bool containsEventItems: false // FIXME
|
||||||
|
property bool containsTodoItems: false // FIXME
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
id: days
|
||||||
|
model: monthCalendar.days
|
||||||
|
Item {
|
||||||
|
width: cellWidth
|
||||||
|
height: cellHeight
|
||||||
|
Components.Label {
|
||||||
|
text: Qt.formatDate(new Date(showDate.getFullYear(), showDate.getMonth(), index - firstDay +1), "ddd");
|
||||||
|
font.pixelSize: Math.max(theme.smallestFont.pixelSize, root.cellHeight / 6)
|
||||||
|
//font: theme.smallestFont
|
||||||
|
opacity: 0.2
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
verticalAlignment: Text.AlignBottom
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.bottomMargin: borderWidth * 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
id: repeater
|
||||||
|
model: monthCalendar.daysModel
|
||||||
|
|
||||||
|
DayDelegate {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
82
src/declarativeimports/calendar/qml/MonthMenu.qml
Normal file
82
src/declarativeimports/calendar/qml/MonthMenu.qml
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013 Heena Mahour <heena393@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import QtQuick 2.0
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.plasma.components 2.0 as PlasmaComponents
|
||||||
|
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||||||
|
import org.kde.qtextracomponents 2.0 as QtExtras
|
||||||
|
|
||||||
|
PlasmaComponents.Menu {
|
||||||
|
id: testMenu
|
||||||
|
|
||||||
|
PlasmaComponents.MenuItem {
|
||||||
|
text: "January"
|
||||||
|
onClicked: monthCalendar.startDate="2013-01-01"
|
||||||
|
}
|
||||||
|
|
||||||
|
PlasmaComponents.MenuItem {
|
||||||
|
text: "February"
|
||||||
|
onClicked: monthCalendar.startDate="2013-02-01"
|
||||||
|
}
|
||||||
|
|
||||||
|
PlasmaComponents.MenuItem {
|
||||||
|
text: "March"
|
||||||
|
onClicked: monthCalendar.startDate="2013-03-01"
|
||||||
|
}
|
||||||
|
PlasmaComponents.MenuItem {
|
||||||
|
text: "April"
|
||||||
|
onClicked: monthCalendar.startDate="2013-04-01"
|
||||||
|
}
|
||||||
|
PlasmaComponents.MenuItem {
|
||||||
|
text: "May"
|
||||||
|
onClicked: monthCalendar.startDate="2013-05-01"
|
||||||
|
}
|
||||||
|
PlasmaComponents.MenuItem {
|
||||||
|
text: "June"
|
||||||
|
onClicked: monthCalendar.startDate="2013-06-01"
|
||||||
|
}
|
||||||
|
PlasmaComponents.MenuItem {
|
||||||
|
text: "July"
|
||||||
|
onClicked: monthCalendar.startDate="2013-07-01"
|
||||||
|
}
|
||||||
|
PlasmaComponents.MenuItem {
|
||||||
|
text: "August"
|
||||||
|
onClicked: monthCalendar.startDate="2013-08-01"
|
||||||
|
}
|
||||||
|
PlasmaComponents.MenuItem {
|
||||||
|
text: "September"
|
||||||
|
onClicked: monthCalendar.startDate="2013-09-01"
|
||||||
|
}
|
||||||
|
PlasmaComponents.MenuItem {
|
||||||
|
text: "October"
|
||||||
|
onClicked: monthCalendar.startDate="2013-10-01"
|
||||||
|
}
|
||||||
|
PlasmaComponents.MenuItem {
|
||||||
|
text: "November"
|
||||||
|
onClicked: monthCalendar.startDate="2013-11-01"
|
||||||
|
}
|
||||||
|
PlasmaComponents.MenuItem {
|
||||||
|
text: "December"
|
||||||
|
onClicked: monthCalendar.startDate="2013-12-01"
|
||||||
|
}
|
||||||
|
Component.onCompleted:{
|
||||||
|
print("TestMenu.qml served .. opening");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
189
src/declarativeimports/calendar/qml/MonthView.qml
Normal file
189
src/declarativeimports/calendar/qml/MonthView.qml
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013 Heena Mahour <heena393@gmail.com>
|
||||||
|
* Copyright 2013 Sebastian Kügler <sebas@kde.org>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
import QtQuick 2.0
|
||||||
|
import org.kde.plasma.calendar 2.0
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.plasma.components 2.0 as Components
|
||||||
|
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
width: parent.width
|
||||||
|
height: parent.height
|
||||||
|
property string date ;
|
||||||
|
property date showDate: new Date()
|
||||||
|
|
||||||
|
property alias calendarGrid: calendarGrid
|
||||||
|
property int mWidth: theme.mSize(theme.defaultFont).width
|
||||||
|
property int mHeight: theme.mSize(theme.defaultFont).height
|
||||||
|
property int borderWidth: 1
|
||||||
|
|
||||||
|
property int columns: monthCalendar.days
|
||||||
|
property int rows: 1 + monthCalendar.weeks
|
||||||
|
|
||||||
|
property int cellWidth: prefCellWidth()
|
||||||
|
property int cellHeight: prefCellHeight()
|
||||||
|
|
||||||
|
property int miniumWidth: implicitWidth
|
||||||
|
property int miniumHeight: implicitHeight
|
||||||
|
property int implicitWidth: theme.mSize(theme.defaultFont).width * 6 * 8
|
||||||
|
property int implicitHeight: theme.mSize(theme.defaultFont).height * 2 * 9
|
||||||
|
|
||||||
|
//property int cellFontPixelSize: theme.defaultFont.pixelSize
|
||||||
|
|
||||||
|
property Item selectedItem
|
||||||
|
property int week;
|
||||||
|
property int firstDay: new Date(showDate.getFullYear(), showDate.getMonth(), 1).getDay()
|
||||||
|
|
||||||
|
anchors.margins: theme.largeSpacing * 3
|
||||||
|
|
||||||
|
function prefCellWidth() {
|
||||||
|
return Math.min(
|
||||||
|
Math.max(
|
||||||
|
mWidth * 4,
|
||||||
|
calendarGrid.width / (root.columns)
|
||||||
|
),
|
||||||
|
mWidth * 100
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
function prefCellHeight() {
|
||||||
|
return Math.min(
|
||||||
|
Math.max(
|
||||||
|
mHeight * 1.5,
|
||||||
|
calendarGrid.height / (root.rows + 1)
|
||||||
|
),
|
||||||
|
mHeight * 40
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
function isToday(date) {
|
||||||
|
if (date == Qt.formatDateTime(new Date(), "d/M/yyyy")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isTodayMonth() {
|
||||||
|
return Qt.formatDateTime(new Date(), "yyyy-MM-dd")
|
||||||
|
}
|
||||||
|
|
||||||
|
function eventDate(yearNumber,monthNumber,dayNumber) {
|
||||||
|
var d = new Date(yearNumber, monthNumber-1, dayNumber);
|
||||||
|
return Qt.formatDate(d, "dddd dd MMM yyyy");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Rectangle { anchors.fill: monthCalendar; color: "green"; opacity: 0.3 }
|
||||||
|
|
||||||
|
PlasmaExtras.Heading {
|
||||||
|
id: monthHeading
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
top: parent.top
|
||||||
|
left: calendarGrid.left
|
||||||
|
right: parent.right
|
||||||
|
leftMargin: -borderWidth
|
||||||
|
}
|
||||||
|
|
||||||
|
level: 1
|
||||||
|
opacity: 0.8
|
||||||
|
text: monthCalendar.monthName
|
||||||
|
}
|
||||||
|
|
||||||
|
Calendar {
|
||||||
|
id: monthCalendar
|
||||||
|
|
||||||
|
days: 7
|
||||||
|
weeks: 6
|
||||||
|
startDay: 1
|
||||||
|
startDate: "2013-08-01"
|
||||||
|
onStartDateChanged: {
|
||||||
|
//monthHeading.text = monthName
|
||||||
|
month.text = monthName
|
||||||
|
monthYear.text = year
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CalendarToolbar {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
//Rectangle { anchors.fill: calendarGrid; color: "orange"; opacity: 0.3; }
|
||||||
|
DaysCalendar {
|
||||||
|
id: calendarGrid
|
||||||
|
anchors {
|
||||||
|
top: monthHeading.bottom
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
bottom: calendarToolbar.top
|
||||||
|
margins: theme.largeSpacing
|
||||||
|
bottomMargin: theme.largeSpacing * 3
|
||||||
|
topMargin: - (theme.largeSpacing / 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: calendarToolbar
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
bottomMargin: 20
|
||||||
|
bottom: parent.bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
Components.ToolButton {
|
||||||
|
id: currentDate
|
||||||
|
iconSource: "view-pim-calendar"
|
||||||
|
width: height
|
||||||
|
onClicked: {
|
||||||
|
monthCalendar.startDate = isTodayMonth();
|
||||||
|
}
|
||||||
|
PlasmaCore.ToolTip {
|
||||||
|
id: tool
|
||||||
|
target: currentDate
|
||||||
|
mainText: "Select Today"
|
||||||
|
}
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Components.TextField {
|
||||||
|
id: dateField
|
||||||
|
text: date == "" ? Qt.formatDateTime ( new Date(), "d/M/yyyy" ): date
|
||||||
|
width: calendarOperations.width/3
|
||||||
|
anchors {
|
||||||
|
leftMargin: 20
|
||||||
|
rightMargin: 30
|
||||||
|
left: currentDate.right
|
||||||
|
right: weekField.left
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Components.TextField {
|
||||||
|
id: weekField
|
||||||
|
text: week == 0 ? monthCalendar.currentWeek(): week
|
||||||
|
width: calendarOperations.width/10
|
||||||
|
anchors {
|
||||||
|
right: parent.right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
4
src/declarativeimports/calendar/qml/qmldir
Normal file
4
src/declarativeimports/calendar/qml/qmldir
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
module org.kde.plasma.calendar
|
||||||
|
plugin calendarplugin
|
||||||
|
|
||||||
|
MonthView 2.0 MonthView.qml
|
Loading…
Reference in New Issue
Block a user