Revision control

++ // Copyright (C) 2016 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
++
++ #include <QtGui>
++
++ #include "mainwindow.h"
++ #include "model.h"
++
++ /*!
++ The main window constructor creates and populates a model with values
++ from a string list then displays the contents of the model using a
++ QListView widget.
++ */
++
++ MainWindow::MainWindow(QWidget *parent)
++ : QMainWindow(parent)
++ {
++ QMenu *fileMenu = new QMenu(tr("&File"));
++
++ QAction *quitAction = fileMenu->addAction(tr("E&xit"));
++ quitAction->setShortcut(tr("Ctrl+Q"));
++
++ QMenu *itemsMenu = new QMenu(tr("&Items"));
++
++ insertAction = itemsMenu->addAction(tr("&Insert Item"));
++ removeAction = itemsMenu->addAction(tr("&Remove Item"));
++
++ menuBar()->addMenu(fileMenu);
++ menuBar()->addMenu(itemsMenu);
++
++ QStringList numbers;
++ numbers << tr("One") << tr("Two") << tr("Three") << tr("Four") << tr("Five")
++ << tr("Six") << tr("Seven") << tr("Eight") << tr("Nine") << tr("Ten");
++
++ model = new StringListModel(numbers);
++ QListView *view = new QListView(this);
++ view->setModel(model);
++
++ selectionModel = view->selectionModel();
++
++ connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
++ connect(insertAction, SIGNAL(triggered()), this, SLOT(insertItem()));
++ connect(removeAction, SIGNAL(triggered()), this, SLOT(removeItem()));
++ connect(selectionModel,
++ SIGNAL(currentChanged(QModelIndex,QModelIndex)),
++ this, SLOT(updateMenus(QModelIndex)));
++
++ setCentralWidget(view);
++ setWindowTitle("View onto a string list model");
++ }
++
++ void MainWindow::insertItem()
++ {
++ if (!selectionModel->currentIndex().isValid())
++ return;
++
++ QString itemText = QInputDialog::getText(this, tr("Insert Item"),
++ tr("Input text for the new item:"));
++
++ if (itemText.isNull())
++ return;
++
++ int row = selectionModel->currentIndex().row();
++
++ if (model->insertRows(row, 1))
++ model->setData(model->index(row, 0), itemText, Qt::EditRole);
++ }
++
++ void MainWindow::removeItem()
++ {
++ if (!selectionModel->currentIndex().isValid())
++ return;
++
++ int row = selectionModel->currentIndex().row();
++
++ model->removeRows(row, 1);
++ }
++
++ void MainWindow::updateMenus(const QModelIndex &currentIndex)
++ {
++ insertAction->setEnabled(currentIndex.isValid());
++ removeAction->setEnabled(currentIndex.isValid());
++ }