diff --git a/CMakeLists.txt b/CMakeLists.txt index 47a9e69..3f2ab2c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ qt_add_qml_module(appSolitare Main.qml QML_FILES ScoreBar.qml QML_FILES CardModel.qml + QML_FILES Tableau.qml SOURCES playingcard.h playingcard.cpp SOURCES gamestate.h gamestate.cpp SOURCES columnslot.h columnslot.cpp diff --git a/Main.qml b/Main.qml index 7ae949e..f2fadaf 100644 --- a/Main.qml +++ b/Main.qml @@ -89,41 +89,9 @@ ApplicationWindow { } } - // Second row, with the individual columns - Row { - spacing: 10 - + Tableau { anchors.top: firstRow.bottom anchors.horizontalCenter: parent.horizontalCenter anchors.topMargin: 50 - - Repeater { - model: GameState.columns.length - - delegate: Column { - required property int index // passed from repeater - spacing: -80 // Overlap - - Repeater { - model: GameState.columns[parent.index].length > 0 - ? GameState.columns[parent.index].length - : 1 // Render an empty slot for an empty column - delegate: CardModel { - required property int index - property ColumnSlot col: GameState.columns[parent.index].length > 0 - ? GameState.columns[parent.index][index] - : null // empty column (single empty slot) - - card: col ? col.card : null - isFaceDown: col ? !col.revealed : false - onClicked: { - if (col && col.revealed) { - GameState.autoMoveColumnCard(parent.index, index) - } - } - } - } - } - } } } diff --git a/Tableau.qml b/Tableau.qml new file mode 100644 index 0000000..32245cc --- /dev/null +++ b/Tableau.qml @@ -0,0 +1,36 @@ +import QtQuick + +// In solitare, Tableau refers to the part of the board where all of the columns are placed + +Row { + spacing: 10 + + Repeater { + model: GameState.columns.length + + delegate: Column { + required property int index // passed from repeater + spacing: -80 // Overlap + + Repeater { + model: GameState.columns[parent.index].length > 0 + ? GameState.columns[parent.index].length + : 1 // Render an empty slot for an empty column + delegate: CardModel { + required property int index + property ColumnSlot col: GameState.columns[parent.index].length > 0 + ? GameState.columns[parent.index][index] + : null // empty column (single empty slot) + + card: col ? col.card : null + isFaceDown: col ? !col.revealed : false + onClicked: { + if (col && col.revealed) { + GameState.autoMoveColumnCard(parent.index, index) + } + } + } + } + } + } +}