| 1 | /**************************************************************************** |
| 2 | ** |
| 3 | ** Copyright (C) 2020 The Qt Company Ltd. |
| 4 | ** Contact: https://www.qt.io/licensing/ |
| 5 | ** |
| 6 | ** This file is part of the examples of the Qt Toolkit. |
| 7 | ** |
| 8 | ** $QT_BEGIN_LICENSE:BSD$ |
| 9 | ** Commercial License Usage |
| 10 | ** Licensees holding valid commercial Qt licenses may use this file in |
| 11 | ** accordance with the commercial license agreement provided with the |
| 12 | ** Software or, alternatively, in accordance with the terms contained in |
| 13 | ** a written agreement between you and The Qt Company. For licensing terms |
| 14 | ** and conditions see https://www.qt.io/terms-conditions. For further |
| 15 | ** information use the contact form at https://www.qt.io/contact-us. |
| 16 | ** |
| 17 | ** BSD License Usage |
| 18 | ** Alternatively, you may use this file under the terms of the BSD license |
| 19 | ** as follows: |
| 20 | ** |
| 21 | ** "Redistribution and use in source and binary forms, with or without |
| 22 | ** modification, are permitted provided that the following conditions are |
| 23 | ** met: |
| 24 | ** * Redistributions of source code must retain the above copyright |
| 25 | ** notice, this list of conditions and the following disclaimer. |
| 26 | ** * Redistributions in binary form must reproduce the above copyright |
| 27 | ** notice, this list of conditions and the following disclaimer in |
| 28 | ** the documentation and/or other materials provided with the |
| 29 | ** distribution. |
| 30 | ** * Neither the name of The Qt Company Ltd nor the names of its |
| 31 | ** contributors may be used to endorse or promote products derived |
| 32 | ** from this software without specific prior written permission. |
| 33 | ** |
| 34 | ** |
| 35 | ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| 36 | ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 37 | ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| 38 | ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| 39 | ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 40 | ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 41 | ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 42 | ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 43 | ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 44 | ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 45 | ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." |
| 46 | ** |
| 47 | ** $QT_END_LICENSE$ |
| 48 | ** |
| 49 | ****************************************************************************/ |
| 50 | |
| 51 | #include "window.h" |
| 52 | |
| 53 | #include <QCalendarWidget> |
| 54 | #include <QCheckBox> |
| 55 | #include <QComboBox> |
| 56 | #include <QDateEdit> |
| 57 | #include <QGridLayout> |
| 58 | #include <QGroupBox> |
| 59 | #include <QLabel> |
| 60 | #include <QLocale> |
| 61 | #include <QTextCharFormat> |
| 62 | |
| 63 | //! [0] |
| 64 | Window::Window(QWidget *parent) |
| 65 | : QWidget(parent) |
| 66 | { |
| 67 | createPreviewGroupBox(); |
| 68 | createGeneralOptionsGroupBox(); |
| 69 | createDatesGroupBox(); |
| 70 | createTextFormatsGroupBox(); |
| 71 | |
| 72 | QGridLayout *layout = new QGridLayout; |
| 73 | layout->addWidget(previewGroupBox, 0, 0); |
| 74 | layout->addWidget(generalOptionsGroupBox, 0, 1); |
| 75 | layout->addWidget(datesGroupBox, 1, 0); |
| 76 | layout->addWidget(textFormatsGroupBox, 1, 1); |
| 77 | layout->setSizeConstraint(QLayout::SetFixedSize); |
| 78 | setLayout(layout); |
| 79 | |
| 80 | previewLayout->setRowMinimumHeight(0, calendar->sizeHint().height()); |
| 81 | previewLayout->setColumnMinimumWidth(0, calendar->sizeHint().width()); |
| 82 | |
| 83 | setWindowTitle(tr("Calendar Widget" )); |
| 84 | } |
| 85 | //! [0] |
| 86 | |
| 87 | void Window::localeChanged(int index) |
| 88 | { |
| 89 | const QLocale newLocale(localeCombo->itemData(index).toLocale()); |
| 90 | calendar->setLocale(newLocale); |
| 91 | int newLocaleFirstDayIndex = firstDayCombo->findData(newLocale.firstDayOfWeek()); |
| 92 | firstDayCombo->setCurrentIndex(newLocaleFirstDayIndex); |
| 93 | } |
| 94 | |
| 95 | //! [1] |
| 96 | void Window::firstDayChanged(int index) |
| 97 | { |
| 98 | calendar->setFirstDayOfWeek(Qt::DayOfWeek( |
| 99 | firstDayCombo->itemData(index).toInt())); |
| 100 | } |
| 101 | //! [1] |
| 102 | |
| 103 | void Window::selectionModeChanged(int index) |
| 104 | { |
| 105 | calendar->setSelectionMode(QCalendarWidget::SelectionMode( |
| 106 | selectionModeCombo->itemData(index).toInt())); |
| 107 | } |
| 108 | |
| 109 | void Window::(int index) |
| 110 | { |
| 111 | calendar->setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat( |
| 112 | horizontalHeaderCombo->itemData(index).toInt())); |
| 113 | } |
| 114 | |
| 115 | void Window::(int index) |
| 116 | { |
| 117 | calendar->setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat( |
| 118 | verticalHeaderCombo->itemData(index).toInt())); |
| 119 | } |
| 120 | |
| 121 | //! [2] |
| 122 | void Window::selectedDateChanged() |
| 123 | { |
| 124 | currentDateEdit->setDate(calendar->selectedDate()); |
| 125 | } |
| 126 | //! [2] |
| 127 | |
| 128 | //! [3] |
| 129 | void Window::minimumDateChanged(QDate date) |
| 130 | { |
| 131 | calendar->setMinimumDate(date); |
| 132 | maximumDateEdit->setDate(calendar->maximumDate()); |
| 133 | } |
| 134 | //! [3] |
| 135 | |
| 136 | //! [4] |
| 137 | void Window::maximumDateChanged(QDate date) |
| 138 | { |
| 139 | calendar->setMaximumDate(date); |
| 140 | minimumDateEdit->setDate(calendar->minimumDate()); |
| 141 | } |
| 142 | //! [4] |
| 143 | |
| 144 | //! [5] |
| 145 | void Window::weekdayFormatChanged() |
| 146 | { |
| 147 | QTextCharFormat format; |
| 148 | |
| 149 | format.setForeground(qvariant_cast<QColor>( |
| 150 | weekdayColorCombo->itemData(weekdayColorCombo->currentIndex()))); |
| 151 | calendar->setWeekdayTextFormat(Qt::Monday, format); |
| 152 | calendar->setWeekdayTextFormat(Qt::Tuesday, format); |
| 153 | calendar->setWeekdayTextFormat(Qt::Wednesday, format); |
| 154 | calendar->setWeekdayTextFormat(Qt::Thursday, format); |
| 155 | calendar->setWeekdayTextFormat(Qt::Friday, format); |
| 156 | } |
| 157 | //! [5] |
| 158 | |
| 159 | //! [6] |
| 160 | void Window::weekendFormatChanged() |
| 161 | { |
| 162 | QTextCharFormat format; |
| 163 | |
| 164 | format.setForeground(qvariant_cast<QColor>( |
| 165 | weekendColorCombo->itemData(weekendColorCombo->currentIndex()))); |
| 166 | calendar->setWeekdayTextFormat(Qt::Saturday, format); |
| 167 | calendar->setWeekdayTextFormat(Qt::Sunday, format); |
| 168 | } |
| 169 | //! [6] |
| 170 | |
| 171 | //! [7] |
| 172 | void Window::() |
| 173 | { |
| 174 | QString text = headerTextFormatCombo->currentText(); |
| 175 | QTextCharFormat format; |
| 176 | |
| 177 | if (text == tr("Bold" )) |
| 178 | format.setFontWeight(QFont::Bold); |
| 179 | else if (text == tr("Italic" )) |
| 180 | format.setFontItalic(true); |
| 181 | else if (text == tr("Green" )) |
| 182 | format.setForeground(Qt::green); |
| 183 | calendar->setHeaderTextFormat(format); |
| 184 | } |
| 185 | //! [7] |
| 186 | |
| 187 | //! [8] |
| 188 | void Window::reformatCalendarPage() |
| 189 | { |
| 190 | QTextCharFormat mayFirstFormat; |
| 191 | const QDate mayFirst(calendar->yearShown(), 5, 1); |
| 192 | |
| 193 | QTextCharFormat firstFridayFormat; |
| 194 | QDate firstFriday(calendar->yearShown(), calendar->monthShown(), 1); |
| 195 | while (firstFriday.dayOfWeek() != Qt::Friday) |
| 196 | firstFriday = firstFriday.addDays(1); |
| 197 | |
| 198 | if (firstFridayCheckBox->isChecked()) { |
| 199 | firstFridayFormat.setForeground(Qt::blue); |
| 200 | } else { // Revert to regular colour for this day of the week. |
| 201 | Qt::DayOfWeek dayOfWeek(static_cast<Qt::DayOfWeek>(firstFriday.dayOfWeek())); |
| 202 | firstFridayFormat.setForeground(calendar->weekdayTextFormat(dayOfWeek).foreground()); |
| 203 | } |
| 204 | |
| 205 | calendar->setDateTextFormat(firstFriday, firstFridayFormat); |
| 206 | |
| 207 | // When it is checked, "May First in Red" always takes precedence over "First Friday in Blue". |
| 208 | if (mayFirstCheckBox->isChecked()) { |
| 209 | mayFirstFormat.setForeground(Qt::red); |
| 210 | } else if (!firstFridayCheckBox->isChecked() || firstFriday != mayFirst) { |
| 211 | // We can now be certain we won't be resetting "May First in Red" when we restore |
| 212 | // may 1st's regular colour for this day of the week. |
| 213 | Qt::DayOfWeek dayOfWeek(static_cast<Qt::DayOfWeek>(mayFirst.dayOfWeek())); |
| 214 | calendar->setDateTextFormat(mayFirst, calendar->weekdayTextFormat(dayOfWeek)); |
| 215 | } |
| 216 | |
| 217 | calendar->setDateTextFormat(mayFirst, mayFirstFormat); |
| 218 | } |
| 219 | //! [8] |
| 220 | |
| 221 | //! [9] |
| 222 | void Window::createPreviewGroupBox() |
| 223 | { |
| 224 | previewGroupBox = new QGroupBox(tr("Preview" )); |
| 225 | |
| 226 | calendar = new QCalendarWidget; |
| 227 | calendar->setMinimumDate(QDate(1900, 1, 1)); |
| 228 | calendar->setMaximumDate(QDate(3000, 1, 1)); |
| 229 | calendar->setGridVisible(true); |
| 230 | |
| 231 | connect(calendar, &QCalendarWidget::currentPageChanged, |
| 232 | this, &Window::reformatCalendarPage); |
| 233 | |
| 234 | previewLayout = new QGridLayout; |
| 235 | previewLayout->addWidget(calendar, 0, 0, Qt::AlignCenter); |
| 236 | previewGroupBox->setLayout(previewLayout); |
| 237 | } |
| 238 | //! [9] |
| 239 | |
| 240 | //! [10] |
| 241 | void Window::createGeneralOptionsGroupBox() |
| 242 | { |
| 243 | generalOptionsGroupBox = new QGroupBox(tr("General Options" )); |
| 244 | |
| 245 | localeCombo = new QComboBox; |
| 246 | int curLocaleIndex = -1; |
| 247 | int index = 0; |
| 248 | for (int _lang = QLocale::C; _lang <= QLocale::LastLanguage; ++_lang) { |
| 249 | QLocale::Language lang = static_cast<QLocale::Language>(_lang); |
| 250 | QList<QLocale::Country> countries = QLocale::countriesForLanguage(lang); |
| 251 | for (int i = 0; i < countries.count(); ++i) { |
| 252 | QLocale::Country country = countries.at(i); |
| 253 | QString label = QLocale::languageToString(lang); |
| 254 | label += QLatin1Char('/'); |
| 255 | label += QLocale::countryToString(country); |
| 256 | QLocale locale(lang, country); |
| 257 | if (this->locale().language() == lang && this->locale().country() == country) |
| 258 | curLocaleIndex = index; |
| 259 | localeCombo->addItem(label, locale); |
| 260 | ++index; |
| 261 | } |
| 262 | } |
| 263 | if (curLocaleIndex != -1) |
| 264 | localeCombo->setCurrentIndex(curLocaleIndex); |
| 265 | localeLabel = new QLabel(tr("&Locale" )); |
| 266 | localeLabel->setBuddy(localeCombo); |
| 267 | |
| 268 | firstDayCombo = new QComboBox; |
| 269 | firstDayCombo->addItem(tr("Sunday" ), Qt::Sunday); |
| 270 | firstDayCombo->addItem(tr("Monday" ), Qt::Monday); |
| 271 | firstDayCombo->addItem(tr("Tuesday" ), Qt::Tuesday); |
| 272 | firstDayCombo->addItem(tr("Wednesday" ), Qt::Wednesday); |
| 273 | firstDayCombo->addItem(tr("Thursday" ), Qt::Thursday); |
| 274 | firstDayCombo->addItem(tr("Friday" ), Qt::Friday); |
| 275 | firstDayCombo->addItem(tr("Saturday" ), Qt::Saturday); |
| 276 | |
| 277 | firstDayLabel = new QLabel(tr("Wee&k starts on:" )); |
| 278 | firstDayLabel->setBuddy(firstDayCombo); |
| 279 | //! [10] |
| 280 | |
| 281 | selectionModeCombo = new QComboBox; |
| 282 | selectionModeCombo->addItem(tr("Single selection" ), |
| 283 | QCalendarWidget::SingleSelection); |
| 284 | selectionModeCombo->addItem(tr("None" ), QCalendarWidget::NoSelection); |
| 285 | |
| 286 | selectionModeLabel = new QLabel(tr("&Selection mode:" )); |
| 287 | selectionModeLabel->setBuddy(selectionModeCombo); |
| 288 | |
| 289 | gridCheckBox = new QCheckBox(tr("&Grid" )); |
| 290 | gridCheckBox->setChecked(calendar->isGridVisible()); |
| 291 | |
| 292 | navigationCheckBox = new QCheckBox(tr("&Navigation bar" )); |
| 293 | navigationCheckBox->setChecked(true); |
| 294 | |
| 295 | horizontalHeaderCombo = new QComboBox; |
| 296 | horizontalHeaderCombo->addItem(tr("Single letter day names" ), |
| 297 | QCalendarWidget::SingleLetterDayNames); |
| 298 | horizontalHeaderCombo->addItem(tr("Short day names" ), |
| 299 | QCalendarWidget::ShortDayNames); |
| 300 | horizontalHeaderCombo->addItem(tr("None" ), |
| 301 | QCalendarWidget::NoHorizontalHeader); |
| 302 | horizontalHeaderCombo->setCurrentIndex(1); |
| 303 | |
| 304 | horizontalHeaderLabel = new QLabel(tr("&Horizontal header:" )); |
| 305 | horizontalHeaderLabel->setBuddy(horizontalHeaderCombo); |
| 306 | |
| 307 | verticalHeaderCombo = new QComboBox; |
| 308 | verticalHeaderCombo->addItem(tr("ISO week numbers" ), |
| 309 | QCalendarWidget::ISOWeekNumbers); |
| 310 | verticalHeaderCombo->addItem(tr("None" ), QCalendarWidget::NoVerticalHeader); |
| 311 | |
| 312 | verticalHeaderLabel = new QLabel(tr("&Vertical header:" )); |
| 313 | verticalHeaderLabel->setBuddy(verticalHeaderCombo); |
| 314 | |
| 315 | //! [11] |
| 316 | connect(localeCombo, &QComboBox::currentIndexChanged, |
| 317 | this, &Window::localeChanged); |
| 318 | connect(firstDayCombo, &QComboBox::currentIndexChanged, |
| 319 | this, &Window::firstDayChanged); |
| 320 | connect(selectionModeCombo, &QComboBox::currentIndexChanged, |
| 321 | this, &Window::selectionModeChanged); |
| 322 | connect(gridCheckBox, &QCheckBox::toggled, |
| 323 | calendar, &QCalendarWidget::setGridVisible); |
| 324 | connect(navigationCheckBox, &QCheckBox::toggled, |
| 325 | calendar, &QCalendarWidget::setNavigationBarVisible); |
| 326 | connect(horizontalHeaderCombo, &QComboBox::currentIndexChanged, |
| 327 | this, &Window::horizontalHeaderChanged); |
| 328 | connect(verticalHeaderCombo, &QComboBox::currentIndexChanged, |
| 329 | this, &Window::verticalHeaderChanged); |
| 330 | //! [11] |
| 331 | |
| 332 | QHBoxLayout *checkBoxLayout = new QHBoxLayout; |
| 333 | checkBoxLayout->addWidget(gridCheckBox); |
| 334 | checkBoxLayout->addStretch(); |
| 335 | checkBoxLayout->addWidget(navigationCheckBox); |
| 336 | |
| 337 | QGridLayout *outerLayout = new QGridLayout; |
| 338 | outerLayout->addWidget(localeLabel, 0, 0); |
| 339 | outerLayout->addWidget(localeCombo, 0, 1); |
| 340 | outerLayout->addWidget(firstDayLabel, 1, 0); |
| 341 | outerLayout->addWidget(firstDayCombo, 1, 1); |
| 342 | outerLayout->addWidget(selectionModeLabel, 2, 0); |
| 343 | outerLayout->addWidget(selectionModeCombo, 2, 1); |
| 344 | outerLayout->addLayout(checkBoxLayout, 3, 0, 1, 2); |
| 345 | outerLayout->addWidget(horizontalHeaderLabel, 4, 0); |
| 346 | outerLayout->addWidget(horizontalHeaderCombo, 4, 1); |
| 347 | outerLayout->addWidget(verticalHeaderLabel, 5, 0); |
| 348 | outerLayout->addWidget(verticalHeaderCombo, 5, 1); |
| 349 | generalOptionsGroupBox->setLayout(outerLayout); |
| 350 | |
| 351 | //! [12] |
| 352 | firstDayChanged(firstDayCombo->currentIndex()); |
| 353 | selectionModeChanged(selectionModeCombo->currentIndex()); |
| 354 | horizontalHeaderChanged(horizontalHeaderCombo->currentIndex()); |
| 355 | verticalHeaderChanged(verticalHeaderCombo->currentIndex()); |
| 356 | } |
| 357 | //! [12] |
| 358 | |
| 359 | //! [13] |
| 360 | void Window::createDatesGroupBox() |
| 361 | { |
| 362 | datesGroupBox = new QGroupBox(tr("Dates" )); |
| 363 | |
| 364 | minimumDateEdit = new QDateEdit; |
| 365 | minimumDateEdit->setDisplayFormat("MMM d yyyy" ); |
| 366 | minimumDateEdit->setDateRange(calendar->minimumDate(), |
| 367 | calendar->maximumDate()); |
| 368 | minimumDateEdit->setDate(calendar->minimumDate()); |
| 369 | |
| 370 | minimumDateLabel = new QLabel(tr("&Minimum Date:" )); |
| 371 | minimumDateLabel->setBuddy(minimumDateEdit); |
| 372 | |
| 373 | currentDateEdit = new QDateEdit; |
| 374 | currentDateEdit->setDisplayFormat("MMM d yyyy" ); |
| 375 | currentDateEdit->setDate(calendar->selectedDate()); |
| 376 | currentDateEdit->setDateRange(calendar->minimumDate(), |
| 377 | calendar->maximumDate()); |
| 378 | |
| 379 | currentDateLabel = new QLabel(tr("&Current Date:" )); |
| 380 | currentDateLabel->setBuddy(currentDateEdit); |
| 381 | |
| 382 | maximumDateEdit = new QDateEdit; |
| 383 | maximumDateEdit->setDisplayFormat("MMM d yyyy" ); |
| 384 | maximumDateEdit->setDateRange(calendar->minimumDate(), |
| 385 | calendar->maximumDate()); |
| 386 | maximumDateEdit->setDate(calendar->maximumDate()); |
| 387 | |
| 388 | maximumDateLabel = new QLabel(tr("Ma&ximum Date:" )); |
| 389 | maximumDateLabel->setBuddy(maximumDateEdit); |
| 390 | |
| 391 | //! [13] //! [14] |
| 392 | connect(currentDateEdit, &QDateEdit::dateChanged, |
| 393 | calendar, &QCalendarWidget::setSelectedDate); |
| 394 | connect(calendar, &QCalendarWidget::selectionChanged, |
| 395 | this, &Window::selectedDateChanged); |
| 396 | connect(minimumDateEdit, &QDateEdit::dateChanged, |
| 397 | this, &Window::minimumDateChanged); |
| 398 | connect(maximumDateEdit, &QDateEdit::dateChanged, |
| 399 | this, &Window::maximumDateChanged); |
| 400 | |
| 401 | //! [14] |
| 402 | QGridLayout *dateBoxLayout = new QGridLayout; |
| 403 | dateBoxLayout->addWidget(currentDateLabel, 1, 0); |
| 404 | dateBoxLayout->addWidget(currentDateEdit, 1, 1); |
| 405 | dateBoxLayout->addWidget(minimumDateLabel, 0, 0); |
| 406 | dateBoxLayout->addWidget(minimumDateEdit, 0, 1); |
| 407 | dateBoxLayout->addWidget(maximumDateLabel, 2, 0); |
| 408 | dateBoxLayout->addWidget(maximumDateEdit, 2, 1); |
| 409 | dateBoxLayout->setRowStretch(3, 1); |
| 410 | |
| 411 | datesGroupBox->setLayout(dateBoxLayout); |
| 412 | //! [15] |
| 413 | } |
| 414 | //! [15] |
| 415 | |
| 416 | //! [16] |
| 417 | void Window::createTextFormatsGroupBox() |
| 418 | { |
| 419 | textFormatsGroupBox = new QGroupBox(tr("Text Formats" )); |
| 420 | |
| 421 | weekdayColorCombo = createColorComboBox(); |
| 422 | weekdayColorCombo->setCurrentIndex( |
| 423 | weekdayColorCombo->findText(tr("Black" ))); |
| 424 | |
| 425 | weekdayColorLabel = new QLabel(tr("&Weekday color:" )); |
| 426 | weekdayColorLabel->setBuddy(weekdayColorCombo); |
| 427 | |
| 428 | weekendColorCombo = createColorComboBox(); |
| 429 | weekendColorCombo->setCurrentIndex( |
| 430 | weekendColorCombo->findText(tr("Red" ))); |
| 431 | |
| 432 | weekendColorLabel = new QLabel(tr("Week&end color:" )); |
| 433 | weekendColorLabel->setBuddy(weekendColorCombo); |
| 434 | |
| 435 | //! [16] //! [17] |
| 436 | headerTextFormatCombo = new QComboBox; |
| 437 | headerTextFormatCombo->addItem(tr("Bold" )); |
| 438 | headerTextFormatCombo->addItem(tr("Italic" )); |
| 439 | headerTextFormatCombo->addItem(tr("Plain" )); |
| 440 | |
| 441 | headerTextFormatLabel = new QLabel(tr("&Header text:" )); |
| 442 | headerTextFormatLabel->setBuddy(headerTextFormatCombo); |
| 443 | |
| 444 | firstFridayCheckBox = new QCheckBox(tr("&First Friday in blue" )); |
| 445 | |
| 446 | mayFirstCheckBox = new QCheckBox(tr("May &1 in red" )); |
| 447 | |
| 448 | //! [17] //! [18] |
| 449 | connect(weekdayColorCombo, &QComboBox::currentIndexChanged, |
| 450 | this, &Window::weekdayFormatChanged); |
| 451 | connect(weekdayColorCombo, &QComboBox::currentIndexChanged, |
| 452 | this, &Window::reformatCalendarPage); |
| 453 | connect(weekendColorCombo, &QComboBox::currentIndexChanged, |
| 454 | this, &Window::weekendFormatChanged); |
| 455 | connect(weekendColorCombo, &QComboBox::currentIndexChanged, |
| 456 | this, &Window::reformatCalendarPage); |
| 457 | connect(headerTextFormatCombo, &QComboBox::currentIndexChanged, |
| 458 | this, &Window::reformatHeaders); |
| 459 | connect(firstFridayCheckBox, &QCheckBox::toggled, |
| 460 | this, &Window::reformatCalendarPage); |
| 461 | connect(mayFirstCheckBox, &QCheckBox::toggled, |
| 462 | this, &Window::reformatCalendarPage); |
| 463 | |
| 464 | //! [18] |
| 465 | QHBoxLayout *checkBoxLayout = new QHBoxLayout; |
| 466 | checkBoxLayout->addWidget(firstFridayCheckBox); |
| 467 | checkBoxLayout->addStretch(); |
| 468 | checkBoxLayout->addWidget(mayFirstCheckBox); |
| 469 | |
| 470 | QGridLayout *outerLayout = new QGridLayout; |
| 471 | outerLayout->addWidget(weekdayColorLabel, 0, 0); |
| 472 | outerLayout->addWidget(weekdayColorCombo, 0, 1); |
| 473 | outerLayout->addWidget(weekendColorLabel, 1, 0); |
| 474 | outerLayout->addWidget(weekendColorCombo, 1, 1); |
| 475 | outerLayout->addWidget(headerTextFormatLabel, 2, 0); |
| 476 | outerLayout->addWidget(headerTextFormatCombo, 2, 1); |
| 477 | outerLayout->addLayout(checkBoxLayout, 3, 0, 1, 2); |
| 478 | textFormatsGroupBox->setLayout(outerLayout); |
| 479 | |
| 480 | weekdayFormatChanged(); |
| 481 | weekendFormatChanged(); |
| 482 | //! [19] |
| 483 | reformatHeaders(); |
| 484 | reformatCalendarPage(); |
| 485 | } |
| 486 | //! [19] |
| 487 | |
| 488 | //! [20] |
| 489 | QComboBox *Window::createColorComboBox() |
| 490 | { |
| 491 | QComboBox *comboBox = new QComboBox; |
| 492 | comboBox->addItem(tr("Red" ), QColor(Qt::red)); |
| 493 | comboBox->addItem(tr("Blue" ), QColor(Qt::blue)); |
| 494 | comboBox->addItem(tr("Black" ), QColor(Qt::black)); |
| 495 | comboBox->addItem(tr("Magenta" ), QColor(Qt::magenta)); |
| 496 | return comboBox; |
| 497 | } |
| 498 | //! [20] |
| 499 | |