#include <QList>
#include <QStandardItemModel>
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // Setup models
    initListModel();
    initTableModel();
    initTreeModel();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void MainWindow::initListModel()
{
    QStringList rowList;
    rowList << "Row1" << "Row2" << "Row3";

    QStandardItemModel *listModel = new QStandardItemModel(this);
    QStandardItem *root = listModel->invisibleRootItem();
    foreach(QString str, rowList) {
        root->appendRow(new QStandardItem(str));
    }
    ui->listView->setModel(listModel);
}

void MainWindow::initTableModel()
{
    QStringList rowList;
    rowList << "Row1" << "Row2" << "Row3";
    QStringList columnList;
    columnList << "Col1" << "Col2" << "Col3";

    QStandardItemModel *tableModel = new QStandardItemModel(this);
    QStandardItem *root = tableModel->invisibleRootItem();
    foreach (QString row, rowList) {
        QList<QStandardItem *> rowData;
        foreach (QString column, columnList) {
            rowData << new QStandardItem(row + " " + column);
        }
        root->appendRow(rowData);
    }
    ui->tableView->setModel(tableModel);
}

void MainWindow::initTreeModel()
{
    QStringList nodeList;
    nodeList << "Node1" << "Node2" << "Node3";
    QStringList rowList;
    rowList << "Row1" << "Row2" << "Row3";
    QStringList columnList;
    columnList << "Col1" << "Col2" << "Col3";

    QStandardItemModel *treeModel = new QStandardItemModel(this);
    treeModel->setColumnCount(3); // Doesn't resize automatically
    QStandardItem *root = treeModel->invisibleRootItem();
    int nodeIndex = 0;
    foreach (QString node, nodeList) {
        QStandardItem *nodeItem = new QStandardItem(node);
        root->setChild(nodeIndex++, nodeItem);
        foreach (QString row, rowList) {
            QList<QStandardItem *> rowData;
            foreach (QString column, columnList) {
                rowData << new QStandardItem(row + " " + column);
            }
            nodeItem->appendRow(rowData);
        }
    }
    ui->treeView->setModel(treeModel);
}

