diff --git a/pokerth_qml-client.pro b/pokerth_qml-client.pro index 465827ec..4fd50043 100644 --- a/pokerth_qml-client.pro +++ b/pokerth_qml-client.pro @@ -1,19 +1,18 @@ +QMAKE_MOC = $$QMAKE_MOC -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +isEmpty( PREFIX ){ + PREFIX =/usr +} +DEFINES += PREFIX=\"$${PREFIX}\" + TEMPLATE = app -QT += core qml quick widgets svg +TARGET = pokerth +CODECFORSRC = UTF-8 +QT += core qml quick widgets svg sql +CONFIG += qt thread embed_manifest_exe exceptions rtti stl warn_on +DEFINES += ENABLE_IPV6 TIXML_USE_STL BOOST_FILESYSTEM_DEPRECATED DEFINES += QML_CLIENT - -INCLUDEPATH += \ - src/gui/qml \ - src/gui/qml/views \ - src/gui/qml/components - -DEPENDPATH += \ - src \ - src/gui/qml \ - src/gui/qml/views \ - src/gui/qml/components - RESOURCES += src/gui/qml/qml.qrc # Additional import path used to resolve QML modules in Qt Creator's code model @@ -21,37 +20,216 @@ QML_IMPORT_PATH = \ src/gui/qml/views/ \ src/gui/qml/views/startview/ \ src/gui/qml/views/createlocalgameview/ \ - src/gui/qml/components + src/gui/qml/components \ + src/gui/qml/js # Default rules for deployment. include(src/gui/qml/deployment.pri) +INCLUDEPATH += . \ + src \ + src/config \ + src/core \ + src/core/common \ + src/core/common/qttools \ + src/core/common/qttools/qthelper \ + src/gui \ + src/gui/qml/cpp + +DEPENDPATH += . \ + src \ + src/config \ + src/core \ + src/core/common \ + src/core/common/qttools \ + src/core/common/qttools/qthelper \ + src/gui \ + src/gui/qml/cpp + HEADERS += \ - src/gui/qml/qmlwrapper.h \ - src/gui/qml/views/startview/startview.h \ + src/core/loghelper.h \ + src/core/common/qttools/qthelper/qthelper.h \ + src/core/common/qttools/qttoolswrapper.h \ + src/core/common/qttoolsinterface.h \ + src/gui/qml/cpp/qmlwrapper.h + SOURCES += \ src/pokerth.cpp \ - src/gui/qml/qmlwrapper.cpp \ - src/gui/qml/views/startview/startview.cpp + src/core/common/loghelper_client.cpp \ + src/core/common/qttools/qthelper/qthelper.cpp \ + src/core/common/qttools/qttoolswrapper.cpp \ + src/core/common/qttoolsinterface.cpp \ + src/gui/qml/cpp/qmlwrapper.cpp + +LIBS += \ + -lpokerth_lib \ + -lpokerth_db \ + -lpokerth_protocol \ + -lcurl unix:!mac { - # #### My release static build options - # QMAKE_CXXFLAGS += -ffunction-sections -fdata-sections - # QMAKE_LFLAGS += -Wl,--gc-sections - INCLUDEPATH += $${PREFIX}/include - QMAKE_LIBDIR += lib + # #### My release static build options + # QMAKE_CXXFLAGS += -ffunction-sections -fdata-sections + # QMAKE_LFLAGS += -Wl,--gc-sections + INCLUDEPATH += $${PREFIX}/include + QMAKE_LIBDIR += lib + !android{ + LIBPATH += $${PREFIX}/lib /opt/gsasl/lib + LIB_DIRS = $${PREFIX}/lib \ + $${PREFIX}/lib64 \ + $${PREFIX}/lib/x86_64-linux-gnu \ + $$system(qmake -query QT_INSTALL_LIBS) + } + android{ + LIBPATH += $${PREFIX}/lib/armv5 + LIB_DIRS = $${PREFIX}/lib/armv5 + } + +# BEGIN TODO: Cleanup!!! --> This is just a copy from pokerth_game.pro when starting with c++ integration + BOOST_FS = boost_filesystem \ + boost_filesystem-mt + BOOST_THREAD = boost_thread \ + boost_thread-mt + BOOST_IOSTREAMS = boost_iostreams \ + boost_iostreams-mt + BOOST_REGEX = boost_regex \ + boost_regex-mt + BOOST_CHRONO = boost_chrono \ + boost_chrono-mt + BOOST_SYS = boost_system \ + boost_system-mt + BOOST_RANDOM = boost_random \ + boost_random-mt + + # searching in $PREFIX/lib, $PREFIX/lib64 and $$system(qmake -query QT_INSTALL_LIBS) + # to override the default '/usr' pass PREFIX + # variable to qmake. + for(dir, LIB_DIRS):exists($$dir) { + for(lib, BOOST_THREAD):exists($${dir}/lib$${lib}.so*) { + message("Found $$lib") + BOOST_THREAD = -l$$lib + } + for(lib, BOOST_THREAD):exists($${dir}/lib$${lib}.a) { + message("Found $$lib") + BOOST_THREAD = -l$$lib + } + for(lib, BOOST_FS):exists($${dir}/lib$${lib}.so*) { + message("Found $$lib") + BOOST_FS = -l$$lib + } + for(lib, BOOST_FS):exists($${dir}/lib$${lib}.a) { + message("Found $$lib") + BOOST_FS = -l$$lib + } + for(lib, BOOST_IOSTREAMS):exists($${dir}/lib$${lib}.so*) { + message("Found $$lib") + BOOST_IOSTREAMS = -l$$lib + } + for(lib, BOOST_IOSTREAMS):exists($${dir}/lib$${lib}.a) { + message("Found $$lib") + BOOST_IOSTREAMS = -l$$lib + } + for(lib, BOOST_REGEX):exists($${dir}/lib$${lib}.so*) { + message("Found $$lib") + BOOST_REGEX = -l$$lib + } + for(lib, BOOST_REGEX):exists($${dir}/lib$${lib}.a) { + message("Found $$lib") + BOOST_REGEX = -l$$lib + } + for(lib, BOOST_CHRONO):exists($${dir}/lib$${lib}.so*) { + message("Found $$lib") + BOOST_CHRONO = -l$$lib + } + for(lib, BOOST_CHRONO):exists($${dir}/lib$${lib}.a) { + message("Found $$lib") + BOOST_CHRONO = -l$$lib + } !android{ - LIBPATH += $${PREFIX}/lib /opt/gsasl/lib - LIB_DIRS = $${PREFIX}/lib \ - $${PREFIX}/lib64 \ - $${PREFIX}/lib/x86_64-linux-gnu \ - $$system(qmake -query QT_INSTALL_LIBS) + for(lib, BOOST_RANDOM):exists($${dir}/lib$${lib}.so*) { + message("Found $$lib") + BOOST_RANDOM = -l$$lib + } + for(lib, BOOST_RANDOM):exists($${dir}/lib$${lib}.a) { + message("Found $$lib") + BOOST_RANDOM = -l$$lib + } } - android{ - LIBPATH += $${PREFIX}/lib/armv5 - LIB_DIRS = $${PREFIX}/lib/armv5 + for(lib, BOOST_SYS):exists($${dir}/lib$${lib}.so*) { + message("Found $$lib") + BOOST_SYS = -l$$lib } + for(lib, BOOST_SYS):exists($${dir}/lib$${lib}.a) { + message("Found $$lib") + BOOST_SYS = -l$$lib + } + } + !android{ + BOOST_LIBS = $$BOOST_THREAD \ + $$BOOST_FS \ + $$BOOST_IOSTREAMS \ + $$BOOST_REGEX \ + $$BOOST_CHRONO \ + $$BOOST_RANDOM \ + $$BOOST_SYS + !count(BOOST_LIBS, 7):error("Unable to find boost libraries in PREFIX=$${PREFIX}") + if($$system(sdl-config --version)):error("sdl-config not found in PATH - libSDL_mixer, libSDL are required!") + UNAME = $$system(uname -s) + BSD = $$find(UNAME, "BSD") + kFreeBSD = $$find(UNAME, "kFreeBSD") + LIBS += -lsqlite3 \ + -ltinyxml \ + -lprotobuf + LIBS += $$BOOST_LIBS + LIBS += -lSDL \ + -lSDL_mixer \ + -lgsasl + !isEmpty( BSD ):isEmpty( kFreeBSD ):LIBS += -lcrypto + else:LIBS += -lgcrypt + } + android{ + BOOST_LIBS = $$BOOST_THREAD \ + $$BOOST_FS \ + $$BOOST_IOSTREAMS \ + $$BOOST_REGEX \ + $$BOOST_CHRONO \ + $$BOOST_SYS + !count(BOOST_LIBS, 6):error("Unable to find boost libraries in PREFIX=$${PREFIX}lib/armv5") + LIBS += -ltinyxml + LIBS += $$BOOST_LIBS + LIBS += -lgsasl -lidn + LIBS += -lssl -lcrypto -lgcrypt -lgpg-error -lprotobuf-lite + + !android_api8 { + #android sound lib for api9 and higher + LIBS += -lOpenSLES + } + } + TARGETDEPS += ./lib/libpokerth_lib.a \ + ./lib/libpokerth_db.a \ + ./lib/libpokerth_protocol.a + + !android{ + # #### My release static libs + # LIBS += -lgcrypt_static -lgpg-error_static -lgnutls_static -lSDL_mixer_static -lSDL -lmikmod -lcurl + # ### INSTALL #### + binary.path += $${PREFIX}/bin/ + binary.files += pokerth + data.path += $${PREFIX}/share/pokerth/data/ + data.files += data/* + pixmap.path += $${PREFIX}/share/pixmaps/ + pixmap.files += pokerth.png + desktop.path += $${PREFIX}/share/applications/ + desktop.files += pokerth.desktop + INSTALLS += binary \ + data \ + pixmap \ + desktop + } + +# END TODO: Cleanup!!! --> This is just a copy from pokerth_game.pro when starting with c++ integration + } ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android @@ -59,3 +237,4 @@ ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android contains(ANDROID_TARGET_ARCH,armeabi) { ANDROID_EXTRA_LIBS = } + diff --git a/src/gui/qml/components/MyComboBoxSelector.qml b/src/gui/qml/components/MyComboBoxSelector.qml index 528a1a3f..1399a073 100644 --- a/src/gui/qml/components/MyComboBoxSelector.qml +++ b/src/gui/qml/components/MyComboBoxSelector.qml @@ -1,24 +1,31 @@ import QtQuick 2.0 import QtQuick.Layouts 1.1 import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.2 +import "../js/colors.js" as GlobalColors Rectangle { id: selector z:1000 visible: false anchors.fill: parent - color: "#88000000" //Background + color: "#88000000" //dark transparent background - property ListModel mySelectionModel: ListModel {} - property string myTitleString - property var returnSelection + property ListModel selectionModel: ListModel {} + property string titleString + property string valueFromParent + property string returnValue + property bool valueIsIndex - function show(title, map) { - //at first fill the model - myTitleString = title -// for (var i=0; i < map.count; i++) { -// mySelectionModel.append({"value": map.get(i).value}); -// } + function show(title, list, vl, valueIndex) { + titleString = title; + valueFromParent = vl; + valueIsIndex = valueIndex; + //fill the model + selectionModel.clear(); + for (var i=0; i < list.count; i++) { + selectionModel.append({"valueString": list.get(i).value}); + } visible = true; } @@ -26,13 +33,19 @@ Rectangle { visible = false; } - function selected() { + function selected(newString, index) { + if(valueIsIndex) { + returnValue = index.toString(); + } + else { + returnValue = newString + } visible = false; } MouseArea { + //set empty MouseArea to prevent the background to be clicked anchors.fill: parent - onClicked: console.log("1001") } Rectangle { @@ -43,23 +56,66 @@ Rectangle { width: Math.round(parent.width*0.6) x: Math.round(parent.width*0.5 - width*0.5) y: Math.round(parent.height*0.5 - height*0.5) + radius: Math.round(parent.height*0.01) + ColumnLayout { + id: content anchors.fill: parent + spacing: Math.round(selectionBox.height*0.06) Text { id: titleText font.pixelSize: Math.round(selectionBox.height*0.10) font.bold: true - text: myTitleString + text: titleString anchors.left: parent.left - anchors.margins: 30 - Layout.preferredHeight: titleText.contentHeight + anchors.top: parent.top + anchors.leftMargin: 30 + anchors.topMargin: 10 + Layout.preferredHeight: contentHeight } ScrollView { + anchors.left: parent.left + anchors.right: parent.right + anchors.rightMargin: 30 + anchors.leftMargin: 50 + Layout.fillHeight: true ListView { anchors.fill: parent - model: mySelectionModel - delegate: Text { - text: modelData + spacing: Math.round(selectionBox.height*0.05) + model: selectionModel + delegate: RadioButton { + id: radioBtn + //check of value is index type and do the corresponding checked? test + checked: valueIsIndex ? (parseInt(valueFromParent) == index ? true : false) : (valueFromParent == valueString ? true : false) + onClicked: { + selector.selected(valueString, index) + } + style: RadioButtonStyle { + indicator: Rectangle { + implicitWidth: Math.round(selectionBox.height*0.05) + implicitHeight: Math.round(selectionBox.height*0.05) + radius: Math.round(selectionBox.height*0.03) + border.color: radioBtn.checked ? GlobalColors.accentColor : "grey" + border.width: Math.round(selectionBox.height*0.005) + Rectangle { + anchors.fill: parent + visible: control.checked + color: radioBtn.checked ? GlobalColors.accentColor : "grey" + radius: Math.round(selectionBox.height*0.03) + anchors.margins: Math.round(selectionBox.height*0.01) + } + } + label: Text { + anchors.left: parent.left + anchors.leftMargin: 10 + font.pixelSize: Math.round(selectionBox.height*0.05) + text: valueString + MouseArea { + anchors.fill: parent + onClicked: radioBtn.clicked() + } + } + } } } } @@ -67,18 +123,17 @@ Rectangle { id: cancelButton font.pixelSize: Math.round(selectionBox.height*0.07) font.bold: true - text: qsTr("Cancel") + text: qsTr("CANCEL") anchors.right: parent.right anchors.bottom: parent.bottom - anchors.margins: 50 - Layout.preferredHeight: cancelButton.contentHeight + anchors.rightMargin: 30 + anchors.bottomMargin: 20 + Layout.preferredHeight: contentHeight MouseArea { id: cancelMouse anchors.fill: parent -// preventStealing: true onClicked: { - console.log("1002") reject() } } diff --git a/src/gui/qml/components/ListViewDelegateFactory.qml b/src/gui/qml/components/MyListViewDelegateFactory.qml similarity index 71% rename from src/gui/qml/components/ListViewDelegateFactory.qml rename to src/gui/qml/components/MyListViewDelegateFactory.qml index 800f9eeb..dad89130 100644 --- a/src/gui/qml/components/ListViewDelegateFactory.qml +++ b/src/gui/qml/components/MyListViewDelegateFactory.qml @@ -9,6 +9,8 @@ Item { id: root property int myListViewsHeight: 0 property int myListViewsWidth: 0 + property var myListViewRoot + property var myListViewModel property var componentMap: { "ComboBox": myComboBox, "SpinBox": mySpinBox @@ -23,9 +25,17 @@ Item { } + // ComboBox Component { id: myComboBox Rectangle { + MyComboBoxSelector { + id: myComboBoxSelector + parent: myListViewRoot + } + + id: myComboBoxContent + property int modelIndex: model.index color: mouse.pressed ? "#11000000" : "white" width: root.width height: Math.round(comboBoxTitle.contentHeight*2.1 + comboBoxValue.contentHeight*1.0) @@ -45,7 +55,8 @@ Item { y: Math.round(parent.height*0.5 + contentHeight*0.15) color: "grey" font.pixelSize: myValue != "" ? Math.round(myListViewsHeight*0.05) : 0 - text: myValue + //setup value from Index if necessary + text: myValueIsIndex ? myValuesList.get(parseInt(myValue)).value : myValue } Rectangle { anchors.horizontalCenter: parent.horizontalCenter @@ -58,23 +69,43 @@ Item { id: mouse anchors.fill: parent onClicked: { - myComboBoxSelector.show(myTitle, myValuesList) + //call selector overlay and set inital values + myComboBoxSelector.show(myTitle, myValuesList, myValue, myValueIsIndex) + } + Connections { + target: myComboBoxSelector + onVisibleChanged: { + if(!myComboBoxSelector.visible) { + //call update the currentItem with selection from the comboBox selector + myListViewModel.setProperty(myComboBoxContent.modelIndex, "myValue", myComboBoxSelector.returnValue); + } + } } } Component.onCompleted: { + //after building the delegate content set the final height to the root item root.height = Qt.binding(function() { return height }) } } } + // Spinbox Component { id: mySpinBox Rectangle { + MySpinBoxSelector { + id: mySpinBoxSelector + parent: myListViewRoot + } + + id: mySpinBoxContent + property int modelIndex: model.index + color: mouse.pressed ? "#11000000" : "white" width: root.width - height: Math.round(comboBoxTitle.contentHeight*2.1 + comboBoxValue.contentHeight*1.0) + height: Math.round(spinBoxTitle.contentHeight*2.1 + spinBoxValue.contentHeight*1.0) Text { - id: comboBoxTitle + id: spinBoxTitle anchors.left: parent.left anchors.margins: 30 y: myValue != "" ? Math.round(parent.height*0.5 - contentHeight*0.9) : Math.round(parent.height*0.5 - contentHeight*0.5) @@ -83,7 +114,7 @@ Item { text: myTitle } Text { - id: comboBoxValue + id: spinBoxValue anchors.left: parent.left anchors.margins: 30 y: Math.round(parent.height*0.5 + contentHeight*0.15) @@ -99,9 +130,25 @@ Item { color: "lightgrey" } MouseArea { + id: mouse anchors.fill: parent + onClicked: { + //call selector overlay and set inital values + mySpinBoxSelector.show(myTitle, myMinValue, myMaxValue, myValue, myPrefix) + } + Connections { + target: mySpinBoxSelector + onVisibleChanged: { + if(!mySpinBoxSelector.visible) { + //call update the currentItem with selection from the comboBox selector + myListViewModel.setProperty(mySpinBoxContent.modelIndex, "myValue", mySpinBoxSelector.returnValue); + } + } + } } + Component.onCompleted: { + //after building the delegate content set the final height to the root item root.height = Qt.binding(function() { return height }) } } diff --git a/src/gui/qml/components/MySpinBoxSelector.qml b/src/gui/qml/components/MySpinBoxSelector.qml new file mode 100644 index 00000000..6c04c434 --- /dev/null +++ b/src/gui/qml/components/MySpinBoxSelector.qml @@ -0,0 +1,221 @@ +import QtQuick 2.0 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.2 +import "../js/colors.js" as GlobalColors + +Rectangle { + id: selector + z:1000 + visible: false + anchors.fill: parent + color: "#88000000" //dark transparent background + + property string titleString + property string prefix + property int minValue + property int maxValue + property string returnValue + property int initialTextFieldValue + property int initialSliderValue + + function show(title, min, max, value, pref) { + titleString = title; + initialTextFieldValue = parseInt(value); + initialSliderValue = parseInt(value) + minValue = min; + maxValue = max; + prefix = pref + visible = true; + } + + function reject() { + visible = false; + } + + function selected(newSelection) { + returnValue = newSelection; + visible = false; + } + + MouseArea { + //set empty MouseArea to prevent the background to be clicked + anchors.fill: parent + } + + Rectangle { + id: selectionBox + visible: true + color: "white" + height: Math.round(parent.height*0.9) + width: Math.round(parent.width*0.6) + x: Math.round(parent.width*0.5 - width*0.5) + y: Math.round(parent.height*0.5 - height*0.5) + radius: Math.round(parent.height*0.01) + + ColumnLayout { + id: content + anchors.fill: parent + spacing: Math.round(selectionBox.height*0.06) + Text { + id: titleText + font.pixelSize: Math.round(selectionBox.height*0.10) + font.bold: true + text: titleString + anchors.left: parent.left + anchors.top: parent.top + anchors.leftMargin: 30 + anchors.topMargin: 10 + Layout.preferredHeight: contentHeight + } + TextField{ + id: textField + anchors.left: parent.left + anchors.right: parent.right + anchors.rightMargin: 50 + //make space for the prefix + property int prefixIndent: Math.round(selectionBox.height*0.04) + anchors.leftMargin: 50 + prefixIndent +// validator: IntValidator{bottom: minValue; top: maxValue;} TODO: test validator in later QtVersions > 5.5.0 + focus: true + text: initialTextFieldValue + function correctValue() { + if(text > maxValue) text = maxValue + else if(text < minValue) text = minValue + else { + //remove leading "0000" + var temp = parseInt(text) + text = temp + } + } + onFocusChanged: correctValue() + onEditingFinished: correctValue() + + style: TextFieldStyle { + textColor: "black" + font.pixelSize: Math.round(selectionBox.height*0.10) + background: Item { //bottom line with colored focus indicator + implicitHeight: Math.round(selectionBox.height*0.12) + implicitWidth: parent.width + Text { //prefix + color: "black" + font.pixelSize: Math.round(selectionBox.height*0.10) + text: prefix + anchors.left: parent.left + anchors.leftMargin: -textField.prefixIndent + anchors.bottom: parent.bottom + anchors.bottomMargin: Math.round(selectionBox.height*0.005) + + } + Rectangle { + color: GlobalColors.accentColor + opacity: textField.activeFocus ? 0.8 : 0 + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.leftMargin: -textField.prefixIndent + width: parent.width + textField.prefixIndent + height: Math.round(selectionBox.height*0.005) + } + Rectangle { + color: "black" + opacity: textField.activeFocus ? 0.6 : 0.4 + anchors.bottom: parent.bottom + anchors.bottomMargin: Math.round(selectionBox.height*0.005) + anchors.left: parent.left + anchors.leftMargin: - textField.prefixIndent + width: parent.width + textField.prefixIndent + height: Math.round(selectionBox.height*0.005) + } + } + } + } + Slider { + id: slider + width: parent.width + anchors.left: parent.left + anchors.right: parent.right + anchors.rightMargin: 50 + anchors.leftMargin: 50 + maximumValue: maxValue + minimumValue: minValue + value: initialSliderValue + stepSize: minimumValue * 10 + on__HandlePosChanged: { + if (slider.value > minimumValue && slider.value < maximumValue) + textField.text = slider.value - minimumValue + else + textField.text = slider.value + } + style: SliderStyle { + handle: Rectangle { + width: Math.round(selectionBox.height*0.12) + height: width + radius: width + antialiasing: true + color: Qt.lighter(GlobalColors.accentColor, 1.2) + } + groove: Item { + implicitHeight: Math.round(selectionBox.height*0.04) + implicitWidth: slider.width + Rectangle { + height: Math.round(selectionBox.height*0.03) + width: slider.width + anchors.verticalCenter: parent.verticalCenter + color: "#666" + Rectangle { + antialiasing: true + radius: 1 + color: GlobalColors.accentColor + height: parent.height + width: parent.width * control.value / control.maximumValue + } + } + } + } + + } + + RowLayout { //bottom button line + width: parent.width + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.rightMargin: 30 + anchors.bottomMargin: 20 + spacing: okButton.contentWidth + Layout.preferredHeight: cancelButton.contentHeight + + Text { + id: cancelButton + font.pixelSize: Math.round(selectionBox.height*0.07) + font.bold: true + text: qsTr("CANCEL") + Layout.preferredHeight: contentHeight + MouseArea { + id: cancelMouse + anchors.fill: parent + onClicked: { + reject() + } + } + } + Text { + id: okButton + font.pixelSize: Math.round(selectionBox.height*0.07) + font.bold: true + color: GlobalColors.accentColor + text: qsTr("OK") + Layout.preferredHeight: contentHeight + MouseArea { + id: okMouse + anchors.fill: parent + onClicked: { + textField.correctValue(); + selected(textField.text); + } + } + } + } + } + } +} + diff --git a/src/gui/qml/cpp/qmlconfigwrapper.cpp b/src/gui/qml/cpp/qmlconfigwrapper.cpp new file mode 100644 index 00000000..9587b682 --- /dev/null +++ b/src/gui/qml/cpp/qmlconfigwrapper.cpp @@ -0,0 +1,19 @@ +#include "qmlconfigwrapper.h" +#include "configfile.h" + +QmlConfigWrapper::QmlConfigWrapper(ConfigFile *c) + :QObject(), myConfig(c) +{ + +} + +QmlConfigWrapper::~QmlConfigWrapper() +{ + +} + +QmlConfigWrapper::QmlConfigWrapper(const QmlConfigWrapper&) + :QObject() +{ + +} diff --git a/src/gui/qml/cpp/qmlconfigwrapper.h b/src/gui/qml/cpp/qmlconfigwrapper.h new file mode 100644 index 00000000..ad94ada8 --- /dev/null +++ b/src/gui/qml/cpp/qmlconfigwrapper.h @@ -0,0 +1,19 @@ +#ifndef QMLCONFIGWRAPPER_H +#define QMLCONFIGWRAPPER_H +#include + +class ConfigFile; + +class QmlConfigWrapper: public QObject +{ + Q_OBJECT +public: + QmlConfigWrapper(ConfigFile *c); + ~QmlConfigWrapper(); + QmlConfigWrapper(const QmlConfigWrapper&); + +private: + ConfigFile *myConfig; +}; + +#endif // QMLCONFIGWRAPPER_H diff --git a/src/gui/qml/js/colors.js b/src/gui/qml/js/colors.js new file mode 100644 index 00000000..6bbfb9cf --- /dev/null +++ b/src/gui/qml/js/colors.js @@ -0,0 +1,3 @@ +//global color definition +var accentColor = "#FF9800"; + diff --git a/src/gui/qml/main.qml b/src/gui/qml/main.qml index e5be9b75..9d547361 100644 --- a/src/gui/qml/main.qml +++ b/src/gui/qml/main.qml @@ -4,6 +4,7 @@ import QtQuick.Controls.Styles 1.2 import QtQuick.Window 2.2 import QtQuick.Dialogs 1.2 import "views/startview" +import "js/colors.js" as GlobalColors ApplicationWindow { id: appWindow @@ -18,7 +19,7 @@ ApplicationWindow { id: toolbar opacity: 1 Behavior on opacity { NumberAnimation{} } - color: "#FF9800" + color: GlobalColors.accentColor width: appWindow.width height: appWindow.height*0.15 Behavior on height { NumberAnimation{} } diff --git a/src/gui/qml/qml.qrc b/src/gui/qml/qml.qrc index 2d55fd9f..3372935e 100644 --- a/src/gui/qml/qml.qrc +++ b/src/gui/qml/qml.qrc @@ -1,7 +1,7 @@ main.qml - components/ListViewDelegateFactory.qml + components/MyListViewDelegateFactory.qml images/arrow_back.svg images/button-default.png images/button-pressed.png @@ -13,5 +13,7 @@ views/startview/StartView.qml views/createlocalgameview/CreateLocalGameView.qml components/MyComboBoxSelector.qml + js/colors.js + components/MySpinBoxSelector.qml diff --git a/src/gui/qml/qmlwrapper.cpp b/src/gui/qml/qmlwrapper.cpp deleted file mode 100644 index 05344e1a..00000000 --- a/src/gui/qml/qmlwrapper.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include -#include - -//#include "startview/startview.h" - -#include "qmlwrapper.h" - -qmlWrapper::qmlWrapper() - :QObject() -{ - qDebug("qmlWrapperKonstruktor"); - myEngine.reset(new QQmlApplicationEngine); - myEngine->load(QUrl(QStringLiteral("qrc:/main.qml"))); - -// QTimer *timer = new QTimer(this); -// timer->setSingleShot(true); -// connect(timer, SIGNAL(timeout()), this, SLOT(showStartForm())); -// timer->start(1000); -} - -qmlWrapper::~qmlWrapper() -{ - myEngine->deleteLater(); -} - -qmlWrapper::qmlWrapper(const qmlWrapper&) - :QObject() -{ - -} diff --git a/src/gui/qml/qmlwrapper.h b/src/gui/qml/qmlwrapper.h deleted file mode 100644 index 92e167ba..00000000 --- a/src/gui/qml/qmlwrapper.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef QMLWRAPPER_H -#define QMLWRAPPER_H -#include -#include - -class QQmlApplicationEngine; - -class qmlWrapper: public QObject -{ - Q_OBJECT -public: - qmlWrapper(); - ~qmlWrapper(); - qmlWrapper(const qmlWrapper&); - -public slots: - -private: - boost::shared_ptr myEngine; -}; - -#endif // QMLWRAPPER_H diff --git a/src/gui/qml/views/createlocalgameview/CreateLocalGameView.qml b/src/gui/qml/views/createlocalgameview/CreateLocalGameView.qml index a1b726a4..def3eba4 100644 --- a/src/gui/qml/views/createlocalgameview/CreateLocalGameView.qml +++ b/src/gui/qml/views/createlocalgameview/CreateLocalGameView.qml @@ -5,35 +5,43 @@ import QtQuick.Layouts 1.1 import "../../components" Rectangle { - + id: createLocalGameViewRoot width: parent.width height: parent.height color: "#FAFAFA" - MyComboBoxSelector { - id: myComboBoxSelector - } - ScrollView { width: parent.width height: parent.height ListView { - id:myListView + id: createLocalGameViewList anchors.fill: parent model: ListModel { + id: createLocalGameViewModel ListElement { myId: "comboBox_NumberOfPlayers" myTitle: qsTr("Number of players") myType: "ComboBox" + myValuesList: [ + ListElement { value: "10" }, + ListElement { value: "9" }, + ListElement { value: "8" }, + ListElement { value: "7" }, + ListElement { value: "6" }, + ListElement { value: "5" }, + ListElement { value: "4" }, + ListElement { value: "3" }, + ListElement { value: "2" } + ] + myValueIsIndex: false myValue: "10" - // property var myValuesInt: [10, 9, 8, 7, 6, 5, 4, 3, 2] } ListElement { myId: "spinBox_StartCash" myTitle: qsTr("Start cash") myType: "SpinBox" - myMaxValue: 10000000 + myMaxValue: 1000000 myMinValue: 1000 myPrefix: "$" myValue: "5000" @@ -43,29 +51,58 @@ Rectangle { myTitle: qsTr("Blinds") myType: "ComboBox" myValuesList: [ - ListElement { value: qsTr("Use saved blinds settings") }, - ListElement { value: qsTr("Change blinds settings ...") } + ListElement { value: qsTr("Use saved blinds settings") }, + ListElement { value: qsTr("Change blinds settings ...") } ] myValue: "0" + myValueIsIndex: true } ListElement { myId: "comboBox_GameSpeed" myTitle: qsTr("Game speed") myType: "ComboBox" - // myValuesInt: [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1] + myValuesList: [ + ListElement { value: "11" }, + ListElement { value: "10" }, + ListElement { value: "9" }, + ListElement { value: "8" }, + ListElement { value: "7" }, + ListElement { value: "6" }, + ListElement { value: "5" }, + ListElement { value: "4" }, + ListElement { value: "3" }, + ListElement { value: "2" }, + ListElement { value: "1" } + ] myValue: "5" + myValueIsIndex: false } ListElement { myId: "comboBox_GameSpeed" myTitle: qsTr("Game speed") myType: "ComboBox" - // myValuesInt: [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1] + myValuesList: [ + ListElement { value: "11" }, + ListElement { value: "10" }, + ListElement { value: "9" }, + ListElement { value: "8" }, + ListElement { value: "7" }, + ListElement { value: "6" }, + ListElement { value: "5" }, + ListElement { value: "4" }, + ListElement { value: "3" }, + ListElement { value: "2" }, + ListElement { value: "1" } + ] myValue: "5" + myValueIsIndex: false } } - delegate: ListViewDelegateFactory { - myListViewsHeight: myListView.height - myListViewsWidth: myListView.width + delegate: MyListViewDelegateFactory { + myListViewsHeight: createLocalGameViewList.height + myListViewsWidth: createLocalGameViewList.width + myListViewRoot: createLocalGameViewRoot + myListViewModel: createLocalGameViewModel } } } diff --git a/src/gui/qml/views/startview/startview.cpp b/src/gui/qml/views/startview/startview.cpp deleted file mode 100644 index 69379039..00000000 --- a/src/gui/qml/views/startview/startview.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include - -#include "startview.h" - -startView::startView() -{ - qDebug("startViewKonstruktor"); - myEngine.reset(new QQmlApplicationEngine); -} - -startView::~startView() -{ - -} - -startView::startView(const startView&) -{ - -} - -void startView::show() -{ - qDebug("show() in startView"); - myEngine->load(QUrl(QStringLiteral("qrc:/main.qml"))); -} diff --git a/src/gui/qml/views/startview/startview.h b/src/gui/qml/views/startview/startview.h deleted file mode 100644 index 6d10bb53..00000000 --- a/src/gui/qml/views/startview/startview.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef STARTVIEW_H -#define STARTVIEW_H - -#include - -class QQmlApplicationEngine; - -class startView -{ -public: - startView(); - ~startView(); - startView(const startView&); - - void show(); - -private: - boost::shared_ptr myEngine; -}; - -#endif // STARTVIEW_H diff --git a/src/pokerth.cpp b/src/pokerth.cpp index 97b79d32..86b27bc6 100755 --- a/src/pokerth.cpp +++ b/src/pokerth.cpp @@ -30,14 +30,22 @@ *****************************************************************************/ #ifdef QML_CLIENT //START THE QML SWITCH HERE - +#include +#include +#include #include +#include +#include "configfile.h" #include "qmlwrapper.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); - qmlWrapper myQml; + + boost::shared_ptr myConfig; + myConfig.reset(new ConfigFile(argv[0], false)); + + QmlWrapper myQml(myConfig); return app.exec(); }