Guest User

Untitled

a guest
Mar 19th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.72 KB | None | 0 0
  1. import QtQuick 2.0
  2. import QtQuick.Controls 1.4
  3. import QtQuick.Controls.Styles 1.4
  4. import QtQuick.Dialogs 1.2
  5.  
  6. Item {
  7. property var tempDate: new Date();
  8.  
  9. Dialog {
  10. id: dialogCalendar
  11. // Задаём размеры диалогового окна
  12. width: 250
  13. height: 300
  14.  
  15. // Создаем контент диалогового окна
  16. contentItem: Rectangle {
  17. id: dialogRect
  18. color: "#f7f7f7"
  19.  
  20. // Первым идёт кастомный календарь
  21. Calendar {
  22. id: calendar
  23. // Размещаем его в верхней части диалога и растягиваем по ширине
  24. anchors.top: parent.top
  25. anchors.left: parent.left
  26. anchors.right: parent.right
  27. anchors.bottom: row.top
  28.  
  29. // Стилизуем Календарь
  30. style: CalendarStyle {
  31.  
  32. // Стилизуем navigationBar
  33. navigationBar: Rectangle {
  34. /* Он будет состоять из прямоугольника,
  35. * в котором будет располагаться две кнопки и label
  36. * */
  37. height: 48
  38. color: "#f7f7f7"
  39.  
  40. /* Горизонтальный разделитель,
  41. * который отделяет navigationBar от поля с числами
  42. * */
  43. Rectangle {
  44. color: "#d7d7d7"
  45. height: 1
  46. width: parent.width
  47. anchors.bottom: parent.bottom
  48. }
  49.  
  50. // Кнопка промотки месяцев назад
  51. Button {
  52. id: previousMonth
  53. width: parent.height - 8
  54. height: width
  55. anchors.verticalCenter: parent.verticalCenter
  56. anchors.left: parent.left
  57. anchors.leftMargin: 8
  58.  
  59. /* По клику по кнопке вызываем функцию
  60. * календаря, которая отматывает месяц назад
  61. * */
  62. onClicked: control.showPreviousMonth()
  63.  
  64. // Стилизуем кнопку
  65. style: ButtonStyle {
  66. background: Rectangle {
  67. // Окрашиваем фон кнопки
  68. color: "#f7f7f7"
  69. /* И помещаем изображение, у которго будет
  70. * два источника файлов в зависимости от того
  71. * нажата кнопка или нет
  72. */
  73. Image {
  74. source: control.pressed ? "left_arrow_disable.png" : "left_arrow.png"
  75. width: parent.height - 8
  76. height: width
  77. }
  78. }
  79. }
  80. }
  81.  
  82. // Помещаем стилизованный label
  83. Label {
  84. id: dateText
  85. /* Забираем данные из title календаря,
  86. * который в данном случае не будет виден
  87. * и будет заменён данным label
  88. */
  89. text: styleData.title
  90. color: "#34aadc"
  91. elide: Text.ElideRight
  92. horizontalAlignment: Text.AlignHCenter
  93. font.pixelSize: 16
  94. anchors.verticalCenter: parent.verticalCenter
  95. anchors.left: previousMonth.right
  96. anchors.leftMargin: 2
  97. anchors.right: nextMonth.left
  98. anchors.rightMargin: 2
  99. }
  100.  
  101. // Кнопка промотки месяцев вперёд
  102. Button {
  103. id: nextMonth
  104. width: parent.height - 8
  105. height: width
  106. anchors.verticalCenter: parent.verticalCenter
  107. anchors.right: parent.right
  108.  
  109. /* По клику по кнопке вызываем функцию
  110. * календаря, которая отматывает месяц назад
  111. * */
  112. onClicked: control.showNextMonth()
  113.  
  114. // Стилизуем кнопку
  115. style: ButtonStyle {
  116. // Окрашиваем фон кнопки
  117. background: Rectangle {
  118. color: "#f7f7f7"
  119. /* И помещаем изображение, у которго будет
  120. * два источника файлов в зависимости от того
  121. * нажата кнопка или нет
  122. */
  123. Image {
  124. source: control.pressed ? "right_arrow_disable.png" : "right_arrow.png"
  125. width: parent.height - 8
  126. height: width
  127. }
  128. }
  129. }
  130. }
  131. }
  132.  
  133.  
  134. // Стилизуем отображением квадратиков с числами месяца
  135. dayDelegate: Rectangle {
  136. anchors.fill: parent
  137. anchors.margins: styleData.selected ? -1 : 0
  138. // Определяем цвет в зависимости от того, выбрана дата или нет
  139. color: styleData.date !== undefined && styleData.selected ? selectedDateColor : "transparent"
  140.  
  141. // Задаём предопределённые переменные с цветами, доступные только для чтения
  142. readonly property color sameMonthDateTextColor: "#444"
  143. readonly property color selectedDateColor: "#34aadc"
  144. readonly property color selectedDateTextColor: "white"
  145. readonly property color differentMonthDateTextColor: "#bbb"
  146. readonly property color invalidDateColor: "#dddddd"
  147.  
  148. // Помещаем Label для отображения числа
  149. Label {
  150. id: dayDelegateText
  151. text: styleData.date.getDate() // Устанавливаем число в текущий квадрат
  152. anchors.centerIn: parent
  153. horizontalAlignment: Text.AlignRight
  154. font.pixelSize: 10
  155.  
  156. // Установка цвета
  157. color: {
  158. var theColor = invalidDateColor; // Устанавливаем невалидный цвет текста
  159. if (styleData.valid) {
  160. /* Определяем цвет текста в зависимости от того
  161. * относится ли дата к выбранному месяцу или нет
  162. * */
  163. theColor = styleData.visibleMonth ? sameMonthDateTextColor : differentMonthDateTextColor;
  164. if (styleData.selected)
  165. // Перекрашиваем цвет текста, если выбрана данная дата в календаре
  166. theColor = selectedDateTextColor;
  167. }
  168. theColor;
  169. }
  170. }
  171. }
  172. }
  173. }
  174.  
  175. // Делаем панель с кнопками
  176. Row {
  177. id: row
  178. height: 48
  179. anchors.left: parent.left
  180. anchors.right: parent.right
  181. anchors.bottom: parent.bottom
  182.  
  183. // Кнопка для закрытия диалога
  184. Button {
  185. id: dialogButtonCalCancel
  186. anchors.top: parent.top
  187. anchors.bottom: parent.bottom
  188. width: parent.width / 2 - 1
  189.  
  190. style: ButtonStyle {
  191. background: Rectangle {
  192. color: control.pressed ? "#d7d7d7" : "#f7f7f7"
  193. border.width: 0
  194. }
  195.  
  196. label: Text {
  197. text: qsTr("Cancel")
  198. font.pixelSize: 14
  199. color: "#34aadc"
  200. verticalAlignment: Text.AlignVCenter
  201. horizontalAlignment: Text.AlignHCenter
  202. }
  203. }
  204. // По нажатию на кнопку - просто закрываем диалог
  205. onClicked: dialogCalendar.close()
  206. }
  207.  
  208. // Вертикальный разделитель между кнопками
  209. Rectangle {
  210. id: dividerVertical
  211. width: 2
  212. anchors.top: parent.top
  213. anchors.bottom: parent.bottom
  214. color: "#d7d7d7"
  215. }
  216.  
  217. // Кнопка подтверждения выбранной даты
  218. Button {
  219. id: dialogButtonCalOk
  220. anchors.top: parent.top
  221. anchors.bottom: parent.bottom
  222. width: parent.width / 2 - 1
  223.  
  224. style: ButtonStyle {
  225. background: Rectangle {
  226. color: control.pressed ? "#d7d7d7" : "#f7f7f7"
  227. border.width: 0
  228. }
  229.  
  230. label: Text {
  231. text: qsTr("Ok")
  232. font.pixelSize: 14
  233. color: "#34aadc"
  234. verticalAlignment: Text.AlignVCenter
  235. horizontalAlignment: Text.AlignHCenter
  236. }
  237. }
  238.  
  239. /* По клику по кнопке сохраняем выбранную дату во временную переменную
  240. * и помещаем эту дату на кнопку в главном окне,
  241. * после чего закрываем диалог
  242. */
  243. onClicked: {
  244. tempDate = calendar.selectedDate
  245. button.text = Qt.formatDate(tempDate, "dd.MM.yyyy");
  246. dialogCalendar.close();
  247. }
  248. }
  249. }
  250. }
  251.  
  252. /* Данная функция необходима для того, чтобы
  253. * установить дату с кнопки в календарь,
  254. * иначе календарь откроется с текущей датой
  255. */
  256. function show(x){
  257. calendar.selectedDate = x
  258. dialogCalendar.open()
  259. }
  260. }
  261. }
Add Comment
Please, Sign In to add comment