From 2eded16b42ea870dee765a4a40fd32765143b9bf Mon Sep 17 00:00:00 2001
From: Techmonite <150219021+Starlaps-365@users.noreply.github.com>
Date: Sat, 27 Jul 2024 08:31:57 +0200
Subject: [PATCH] Add files via upload
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The store keeps a list of customers so that when something is purchased from the store, it is
recorded against that customer’s name. Only the customer’s name is required.
Only two items are currently sold in the store currently – books and magazines, and only the name of the item is required. Clearly, a list of such items is needed, and the user should be able to add items to the list. When an item is added, the application should automatically make a backup in memory in case something goes wrong when the application is being used. Provision should thus be made to restore this list when necessary
---
Store/Store/CMakeLists.txt | 75 +++++
Store/Store/CMakeLists.txt.user | 420 +++++++++++++++++++++++++++
Store/Store/Images/Open_document.png | Bin 0 -> 1522 bytes
Store/Store/Images/Open_file.png | Bin 0 -> 1498 bytes
Store/Store/Images/add.png | Bin 0 -> 808 bytes
Store/Store/Images/customers.ico | Bin 0 -> 4286 bytes
Store/Store/Images/delete.png | Bin 0 -> 2292 bytes
Store/Store/Images/exit.png | Bin 0 -> 1672 bytes
Store/Store/Images/help.png | Bin 0 -> 2245 bytes
Store/Store/Images/info.png | Bin 0 -> 2535 bytes
Store/Store/Images/new.png | Bin 0 -> 852 bytes
Store/Store/Images/open.png | Bin 0 -> 2073 bytes
Store/Store/Images/save.png | Bin 0 -> 1187 bytes
Store/Store/Images/saveas.png | Bin 0 -> 1984 bytes
Store/Store/Images/undo.png | Bin 0 -> 2752 bytes
Store/Store/Images/xml.png | Bin 0 -> 878 bytes
Store/Store/UDP/UDPListen.pro | 19 ++
Store/Store/UDP/UDPListen.pro.user | 269 +++++++++++++++++
Store/Store/UDP/main.cpp | 11 +
Store/Store/UDP/udplisten.cpp | 41 +++
Store/Store/UDP/udplisten.h | 26 ++
Store/Store/addcustomerdialog.cpp | 87 ++++++
Store/Store/addcustomerdialog.h | 45 +++
Store/Store/additemdialog.cpp | 79 +++++
Store/Store/additemdialog.h | 38 +++
Store/Store/customer.cpp | 10 +
Store/Store/customer.h | 14 +
Store/Store/item.cpp | 10 +
Store/Store/item.h | 15 +
Store/Store/main.cpp | 11 +
Store/Store/mainwindow.cpp | 253 ++++++++++++++++
Store/Store/mainwindow.h | 56 ++++
Store/Store/mymodel.cpp | 50 ++++
Store/Store/mymodel.h | 24 ++
Store/Store/transaction.cpp | 33 +++
Store/Store/transaction.h | 32 ++
Store/UDP/UDPListen.pro | 19 ++
Store/UDP/UDPListen.pro.user | 269 +++++++++++++++++
Store/UDP/main.cpp | 11 +
Store/UDP/udplisten.cpp | 41 +++
Store/UDP/udplisten.h | 26 ++
41 files changed, 1984 insertions(+)
create mode 100644 Store/Store/CMakeLists.txt
create mode 100644 Store/Store/CMakeLists.txt.user
create mode 100644 Store/Store/Images/Open_document.png
create mode 100644 Store/Store/Images/Open_file.png
create mode 100644 Store/Store/Images/add.png
create mode 100644 Store/Store/Images/customers.ico
create mode 100644 Store/Store/Images/delete.png
create mode 100644 Store/Store/Images/exit.png
create mode 100644 Store/Store/Images/help.png
create mode 100644 Store/Store/Images/info.png
create mode 100644 Store/Store/Images/new.png
create mode 100644 Store/Store/Images/open.png
create mode 100644 Store/Store/Images/save.png
create mode 100644 Store/Store/Images/saveas.png
create mode 100644 Store/Store/Images/undo.png
create mode 100644 Store/Store/Images/xml.png
create mode 100644 Store/Store/UDP/UDPListen.pro
create mode 100644 Store/Store/UDP/UDPListen.pro.user
create mode 100644 Store/Store/UDP/main.cpp
create mode 100644 Store/Store/UDP/udplisten.cpp
create mode 100644 Store/Store/UDP/udplisten.h
create mode 100644 Store/Store/addcustomerdialog.cpp
create mode 100644 Store/Store/addcustomerdialog.h
create mode 100644 Store/Store/additemdialog.cpp
create mode 100644 Store/Store/additemdialog.h
create mode 100644 Store/Store/customer.cpp
create mode 100644 Store/Store/customer.h
create mode 100644 Store/Store/item.cpp
create mode 100644 Store/Store/item.h
create mode 100644 Store/Store/main.cpp
create mode 100644 Store/Store/mainwindow.cpp
create mode 100644 Store/Store/mainwindow.h
create mode 100644 Store/Store/mymodel.cpp
create mode 100644 Store/Store/mymodel.h
create mode 100644 Store/Store/transaction.cpp
create mode 100644 Store/Store/transaction.h
create mode 100644 Store/UDP/UDPListen.pro
create mode 100644 Store/UDP/UDPListen.pro.user
create mode 100644 Store/UDP/main.cpp
create mode 100644 Store/UDP/udplisten.cpp
create mode 100644 Store/UDP/udplisten.h
diff --git a/Store/Store/CMakeLists.txt b/Store/Store/CMakeLists.txt
new file mode 100644
index 0000000..62b5d0f
--- /dev/null
+++ b/Store/Store/CMakeLists.txt
@@ -0,0 +1,75 @@
+cmake_minimum_required(VERSION 3.5)
+
+project(COS3711 VERSION 0.1 LANGUAGES CXX)
+
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
+
+set(PROJECT_SOURCES
+ main.cpp
+ mainwindow.cpp
+ mainwindow.h
+)
+
+if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
+ qt_add_executable(COS3711
+ MANUAL_FINALIZATION
+ ${PROJECT_SOURCES}
+ customer.h customer.cpp
+ item.h item.cpp
+ transaction.h transaction.cpp
+ mymodel.h mymodel.cpp
+ addcustomerdialog.h addcustomerdialog.cpp
+ additemdialog.h additemdialog.cpp
+ )
+# Define target properties for Android with Qt 6 as:
+# set_property(TARGET COS3711 APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
+# ${CMAKE_CURRENT_SOURCE_DIR}/android)
+# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
+else()
+ if(ANDROID)
+ add_library(COS3711 SHARED
+ ${PROJECT_SOURCES}
+ )
+# Define properties for Android with Qt 5 after find_package() calls as:
+# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
+ else()
+ add_executable(COS3711
+ ${PROJECT_SOURCES}
+ )
+ endif()
+endif()
+
+target_link_libraries(COS3711 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
+
+# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
+# If you are developing for iOS or macOS you should consider setting an
+# explicit, fixed bundle identifier manually though.
+if(${QT_VERSION} VERSION_LESS 6.1.0)
+ set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.COS3711)
+endif()
+set_target_properties(COS3711 PROPERTIES
+ ${BUNDLE_ID_OPTION}
+ MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
+ MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
+ MACOSX_BUNDLE TRUE
+ WIN32_EXECUTABLE TRUE
+)
+
+include(GNUInstallDirs)
+install(TARGETS COS3711
+ BUNDLE DESTINATION .
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
+
+if(QT_VERSION_MAJOR EQUAL 6)
+ qt_finalize_executable(COS3711)
+endif()
diff --git a/Store/Store/CMakeLists.txt.user b/Store/Store/CMakeLists.txt.user
new file mode 100644
index 0000000..cd4b710
--- /dev/null
+++ b/Store/Store/CMakeLists.txt.user
@@ -0,0 +1,420 @@
+
+
+
+
+
+ EnvironmentId
+ {6fa689f0-d307-453e-aa89-3b1bf25a9d4e}
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ UTF-8
+ false
+ 4
+ false
+ 80
+ true
+ true
+ 1
+ false
+ true
+ false
+ 0
+ true
+ true
+ 0
+ 8
+ true
+ false
+ 1
+ true
+ true
+ true
+ *.md, *.MD, Makefile
+ false
+ true
+ true
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+ true
+ false
+ true
+ true
+ true
+ true
+
+
+ 0
+ true
+
+
+ true
+ true
+ Builtin.DefaultTidyAndClazy
+ 4
+ true
+
+
+
+ true
+
+
+ true
+
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Desktop
+ Desktop Qt 6.5.2 MinGW 64-bit
+ Desktop Qt 6.5.2 MinGW 64-bit
+ qt.qt6.652.win64_mingw_kit
+ 0
+ 0
+ 0
+
+ Debug
+ 2
+ false
+
+ -DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_BUILD_TYPE:STRING=Debug
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+ 0
+ C:\Users\DELL\Desktop\MXAT\build-COS3711-Desktop_Qt_6_5_2_MinGW_64_bit-Debug
+
+
+
+
+ all
+
+ false
+
+ true
+ Build
+ CMakeProjectManager.MakeStep
+
+ 1
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ Build
+ CMakeProjectManager.MakeStep
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Debug
+ CMakeProjectManager.CMakeBuildConfiguration
+
+
+ Release
+ 2
+ false
+
+ -DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_BUILD_TYPE:STRING=Release
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+ C:\Users\DELL\Desktop\MXAT\build-COS3711-Desktop_Qt_6_5_2_MinGW_64_bit-Release
+
+
+
+
+ all
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Release
+ CMakeProjectManager.CMakeBuildConfiguration
+
+
+ RelWithDebInfo
+ 2
+ false
+
+ -DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+ C:\Users\DELL\Desktop\MXAT\build-COS3711-Desktop_Qt_6_5_2_MinGW_64_bit-RelWithDebInfo
+
+
+
+
+ all
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Release with Debug Information
+ CMakeProjectManager.CMakeBuildConfiguration
+
+
+ RelWithDebInfo
+ 2
+ false
+
+ -DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+ 0
+ C:\Users\DELL\Desktop\MXAT\build-COS3711-Desktop_Qt_6_5_2_MinGW_64_bit-Profile
+
+
+
+
+ all
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Profile
+ CMakeProjectManager.CMakeBuildConfiguration
+
+
+ MinSizeRel
+ 2
+ false
+
+ -DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+ C:\Users\DELL\Desktop\MXAT\build-COS3711-Desktop_Qt_6_5_2_MinGW_64_bit-MinSizeRel
+
+
+
+
+ all
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ CMakeProjectManager.MakeStep
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Minimum Size Release
+ CMakeProjectManager.CMakeBuildConfiguration
+
+ 5
+
+
+ 0
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+ true
+ true
+ true
+
+ 2
+
+ false
+ COS3711
+ CMakeProjectManager.CMakeRunConfiguration.COS3711
+ COS3711
+ true
+ true
+ true
+ C:/Users/DELL/Desktop/MXAT/build-COS3711-Desktop_Qt_6_5_2_MinGW_64_bit-Debug
+
+ 1
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 1
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 22
+
+
+ Version
+ 22
+
+
diff --git a/Store/Store/Images/Open_document.png b/Store/Store/Images/Open_document.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d4f488cfae31e1f1b7c622ee72a4f8894c11988
GIT binary patch
literal 1522
zcmV3kj$8e4Cb2?)mAL&TEaCt?gpUo#{-QE%E~IBstRm28*GXKMFc?<N)7tvV1uFc=JQ
zjq@V`P#8swsb;)$@bFK?I~eCKC)%-kh8qq|<4*TrLzB7n!@Zz({Rm3sgyfmAu+MT!6((
zmo3}<;l@prTZKxwqmeK?9uFK&2QFT?0A1ISOe6@94Tr-?uM?ad(sL{27g^kdDlIL=
zw$G}tbz4wBe+fId_AA2ysD5VglBUgDwnEcX%56hL0OaN}i5)G?&2s0eYGcA7R8k?U
z#aLGCUf0vG2s>c3KfdO=O
zUPD(XggLdfa1)~O-~oiY!?4>m45dGrFkQM+B<>%ti?vJ6(
zeULISc~}29^pxy@u1@3vHn|h8*8?YgJ#+fBOjJVvmn#S7&Yh$GN%Z#h!eO@~&RP(&
zP$L$NqPltpay_}yCINZla5W0DgL0Fu#|?@1ez_h`t$2jHjsl56;97)z-Ea!3(<=dl
z^uob>%K3YHJDQrBuyEm%$oJ)=t*wm;q|o2rCwD4ZabTdIme?^EkFz_5kj>&ODJf+Q
zX$bABMxnFW09Z@_Nm(D`zOhk70Pw*nTbNX3Gh4t>^A5p
zHvnbxfvo8y$e9fGnsM|fX6f?HNHORe5{$l1475__+F#Jy+b2aoUMmkd;gS1&nG_
zC4kDha5|k5ApG4d_*E0&MZQ;4p#Sj|;A?n|1n=^Wa~Pe;ateQdYq52>+#W$V+zlIx
zEkXZ9zlY5(h|>bG^Mb-cj2}Ni0z`J!q1e$P&3C^ED*!YCbgYD${q)EH^du1e
z9O%Btgz3Klq-~kmYFa3qNs8b_Zxpd+9UT{dnHw_zZOfr%)r|~bv_p>(Vh=+5kHi0R
z2H;9P0Rm$KV2(t`*Kp5nH32ToXU|uTDL}ISGF;P-ngD03p*o80b4vQ3ru;)8w)Ax*
zpLaD
zV*)@Wz!5Lc@$6CNOqodsjgZIY|Boa;=6WInus@5(rF~>cg}mv6@%Jc(1Xz>-_+I0=
zt^BvN;yEpojV|FG0K$SL8Gv0@sLDTmJ2Rg|`aQ{crvlGq0KVZ#s@(meBL-L|o`yEo
z>rOe3=|~6*RzMfJUpcWUtGwm`>zD$ZxthkD_5HsJfVJ}{WAhL1@e9##z6#uf5#{mF
z@DXsd1#69eTYyiCeOU9-qp)(mucN&S*l`4D&Rcl-_N}EqoAE5;KAg$7jq8kEj8o#`
YFaAwFo);SVRR91007*qoM6N<$g343V+yDRo
literal 0
HcmV?d00001
diff --git a/Store/Store/Images/Open_file.png b/Store/Store/Images/Open_file.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e6180a432cd5ba3ce6ffb256d222f4a0d2a33d3
GIT binary patch
literal 1498
zcmV<01tt24P)A3NnyucGAdGX{p5nzI?H=+z
zf!BF#tX3eQk7Cssh~A-Q+pL9rn24EW*-fOaZC|LEz|jf#s%k?8dk|o~}$;M>BNkzp`uH1MW?&2Rko!
zpD_SDBqlvlAd=6O!rZbsCoq|h=))NBVfSgnvDSkfoX0YbJvf$t?CfkPDJgl;<#KU#
zb#+zM)zy7ktrom6nM{Az3tbuvGxx>SWAf5~*0Sr?Cv9fiP5ZcrA1FYh(J%!C1%sIM
zL-1&=h%1OHolaMULari)o2@s%7~do6tu#7~=kExcH`^Zy^8-cm6PZN<8dPHuJ6wEy
z@%QFBLQ~i%mI1MdhRr(<$(1T~OmuW~ghHYCiJ~aDhryv?Fj?#n7{Gvp5xP;#b+0J&
zQdL7kLsd;pO_Rs`E4MZ8c0Ns!&yizH^1Fr$mES-vd=#ljPY{2M&X^^7rf3Eoz9!Qi53npdg8soF6zK>0J`0$wb`T0Ei~~FbNN`8UBp?zBEJAB}BV##|Hr};`3L1!|
zEa4=kS9vp-C8vQ7N*Yy3-#0iyNE6~6If(rcBEd)*$8lgEc7kcp2E^F}QSNtu@Gf7L
zz&T?6CcXvxj`RLWmsbEK9__j7EuEm0dY1wP9le7PHcbJIIz3ERDbOo6P|6q}+z`y<
zwgBbn@M!^}liwr#r7_j$u~eW0pvZ3oLMX7gIVfu$f@krVb(@UP*QW=WOaXFf07Qlc
zLTyt!w6?cEOk_MTR6oR$10Zr=^@-eTO|7mJVkn6^haOl$NvDHyCpt%rdDJwyi$fQtMA6le9B9Ou9P$f-dU=_yv1;s08{
z(D|Tz>C8x>v+D~0Ly^y&`e;AAysdXR={g+#6?$Ncf80_~EItIhvkP2}St!vxrR*#R
zZ>tx#9U`rokR1Y=?2#tF3G%0Qg1d7cu!iGPJ$ks>
za&nVAGd*5-F(mJ2;0=YqxqREp6EO_1>m#x{OKrnEki+X_Njb@)YazM&f$iD-e~cb3
z*EwUJ-(a}yO_O~qrD1Cp26U@3(}1;Ur=Fb$-KSq$;`S6xk$aGa}fP0!!n-+wQUJeeqjlb;0_;!(c??;Sx?MUGboD~|fzg59Q)i&y@6DvZo~
z@=QNSoh`!ip3pE^FXsCULoZv?=;SNwM&B3y0<92z*XW~5UjP6A07*qoM6N<$f@_k#
A^8f$<
literal 0
HcmV?d00001
diff --git a/Store/Store/Images/add.png b/Store/Store/Images/add.png
new file mode 100644
index 0000000000000000000000000000000000000000..070e4aab466de172221ffde140108a3732682077
GIT binary patch
literal 808
zcmV+@1K0eCP)njCgK^fW6G!i
z!4yzc1BqxXe1LTHK-cmeMVOAK!UsrLDJib*2$iQ`GL;Dq
z5TwH)0CA|N4-g@aYlO<~pArD3fgRH_?Qm{vleTm~38VdA|82nL_BXhB^p^2++>WUM
z4kwSu9eIuz5j!Nl>t4&(n`^Mq{4B)rRO}kuXNH3?m^(ACQ>6hii9^1|;E
z(N9WzXs84uA9I)h$eqjg0*uEFc6Y7BP#CM+wft9m3qIB>u-;gM4(*tE&AQ^$<^VQ8
z{!$-+RAkI&x$A&D=M+}|E<>fh0)N`Sjq@zUan}Hppg4!%>*CcyFF*{EeJ!tcs<2Y~
z0IT)o;dve;ZmZop@_O-F9{^wxPluDo>ql!7%GGzG$^!*c`F50ehlw=cbt?i;xY7r}
zcKnuq;RRN%Ey2&$Rxn{KIx4MZ?#_w)*otD~u^@l3PYsyH({gFxXLnBKjGyBJF#QsO
z4gx@nXHVsVcESaG7o6bZhMETk2Q3T&5c%b{&z{x|<|UZ@D6JsC7#~?R?*{O?2f)oa
zo^f7qxw9JJ8JPVjZ3KQBYJeRDhn1eckPrWLECAg0D!Ln}4##}QD^vhC=U#C<^Tq3<
z0C-=LJ6E>5;`k(QhYJnh$x=zY(NJ7>IFL=IaCrm(kKZnK#XTJ^61QOf{0NG0ScD2-
mdT%HIVAwHLU;{Gx@AyB0EKYMH^yXs#0000-6N;ToSAd0qyME0m!ck;rpK?v;pAH>ooyNe?}whf30uq^Dj)N=b^5
z8qvE{PMzxXR7z4wDwHCjes`^%lD
zVohVQSYiay#ad6G{Y)X}zEVWVc>{tc;UXd6)A0pTrw|GVg+riy96~Z7lHf<6!*j*?A#WWGDjG2HX=Y+7pSqK}9#>33a
z48_I8f?~7qW{1ixB5@P%d
zU4+2+3kwI0{Tzox_BK=+(eG!pgYozEe#AhQT^Y;F-|+D|7}c%Eo>FNjXV1slo5IZc
z^XG4Ge+(7nWrN1@V;40Gwj-lG7bw|qZpd@K>0e3p}gFxx$h|K01C7)0kwSh|KlPQxDBr<2Iq
zKS4m&ON1A9Bj#Zr{Ig#`@lQ*H1o@-BrV6sMeb~1TFg6Cs34pdXux%T#Y}tE=ind_d
zv>Gg&8qhZf#}FEJgck57LvxP*TDgBasmz?2GrF7IXOT~>?LN;ZeZ?#xanRnmN0`Lc2a*Q
zcsw5RveLlK&Oj089x96R(O6T7lynYOXr6+)^KGy_(xGT|4Vo^Au!$^zu1`7)ZGFMb
z$-t{;4Ny=3EGz(bci_w!z|s=fy&G7&77!PI#rUUBf5d+mW)in5!G7y%Ntl|N;*fzJ
z%#00SeZ&lIPRDU2EClz`Q?c)OB$STDVX>+!Hd$PQVMqy#{O?2C={nMqlJLB~8eMHo
zkd%DG%-_})u(Jd7^#L_CVC70M>px)r4&L%}qN8-h+LP^;_GUOP$K9h6h&{Lf=hZ~u
zvPl&B8&_bTraJt+PNU#{HXQw8pzjg|Er**pa54dofwxgsREW058gxFdM^{S&=Ku3=
zW(~+I0ZsBs(dQsApbws>-(k_BcFdYpk2zCQd&!*DvRx%n86}UJo62}}Qw5b*{{vp|
za^$*+AkAt5ZtedbPXGQF%ns=zFEa&Qt&LwLJAs3rr({D~x`%lVqaxd2=v55eQ(5qJ
zDZ-pdw|d2Y+#E;zzjDvY5w9xhlXcOMs)w35b(Dr~0LMcN={CYhHe(@PcMJ>;=pZLG
zk(nQzc`>sK4f(D*u9YWJR6Fg4PLRr{G
z_G988Z17l#QNBy_)y7}=p@sfNWh4)gh^T>r^`SQS-TQ7*)ksy&|xfGA$
zlu?(s2X%M$p(=Je$}g@3_p~Td$@(Xm3L#EsEKb;3f|rwu*G-RxP)pjB!TnDvc-Xn$
zN?^Wpj4tZ_Zp`=o#J}PErnwbdUpYLC*@CjmzoR~87oH>q;lV90o3IeJYX)va
zTtIy}7affc(b4dAu0_XwF<*M8H1$rOC!Ik2s$Md4)`f1F*P3-g9JS%wkai~p`hFZ{
zZ_T}Ik4q}!;c2oLMOk;zR$Gc!Pb$6%a|gc>^X1%C>RjSy6IlK-GbICMCWZx_@))+a
z>aexpVrPk>%tXAXEg6w|UMBchI0gvLmxbL-z7&%;C?;wp>L=y9i9bvbS2FY+_NX-M{CaCWE6CvJisN$re^&uCnRRsiE52lWrf`Wu_#!o+9cfEsK
zNFt2f|AN+uIA~g5>XX>vkT7MQEZz6V5rn9JfxJP;NPDY-h6()Kj-x#L4q7U?gnYCR
zH&fH&Pdv^~1~)$Jv!8$P=2a_lBRqPwcl=>Nbkhl=sh3|Qw%Y^?-dp>h6$Q2pLcE+&
zmKl!*UIrS93AE-z+O>H}sLj6%?yXS1mZ_=x{*^PmI?5Xby6HVgsW`|B+*>0^&L+Ry4xFo=z57RSQ@^yjyYQO*0eOPsSi(;Pk#rVo-Twe!Li}z3
literal 0
HcmV?d00001
diff --git a/Store/Store/Images/delete.png b/Store/Store/Images/delete.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce4eb1874f5ec025f6e3a9e9bbc17189868bd781
GIT binary patch
literal 2292
zcmVYZsh}3@AmRe2xU?v(s1#99PD`C0nRaT`TBo);wsWSZ)0yKR
zt;dd49GAgStfy1$&`zxif&v1vh=6!%U4VcfdlpFYUh?LCFE26Bz)b&`ch1fCmhXPQ
z-(9|YzfkahymHlQ>8Z|69skI>n?p^eyh)=W3Z~=j?XfuapcsD%_^TRCjZi3@|D9GF
z-)%D8$5(oHB-|1}@S#sX|3aqg?}zt4*wc?zq~q&ml+phY{M($&td%J%(_!1|o1s{%
zUDIPSmE$MfL=w~lU=JLu2o7v}2Y5&%FhW~k_aFA^|Iyj`Jbr8WZzK@BBs()}S@Oap
z7`<8nk~QhDeajnA*4_Qej|RiHIAz$C1myxQpeTy|Ytff5R^I^DL7d03APiH3*~<%d
z?S7Xz(cYfId%`dYcxztvhS>>o6A-)-Sep$1MUuG&e)rCHxYXYM>RmgDK?ey}0_?#v
zXTf;+3gWVyA|XIT5E2Z6h;Z2Q`ex?u9UY5tdeg+5K=6j`ujR)_Mn-|L^15B0UxN^l
zuFZgL+qS?rotX8ZV&g2=(j8$V1DP
zulP;ox@<6BtF$W;C08#vNJK?KziABi?)!6pkyiTxE^s?fqdA?qa`l>JicnS31U$oC9pu}@zM333XJDR~TDu9mEz}_Q=trt5w
zF5#{?g#<2=91sP2dnYar4J~@_w{J~XhlGH+wQXGdz&1V{;=}}KL=q2rdmt+#6ZHT7
z!3oaI!O@1`EGJeFC;|~Y9Ns;0h`y}VRt?hhbpno3Pw|Q9r$7=fgod8^;O(6Xg}($$
zEv-(gxy4<)Lhi*262VjA&w)F#-QjKyoF?Ejcm@T5N9-)vdf+o_Nmp0J5KUL(ilxN;
zCz~wa_38R)8s74eu8o
zXUn^~Y9CuHn4xePr4D6?nC4oD$i2VP$0ud!v}pzJ<-eiSsMRo5Q#T%X0uk110qej3
zScisz85sdauLl};l21%D7}QGGRbEQh>vT1P7E2ATk68+}DE$Q7T`4BdQn{B`LYh)p
z_-5|Q)8nFN!f18vIIEe*eZcfS1}l!%egroda5WaJq>SPyj(r*)1V~_COA}qE(^cvi
zhJce&+`xldr|Jba~32+|ECAsPO@>ravmTAd=utE
z`KS&Gv>n5Zdi^{6cI$#)dLF>?`mb22d{y3aD<%bZcz_VV{09r(nQ@fH#zKjC6i)VZ
z4>aiYFTxaE)GYxluf+=jgVWcgEQQCPeePDlF=c!q1uj+ilf-c!-gckF~S!C05c9{imw^*Jmw!7y;Di1Px&lOW(`
zE*$o48KhEyCvN2(4K+;F$OviWx4`8*;UtiwQe9aVtXz^7{uDeucaF392>});Cjklq
z7pLGVR(Pb-!K#?q(1+&;#u)}X0TY)OcJIigaxl%90e|}Gjw??(g8vgQnxIxsUL8oJM)=fEsH0W%j4
z`|cnh(?XQcfsO8n_TkXg!9mi>x$^{-J$?E~BMW!uPp~zVus!=YL1VC?j8K-Y?h5CnK#
z(t&|2l9<$zprB+w508rdOO`{=cg0{d8eIt3l}XCUWOATmXTyiB%`{fHN*zs;#!}(y
z>B%mV%a3mi)u@sMKG0iNJB|d+uOP%RK5IQ}D!BmnO{R+Wv9Uw=>JnG+!o=dW8gK8T
z1q+`Qc9oXEn0bsZS@vv~NMu0Iih(_CEp*%HXr-QENIx$Ddu^ws0>Rt_sq}QNO07yF
zBpT{C>#ckqkhS9Q+>l%P1Kcy28u_kB3RIONu>+Le-W$Wbz4w2Kq4?>W^I$fcI0_P}
z47?NOkt}9gjF>|-UEu;g#5>AY;pLSSFOi(dkBE}TvYzOP8=NNzftl;GVZ()DxMwyu
z_nOUD!QK_gxuD0f3pf&LktjdZ%j@IA$tf^=r3{23G0=13V0Tl!^^Vb4*Ke_q+D`iU
z4H(~8xCVy$%V+ueevum%u2>`#L2pepL~Pmwx#!NpU6ZK|{~?v};8kG%x5c>D0YX9%
z>f@6eEf)XfVCsv4VS^riUtK}^`E@+WkUn0{gZIJD8w(dLOz1_J6UTDHBbBKOlOeCD
z5SsM*=0_NJ{7$SV;p=kb=fp}#k~K&p5@p6qr3cB!YlDN=&~n0i5T;6HIOS?$P3qjqepiU%jHxtrvT+e+vfj$cWon~e-J=dRI6{#aJHaXU;w!gr>h
z-zpD^%DAo96a9Ke%$+-P3IYxiK`2rDoO_eFeJT=ClnAh&E85+Glj}cZvAD#VZdWA$
O0000rZJ)AC{SkIP8$-FBZ9qU~Qf<)g|FgC|4h>XX*DXSZqx
zX#RdF`Jl#H=y=Rpv<9iG-$i8NBIpGXA%XxhETYBY#?=ZJOzE3(tE!R3(hgAf^+YJnj5ait)#-(|iQ2BQY
z-aqY!1NV7L;8l^)m9N%>AcNGj^04(2d_8#$I(oa1m8${Zc2tyMNmrM%V8?9I>TqG7
z4?uFC9f5koIQs=9bI(?=^}%6+2hDEqv=C1iSHb4!!MoVi|H{f1Vd0
zv8NZhpb+WE@xH>M#}U>SI0?YqEuf`Ski?GZUx9td&SGf;h*`A?H%D&5O7AKk7kB{@
zY`x%g2DS3p%&SLGe$PN$v`75YE}(yifTQUg;Z|UPci=$24}g;Ce~!huxoA3l5?36h
z$SQ1C0b<*Gpwov)O-L>{P8KG_+koi0wU?mPMzd$?gu@|s23+DG4qg}ou(+gzrohXc
z#BQe#0UaRS-9Udo$lxIA%FD2#tQIPuW5~sX
z82QG!`H~AEc&+9@wUF+d!zTb$6))x9_PA
z1lQY;5t>xb!HGvRKBCv#2`l^u}BJLZM-xj|&HwD*Dh
zgdxksm`ON##i9bZD!ah3B2=1=o!)G^2L#%50MCPS(aTuQNb578WSG`MgbqBF&K?X)Yke+n@*#W32lrvZJcCk+c?us
z#_40mm}ELukxr71|AA41rcu=TegrkBC=?Y|RuGnb-uJyd_wK@wI@Q(b9e(WY-MjaE
z&i8!JxjzPpgDu;!hV{BujmRC66};1(%}a`EO|eIGRd2PWyALs%-lA)0?%T7V1^>r`
z>3@^<-U+d)bgXUh_-t4$EP{fJjvxy;h9k`JUu!Mb}IwoLRVBoXP*dP
zP(VkYg!X`lwyqe2r~*DDw#hNIS(eonO~DmSr6s8?J#}-s9|4yc+A`ZHG`te~TtO5u+ZSP6OPR8Ql~7^2LV(
zJhQ4!zk1V$+;Iii_I61kI0a4wG=iIfjn8zRya>%are$(0-Sao!!xZAWEP^vp)1HiXBY}@D8W#s
zI(kA1{`OftzNuM=ECMh}AW1SxUq5PuNfw|3*`p`n4^^e;3&ju(^T->{V%!J^CXR6u
zh{e3IuSY}eITiPU3<6ON!6^BG+VFV8AzY|ggsgNMcu9vK%9v#UB(FdR(z7Sv_f<3C
z?+PL(L&uy#5At&yrnBSqr#G~2b*WfiEt0_)(<_ps;N)=v*!?mx-G*8OK*MbI8%YDy
zngH%06R^3m827tFn4D+B$~i;O8&Zx8_*K#NLUD1JJPrX}#<0Ri=mnrTLvw%TErU%?Z^6~4}XVUQCQ8LkvvMFi!s!_t86EbdfgyFFX
z*sv@Mh2vegd`rf=pGyRwli?IxI9ZQ#HA~Gll*k(~LBjJtGZcU)R6j2X1#S>P);Mf_
z<9V}w0vR!b_=m^B07pg3w`9i%3VC5{Z(4#XHm9XF!
z1^}7x;G;ay50Eh$%a@d+g=(%FwWaK1!64=rTJiH`Iq;?epB{%M<2YId0CmmA2D1%A$tZC3W;-0-k(gCBmu9(fBaIh=3R2KEVhV$WbGaJOkcj#vMP9#|HnIxOfT
zfF-{=0=4UOcC2xW0iY!y`qzUBu#PMglq^VONDmxIq!NTtG0l#OSy`BpXGiI#K>T|n
zdo4bmH8P?9+CChseigEAftz+vy&(}lc;^V@_I)|R^^f}!0N+^;D8Qy;D4-5)yEQMBV03c_%JlV16|O6u*Ew+r!42$9O)TOnh7cHTsmnTP(wGJ-w&cEl+w)-#Qt4}uXn9Q
zRAe#KI|$(7<`SjnVk_Og=f7L=0RZ!4@lHeIxpeI^`n1%ZHY~&D9tCUauy{aI4MP>i
zR6@ic;TrxyD^e#L+3>_6XsZ~cmD`ic0+dp-`pcaEa%
zab>`+Vw@wEGL8{W?fw~*=G-Yd^~E1ACY{t10}MV2w-F2}1FWD`g^TMW$^P^|_a|Cx
TU9*>X00000NkvXXu0mjf0Zt`s
literal 0
HcmV?d00001
diff --git a/Store/Store/Images/info.png b/Store/Store/Images/info.png
new file mode 100644
index 0000000000000000000000000000000000000000..73b49b0d8a0bf58318b7de03cd5782cfa8ef6ad4
GIT binary patch
literal 2535
zcmVpQ>m
zJHKbm$RZ|z?L-w0s&TV3m{@z#&B
z=h;%y>@*sbA=Ze7rD+eLq2_x&81#-qiqi_uEO10`G1`igNQ)$^Y_z+^MNf0(iQ%S`
zZ~7XJ4L=sZvh5uu*2ILfxw&yEvy*7h)0)?sQBgbIxaNj+OXJ{|FQ-8Fs0?TCN)RCg
z)3_i4rD+uihc86%d^9LSYkN@Ysk{8yV13#4K-ZW4M*u9{-svzJ4PPvJ)=`*lXTXdx
zrf3p#P`oEGmhrE(bqI1D6uk3lN)&jVM~3rFlDZfHp{>ejfO(t)2(+QLC(>Jc;`iQL
z@9pJ7gM1Xgv%hGh^d`%D*$Za9u_#*)W=aN%QE6A=ieV7Y8xsGDYn^c9?Rk)u{D3_7
zunb45L}fXK)}(>f(Ff4sV}u+c)J~584VCpiPv!niqphcIL;)0(x(btK*=v^OTbXz>
zfCDAU4S}oO2S0x)1)iHnM*-AyOK_$^Wq_H|C!;b!0O`>g9@hwQ6g0F<
zfb06-FAdb}+ro}@j41#LOI>Ao1?fM2CJhyDA_`V%=Wq%LT}I0s0+B^E~a1Riprce3N~-Zf`v}Zb-eU(l>j7RiRXkx;<=KJj0!@B*YyUK
zC3n9F^;iGxZ$G*2Wh#GL^Q~2DbC+e>DFvmddCQ@jgb4zGoOgBjU|9wYzuDq^q;g(u
z72)VjK@lC9I!4U~1;8{AF<8(z6w_!3pz3Oq(0sITE46sry^-&IKPS;*1h8NT!sxw-
zGlGU$4FvIC;AJHwJYL(7$G|H^x+s9-)dHMvP)ogzP)>|%BGl1?AVHriw(IAVH)3iX46EN6*!5kii4@zf80en`)
z!@usR04M~YS7NRjHW(-{AR|OeeS;kI^#vhsi34gY5x|iJd#OcR8z(mYU}0=+Qy8pq
z49vFc!D6PA^kG?0Kt!gz=T!#Ax_aP?KjcIKd{W87Kk9{O2_{917&Q>DQLK}!1Vh6d
zjE;mr5+ukgbV7YaJ2ZT_XdkukwcD+0URsjdGr+@SSOk-q0jrsY_&6GARB0oIr?kLf
zGWRyRpyJ@-D1c)X9GtBe)uMw8>S!%h@n0w;Krj%2NSIeL%wW{RoVhk=s;rY*J}LPf
zmAmEInZoCbHxk_jg1n+|Qu7T428;&P3q~o+vQpC}1mbC$3E(WfXjE9dPr|0{{oVWTE^nuU1MjktG4eL-aztmPqx&mqn~(j?@GQk4K>GN}0F+
z`mUc)8S9VbJ91Xmty-PNxO+K#NYW6@+;5QI#5hT_QFrG|0GC;~P|qn?SB+Vg!^vrm0H}^s3l|9X4&1J7pj-s8q_^cPJi@&p?P>;0xhFQ#GS}C>Bb|Xzc
z0T^nZ$-p6G;Cwx=gozkb`iBNWR{9E7PpoQIto0_74q9$pVf%0X_Qa&Gwp4L2ZEe}s
z^rh?nR!kjw1Fm4_xt+2YxiDi(X3bcuvt(@8GpF#oyOu6bW5^xfuvXo)9k40T3!mOq{wA9xZS|4V
z{1;zcQj|tpVrb~cts9HfkuEnS2}RcuXjAi8R25IMi1ZCo6%&%o3i!^(F6gWMbU5HX
zeViL>+lNc^PS@3pVa?o-9Gkj&e{#-qoAZhno195{Y)~@z10wbVDf)&iPJIVR+D=K$
zfAT;K7MfVBs1p+$xbHN|Lk-6VCwecR;{5Fg@PUqph5g7dJB#DZj-uBSvevwrnpfh;
zNVh>U0wLKk9+Du8d+o?15u2!pL#h1+8jMIa*?NunIq=>e#B8aE_+97jPkO743gLm{
z(>;G805WuDhu&l_D2bU>@{VOzL2**%;`n4o5?JF6V6*73oYMHsfNdLFw;#U=M*{)`
zaI+E^^ulQGZ8qeo9-8!4-{JzUGD!$s!zKUcH{ugNPRTIDWhLlhXDv4*A0qaTa`*rM002ovPDHLkV1h|Vx`F@z
literal 0
HcmV?d00001
diff --git a/Store/Store/Images/new.png b/Store/Store/Images/new.png
new file mode 100644
index 0000000000000000000000000000000000000000..12131b01008a3ec29ec69f8b3f65c4b3c15b60d6
GIT binary patch
literal 852
zcmV-a1FQUrP)IE2xvpcKl890$E8eWxeF8o0mWjmIG{M&7eWO9CVRojsy7@;&dpQ!a9t0J7gPX(5I|>76wd9YM;~Wq>Ghkp6rY@=
zsi|pt_x=M#qtRtve?bMn?-1>_C5DBX;{}vm&C%raD|#~il%B<2&`e?uix*V@+JPAL
z6CgbQkZR2~6*sGtFK$zbV~w|k*M3m}@OjM5T^_Z^d)w}xJHF(IUAVpO;*`oW;C1B2
zbys585IO4RGepz@rv~8kI;}Y(n3!mCfS7AgQ=I?+DlNG&;!abH5Df(KZTl#;d_@48
zJKJjfX^uQ>h#Iar6M#C8w^So4*Tn<|1^_iEoENLSCA-QKz)fKe6)JLW%zjz|XlmW9
z@suY3Q`{VJZCgNKnyVajp6h`@6-N=kYKbun)^`LT3}hx^wrO>XsHzE2w#B^A1Ngov
zV}~hV3>btQ09#E(0CWRWn5~q>9Op*n90161U8$i6fc^Yd5_2;F2sIc&=-PaaDX2~W
zTL1&dm}fQw05ax<-uM>_{4Cgt02pUFPqb7NBbWjJ0t`O;#ZxHoL%3#1_iOo5hu6MT
z0mxO4x=yW24v?>f-nYV%Jx`{y-lMT`>)O!u6_~SbsQ_#=q-z-e;1PdX7gN*|3t4aE
z?!Drr!OKg0ZH#q?HK_Wx9NlHvJdYn4{+`bsH@(TacqVT~0BG|6fti$^=|8_20YcOC
e{Jor>rG5iZY$c(Rl?rzN0000RP)CWtKz1rEEwa&Ubd$6s{da=&VIP1;2`BM0`Wb;D
z{M-!)vd0-ix#k=pmKgFxQgYk(eOi$0QlJD2NbOI5d5567avIIj<
zv@<}9dj`!tE;Q@xs8{wNhf{?zUNu9!u=J3D!C+h_ze{}K1V|htI6?j0>T@UYxhDij
zhnKMl|M#(rT!AcZ}eF)wgP_d
zAX10jekLr}U#(CrCA<(opAbNs2#S{v>vbjZBPMG2>Dlh2!oC#Mk@9m9Zc
z2%^^3CBjkLC=!RpAFqNhVw6pZB#Q!^oqj*T-F(Vw$mLX*nO_
zNX-3DeeTpEomGUYnz~IsN92z9JUkMF)7=lf!HB}*Vw`?29z6pA^e+N~guKQ7E$%u)
zC{dC3_66}y+`oN81yr%;K@{IH8|1O-3y*riL6}qGd@SEo}8X#Q_kq
zZ|eG3QMpHgF(8Pc07FLLD$kpMaaUZZl&Qk=tr>Kq76&g@g}Kbh`}mD}bLg
zSob6#9DIaI(-=7VVTPPm{Z+FbtPVT4Iv?2~9(pg}6TG@z0w%t}gOqRBIG>z~1AjdP
zW3QR%ZYsA%*Mp?X$w>b?i;UGgQ?+sSsoXX8X`%zES@sOGBngFV;lVB@d3_10@@V;lg>dY2BN>v^RZ2^?j@k8NdQ$X;_
z_a$H}ZfeJ=gha#~If~qTHdcoJ4Lhqwh-3dbkKgY5JsSA}oWGEOlkpdDqpb%S#7{~T>2A7M
zsP8QLl$cN`w?OF*Jo#7bDJpj@!Dj^fwz=d)jlRsXTKwbW85}(HH?VT^u<$rb~rBzaiB|lB=W)A?(%51dO$!?mU^
ze8O#IHd*n50bG}w!BKl4^90wps7K`#)>4RXJ_(`usyx1v$_9j`-;Pq{6K%jV&lNRO%>FPb&x$A5bBEmwG~
zsNAo;tlZJ!2;Bu-bsyf#uSL0b05WG_^}?r@soeJn(y81#_yhC8@e_i|9PXV^3ptdy
z4Z_G4qZfz6FCzC2|JrSe-C>#48@AYMyIwNBFNyyFX1QPd5r93<00000NkvXXu0mjf
DP*&js
literal 0
HcmV?d00001
diff --git a/Store/Store/Images/save.png b/Store/Store/Images/save.png
new file mode 100644
index 0000000000000000000000000000000000000000..daba865fafd22fa18e7c0488eb699b79d3554170
GIT binary patch
literal 1187
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
Ef)$pHVE_OC
literal 0
HcmV?d00001
diff --git a/Store/Store/UDP/UDPListen.pro b/Store/Store/UDP/UDPListen.pro
new file mode 100644
index 0000000..8b62f78
--- /dev/null
+++ b/Store/Store/UDP/UDPListen.pro
@@ -0,0 +1,19 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2017-07-24T10:26:36
+#
+#-------------------------------------------------
+
+QT += core gui network
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = UDPListen
+TEMPLATE = app
+
+
+SOURCES += main.cpp \
+ udplisten.cpp
+
+HEADERS += \
+ udplisten.h
diff --git a/Store/Store/UDP/UDPListen.pro.user b/Store/Store/UDP/UDPListen.pro.user
new file mode 100644
index 0000000..92367b5
--- /dev/null
+++ b/Store/Store/UDP/UDPListen.pro.user
@@ -0,0 +1,269 @@
+
+
+
+
+
+ EnvironmentId
+ {6fa689f0-d307-453e-aa89-3b1bf25a9d4e}
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ UTF-8
+ false
+ 4
+ false
+ 80
+ true
+ true
+ 1
+ false
+ true
+ false
+ 0
+ true
+ true
+ 0
+ 8
+ true
+ false
+ 1
+ true
+ true
+ true
+ *.md, *.MD, Makefile
+ false
+ true
+ true
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+ true
+ false
+ true
+ true
+ true
+ true
+
+
+ 0
+ true
+
+
+ true
+ true
+ Builtin.DefaultTidyAndClazy
+ 4
+ true
+
+
+
+ true
+
+
+ true
+ true
+
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Desktop
+ Desktop Qt 6.5.2 MinGW 64-bit
+ Desktop Qt 6.5.2 MinGW 64-bit
+ qt.qt6.652.win64_mingw_kit
+ 0
+ 0
+ 0
+
+ 0
+ C:\Users\DELL\Desktop\Cos3711\2018\S2\SolutionsToAssignment2\SolutionsToAssignment2\Question8\build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Debug
+ C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Debug
+
+
+ true
+ QtProjectManager.QMakeBuildStep
+ false
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+ clean
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Debug
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 2
+
+
+ C:\Users\DELL\Desktop\Cos3711\2018\S2\SolutionsToAssignment2\SolutionsToAssignment2\Question8\build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Release
+ C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Release
+
+
+ true
+ QtProjectManager.QMakeBuildStep
+ false
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+ clean
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Release
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ 0
+
+
+ 0
+ C:\Users\DELL\Desktop\Cos3711\2018\S2\SolutionsToAssignment2\SolutionsToAssignment2\Question8\build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Profile
+ C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Profile
+
+
+ true
+ QtProjectManager.QMakeBuildStep
+ false
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+ clean
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Profile
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ 0
+ 0
+
+ 3
+
+
+ 0
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+ true
+ true
+ true
+
+ 2
+
+ false
+ UDPListen2
+ Qt4ProjectManager.Qt4RunConfiguration:C:/Users/DELL/Desktop/ASSG3/UDP/UDPListen.pro
+ C:/Users/DELL/Desktop/ASSG3/UDP/UDPListen.pro
+ true
+ true
+ true
+ C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Debug
+
+ 1
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 1
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 22
+
+
+ Version
+ 22
+
+
diff --git a/Store/Store/UDP/main.cpp b/Store/Store/UDP/main.cpp
new file mode 100644
index 0000000..f69ede7
--- /dev/null
+++ b/Store/Store/UDP/main.cpp
@@ -0,0 +1,11 @@
+#include
+#include "udplisten.h"
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+ UDPListen chat;
+ chat.setWindowTitle("UDP Listen");
+ chat.show();
+ return app.exec();
+}
diff --git a/Store/Store/UDP/udplisten.cpp b/Store/Store/UDP/udplisten.cpp
new file mode 100644
index 0000000..b264c70
--- /dev/null
+++ b/Store/Store/UDP/udplisten.cpp
@@ -0,0 +1,41 @@
+#include "udplisten.h"
+#include
+#include
+#include
+#include
+
+UDPListen::UDPListen(QWidget *parent) : QWidget(parent)
+{
+ socket = 0;
+
+ QVBoxLayout* layout = new QVBoxLayout(this);
+ QPushButton* listen = new QPushButton("&Listen");
+ display = new QTextEdit();
+ display->setReadOnly(true);
+ layout->addWidget(listen);
+ layout->addWidget(display);
+ resize(300, 500);
+
+ connect(listen, SIGNAL(clicked()), this, SLOT(startListening()));
+}
+
+void UDPListen::startListening()
+{
+ display->setText("Started listening...");
+ socket = new QUdpSocket(this);
+ socket->bind(34567);
+ connect(socket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams()));
+}
+
+void UDPListen::processPendingDatagrams()
+{
+ QByteArray buffer;
+ buffer.resize(socket->pendingDatagramSize());
+ socket->readDatagram(buffer.data(), buffer.size());
+
+ QDataStream stream(buffer);
+ stream.setVersion(QDataStream::Qt_4_0);
+ stream >> line;
+ display->append("");
+ display->append(line);
+}
diff --git a/Store/Store/UDP/udplisten.h b/Store/Store/UDP/udplisten.h
new file mode 100644
index 0000000..23e4ab7
--- /dev/null
+++ b/Store/Store/UDP/udplisten.h
@@ -0,0 +1,26 @@
+#ifndef UDP_H
+#define UDP_H
+
+#include
+
+class QLineEdit;
+class QTextEdit;
+class QUdpSocket;
+
+class UDPListen : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit UDPListen(QWidget *parent = 0);
+signals:
+
+public slots:
+ void startListening();
+ void processPendingDatagrams();
+private:
+ QTextEdit* display;
+ QUdpSocket *socket;
+ QString line;
+};
+
+#endif // UDP_H
diff --git a/Store/Store/addcustomerdialog.cpp b/Store/Store/addcustomerdialog.cpp
new file mode 100644
index 0000000..1e34142
--- /dev/null
+++ b/Store/Store/addcustomerdialog.cpp
@@ -0,0 +1,87 @@
+#include "addcustomerdialog.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+AddCustomerDialog::AddCustomerDialog(QWidget *parent):QDialog(parent)
+ ,edtCust(new QComboBox),
+ edtItem(new QComboBox),edtQuantity(new QSpinBox),
+ edtAddItem(new QPushButton("Add Item"))
+ ,txtEdt(new QTextEdit),edtDone(new QPushButton("Done"))
+{
+ setWindowTitle("Add Customer");
+
+ setupGUI();
+ connect(edtAddItem, &QPushButton::clicked, this, &AddCustomerDialog::accept);
+ connect(edtAddItem, &QPushButton::clicked, this, &AddCustomerDialog::addCustomer);
+
+ connect(edtDone, &QPushButton::clicked, this, &AddCustomerDialog::reject);
+}
+Customer AddCustomerDialog::getCustomer() const
+{
+ return Customer(edtAddItem->text());
+}
+
+void AddCustomerDialog::addCustomer()
+{
+ txtEdt->show();
+
+}
+
+void AddCustomerDialog::setupGUI(){
+
+ // Declare widgets
+ QGridLayout *layout(new QGridLayout(this));
+
+ QLabel*lblTop{new QLabel("Complete the required data")};
+ QLabel *lblCustomer(new QLabel("Select the Customer"));
+ QLabel *lblItem(new QLabel("Select the item"));
+ QLabel *lblType(new QLabel("Item Type"));
+ QLabel *lblQuantity(new QLabel("item quantity"));
+
+
+
+
+ // Setup layout
+ layout->addWidget(lblTop);
+ layout->addWidget(lblCustomer,1,0);
+ layout->addWidget(edtCust,1,1);
+
+ layout->addWidget(lblItem,2,0);
+ layout->addWidget(edtItem,2,1);
+
+ layout->addWidget(lblType,3,0);
+
+
+ layout->addWidget(lblQuantity,4,0);
+ layout->addWidget(edtQuantity,4,1);
+ layout->addWidget(edtAddItem,4,2);
+
+ layout->addWidget(txtEdt,5,0,2,4);
+ layout->addWidget(edtDone,7,1,2,1);
+
+
+
+ // Initialize widgets
+ QStringList listOne = QStringList() <<" " <<"Customer1" << "Customer2" << "Customer3" << "Customer4" ;
+ edtCust->addItems(listOne);
+
+ QStringList listTwo = QStringList() <<" " << "Book1" << "Book2"<<"Book3"<< "Magazine1" << "Magazine2"<<"Magazine3" ;
+ edtItem->addItems(listTwo);
+
+
+ edtQuantity->setMaximum(9999);
+ edtQuantity->setMinimum(0);
+
+ edtQuantity->setAlignment(Qt::AlignRight);
+
+
+
+}
+
+
+
diff --git a/Store/Store/addcustomerdialog.h b/Store/Store/addcustomerdialog.h
new file mode 100644
index 0000000..bda8772
--- /dev/null
+++ b/Store/Store/addcustomerdialog.h
@@ -0,0 +1,45 @@
+#ifndef ADDCUSTOMERDIALOG_H
+#define ADDCUSTOMERDIALOG_H
+#include
+#include
+#include
+#include
+#include "Customer.h"
+//#include"customerlist.h"
+class QPushButton;
+class QLineEdit;
+class QTextEdit;
+class QComboBox;
+class QDoubleSpinBox;
+class QSpinBox;
+class CustomerList;
+
+class Customer;
+class AddCustomerDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ AddCustomerDialog(QWidget *parent = nullptr);
+
+ Customer getCustomer() const;
+
+private slots:
+
+ void addCustomer();
+private:
+
+ void setupGUI();
+
+ QComboBox *edtCust;
+ QComboBox *edtItem;
+ QSpinBox*edtQuantity;
+
+ QPushButton*edtAddItem;
+ QTextEdit*txtEdt;
+ QPushButton*edtDone;
+
+ // CustomerList list;
+ Customer*customer;
+
+};
+#endif // ADDCUSTOMERDIALOG_H
diff --git a/Store/Store/additemdialog.cpp b/Store/Store/additemdialog.cpp
new file mode 100644
index 0000000..e396fa0
--- /dev/null
+++ b/Store/Store/additemdialog.cpp
@@ -0,0 +1,79 @@
+#include "additemdialog.h"
+#include"item.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+AddItemDialog::AddItemDialog(QWidget *parent)
+ : QDialog(parent),edtType{new QComboBox},edtItemName{new QLineEdit}
+ ,edtAddItem{new QPushButton("Add item")}
+{
+ setWindowTitle("Add Item");
+ setupGUI();
+ connect(edtAddItem, &QPushButton::clicked, this, &AddItemDialog::accept);
+ // connect(edtDone, &QPushButton::clicked, this, &AddItemDialog::reject);
+
+}
+
+Item AddItemDialog::getItem() const
+{
+ return Item(edtItemName->text());
+}
+
+void AddItemDialog::addCustomer()
+{
+
+
+}
+
+void AddItemDialog::readList()
+{
+
+}
+
+void AddItemDialog::writeList()
+{
+
+}
+
+void AddItemDialog::setupGUI()
+{
+ // Setup layout
+
+ QGridLayout*layout(new QGridLayout(this));
+
+ QLabel*lblTop{new QLabel("Complete the required data")};
+
+ lblTop->setAlignment(Qt::AlignCenter);
+ QLabel*lblType{new QLabel("Item Type")};
+ QLabel*lblItem{new QLabel("Name of Item")};
+
+
+
+
+ layout->addWidget(lblTop);
+
+
+ layout->addWidget(lblType,1,0);
+ layout->addWidget(edtType,1,1);
+
+ layout->addWidget(lblItem,2,0);
+ layout->addWidget(edtItemName,2,1);
+
+ layout->addWidget(edtAddItem,3,1);
+
+ this->setLayout(layout);
+
+ // initialize widgets
+
+ QStringList type =QStringList()<<" "<<"B"<<"M";
+ edtType->addItems(type);
+
+}
+
+
+
diff --git a/Store/Store/additemdialog.h b/Store/Store/additemdialog.h
new file mode 100644
index 0000000..ee5e148
--- /dev/null
+++ b/Store/Store/additemdialog.h
@@ -0,0 +1,38 @@
+#ifndef ADDITEMDIALOG_H
+#define ADDITEMDIALOG_H
+#include
+#include
+#include
+#include
+class Item;
+class QPushButton;
+class QLineEdit;
+class QComboBox;
+class shopInput;
+
+class AddItemDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ AddItemDialog(QWidget *parent = nullptr);
+ Item getItem() const;
+
+private slots:
+ void addCustomer();
+ void readList();
+ void writeList();
+
+private:
+
+ void setupGUI();
+ //QLineEdit *m_nameLineEdit;
+
+ QComboBox*edtType;
+ QLineEdit*edtItemName;
+ QPushButton*edtAddItem;
+
+
+};
+
+
+#endif // ADDITEMDIALOG_H
diff --git a/Store/Store/customer.cpp b/Store/Store/customer.cpp
new file mode 100644
index 0000000..1fb8603
--- /dev/null
+++ b/Store/Store/customer.cpp
@@ -0,0 +1,10 @@
+#include "customer.h"
+
+Customer::Customer(const QString &name)
+ : m_name(name)
+{
+}
+QString Customer::getName() const
+{
+ return m_name;
+}
diff --git a/Store/Store/customer.h b/Store/Store/customer.h
new file mode 100644
index 0000000..17026e0
--- /dev/null
+++ b/Store/Store/customer.h
@@ -0,0 +1,14 @@
+#ifndef CUSTOMER_H
+#define CUSTOMER_H
+
+#include
+class Customer
+{
+public:
+ Customer(const QString &name);
+ QString getName() const;
+private:
+ QString m_name;
+};
+
+#endif // CUSTOMER_H
diff --git a/Store/Store/item.cpp b/Store/Store/item.cpp
new file mode 100644
index 0000000..bb9dc76
--- /dev/null
+++ b/Store/Store/item.cpp
@@ -0,0 +1,10 @@
+#include "item.h"
+
+Item::Item(const QString &name)
+ : m_name(name)
+{
+}
+QString Item::getName() const
+{
+ return m_name;
+}
diff --git a/Store/Store/item.h b/Store/Store/item.h
new file mode 100644
index 0000000..3dd3183
--- /dev/null
+++ b/Store/Store/item.h
@@ -0,0 +1,15 @@
+#ifndef ITEM_H
+#define ITEM_H
+#include
+
+class Item
+{
+public:
+ Item(const QString &name);
+ QString getName() const;
+private:
+ QString m_name;
+};
+
+
+#endif // ITEM_H
diff --git a/Store/Store/main.cpp b/Store/Store/main.cpp
new file mode 100644
index 0000000..aff48df
--- /dev/null
+++ b/Store/Store/main.cpp
@@ -0,0 +1,11 @@
+#include "mainwindow.h"
+
+#include
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ MainWindow w;
+ w.show();
+ return a.exec();
+}
diff --git a/Store/Store/mainwindow.cpp b/Store/Store/mainwindow.cpp
new file mode 100644
index 0000000..7fb1029
--- /dev/null
+++ b/Store/Store/mainwindow.cpp
@@ -0,0 +1,253 @@
+#include "mainwindow.h"
+#include
+#include"customer.h"
+#include "item.h"
+#include "addcustomerdialog.h"
+#include "additemdialog.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent),m_transactionsTreeView{new QTreeView}
+{
+ setWindowTitle("Store Application");
+ resize(800,600);
+
+
+ QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
+ QMenu *editMenu = menuBar()->addMenu(tr("&Add"));
+ QMenu *restoreMenu=menuBar()->addMenu("&Restore");
+ QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
+ // Create actions for the menus
+ QAction *newAction = new QAction(tr("&Add"), this);
+ QAction *openAction = new QAction(tr("&Open"), this);
+ QAction *saveAction = new QAction(tr("&Save"), this);
+ QAction *exitAction = new QAction(tr("&Exit"), this);
+ QAction *helpAction =new QAction(tr("Help"),this);
+
+ // fileMenu->addAction(newAction);
+
+ fileMenu->addAction(openAction);
+ fileMenu->addAction(saveAction);
+ fileMenu->addSeparator();
+ fileMenu->addAction(exitAction);
+ helpMenu->addAction(helpAction);
+
+ editMenu->addAction(newAction);
+ // Create toolbar
+ QToolBar *toolbar = addToolBar(tr("Main Toolbar"));
+ toolbar->addAction(newAction);
+ toolbar->addAction(openAction);
+ toolbar->addAction(saveAction);
+ // Create status bar
+ QStatusBar *statusBar = this->statusBar();
+ statusBar->showMessage(tr("Ready"));
+
+
+ m_transactionsModel = new QStandardItemModel(this);
+ m_transactionsModel->setHorizontalHeaderLabels(QStringList() << tr("Transaction ") << tr("Type") << tr("Quality"));
+ m_transactionsTreeView->setModel(m_transactionsModel);
+
+ setCentralWidget(m_transactionsTreeView);
+
+ connect(newAction, &QAction::triggered, this, &MainWindow::addItem);
+ connect(helpAction, &QAction::triggered, this, &MainWindow::showAbout);
+ connect(newAction, &QAction::triggered, this, &MainWindow::recordTransaction);
+ connect(newAction, &QAction::triggered, this, &MainWindow::populateTransaction);
+
+
+
+}
+
+MainWindow::~MainWindow()
+{
+}
+
+void MainWindow::recordTransaction()
+{
+ // Create a dialog to record a transaction
+ QDialog dialog(this);
+ dialog.setWindowTitle(tr("Shop"));
+ // Create input fields and buttons in the dialog
+ // QLabel *customerLabel = new QLabel(tr("Customer:"));
+ QLabel*lblTop{new QLabel(" \t \t \t Complete the required data")};
+
+
+
+ QLabel*custLable=new QLabel("Select the customer");
+ custNameBox=new QComboBox;
+
+ QLabel*selectItem=new QLabel("Select the Item");
+ selectItemComboBox = new QComboBox;
+
+
+ QLabel *itemLabel = new QLabel(tr("Item Type"));
+ itemComboBox = new QComboBox;
+
+
+ QLabel *quantityLabel = new QLabel(tr("Quantity:"));
+ QSpinBox *quantitySpinBox = new QSpinBox;
+
+ ItemAdd=new QPushButton("AddItem");
+ txtEdit=new QPlainTextEdit;
+
+ QPushButton *recordButton = new QPushButton(tr("Done"));
+
+
+
+ QStringList cName=QStringList()<<" "<<"Customer1"<<"Customer2"<<"Customer3"<<"Customer 4";
+ custNameBox->addItems(cName);
+
+
+ QStringList type=QStringList()<<" "<<"B"<<"M";
+ itemComboBox->addItems(type);
+
+
+ QStringList cust=QStringList()<<" "<<"Book1"<<"Book2"<<"Book3"<<"Book4"<<"Magazine1"<<"Magazine2"<<"Magazine 3";
+ selectItemComboBox->addItems(cust);
+ // edtCust->addItems(cust);
+
+ for (const Customer *customer : m_customers) {
+ selectItemComboBox->addItem(customer->getName());
+ // edtCust->addItem(customer->getName());
+ }
+
+ for (const Item *item : m_items) {
+ itemComboBox->addItem(item->getName());
+ }
+
+ QGridLayout *layout = new QGridLayout;
+
+ layout->addWidget(lblTop);
+
+
+ layout->addWidget(custLable,1,0);
+ layout->addWidget(custNameBox,1,1);
+
+ layout->addWidget(selectItem,2,0);
+ layout->addWidget(selectItemComboBox,2,1);
+
+
+ layout->addWidget(itemLabel,3,0);
+ layout->addWidget(itemComboBox,3,1);
+
+
+ layout->addWidget(quantityLabel,4,0);
+ layout->addWidget(quantitySpinBox,4,1);
+ layout->addWidget(ItemAdd,4,2);
+ layout->addWidget(txtEdit,5,0,2,4);
+
+
+ layout->addWidget(recordButton,7,1,2,1);
+ dialog.setLayout(layout);
+
+
+
+
+
+ connect(recordButton, &QPushButton::clicked, [&]() {
+ QString custName=custNameBox->currentText();
+ QString customerName = selectItemComboBox->currentText();
+ QString itemType = itemComboBox->currentText();
+ int quantity = quantitySpinBox->value();
+ Transaction *transaction = new Transaction(custName,QDateTime::currentDateTime(), customerName, itemType, quantity);
+ m_transactions.append(transaction);
+ dialog.accept();
+ });
+
+ dialog.exec();
+
+}
+
+void MainWindow::populateTransaction()
+{
+
+ m_transactionsModel->setHorizontalHeaderLabels(QStringList() << tr("Transaction ") << tr("Type") << tr("Quality"));
+ m_transactionsModel->clear();
+ for (const Transaction *transaction : m_transactions) {
+
+ QListcustomer;
+ customer.append(new QStandardItem(transaction->getCustomer()));
+ m_transactionsModel->appendRow(customer);
+
+ QList items;
+ items.append(new QStandardItem(transaction->getDateTime().toString()));
+ customer.first()->appendRow(items);
+ m_transactionsModel->appendRow(customer);
+
+ QListterms;
+ terms.append(new QStandardItem(transaction->getCustomerName()));
+ terms.append(new QStandardItem(transaction->getItemType()));
+ terms.append(new QStandardItem(QString::number(transaction->getQuantity())));
+
+ items.first()->appendRow(terms);
+ m_transactionsModel->appendRow(terms);
+
+
+
+
+}
+
+
+}
+QListMainWindow::prepareRow(const QString &first,const QString &second
+ ,const QString &third ){
+
+QListrowItems;
+rowItems<
+#include
+#include
+#include
+#include
+#include"transaction.h"
+
+class Customer;
+class Item;
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow(QWidget *parent = nullptr);
+ ~MainWindow();
+
+private slots:
+
+ void recordTransaction();
+ void populateTransaction();
+ void addItem();
+ void addCustomer();
+
+ void newFile();
+ void open();
+ void about();
+
+ void showHelp();
+ void showAbout();
+
+private:
+ QTreeView *m_transactionsTreeView;
+
+ QListprepareRow(const QString &first,const QString&second,const QString&third);
+ QStandardItemModel *m_transactionsModel;
+ QList m_transactions;
+ QList m_customers;
+ QList- m_items;
+
+ QComboBox *custNameBox;
+ QComboBox *selectItemComboBox;
+ QLabel *itemLabel;
+ QComboBox *itemComboBox;
+ QSpinBox *quantitySpinBox;
+
+ QPushButton*ItemAdd;
+ QPlainTextEdit*txtEdit;
+
+
+};
+#endif // MAINWINDOW_H
diff --git a/Store/Store/mymodel.cpp b/Store/Store/mymodel.cpp
new file mode 100644
index 0000000..a3957f6
--- /dev/null
+++ b/Store/Store/mymodel.cpp
@@ -0,0 +1,50 @@
+#include "mymodel.h"
+
+MyModel::MyModel(QObject *parent)
+ : QAbstractItemModel{parent}
+{
+
+}
+bool MyModel::setData(const QModelIndex & index, const QVariant & value, int role)
+{
+ if (role == Qt::EditRole)
+ {
+ //save value from editor to member m_gridData
+ m_gridData[index.row()][index.column()] = value.toString(); //for presentation purposes only: build and emit a joined string
+ QString result;
+ for(int row= 0; row < ROWS; row++)
+ {
+ for(int col= 0; col < COLS; col++)
+
+ {
+ result += m_gridData[row][col] + " ";
+ }
+ }
+ //emit editCompleted( result );
+ }
+ return true;
+}
+
+
+int MyModel::rowCount(const QModelIndex & /*parent*/) const
+{
+ return 2;
+}
+
+Qt::ItemFlags MyModel::flags(const QModelIndex & /*index*/) const
+{
+ return Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled ;
+}
+
+
+QVariant MyModel::data(const QModelIndex &index, int role) const
+{
+ if (role == Qt::DisplayRole)
+ {
+ return QString("Row%1, Column%2")
+ .arg(index.row() + 1)
+ .arg(index.column() +1);
+ }
+ return QVariant();
+}
+
diff --git a/Store/Store/mymodel.h b/Store/Store/mymodel.h
new file mode 100644
index 0000000..55a4c7e
--- /dev/null
+++ b/Store/Store/mymodel.h
@@ -0,0 +1,24 @@
+#ifndef MYMODEL_H
+#define MYMODEL_H
+
+#include
+#include
+
+const int COLS=3;
+const int ROWS=2;
+
+class MyModel : public QAbstractItemModel
+{
+public:
+ explicit MyModel(QObject *parent = nullptr);
+ int rowCount(const QModelIndex&parent=QModelIndex())const;
+ int columnCount(const QModelIndex&parent, int role=Qt::DisplayRole)const;
+
+ QVariant data(const QModelIndex &iindex, int role=Qt::DisplayRole)const;
+ bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole); Qt::ItemFlags flags(const QModelIndex & index) const ; private:
+ QString m_gridData[ROWS][COLS]; //holds text entered into QTableView signals:
+ void editCompleted(const QString &);
+
+};
+
+#endif // MYMODEL_H
diff --git a/Store/Store/transaction.cpp b/Store/Store/transaction.cpp
new file mode 100644
index 0000000..b0d8d6c
--- /dev/null
+++ b/Store/Store/transaction.cpp
@@ -0,0 +1,33 @@
+#include "transaction.h"
+
+Transaction::Transaction( QString cust,const QDateTime &dateTime, const QString &customerName, const QString &itemType, int quantity)
+ : customer(cust),m_dateTime(dateTime), m_customerName(customerName), m_itemType(itemType), m_quantity(quantity)
+{
+}
+QDateTime Transaction::getDateTime() const
+{
+ return m_dateTime;
+}
+QString Transaction::getCustomerName() const
+{
+ return m_customerName;
+}
+QString Transaction::getItemType() const
+{
+ return m_itemType;
+}
+
+int Transaction::getQuantity() const
+{
+ return m_quantity;
+}
+
+QString Transaction::getCustomer() const
+{
+ return customer;
+}
+
+void Transaction::setCustomer(const QString &newCustomer)
+{
+ customer = newCustomer;
+}
diff --git a/Store/Store/transaction.h b/Store/Store/transaction.h
new file mode 100644
index 0000000..313e7a0
--- /dev/null
+++ b/Store/Store/transaction.h
@@ -0,0 +1,32 @@
+#ifndef TRANSACTION_H
+#define TRANSACTION_H
+#include
+#include
+#include "customer.h"
+#include "item.h"
+
+
+class Transaction
+{
+public:
+ Transaction(QString cust,const QDateTime &dateTime, const QString &customerName, const QString &itemType, int quantity);
+ QDateTime getDateTime() const;
+ QString getCustomerName() const;
+ QString getItemType() const;
+ int getQuantity() const;
+ QString getCustomer() const;
+
+ void setCustomer(const QString &newCustomer);
+
+private:
+ QDateTime m_dateTime;
+ QString m_customerName;
+ QString m_itemType;
+ int m_quantity;
+ QString customer;
+};
+
+
+
+
+#endif // TRANSACTION_H
diff --git a/Store/UDP/UDPListen.pro b/Store/UDP/UDPListen.pro
new file mode 100644
index 0000000..8b62f78
--- /dev/null
+++ b/Store/UDP/UDPListen.pro
@@ -0,0 +1,19 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2017-07-24T10:26:36
+#
+#-------------------------------------------------
+
+QT += core gui network
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = UDPListen
+TEMPLATE = app
+
+
+SOURCES += main.cpp \
+ udplisten.cpp
+
+HEADERS += \
+ udplisten.h
diff --git a/Store/UDP/UDPListen.pro.user b/Store/UDP/UDPListen.pro.user
new file mode 100644
index 0000000..92367b5
--- /dev/null
+++ b/Store/UDP/UDPListen.pro.user
@@ -0,0 +1,269 @@
+
+
+
+
+
+ EnvironmentId
+ {6fa689f0-d307-453e-aa89-3b1bf25a9d4e}
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ UTF-8
+ false
+ 4
+ false
+ 80
+ true
+ true
+ 1
+ false
+ true
+ false
+ 0
+ true
+ true
+ 0
+ 8
+ true
+ false
+ 1
+ true
+ true
+ true
+ *.md, *.MD, Makefile
+ false
+ true
+ true
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+ true
+ false
+ true
+ true
+ true
+ true
+
+
+ 0
+ true
+
+
+ true
+ true
+ Builtin.DefaultTidyAndClazy
+ 4
+ true
+
+
+
+ true
+
+
+ true
+ true
+
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Desktop
+ Desktop Qt 6.5.2 MinGW 64-bit
+ Desktop Qt 6.5.2 MinGW 64-bit
+ qt.qt6.652.win64_mingw_kit
+ 0
+ 0
+ 0
+
+ 0
+ C:\Users\DELL\Desktop\Cos3711\2018\S2\SolutionsToAssignment2\SolutionsToAssignment2\Question8\build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Debug
+ C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Debug
+
+
+ true
+ QtProjectManager.QMakeBuildStep
+ false
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+ clean
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Debug
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 2
+
+
+ C:\Users\DELL\Desktop\Cos3711\2018\S2\SolutionsToAssignment2\SolutionsToAssignment2\Question8\build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Release
+ C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Release
+
+
+ true
+ QtProjectManager.QMakeBuildStep
+ false
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+ clean
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Release
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ 0
+
+
+ 0
+ C:\Users\DELL\Desktop\Cos3711\2018\S2\SolutionsToAssignment2\SolutionsToAssignment2\Question8\build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Profile
+ C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Profile
+
+
+ true
+ QtProjectManager.QMakeBuildStep
+ false
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Qt4ProjectManager.MakeStep
+ clean
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Profile
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ 0
+ 0
+
+ 3
+
+
+ 0
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+ true
+ true
+ true
+
+ 2
+
+ false
+ UDPListen2
+ Qt4ProjectManager.Qt4RunConfiguration:C:/Users/DELL/Desktop/ASSG3/UDP/UDPListen.pro
+ C:/Users/DELL/Desktop/ASSG3/UDP/UDPListen.pro
+ true
+ true
+ true
+ C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Debug
+
+ 1
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 1
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 22
+
+
+ Version
+ 22
+
+
diff --git a/Store/UDP/main.cpp b/Store/UDP/main.cpp
new file mode 100644
index 0000000..f69ede7
--- /dev/null
+++ b/Store/UDP/main.cpp
@@ -0,0 +1,11 @@
+#include
+#include "udplisten.h"
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+ UDPListen chat;
+ chat.setWindowTitle("UDP Listen");
+ chat.show();
+ return app.exec();
+}
diff --git a/Store/UDP/udplisten.cpp b/Store/UDP/udplisten.cpp
new file mode 100644
index 0000000..b264c70
--- /dev/null
+++ b/Store/UDP/udplisten.cpp
@@ -0,0 +1,41 @@
+#include "udplisten.h"
+#include
+#include
+#include
+#include
+
+UDPListen::UDPListen(QWidget *parent) : QWidget(parent)
+{
+ socket = 0;
+
+ QVBoxLayout* layout = new QVBoxLayout(this);
+ QPushButton* listen = new QPushButton("&Listen");
+ display = new QTextEdit();
+ display->setReadOnly(true);
+ layout->addWidget(listen);
+ layout->addWidget(display);
+ resize(300, 500);
+
+ connect(listen, SIGNAL(clicked()), this, SLOT(startListening()));
+}
+
+void UDPListen::startListening()
+{
+ display->setText("Started listening...");
+ socket = new QUdpSocket(this);
+ socket->bind(34567);
+ connect(socket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams()));
+}
+
+void UDPListen::processPendingDatagrams()
+{
+ QByteArray buffer;
+ buffer.resize(socket->pendingDatagramSize());
+ socket->readDatagram(buffer.data(), buffer.size());
+
+ QDataStream stream(buffer);
+ stream.setVersion(QDataStream::Qt_4_0);
+ stream >> line;
+ display->append("");
+ display->append(line);
+}
diff --git a/Store/UDP/udplisten.h b/Store/UDP/udplisten.h
new file mode 100644
index 0000000..23e4ab7
--- /dev/null
+++ b/Store/UDP/udplisten.h
@@ -0,0 +1,26 @@
+#ifndef UDP_H
+#define UDP_H
+
+#include
+
+class QLineEdit;
+class QTextEdit;
+class QUdpSocket;
+
+class UDPListen : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit UDPListen(QWidget *parent = 0);
+signals:
+
+public slots:
+ void startListening();
+ void processPendingDatagrams();
+private:
+ QTextEdit* display;
+ QUdpSocket *socket;
+ QString line;
+};
+
+#endif // UDP_H