diff --git a/CMakeLists.txt b/CMakeLists.txt
index f442184c..16d3768c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -250,10 +250,12 @@ qt5_wrap_ui(UI src/mainwindow.ui
src/cdlgmdffiledriver.ui
src/cdlgmdffile.ui
src/cdlgmdfremotevar.ui
- src/cdlgmdfdescription.ui
+ src/cdlgmdfdescription.ui
+ src/cdlgmdfinfourl.ui
src/cdlgmdffilefirmware.ui
src/cdlgmdffilevideo.ui
src/cdlgmdfvaluelist.ui
+ src/cdlgeditmap.ui
)
add_executable(${PROJECT_NAME}
@@ -484,6 +486,21 @@ add_executable(${PROJECT_NAME}
src/cdlgmdfmodule.cpp
src/cdlgmdfmodule.h
+ build/ui_cdlgmdfdescription.h
+ src/cdlgmdfdescription.ui
+ src/cdlgmdfdescription.cpp
+ src/cdlgmdfdescription.h
+
+ build/ui_cdlgmdfinfourl.h
+ src/cdlgmdfinfourl.ui
+ src/cdlgmdfinfourl.cpp
+ src/cdlgmdfinfourl.h
+
+ build/ui_cdlgeditmap.h
+ src/cdlgeditmap.ui
+ src/cdlgeditmap.cpp
+ src/cdlgeditmap.h
+
${VSCP_PATH}/src/vscp/common/version.h
${VSCP_PATH}/src/vscp/common/vscp.h
${VSCP_PATH}/src/vscp/common/vscpremotetcpif.h
diff --git a/images/notes.txt b/images/notes.txt
new file mode 100644
index 00000000..35c381f0
--- /dev/null
+++ b/images/notes.txt
@@ -0,0 +1,3 @@
+icons from
+
+https://github.com/FortAwesome/Font-Awesome.git
\ No newline at end of file
diff --git a/images/svg/0.svg b/images/svg/0.svg
new file mode 100644
index 00000000..d15544b5
--- /dev/null
+++ b/images/svg/0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/1.svg b/images/svg/1.svg
new file mode 100644
index 00000000..070e084c
--- /dev/null
+++ b/images/svg/1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/2.svg b/images/svg/2.svg
new file mode 100644
index 00000000..097a0c7b
--- /dev/null
+++ b/images/svg/2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/3.svg b/images/svg/3.svg
new file mode 100644
index 00000000..7d7e42ff
--- /dev/null
+++ b/images/svg/3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/4.svg b/images/svg/4.svg
new file mode 100644
index 00000000..15f48fa8
--- /dev/null
+++ b/images/svg/4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/5.svg b/images/svg/5.svg
new file mode 100644
index 00000000..ccb9c2d8
--- /dev/null
+++ b/images/svg/5.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/6.svg b/images/svg/6.svg
new file mode 100644
index 00000000..fe6b2997
--- /dev/null
+++ b/images/svg/6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/7.svg b/images/svg/7.svg
new file mode 100644
index 00000000..76e755bf
--- /dev/null
+++ b/images/svg/7.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/8.svg b/images/svg/8.svg
new file mode 100644
index 00000000..8a43a4f4
--- /dev/null
+++ b/images/svg/8.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/9.svg b/images/svg/9.svg
new file mode 100644
index 00000000..b4c58778
--- /dev/null
+++ b/images/svg/9.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/a.svg b/images/svg/a.svg
new file mode 100644
index 00000000..03afd599
--- /dev/null
+++ b/images/svg/a.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/address-book.svg b/images/svg/address-book.svg
new file mode 100644
index 00000000..e87d1420
--- /dev/null
+++ b/images/svg/address-book.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/address-card.svg b/images/svg/address-card.svg
new file mode 100644
index 00000000..611a55e3
--- /dev/null
+++ b/images/svg/address-card.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/align-center.svg b/images/svg/align-center.svg
new file mode 100644
index 00000000..ab280099
--- /dev/null
+++ b/images/svg/align-center.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/align-justify.svg b/images/svg/align-justify.svg
new file mode 100644
index 00000000..f8e628f4
--- /dev/null
+++ b/images/svg/align-justify.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/align-left.svg b/images/svg/align-left.svg
new file mode 100644
index 00000000..844bd8db
--- /dev/null
+++ b/images/svg/align-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/align-right.svg b/images/svg/align-right.svg
new file mode 100644
index 00000000..7570612a
--- /dev/null
+++ b/images/svg/align-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/anchor-circle-check.svg b/images/svg/anchor-circle-check.svg
new file mode 100644
index 00000000..e9a92f0b
--- /dev/null
+++ b/images/svg/anchor-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/anchor-circle-exclamation.svg b/images/svg/anchor-circle-exclamation.svg
new file mode 100644
index 00000000..87f4cc97
--- /dev/null
+++ b/images/svg/anchor-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/anchor-circle-xmark.svg b/images/svg/anchor-circle-xmark.svg
new file mode 100644
index 00000000..66849ae2
--- /dev/null
+++ b/images/svg/anchor-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/anchor-lock.svg b/images/svg/anchor-lock.svg
new file mode 100644
index 00000000..27b268ee
--- /dev/null
+++ b/images/svg/anchor-lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/anchor.svg b/images/svg/anchor.svg
new file mode 100644
index 00000000..281b2e88
--- /dev/null
+++ b/images/svg/anchor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/angle-down.svg b/images/svg/angle-down.svg
new file mode 100644
index 00000000..1eba548c
--- /dev/null
+++ b/images/svg/angle-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/angle-left.svg b/images/svg/angle-left.svg
new file mode 100644
index 00000000..804865ab
--- /dev/null
+++ b/images/svg/angle-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/angle-right.svg b/images/svg/angle-right.svg
new file mode 100644
index 00000000..e1ac160f
--- /dev/null
+++ b/images/svg/angle-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/angle-up.svg b/images/svg/angle-up.svg
new file mode 100644
index 00000000..67f29a8f
--- /dev/null
+++ b/images/svg/angle-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/angles-down.svg b/images/svg/angles-down.svg
new file mode 100644
index 00000000..6d6d79d0
--- /dev/null
+++ b/images/svg/angles-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/angles-left.svg b/images/svg/angles-left.svg
new file mode 100644
index 00000000..d6d20406
--- /dev/null
+++ b/images/svg/angles-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/angles-right.svg b/images/svg/angles-right.svg
new file mode 100644
index 00000000..0654d35e
--- /dev/null
+++ b/images/svg/angles-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/angles-up.svg b/images/svg/angles-up.svg
new file mode 100644
index 00000000..3806da04
--- /dev/null
+++ b/images/svg/angles-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ankh.svg b/images/svg/ankh.svg
new file mode 100644
index 00000000..54ab041e
--- /dev/null
+++ b/images/svg/ankh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/apple-whole.svg b/images/svg/apple-whole.svg
new file mode 100644
index 00000000..861be225
--- /dev/null
+++ b/images/svg/apple-whole.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/archway.svg b/images/svg/archway.svg
new file mode 100644
index 00000000..f66ad382
--- /dev/null
+++ b/images/svg/archway.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-down-1-9.svg b/images/svg/arrow-down-1-9.svg
new file mode 100644
index 00000000..bf28e2aa
--- /dev/null
+++ b/images/svg/arrow-down-1-9.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-down-9-1.svg b/images/svg/arrow-down-9-1.svg
new file mode 100644
index 00000000..0ccf49aa
--- /dev/null
+++ b/images/svg/arrow-down-9-1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-down-a-z.svg b/images/svg/arrow-down-a-z.svg
new file mode 100644
index 00000000..58ed7da9
--- /dev/null
+++ b/images/svg/arrow-down-a-z.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-down-long.svg b/images/svg/arrow-down-long.svg
new file mode 100644
index 00000000..04361197
--- /dev/null
+++ b/images/svg/arrow-down-long.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-down-short-wide.svg b/images/svg/arrow-down-short-wide.svg
new file mode 100644
index 00000000..0e4bd619
--- /dev/null
+++ b/images/svg/arrow-down-short-wide.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-down-up-across-line.svg b/images/svg/arrow-down-up-across-line.svg
new file mode 100644
index 00000000..a6b49fb8
--- /dev/null
+++ b/images/svg/arrow-down-up-across-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-down-up-lock.svg b/images/svg/arrow-down-up-lock.svg
new file mode 100644
index 00000000..3515331f
--- /dev/null
+++ b/images/svg/arrow-down-up-lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-down-wide-short.svg b/images/svg/arrow-down-wide-short.svg
new file mode 100644
index 00000000..631e2ac6
--- /dev/null
+++ b/images/svg/arrow-down-wide-short.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-down-z-a.svg b/images/svg/arrow-down-z-a.svg
new file mode 100644
index 00000000..237a9123
--- /dev/null
+++ b/images/svg/arrow-down-z-a.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-down.svg b/images/svg/arrow-down.svg
new file mode 100644
index 00000000..1afac666
--- /dev/null
+++ b/images/svg/arrow-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-left-long.svg b/images/svg/arrow-left-long.svg
new file mode 100644
index 00000000..4482af4a
--- /dev/null
+++ b/images/svg/arrow-left-long.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-left.svg b/images/svg/arrow-left.svg
new file mode 100644
index 00000000..b927121b
--- /dev/null
+++ b/images/svg/arrow-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-pointer.svg b/images/svg/arrow-pointer.svg
new file mode 100644
index 00000000..70afe4d0
--- /dev/null
+++ b/images/svg/arrow-pointer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-right-arrow-left.svg b/images/svg/arrow-right-arrow-left.svg
new file mode 100644
index 00000000..75dcf5c2
--- /dev/null
+++ b/images/svg/arrow-right-arrow-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-right-from-bracket.svg b/images/svg/arrow-right-from-bracket.svg
new file mode 100644
index 00000000..e4792a1f
--- /dev/null
+++ b/images/svg/arrow-right-from-bracket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-right-long.svg b/images/svg/arrow-right-long.svg
new file mode 100644
index 00000000..5776fd47
--- /dev/null
+++ b/images/svg/arrow-right-long.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-right-to-bracket.svg b/images/svg/arrow-right-to-bracket.svg
new file mode 100644
index 00000000..998b2252
--- /dev/null
+++ b/images/svg/arrow-right-to-bracket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-right-to-city.svg b/images/svg/arrow-right-to-city.svg
new file mode 100644
index 00000000..22b51292
--- /dev/null
+++ b/images/svg/arrow-right-to-city.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-right.svg b/images/svg/arrow-right.svg
new file mode 100644
index 00000000..9fb7fe97
--- /dev/null
+++ b/images/svg/arrow-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-rotate-left.svg b/images/svg/arrow-rotate-left.svg
new file mode 100644
index 00000000..694731a2
--- /dev/null
+++ b/images/svg/arrow-rotate-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-rotate-right.svg b/images/svg/arrow-rotate-right.svg
new file mode 100644
index 00000000..6f3f898c
--- /dev/null
+++ b/images/svg/arrow-rotate-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-trend-down.svg b/images/svg/arrow-trend-down.svg
new file mode 100644
index 00000000..63469be7
--- /dev/null
+++ b/images/svg/arrow-trend-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-trend-up.svg b/images/svg/arrow-trend-up.svg
new file mode 100644
index 00000000..3a2c0911
--- /dev/null
+++ b/images/svg/arrow-trend-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-turn-down.svg b/images/svg/arrow-turn-down.svg
new file mode 100644
index 00000000..3fb67b47
--- /dev/null
+++ b/images/svg/arrow-turn-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-turn-up.svg b/images/svg/arrow-turn-up.svg
new file mode 100644
index 00000000..ffdf628a
--- /dev/null
+++ b/images/svg/arrow-turn-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up-1-9.svg b/images/svg/arrow-up-1-9.svg
new file mode 100644
index 00000000..8eb50c7b
--- /dev/null
+++ b/images/svg/arrow-up-1-9.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up-9-1.svg b/images/svg/arrow-up-9-1.svg
new file mode 100644
index 00000000..dcce2874
--- /dev/null
+++ b/images/svg/arrow-up-9-1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up-a-z.svg b/images/svg/arrow-up-a-z.svg
new file mode 100644
index 00000000..9038e7ea
--- /dev/null
+++ b/images/svg/arrow-up-a-z.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up-from-bracket.svg b/images/svg/arrow-up-from-bracket.svg
new file mode 100644
index 00000000..a04b57ed
--- /dev/null
+++ b/images/svg/arrow-up-from-bracket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up-from-ground-water.svg b/images/svg/arrow-up-from-ground-water.svg
new file mode 100644
index 00000000..0edcf9b6
--- /dev/null
+++ b/images/svg/arrow-up-from-ground-water.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up-from-water-pump.svg b/images/svg/arrow-up-from-water-pump.svg
new file mode 100644
index 00000000..7b4f0b4e
--- /dev/null
+++ b/images/svg/arrow-up-from-water-pump.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up-long.svg b/images/svg/arrow-up-long.svg
new file mode 100644
index 00000000..0bb0b7ed
--- /dev/null
+++ b/images/svg/arrow-up-long.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up-right-dots.svg b/images/svg/arrow-up-right-dots.svg
new file mode 100644
index 00000000..d97333ce
--- /dev/null
+++ b/images/svg/arrow-up-right-dots.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up-right-from-square.svg b/images/svg/arrow-up-right-from-square.svg
new file mode 100644
index 00000000..523a34e9
--- /dev/null
+++ b/images/svg/arrow-up-right-from-square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up-short-wide.svg b/images/svg/arrow-up-short-wide.svg
new file mode 100644
index 00000000..65bf7e2e
--- /dev/null
+++ b/images/svg/arrow-up-short-wide.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up-wide-short.svg b/images/svg/arrow-up-wide-short.svg
new file mode 100644
index 00000000..ee547e0a
--- /dev/null
+++ b/images/svg/arrow-up-wide-short.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up-z-a.svg b/images/svg/arrow-up-z-a.svg
new file mode 100644
index 00000000..0174594f
--- /dev/null
+++ b/images/svg/arrow-up-z-a.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrow-up.svg b/images/svg/arrow-up.svg
new file mode 100644
index 00000000..87b58498
--- /dev/null
+++ b/images/svg/arrow-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-down-to-line.svg b/images/svg/arrows-down-to-line.svg
new file mode 100644
index 00000000..8d380274
--- /dev/null
+++ b/images/svg/arrows-down-to-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-down-to-people.svg b/images/svg/arrows-down-to-people.svg
new file mode 100644
index 00000000..25ea589e
--- /dev/null
+++ b/images/svg/arrows-down-to-people.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-left-right-to-line.svg b/images/svg/arrows-left-right-to-line.svg
new file mode 100644
index 00000000..24289272
--- /dev/null
+++ b/images/svg/arrows-left-right-to-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-left-right.svg b/images/svg/arrows-left-right.svg
new file mode 100644
index 00000000..3f9ab9c0
--- /dev/null
+++ b/images/svg/arrows-left-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-rotate.svg b/images/svg/arrows-rotate.svg
new file mode 100644
index 00000000..13651dd2
--- /dev/null
+++ b/images/svg/arrows-rotate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-spin.svg b/images/svg/arrows-spin.svg
new file mode 100644
index 00000000..4ff7560b
--- /dev/null
+++ b/images/svg/arrows-spin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-split-up-and-left.svg b/images/svg/arrows-split-up-and-left.svg
new file mode 100644
index 00000000..f85e859e
--- /dev/null
+++ b/images/svg/arrows-split-up-and-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-to-circle.svg b/images/svg/arrows-to-circle.svg
new file mode 100644
index 00000000..78d8d7b8
--- /dev/null
+++ b/images/svg/arrows-to-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-to-dot.svg b/images/svg/arrows-to-dot.svg
new file mode 100644
index 00000000..cf38a62c
--- /dev/null
+++ b/images/svg/arrows-to-dot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-to-eye.svg b/images/svg/arrows-to-eye.svg
new file mode 100644
index 00000000..f588d011
--- /dev/null
+++ b/images/svg/arrows-to-eye.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-turn-right.svg b/images/svg/arrows-turn-right.svg
new file mode 100644
index 00000000..08167508
--- /dev/null
+++ b/images/svg/arrows-turn-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-turn-to-dots.svg b/images/svg/arrows-turn-to-dots.svg
new file mode 100644
index 00000000..3c4c527f
--- /dev/null
+++ b/images/svg/arrows-turn-to-dots.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-up-down-left-right.svg b/images/svg/arrows-up-down-left-right.svg
new file mode 100644
index 00000000..a3f51a80
--- /dev/null
+++ b/images/svg/arrows-up-down-left-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-up-down.svg b/images/svg/arrows-up-down.svg
new file mode 100644
index 00000000..df548fb1
--- /dev/null
+++ b/images/svg/arrows-up-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/arrows-up-to-line.svg b/images/svg/arrows-up-to-line.svg
new file mode 100644
index 00000000..af3aba81
--- /dev/null
+++ b/images/svg/arrows-up-to-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/asterisk.svg b/images/svg/asterisk.svg
new file mode 100644
index 00000000..98320217
--- /dev/null
+++ b/images/svg/asterisk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/at.svg b/images/svg/at.svg
new file mode 100644
index 00000000..d25f5dec
--- /dev/null
+++ b/images/svg/at.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/atom.svg b/images/svg/atom.svg
new file mode 100644
index 00000000..313a9178
--- /dev/null
+++ b/images/svg/atom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/audio-description.svg b/images/svg/audio-description.svg
new file mode 100644
index 00000000..ab7bd525
--- /dev/null
+++ b/images/svg/audio-description.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/austral-sign.svg b/images/svg/austral-sign.svg
new file mode 100644
index 00000000..a6894cee
--- /dev/null
+++ b/images/svg/austral-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/award.svg b/images/svg/award.svg
new file mode 100644
index 00000000..8049abe0
--- /dev/null
+++ b/images/svg/award.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/b.svg b/images/svg/b.svg
new file mode 100644
index 00000000..f68be5e9
--- /dev/null
+++ b/images/svg/b.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/baby-carriage.svg b/images/svg/baby-carriage.svg
new file mode 100644
index 00000000..86246cb6
--- /dev/null
+++ b/images/svg/baby-carriage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/baby.svg b/images/svg/baby.svg
new file mode 100644
index 00000000..a1749df3
--- /dev/null
+++ b/images/svg/baby.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/backward-fast.svg b/images/svg/backward-fast.svg
new file mode 100644
index 00000000..86cf8b00
--- /dev/null
+++ b/images/svg/backward-fast.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/backward-step.svg b/images/svg/backward-step.svg
new file mode 100644
index 00000000..089cc565
--- /dev/null
+++ b/images/svg/backward-step.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/backward.svg b/images/svg/backward.svg
new file mode 100644
index 00000000..4496eb25
--- /dev/null
+++ b/images/svg/backward.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bacon.svg b/images/svg/bacon.svg
new file mode 100644
index 00000000..9aa4e14b
--- /dev/null
+++ b/images/svg/bacon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bacteria.svg b/images/svg/bacteria.svg
new file mode 100644
index 00000000..2244590a
--- /dev/null
+++ b/images/svg/bacteria.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bacterium.svg b/images/svg/bacterium.svg
new file mode 100644
index 00000000..3c77b685
--- /dev/null
+++ b/images/svg/bacterium.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bag-shopping.svg b/images/svg/bag-shopping.svg
new file mode 100644
index 00000000..c6e0eceb
--- /dev/null
+++ b/images/svg/bag-shopping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bahai.svg b/images/svg/bahai.svg
new file mode 100644
index 00000000..6c8d98be
--- /dev/null
+++ b/images/svg/bahai.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/baht-sign.svg b/images/svg/baht-sign.svg
new file mode 100644
index 00000000..b8cf0819
--- /dev/null
+++ b/images/svg/baht-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ban-smoking.svg b/images/svg/ban-smoking.svg
new file mode 100644
index 00000000..1e2951d3
--- /dev/null
+++ b/images/svg/ban-smoking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ban.svg b/images/svg/ban.svg
new file mode 100644
index 00000000..cd84b0ee
--- /dev/null
+++ b/images/svg/ban.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bandage.svg b/images/svg/bandage.svg
new file mode 100644
index 00000000..7d3a0e8b
--- /dev/null
+++ b/images/svg/bandage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bangladeshi-taka-sign.svg b/images/svg/bangladeshi-taka-sign.svg
new file mode 100644
index 00000000..8983a9c3
--- /dev/null
+++ b/images/svg/bangladeshi-taka-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/barcode.svg b/images/svg/barcode.svg
new file mode 100644
index 00000000..c9a9c840
--- /dev/null
+++ b/images/svg/barcode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bars-progress.svg b/images/svg/bars-progress.svg
new file mode 100644
index 00000000..41e947a6
--- /dev/null
+++ b/images/svg/bars-progress.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bars-staggered.svg b/images/svg/bars-staggered.svg
new file mode 100644
index 00000000..01258c59
--- /dev/null
+++ b/images/svg/bars-staggered.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bars.svg b/images/svg/bars.svg
new file mode 100644
index 00000000..8a541299
--- /dev/null
+++ b/images/svg/bars.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/baseball-bat-ball.svg b/images/svg/baseball-bat-ball.svg
new file mode 100644
index 00000000..5a80b217
--- /dev/null
+++ b/images/svg/baseball-bat-ball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/baseball.svg b/images/svg/baseball.svg
new file mode 100644
index 00000000..10ccb592
--- /dev/null
+++ b/images/svg/baseball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/basket-shopping.svg b/images/svg/basket-shopping.svg
new file mode 100644
index 00000000..fe41145e
--- /dev/null
+++ b/images/svg/basket-shopping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/basketball.svg b/images/svg/basketball.svg
new file mode 100644
index 00000000..6b0d71df
--- /dev/null
+++ b/images/svg/basketball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bath.svg b/images/svg/bath.svg
new file mode 100644
index 00000000..fceafb8b
--- /dev/null
+++ b/images/svg/bath.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/battery-empty.svg b/images/svg/battery-empty.svg
new file mode 100644
index 00000000..29cb43f2
--- /dev/null
+++ b/images/svg/battery-empty.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/battery-full.svg b/images/svg/battery-full.svg
new file mode 100644
index 00000000..31043533
--- /dev/null
+++ b/images/svg/battery-full.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/battery-half.svg b/images/svg/battery-half.svg
new file mode 100644
index 00000000..877ed436
--- /dev/null
+++ b/images/svg/battery-half.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/battery-quarter.svg b/images/svg/battery-quarter.svg
new file mode 100644
index 00000000..4daae7ec
--- /dev/null
+++ b/images/svg/battery-quarter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/battery-three-quarters.svg b/images/svg/battery-three-quarters.svg
new file mode 100644
index 00000000..87df0cb4
--- /dev/null
+++ b/images/svg/battery-three-quarters.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bed-pulse.svg b/images/svg/bed-pulse.svg
new file mode 100644
index 00000000..3263fdbd
--- /dev/null
+++ b/images/svg/bed-pulse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bed.svg b/images/svg/bed.svg
new file mode 100644
index 00000000..3b9619b0
--- /dev/null
+++ b/images/svg/bed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/beer-mug-empty.svg b/images/svg/beer-mug-empty.svg
new file mode 100644
index 00000000..123618dd
--- /dev/null
+++ b/images/svg/beer-mug-empty.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bell-concierge.svg b/images/svg/bell-concierge.svg
new file mode 100644
index 00000000..6bf2784c
--- /dev/null
+++ b/images/svg/bell-concierge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bell-slash.svg b/images/svg/bell-slash.svg
new file mode 100644
index 00000000..bb2dc273
--- /dev/null
+++ b/images/svg/bell-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bell.svg b/images/svg/bell.svg
new file mode 100644
index 00000000..78c8d785
--- /dev/null
+++ b/images/svg/bell.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bezier-curve.svg b/images/svg/bezier-curve.svg
new file mode 100644
index 00000000..11363ecb
--- /dev/null
+++ b/images/svg/bezier-curve.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bicycle.svg b/images/svg/bicycle.svg
new file mode 100644
index 00000000..06d4fcd7
--- /dev/null
+++ b/images/svg/bicycle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/binoculars.svg b/images/svg/binoculars.svg
new file mode 100644
index 00000000..ebd6cb27
--- /dev/null
+++ b/images/svg/binoculars.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/biohazard.svg b/images/svg/biohazard.svg
new file mode 100644
index 00000000..bd01273a
--- /dev/null
+++ b/images/svg/biohazard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bitcoin-sign.svg b/images/svg/bitcoin-sign.svg
new file mode 100644
index 00000000..f52df3b1
--- /dev/null
+++ b/images/svg/bitcoin-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/blender-phone.svg b/images/svg/blender-phone.svg
new file mode 100644
index 00000000..586264b6
--- /dev/null
+++ b/images/svg/blender-phone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/blender.svg b/images/svg/blender.svg
new file mode 100644
index 00000000..2b246841
--- /dev/null
+++ b/images/svg/blender.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/blog.svg b/images/svg/blog.svg
new file mode 100644
index 00000000..8ea406e7
--- /dev/null
+++ b/images/svg/blog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bold.svg b/images/svg/bold.svg
new file mode 100644
index 00000000..a734a206
--- /dev/null
+++ b/images/svg/bold.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bolt-lightning.svg b/images/svg/bolt-lightning.svg
new file mode 100644
index 00000000..adebe625
--- /dev/null
+++ b/images/svg/bolt-lightning.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bolt.svg b/images/svg/bolt.svg
new file mode 100644
index 00000000..78544f30
--- /dev/null
+++ b/images/svg/bolt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bomb.svg b/images/svg/bomb.svg
new file mode 100644
index 00000000..5daaa40b
--- /dev/null
+++ b/images/svg/bomb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bone.svg b/images/svg/bone.svg
new file mode 100644
index 00000000..51f26b03
--- /dev/null
+++ b/images/svg/bone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bong.svg b/images/svg/bong.svg
new file mode 100644
index 00000000..5efd2190
--- /dev/null
+++ b/images/svg/bong.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/book-atlas.svg b/images/svg/book-atlas.svg
new file mode 100644
index 00000000..12604d3e
--- /dev/null
+++ b/images/svg/book-atlas.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/book-bible.svg b/images/svg/book-bible.svg
new file mode 100644
index 00000000..411a76d7
--- /dev/null
+++ b/images/svg/book-bible.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/book-bookmark.svg b/images/svg/book-bookmark.svg
new file mode 100644
index 00000000..910f20ae
--- /dev/null
+++ b/images/svg/book-bookmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/book-journal-whills.svg b/images/svg/book-journal-whills.svg
new file mode 100644
index 00000000..c0545b7a
--- /dev/null
+++ b/images/svg/book-journal-whills.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/book-medical.svg b/images/svg/book-medical.svg
new file mode 100644
index 00000000..f8f757ac
--- /dev/null
+++ b/images/svg/book-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/book-open-reader.svg b/images/svg/book-open-reader.svg
new file mode 100644
index 00000000..907c3675
--- /dev/null
+++ b/images/svg/book-open-reader.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/book-open.svg b/images/svg/book-open.svg
new file mode 100644
index 00000000..080898bf
--- /dev/null
+++ b/images/svg/book-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/book-quran.svg b/images/svg/book-quran.svg
new file mode 100644
index 00000000..43b7eacd
--- /dev/null
+++ b/images/svg/book-quran.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/book-skull.svg b/images/svg/book-skull.svg
new file mode 100644
index 00000000..0b0addaf
--- /dev/null
+++ b/images/svg/book-skull.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/book-tanakh.svg b/images/svg/book-tanakh.svg
new file mode 100644
index 00000000..63d0930d
--- /dev/null
+++ b/images/svg/book-tanakh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/book.svg b/images/svg/book.svg
new file mode 100644
index 00000000..325c7f17
--- /dev/null
+++ b/images/svg/book.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bookmark.svg b/images/svg/bookmark.svg
new file mode 100644
index 00000000..fb3514bc
--- /dev/null
+++ b/images/svg/bookmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/border-all.svg b/images/svg/border-all.svg
new file mode 100644
index 00000000..dc7766d8
--- /dev/null
+++ b/images/svg/border-all.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/border-none.svg b/images/svg/border-none.svg
new file mode 100644
index 00000000..ca2aa1d2
--- /dev/null
+++ b/images/svg/border-none.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/border-top-left.svg b/images/svg/border-top-left.svg
new file mode 100644
index 00000000..031e2444
--- /dev/null
+++ b/images/svg/border-top-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bore-hole.svg b/images/svg/bore-hole.svg
new file mode 100644
index 00000000..7948c21b
--- /dev/null
+++ b/images/svg/bore-hole.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bottle-droplet.svg b/images/svg/bottle-droplet.svg
new file mode 100644
index 00000000..250a47b7
--- /dev/null
+++ b/images/svg/bottle-droplet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bottle-water.svg b/images/svg/bottle-water.svg
new file mode 100644
index 00000000..e81b7b3d
--- /dev/null
+++ b/images/svg/bottle-water.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bowl-food.svg b/images/svg/bowl-food.svg
new file mode 100644
index 00000000..d152deab
--- /dev/null
+++ b/images/svg/bowl-food.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bowl-rice.svg b/images/svg/bowl-rice.svg
new file mode 100644
index 00000000..338d333a
--- /dev/null
+++ b/images/svg/bowl-rice.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bowling-ball.svg b/images/svg/bowling-ball.svg
new file mode 100644
index 00000000..1ea3464f
--- /dev/null
+++ b/images/svg/bowling-ball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/box-archive.svg b/images/svg/box-archive.svg
new file mode 100644
index 00000000..1cf3f7de
--- /dev/null
+++ b/images/svg/box-archive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/box-open.svg b/images/svg/box-open.svg
new file mode 100644
index 00000000..a8263651
--- /dev/null
+++ b/images/svg/box-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/box-tissue.svg b/images/svg/box-tissue.svg
new file mode 100644
index 00000000..c2704c26
--- /dev/null
+++ b/images/svg/box-tissue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/box.svg b/images/svg/box.svg
new file mode 100644
index 00000000..2c2ee47e
--- /dev/null
+++ b/images/svg/box.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/boxes-packing.svg b/images/svg/boxes-packing.svg
new file mode 100644
index 00000000..380376ee
--- /dev/null
+++ b/images/svg/boxes-packing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/boxes-stacked.svg b/images/svg/boxes-stacked.svg
new file mode 100644
index 00000000..11769b46
--- /dev/null
+++ b/images/svg/boxes-stacked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/braille.svg b/images/svg/braille.svg
new file mode 100644
index 00000000..286db56d
--- /dev/null
+++ b/images/svg/braille.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/brain.svg b/images/svg/brain.svg
new file mode 100644
index 00000000..8e377b76
--- /dev/null
+++ b/images/svg/brain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/brazilian-real-sign.svg b/images/svg/brazilian-real-sign.svg
new file mode 100644
index 00000000..257bd11d
--- /dev/null
+++ b/images/svg/brazilian-real-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bread-slice.svg b/images/svg/bread-slice.svg
new file mode 100644
index 00000000..97fa0954
--- /dev/null
+++ b/images/svg/bread-slice.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bridge-circle-check.svg b/images/svg/bridge-circle-check.svg
new file mode 100644
index 00000000..7c51f4ad
--- /dev/null
+++ b/images/svg/bridge-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bridge-circle-exclamation.svg b/images/svg/bridge-circle-exclamation.svg
new file mode 100644
index 00000000..1eda3324
--- /dev/null
+++ b/images/svg/bridge-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bridge-circle-xmark.svg b/images/svg/bridge-circle-xmark.svg
new file mode 100644
index 00000000..d9b09035
--- /dev/null
+++ b/images/svg/bridge-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bridge-lock.svg b/images/svg/bridge-lock.svg
new file mode 100644
index 00000000..6ce2b843
--- /dev/null
+++ b/images/svg/bridge-lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bridge-water.svg b/images/svg/bridge-water.svg
new file mode 100644
index 00000000..9d0d27e3
--- /dev/null
+++ b/images/svg/bridge-water.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bridge.svg b/images/svg/bridge.svg
new file mode 100644
index 00000000..f246e3e3
--- /dev/null
+++ b/images/svg/bridge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/briefcase-medical.svg b/images/svg/briefcase-medical.svg
new file mode 100644
index 00000000..82e388ef
--- /dev/null
+++ b/images/svg/briefcase-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/briefcase.svg b/images/svg/briefcase.svg
new file mode 100644
index 00000000..2f34805d
--- /dev/null
+++ b/images/svg/briefcase.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/broom-ball.svg b/images/svg/broom-ball.svg
new file mode 100644
index 00000000..68cce3c7
--- /dev/null
+++ b/images/svg/broom-ball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/broom.svg b/images/svg/broom.svg
new file mode 100644
index 00000000..347d700f
--- /dev/null
+++ b/images/svg/broom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/brush.svg b/images/svg/brush.svg
new file mode 100644
index 00000000..09d8464f
--- /dev/null
+++ b/images/svg/brush.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bucket.svg b/images/svg/bucket.svg
new file mode 100644
index 00000000..8e441e82
--- /dev/null
+++ b/images/svg/bucket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bug-slash.svg b/images/svg/bug-slash.svg
new file mode 100644
index 00000000..2f07d6fa
--- /dev/null
+++ b/images/svg/bug-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bug.svg b/images/svg/bug.svg
new file mode 100644
index 00000000..be5da648
--- /dev/null
+++ b/images/svg/bug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bugs.svg b/images/svg/bugs.svg
new file mode 100644
index 00000000..17b492ce
--- /dev/null
+++ b/images/svg/bugs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building-circle-arrow-right.svg b/images/svg/building-circle-arrow-right.svg
new file mode 100644
index 00000000..e7e70724
--- /dev/null
+++ b/images/svg/building-circle-arrow-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building-circle-check.svg b/images/svg/building-circle-check.svg
new file mode 100644
index 00000000..e1254e44
--- /dev/null
+++ b/images/svg/building-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building-circle-exclamation.svg b/images/svg/building-circle-exclamation.svg
new file mode 100644
index 00000000..d747145f
--- /dev/null
+++ b/images/svg/building-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building-circle-xmark.svg b/images/svg/building-circle-xmark.svg
new file mode 100644
index 00000000..198cf8d6
--- /dev/null
+++ b/images/svg/building-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building-columns.svg b/images/svg/building-columns.svg
new file mode 100644
index 00000000..72ea62cd
--- /dev/null
+++ b/images/svg/building-columns.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building-flag.svg b/images/svg/building-flag.svg
new file mode 100644
index 00000000..faacb6f0
--- /dev/null
+++ b/images/svg/building-flag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building-lock.svg b/images/svg/building-lock.svg
new file mode 100644
index 00000000..696a0daa
--- /dev/null
+++ b/images/svg/building-lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building-ngo.svg b/images/svg/building-ngo.svg
new file mode 100644
index 00000000..165504a6
--- /dev/null
+++ b/images/svg/building-ngo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building-shield.svg b/images/svg/building-shield.svg
new file mode 100644
index 00000000..b10f7ed1
--- /dev/null
+++ b/images/svg/building-shield.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building-un.svg b/images/svg/building-un.svg
new file mode 100644
index 00000000..c1040d9e
--- /dev/null
+++ b/images/svg/building-un.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building-user.svg b/images/svg/building-user.svg
new file mode 100644
index 00000000..2e20f7f2
--- /dev/null
+++ b/images/svg/building-user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building-wheat.svg b/images/svg/building-wheat.svg
new file mode 100644
index 00000000..d6b66de7
--- /dev/null
+++ b/images/svg/building-wheat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/building.svg b/images/svg/building.svg
new file mode 100644
index 00000000..a5754b37
--- /dev/null
+++ b/images/svg/building.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bullhorn.svg b/images/svg/bullhorn.svg
new file mode 100644
index 00000000..9b9ff849
--- /dev/null
+++ b/images/svg/bullhorn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bullseye.svg b/images/svg/bullseye.svg
new file mode 100644
index 00000000..1f707f32
--- /dev/null
+++ b/images/svg/bullseye.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/burger.svg b/images/svg/burger.svg
new file mode 100644
index 00000000..a991da10
--- /dev/null
+++ b/images/svg/burger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/burst.svg b/images/svg/burst.svg
new file mode 100644
index 00000000..6561c864
--- /dev/null
+++ b/images/svg/burst.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bus-simple.svg b/images/svg/bus-simple.svg
new file mode 100644
index 00000000..c44f8efd
--- /dev/null
+++ b/images/svg/bus-simple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/bus.svg b/images/svg/bus.svg
new file mode 100644
index 00000000..bfd4937f
--- /dev/null
+++ b/images/svg/bus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/business-time.svg b/images/svg/business-time.svg
new file mode 100644
index 00000000..08657d8d
--- /dev/null
+++ b/images/svg/business-time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/c.svg b/images/svg/c.svg
new file mode 100644
index 00000000..a9c29ede
--- /dev/null
+++ b/images/svg/c.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cable-car.svg b/images/svg/cable-car.svg
new file mode 100644
index 00000000..250c760e
--- /dev/null
+++ b/images/svg/cable-car.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cake-candles.svg b/images/svg/cake-candles.svg
new file mode 100644
index 00000000..3327a2d7
--- /dev/null
+++ b/images/svg/cake-candles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/calculator.svg b/images/svg/calculator.svg
new file mode 100644
index 00000000..ecef7f03
--- /dev/null
+++ b/images/svg/calculator.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/calendar-check.svg b/images/svg/calendar-check.svg
new file mode 100644
index 00000000..e30dbfa4
--- /dev/null
+++ b/images/svg/calendar-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/calendar-day.svg b/images/svg/calendar-day.svg
new file mode 100644
index 00000000..cacee71e
--- /dev/null
+++ b/images/svg/calendar-day.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/calendar-days.svg b/images/svg/calendar-days.svg
new file mode 100644
index 00000000..ed6969e0
--- /dev/null
+++ b/images/svg/calendar-days.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/calendar-minus.svg b/images/svg/calendar-minus.svg
new file mode 100644
index 00000000..dd168dc6
--- /dev/null
+++ b/images/svg/calendar-minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/calendar-plus.svg b/images/svg/calendar-plus.svg
new file mode 100644
index 00000000..326d5b73
--- /dev/null
+++ b/images/svg/calendar-plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/calendar-week.svg b/images/svg/calendar-week.svg
new file mode 100644
index 00000000..bd09163c
--- /dev/null
+++ b/images/svg/calendar-week.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/calendar-xmark.svg b/images/svg/calendar-xmark.svg
new file mode 100644
index 00000000..93204b66
--- /dev/null
+++ b/images/svg/calendar-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/calendar.svg b/images/svg/calendar.svg
new file mode 100644
index 00000000..3f55c64f
--- /dev/null
+++ b/images/svg/calendar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/camera-retro.svg b/images/svg/camera-retro.svg
new file mode 100644
index 00000000..ec771f7e
--- /dev/null
+++ b/images/svg/camera-retro.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/camera-rotate.svg b/images/svg/camera-rotate.svg
new file mode 100644
index 00000000..1453b478
--- /dev/null
+++ b/images/svg/camera-rotate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/camera.svg b/images/svg/camera.svg
new file mode 100644
index 00000000..edf047c0
--- /dev/null
+++ b/images/svg/camera.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/campground.svg b/images/svg/campground.svg
new file mode 100644
index 00000000..4a1fe6c9
--- /dev/null
+++ b/images/svg/campground.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/candy-cane.svg b/images/svg/candy-cane.svg
new file mode 100644
index 00000000..4cfe55ea
--- /dev/null
+++ b/images/svg/candy-cane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cannabis.svg b/images/svg/cannabis.svg
new file mode 100644
index 00000000..66d55808
--- /dev/null
+++ b/images/svg/cannabis.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/capsules.svg b/images/svg/capsules.svg
new file mode 100644
index 00000000..46108beb
--- /dev/null
+++ b/images/svg/capsules.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/car-battery.svg b/images/svg/car-battery.svg
new file mode 100644
index 00000000..ccfbb733
--- /dev/null
+++ b/images/svg/car-battery.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/car-burst.svg b/images/svg/car-burst.svg
new file mode 100644
index 00000000..dd0ec4c4
--- /dev/null
+++ b/images/svg/car-burst.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/car-on.svg b/images/svg/car-on.svg
new file mode 100644
index 00000000..4d2024ac
--- /dev/null
+++ b/images/svg/car-on.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/car-rear.svg b/images/svg/car-rear.svg
new file mode 100644
index 00000000..736b82ea
--- /dev/null
+++ b/images/svg/car-rear.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/car-side.svg b/images/svg/car-side.svg
new file mode 100644
index 00000000..08c945f2
--- /dev/null
+++ b/images/svg/car-side.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/car-tunnel.svg b/images/svg/car-tunnel.svg
new file mode 100644
index 00000000..7ee746e2
--- /dev/null
+++ b/images/svg/car-tunnel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/car.svg b/images/svg/car.svg
new file mode 100644
index 00000000..64b03c67
--- /dev/null
+++ b/images/svg/car.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/caravan.svg b/images/svg/caravan.svg
new file mode 100644
index 00000000..3a9e0866
--- /dev/null
+++ b/images/svg/caravan.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/caret-down.svg b/images/svg/caret-down.svg
new file mode 100644
index 00000000..d4352eaa
--- /dev/null
+++ b/images/svg/caret-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/caret-left.svg b/images/svg/caret-left.svg
new file mode 100644
index 00000000..55e5ef95
--- /dev/null
+++ b/images/svg/caret-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/caret-right.svg b/images/svg/caret-right.svg
new file mode 100644
index 00000000..564930df
--- /dev/null
+++ b/images/svg/caret-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/caret-up.svg b/images/svg/caret-up.svg
new file mode 100644
index 00000000..42788b17
--- /dev/null
+++ b/images/svg/caret-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/carrot.svg b/images/svg/carrot.svg
new file mode 100644
index 00000000..15a86c31
--- /dev/null
+++ b/images/svg/carrot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cart-arrow-down.svg b/images/svg/cart-arrow-down.svg
new file mode 100644
index 00000000..531a0fd5
--- /dev/null
+++ b/images/svg/cart-arrow-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cart-flatbed-suitcase.svg b/images/svg/cart-flatbed-suitcase.svg
new file mode 100644
index 00000000..786268f4
--- /dev/null
+++ b/images/svg/cart-flatbed-suitcase.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cart-flatbed.svg b/images/svg/cart-flatbed.svg
new file mode 100644
index 00000000..d7332f66
--- /dev/null
+++ b/images/svg/cart-flatbed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cart-plus.svg b/images/svg/cart-plus.svg
new file mode 100644
index 00000000..a0b45c69
--- /dev/null
+++ b/images/svg/cart-plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cart-shopping.svg b/images/svg/cart-shopping.svg
new file mode 100644
index 00000000..697682ee
--- /dev/null
+++ b/images/svg/cart-shopping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cash-register.svg b/images/svg/cash-register.svg
new file mode 100644
index 00000000..75a3c82a
--- /dev/null
+++ b/images/svg/cash-register.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cat.svg b/images/svg/cat.svg
new file mode 100644
index 00000000..a3347771
--- /dev/null
+++ b/images/svg/cat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cedi-sign.svg b/images/svg/cedi-sign.svg
new file mode 100644
index 00000000..2f3db390
--- /dev/null
+++ b/images/svg/cedi-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cent-sign.svg b/images/svg/cent-sign.svg
new file mode 100644
index 00000000..04cb0306
--- /dev/null
+++ b/images/svg/cent-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/certificate.svg b/images/svg/certificate.svg
new file mode 100644
index 00000000..bf8d086d
--- /dev/null
+++ b/images/svg/certificate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chair.svg b/images/svg/chair.svg
new file mode 100644
index 00000000..59d989f3
--- /dev/null
+++ b/images/svg/chair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chalkboard-user.svg b/images/svg/chalkboard-user.svg
new file mode 100644
index 00000000..ad065562
--- /dev/null
+++ b/images/svg/chalkboard-user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chalkboard.svg b/images/svg/chalkboard.svg
new file mode 100644
index 00000000..2a315044
--- /dev/null
+++ b/images/svg/chalkboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/champagne-glasses.svg b/images/svg/champagne-glasses.svg
new file mode 100644
index 00000000..f9629511
--- /dev/null
+++ b/images/svg/champagne-glasses.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/charging-station.svg b/images/svg/charging-station.svg
new file mode 100644
index 00000000..e2f4d39b
--- /dev/null
+++ b/images/svg/charging-station.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chart-area.svg b/images/svg/chart-area.svg
new file mode 100644
index 00000000..69ed05c9
--- /dev/null
+++ b/images/svg/chart-area.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chart-bar.svg b/images/svg/chart-bar.svg
new file mode 100644
index 00000000..51ca300d
--- /dev/null
+++ b/images/svg/chart-bar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chart-column.svg b/images/svg/chart-column.svg
new file mode 100644
index 00000000..4e25c7cb
--- /dev/null
+++ b/images/svg/chart-column.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chart-gantt.svg b/images/svg/chart-gantt.svg
new file mode 100644
index 00000000..302c377a
--- /dev/null
+++ b/images/svg/chart-gantt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chart-line.svg b/images/svg/chart-line.svg
new file mode 100644
index 00000000..fa06f7ab
--- /dev/null
+++ b/images/svg/chart-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chart-pie.svg b/images/svg/chart-pie.svg
new file mode 100644
index 00000000..cacfde32
--- /dev/null
+++ b/images/svg/chart-pie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chart-simple.svg b/images/svg/chart-simple.svg
new file mode 100644
index 00000000..fc34fc48
--- /dev/null
+++ b/images/svg/chart-simple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/check-double.svg b/images/svg/check-double.svg
new file mode 100644
index 00000000..0db79bcf
--- /dev/null
+++ b/images/svg/check-double.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/check-to-slot.svg b/images/svg/check-to-slot.svg
new file mode 100644
index 00000000..5c9926cf
--- /dev/null
+++ b/images/svg/check-to-slot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/check.svg b/images/svg/check.svg
new file mode 100644
index 00000000..e0e7c942
--- /dev/null
+++ b/images/svg/check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cheese.svg b/images/svg/cheese.svg
new file mode 100644
index 00000000..be46fa28
--- /dev/null
+++ b/images/svg/cheese.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chess-bishop.svg b/images/svg/chess-bishop.svg
new file mode 100644
index 00000000..e69f5090
--- /dev/null
+++ b/images/svg/chess-bishop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chess-board.svg b/images/svg/chess-board.svg
new file mode 100644
index 00000000..8e3e7a15
--- /dev/null
+++ b/images/svg/chess-board.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chess-king.svg b/images/svg/chess-king.svg
new file mode 100644
index 00000000..2d1068fe
--- /dev/null
+++ b/images/svg/chess-king.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chess-knight.svg b/images/svg/chess-knight.svg
new file mode 100644
index 00000000..24496f30
--- /dev/null
+++ b/images/svg/chess-knight.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chess-pawn.svg b/images/svg/chess-pawn.svg
new file mode 100644
index 00000000..cdf7b7be
--- /dev/null
+++ b/images/svg/chess-pawn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chess-queen.svg b/images/svg/chess-queen.svg
new file mode 100644
index 00000000..a03660d9
--- /dev/null
+++ b/images/svg/chess-queen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chess-rook.svg b/images/svg/chess-rook.svg
new file mode 100644
index 00000000..b402434a
--- /dev/null
+++ b/images/svg/chess-rook.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chess.svg b/images/svg/chess.svg
new file mode 100644
index 00000000..362a2dce
--- /dev/null
+++ b/images/svg/chess.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chevron-down.svg b/images/svg/chevron-down.svg
new file mode 100644
index 00000000..2055a4a4
--- /dev/null
+++ b/images/svg/chevron-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chevron-left.svg b/images/svg/chevron-left.svg
new file mode 100644
index 00000000..03c9c8f4
--- /dev/null
+++ b/images/svg/chevron-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chevron-right.svg b/images/svg/chevron-right.svg
new file mode 100644
index 00000000..b84c11a9
--- /dev/null
+++ b/images/svg/chevron-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/chevron-up.svg b/images/svg/chevron-up.svg
new file mode 100644
index 00000000..a04a1ac1
--- /dev/null
+++ b/images/svg/chevron-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/child-combatant.svg b/images/svg/child-combatant.svg
new file mode 100644
index 00000000..68597276
--- /dev/null
+++ b/images/svg/child-combatant.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/child-dress.svg b/images/svg/child-dress.svg
new file mode 100644
index 00000000..caaa14a1
--- /dev/null
+++ b/images/svg/child-dress.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/child-reaching.svg b/images/svg/child-reaching.svg
new file mode 100644
index 00000000..6ee9c6c3
--- /dev/null
+++ b/images/svg/child-reaching.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/child.svg b/images/svg/child.svg
new file mode 100644
index 00000000..0774f518
--- /dev/null
+++ b/images/svg/child.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/children.svg b/images/svg/children.svg
new file mode 100644
index 00000000..e9aa5b41
--- /dev/null
+++ b/images/svg/children.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/church.svg b/images/svg/church.svg
new file mode 100644
index 00000000..035f767e
--- /dev/null
+++ b/images/svg/church.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-arrow-down.svg b/images/svg/circle-arrow-down.svg
new file mode 100644
index 00000000..849db9f5
--- /dev/null
+++ b/images/svg/circle-arrow-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-arrow-left.svg b/images/svg/circle-arrow-left.svg
new file mode 100644
index 00000000..c5c6b7fb
--- /dev/null
+++ b/images/svg/circle-arrow-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-arrow-right.svg b/images/svg/circle-arrow-right.svg
new file mode 100644
index 00000000..f0a48252
--- /dev/null
+++ b/images/svg/circle-arrow-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-arrow-up.svg b/images/svg/circle-arrow-up.svg
new file mode 100644
index 00000000..79093ab1
--- /dev/null
+++ b/images/svg/circle-arrow-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-check.svg b/images/svg/circle-check.svg
new file mode 100644
index 00000000..314fe353
--- /dev/null
+++ b/images/svg/circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-chevron-down.svg b/images/svg/circle-chevron-down.svg
new file mode 100644
index 00000000..0db0b309
--- /dev/null
+++ b/images/svg/circle-chevron-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-chevron-left.svg b/images/svg/circle-chevron-left.svg
new file mode 100644
index 00000000..5fa769d5
--- /dev/null
+++ b/images/svg/circle-chevron-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-chevron-right.svg b/images/svg/circle-chevron-right.svg
new file mode 100644
index 00000000..1524f733
--- /dev/null
+++ b/images/svg/circle-chevron-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-chevron-up.svg b/images/svg/circle-chevron-up.svg
new file mode 100644
index 00000000..be9712df
--- /dev/null
+++ b/images/svg/circle-chevron-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-dollar-to-slot.svg b/images/svg/circle-dollar-to-slot.svg
new file mode 100644
index 00000000..cd57f57b
--- /dev/null
+++ b/images/svg/circle-dollar-to-slot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-dot.svg b/images/svg/circle-dot.svg
new file mode 100644
index 00000000..55739988
--- /dev/null
+++ b/images/svg/circle-dot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-down.svg b/images/svg/circle-down.svg
new file mode 100644
index 00000000..ff3d49ef
--- /dev/null
+++ b/images/svg/circle-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-exclamation.svg b/images/svg/circle-exclamation.svg
new file mode 100644
index 00000000..90da5089
--- /dev/null
+++ b/images/svg/circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-h.svg b/images/svg/circle-h.svg
new file mode 100644
index 00000000..fcfaae91
--- /dev/null
+++ b/images/svg/circle-h.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-half-stroke.svg b/images/svg/circle-half-stroke.svg
new file mode 100644
index 00000000..cb8dec09
--- /dev/null
+++ b/images/svg/circle-half-stroke.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-info.svg b/images/svg/circle-info.svg
new file mode 100644
index 00000000..1ba5b9e1
--- /dev/null
+++ b/images/svg/circle-info.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-left.svg b/images/svg/circle-left.svg
new file mode 100644
index 00000000..1404694b
--- /dev/null
+++ b/images/svg/circle-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-minus.svg b/images/svg/circle-minus.svg
new file mode 100644
index 00000000..232ae467
--- /dev/null
+++ b/images/svg/circle-minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-nodes.svg b/images/svg/circle-nodes.svg
new file mode 100644
index 00000000..2408bbad
--- /dev/null
+++ b/images/svg/circle-nodes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-notch.svg b/images/svg/circle-notch.svg
new file mode 100644
index 00000000..13b6ae2f
--- /dev/null
+++ b/images/svg/circle-notch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-pause.svg b/images/svg/circle-pause.svg
new file mode 100644
index 00000000..18288d66
--- /dev/null
+++ b/images/svg/circle-pause.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-play.svg b/images/svg/circle-play.svg
new file mode 100644
index 00000000..420186f6
--- /dev/null
+++ b/images/svg/circle-play.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-plus.svg b/images/svg/circle-plus.svg
new file mode 100644
index 00000000..474d644f
--- /dev/null
+++ b/images/svg/circle-plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-question.svg b/images/svg/circle-question.svg
new file mode 100644
index 00000000..38792cee
--- /dev/null
+++ b/images/svg/circle-question.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-radiation.svg b/images/svg/circle-radiation.svg
new file mode 100644
index 00000000..9e6252b4
--- /dev/null
+++ b/images/svg/circle-radiation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-right.svg b/images/svg/circle-right.svg
new file mode 100644
index 00000000..1dce8cb7
--- /dev/null
+++ b/images/svg/circle-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-stop.svg b/images/svg/circle-stop.svg
new file mode 100644
index 00000000..c5d568ab
--- /dev/null
+++ b/images/svg/circle-stop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-up.svg b/images/svg/circle-up.svg
new file mode 100644
index 00000000..254d5de9
--- /dev/null
+++ b/images/svg/circle-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-user.svg b/images/svg/circle-user.svg
new file mode 100644
index 00000000..a6804c88
--- /dev/null
+++ b/images/svg/circle-user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle-xmark.svg b/images/svg/circle-xmark.svg
new file mode 100644
index 00000000..9b7df148
--- /dev/null
+++ b/images/svg/circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/circle.svg b/images/svg/circle.svg
new file mode 100644
index 00000000..49bc41ba
--- /dev/null
+++ b/images/svg/circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/city.svg b/images/svg/city.svg
new file mode 100644
index 00000000..6af22f93
--- /dev/null
+++ b/images/svg/city.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/clapperboard.svg b/images/svg/clapperboard.svg
new file mode 100644
index 00000000..8ed37781
--- /dev/null
+++ b/images/svg/clapperboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/clipboard-check.svg b/images/svg/clipboard-check.svg
new file mode 100644
index 00000000..1fb1c5dd
--- /dev/null
+++ b/images/svg/clipboard-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/clipboard-list.svg b/images/svg/clipboard-list.svg
new file mode 100644
index 00000000..b3118ad9
--- /dev/null
+++ b/images/svg/clipboard-list.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/clipboard-question.svg b/images/svg/clipboard-question.svg
new file mode 100644
index 00000000..1826da70
--- /dev/null
+++ b/images/svg/clipboard-question.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/clipboard-user.svg b/images/svg/clipboard-user.svg
new file mode 100644
index 00000000..2efcb746
--- /dev/null
+++ b/images/svg/clipboard-user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/clipboard.svg b/images/svg/clipboard.svg
new file mode 100644
index 00000000..0c370c8d
--- /dev/null
+++ b/images/svg/clipboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/clock-rotate-left.svg b/images/svg/clock-rotate-left.svg
new file mode 100644
index 00000000..87adb7a8
--- /dev/null
+++ b/images/svg/clock-rotate-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/clock.svg b/images/svg/clock.svg
new file mode 100644
index 00000000..b77d9909
--- /dev/null
+++ b/images/svg/clock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/clone.svg b/images/svg/clone.svg
new file mode 100644
index 00000000..8ff5fe0d
--- /dev/null
+++ b/images/svg/clone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/closed-captioning.svg b/images/svg/closed-captioning.svg
new file mode 100644
index 00000000..71d68042
--- /dev/null
+++ b/images/svg/closed-captioning.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cloud-arrow-down.svg b/images/svg/cloud-arrow-down.svg
new file mode 100644
index 00000000..583b6213
--- /dev/null
+++ b/images/svg/cloud-arrow-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cloud-arrow-up.svg b/images/svg/cloud-arrow-up.svg
new file mode 100644
index 00000000..4097f639
--- /dev/null
+++ b/images/svg/cloud-arrow-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cloud-bolt.svg b/images/svg/cloud-bolt.svg
new file mode 100644
index 00000000..9c9bea91
--- /dev/null
+++ b/images/svg/cloud-bolt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cloud-meatball.svg b/images/svg/cloud-meatball.svg
new file mode 100644
index 00000000..b7b868a2
--- /dev/null
+++ b/images/svg/cloud-meatball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cloud-moon-rain.svg b/images/svg/cloud-moon-rain.svg
new file mode 100644
index 00000000..a3d93e4a
--- /dev/null
+++ b/images/svg/cloud-moon-rain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cloud-moon.svg b/images/svg/cloud-moon.svg
new file mode 100644
index 00000000..20603e97
--- /dev/null
+++ b/images/svg/cloud-moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cloud-rain.svg b/images/svg/cloud-rain.svg
new file mode 100644
index 00000000..b65f8019
--- /dev/null
+++ b/images/svg/cloud-rain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cloud-showers-heavy.svg b/images/svg/cloud-showers-heavy.svg
new file mode 100644
index 00000000..6d4b5523
--- /dev/null
+++ b/images/svg/cloud-showers-heavy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cloud-showers-water.svg b/images/svg/cloud-showers-water.svg
new file mode 100644
index 00000000..011c2577
--- /dev/null
+++ b/images/svg/cloud-showers-water.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cloud-sun-rain.svg b/images/svg/cloud-sun-rain.svg
new file mode 100644
index 00000000..b61d8fb1
--- /dev/null
+++ b/images/svg/cloud-sun-rain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cloud-sun.svg b/images/svg/cloud-sun.svg
new file mode 100644
index 00000000..b0eeaf6a
--- /dev/null
+++ b/images/svg/cloud-sun.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cloud.svg b/images/svg/cloud.svg
new file mode 100644
index 00000000..f3e1fc5c
--- /dev/null
+++ b/images/svg/cloud.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/clover.svg b/images/svg/clover.svg
new file mode 100644
index 00000000..0204738d
--- /dev/null
+++ b/images/svg/clover.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/code-branch.svg b/images/svg/code-branch.svg
new file mode 100644
index 00000000..bf052604
--- /dev/null
+++ b/images/svg/code-branch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/code-commit.svg b/images/svg/code-commit.svg
new file mode 100644
index 00000000..5070ab75
--- /dev/null
+++ b/images/svg/code-commit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/code-compare.svg b/images/svg/code-compare.svg
new file mode 100644
index 00000000..1e3f24f2
--- /dev/null
+++ b/images/svg/code-compare.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/code-fork.svg b/images/svg/code-fork.svg
new file mode 100644
index 00000000..6c67d785
--- /dev/null
+++ b/images/svg/code-fork.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/code-merge.svg b/images/svg/code-merge.svg
new file mode 100644
index 00000000..d60e209c
--- /dev/null
+++ b/images/svg/code-merge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/code-pull-request.svg b/images/svg/code-pull-request.svg
new file mode 100644
index 00000000..4ed7aa67
--- /dev/null
+++ b/images/svg/code-pull-request.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/code.svg b/images/svg/code.svg
new file mode 100644
index 00000000..310938e5
--- /dev/null
+++ b/images/svg/code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/coins.svg b/images/svg/coins.svg
new file mode 100644
index 00000000..6b2900f0
--- /dev/null
+++ b/images/svg/coins.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/colon-sign.svg b/images/svg/colon-sign.svg
new file mode 100644
index 00000000..782f8188
--- /dev/null
+++ b/images/svg/colon-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/comment-dollar.svg b/images/svg/comment-dollar.svg
new file mode 100644
index 00000000..b6b28057
--- /dev/null
+++ b/images/svg/comment-dollar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/comment-dots.svg b/images/svg/comment-dots.svg
new file mode 100644
index 00000000..f73361d0
--- /dev/null
+++ b/images/svg/comment-dots.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/comment-medical.svg b/images/svg/comment-medical.svg
new file mode 100644
index 00000000..add55179
--- /dev/null
+++ b/images/svg/comment-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/comment-slash.svg b/images/svg/comment-slash.svg
new file mode 100644
index 00000000..c851a6d8
--- /dev/null
+++ b/images/svg/comment-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/comment-sms.svg b/images/svg/comment-sms.svg
new file mode 100644
index 00000000..5ad74920
--- /dev/null
+++ b/images/svg/comment-sms.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/comment.svg b/images/svg/comment.svg
new file mode 100644
index 00000000..15291259
--- /dev/null
+++ b/images/svg/comment.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/comments-dollar.svg b/images/svg/comments-dollar.svg
new file mode 100644
index 00000000..6564ed70
--- /dev/null
+++ b/images/svg/comments-dollar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/comments.svg b/images/svg/comments.svg
new file mode 100644
index 00000000..c29ab592
--- /dev/null
+++ b/images/svg/comments.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/compact-disc.svg b/images/svg/compact-disc.svg
new file mode 100644
index 00000000..402f65ff
--- /dev/null
+++ b/images/svg/compact-disc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/compass-drafting.svg b/images/svg/compass-drafting.svg
new file mode 100644
index 00000000..6e58f71b
--- /dev/null
+++ b/images/svg/compass-drafting.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/compass.svg b/images/svg/compass.svg
new file mode 100644
index 00000000..158f752a
--- /dev/null
+++ b/images/svg/compass.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/compress.svg b/images/svg/compress.svg
new file mode 100644
index 00000000..91384be7
--- /dev/null
+++ b/images/svg/compress.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/computer-mouse.svg b/images/svg/computer-mouse.svg
new file mode 100644
index 00000000..42ec284a
--- /dev/null
+++ b/images/svg/computer-mouse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/computer.svg b/images/svg/computer.svg
new file mode 100644
index 00000000..ea5268cb
--- /dev/null
+++ b/images/svg/computer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cookie-bite.svg b/images/svg/cookie-bite.svg
new file mode 100644
index 00000000..fc3f8c55
--- /dev/null
+++ b/images/svg/cookie-bite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cookie.svg b/images/svg/cookie.svg
new file mode 100644
index 00000000..339f79c3
--- /dev/null
+++ b/images/svg/cookie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/copy.svg b/images/svg/copy.svg
new file mode 100644
index 00000000..af80f252
--- /dev/null
+++ b/images/svg/copy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/copyright.svg b/images/svg/copyright.svg
new file mode 100644
index 00000000..64b8dcd1
--- /dev/null
+++ b/images/svg/copyright.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/couch.svg b/images/svg/couch.svg
new file mode 100644
index 00000000..85bef3d3
--- /dev/null
+++ b/images/svg/couch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cow.svg b/images/svg/cow.svg
new file mode 100644
index 00000000..49596891
--- /dev/null
+++ b/images/svg/cow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/credit-card.svg b/images/svg/credit-card.svg
new file mode 100644
index 00000000..56cc35ea
--- /dev/null
+++ b/images/svg/credit-card.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/crop-simple.svg b/images/svg/crop-simple.svg
new file mode 100644
index 00000000..2d34496a
--- /dev/null
+++ b/images/svg/crop-simple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/crop.svg b/images/svg/crop.svg
new file mode 100644
index 00000000..ebe23640
--- /dev/null
+++ b/images/svg/crop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cross.svg b/images/svg/cross.svg
new file mode 100644
index 00000000..2f13d85f
--- /dev/null
+++ b/images/svg/cross.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/crosshairs.svg b/images/svg/crosshairs.svg
new file mode 100644
index 00000000..0b1d83d1
--- /dev/null
+++ b/images/svg/crosshairs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/crow.svg b/images/svg/crow.svg
new file mode 100644
index 00000000..030b21b5
--- /dev/null
+++ b/images/svg/crow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/crown.svg b/images/svg/crown.svg
new file mode 100644
index 00000000..52dd069c
--- /dev/null
+++ b/images/svg/crown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/crutch.svg b/images/svg/crutch.svg
new file mode 100644
index 00000000..bab1b4a7
--- /dev/null
+++ b/images/svg/crutch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cruzeiro-sign.svg b/images/svg/cruzeiro-sign.svg
new file mode 100644
index 00000000..87d89d43
--- /dev/null
+++ b/images/svg/cruzeiro-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cube.svg b/images/svg/cube.svg
new file mode 100644
index 00000000..47719cb6
--- /dev/null
+++ b/images/svg/cube.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cubes-stacked.svg b/images/svg/cubes-stacked.svg
new file mode 100644
index 00000000..eec01412
--- /dev/null
+++ b/images/svg/cubes-stacked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/cubes.svg b/images/svg/cubes.svg
new file mode 100644
index 00000000..dbed1b81
--- /dev/null
+++ b/images/svg/cubes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/d.svg b/images/svg/d.svg
new file mode 100644
index 00000000..1e907732
--- /dev/null
+++ b/images/svg/d.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/database.svg b/images/svg/database.svg
new file mode 100644
index 00000000..b5218e50
--- /dev/null
+++ b/images/svg/database.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/delete-left.svg b/images/svg/delete-left.svg
new file mode 100644
index 00000000..c9bab49c
--- /dev/null
+++ b/images/svg/delete-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/democrat.svg b/images/svg/democrat.svg
new file mode 100644
index 00000000..a691c9c4
--- /dev/null
+++ b/images/svg/democrat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/desktop.svg b/images/svg/desktop.svg
new file mode 100644
index 00000000..106cda5c
--- /dev/null
+++ b/images/svg/desktop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dharmachakra.svg b/images/svg/dharmachakra.svg
new file mode 100644
index 00000000..f7a675e1
--- /dev/null
+++ b/images/svg/dharmachakra.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/diagram-next.svg b/images/svg/diagram-next.svg
new file mode 100644
index 00000000..36b06897
--- /dev/null
+++ b/images/svg/diagram-next.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/diagram-predecessor.svg b/images/svg/diagram-predecessor.svg
new file mode 100644
index 00000000..4d96ce4b
--- /dev/null
+++ b/images/svg/diagram-predecessor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/diagram-project.svg b/images/svg/diagram-project.svg
new file mode 100644
index 00000000..584377f6
--- /dev/null
+++ b/images/svg/diagram-project.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/diagram-successor.svg b/images/svg/diagram-successor.svg
new file mode 100644
index 00000000..96e8b07b
--- /dev/null
+++ b/images/svg/diagram-successor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/diamond-turn-right.svg b/images/svg/diamond-turn-right.svg
new file mode 100644
index 00000000..646af159
--- /dev/null
+++ b/images/svg/diamond-turn-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/diamond.svg b/images/svg/diamond.svg
new file mode 100644
index 00000000..561f4d58
--- /dev/null
+++ b/images/svg/diamond.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dice-d20.svg b/images/svg/dice-d20.svg
new file mode 100644
index 00000000..5d7137f5
--- /dev/null
+++ b/images/svg/dice-d20.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dice-d6.svg b/images/svg/dice-d6.svg
new file mode 100644
index 00000000..3d9d1038
--- /dev/null
+++ b/images/svg/dice-d6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dice-five.svg b/images/svg/dice-five.svg
new file mode 100644
index 00000000..25c59610
--- /dev/null
+++ b/images/svg/dice-five.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dice-four.svg b/images/svg/dice-four.svg
new file mode 100644
index 00000000..9a79d51f
--- /dev/null
+++ b/images/svg/dice-four.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dice-one.svg b/images/svg/dice-one.svg
new file mode 100644
index 00000000..0672a92a
--- /dev/null
+++ b/images/svg/dice-one.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dice-six.svg b/images/svg/dice-six.svg
new file mode 100644
index 00000000..88db807d
--- /dev/null
+++ b/images/svg/dice-six.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dice-three.svg b/images/svg/dice-three.svg
new file mode 100644
index 00000000..3112f5d2
--- /dev/null
+++ b/images/svg/dice-three.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dice-two.svg b/images/svg/dice-two.svg
new file mode 100644
index 00000000..542e544a
--- /dev/null
+++ b/images/svg/dice-two.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dice.svg b/images/svg/dice.svg
new file mode 100644
index 00000000..deb83f6e
--- /dev/null
+++ b/images/svg/dice.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/disease.svg b/images/svg/disease.svg
new file mode 100644
index 00000000..2aaeb12f
--- /dev/null
+++ b/images/svg/disease.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/display.svg b/images/svg/display.svg
new file mode 100644
index 00000000..557a6bcd
--- /dev/null
+++ b/images/svg/display.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/divide.svg b/images/svg/divide.svg
new file mode 100644
index 00000000..6c91b5fb
--- /dev/null
+++ b/images/svg/divide.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dna.svg b/images/svg/dna.svg
new file mode 100644
index 00000000..4aae63e6
--- /dev/null
+++ b/images/svg/dna.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dog.svg b/images/svg/dog.svg
new file mode 100644
index 00000000..2b432731
--- /dev/null
+++ b/images/svg/dog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dollar-sign.svg b/images/svg/dollar-sign.svg
new file mode 100644
index 00000000..794cecac
--- /dev/null
+++ b/images/svg/dollar-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dolly.svg b/images/svg/dolly.svg
new file mode 100644
index 00000000..19898855
--- /dev/null
+++ b/images/svg/dolly.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dong-sign.svg b/images/svg/dong-sign.svg
new file mode 100644
index 00000000..70fc0858
--- /dev/null
+++ b/images/svg/dong-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/door-closed.svg b/images/svg/door-closed.svg
new file mode 100644
index 00000000..720e862e
--- /dev/null
+++ b/images/svg/door-closed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/door-open.svg b/images/svg/door-open.svg
new file mode 100644
index 00000000..0ca9fc7d
--- /dev/null
+++ b/images/svg/door-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dove.svg b/images/svg/dove.svg
new file mode 100644
index 00000000..9747e864
--- /dev/null
+++ b/images/svg/dove.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/down-left-and-up-right-to-center.svg b/images/svg/down-left-and-up-right-to-center.svg
new file mode 100644
index 00000000..d7a168e6
--- /dev/null
+++ b/images/svg/down-left-and-up-right-to-center.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/down-long.svg b/images/svg/down-long.svg
new file mode 100644
index 00000000..24a6abea
--- /dev/null
+++ b/images/svg/down-long.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/download.svg b/images/svg/download.svg
new file mode 100644
index 00000000..6ed49b54
--- /dev/null
+++ b/images/svg/download.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dragon.svg b/images/svg/dragon.svg
new file mode 100644
index 00000000..dc49d43e
--- /dev/null
+++ b/images/svg/dragon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/draw-polygon.svg b/images/svg/draw-polygon.svg
new file mode 100644
index 00000000..73e5ced3
--- /dev/null
+++ b/images/svg/draw-polygon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/droplet-slash.svg b/images/svg/droplet-slash.svg
new file mode 100644
index 00000000..15aa08ce
--- /dev/null
+++ b/images/svg/droplet-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/droplet.svg b/images/svg/droplet.svg
new file mode 100644
index 00000000..252d1e8b
--- /dev/null
+++ b/images/svg/droplet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/drum-steelpan.svg b/images/svg/drum-steelpan.svg
new file mode 100644
index 00000000..e1cff26f
--- /dev/null
+++ b/images/svg/drum-steelpan.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/drum.svg b/images/svg/drum.svg
new file mode 100644
index 00000000..71b6c653
--- /dev/null
+++ b/images/svg/drum.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/drumstick-bite.svg b/images/svg/drumstick-bite.svg
new file mode 100644
index 00000000..a10699c1
--- /dev/null
+++ b/images/svg/drumstick-bite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dumbbell.svg b/images/svg/dumbbell.svg
new file mode 100644
index 00000000..18c7e6c4
--- /dev/null
+++ b/images/svg/dumbbell.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dumpster-fire.svg b/images/svg/dumpster-fire.svg
new file mode 100644
index 00000000..2cc82a19
--- /dev/null
+++ b/images/svg/dumpster-fire.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dumpster.svg b/images/svg/dumpster.svg
new file mode 100644
index 00000000..ca7775c6
--- /dev/null
+++ b/images/svg/dumpster.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/dungeon.svg b/images/svg/dungeon.svg
new file mode 100644
index 00000000..7182d988
--- /dev/null
+++ b/images/svg/dungeon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/e.svg b/images/svg/e.svg
new file mode 100644
index 00000000..6007e523
--- /dev/null
+++ b/images/svg/e.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ear-deaf.svg b/images/svg/ear-deaf.svg
new file mode 100644
index 00000000..b63c7517
--- /dev/null
+++ b/images/svg/ear-deaf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ear-listen.svg b/images/svg/ear-listen.svg
new file mode 100644
index 00000000..4bdfc300
--- /dev/null
+++ b/images/svg/ear-listen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/earth-africa.svg b/images/svg/earth-africa.svg
new file mode 100644
index 00000000..8a3baf80
--- /dev/null
+++ b/images/svg/earth-africa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/earth-americas.svg b/images/svg/earth-americas.svg
new file mode 100644
index 00000000..1f69c191
--- /dev/null
+++ b/images/svg/earth-americas.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/earth-asia.svg b/images/svg/earth-asia.svg
new file mode 100644
index 00000000..2b38eda8
--- /dev/null
+++ b/images/svg/earth-asia.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/earth-europe.svg b/images/svg/earth-europe.svg
new file mode 100644
index 00000000..ac911e0c
--- /dev/null
+++ b/images/svg/earth-europe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/earth-oceania.svg b/images/svg/earth-oceania.svg
new file mode 100644
index 00000000..14219bc2
--- /dev/null
+++ b/images/svg/earth-oceania.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/egg.svg b/images/svg/egg.svg
new file mode 100644
index 00000000..24206449
--- /dev/null
+++ b/images/svg/egg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/eject.svg b/images/svg/eject.svg
new file mode 100644
index 00000000..62b70e52
--- /dev/null
+++ b/images/svg/eject.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/elevator.svg b/images/svg/elevator.svg
new file mode 100644
index 00000000..83738c7b
--- /dev/null
+++ b/images/svg/elevator.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ellipsis-vertical.svg b/images/svg/ellipsis-vertical.svg
new file mode 100644
index 00000000..311fe25a
--- /dev/null
+++ b/images/svg/ellipsis-vertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ellipsis.svg b/images/svg/ellipsis.svg
new file mode 100644
index 00000000..4d1dadbc
--- /dev/null
+++ b/images/svg/ellipsis.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/envelope-circle-check.svg b/images/svg/envelope-circle-check.svg
new file mode 100644
index 00000000..94c4d8e6
--- /dev/null
+++ b/images/svg/envelope-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/envelope-open-text.svg b/images/svg/envelope-open-text.svg
new file mode 100644
index 00000000..9a384491
--- /dev/null
+++ b/images/svg/envelope-open-text.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/envelope-open.svg b/images/svg/envelope-open.svg
new file mode 100644
index 00000000..cb7a36fe
--- /dev/null
+++ b/images/svg/envelope-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/envelope.svg b/images/svg/envelope.svg
new file mode 100644
index 00000000..b19c1c3d
--- /dev/null
+++ b/images/svg/envelope.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/envelopes-bulk.svg b/images/svg/envelopes-bulk.svg
new file mode 100644
index 00000000..7a9d8a44
--- /dev/null
+++ b/images/svg/envelopes-bulk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/equals.svg b/images/svg/equals.svg
new file mode 100644
index 00000000..3ff8fa49
--- /dev/null
+++ b/images/svg/equals.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/eraser.svg b/images/svg/eraser.svg
new file mode 100644
index 00000000..92dbb408
--- /dev/null
+++ b/images/svg/eraser.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ethernet.svg b/images/svg/ethernet.svg
new file mode 100644
index 00000000..7d3ab6f5
--- /dev/null
+++ b/images/svg/ethernet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/euro-sign.svg b/images/svg/euro-sign.svg
new file mode 100644
index 00000000..5a38dfb2
--- /dev/null
+++ b/images/svg/euro-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/exclamation.svg b/images/svg/exclamation.svg
new file mode 100644
index 00000000..70c036eb
--- /dev/null
+++ b/images/svg/exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/expand.svg b/images/svg/expand.svg
new file mode 100644
index 00000000..3401de1a
--- /dev/null
+++ b/images/svg/expand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/explosion.svg b/images/svg/explosion.svg
new file mode 100644
index 00000000..68032d19
--- /dev/null
+++ b/images/svg/explosion.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/eye-dropper.svg b/images/svg/eye-dropper.svg
new file mode 100644
index 00000000..17db77d0
--- /dev/null
+++ b/images/svg/eye-dropper.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/eye-low-vision.svg b/images/svg/eye-low-vision.svg
new file mode 100644
index 00000000..d7757613
--- /dev/null
+++ b/images/svg/eye-low-vision.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/eye-slash.svg b/images/svg/eye-slash.svg
new file mode 100644
index 00000000..42db7748
--- /dev/null
+++ b/images/svg/eye-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/eye.svg b/images/svg/eye.svg
new file mode 100644
index 00000000..56291fbe
--- /dev/null
+++ b/images/svg/eye.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/f.svg b/images/svg/f.svg
new file mode 100644
index 00000000..77987333
--- /dev/null
+++ b/images/svg/f.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-angry.svg b/images/svg/face-angry.svg
new file mode 100644
index 00000000..0252b825
--- /dev/null
+++ b/images/svg/face-angry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-dizzy.svg b/images/svg/face-dizzy.svg
new file mode 100644
index 00000000..2348800f
--- /dev/null
+++ b/images/svg/face-dizzy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-flushed.svg b/images/svg/face-flushed.svg
new file mode 100644
index 00000000..12a4605c
--- /dev/null
+++ b/images/svg/face-flushed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-frown-open.svg b/images/svg/face-frown-open.svg
new file mode 100644
index 00000000..0d654cdc
--- /dev/null
+++ b/images/svg/face-frown-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-frown.svg b/images/svg/face-frown.svg
new file mode 100644
index 00000000..a08c6c50
--- /dev/null
+++ b/images/svg/face-frown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grimace.svg b/images/svg/face-grimace.svg
new file mode 100644
index 00000000..bd3f0b8e
--- /dev/null
+++ b/images/svg/face-grimace.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin-beam-sweat.svg b/images/svg/face-grin-beam-sweat.svg
new file mode 100644
index 00000000..c5fb8a31
--- /dev/null
+++ b/images/svg/face-grin-beam-sweat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin-beam.svg b/images/svg/face-grin-beam.svg
new file mode 100644
index 00000000..dbc3e27f
--- /dev/null
+++ b/images/svg/face-grin-beam.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin-hearts.svg b/images/svg/face-grin-hearts.svg
new file mode 100644
index 00000000..00315f37
--- /dev/null
+++ b/images/svg/face-grin-hearts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin-squint-tears.svg b/images/svg/face-grin-squint-tears.svg
new file mode 100644
index 00000000..2fbf173c
--- /dev/null
+++ b/images/svg/face-grin-squint-tears.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin-squint.svg b/images/svg/face-grin-squint.svg
new file mode 100644
index 00000000..a1e4a316
--- /dev/null
+++ b/images/svg/face-grin-squint.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin-stars.svg b/images/svg/face-grin-stars.svg
new file mode 100644
index 00000000..45072128
--- /dev/null
+++ b/images/svg/face-grin-stars.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin-tears.svg b/images/svg/face-grin-tears.svg
new file mode 100644
index 00000000..ea4411a6
--- /dev/null
+++ b/images/svg/face-grin-tears.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin-tongue-squint.svg b/images/svg/face-grin-tongue-squint.svg
new file mode 100644
index 00000000..32e12545
--- /dev/null
+++ b/images/svg/face-grin-tongue-squint.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin-tongue-wink.svg b/images/svg/face-grin-tongue-wink.svg
new file mode 100644
index 00000000..2c279f06
--- /dev/null
+++ b/images/svg/face-grin-tongue-wink.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin-tongue.svg b/images/svg/face-grin-tongue.svg
new file mode 100644
index 00000000..9360dcbb
--- /dev/null
+++ b/images/svg/face-grin-tongue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin-wide.svg b/images/svg/face-grin-wide.svg
new file mode 100644
index 00000000..f3b72f9c
--- /dev/null
+++ b/images/svg/face-grin-wide.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin-wink.svg b/images/svg/face-grin-wink.svg
new file mode 100644
index 00000000..7c361573
--- /dev/null
+++ b/images/svg/face-grin-wink.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-grin.svg b/images/svg/face-grin.svg
new file mode 100644
index 00000000..f3aa1bc0
--- /dev/null
+++ b/images/svg/face-grin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-kiss-beam.svg b/images/svg/face-kiss-beam.svg
new file mode 100644
index 00000000..168c13bc
--- /dev/null
+++ b/images/svg/face-kiss-beam.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-kiss-wink-heart.svg b/images/svg/face-kiss-wink-heart.svg
new file mode 100644
index 00000000..7312e5b4
--- /dev/null
+++ b/images/svg/face-kiss-wink-heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-kiss.svg b/images/svg/face-kiss.svg
new file mode 100644
index 00000000..2e262a3c
--- /dev/null
+++ b/images/svg/face-kiss.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-laugh-beam.svg b/images/svg/face-laugh-beam.svg
new file mode 100644
index 00000000..29bb4152
--- /dev/null
+++ b/images/svg/face-laugh-beam.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-laugh-squint.svg b/images/svg/face-laugh-squint.svg
new file mode 100644
index 00000000..2c1d4b65
--- /dev/null
+++ b/images/svg/face-laugh-squint.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-laugh-wink.svg b/images/svg/face-laugh-wink.svg
new file mode 100644
index 00000000..30d84bbd
--- /dev/null
+++ b/images/svg/face-laugh-wink.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-laugh.svg b/images/svg/face-laugh.svg
new file mode 100644
index 00000000..0f57dc39
--- /dev/null
+++ b/images/svg/face-laugh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-meh-blank.svg b/images/svg/face-meh-blank.svg
new file mode 100644
index 00000000..0a555652
--- /dev/null
+++ b/images/svg/face-meh-blank.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-meh.svg b/images/svg/face-meh.svg
new file mode 100644
index 00000000..83228510
--- /dev/null
+++ b/images/svg/face-meh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-rolling-eyes.svg b/images/svg/face-rolling-eyes.svg
new file mode 100644
index 00000000..2d6343ba
--- /dev/null
+++ b/images/svg/face-rolling-eyes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-sad-cry.svg b/images/svg/face-sad-cry.svg
new file mode 100644
index 00000000..41d21b64
--- /dev/null
+++ b/images/svg/face-sad-cry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-sad-tear.svg b/images/svg/face-sad-tear.svg
new file mode 100644
index 00000000..666db399
--- /dev/null
+++ b/images/svg/face-sad-tear.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-smile-beam.svg b/images/svg/face-smile-beam.svg
new file mode 100644
index 00000000..c3c1a539
--- /dev/null
+++ b/images/svg/face-smile-beam.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-smile-wink.svg b/images/svg/face-smile-wink.svg
new file mode 100644
index 00000000..d54209b3
--- /dev/null
+++ b/images/svg/face-smile-wink.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-smile.svg b/images/svg/face-smile.svg
new file mode 100644
index 00000000..1a03a37a
--- /dev/null
+++ b/images/svg/face-smile.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-surprise.svg b/images/svg/face-surprise.svg
new file mode 100644
index 00000000..cfbf7fa5
--- /dev/null
+++ b/images/svg/face-surprise.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/face-tired.svg b/images/svg/face-tired.svg
new file mode 100644
index 00000000..28829ed9
--- /dev/null
+++ b/images/svg/face-tired.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/fan.svg b/images/svg/fan.svg
new file mode 100644
index 00000000..8f7a549a
--- /dev/null
+++ b/images/svg/fan.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/faucet-drip.svg b/images/svg/faucet-drip.svg
new file mode 100644
index 00000000..e3310268
--- /dev/null
+++ b/images/svg/faucet-drip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/faucet.svg b/images/svg/faucet.svg
new file mode 100644
index 00000000..eb58785f
--- /dev/null
+++ b/images/svg/faucet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/fax.svg b/images/svg/fax.svg
new file mode 100644
index 00000000..e53cb784
--- /dev/null
+++ b/images/svg/fax.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/feather-pointed.svg b/images/svg/feather-pointed.svg
new file mode 100644
index 00000000..5cc2ff35
--- /dev/null
+++ b/images/svg/feather-pointed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/feather.svg b/images/svg/feather.svg
new file mode 100644
index 00000000..7601e22f
--- /dev/null
+++ b/images/svg/feather.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ferry.svg b/images/svg/ferry.svg
new file mode 100644
index 00000000..727acdd4
--- /dev/null
+++ b/images/svg/ferry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-arrow-down.svg b/images/svg/file-arrow-down.svg
new file mode 100644
index 00000000..06e33b49
--- /dev/null
+++ b/images/svg/file-arrow-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-arrow-up.svg b/images/svg/file-arrow-up.svg
new file mode 100644
index 00000000..7e7e78b9
--- /dev/null
+++ b/images/svg/file-arrow-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-audio.svg b/images/svg/file-audio.svg
new file mode 100644
index 00000000..d0d4ddc0
--- /dev/null
+++ b/images/svg/file-audio.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-circle-check.svg b/images/svg/file-circle-check.svg
new file mode 100644
index 00000000..c3019b99
--- /dev/null
+++ b/images/svg/file-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-circle-exclamation.svg b/images/svg/file-circle-exclamation.svg
new file mode 100644
index 00000000..688817a2
--- /dev/null
+++ b/images/svg/file-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-circle-minus.svg b/images/svg/file-circle-minus.svg
new file mode 100644
index 00000000..827678cc
--- /dev/null
+++ b/images/svg/file-circle-minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-circle-plus.svg b/images/svg/file-circle-plus.svg
new file mode 100644
index 00000000..131b5a76
--- /dev/null
+++ b/images/svg/file-circle-plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-circle-question.svg b/images/svg/file-circle-question.svg
new file mode 100644
index 00000000..e5415526
--- /dev/null
+++ b/images/svg/file-circle-question.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-circle-xmark.svg b/images/svg/file-circle-xmark.svg
new file mode 100644
index 00000000..b6bbfded
--- /dev/null
+++ b/images/svg/file-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-code.svg b/images/svg/file-code.svg
new file mode 100644
index 00000000..dfe284d7
--- /dev/null
+++ b/images/svg/file-code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-contract.svg b/images/svg/file-contract.svg
new file mode 100644
index 00000000..db77a4a8
--- /dev/null
+++ b/images/svg/file-contract.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-csv.svg b/images/svg/file-csv.svg
new file mode 100644
index 00000000..abaa6072
--- /dev/null
+++ b/images/svg/file-csv.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-excel.svg b/images/svg/file-excel.svg
new file mode 100644
index 00000000..54cf7f82
--- /dev/null
+++ b/images/svg/file-excel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-export.svg b/images/svg/file-export.svg
new file mode 100644
index 00000000..8f519efa
--- /dev/null
+++ b/images/svg/file-export.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-image.svg b/images/svg/file-image.svg
new file mode 100644
index 00000000..e37fcf54
--- /dev/null
+++ b/images/svg/file-image.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-import.svg b/images/svg/file-import.svg
new file mode 100644
index 00000000..bbb8710e
--- /dev/null
+++ b/images/svg/file-import.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-invoice-dollar.svg b/images/svg/file-invoice-dollar.svg
new file mode 100644
index 00000000..fa2c3516
--- /dev/null
+++ b/images/svg/file-invoice-dollar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-invoice.svg b/images/svg/file-invoice.svg
new file mode 100644
index 00000000..e620b776
--- /dev/null
+++ b/images/svg/file-invoice.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-lines.svg b/images/svg/file-lines.svg
new file mode 100644
index 00000000..80c79c73
--- /dev/null
+++ b/images/svg/file-lines.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-medical.svg b/images/svg/file-medical.svg
new file mode 100644
index 00000000..6ded7670
--- /dev/null
+++ b/images/svg/file-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-pdf.svg b/images/svg/file-pdf.svg
new file mode 100644
index 00000000..9320c270
--- /dev/null
+++ b/images/svg/file-pdf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-pen.svg b/images/svg/file-pen.svg
new file mode 100644
index 00000000..5cedb176
--- /dev/null
+++ b/images/svg/file-pen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-powerpoint.svg b/images/svg/file-powerpoint.svg
new file mode 100644
index 00000000..1d02fd95
--- /dev/null
+++ b/images/svg/file-powerpoint.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-prescription.svg b/images/svg/file-prescription.svg
new file mode 100644
index 00000000..cf814ea6
--- /dev/null
+++ b/images/svg/file-prescription.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-shield.svg b/images/svg/file-shield.svg
new file mode 100644
index 00000000..d0817fa8
--- /dev/null
+++ b/images/svg/file-shield.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-signature.svg b/images/svg/file-signature.svg
new file mode 100644
index 00000000..ac471d77
--- /dev/null
+++ b/images/svg/file-signature.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-video.svg b/images/svg/file-video.svg
new file mode 100644
index 00000000..6bb6a7ce
--- /dev/null
+++ b/images/svg/file-video.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-waveform.svg b/images/svg/file-waveform.svg
new file mode 100644
index 00000000..163827fa
--- /dev/null
+++ b/images/svg/file-waveform.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-word.svg b/images/svg/file-word.svg
new file mode 100644
index 00000000..dfc72b36
--- /dev/null
+++ b/images/svg/file-word.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file-zipper.svg b/images/svg/file-zipper.svg
new file mode 100644
index 00000000..49c6d50d
--- /dev/null
+++ b/images/svg/file-zipper.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/file.svg b/images/svg/file.svg
new file mode 100644
index 00000000..cfaa4f16
--- /dev/null
+++ b/images/svg/file.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/fill-drip.svg b/images/svg/fill-drip.svg
new file mode 100644
index 00000000..c374a05e
--- /dev/null
+++ b/images/svg/fill-drip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/fill.svg b/images/svg/fill.svg
new file mode 100644
index 00000000..2e9ed99d
--- /dev/null
+++ b/images/svg/fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/film.svg b/images/svg/film.svg
new file mode 100644
index 00000000..ebcda928
--- /dev/null
+++ b/images/svg/film.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/filter-circle-dollar.svg b/images/svg/filter-circle-dollar.svg
new file mode 100644
index 00000000..c5f3d1ab
--- /dev/null
+++ b/images/svg/filter-circle-dollar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/filter-circle-xmark.svg b/images/svg/filter-circle-xmark.svg
new file mode 100644
index 00000000..4d94ac1a
--- /dev/null
+++ b/images/svg/filter-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/filter.svg b/images/svg/filter.svg
new file mode 100644
index 00000000..068ce222
--- /dev/null
+++ b/images/svg/filter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/fingerprint.svg b/images/svg/fingerprint.svg
new file mode 100644
index 00000000..978a0c1e
--- /dev/null
+++ b/images/svg/fingerprint.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/fire-burner.svg b/images/svg/fire-burner.svg
new file mode 100644
index 00000000..5b25ac4c
--- /dev/null
+++ b/images/svg/fire-burner.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/fire-extinguisher.svg b/images/svg/fire-extinguisher.svg
new file mode 100644
index 00000000..4e9932d5
--- /dev/null
+++ b/images/svg/fire-extinguisher.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/fire-flame-curved.svg b/images/svg/fire-flame-curved.svg
new file mode 100644
index 00000000..d22a13db
--- /dev/null
+++ b/images/svg/fire-flame-curved.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/fire-flame-simple.svg b/images/svg/fire-flame-simple.svg
new file mode 100644
index 00000000..76372c6e
--- /dev/null
+++ b/images/svg/fire-flame-simple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/fire.svg b/images/svg/fire.svg
new file mode 100644
index 00000000..b4bc3697
--- /dev/null
+++ b/images/svg/fire.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/fish-fins.svg b/images/svg/fish-fins.svg
new file mode 100644
index 00000000..6e5de34a
--- /dev/null
+++ b/images/svg/fish-fins.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/fish.svg b/images/svg/fish.svg
new file mode 100644
index 00000000..b62a6525
--- /dev/null
+++ b/images/svg/fish.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/flag-checkered.svg b/images/svg/flag-checkered.svg
new file mode 100644
index 00000000..356b2c67
--- /dev/null
+++ b/images/svg/flag-checkered.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/flag-usa.svg b/images/svg/flag-usa.svg
new file mode 100644
index 00000000..56b5b04f
--- /dev/null
+++ b/images/svg/flag-usa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/flag.svg b/images/svg/flag.svg
new file mode 100644
index 00000000..5d9f3a30
--- /dev/null
+++ b/images/svg/flag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/flask-vial.svg b/images/svg/flask-vial.svg
new file mode 100644
index 00000000..88f434e1
--- /dev/null
+++ b/images/svg/flask-vial.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/flask.svg b/images/svg/flask.svg
new file mode 100644
index 00000000..84d7d432
--- /dev/null
+++ b/images/svg/flask.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/floppy-disk.svg b/images/svg/floppy-disk.svg
new file mode 100644
index 00000000..f4e10b05
--- /dev/null
+++ b/images/svg/floppy-disk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/florin-sign.svg b/images/svg/florin-sign.svg
new file mode 100644
index 00000000..41a657ea
--- /dev/null
+++ b/images/svg/florin-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/folder-closed.svg b/images/svg/folder-closed.svg
new file mode 100644
index 00000000..eafc7d44
--- /dev/null
+++ b/images/svg/folder-closed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/folder-minus.svg b/images/svg/folder-minus.svg
new file mode 100644
index 00000000..8a588b98
--- /dev/null
+++ b/images/svg/folder-minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/folder-open.svg b/images/svg/folder-open.svg
new file mode 100644
index 00000000..66414778
--- /dev/null
+++ b/images/svg/folder-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/folder-plus.svg b/images/svg/folder-plus.svg
new file mode 100644
index 00000000..67be7284
--- /dev/null
+++ b/images/svg/folder-plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/folder-tree.svg b/images/svg/folder-tree.svg
new file mode 100644
index 00000000..ae677ffe
--- /dev/null
+++ b/images/svg/folder-tree.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/folder.svg b/images/svg/folder.svg
new file mode 100644
index 00000000..6f4d35ae
--- /dev/null
+++ b/images/svg/folder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/font-awesome.svg b/images/svg/font-awesome.svg
new file mode 100644
index 00000000..c55bf8e7
--- /dev/null
+++ b/images/svg/font-awesome.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/font.svg b/images/svg/font.svg
new file mode 100644
index 00000000..2a330c3e
--- /dev/null
+++ b/images/svg/font.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/football.svg b/images/svg/football.svg
new file mode 100644
index 00000000..86e1db32
--- /dev/null
+++ b/images/svg/football.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/forward-fast.svg b/images/svg/forward-fast.svg
new file mode 100644
index 00000000..b041409d
--- /dev/null
+++ b/images/svg/forward-fast.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/forward-step.svg b/images/svg/forward-step.svg
new file mode 100644
index 00000000..a27b7843
--- /dev/null
+++ b/images/svg/forward-step.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/forward.svg b/images/svg/forward.svg
new file mode 100644
index 00000000..3890a87a
--- /dev/null
+++ b/images/svg/forward.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/franc-sign.svg b/images/svg/franc-sign.svg
new file mode 100644
index 00000000..46398af6
--- /dev/null
+++ b/images/svg/franc-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/frog.svg b/images/svg/frog.svg
new file mode 100644
index 00000000..038c6878
--- /dev/null
+++ b/images/svg/frog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/futbol.svg b/images/svg/futbol.svg
new file mode 100644
index 00000000..b58d47ab
--- /dev/null
+++ b/images/svg/futbol.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/g.svg b/images/svg/g.svg
new file mode 100644
index 00000000..d19168c1
--- /dev/null
+++ b/images/svg/g.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gamepad.svg b/images/svg/gamepad.svg
new file mode 100644
index 00000000..bc0fe2eb
--- /dev/null
+++ b/images/svg/gamepad.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gas-pump.svg b/images/svg/gas-pump.svg
new file mode 100644
index 00000000..9c800242
--- /dev/null
+++ b/images/svg/gas-pump.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gauge-high.svg b/images/svg/gauge-high.svg
new file mode 100644
index 00000000..8bb0730f
--- /dev/null
+++ b/images/svg/gauge-high.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gauge-simple-high.svg b/images/svg/gauge-simple-high.svg
new file mode 100644
index 00000000..c9b1a5c3
--- /dev/null
+++ b/images/svg/gauge-simple-high.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gauge-simple.svg b/images/svg/gauge-simple.svg
new file mode 100644
index 00000000..7241b588
--- /dev/null
+++ b/images/svg/gauge-simple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gauge.svg b/images/svg/gauge.svg
new file mode 100644
index 00000000..d46e56d0
--- /dev/null
+++ b/images/svg/gauge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gavel.svg b/images/svg/gavel.svg
new file mode 100644
index 00000000..808135fd
--- /dev/null
+++ b/images/svg/gavel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gear.svg b/images/svg/gear.svg
new file mode 100644
index 00000000..67d3487d
--- /dev/null
+++ b/images/svg/gear.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gears.svg b/images/svg/gears.svg
new file mode 100644
index 00000000..85638c1e
--- /dev/null
+++ b/images/svg/gears.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gem.svg b/images/svg/gem.svg
new file mode 100644
index 00000000..4a21edb4
--- /dev/null
+++ b/images/svg/gem.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/genderless.svg b/images/svg/genderless.svg
new file mode 100644
index 00000000..5bc63456
--- /dev/null
+++ b/images/svg/genderless.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ghost.svg b/images/svg/ghost.svg
new file mode 100644
index 00000000..056e20f3
--- /dev/null
+++ b/images/svg/ghost.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gift.svg b/images/svg/gift.svg
new file mode 100644
index 00000000..a6d60ab9
--- /dev/null
+++ b/images/svg/gift.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gifts.svg b/images/svg/gifts.svg
new file mode 100644
index 00000000..6fb107ae
--- /dev/null
+++ b/images/svg/gifts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/glass-water-droplet.svg b/images/svg/glass-water-droplet.svg
new file mode 100644
index 00000000..36a0acdd
--- /dev/null
+++ b/images/svg/glass-water-droplet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/glass-water.svg b/images/svg/glass-water.svg
new file mode 100644
index 00000000..a5d90250
--- /dev/null
+++ b/images/svg/glass-water.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/glasses.svg b/images/svg/glasses.svg
new file mode 100644
index 00000000..90d7caa4
--- /dev/null
+++ b/images/svg/glasses.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/globe.svg b/images/svg/globe.svg
new file mode 100644
index 00000000..1973a454
--- /dev/null
+++ b/images/svg/globe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/golf-ball-tee.svg b/images/svg/golf-ball-tee.svg
new file mode 100644
index 00000000..a61c44c8
--- /dev/null
+++ b/images/svg/golf-ball-tee.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gopuram.svg b/images/svg/gopuram.svg
new file mode 100644
index 00000000..0d535e83
--- /dev/null
+++ b/images/svg/gopuram.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/graduation-cap.svg b/images/svg/graduation-cap.svg
new file mode 100644
index 00000000..d2ae047a
--- /dev/null
+++ b/images/svg/graduation-cap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/greater-than-equal.svg b/images/svg/greater-than-equal.svg
new file mode 100644
index 00000000..ecd44760
--- /dev/null
+++ b/images/svg/greater-than-equal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/greater-than.svg b/images/svg/greater-than.svg
new file mode 100644
index 00000000..f50b97ab
--- /dev/null
+++ b/images/svg/greater-than.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/grip-lines-vertical.svg b/images/svg/grip-lines-vertical.svg
new file mode 100644
index 00000000..b19b4ed4
--- /dev/null
+++ b/images/svg/grip-lines-vertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/grip-lines.svg b/images/svg/grip-lines.svg
new file mode 100644
index 00000000..71470a70
--- /dev/null
+++ b/images/svg/grip-lines.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/grip-vertical.svg b/images/svg/grip-vertical.svg
new file mode 100644
index 00000000..a8bf5fae
--- /dev/null
+++ b/images/svg/grip-vertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/grip.svg b/images/svg/grip.svg
new file mode 100644
index 00000000..62930c0e
--- /dev/null
+++ b/images/svg/grip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/group-arrows-rotate.svg b/images/svg/group-arrows-rotate.svg
new file mode 100644
index 00000000..1524f2ac
--- /dev/null
+++ b/images/svg/group-arrows-rotate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/guarani-sign.svg b/images/svg/guarani-sign.svg
new file mode 100644
index 00000000..c000e2be
--- /dev/null
+++ b/images/svg/guarani-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/guitar.svg b/images/svg/guitar.svg
new file mode 100644
index 00000000..94bcc5eb
--- /dev/null
+++ b/images/svg/guitar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/gun.svg b/images/svg/gun.svg
new file mode 100644
index 00000000..9cea28ad
--- /dev/null
+++ b/images/svg/gun.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/h.svg b/images/svg/h.svg
new file mode 100644
index 00000000..b8aef211
--- /dev/null
+++ b/images/svg/h.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hammer.svg b/images/svg/hammer.svg
new file mode 100644
index 00000000..935be4de
--- /dev/null
+++ b/images/svg/hammer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hamsa.svg b/images/svg/hamsa.svg
new file mode 100644
index 00000000..68737cba
--- /dev/null
+++ b/images/svg/hamsa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-back-fist.svg b/images/svg/hand-back-fist.svg
new file mode 100644
index 00000000..e9a5aa75
--- /dev/null
+++ b/images/svg/hand-back-fist.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-dots.svg b/images/svg/hand-dots.svg
new file mode 100644
index 00000000..6ca30d7c
--- /dev/null
+++ b/images/svg/hand-dots.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-fist.svg b/images/svg/hand-fist.svg
new file mode 100644
index 00000000..03bab11d
--- /dev/null
+++ b/images/svg/hand-fist.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-holding-dollar.svg b/images/svg/hand-holding-dollar.svg
new file mode 100644
index 00000000..767cb550
--- /dev/null
+++ b/images/svg/hand-holding-dollar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-holding-droplet.svg b/images/svg/hand-holding-droplet.svg
new file mode 100644
index 00000000..3a94e9ff
--- /dev/null
+++ b/images/svg/hand-holding-droplet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-holding-hand.svg b/images/svg/hand-holding-hand.svg
new file mode 100644
index 00000000..fb6db297
--- /dev/null
+++ b/images/svg/hand-holding-hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-holding-heart.svg b/images/svg/hand-holding-heart.svg
new file mode 100644
index 00000000..531fbef2
--- /dev/null
+++ b/images/svg/hand-holding-heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-holding-medical.svg b/images/svg/hand-holding-medical.svg
new file mode 100644
index 00000000..d1cf3d12
--- /dev/null
+++ b/images/svg/hand-holding-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-holding.svg b/images/svg/hand-holding.svg
new file mode 100644
index 00000000..64d876b7
--- /dev/null
+++ b/images/svg/hand-holding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-lizard.svg b/images/svg/hand-lizard.svg
new file mode 100644
index 00000000..7e389db2
--- /dev/null
+++ b/images/svg/hand-lizard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-middle-finger.svg b/images/svg/hand-middle-finger.svg
new file mode 100644
index 00000000..db2172e1
--- /dev/null
+++ b/images/svg/hand-middle-finger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-peace.svg b/images/svg/hand-peace.svg
new file mode 100644
index 00000000..754bee7e
--- /dev/null
+++ b/images/svg/hand-peace.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-point-down.svg b/images/svg/hand-point-down.svg
new file mode 100644
index 00000000..8dd096ef
--- /dev/null
+++ b/images/svg/hand-point-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-point-left.svg b/images/svg/hand-point-left.svg
new file mode 100644
index 00000000..c8de51c0
--- /dev/null
+++ b/images/svg/hand-point-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-point-right.svg b/images/svg/hand-point-right.svg
new file mode 100644
index 00000000..6273d6c7
--- /dev/null
+++ b/images/svg/hand-point-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-point-up.svg b/images/svg/hand-point-up.svg
new file mode 100644
index 00000000..e78784b4
--- /dev/null
+++ b/images/svg/hand-point-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-pointer.svg b/images/svg/hand-pointer.svg
new file mode 100644
index 00000000..1212a53d
--- /dev/null
+++ b/images/svg/hand-pointer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-scissors.svg b/images/svg/hand-scissors.svg
new file mode 100644
index 00000000..e9b8ba46
--- /dev/null
+++ b/images/svg/hand-scissors.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-sparkles.svg b/images/svg/hand-sparkles.svg
new file mode 100644
index 00000000..7aefe1e4
--- /dev/null
+++ b/images/svg/hand-sparkles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand-spock.svg b/images/svg/hand-spock.svg
new file mode 100644
index 00000000..3f83ab1d
--- /dev/null
+++ b/images/svg/hand-spock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hand.svg b/images/svg/hand.svg
new file mode 100644
index 00000000..9834a4f4
--- /dev/null
+++ b/images/svg/hand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/handcuffs.svg b/images/svg/handcuffs.svg
new file mode 100644
index 00000000..702ed475
--- /dev/null
+++ b/images/svg/handcuffs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hands-asl-interpreting.svg b/images/svg/hands-asl-interpreting.svg
new file mode 100644
index 00000000..5614cb23
--- /dev/null
+++ b/images/svg/hands-asl-interpreting.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hands-bound.svg b/images/svg/hands-bound.svg
new file mode 100644
index 00000000..7b062f4b
--- /dev/null
+++ b/images/svg/hands-bound.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hands-bubbles.svg b/images/svg/hands-bubbles.svg
new file mode 100644
index 00000000..b9aac548
--- /dev/null
+++ b/images/svg/hands-bubbles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hands-clapping.svg b/images/svg/hands-clapping.svg
new file mode 100644
index 00000000..c5ed232f
--- /dev/null
+++ b/images/svg/hands-clapping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hands-holding-child.svg b/images/svg/hands-holding-child.svg
new file mode 100644
index 00000000..f06c43d2
--- /dev/null
+++ b/images/svg/hands-holding-child.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hands-holding-circle.svg b/images/svg/hands-holding-circle.svg
new file mode 100644
index 00000000..be8f0f79
--- /dev/null
+++ b/images/svg/hands-holding-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hands-holding.svg b/images/svg/hands-holding.svg
new file mode 100644
index 00000000..24cbab67
--- /dev/null
+++ b/images/svg/hands-holding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hands-praying.svg b/images/svg/hands-praying.svg
new file mode 100644
index 00000000..71ebe7a3
--- /dev/null
+++ b/images/svg/hands-praying.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hands.svg b/images/svg/hands.svg
new file mode 100644
index 00000000..6ce73f66
--- /dev/null
+++ b/images/svg/hands.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/handshake-angle.svg b/images/svg/handshake-angle.svg
new file mode 100644
index 00000000..0b621a26
--- /dev/null
+++ b/images/svg/handshake-angle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/handshake-simple-slash.svg b/images/svg/handshake-simple-slash.svg
new file mode 100644
index 00000000..738bfb44
--- /dev/null
+++ b/images/svg/handshake-simple-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/handshake-simple.svg b/images/svg/handshake-simple.svg
new file mode 100644
index 00000000..8616b0ea
--- /dev/null
+++ b/images/svg/handshake-simple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/handshake-slash.svg b/images/svg/handshake-slash.svg
new file mode 100644
index 00000000..3d6361ae
--- /dev/null
+++ b/images/svg/handshake-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/handshake.svg b/images/svg/handshake.svg
new file mode 100644
index 00000000..65c4f12e
--- /dev/null
+++ b/images/svg/handshake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hanukiah.svg b/images/svg/hanukiah.svg
new file mode 100644
index 00000000..20e2392c
--- /dev/null
+++ b/images/svg/hanukiah.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hard-drive.svg b/images/svg/hard-drive.svg
new file mode 100644
index 00000000..6ad22373
--- /dev/null
+++ b/images/svg/hard-drive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hashtag.svg b/images/svg/hashtag.svg
new file mode 100644
index 00000000..d4b49fde
--- /dev/null
+++ b/images/svg/hashtag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hat-cowboy-side.svg b/images/svg/hat-cowboy-side.svg
new file mode 100644
index 00000000..4441e2c3
--- /dev/null
+++ b/images/svg/hat-cowboy-side.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hat-cowboy.svg b/images/svg/hat-cowboy.svg
new file mode 100644
index 00000000..df9bac06
--- /dev/null
+++ b/images/svg/hat-cowboy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hat-wizard.svg b/images/svg/hat-wizard.svg
new file mode 100644
index 00000000..7aebf55a
--- /dev/null
+++ b/images/svg/hat-wizard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/head-side-cough-slash.svg b/images/svg/head-side-cough-slash.svg
new file mode 100644
index 00000000..3414ce3a
--- /dev/null
+++ b/images/svg/head-side-cough-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/head-side-cough.svg b/images/svg/head-side-cough.svg
new file mode 100644
index 00000000..1cadac89
--- /dev/null
+++ b/images/svg/head-side-cough.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/head-side-mask.svg b/images/svg/head-side-mask.svg
new file mode 100644
index 00000000..52835153
--- /dev/null
+++ b/images/svg/head-side-mask.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/head-side-virus.svg b/images/svg/head-side-virus.svg
new file mode 100644
index 00000000..561b647b
--- /dev/null
+++ b/images/svg/head-side-virus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/heading.svg b/images/svg/heading.svg
new file mode 100644
index 00000000..6c4a6231
--- /dev/null
+++ b/images/svg/heading.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/headphones-simple.svg b/images/svg/headphones-simple.svg
new file mode 100644
index 00000000..3150ef0f
--- /dev/null
+++ b/images/svg/headphones-simple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/headphones.svg b/images/svg/headphones.svg
new file mode 100644
index 00000000..4fcc0849
--- /dev/null
+++ b/images/svg/headphones.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/headset.svg b/images/svg/headset.svg
new file mode 100644
index 00000000..bd4b520a
--- /dev/null
+++ b/images/svg/headset.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/heart-circle-bolt.svg b/images/svg/heart-circle-bolt.svg
new file mode 100644
index 00000000..d141c21f
--- /dev/null
+++ b/images/svg/heart-circle-bolt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/heart-circle-check.svg b/images/svg/heart-circle-check.svg
new file mode 100644
index 00000000..a24197c7
--- /dev/null
+++ b/images/svg/heart-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/heart-circle-exclamation.svg b/images/svg/heart-circle-exclamation.svg
new file mode 100644
index 00000000..02b2fe89
--- /dev/null
+++ b/images/svg/heart-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/heart-circle-minus.svg b/images/svg/heart-circle-minus.svg
new file mode 100644
index 00000000..dad3e239
--- /dev/null
+++ b/images/svg/heart-circle-minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/heart-circle-plus.svg b/images/svg/heart-circle-plus.svg
new file mode 100644
index 00000000..9f6173c0
--- /dev/null
+++ b/images/svg/heart-circle-plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/heart-circle-xmark.svg b/images/svg/heart-circle-xmark.svg
new file mode 100644
index 00000000..188b5ec9
--- /dev/null
+++ b/images/svg/heart-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/heart-crack.svg b/images/svg/heart-crack.svg
new file mode 100644
index 00000000..e0d3e85a
--- /dev/null
+++ b/images/svg/heart-crack.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/heart-pulse.svg b/images/svg/heart-pulse.svg
new file mode 100644
index 00000000..c7fb77bd
--- /dev/null
+++ b/images/svg/heart-pulse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/heart.svg b/images/svg/heart.svg
new file mode 100644
index 00000000..f5061d0e
--- /dev/null
+++ b/images/svg/heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/helicopter-symbol.svg b/images/svg/helicopter-symbol.svg
new file mode 100644
index 00000000..ca13db9c
--- /dev/null
+++ b/images/svg/helicopter-symbol.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/helicopter.svg b/images/svg/helicopter.svg
new file mode 100644
index 00000000..624e092f
--- /dev/null
+++ b/images/svg/helicopter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/helmet-safety.svg b/images/svg/helmet-safety.svg
new file mode 100644
index 00000000..ea25ddee
--- /dev/null
+++ b/images/svg/helmet-safety.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/helmet-un.svg b/images/svg/helmet-un.svg
new file mode 100644
index 00000000..7dd69518
--- /dev/null
+++ b/images/svg/helmet-un.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/highlighter.svg b/images/svg/highlighter.svg
new file mode 100644
index 00000000..9350104a
--- /dev/null
+++ b/images/svg/highlighter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hill-avalanche.svg b/images/svg/hill-avalanche.svg
new file mode 100644
index 00000000..12520606
--- /dev/null
+++ b/images/svg/hill-avalanche.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hill-rockslide.svg b/images/svg/hill-rockslide.svg
new file mode 100644
index 00000000..885f2830
--- /dev/null
+++ b/images/svg/hill-rockslide.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hippo.svg b/images/svg/hippo.svg
new file mode 100644
index 00000000..cc74bc03
--- /dev/null
+++ b/images/svg/hippo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hockey-puck.svg b/images/svg/hockey-puck.svg
new file mode 100644
index 00000000..4caf04b5
--- /dev/null
+++ b/images/svg/hockey-puck.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/holly-berry.svg b/images/svg/holly-berry.svg
new file mode 100644
index 00000000..b1b018de
--- /dev/null
+++ b/images/svg/holly-berry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/horse-head.svg b/images/svg/horse-head.svg
new file mode 100644
index 00000000..0e880fa5
--- /dev/null
+++ b/images/svg/horse-head.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/horse.svg b/images/svg/horse.svg
new file mode 100644
index 00000000..65284ac5
--- /dev/null
+++ b/images/svg/horse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hospital-user.svg b/images/svg/hospital-user.svg
new file mode 100644
index 00000000..05446ad7
--- /dev/null
+++ b/images/svg/hospital-user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hospital.svg b/images/svg/hospital.svg
new file mode 100644
index 00000000..67ac0d27
--- /dev/null
+++ b/images/svg/hospital.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hot-tub-person.svg b/images/svg/hot-tub-person.svg
new file mode 100644
index 00000000..d8608d80
--- /dev/null
+++ b/images/svg/hot-tub-person.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hotdog.svg b/images/svg/hotdog.svg
new file mode 100644
index 00000000..b6d8a95f
--- /dev/null
+++ b/images/svg/hotdog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hotel.svg b/images/svg/hotel.svg
new file mode 100644
index 00000000..5d2603d6
--- /dev/null
+++ b/images/svg/hotel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hourglass-end.svg b/images/svg/hourglass-end.svg
new file mode 100644
index 00000000..a77f6070
--- /dev/null
+++ b/images/svg/hourglass-end.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hourglass-half.svg b/images/svg/hourglass-half.svg
new file mode 100644
index 00000000..3c176944
--- /dev/null
+++ b/images/svg/hourglass-half.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hourglass-start.svg b/images/svg/hourglass-start.svg
new file mode 100644
index 00000000..8cb3bce2
--- /dev/null
+++ b/images/svg/hourglass-start.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hourglass.svg b/images/svg/hourglass.svg
new file mode 100644
index 00000000..6c4f6b18
--- /dev/null
+++ b/images/svg/hourglass.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-chimney-crack.svg b/images/svg/house-chimney-crack.svg
new file mode 100644
index 00000000..812534e2
--- /dev/null
+++ b/images/svg/house-chimney-crack.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-chimney-medical.svg b/images/svg/house-chimney-medical.svg
new file mode 100644
index 00000000..476126d2
--- /dev/null
+++ b/images/svg/house-chimney-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-chimney-user.svg b/images/svg/house-chimney-user.svg
new file mode 100644
index 00000000..2d46885d
--- /dev/null
+++ b/images/svg/house-chimney-user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-chimney-window.svg b/images/svg/house-chimney-window.svg
new file mode 100644
index 00000000..2a710633
--- /dev/null
+++ b/images/svg/house-chimney-window.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-chimney.svg b/images/svg/house-chimney.svg
new file mode 100644
index 00000000..85c8e2c9
--- /dev/null
+++ b/images/svg/house-chimney.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-circle-check.svg b/images/svg/house-circle-check.svg
new file mode 100644
index 00000000..32cfda0c
--- /dev/null
+++ b/images/svg/house-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-circle-exclamation.svg b/images/svg/house-circle-exclamation.svg
new file mode 100644
index 00000000..6757df15
--- /dev/null
+++ b/images/svg/house-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-circle-xmark.svg b/images/svg/house-circle-xmark.svg
new file mode 100644
index 00000000..20cd390d
--- /dev/null
+++ b/images/svg/house-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-crack.svg b/images/svg/house-crack.svg
new file mode 100644
index 00000000..9e2c759d
--- /dev/null
+++ b/images/svg/house-crack.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-fire.svg b/images/svg/house-fire.svg
new file mode 100644
index 00000000..630a8ae8
--- /dev/null
+++ b/images/svg/house-fire.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-flag.svg b/images/svg/house-flag.svg
new file mode 100644
index 00000000..ca8e7da3
--- /dev/null
+++ b/images/svg/house-flag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-flood-water-circle-arrow-right.svg b/images/svg/house-flood-water-circle-arrow-right.svg
new file mode 100644
index 00000000..2538d884
--- /dev/null
+++ b/images/svg/house-flood-water-circle-arrow-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-flood-water.svg b/images/svg/house-flood-water.svg
new file mode 100644
index 00000000..03c85a64
--- /dev/null
+++ b/images/svg/house-flood-water.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-laptop.svg b/images/svg/house-laptop.svg
new file mode 100644
index 00000000..a73125bb
--- /dev/null
+++ b/images/svg/house-laptop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-lock.svg b/images/svg/house-lock.svg
new file mode 100644
index 00000000..ee063418
--- /dev/null
+++ b/images/svg/house-lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-medical-circle-check.svg b/images/svg/house-medical-circle-check.svg
new file mode 100644
index 00000000..6562d65e
--- /dev/null
+++ b/images/svg/house-medical-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-medical-circle-exclamation.svg b/images/svg/house-medical-circle-exclamation.svg
new file mode 100644
index 00000000..0c1c6e5f
--- /dev/null
+++ b/images/svg/house-medical-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-medical-circle-xmark.svg b/images/svg/house-medical-circle-xmark.svg
new file mode 100644
index 00000000..af06de66
--- /dev/null
+++ b/images/svg/house-medical-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-medical-flag.svg b/images/svg/house-medical-flag.svg
new file mode 100644
index 00000000..0943459a
--- /dev/null
+++ b/images/svg/house-medical-flag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-medical.svg b/images/svg/house-medical.svg
new file mode 100644
index 00000000..fea8913d
--- /dev/null
+++ b/images/svg/house-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-signal.svg b/images/svg/house-signal.svg
new file mode 100644
index 00000000..097afac0
--- /dev/null
+++ b/images/svg/house-signal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-tsunami.svg b/images/svg/house-tsunami.svg
new file mode 100644
index 00000000..9f016147
--- /dev/null
+++ b/images/svg/house-tsunami.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house-user.svg b/images/svg/house-user.svg
new file mode 100644
index 00000000..ec316255
--- /dev/null
+++ b/images/svg/house-user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/house.svg b/images/svg/house.svg
new file mode 100644
index 00000000..80427d02
--- /dev/null
+++ b/images/svg/house.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hryvnia-sign.svg b/images/svg/hryvnia-sign.svg
new file mode 100644
index 00000000..cb462c75
--- /dev/null
+++ b/images/svg/hryvnia-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/hurricane.svg b/images/svg/hurricane.svg
new file mode 100644
index 00000000..92a7e7cc
--- /dev/null
+++ b/images/svg/hurricane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/i-cursor.svg b/images/svg/i-cursor.svg
new file mode 100644
index 00000000..082ba597
--- /dev/null
+++ b/images/svg/i-cursor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/i.svg b/images/svg/i.svg
new file mode 100644
index 00000000..3fcd545e
--- /dev/null
+++ b/images/svg/i.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ice-cream.svg b/images/svg/ice-cream.svg
new file mode 100644
index 00000000..16e50abb
--- /dev/null
+++ b/images/svg/ice-cream.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/icicles.svg b/images/svg/icicles.svg
new file mode 100644
index 00000000..1f490a3c
--- /dev/null
+++ b/images/svg/icicles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/icons.svg b/images/svg/icons.svg
new file mode 100644
index 00000000..8e614d97
--- /dev/null
+++ b/images/svg/icons.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/id-badge.svg b/images/svg/id-badge.svg
new file mode 100644
index 00000000..183927a7
--- /dev/null
+++ b/images/svg/id-badge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/id-card-clip.svg b/images/svg/id-card-clip.svg
new file mode 100644
index 00000000..4127f1b2
--- /dev/null
+++ b/images/svg/id-card-clip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/id-card.svg b/images/svg/id-card.svg
new file mode 100644
index 00000000..cbe9b1cc
--- /dev/null
+++ b/images/svg/id-card.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/igloo.svg b/images/svg/igloo.svg
new file mode 100644
index 00000000..62b6452d
--- /dev/null
+++ b/images/svg/igloo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/image-portrait.svg b/images/svg/image-portrait.svg
new file mode 100644
index 00000000..c153c776
--- /dev/null
+++ b/images/svg/image-portrait.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/image.svg b/images/svg/image.svg
new file mode 100644
index 00000000..717fb979
--- /dev/null
+++ b/images/svg/image.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/images.svg b/images/svg/images.svg
new file mode 100644
index 00000000..2bf09d3a
--- /dev/null
+++ b/images/svg/images.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/inbox.svg b/images/svg/inbox.svg
new file mode 100644
index 00000000..814ca8ed
--- /dev/null
+++ b/images/svg/inbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/indent.svg b/images/svg/indent.svg
new file mode 100644
index 00000000..467aaba1
--- /dev/null
+++ b/images/svg/indent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/indian-rupee-sign.svg b/images/svg/indian-rupee-sign.svg
new file mode 100644
index 00000000..6654fa4e
--- /dev/null
+++ b/images/svg/indian-rupee-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/industry.svg b/images/svg/industry.svg
new file mode 100644
index 00000000..16f56c17
--- /dev/null
+++ b/images/svg/industry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/infinity.svg b/images/svg/infinity.svg
new file mode 100644
index 00000000..ad7a30ff
--- /dev/null
+++ b/images/svg/infinity.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/info.svg b/images/svg/info.svg
new file mode 100644
index 00000000..a908a000
--- /dev/null
+++ b/images/svg/info.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/italic.svg b/images/svg/italic.svg
new file mode 100644
index 00000000..059185e5
--- /dev/null
+++ b/images/svg/italic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/j.svg b/images/svg/j.svg
new file mode 100644
index 00000000..cd80e54f
--- /dev/null
+++ b/images/svg/j.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/jar-wheat.svg b/images/svg/jar-wheat.svg
new file mode 100644
index 00000000..b3146ee6
--- /dev/null
+++ b/images/svg/jar-wheat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/jar.svg b/images/svg/jar.svg
new file mode 100644
index 00000000..9cb936dd
--- /dev/null
+++ b/images/svg/jar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/jedi.svg b/images/svg/jedi.svg
new file mode 100644
index 00000000..3d55e39b
--- /dev/null
+++ b/images/svg/jedi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/jet-fighter-up.svg b/images/svg/jet-fighter-up.svg
new file mode 100644
index 00000000..aa307f32
--- /dev/null
+++ b/images/svg/jet-fighter-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/jet-fighter.svg b/images/svg/jet-fighter.svg
new file mode 100644
index 00000000..49fd5a44
--- /dev/null
+++ b/images/svg/jet-fighter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/joint.svg b/images/svg/joint.svg
new file mode 100644
index 00000000..fac6a6b3
--- /dev/null
+++ b/images/svg/joint.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/jug-detergent.svg b/images/svg/jug-detergent.svg
new file mode 100644
index 00000000..9ce632db
--- /dev/null
+++ b/images/svg/jug-detergent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/k.svg b/images/svg/k.svg
new file mode 100644
index 00000000..6b063ed4
--- /dev/null
+++ b/images/svg/k.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/kaaba.svg b/images/svg/kaaba.svg
new file mode 100644
index 00000000..2a11acab
--- /dev/null
+++ b/images/svg/kaaba.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/key.svg b/images/svg/key.svg
new file mode 100644
index 00000000..21b42dcb
--- /dev/null
+++ b/images/svg/key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/keyboard.svg b/images/svg/keyboard.svg
new file mode 100644
index 00000000..747a4626
--- /dev/null
+++ b/images/svg/keyboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/khanda.svg b/images/svg/khanda.svg
new file mode 100644
index 00000000..71ad9afc
--- /dev/null
+++ b/images/svg/khanda.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/kip-sign.svg b/images/svg/kip-sign.svg
new file mode 100644
index 00000000..e5523efb
--- /dev/null
+++ b/images/svg/kip-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/kit-medical.svg b/images/svg/kit-medical.svg
new file mode 100644
index 00000000..cddbbb96
--- /dev/null
+++ b/images/svg/kit-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/kitchen-set.svg b/images/svg/kitchen-set.svg
new file mode 100644
index 00000000..397ead2d
--- /dev/null
+++ b/images/svg/kitchen-set.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/kiwi-bird.svg b/images/svg/kiwi-bird.svg
new file mode 100644
index 00000000..585077ed
--- /dev/null
+++ b/images/svg/kiwi-bird.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/l.svg b/images/svg/l.svg
new file mode 100644
index 00000000..d87303e5
--- /dev/null
+++ b/images/svg/l.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/land-mine-on.svg b/images/svg/land-mine-on.svg
new file mode 100644
index 00000000..f1a6ec5d
--- /dev/null
+++ b/images/svg/land-mine-on.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/landmark-dome.svg b/images/svg/landmark-dome.svg
new file mode 100644
index 00000000..e1b1d9ed
--- /dev/null
+++ b/images/svg/landmark-dome.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/landmark-flag.svg b/images/svg/landmark-flag.svg
new file mode 100644
index 00000000..a39d7d36
--- /dev/null
+++ b/images/svg/landmark-flag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/landmark.svg b/images/svg/landmark.svg
new file mode 100644
index 00000000..d6e16bdb
--- /dev/null
+++ b/images/svg/landmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/language.svg b/images/svg/language.svg
new file mode 100644
index 00000000..1fb303a7
--- /dev/null
+++ b/images/svg/language.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/laptop-code.svg b/images/svg/laptop-code.svg
new file mode 100644
index 00000000..9175e04c
--- /dev/null
+++ b/images/svg/laptop-code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/laptop-file.svg b/images/svg/laptop-file.svg
new file mode 100644
index 00000000..326f7e0c
--- /dev/null
+++ b/images/svg/laptop-file.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/laptop-medical.svg b/images/svg/laptop-medical.svg
new file mode 100644
index 00000000..62a6b2ca
--- /dev/null
+++ b/images/svg/laptop-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/laptop.svg b/images/svg/laptop.svg
new file mode 100644
index 00000000..70f9c3aa
--- /dev/null
+++ b/images/svg/laptop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/lari-sign.svg b/images/svg/lari-sign.svg
new file mode 100644
index 00000000..c70e799c
--- /dev/null
+++ b/images/svg/lari-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/layer-group.svg b/images/svg/layer-group.svg
new file mode 100644
index 00000000..6d6dbf92
--- /dev/null
+++ b/images/svg/layer-group.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/leaf.svg b/images/svg/leaf.svg
new file mode 100644
index 00000000..0d29d964
--- /dev/null
+++ b/images/svg/leaf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/left-long.svg b/images/svg/left-long.svg
new file mode 100644
index 00000000..8cc4a2b1
--- /dev/null
+++ b/images/svg/left-long.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/left-right.svg b/images/svg/left-right.svg
new file mode 100644
index 00000000..210288ca
--- /dev/null
+++ b/images/svg/left-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/lemon.svg b/images/svg/lemon.svg
new file mode 100644
index 00000000..5e6fb852
--- /dev/null
+++ b/images/svg/lemon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/less-than-equal.svg b/images/svg/less-than-equal.svg
new file mode 100644
index 00000000..914c724c
--- /dev/null
+++ b/images/svg/less-than-equal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/less-than.svg b/images/svg/less-than.svg
new file mode 100644
index 00000000..525ac478
--- /dev/null
+++ b/images/svg/less-than.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/life-ring.svg b/images/svg/life-ring.svg
new file mode 100644
index 00000000..855e6b23
--- /dev/null
+++ b/images/svg/life-ring.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/lightbulb.svg b/images/svg/lightbulb.svg
new file mode 100644
index 00000000..48692771
--- /dev/null
+++ b/images/svg/lightbulb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/lines-leaning.svg b/images/svg/lines-leaning.svg
new file mode 100644
index 00000000..50d1070d
--- /dev/null
+++ b/images/svg/lines-leaning.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/link-slash.svg b/images/svg/link-slash.svg
new file mode 100644
index 00000000..619e197c
--- /dev/null
+++ b/images/svg/link-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/link.svg b/images/svg/link.svg
new file mode 100644
index 00000000..191e7454
--- /dev/null
+++ b/images/svg/link.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/lira-sign.svg b/images/svg/lira-sign.svg
new file mode 100644
index 00000000..ceec1d82
--- /dev/null
+++ b/images/svg/lira-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/list-check.svg b/images/svg/list-check.svg
new file mode 100644
index 00000000..72748bd0
--- /dev/null
+++ b/images/svg/list-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/list-ol.svg b/images/svg/list-ol.svg
new file mode 100644
index 00000000..6454053d
--- /dev/null
+++ b/images/svg/list-ol.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/list-ul.svg b/images/svg/list-ul.svg
new file mode 100644
index 00000000..ab55a8eb
--- /dev/null
+++ b/images/svg/list-ul.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/list.svg b/images/svg/list.svg
new file mode 100644
index 00000000..f017952b
--- /dev/null
+++ b/images/svg/list.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/litecoin-sign.svg b/images/svg/litecoin-sign.svg
new file mode 100644
index 00000000..152003d9
--- /dev/null
+++ b/images/svg/litecoin-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/location-arrow.svg b/images/svg/location-arrow.svg
new file mode 100644
index 00000000..cbb2a0d8
--- /dev/null
+++ b/images/svg/location-arrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/location-crosshairs.svg b/images/svg/location-crosshairs.svg
new file mode 100644
index 00000000..6dee8c9c
--- /dev/null
+++ b/images/svg/location-crosshairs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/location-dot.svg b/images/svg/location-dot.svg
new file mode 100644
index 00000000..7965068d
--- /dev/null
+++ b/images/svg/location-dot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/location-pin-lock.svg b/images/svg/location-pin-lock.svg
new file mode 100644
index 00000000..e83106db
--- /dev/null
+++ b/images/svg/location-pin-lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/location-pin.svg b/images/svg/location-pin.svg
new file mode 100644
index 00000000..e5de57b0
--- /dev/null
+++ b/images/svg/location-pin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/lock-open.svg b/images/svg/lock-open.svg
new file mode 100644
index 00000000..290a5d2a
--- /dev/null
+++ b/images/svg/lock-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/lock.svg b/images/svg/lock.svg
new file mode 100644
index 00000000..4cd929bf
--- /dev/null
+++ b/images/svg/lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/locust.svg b/images/svg/locust.svg
new file mode 100644
index 00000000..a5dcf79d
--- /dev/null
+++ b/images/svg/locust.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/lungs-virus.svg b/images/svg/lungs-virus.svg
new file mode 100644
index 00000000..0d3f12cf
--- /dev/null
+++ b/images/svg/lungs-virus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/lungs.svg b/images/svg/lungs.svg
new file mode 100644
index 00000000..53bc8d82
--- /dev/null
+++ b/images/svg/lungs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/m.svg b/images/svg/m.svg
new file mode 100644
index 00000000..0d8cf668
--- /dev/null
+++ b/images/svg/m.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/magnet.svg b/images/svg/magnet.svg
new file mode 100644
index 00000000..9a843fc2
--- /dev/null
+++ b/images/svg/magnet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/magnifying-glass-arrow-right.svg b/images/svg/magnifying-glass-arrow-right.svg
new file mode 100644
index 00000000..7989383f
--- /dev/null
+++ b/images/svg/magnifying-glass-arrow-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/magnifying-glass-chart.svg b/images/svg/magnifying-glass-chart.svg
new file mode 100644
index 00000000..95c53d89
--- /dev/null
+++ b/images/svg/magnifying-glass-chart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/magnifying-glass-dollar.svg b/images/svg/magnifying-glass-dollar.svg
new file mode 100644
index 00000000..c8a26bd2
--- /dev/null
+++ b/images/svg/magnifying-glass-dollar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/magnifying-glass-location.svg b/images/svg/magnifying-glass-location.svg
new file mode 100644
index 00000000..47922b1e
--- /dev/null
+++ b/images/svg/magnifying-glass-location.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/magnifying-glass-minus.svg b/images/svg/magnifying-glass-minus.svg
new file mode 100644
index 00000000..228cd636
--- /dev/null
+++ b/images/svg/magnifying-glass-minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/magnifying-glass-plus.svg b/images/svg/magnifying-glass-plus.svg
new file mode 100644
index 00000000..08cc747e
--- /dev/null
+++ b/images/svg/magnifying-glass-plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/magnifying-glass.svg b/images/svg/magnifying-glass.svg
new file mode 100644
index 00000000..2fabbf44
--- /dev/null
+++ b/images/svg/magnifying-glass.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/manat-sign.svg b/images/svg/manat-sign.svg
new file mode 100644
index 00000000..a2bd66f1
--- /dev/null
+++ b/images/svg/manat-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/map-location-dot.svg b/images/svg/map-location-dot.svg
new file mode 100644
index 00000000..3e95ee07
--- /dev/null
+++ b/images/svg/map-location-dot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/map-location.svg b/images/svg/map-location.svg
new file mode 100644
index 00000000..e1ffbbc7
--- /dev/null
+++ b/images/svg/map-location.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/map-pin.svg b/images/svg/map-pin.svg
new file mode 100644
index 00000000..9e40ed41
--- /dev/null
+++ b/images/svg/map-pin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/map.svg b/images/svg/map.svg
new file mode 100644
index 00000000..f29e38fd
--- /dev/null
+++ b/images/svg/map.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/marker.svg b/images/svg/marker.svg
new file mode 100644
index 00000000..8b378b65
--- /dev/null
+++ b/images/svg/marker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mars-and-venus-burst.svg b/images/svg/mars-and-venus-burst.svg
new file mode 100644
index 00000000..e0b147a1
--- /dev/null
+++ b/images/svg/mars-and-venus-burst.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mars-and-venus.svg b/images/svg/mars-and-venus.svg
new file mode 100644
index 00000000..c7d399bb
--- /dev/null
+++ b/images/svg/mars-and-venus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mars-double.svg b/images/svg/mars-double.svg
new file mode 100644
index 00000000..0fe88b77
--- /dev/null
+++ b/images/svg/mars-double.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mars-stroke-right.svg b/images/svg/mars-stroke-right.svg
new file mode 100644
index 00000000..849eafd5
--- /dev/null
+++ b/images/svg/mars-stroke-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mars-stroke-up.svg b/images/svg/mars-stroke-up.svg
new file mode 100644
index 00000000..69934f3f
--- /dev/null
+++ b/images/svg/mars-stroke-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mars-stroke.svg b/images/svg/mars-stroke.svg
new file mode 100644
index 00000000..f744b0d8
--- /dev/null
+++ b/images/svg/mars-stroke.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mars.svg b/images/svg/mars.svg
new file mode 100644
index 00000000..d4629284
--- /dev/null
+++ b/images/svg/mars.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/martini-glass-citrus.svg b/images/svg/martini-glass-citrus.svg
new file mode 100644
index 00000000..7500a574
--- /dev/null
+++ b/images/svg/martini-glass-citrus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/martini-glass-empty.svg b/images/svg/martini-glass-empty.svg
new file mode 100644
index 00000000..5bbaa33b
--- /dev/null
+++ b/images/svg/martini-glass-empty.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/martini-glass.svg b/images/svg/martini-glass.svg
new file mode 100644
index 00000000..3a67b519
--- /dev/null
+++ b/images/svg/martini-glass.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mask-face.svg b/images/svg/mask-face.svg
new file mode 100644
index 00000000..d040f95f
--- /dev/null
+++ b/images/svg/mask-face.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mask-ventilator.svg b/images/svg/mask-ventilator.svg
new file mode 100644
index 00000000..227e734b
--- /dev/null
+++ b/images/svg/mask-ventilator.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mask.svg b/images/svg/mask.svg
new file mode 100644
index 00000000..75883ddc
--- /dev/null
+++ b/images/svg/mask.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/masks-theater.svg b/images/svg/masks-theater.svg
new file mode 100644
index 00000000..919abcc0
--- /dev/null
+++ b/images/svg/masks-theater.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mattress-pillow.svg b/images/svg/mattress-pillow.svg
new file mode 100644
index 00000000..438aa0f9
--- /dev/null
+++ b/images/svg/mattress-pillow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/maximize.svg b/images/svg/maximize.svg
new file mode 100644
index 00000000..f6e9f67e
--- /dev/null
+++ b/images/svg/maximize.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/medal.svg b/images/svg/medal.svg
new file mode 100644
index 00000000..4a24a4c1
--- /dev/null
+++ b/images/svg/medal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/memory.svg b/images/svg/memory.svg
new file mode 100644
index 00000000..18833088
--- /dev/null
+++ b/images/svg/memory.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/menorah.svg b/images/svg/menorah.svg
new file mode 100644
index 00000000..94ab8292
--- /dev/null
+++ b/images/svg/menorah.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mercury.svg b/images/svg/mercury.svg
new file mode 100644
index 00000000..b41bcf3b
--- /dev/null
+++ b/images/svg/mercury.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/message.svg b/images/svg/message.svg
new file mode 100644
index 00000000..fd5074e0
--- /dev/null
+++ b/images/svg/message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/meteor.svg b/images/svg/meteor.svg
new file mode 100644
index 00000000..497ab847
--- /dev/null
+++ b/images/svg/meteor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/microchip.svg b/images/svg/microchip.svg
new file mode 100644
index 00000000..9e5884fa
--- /dev/null
+++ b/images/svg/microchip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/microphone-lines-slash.svg b/images/svg/microphone-lines-slash.svg
new file mode 100644
index 00000000..0b62f350
--- /dev/null
+++ b/images/svg/microphone-lines-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/microphone-lines.svg b/images/svg/microphone-lines.svg
new file mode 100644
index 00000000..c1a3dc38
--- /dev/null
+++ b/images/svg/microphone-lines.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/microphone-slash.svg b/images/svg/microphone-slash.svg
new file mode 100644
index 00000000..33331aa4
--- /dev/null
+++ b/images/svg/microphone-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/microphone.svg b/images/svg/microphone.svg
new file mode 100644
index 00000000..932d6a2d
--- /dev/null
+++ b/images/svg/microphone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/microscope.svg b/images/svg/microscope.svg
new file mode 100644
index 00000000..3860c3fd
--- /dev/null
+++ b/images/svg/microscope.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mill-sign.svg b/images/svg/mill-sign.svg
new file mode 100644
index 00000000..2e7bcdbe
--- /dev/null
+++ b/images/svg/mill-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/minimize.svg b/images/svg/minimize.svg
new file mode 100644
index 00000000..d5f39a5b
--- /dev/null
+++ b/images/svg/minimize.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/minus.svg b/images/svg/minus.svg
new file mode 100644
index 00000000..c86b6641
--- /dev/null
+++ b/images/svg/minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mitten.svg b/images/svg/mitten.svg
new file mode 100644
index 00000000..d4dd7591
--- /dev/null
+++ b/images/svg/mitten.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mobile-button.svg b/images/svg/mobile-button.svg
new file mode 100644
index 00000000..ba601d6e
--- /dev/null
+++ b/images/svg/mobile-button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mobile-retro.svg b/images/svg/mobile-retro.svg
new file mode 100644
index 00000000..cde4a51a
--- /dev/null
+++ b/images/svg/mobile-retro.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mobile-screen-button.svg b/images/svg/mobile-screen-button.svg
new file mode 100644
index 00000000..20162d64
--- /dev/null
+++ b/images/svg/mobile-screen-button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mobile-screen.svg b/images/svg/mobile-screen.svg
new file mode 100644
index 00000000..9aa48803
--- /dev/null
+++ b/images/svg/mobile-screen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mobile.svg b/images/svg/mobile.svg
new file mode 100644
index 00000000..87dd18d1
--- /dev/null
+++ b/images/svg/mobile.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/money-bill-1-wave.svg b/images/svg/money-bill-1-wave.svg
new file mode 100644
index 00000000..18ab29b0
--- /dev/null
+++ b/images/svg/money-bill-1-wave.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/money-bill-1.svg b/images/svg/money-bill-1.svg
new file mode 100644
index 00000000..46d840f8
--- /dev/null
+++ b/images/svg/money-bill-1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/money-bill-transfer.svg b/images/svg/money-bill-transfer.svg
new file mode 100644
index 00000000..99b8d72f
--- /dev/null
+++ b/images/svg/money-bill-transfer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/money-bill-trend-up.svg b/images/svg/money-bill-trend-up.svg
new file mode 100644
index 00000000..63989e8b
--- /dev/null
+++ b/images/svg/money-bill-trend-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/money-bill-wave.svg b/images/svg/money-bill-wave.svg
new file mode 100644
index 00000000..3f20b545
--- /dev/null
+++ b/images/svg/money-bill-wave.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/money-bill-wheat.svg b/images/svg/money-bill-wheat.svg
new file mode 100644
index 00000000..d99d8b22
--- /dev/null
+++ b/images/svg/money-bill-wheat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/money-bill.svg b/images/svg/money-bill.svg
new file mode 100644
index 00000000..56a616d3
--- /dev/null
+++ b/images/svg/money-bill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/money-bills.svg b/images/svg/money-bills.svg
new file mode 100644
index 00000000..6392ce77
--- /dev/null
+++ b/images/svg/money-bills.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/money-check-dollar.svg b/images/svg/money-check-dollar.svg
new file mode 100644
index 00000000..b7f44a94
--- /dev/null
+++ b/images/svg/money-check-dollar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/money-check.svg b/images/svg/money-check.svg
new file mode 100644
index 00000000..1df5ac4e
--- /dev/null
+++ b/images/svg/money-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/monument.svg b/images/svg/monument.svg
new file mode 100644
index 00000000..116829d9
--- /dev/null
+++ b/images/svg/monument.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/moon.svg b/images/svg/moon.svg
new file mode 100644
index 00000000..dd835670
--- /dev/null
+++ b/images/svg/moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mortar-pestle.svg b/images/svg/mortar-pestle.svg
new file mode 100644
index 00000000..5984587b
--- /dev/null
+++ b/images/svg/mortar-pestle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mosque.svg b/images/svg/mosque.svg
new file mode 100644
index 00000000..d12bf67f
--- /dev/null
+++ b/images/svg/mosque.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mosquito-net.svg b/images/svg/mosquito-net.svg
new file mode 100644
index 00000000..12f312c4
--- /dev/null
+++ b/images/svg/mosquito-net.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mosquito.svg b/images/svg/mosquito.svg
new file mode 100644
index 00000000..75eddecf
--- /dev/null
+++ b/images/svg/mosquito.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/motorcycle.svg b/images/svg/motorcycle.svg
new file mode 100644
index 00000000..b884dd31
--- /dev/null
+++ b/images/svg/motorcycle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mound.svg b/images/svg/mound.svg
new file mode 100644
index 00000000..93675376
--- /dev/null
+++ b/images/svg/mound.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mountain-city.svg b/images/svg/mountain-city.svg
new file mode 100644
index 00000000..1d49095b
--- /dev/null
+++ b/images/svg/mountain-city.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mountain-sun.svg b/images/svg/mountain-sun.svg
new file mode 100644
index 00000000..eff94f73
--- /dev/null
+++ b/images/svg/mountain-sun.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mountain.svg b/images/svg/mountain.svg
new file mode 100644
index 00000000..cf890d26
--- /dev/null
+++ b/images/svg/mountain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mug-hot.svg b/images/svg/mug-hot.svg
new file mode 100644
index 00000000..46e82dc3
--- /dev/null
+++ b/images/svg/mug-hot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/mug-saucer.svg b/images/svg/mug-saucer.svg
new file mode 100644
index 00000000..5d85056c
--- /dev/null
+++ b/images/svg/mug-saucer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/music.svg b/images/svg/music.svg
new file mode 100644
index 00000000..8494c729
--- /dev/null
+++ b/images/svg/music.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/n.svg b/images/svg/n.svg
new file mode 100644
index 00000000..4cf4ba51
--- /dev/null
+++ b/images/svg/n.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/naira-sign.svg b/images/svg/naira-sign.svg
new file mode 100644
index 00000000..acb6c41c
--- /dev/null
+++ b/images/svg/naira-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/network-wired.svg b/images/svg/network-wired.svg
new file mode 100644
index 00000000..536ffc54
--- /dev/null
+++ b/images/svg/network-wired.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/neuter.svg b/images/svg/neuter.svg
new file mode 100644
index 00000000..723162e0
--- /dev/null
+++ b/images/svg/neuter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/newspaper.svg b/images/svg/newspaper.svg
new file mode 100644
index 00000000..500691f6
--- /dev/null
+++ b/images/svg/newspaper.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/not-equal.svg b/images/svg/not-equal.svg
new file mode 100644
index 00000000..79d46bdd
--- /dev/null
+++ b/images/svg/not-equal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/notdef.svg b/images/svg/notdef.svg
new file mode 100644
index 00000000..c34d2d4f
--- /dev/null
+++ b/images/svg/notdef.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/note-sticky.svg b/images/svg/note-sticky.svg
new file mode 100644
index 00000000..655b8cc2
--- /dev/null
+++ b/images/svg/note-sticky.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/notes-medical.svg b/images/svg/notes-medical.svg
new file mode 100644
index 00000000..03cd6083
--- /dev/null
+++ b/images/svg/notes-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/o.svg b/images/svg/o.svg
new file mode 100644
index 00000000..d6519c59
--- /dev/null
+++ b/images/svg/o.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/object-group.svg b/images/svg/object-group.svg
new file mode 100644
index 00000000..1f7aae9f
--- /dev/null
+++ b/images/svg/object-group.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/object-ungroup.svg b/images/svg/object-ungroup.svg
new file mode 100644
index 00000000..2fa3a227
--- /dev/null
+++ b/images/svg/object-ungroup.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/oil-can.svg b/images/svg/oil-can.svg
new file mode 100644
index 00000000..83379141
--- /dev/null
+++ b/images/svg/oil-can.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/oil-well.svg b/images/svg/oil-well.svg
new file mode 100644
index 00000000..aeebc39f
--- /dev/null
+++ b/images/svg/oil-well.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/om.svg b/images/svg/om.svg
new file mode 100644
index 00000000..73955d87
--- /dev/null
+++ b/images/svg/om.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/otter.svg b/images/svg/otter.svg
new file mode 100644
index 00000000..69e45595
--- /dev/null
+++ b/images/svg/otter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/outdent.svg b/images/svg/outdent.svg
new file mode 100644
index 00000000..1643b148
--- /dev/null
+++ b/images/svg/outdent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/p.svg b/images/svg/p.svg
new file mode 100644
index 00000000..ba0dd3d2
--- /dev/null
+++ b/images/svg/p.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pager.svg b/images/svg/pager.svg
new file mode 100644
index 00000000..225d53ae
--- /dev/null
+++ b/images/svg/pager.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/paint-roller.svg b/images/svg/paint-roller.svg
new file mode 100644
index 00000000..6060141f
--- /dev/null
+++ b/images/svg/paint-roller.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/paintbrush.svg b/images/svg/paintbrush.svg
new file mode 100644
index 00000000..9aa3da6d
--- /dev/null
+++ b/images/svg/paintbrush.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/palette.svg b/images/svg/palette.svg
new file mode 100644
index 00000000..097df3c9
--- /dev/null
+++ b/images/svg/palette.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pallet.svg b/images/svg/pallet.svg
new file mode 100644
index 00000000..46604648
--- /dev/null
+++ b/images/svg/pallet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/panorama.svg b/images/svg/panorama.svg
new file mode 100644
index 00000000..b3e66752
--- /dev/null
+++ b/images/svg/panorama.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/paper-plane.svg b/images/svg/paper-plane.svg
new file mode 100644
index 00000000..a65f11bb
--- /dev/null
+++ b/images/svg/paper-plane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/paperclip.svg b/images/svg/paperclip.svg
new file mode 100644
index 00000000..c62fea6d
--- /dev/null
+++ b/images/svg/paperclip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/parachute-box.svg b/images/svg/parachute-box.svg
new file mode 100644
index 00000000..89d18559
--- /dev/null
+++ b/images/svg/parachute-box.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/paragraph.svg b/images/svg/paragraph.svg
new file mode 100644
index 00000000..6936a6ed
--- /dev/null
+++ b/images/svg/paragraph.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/passport.svg b/images/svg/passport.svg
new file mode 100644
index 00000000..6034e068
--- /dev/null
+++ b/images/svg/passport.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/paste.svg b/images/svg/paste.svg
new file mode 100644
index 00000000..29fcd20f
--- /dev/null
+++ b/images/svg/paste.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pause.svg b/images/svg/pause.svg
new file mode 100644
index 00000000..7c89e05b
--- /dev/null
+++ b/images/svg/pause.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/paw.svg b/images/svg/paw.svg
new file mode 100644
index 00000000..b0bc5165
--- /dev/null
+++ b/images/svg/paw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/peace.svg b/images/svg/peace.svg
new file mode 100644
index 00000000..45a6d3cf
--- /dev/null
+++ b/images/svg/peace.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pen-clip.svg b/images/svg/pen-clip.svg
new file mode 100644
index 00000000..9b12138e
--- /dev/null
+++ b/images/svg/pen-clip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pen-fancy.svg b/images/svg/pen-fancy.svg
new file mode 100644
index 00000000..c0433e2e
--- /dev/null
+++ b/images/svg/pen-fancy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pen-nib.svg b/images/svg/pen-nib.svg
new file mode 100644
index 00000000..c9be37a3
--- /dev/null
+++ b/images/svg/pen-nib.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pen-ruler.svg b/images/svg/pen-ruler.svg
new file mode 100644
index 00000000..2827a82f
--- /dev/null
+++ b/images/svg/pen-ruler.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pen-to-square.svg b/images/svg/pen-to-square.svg
new file mode 100644
index 00000000..d7b0f971
--- /dev/null
+++ b/images/svg/pen-to-square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pen.svg b/images/svg/pen.svg
new file mode 100644
index 00000000..4455241d
--- /dev/null
+++ b/images/svg/pen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pencil.svg b/images/svg/pencil.svg
new file mode 100644
index 00000000..8f4531d9
--- /dev/null
+++ b/images/svg/pencil.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/people-arrows.svg b/images/svg/people-arrows.svg
new file mode 100644
index 00000000..fd7bf2c9
--- /dev/null
+++ b/images/svg/people-arrows.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/people-carry-box.svg b/images/svg/people-carry-box.svg
new file mode 100644
index 00000000..de21f160
--- /dev/null
+++ b/images/svg/people-carry-box.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/people-group.svg b/images/svg/people-group.svg
new file mode 100644
index 00000000..565c4b0c
--- /dev/null
+++ b/images/svg/people-group.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/people-line.svg b/images/svg/people-line.svg
new file mode 100644
index 00000000..3f7a0287
--- /dev/null
+++ b/images/svg/people-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/people-pulling.svg b/images/svg/people-pulling.svg
new file mode 100644
index 00000000..7beb23be
--- /dev/null
+++ b/images/svg/people-pulling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/people-robbery.svg b/images/svg/people-robbery.svg
new file mode 100644
index 00000000..61491d1a
--- /dev/null
+++ b/images/svg/people-robbery.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/people-roof.svg b/images/svg/people-roof.svg
new file mode 100644
index 00000000..b3348e96
--- /dev/null
+++ b/images/svg/people-roof.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pepper-hot.svg b/images/svg/pepper-hot.svg
new file mode 100644
index 00000000..7abbaf8d
--- /dev/null
+++ b/images/svg/pepper-hot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/percent.svg b/images/svg/percent.svg
new file mode 100644
index 00000000..50355978
--- /dev/null
+++ b/images/svg/percent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-arrow-down-to-line.svg b/images/svg/person-arrow-down-to-line.svg
new file mode 100644
index 00000000..be15203f
--- /dev/null
+++ b/images/svg/person-arrow-down-to-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-arrow-up-from-line.svg b/images/svg/person-arrow-up-from-line.svg
new file mode 100644
index 00000000..759bc066
--- /dev/null
+++ b/images/svg/person-arrow-up-from-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-biking.svg b/images/svg/person-biking.svg
new file mode 100644
index 00000000..c358593f
--- /dev/null
+++ b/images/svg/person-biking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-booth.svg b/images/svg/person-booth.svg
new file mode 100644
index 00000000..f2854c8c
--- /dev/null
+++ b/images/svg/person-booth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-breastfeeding.svg b/images/svg/person-breastfeeding.svg
new file mode 100644
index 00000000..8c7b06ca
--- /dev/null
+++ b/images/svg/person-breastfeeding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-burst.svg b/images/svg/person-burst.svg
new file mode 100644
index 00000000..d9e7bfcd
--- /dev/null
+++ b/images/svg/person-burst.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-cane.svg b/images/svg/person-cane.svg
new file mode 100644
index 00000000..0fb1f5c6
--- /dev/null
+++ b/images/svg/person-cane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-chalkboard.svg b/images/svg/person-chalkboard.svg
new file mode 100644
index 00000000..69b801e1
--- /dev/null
+++ b/images/svg/person-chalkboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-circle-check.svg b/images/svg/person-circle-check.svg
new file mode 100644
index 00000000..c712e93a
--- /dev/null
+++ b/images/svg/person-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-circle-exclamation.svg b/images/svg/person-circle-exclamation.svg
new file mode 100644
index 00000000..23ba0f5e
--- /dev/null
+++ b/images/svg/person-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-circle-minus.svg b/images/svg/person-circle-minus.svg
new file mode 100644
index 00000000..315d4441
--- /dev/null
+++ b/images/svg/person-circle-minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-circle-plus.svg b/images/svg/person-circle-plus.svg
new file mode 100644
index 00000000..1d97c76f
--- /dev/null
+++ b/images/svg/person-circle-plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-circle-question.svg b/images/svg/person-circle-question.svg
new file mode 100644
index 00000000..32e8169a
--- /dev/null
+++ b/images/svg/person-circle-question.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-circle-xmark.svg b/images/svg/person-circle-xmark.svg
new file mode 100644
index 00000000..1e2b16ca
--- /dev/null
+++ b/images/svg/person-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-digging.svg b/images/svg/person-digging.svg
new file mode 100644
index 00000000..6959541d
--- /dev/null
+++ b/images/svg/person-digging.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-dots-from-line.svg b/images/svg/person-dots-from-line.svg
new file mode 100644
index 00000000..6458a3e2
--- /dev/null
+++ b/images/svg/person-dots-from-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-dress-burst.svg b/images/svg/person-dress-burst.svg
new file mode 100644
index 00000000..8a42edc3
--- /dev/null
+++ b/images/svg/person-dress-burst.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-dress.svg b/images/svg/person-dress.svg
new file mode 100644
index 00000000..c19f9088
--- /dev/null
+++ b/images/svg/person-dress.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-drowning.svg b/images/svg/person-drowning.svg
new file mode 100644
index 00000000..675f4234
--- /dev/null
+++ b/images/svg/person-drowning.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-falling-burst.svg b/images/svg/person-falling-burst.svg
new file mode 100644
index 00000000..6841f7bd
--- /dev/null
+++ b/images/svg/person-falling-burst.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-falling.svg b/images/svg/person-falling.svg
new file mode 100644
index 00000000..f5af7826
--- /dev/null
+++ b/images/svg/person-falling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-half-dress.svg b/images/svg/person-half-dress.svg
new file mode 100644
index 00000000..6cc2a652
--- /dev/null
+++ b/images/svg/person-half-dress.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-harassing.svg b/images/svg/person-harassing.svg
new file mode 100644
index 00000000..2d0466d5
--- /dev/null
+++ b/images/svg/person-harassing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-hiking.svg b/images/svg/person-hiking.svg
new file mode 100644
index 00000000..d9406217
--- /dev/null
+++ b/images/svg/person-hiking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-military-pointing.svg b/images/svg/person-military-pointing.svg
new file mode 100644
index 00000000..305afdac
--- /dev/null
+++ b/images/svg/person-military-pointing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-military-rifle.svg b/images/svg/person-military-rifle.svg
new file mode 100644
index 00000000..5c96e2c4
--- /dev/null
+++ b/images/svg/person-military-rifle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-military-to-person.svg b/images/svg/person-military-to-person.svg
new file mode 100644
index 00000000..e618382a
--- /dev/null
+++ b/images/svg/person-military-to-person.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-praying.svg b/images/svg/person-praying.svg
new file mode 100644
index 00000000..8e113074
--- /dev/null
+++ b/images/svg/person-praying.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-pregnant.svg b/images/svg/person-pregnant.svg
new file mode 100644
index 00000000..cabb090e
--- /dev/null
+++ b/images/svg/person-pregnant.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-rays.svg b/images/svg/person-rays.svg
new file mode 100644
index 00000000..0d5c4f81
--- /dev/null
+++ b/images/svg/person-rays.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-rifle.svg b/images/svg/person-rifle.svg
new file mode 100644
index 00000000..341dcc03
--- /dev/null
+++ b/images/svg/person-rifle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-running.svg b/images/svg/person-running.svg
new file mode 100644
index 00000000..d0d21eb9
--- /dev/null
+++ b/images/svg/person-running.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-shelter.svg b/images/svg/person-shelter.svg
new file mode 100644
index 00000000..0a3ca4df
--- /dev/null
+++ b/images/svg/person-shelter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-skating.svg b/images/svg/person-skating.svg
new file mode 100644
index 00000000..3d694d04
--- /dev/null
+++ b/images/svg/person-skating.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-skiing-nordic.svg b/images/svg/person-skiing-nordic.svg
new file mode 100644
index 00000000..06d44a0b
--- /dev/null
+++ b/images/svg/person-skiing-nordic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-skiing.svg b/images/svg/person-skiing.svg
new file mode 100644
index 00000000..38ba8555
--- /dev/null
+++ b/images/svg/person-skiing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-snowboarding.svg b/images/svg/person-snowboarding.svg
new file mode 100644
index 00000000..0572dc2c
--- /dev/null
+++ b/images/svg/person-snowboarding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-swimming.svg b/images/svg/person-swimming.svg
new file mode 100644
index 00000000..1443a968
--- /dev/null
+++ b/images/svg/person-swimming.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-through-window.svg b/images/svg/person-through-window.svg
new file mode 100644
index 00000000..6becf704
--- /dev/null
+++ b/images/svg/person-through-window.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-walking-arrow-loop-left.svg b/images/svg/person-walking-arrow-loop-left.svg
new file mode 100644
index 00000000..e122bf2a
--- /dev/null
+++ b/images/svg/person-walking-arrow-loop-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-walking-arrow-right.svg b/images/svg/person-walking-arrow-right.svg
new file mode 100644
index 00000000..34b38553
--- /dev/null
+++ b/images/svg/person-walking-arrow-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-walking-dashed-line-arrow-right.svg b/images/svg/person-walking-dashed-line-arrow-right.svg
new file mode 100644
index 00000000..63531a40
--- /dev/null
+++ b/images/svg/person-walking-dashed-line-arrow-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-walking-luggage.svg b/images/svg/person-walking-luggage.svg
new file mode 100644
index 00000000..f328e24b
--- /dev/null
+++ b/images/svg/person-walking-luggage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-walking-with-cane.svg b/images/svg/person-walking-with-cane.svg
new file mode 100644
index 00000000..62873885
--- /dev/null
+++ b/images/svg/person-walking-with-cane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person-walking.svg b/images/svg/person-walking.svg
new file mode 100644
index 00000000..8a121b19
--- /dev/null
+++ b/images/svg/person-walking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/person.svg b/images/svg/person.svg
new file mode 100644
index 00000000..9fd7f260
--- /dev/null
+++ b/images/svg/person.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/peseta-sign.svg b/images/svg/peseta-sign.svg
new file mode 100644
index 00000000..dcfd889f
--- /dev/null
+++ b/images/svg/peseta-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/peso-sign.svg b/images/svg/peso-sign.svg
new file mode 100644
index 00000000..b5a751e8
--- /dev/null
+++ b/images/svg/peso-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/phone-flip.svg b/images/svg/phone-flip.svg
new file mode 100644
index 00000000..48d05a8f
--- /dev/null
+++ b/images/svg/phone-flip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/phone-slash.svg b/images/svg/phone-slash.svg
new file mode 100644
index 00000000..b9dea46b
--- /dev/null
+++ b/images/svg/phone-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/phone-volume.svg b/images/svg/phone-volume.svg
new file mode 100644
index 00000000..8487764d
--- /dev/null
+++ b/images/svg/phone-volume.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/phone.svg b/images/svg/phone.svg
new file mode 100644
index 00000000..3249580f
--- /dev/null
+++ b/images/svg/phone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/photo-film.svg b/images/svg/photo-film.svg
new file mode 100644
index 00000000..cc440af0
--- /dev/null
+++ b/images/svg/photo-film.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/piggy-bank.svg b/images/svg/piggy-bank.svg
new file mode 100644
index 00000000..350a7469
--- /dev/null
+++ b/images/svg/piggy-bank.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pills.svg b/images/svg/pills.svg
new file mode 100644
index 00000000..a504b889
--- /dev/null
+++ b/images/svg/pills.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pizza-slice.svg b/images/svg/pizza-slice.svg
new file mode 100644
index 00000000..b0da95ae
--- /dev/null
+++ b/images/svg/pizza-slice.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/place-of-worship.svg b/images/svg/place-of-worship.svg
new file mode 100644
index 00000000..79fc7c6c
--- /dev/null
+++ b/images/svg/place-of-worship.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plane-arrival.svg b/images/svg/plane-arrival.svg
new file mode 100644
index 00000000..03c812db
--- /dev/null
+++ b/images/svg/plane-arrival.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plane-circle-check.svg b/images/svg/plane-circle-check.svg
new file mode 100644
index 00000000..8ef685cb
--- /dev/null
+++ b/images/svg/plane-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plane-circle-exclamation.svg b/images/svg/plane-circle-exclamation.svg
new file mode 100644
index 00000000..faa3b332
--- /dev/null
+++ b/images/svg/plane-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plane-circle-xmark.svg b/images/svg/plane-circle-xmark.svg
new file mode 100644
index 00000000..46e39826
--- /dev/null
+++ b/images/svg/plane-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plane-departure.svg b/images/svg/plane-departure.svg
new file mode 100644
index 00000000..ea25b1f1
--- /dev/null
+++ b/images/svg/plane-departure.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plane-lock.svg b/images/svg/plane-lock.svg
new file mode 100644
index 00000000..d162c6e7
--- /dev/null
+++ b/images/svg/plane-lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plane-slash.svg b/images/svg/plane-slash.svg
new file mode 100644
index 00000000..a15044b8
--- /dev/null
+++ b/images/svg/plane-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plane-up.svg b/images/svg/plane-up.svg
new file mode 100644
index 00000000..b05e5224
--- /dev/null
+++ b/images/svg/plane-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plane.svg b/images/svg/plane.svg
new file mode 100644
index 00000000..839351f3
--- /dev/null
+++ b/images/svg/plane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plant-wilt.svg b/images/svg/plant-wilt.svg
new file mode 100644
index 00000000..ae679fdd
--- /dev/null
+++ b/images/svg/plant-wilt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plate-wheat.svg b/images/svg/plate-wheat.svg
new file mode 100644
index 00000000..75a7010f
--- /dev/null
+++ b/images/svg/plate-wheat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/play.svg b/images/svg/play.svg
new file mode 100644
index 00000000..1ca693a4
--- /dev/null
+++ b/images/svg/play.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plug-circle-bolt.svg b/images/svg/plug-circle-bolt.svg
new file mode 100644
index 00000000..bb3f61a9
--- /dev/null
+++ b/images/svg/plug-circle-bolt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plug-circle-check.svg b/images/svg/plug-circle-check.svg
new file mode 100644
index 00000000..52c4a048
--- /dev/null
+++ b/images/svg/plug-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plug-circle-exclamation.svg b/images/svg/plug-circle-exclamation.svg
new file mode 100644
index 00000000..232d491a
--- /dev/null
+++ b/images/svg/plug-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plug-circle-minus.svg b/images/svg/plug-circle-minus.svg
new file mode 100644
index 00000000..cf3db994
--- /dev/null
+++ b/images/svg/plug-circle-minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plug-circle-plus.svg b/images/svg/plug-circle-plus.svg
new file mode 100644
index 00000000..fedd47c8
--- /dev/null
+++ b/images/svg/plug-circle-plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plug-circle-xmark.svg b/images/svg/plug-circle-xmark.svg
new file mode 100644
index 00000000..7123e47c
--- /dev/null
+++ b/images/svg/plug-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plug.svg b/images/svg/plug.svg
new file mode 100644
index 00000000..971e24e5
--- /dev/null
+++ b/images/svg/plug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plus-minus.svg b/images/svg/plus-minus.svg
new file mode 100644
index 00000000..6972c0ab
--- /dev/null
+++ b/images/svg/plus-minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/plus.svg b/images/svg/plus.svg
new file mode 100644
index 00000000..81161a49
--- /dev/null
+++ b/images/svg/plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/podcast.svg b/images/svg/podcast.svg
new file mode 100644
index 00000000..8f2064e5
--- /dev/null
+++ b/images/svg/podcast.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/poo-storm.svg b/images/svg/poo-storm.svg
new file mode 100644
index 00000000..e08cefcc
--- /dev/null
+++ b/images/svg/poo-storm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/poo.svg b/images/svg/poo.svg
new file mode 100644
index 00000000..b4b9f171
--- /dev/null
+++ b/images/svg/poo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/poop.svg b/images/svg/poop.svg
new file mode 100644
index 00000000..df772506
--- /dev/null
+++ b/images/svg/poop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/power-off.svg b/images/svg/power-off.svg
new file mode 100644
index 00000000..ec8996af
--- /dev/null
+++ b/images/svg/power-off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/prescription-bottle-medical.svg b/images/svg/prescription-bottle-medical.svg
new file mode 100644
index 00000000..9a889353
--- /dev/null
+++ b/images/svg/prescription-bottle-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/prescription-bottle.svg b/images/svg/prescription-bottle.svg
new file mode 100644
index 00000000..32a2abb8
--- /dev/null
+++ b/images/svg/prescription-bottle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/prescription.svg b/images/svg/prescription.svg
new file mode 100644
index 00000000..a9a35066
--- /dev/null
+++ b/images/svg/prescription.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/print.svg b/images/svg/print.svg
new file mode 100644
index 00000000..ea1592db
--- /dev/null
+++ b/images/svg/print.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pump-medical.svg b/images/svg/pump-medical.svg
new file mode 100644
index 00000000..e61277fb
--- /dev/null
+++ b/images/svg/pump-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/pump-soap.svg b/images/svg/pump-soap.svg
new file mode 100644
index 00000000..8f2a8254
--- /dev/null
+++ b/images/svg/pump-soap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/puzzle-piece.svg b/images/svg/puzzle-piece.svg
new file mode 100644
index 00000000..a5ac4443
--- /dev/null
+++ b/images/svg/puzzle-piece.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/q.svg b/images/svg/q.svg
new file mode 100644
index 00000000..72deffa0
--- /dev/null
+++ b/images/svg/q.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/qrcode.svg b/images/svg/qrcode.svg
new file mode 100644
index 00000000..a1af51ff
--- /dev/null
+++ b/images/svg/qrcode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/question.svg b/images/svg/question.svg
new file mode 100644
index 00000000..d5071ebf
--- /dev/null
+++ b/images/svg/question.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/quote-left.svg b/images/svg/quote-left.svg
new file mode 100644
index 00000000..eabc13d4
--- /dev/null
+++ b/images/svg/quote-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/quote-right.svg b/images/svg/quote-right.svg
new file mode 100644
index 00000000..28f5e791
--- /dev/null
+++ b/images/svg/quote-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/r.svg b/images/svg/r.svg
new file mode 100644
index 00000000..8b7a0d4c
--- /dev/null
+++ b/images/svg/r.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/radiation.svg b/images/svg/radiation.svg
new file mode 100644
index 00000000..9139f6e1
--- /dev/null
+++ b/images/svg/radiation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/radio.svg b/images/svg/radio.svg
new file mode 100644
index 00000000..24bc8f01
--- /dev/null
+++ b/images/svg/radio.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/rainbow.svg b/images/svg/rainbow.svg
new file mode 100644
index 00000000..b4a4e0df
--- /dev/null
+++ b/images/svg/rainbow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ranking-star.svg b/images/svg/ranking-star.svg
new file mode 100644
index 00000000..45b7f5fc
--- /dev/null
+++ b/images/svg/ranking-star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/receipt.svg b/images/svg/receipt.svg
new file mode 100644
index 00000000..5e6526b9
--- /dev/null
+++ b/images/svg/receipt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/record-vinyl.svg b/images/svg/record-vinyl.svg
new file mode 100644
index 00000000..1f9f2289
--- /dev/null
+++ b/images/svg/record-vinyl.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/rectangle-ad.svg b/images/svg/rectangle-ad.svg
new file mode 100644
index 00000000..0118ee36
--- /dev/null
+++ b/images/svg/rectangle-ad.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/rectangle-list.svg b/images/svg/rectangle-list.svg
new file mode 100644
index 00000000..1df9aac0
--- /dev/null
+++ b/images/svg/rectangle-list.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/rectangle-xmark.svg b/images/svg/rectangle-xmark.svg
new file mode 100644
index 00000000..ae615187
--- /dev/null
+++ b/images/svg/rectangle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/recycle.svg b/images/svg/recycle.svg
new file mode 100644
index 00000000..33b6bf83
--- /dev/null
+++ b/images/svg/recycle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/registered.svg b/images/svg/registered.svg
new file mode 100644
index 00000000..e84c46ee
--- /dev/null
+++ b/images/svg/registered.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/repeat.svg b/images/svg/repeat.svg
new file mode 100644
index 00000000..7216870b
--- /dev/null
+++ b/images/svg/repeat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/reply-all.svg b/images/svg/reply-all.svg
new file mode 100644
index 00000000..fd365835
--- /dev/null
+++ b/images/svg/reply-all.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/reply.svg b/images/svg/reply.svg
new file mode 100644
index 00000000..ec848761
--- /dev/null
+++ b/images/svg/reply.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/republican.svg b/images/svg/republican.svg
new file mode 100644
index 00000000..9d7aec31
--- /dev/null
+++ b/images/svg/republican.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/restroom.svg b/images/svg/restroom.svg
new file mode 100644
index 00000000..2bfbbb04
--- /dev/null
+++ b/images/svg/restroom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/retweet.svg b/images/svg/retweet.svg
new file mode 100644
index 00000000..73821087
--- /dev/null
+++ b/images/svg/retweet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ribbon.svg b/images/svg/ribbon.svg
new file mode 100644
index 00000000..9b305dfd
--- /dev/null
+++ b/images/svg/ribbon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/right-from-bracket.svg b/images/svg/right-from-bracket.svg
new file mode 100644
index 00000000..43de96d8
--- /dev/null
+++ b/images/svg/right-from-bracket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/right-left.svg b/images/svg/right-left.svg
new file mode 100644
index 00000000..587782a3
--- /dev/null
+++ b/images/svg/right-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/right-long.svg b/images/svg/right-long.svg
new file mode 100644
index 00000000..84cf844f
--- /dev/null
+++ b/images/svg/right-long.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/right-to-bracket.svg b/images/svg/right-to-bracket.svg
new file mode 100644
index 00000000..b4923bb4
--- /dev/null
+++ b/images/svg/right-to-bracket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ring.svg b/images/svg/ring.svg
new file mode 100644
index 00000000..24ae9510
--- /dev/null
+++ b/images/svg/ring.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/road-barrier.svg b/images/svg/road-barrier.svg
new file mode 100644
index 00000000..8d01eb8c
--- /dev/null
+++ b/images/svg/road-barrier.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/road-bridge.svg b/images/svg/road-bridge.svg
new file mode 100644
index 00000000..4f9defca
--- /dev/null
+++ b/images/svg/road-bridge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/road-circle-check.svg b/images/svg/road-circle-check.svg
new file mode 100644
index 00000000..3e41c8be
--- /dev/null
+++ b/images/svg/road-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/road-circle-exclamation.svg b/images/svg/road-circle-exclamation.svg
new file mode 100644
index 00000000..37b781c5
--- /dev/null
+++ b/images/svg/road-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/road-circle-xmark.svg b/images/svg/road-circle-xmark.svg
new file mode 100644
index 00000000..08fde91b
--- /dev/null
+++ b/images/svg/road-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/road-lock.svg b/images/svg/road-lock.svg
new file mode 100644
index 00000000..8751e262
--- /dev/null
+++ b/images/svg/road-lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/road-spikes.svg b/images/svg/road-spikes.svg
new file mode 100644
index 00000000..77572e99
--- /dev/null
+++ b/images/svg/road-spikes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/road.svg b/images/svg/road.svg
new file mode 100644
index 00000000..ea27dc53
--- /dev/null
+++ b/images/svg/road.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/robot.svg b/images/svg/robot.svg
new file mode 100644
index 00000000..37f6a1d6
--- /dev/null
+++ b/images/svg/robot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/rocket.svg b/images/svg/rocket.svg
new file mode 100644
index 00000000..9c981b9f
--- /dev/null
+++ b/images/svg/rocket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/rotate-left.svg b/images/svg/rotate-left.svg
new file mode 100644
index 00000000..d2f61b75
--- /dev/null
+++ b/images/svg/rotate-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/rotate-right.svg b/images/svg/rotate-right.svg
new file mode 100644
index 00000000..aac78360
--- /dev/null
+++ b/images/svg/rotate-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/rotate.svg b/images/svg/rotate.svg
new file mode 100644
index 00000000..4c0d5e5f
--- /dev/null
+++ b/images/svg/rotate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/route.svg b/images/svg/route.svg
new file mode 100644
index 00000000..c2d9385c
--- /dev/null
+++ b/images/svg/route.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/rss.svg b/images/svg/rss.svg
new file mode 100644
index 00000000..2617ed71
--- /dev/null
+++ b/images/svg/rss.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ruble-sign.svg b/images/svg/ruble-sign.svg
new file mode 100644
index 00000000..2ac39dca
--- /dev/null
+++ b/images/svg/ruble-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/rug.svg b/images/svg/rug.svg
new file mode 100644
index 00000000..98fb61f3
--- /dev/null
+++ b/images/svg/rug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ruler-combined.svg b/images/svg/ruler-combined.svg
new file mode 100644
index 00000000..cfa4524e
--- /dev/null
+++ b/images/svg/ruler-combined.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ruler-horizontal.svg b/images/svg/ruler-horizontal.svg
new file mode 100644
index 00000000..5f723cba
--- /dev/null
+++ b/images/svg/ruler-horizontal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ruler-vertical.svg b/images/svg/ruler-vertical.svg
new file mode 100644
index 00000000..66abee05
--- /dev/null
+++ b/images/svg/ruler-vertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ruler.svg b/images/svg/ruler.svg
new file mode 100644
index 00000000..0b7dc9c1
--- /dev/null
+++ b/images/svg/ruler.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/rupee-sign.svg b/images/svg/rupee-sign.svg
new file mode 100644
index 00000000..a63fcb9a
--- /dev/null
+++ b/images/svg/rupee-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/rupiah-sign.svg b/images/svg/rupiah-sign.svg
new file mode 100644
index 00000000..976196ed
--- /dev/null
+++ b/images/svg/rupiah-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/s.svg b/images/svg/s.svg
new file mode 100644
index 00000000..00d98cb4
--- /dev/null
+++ b/images/svg/s.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sack-dollar.svg b/images/svg/sack-dollar.svg
new file mode 100644
index 00000000..d98d7eeb
--- /dev/null
+++ b/images/svg/sack-dollar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sack-xmark.svg b/images/svg/sack-xmark.svg
new file mode 100644
index 00000000..51b951c5
--- /dev/null
+++ b/images/svg/sack-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sailboat.svg b/images/svg/sailboat.svg
new file mode 100644
index 00000000..ac90cbe0
--- /dev/null
+++ b/images/svg/sailboat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/satellite-dish.svg b/images/svg/satellite-dish.svg
new file mode 100644
index 00000000..a2458680
--- /dev/null
+++ b/images/svg/satellite-dish.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/satellite.svg b/images/svg/satellite.svg
new file mode 100644
index 00000000..f0b6a53f
--- /dev/null
+++ b/images/svg/satellite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/scale-balanced.svg b/images/svg/scale-balanced.svg
new file mode 100644
index 00000000..4862cbbe
--- /dev/null
+++ b/images/svg/scale-balanced.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/scale-unbalanced-flip.svg b/images/svg/scale-unbalanced-flip.svg
new file mode 100644
index 00000000..eb17f14c
--- /dev/null
+++ b/images/svg/scale-unbalanced-flip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/scale-unbalanced.svg b/images/svg/scale-unbalanced.svg
new file mode 100644
index 00000000..217d2de4
--- /dev/null
+++ b/images/svg/scale-unbalanced.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/school-circle-check.svg b/images/svg/school-circle-check.svg
new file mode 100644
index 00000000..03253e1a
--- /dev/null
+++ b/images/svg/school-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/school-circle-exclamation.svg b/images/svg/school-circle-exclamation.svg
new file mode 100644
index 00000000..5e370645
--- /dev/null
+++ b/images/svg/school-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/school-circle-xmark.svg b/images/svg/school-circle-xmark.svg
new file mode 100644
index 00000000..b9f2d238
--- /dev/null
+++ b/images/svg/school-circle-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/school-flag.svg b/images/svg/school-flag.svg
new file mode 100644
index 00000000..975c037c
--- /dev/null
+++ b/images/svg/school-flag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/school-lock.svg b/images/svg/school-lock.svg
new file mode 100644
index 00000000..e525a85c
--- /dev/null
+++ b/images/svg/school-lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/school.svg b/images/svg/school.svg
new file mode 100644
index 00000000..25f576ae
--- /dev/null
+++ b/images/svg/school.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/scissors.svg b/images/svg/scissors.svg
new file mode 100644
index 00000000..612d9b65
--- /dev/null
+++ b/images/svg/scissors.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/screwdriver-wrench.svg b/images/svg/screwdriver-wrench.svg
new file mode 100644
index 00000000..3a4ab5e6
--- /dev/null
+++ b/images/svg/screwdriver-wrench.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/screwdriver.svg b/images/svg/screwdriver.svg
new file mode 100644
index 00000000..8287697a
--- /dev/null
+++ b/images/svg/screwdriver.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/scroll-torah.svg b/images/svg/scroll-torah.svg
new file mode 100644
index 00000000..d34d5e60
--- /dev/null
+++ b/images/svg/scroll-torah.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/scroll.svg b/images/svg/scroll.svg
new file mode 100644
index 00000000..d9cc3df6
--- /dev/null
+++ b/images/svg/scroll.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sd-card.svg b/images/svg/sd-card.svg
new file mode 100644
index 00000000..778ad783
--- /dev/null
+++ b/images/svg/sd-card.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/section.svg b/images/svg/section.svg
new file mode 100644
index 00000000..91f76a81
--- /dev/null
+++ b/images/svg/section.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/seedling.svg b/images/svg/seedling.svg
new file mode 100644
index 00000000..e4c21f14
--- /dev/null
+++ b/images/svg/seedling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/server.svg b/images/svg/server.svg
new file mode 100644
index 00000000..65412c83
--- /dev/null
+++ b/images/svg/server.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shapes.svg b/images/svg/shapes.svg
new file mode 100644
index 00000000..859a7e3b
--- /dev/null
+++ b/images/svg/shapes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/share-from-square.svg b/images/svg/share-from-square.svg
new file mode 100644
index 00000000..d6a06f9c
--- /dev/null
+++ b/images/svg/share-from-square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/share-nodes.svg b/images/svg/share-nodes.svg
new file mode 100644
index 00000000..e98ce353
--- /dev/null
+++ b/images/svg/share-nodes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/share.svg b/images/svg/share.svg
new file mode 100644
index 00000000..fb608d5d
--- /dev/null
+++ b/images/svg/share.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sheet-plastic.svg b/images/svg/sheet-plastic.svg
new file mode 100644
index 00000000..95c20018
--- /dev/null
+++ b/images/svg/sheet-plastic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shekel-sign.svg b/images/svg/shekel-sign.svg
new file mode 100644
index 00000000..63b7bcbe
--- /dev/null
+++ b/images/svg/shekel-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shield-cat.svg b/images/svg/shield-cat.svg
new file mode 100644
index 00000000..0138874b
--- /dev/null
+++ b/images/svg/shield-cat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shield-dog.svg b/images/svg/shield-dog.svg
new file mode 100644
index 00000000..ac2848e7
--- /dev/null
+++ b/images/svg/shield-dog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shield-halved.svg b/images/svg/shield-halved.svg
new file mode 100644
index 00000000..6aa5edb9
--- /dev/null
+++ b/images/svg/shield-halved.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shield-heart.svg b/images/svg/shield-heart.svg
new file mode 100644
index 00000000..2296b44e
--- /dev/null
+++ b/images/svg/shield-heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shield-virus.svg b/images/svg/shield-virus.svg
new file mode 100644
index 00000000..3d84d342
--- /dev/null
+++ b/images/svg/shield-virus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shield.svg b/images/svg/shield.svg
new file mode 100644
index 00000000..98f34d48
--- /dev/null
+++ b/images/svg/shield.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ship.svg b/images/svg/ship.svg
new file mode 100644
index 00000000..836efe95
--- /dev/null
+++ b/images/svg/ship.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shirt.svg b/images/svg/shirt.svg
new file mode 100644
index 00000000..602e336c
--- /dev/null
+++ b/images/svg/shirt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shoe-prints.svg b/images/svg/shoe-prints.svg
new file mode 100644
index 00000000..41b6f142
--- /dev/null
+++ b/images/svg/shoe-prints.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shop-lock.svg b/images/svg/shop-lock.svg
new file mode 100644
index 00000000..69ef09da
--- /dev/null
+++ b/images/svg/shop-lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shop-slash.svg b/images/svg/shop-slash.svg
new file mode 100644
index 00000000..70b4efec
--- /dev/null
+++ b/images/svg/shop-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shop.svg b/images/svg/shop.svg
new file mode 100644
index 00000000..c5abc6c4
--- /dev/null
+++ b/images/svg/shop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shower.svg b/images/svg/shower.svg
new file mode 100644
index 00000000..5aea8d15
--- /dev/null
+++ b/images/svg/shower.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shrimp.svg b/images/svg/shrimp.svg
new file mode 100644
index 00000000..898145d4
--- /dev/null
+++ b/images/svg/shrimp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shuffle.svg b/images/svg/shuffle.svg
new file mode 100644
index 00000000..24fb3d13
--- /dev/null
+++ b/images/svg/shuffle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/shuttle-space.svg b/images/svg/shuttle-space.svg
new file mode 100644
index 00000000..5ca99415
--- /dev/null
+++ b/images/svg/shuttle-space.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sign-hanging.svg b/images/svg/sign-hanging.svg
new file mode 100644
index 00000000..f2098929
--- /dev/null
+++ b/images/svg/sign-hanging.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/signal.svg b/images/svg/signal.svg
new file mode 100644
index 00000000..38816350
--- /dev/null
+++ b/images/svg/signal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/signature.svg b/images/svg/signature.svg
new file mode 100644
index 00000000..83257a16
--- /dev/null
+++ b/images/svg/signature.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/signs-post.svg b/images/svg/signs-post.svg
new file mode 100644
index 00000000..ef831d5f
--- /dev/null
+++ b/images/svg/signs-post.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sim-card.svg b/images/svg/sim-card.svg
new file mode 100644
index 00000000..3e02c63d
--- /dev/null
+++ b/images/svg/sim-card.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sink.svg b/images/svg/sink.svg
new file mode 100644
index 00000000..87a47fb1
--- /dev/null
+++ b/images/svg/sink.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sitemap.svg b/images/svg/sitemap.svg
new file mode 100644
index 00000000..a8dad10f
--- /dev/null
+++ b/images/svg/sitemap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/skull-crossbones.svg b/images/svg/skull-crossbones.svg
new file mode 100644
index 00000000..36f09467
--- /dev/null
+++ b/images/svg/skull-crossbones.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/skull.svg b/images/svg/skull.svg
new file mode 100644
index 00000000..3451f377
--- /dev/null
+++ b/images/svg/skull.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/slash.svg b/images/svg/slash.svg
new file mode 100644
index 00000000..a0d870d0
--- /dev/null
+++ b/images/svg/slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sleigh.svg b/images/svg/sleigh.svg
new file mode 100644
index 00000000..57103d58
--- /dev/null
+++ b/images/svg/sleigh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sliders.svg b/images/svg/sliders.svg
new file mode 100644
index 00000000..8278dc64
--- /dev/null
+++ b/images/svg/sliders.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/smog.svg b/images/svg/smog.svg
new file mode 100644
index 00000000..d5f6dcdf
--- /dev/null
+++ b/images/svg/smog.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/smoking.svg b/images/svg/smoking.svg
new file mode 100644
index 00000000..44fe7262
--- /dev/null
+++ b/images/svg/smoking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/snowflake.svg b/images/svg/snowflake.svg
new file mode 100644
index 00000000..367ebf34
--- /dev/null
+++ b/images/svg/snowflake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/snowman.svg b/images/svg/snowman.svg
new file mode 100644
index 00000000..9b0818a7
--- /dev/null
+++ b/images/svg/snowman.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/snowplow.svg b/images/svg/snowplow.svg
new file mode 100644
index 00000000..d05e58cf
--- /dev/null
+++ b/images/svg/snowplow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/soap.svg b/images/svg/soap.svg
new file mode 100644
index 00000000..71cb2fac
--- /dev/null
+++ b/images/svg/soap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/socks.svg b/images/svg/socks.svg
new file mode 100644
index 00000000..66878507
--- /dev/null
+++ b/images/svg/socks.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/solar-panel.svg b/images/svg/solar-panel.svg
new file mode 100644
index 00000000..16859f5d
--- /dev/null
+++ b/images/svg/solar-panel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sort-down.svg b/images/svg/sort-down.svg
new file mode 100644
index 00000000..0b637b9e
--- /dev/null
+++ b/images/svg/sort-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sort-up.svg b/images/svg/sort-up.svg
new file mode 100644
index 00000000..434e5873
--- /dev/null
+++ b/images/svg/sort-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sort.svg b/images/svg/sort.svg
new file mode 100644
index 00000000..e772a0ed
--- /dev/null
+++ b/images/svg/sort.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/spa.svg b/images/svg/spa.svg
new file mode 100644
index 00000000..f5d1213e
--- /dev/null
+++ b/images/svg/spa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/spaghetti-monster-flying.svg b/images/svg/spaghetti-monster-flying.svg
new file mode 100644
index 00000000..34ed4915
--- /dev/null
+++ b/images/svg/spaghetti-monster-flying.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/spell-check.svg b/images/svg/spell-check.svg
new file mode 100644
index 00000000..1d3bb60c
--- /dev/null
+++ b/images/svg/spell-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/spider.svg b/images/svg/spider.svg
new file mode 100644
index 00000000..2ae767a8
--- /dev/null
+++ b/images/svg/spider.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/spinner.svg b/images/svg/spinner.svg
new file mode 100644
index 00000000..1f56c8a4
--- /dev/null
+++ b/images/svg/spinner.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/splotch.svg b/images/svg/splotch.svg
new file mode 100644
index 00000000..ccd44ed1
--- /dev/null
+++ b/images/svg/splotch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/spoon.svg b/images/svg/spoon.svg
new file mode 100644
index 00000000..029d6322
--- /dev/null
+++ b/images/svg/spoon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/spray-can-sparkles.svg b/images/svg/spray-can-sparkles.svg
new file mode 100644
index 00000000..541f592b
--- /dev/null
+++ b/images/svg/spray-can-sparkles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/spray-can.svg b/images/svg/spray-can.svg
new file mode 100644
index 00000000..92d22dbe
--- /dev/null
+++ b/images/svg/spray-can.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-arrow-up-right.svg b/images/svg/square-arrow-up-right.svg
new file mode 100644
index 00000000..8515eb2c
--- /dev/null
+++ b/images/svg/square-arrow-up-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-caret-down.svg b/images/svg/square-caret-down.svg
new file mode 100644
index 00000000..50d0ac62
--- /dev/null
+++ b/images/svg/square-caret-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-caret-left.svg b/images/svg/square-caret-left.svg
new file mode 100644
index 00000000..4e02b96b
--- /dev/null
+++ b/images/svg/square-caret-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-caret-right.svg b/images/svg/square-caret-right.svg
new file mode 100644
index 00000000..f34cccf0
--- /dev/null
+++ b/images/svg/square-caret-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-caret-up.svg b/images/svg/square-caret-up.svg
new file mode 100644
index 00000000..d01085c8
--- /dev/null
+++ b/images/svg/square-caret-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-check.svg b/images/svg/square-check.svg
new file mode 100644
index 00000000..f4ccd268
--- /dev/null
+++ b/images/svg/square-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-envelope.svg b/images/svg/square-envelope.svg
new file mode 100644
index 00000000..7520e06a
--- /dev/null
+++ b/images/svg/square-envelope.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-full.svg b/images/svg/square-full.svg
new file mode 100644
index 00000000..23ff9998
--- /dev/null
+++ b/images/svg/square-full.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-h.svg b/images/svg/square-h.svg
new file mode 100644
index 00000000..a272fa0e
--- /dev/null
+++ b/images/svg/square-h.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-minus.svg b/images/svg/square-minus.svg
new file mode 100644
index 00000000..6c2af9d6
--- /dev/null
+++ b/images/svg/square-minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-nfi.svg b/images/svg/square-nfi.svg
new file mode 100644
index 00000000..3cafc2a2
--- /dev/null
+++ b/images/svg/square-nfi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-parking.svg b/images/svg/square-parking.svg
new file mode 100644
index 00000000..8ecccc72
--- /dev/null
+++ b/images/svg/square-parking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-pen.svg b/images/svg/square-pen.svg
new file mode 100644
index 00000000..c9422ea2
--- /dev/null
+++ b/images/svg/square-pen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-person-confined.svg b/images/svg/square-person-confined.svg
new file mode 100644
index 00000000..3e6c594d
--- /dev/null
+++ b/images/svg/square-person-confined.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-phone-flip.svg b/images/svg/square-phone-flip.svg
new file mode 100644
index 00000000..1c82de03
--- /dev/null
+++ b/images/svg/square-phone-flip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-phone.svg b/images/svg/square-phone.svg
new file mode 100644
index 00000000..e1e79620
--- /dev/null
+++ b/images/svg/square-phone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-plus.svg b/images/svg/square-plus.svg
new file mode 100644
index 00000000..9442f9e6
--- /dev/null
+++ b/images/svg/square-plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-poll-horizontal.svg b/images/svg/square-poll-horizontal.svg
new file mode 100644
index 00000000..1ea204b2
--- /dev/null
+++ b/images/svg/square-poll-horizontal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-poll-vertical.svg b/images/svg/square-poll-vertical.svg
new file mode 100644
index 00000000..ca260b23
--- /dev/null
+++ b/images/svg/square-poll-vertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-root-variable.svg b/images/svg/square-root-variable.svg
new file mode 100644
index 00000000..2e072206
--- /dev/null
+++ b/images/svg/square-root-variable.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-rss.svg b/images/svg/square-rss.svg
new file mode 100644
index 00000000..f05b5431
--- /dev/null
+++ b/images/svg/square-rss.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-share-nodes.svg b/images/svg/square-share-nodes.svg
new file mode 100644
index 00000000..4fc0532c
--- /dev/null
+++ b/images/svg/square-share-nodes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-up-right.svg b/images/svg/square-up-right.svg
new file mode 100644
index 00000000..98926fa8
--- /dev/null
+++ b/images/svg/square-up-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-virus.svg b/images/svg/square-virus.svg
new file mode 100644
index 00000000..7c7078b8
--- /dev/null
+++ b/images/svg/square-virus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square-xmark.svg b/images/svg/square-xmark.svg
new file mode 100644
index 00000000..f23ccf8b
--- /dev/null
+++ b/images/svg/square-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/square.svg b/images/svg/square.svg
new file mode 100644
index 00000000..b62ce952
--- /dev/null
+++ b/images/svg/square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/staff-snake.svg b/images/svg/staff-snake.svg
new file mode 100644
index 00000000..242622bc
--- /dev/null
+++ b/images/svg/staff-snake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/stairs.svg b/images/svg/stairs.svg
new file mode 100644
index 00000000..e84d36dd
--- /dev/null
+++ b/images/svg/stairs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/stamp.svg b/images/svg/stamp.svg
new file mode 100644
index 00000000..a1a103bd
--- /dev/null
+++ b/images/svg/stamp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/stapler.svg b/images/svg/stapler.svg
new file mode 100644
index 00000000..7575c8ed
--- /dev/null
+++ b/images/svg/stapler.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/star-and-crescent.svg b/images/svg/star-and-crescent.svg
new file mode 100644
index 00000000..df339e21
--- /dev/null
+++ b/images/svg/star-and-crescent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/star-half-stroke.svg b/images/svg/star-half-stroke.svg
new file mode 100644
index 00000000..005bf320
--- /dev/null
+++ b/images/svg/star-half-stroke.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/star-half.svg b/images/svg/star-half.svg
new file mode 100644
index 00000000..28352eff
--- /dev/null
+++ b/images/svg/star-half.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/star-of-david.svg b/images/svg/star-of-david.svg
new file mode 100644
index 00000000..68f0cb7c
--- /dev/null
+++ b/images/svg/star-of-david.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/star-of-life.svg b/images/svg/star-of-life.svg
new file mode 100644
index 00000000..18a94096
--- /dev/null
+++ b/images/svg/star-of-life.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/star.svg b/images/svg/star.svg
new file mode 100644
index 00000000..bafadf91
--- /dev/null
+++ b/images/svg/star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sterling-sign.svg b/images/svg/sterling-sign.svg
new file mode 100644
index 00000000..cb14730a
--- /dev/null
+++ b/images/svg/sterling-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/stethoscope.svg b/images/svg/stethoscope.svg
new file mode 100644
index 00000000..e6858dfa
--- /dev/null
+++ b/images/svg/stethoscope.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/stop.svg b/images/svg/stop.svg
new file mode 100644
index 00000000..65f1c308
--- /dev/null
+++ b/images/svg/stop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/stopwatch-20.svg b/images/svg/stopwatch-20.svg
new file mode 100644
index 00000000..085fbb01
--- /dev/null
+++ b/images/svg/stopwatch-20.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/stopwatch.svg b/images/svg/stopwatch.svg
new file mode 100644
index 00000000..a8e6d236
--- /dev/null
+++ b/images/svg/stopwatch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/store-slash.svg b/images/svg/store-slash.svg
new file mode 100644
index 00000000..666f6e95
--- /dev/null
+++ b/images/svg/store-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/store.svg b/images/svg/store.svg
new file mode 100644
index 00000000..afabde3d
--- /dev/null
+++ b/images/svg/store.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/street-view.svg b/images/svg/street-view.svg
new file mode 100644
index 00000000..588f1a77
--- /dev/null
+++ b/images/svg/street-view.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/strikethrough.svg b/images/svg/strikethrough.svg
new file mode 100644
index 00000000..a904eb95
--- /dev/null
+++ b/images/svg/strikethrough.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/stroopwafel.svg b/images/svg/stroopwafel.svg
new file mode 100644
index 00000000..ea451612
--- /dev/null
+++ b/images/svg/stroopwafel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/subscript.svg b/images/svg/subscript.svg
new file mode 100644
index 00000000..794eb222
--- /dev/null
+++ b/images/svg/subscript.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/suitcase-medical.svg b/images/svg/suitcase-medical.svg
new file mode 100644
index 00000000..008780de
--- /dev/null
+++ b/images/svg/suitcase-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/suitcase-rolling.svg b/images/svg/suitcase-rolling.svg
new file mode 100644
index 00000000..c5751e30
--- /dev/null
+++ b/images/svg/suitcase-rolling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/suitcase.svg b/images/svg/suitcase.svg
new file mode 100644
index 00000000..73bed4d4
--- /dev/null
+++ b/images/svg/suitcase.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sun-plant-wilt.svg b/images/svg/sun-plant-wilt.svg
new file mode 100644
index 00000000..1cbfe14e
--- /dev/null
+++ b/images/svg/sun-plant-wilt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/sun.svg b/images/svg/sun.svg
new file mode 100644
index 00000000..460c7ef7
--- /dev/null
+++ b/images/svg/sun.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/superscript.svg b/images/svg/superscript.svg
new file mode 100644
index 00000000..db2faa24
--- /dev/null
+++ b/images/svg/superscript.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/swatchbook.svg b/images/svg/swatchbook.svg
new file mode 100644
index 00000000..6146c98d
--- /dev/null
+++ b/images/svg/swatchbook.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/synagogue.svg b/images/svg/synagogue.svg
new file mode 100644
index 00000000..646fc205
--- /dev/null
+++ b/images/svg/synagogue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/syringe.svg b/images/svg/syringe.svg
new file mode 100644
index 00000000..4a6c4dac
--- /dev/null
+++ b/images/svg/syringe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/t.svg b/images/svg/t.svg
new file mode 100644
index 00000000..c1f3f0fd
--- /dev/null
+++ b/images/svg/t.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/table-cells-large.svg b/images/svg/table-cells-large.svg
new file mode 100644
index 00000000..82856664
--- /dev/null
+++ b/images/svg/table-cells-large.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/table-cells.svg b/images/svg/table-cells.svg
new file mode 100644
index 00000000..490dfea8
--- /dev/null
+++ b/images/svg/table-cells.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/table-columns.svg b/images/svg/table-columns.svg
new file mode 100644
index 00000000..21d0690e
--- /dev/null
+++ b/images/svg/table-columns.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/table-list.svg b/images/svg/table-list.svg
new file mode 100644
index 00000000..a86841d4
--- /dev/null
+++ b/images/svg/table-list.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/table-tennis-paddle-ball.svg b/images/svg/table-tennis-paddle-ball.svg
new file mode 100644
index 00000000..a62fef2a
--- /dev/null
+++ b/images/svg/table-tennis-paddle-ball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/table.svg b/images/svg/table.svg
new file mode 100644
index 00000000..51fee564
--- /dev/null
+++ b/images/svg/table.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tablet-button.svg b/images/svg/tablet-button.svg
new file mode 100644
index 00000000..39bd977d
--- /dev/null
+++ b/images/svg/tablet-button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tablet-screen-button.svg b/images/svg/tablet-screen-button.svg
new file mode 100644
index 00000000..fce563c4
--- /dev/null
+++ b/images/svg/tablet-screen-button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tablet.svg b/images/svg/tablet.svg
new file mode 100644
index 00000000..f416a9a8
--- /dev/null
+++ b/images/svg/tablet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tablets.svg b/images/svg/tablets.svg
new file mode 100644
index 00000000..4d841c6e
--- /dev/null
+++ b/images/svg/tablets.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tachograph-digital.svg b/images/svg/tachograph-digital.svg
new file mode 100644
index 00000000..819119d5
--- /dev/null
+++ b/images/svg/tachograph-digital.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tag.svg b/images/svg/tag.svg
new file mode 100644
index 00000000..60a015b3
--- /dev/null
+++ b/images/svg/tag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tags.svg b/images/svg/tags.svg
new file mode 100644
index 00000000..011cbd9e
--- /dev/null
+++ b/images/svg/tags.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tape.svg b/images/svg/tape.svg
new file mode 100644
index 00000000..db3855ef
--- /dev/null
+++ b/images/svg/tape.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tarp-droplet.svg b/images/svg/tarp-droplet.svg
new file mode 100644
index 00000000..b456249f
--- /dev/null
+++ b/images/svg/tarp-droplet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tarp.svg b/images/svg/tarp.svg
new file mode 100644
index 00000000..dafe587d
--- /dev/null
+++ b/images/svg/tarp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/taxi.svg b/images/svg/taxi.svg
new file mode 100644
index 00000000..ff29f88a
--- /dev/null
+++ b/images/svg/taxi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/teeth-open.svg b/images/svg/teeth-open.svg
new file mode 100644
index 00000000..eff515dd
--- /dev/null
+++ b/images/svg/teeth-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/teeth.svg b/images/svg/teeth.svg
new file mode 100644
index 00000000..43891211
--- /dev/null
+++ b/images/svg/teeth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/temperature-arrow-down.svg b/images/svg/temperature-arrow-down.svg
new file mode 100644
index 00000000..79e71463
--- /dev/null
+++ b/images/svg/temperature-arrow-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/temperature-arrow-up.svg b/images/svg/temperature-arrow-up.svg
new file mode 100644
index 00000000..39451e0b
--- /dev/null
+++ b/images/svg/temperature-arrow-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/temperature-empty.svg b/images/svg/temperature-empty.svg
new file mode 100644
index 00000000..cd7d8323
--- /dev/null
+++ b/images/svg/temperature-empty.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/temperature-full.svg b/images/svg/temperature-full.svg
new file mode 100644
index 00000000..a3c8fdfe
--- /dev/null
+++ b/images/svg/temperature-full.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/temperature-half.svg b/images/svg/temperature-half.svg
new file mode 100644
index 00000000..83f8c65e
--- /dev/null
+++ b/images/svg/temperature-half.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/temperature-high.svg b/images/svg/temperature-high.svg
new file mode 100644
index 00000000..f0e3efff
--- /dev/null
+++ b/images/svg/temperature-high.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/temperature-low.svg b/images/svg/temperature-low.svg
new file mode 100644
index 00000000..4fa21e3a
--- /dev/null
+++ b/images/svg/temperature-low.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/temperature-quarter.svg b/images/svg/temperature-quarter.svg
new file mode 100644
index 00000000..9e1a0450
--- /dev/null
+++ b/images/svg/temperature-quarter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/temperature-three-quarters.svg b/images/svg/temperature-three-quarters.svg
new file mode 100644
index 00000000..0e6d6afa
--- /dev/null
+++ b/images/svg/temperature-three-quarters.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tenge-sign.svg b/images/svg/tenge-sign.svg
new file mode 100644
index 00000000..5b6eed1b
--- /dev/null
+++ b/images/svg/tenge-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tent-arrow-down-to-line.svg b/images/svg/tent-arrow-down-to-line.svg
new file mode 100644
index 00000000..4e7f5d89
--- /dev/null
+++ b/images/svg/tent-arrow-down-to-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tent-arrow-left-right.svg b/images/svg/tent-arrow-left-right.svg
new file mode 100644
index 00000000..349f9f00
--- /dev/null
+++ b/images/svg/tent-arrow-left-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tent-arrow-turn-left.svg b/images/svg/tent-arrow-turn-left.svg
new file mode 100644
index 00000000..6a08d67f
--- /dev/null
+++ b/images/svg/tent-arrow-turn-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tent-arrows-down.svg b/images/svg/tent-arrows-down.svg
new file mode 100644
index 00000000..d91047f1
--- /dev/null
+++ b/images/svg/tent-arrows-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tent.svg b/images/svg/tent.svg
new file mode 100644
index 00000000..bc937042
--- /dev/null
+++ b/images/svg/tent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tents.svg b/images/svg/tents.svg
new file mode 100644
index 00000000..3d6c546b
--- /dev/null
+++ b/images/svg/tents.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/terminal.svg b/images/svg/terminal.svg
new file mode 100644
index 00000000..24f9ef15
--- /dev/null
+++ b/images/svg/terminal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/text-height.svg b/images/svg/text-height.svg
new file mode 100644
index 00000000..0eb4e808
--- /dev/null
+++ b/images/svg/text-height.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/text-slash.svg b/images/svg/text-slash.svg
new file mode 100644
index 00000000..daa75bfd
--- /dev/null
+++ b/images/svg/text-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/text-width.svg b/images/svg/text-width.svg
new file mode 100644
index 00000000..616b4f44
--- /dev/null
+++ b/images/svg/text-width.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/thermometer.svg b/images/svg/thermometer.svg
new file mode 100644
index 00000000..de02d9ac
--- /dev/null
+++ b/images/svg/thermometer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/thumbs-down.svg b/images/svg/thumbs-down.svg
new file mode 100644
index 00000000..8b501bc7
--- /dev/null
+++ b/images/svg/thumbs-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/thumbs-up.svg b/images/svg/thumbs-up.svg
new file mode 100644
index 00000000..50123508
--- /dev/null
+++ b/images/svg/thumbs-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/thumbtack.svg b/images/svg/thumbtack.svg
new file mode 100644
index 00000000..b21c9f8a
--- /dev/null
+++ b/images/svg/thumbtack.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ticket-simple.svg b/images/svg/ticket-simple.svg
new file mode 100644
index 00000000..6ec3741f
--- /dev/null
+++ b/images/svg/ticket-simple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/ticket.svg b/images/svg/ticket.svg
new file mode 100644
index 00000000..e7e60fcf
--- /dev/null
+++ b/images/svg/ticket.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/timeline.svg b/images/svg/timeline.svg
new file mode 100644
index 00000000..84899a7e
--- /dev/null
+++ b/images/svg/timeline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/toggle-off.svg b/images/svg/toggle-off.svg
new file mode 100644
index 00000000..cea3da1c
--- /dev/null
+++ b/images/svg/toggle-off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/toggle-on.svg b/images/svg/toggle-on.svg
new file mode 100644
index 00000000..52eaa85a
--- /dev/null
+++ b/images/svg/toggle-on.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/toilet-paper-slash.svg b/images/svg/toilet-paper-slash.svg
new file mode 100644
index 00000000..7cf6b8df
--- /dev/null
+++ b/images/svg/toilet-paper-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/toilet-paper.svg b/images/svg/toilet-paper.svg
new file mode 100644
index 00000000..527064a4
--- /dev/null
+++ b/images/svg/toilet-paper.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/toilet-portable.svg b/images/svg/toilet-portable.svg
new file mode 100644
index 00000000..3c303877
--- /dev/null
+++ b/images/svg/toilet-portable.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/toilet.svg b/images/svg/toilet.svg
new file mode 100644
index 00000000..30d34fc5
--- /dev/null
+++ b/images/svg/toilet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/toilets-portable.svg b/images/svg/toilets-portable.svg
new file mode 100644
index 00000000..89a75b2d
--- /dev/null
+++ b/images/svg/toilets-portable.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/toolbox.svg b/images/svg/toolbox.svg
new file mode 100644
index 00000000..228b4ecb
--- /dev/null
+++ b/images/svg/toolbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tooth.svg b/images/svg/tooth.svg
new file mode 100644
index 00000000..a4b430c1
--- /dev/null
+++ b/images/svg/tooth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/torii-gate.svg b/images/svg/torii-gate.svg
new file mode 100644
index 00000000..86de23b4
--- /dev/null
+++ b/images/svg/torii-gate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tornado.svg b/images/svg/tornado.svg
new file mode 100644
index 00000000..4535edbf
--- /dev/null
+++ b/images/svg/tornado.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tower-broadcast.svg b/images/svg/tower-broadcast.svg
new file mode 100644
index 00000000..cd794cae
--- /dev/null
+++ b/images/svg/tower-broadcast.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tower-cell.svg b/images/svg/tower-cell.svg
new file mode 100644
index 00000000..6399e9b9
--- /dev/null
+++ b/images/svg/tower-cell.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tower-observation.svg b/images/svg/tower-observation.svg
new file mode 100644
index 00000000..a2beda23
--- /dev/null
+++ b/images/svg/tower-observation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tractor.svg b/images/svg/tractor.svg
new file mode 100644
index 00000000..b6021163
--- /dev/null
+++ b/images/svg/tractor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/trademark.svg b/images/svg/trademark.svg
new file mode 100644
index 00000000..ab53efe1
--- /dev/null
+++ b/images/svg/trademark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/traffic-light.svg b/images/svg/traffic-light.svg
new file mode 100644
index 00000000..8a39eaf7
--- /dev/null
+++ b/images/svg/traffic-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/trailer.svg b/images/svg/trailer.svg
new file mode 100644
index 00000000..f038042a
--- /dev/null
+++ b/images/svg/trailer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/train-subway.svg b/images/svg/train-subway.svg
new file mode 100644
index 00000000..04302078
--- /dev/null
+++ b/images/svg/train-subway.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/train-tram.svg b/images/svg/train-tram.svg
new file mode 100644
index 00000000..43b76982
--- /dev/null
+++ b/images/svg/train-tram.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/train.svg b/images/svg/train.svg
new file mode 100644
index 00000000..7f759a00
--- /dev/null
+++ b/images/svg/train.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/transgender.svg b/images/svg/transgender.svg
new file mode 100644
index 00000000..2506e94f
--- /dev/null
+++ b/images/svg/transgender.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/trash-arrow-up.svg b/images/svg/trash-arrow-up.svg
new file mode 100644
index 00000000..73699026
--- /dev/null
+++ b/images/svg/trash-arrow-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/trash-can-arrow-up.svg b/images/svg/trash-can-arrow-up.svg
new file mode 100644
index 00000000..a636fb78
--- /dev/null
+++ b/images/svg/trash-can-arrow-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/trash-can.svg b/images/svg/trash-can.svg
new file mode 100644
index 00000000..aca58857
--- /dev/null
+++ b/images/svg/trash-can.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/trash.svg b/images/svg/trash.svg
new file mode 100644
index 00000000..a46a4ac9
--- /dev/null
+++ b/images/svg/trash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tree-city.svg b/images/svg/tree-city.svg
new file mode 100644
index 00000000..ab2f5ae5
--- /dev/null
+++ b/images/svg/tree-city.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tree.svg b/images/svg/tree.svg
new file mode 100644
index 00000000..e9b393d8
--- /dev/null
+++ b/images/svg/tree.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/triangle-exclamation.svg b/images/svg/triangle-exclamation.svg
new file mode 100644
index 00000000..cdebe7c1
--- /dev/null
+++ b/images/svg/triangle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/trophy.svg b/images/svg/trophy.svg
new file mode 100644
index 00000000..5148017b
--- /dev/null
+++ b/images/svg/trophy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/trowel-bricks.svg b/images/svg/trowel-bricks.svg
new file mode 100644
index 00000000..bc0fc8c0
--- /dev/null
+++ b/images/svg/trowel-bricks.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/trowel.svg b/images/svg/trowel.svg
new file mode 100644
index 00000000..20e49747
--- /dev/null
+++ b/images/svg/trowel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck-arrow-right.svg b/images/svg/truck-arrow-right.svg
new file mode 100644
index 00000000..f52a7b98
--- /dev/null
+++ b/images/svg/truck-arrow-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck-droplet.svg b/images/svg/truck-droplet.svg
new file mode 100644
index 00000000..77d9dce5
--- /dev/null
+++ b/images/svg/truck-droplet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck-fast.svg b/images/svg/truck-fast.svg
new file mode 100644
index 00000000..aa3ce706
--- /dev/null
+++ b/images/svg/truck-fast.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck-field-un.svg b/images/svg/truck-field-un.svg
new file mode 100644
index 00000000..e081dc0c
--- /dev/null
+++ b/images/svg/truck-field-un.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck-field.svg b/images/svg/truck-field.svg
new file mode 100644
index 00000000..a0a372fe
--- /dev/null
+++ b/images/svg/truck-field.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck-front.svg b/images/svg/truck-front.svg
new file mode 100644
index 00000000..b8a60f25
--- /dev/null
+++ b/images/svg/truck-front.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck-medical.svg b/images/svg/truck-medical.svg
new file mode 100644
index 00000000..d552ae3e
--- /dev/null
+++ b/images/svg/truck-medical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck-monster.svg b/images/svg/truck-monster.svg
new file mode 100644
index 00000000..c8d90a84
--- /dev/null
+++ b/images/svg/truck-monster.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck-moving.svg b/images/svg/truck-moving.svg
new file mode 100644
index 00000000..17e5a29e
--- /dev/null
+++ b/images/svg/truck-moving.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck-pickup.svg b/images/svg/truck-pickup.svg
new file mode 100644
index 00000000..1f51c4cf
--- /dev/null
+++ b/images/svg/truck-pickup.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck-plane.svg b/images/svg/truck-plane.svg
new file mode 100644
index 00000000..d9a7d57b
--- /dev/null
+++ b/images/svg/truck-plane.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck-ramp-box.svg b/images/svg/truck-ramp-box.svg
new file mode 100644
index 00000000..6d3905d2
--- /dev/null
+++ b/images/svg/truck-ramp-box.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/truck.svg b/images/svg/truck.svg
new file mode 100644
index 00000000..d952ec40
--- /dev/null
+++ b/images/svg/truck.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tty.svg b/images/svg/tty.svg
new file mode 100644
index 00000000..62db3701
--- /dev/null
+++ b/images/svg/tty.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/turkish-lira-sign.svg b/images/svg/turkish-lira-sign.svg
new file mode 100644
index 00000000..87826c90
--- /dev/null
+++ b/images/svg/turkish-lira-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/turn-down.svg b/images/svg/turn-down.svg
new file mode 100644
index 00000000..d3df917b
--- /dev/null
+++ b/images/svg/turn-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/turn-up.svg b/images/svg/turn-up.svg
new file mode 100644
index 00000000..ea63bc8c
--- /dev/null
+++ b/images/svg/turn-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/tv.svg b/images/svg/tv.svg
new file mode 100644
index 00000000..aabb11cb
--- /dev/null
+++ b/images/svg/tv.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/u.svg b/images/svg/u.svg
new file mode 100644
index 00000000..78181946
--- /dev/null
+++ b/images/svg/u.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/umbrella-beach.svg b/images/svg/umbrella-beach.svg
new file mode 100644
index 00000000..f3ac8b25
--- /dev/null
+++ b/images/svg/umbrella-beach.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/umbrella.svg b/images/svg/umbrella.svg
new file mode 100644
index 00000000..33387b2b
--- /dev/null
+++ b/images/svg/umbrella.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/underline.svg b/images/svg/underline.svg
new file mode 100644
index 00000000..24830dcb
--- /dev/null
+++ b/images/svg/underline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/universal-access.svg b/images/svg/universal-access.svg
new file mode 100644
index 00000000..69f53aef
--- /dev/null
+++ b/images/svg/universal-access.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/unlock-keyhole.svg b/images/svg/unlock-keyhole.svg
new file mode 100644
index 00000000..6c53e5a2
--- /dev/null
+++ b/images/svg/unlock-keyhole.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/unlock.svg b/images/svg/unlock.svg
new file mode 100644
index 00000000..98c5cf56
--- /dev/null
+++ b/images/svg/unlock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/up-down-left-right.svg b/images/svg/up-down-left-right.svg
new file mode 100644
index 00000000..f549bd6c
--- /dev/null
+++ b/images/svg/up-down-left-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/up-down.svg b/images/svg/up-down.svg
new file mode 100644
index 00000000..837cba5b
--- /dev/null
+++ b/images/svg/up-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/up-long.svg b/images/svg/up-long.svg
new file mode 100644
index 00000000..355593d1
--- /dev/null
+++ b/images/svg/up-long.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/up-right-and-down-left-from-center.svg b/images/svg/up-right-and-down-left-from-center.svg
new file mode 100644
index 00000000..62a91a14
--- /dev/null
+++ b/images/svg/up-right-and-down-left-from-center.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/up-right-from-square.svg b/images/svg/up-right-from-square.svg
new file mode 100644
index 00000000..cd184482
--- /dev/null
+++ b/images/svg/up-right-from-square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/upload.svg b/images/svg/upload.svg
new file mode 100644
index 00000000..d5624d7f
--- /dev/null
+++ b/images/svg/upload.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-astronaut.svg b/images/svg/user-astronaut.svg
new file mode 100644
index 00000000..48b2d4ec
--- /dev/null
+++ b/images/svg/user-astronaut.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-check.svg b/images/svg/user-check.svg
new file mode 100644
index 00000000..902e4800
--- /dev/null
+++ b/images/svg/user-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-clock.svg b/images/svg/user-clock.svg
new file mode 100644
index 00000000..877d4156
--- /dev/null
+++ b/images/svg/user-clock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-doctor.svg b/images/svg/user-doctor.svg
new file mode 100644
index 00000000..20f99d2d
--- /dev/null
+++ b/images/svg/user-doctor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-gear.svg b/images/svg/user-gear.svg
new file mode 100644
index 00000000..11dd7124
--- /dev/null
+++ b/images/svg/user-gear.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-graduate.svg b/images/svg/user-graduate.svg
new file mode 100644
index 00000000..76822f25
--- /dev/null
+++ b/images/svg/user-graduate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-group.svg b/images/svg/user-group.svg
new file mode 100644
index 00000000..f105e428
--- /dev/null
+++ b/images/svg/user-group.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-injured.svg b/images/svg/user-injured.svg
new file mode 100644
index 00000000..91ad0189
--- /dev/null
+++ b/images/svg/user-injured.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-large-slash.svg b/images/svg/user-large-slash.svg
new file mode 100644
index 00000000..47f99d78
--- /dev/null
+++ b/images/svg/user-large-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-large.svg b/images/svg/user-large.svg
new file mode 100644
index 00000000..51e585fd
--- /dev/null
+++ b/images/svg/user-large.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-lock.svg b/images/svg/user-lock.svg
new file mode 100644
index 00000000..bdc89bc7
--- /dev/null
+++ b/images/svg/user-lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-minus.svg b/images/svg/user-minus.svg
new file mode 100644
index 00000000..f4de7a9a
--- /dev/null
+++ b/images/svg/user-minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-ninja.svg b/images/svg/user-ninja.svg
new file mode 100644
index 00000000..d07d15c2
--- /dev/null
+++ b/images/svg/user-ninja.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-nurse.svg b/images/svg/user-nurse.svg
new file mode 100644
index 00000000..16f47087
--- /dev/null
+++ b/images/svg/user-nurse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-pen.svg b/images/svg/user-pen.svg
new file mode 100644
index 00000000..5a9b97f2
--- /dev/null
+++ b/images/svg/user-pen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-plus.svg b/images/svg/user-plus.svg
new file mode 100644
index 00000000..f77aca76
--- /dev/null
+++ b/images/svg/user-plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-secret.svg b/images/svg/user-secret.svg
new file mode 100644
index 00000000..6ee02a0c
--- /dev/null
+++ b/images/svg/user-secret.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-shield.svg b/images/svg/user-shield.svg
new file mode 100644
index 00000000..2b25981a
--- /dev/null
+++ b/images/svg/user-shield.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-slash.svg b/images/svg/user-slash.svg
new file mode 100644
index 00000000..70b6b93b
--- /dev/null
+++ b/images/svg/user-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-tag.svg b/images/svg/user-tag.svg
new file mode 100644
index 00000000..237dba03
--- /dev/null
+++ b/images/svg/user-tag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-tie.svg b/images/svg/user-tie.svg
new file mode 100644
index 00000000..6c6f00f1
--- /dev/null
+++ b/images/svg/user-tie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user-xmark.svg b/images/svg/user-xmark.svg
new file mode 100644
index 00000000..132fa816
--- /dev/null
+++ b/images/svg/user-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/user.svg b/images/svg/user.svg
new file mode 100644
index 00000000..e2600e96
--- /dev/null
+++ b/images/svg/user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/users-between-lines.svg b/images/svg/users-between-lines.svg
new file mode 100644
index 00000000..ae149f6d
--- /dev/null
+++ b/images/svg/users-between-lines.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/users-gear.svg b/images/svg/users-gear.svg
new file mode 100644
index 00000000..f011ba31
--- /dev/null
+++ b/images/svg/users-gear.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/users-line.svg b/images/svg/users-line.svg
new file mode 100644
index 00000000..6cb21f29
--- /dev/null
+++ b/images/svg/users-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/users-rays.svg b/images/svg/users-rays.svg
new file mode 100644
index 00000000..746b4227
--- /dev/null
+++ b/images/svg/users-rays.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/users-rectangle.svg b/images/svg/users-rectangle.svg
new file mode 100644
index 00000000..e8a32e62
--- /dev/null
+++ b/images/svg/users-rectangle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/users-slash.svg b/images/svg/users-slash.svg
new file mode 100644
index 00000000..18bd59a6
--- /dev/null
+++ b/images/svg/users-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/users-viewfinder.svg b/images/svg/users-viewfinder.svg
new file mode 100644
index 00000000..5c837e37
--- /dev/null
+++ b/images/svg/users-viewfinder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/users.svg b/images/svg/users.svg
new file mode 100644
index 00000000..0f171bf6
--- /dev/null
+++ b/images/svg/users.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/utensils.svg b/images/svg/utensils.svg
new file mode 100644
index 00000000..7a02efc9
--- /dev/null
+++ b/images/svg/utensils.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/v.svg b/images/svg/v.svg
new file mode 100644
index 00000000..defb1779
--- /dev/null
+++ b/images/svg/v.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/van-shuttle.svg b/images/svg/van-shuttle.svg
new file mode 100644
index 00000000..a993f252
--- /dev/null
+++ b/images/svg/van-shuttle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/vault.svg b/images/svg/vault.svg
new file mode 100644
index 00000000..8a16fbcc
--- /dev/null
+++ b/images/svg/vault.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/vector-square.svg b/images/svg/vector-square.svg
new file mode 100644
index 00000000..0bb51603
--- /dev/null
+++ b/images/svg/vector-square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/venus-double.svg b/images/svg/venus-double.svg
new file mode 100644
index 00000000..7c9fcbb4
--- /dev/null
+++ b/images/svg/venus-double.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/venus-mars.svg b/images/svg/venus-mars.svg
new file mode 100644
index 00000000..a43acb4c
--- /dev/null
+++ b/images/svg/venus-mars.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/venus.svg b/images/svg/venus.svg
new file mode 100644
index 00000000..b691b5cd
--- /dev/null
+++ b/images/svg/venus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/vest-patches.svg b/images/svg/vest-patches.svg
new file mode 100644
index 00000000..4011001c
--- /dev/null
+++ b/images/svg/vest-patches.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/vest.svg b/images/svg/vest.svg
new file mode 100644
index 00000000..c3b00433
--- /dev/null
+++ b/images/svg/vest.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/vial-circle-check.svg b/images/svg/vial-circle-check.svg
new file mode 100644
index 00000000..1d71ed3a
--- /dev/null
+++ b/images/svg/vial-circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/vial-virus.svg b/images/svg/vial-virus.svg
new file mode 100644
index 00000000..275945c0
--- /dev/null
+++ b/images/svg/vial-virus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/vial.svg b/images/svg/vial.svg
new file mode 100644
index 00000000..53fa61f9
--- /dev/null
+++ b/images/svg/vial.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/vials.svg b/images/svg/vials.svg
new file mode 100644
index 00000000..d3b4c322
--- /dev/null
+++ b/images/svg/vials.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/video-slash.svg b/images/svg/video-slash.svg
new file mode 100644
index 00000000..f7eeaf3e
--- /dev/null
+++ b/images/svg/video-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/video.svg b/images/svg/video.svg
new file mode 100644
index 00000000..c7eb17d2
--- /dev/null
+++ b/images/svg/video.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/vihara.svg b/images/svg/vihara.svg
new file mode 100644
index 00000000..3a0dbc97
--- /dev/null
+++ b/images/svg/vihara.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/virus-covid-slash.svg b/images/svg/virus-covid-slash.svg
new file mode 100644
index 00000000..f64228d0
--- /dev/null
+++ b/images/svg/virus-covid-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/virus-covid.svg b/images/svg/virus-covid.svg
new file mode 100644
index 00000000..096f8a5c
--- /dev/null
+++ b/images/svg/virus-covid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/virus-slash.svg b/images/svg/virus-slash.svg
new file mode 100644
index 00000000..7850bc2d
--- /dev/null
+++ b/images/svg/virus-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/virus.svg b/images/svg/virus.svg
new file mode 100644
index 00000000..3d9f8dbd
--- /dev/null
+++ b/images/svg/virus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/viruses.svg b/images/svg/viruses.svg
new file mode 100644
index 00000000..7ae2ac9e
--- /dev/null
+++ b/images/svg/viruses.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/voicemail.svg b/images/svg/voicemail.svg
new file mode 100644
index 00000000..d89e8e07
--- /dev/null
+++ b/images/svg/voicemail.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/volcano.svg b/images/svg/volcano.svg
new file mode 100644
index 00000000..f8a50b37
--- /dev/null
+++ b/images/svg/volcano.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/volleyball.svg b/images/svg/volleyball.svg
new file mode 100644
index 00000000..49f2190a
--- /dev/null
+++ b/images/svg/volleyball.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/volume-high.svg b/images/svg/volume-high.svg
new file mode 100644
index 00000000..251a03b6
--- /dev/null
+++ b/images/svg/volume-high.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/volume-low.svg b/images/svg/volume-low.svg
new file mode 100644
index 00000000..2ed6dd67
--- /dev/null
+++ b/images/svg/volume-low.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/volume-off.svg b/images/svg/volume-off.svg
new file mode 100644
index 00000000..8cdd81e0
--- /dev/null
+++ b/images/svg/volume-off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/volume-xmark.svg b/images/svg/volume-xmark.svg
new file mode 100644
index 00000000..f61a0fc2
--- /dev/null
+++ b/images/svg/volume-xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/vr-cardboard.svg b/images/svg/vr-cardboard.svg
new file mode 100644
index 00000000..5a68f637
--- /dev/null
+++ b/images/svg/vr-cardboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/w.svg b/images/svg/w.svg
new file mode 100644
index 00000000..dac7c03f
--- /dev/null
+++ b/images/svg/w.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/walkie-talkie.svg b/images/svg/walkie-talkie.svg
new file mode 100644
index 00000000..9c7b3c72
--- /dev/null
+++ b/images/svg/walkie-talkie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wallet.svg b/images/svg/wallet.svg
new file mode 100644
index 00000000..13ff1cf8
--- /dev/null
+++ b/images/svg/wallet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wand-magic-sparkles.svg b/images/svg/wand-magic-sparkles.svg
new file mode 100644
index 00000000..5725d4ac
--- /dev/null
+++ b/images/svg/wand-magic-sparkles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wand-magic.svg b/images/svg/wand-magic.svg
new file mode 100644
index 00000000..f707bb92
--- /dev/null
+++ b/images/svg/wand-magic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wand-sparkles.svg b/images/svg/wand-sparkles.svg
new file mode 100644
index 00000000..13dbb692
--- /dev/null
+++ b/images/svg/wand-sparkles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/warehouse.svg b/images/svg/warehouse.svg
new file mode 100644
index 00000000..25a051fe
--- /dev/null
+++ b/images/svg/warehouse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/water-ladder.svg b/images/svg/water-ladder.svg
new file mode 100644
index 00000000..271c1529
--- /dev/null
+++ b/images/svg/water-ladder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/water.svg b/images/svg/water.svg
new file mode 100644
index 00000000..d9a4bbb0
--- /dev/null
+++ b/images/svg/water.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wave-square.svg b/images/svg/wave-square.svg
new file mode 100644
index 00000000..b09fd59b
--- /dev/null
+++ b/images/svg/wave-square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/weight-hanging.svg b/images/svg/weight-hanging.svg
new file mode 100644
index 00000000..a7a22efd
--- /dev/null
+++ b/images/svg/weight-hanging.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/weight-scale.svg b/images/svg/weight-scale.svg
new file mode 100644
index 00000000..902d95ed
--- /dev/null
+++ b/images/svg/weight-scale.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wheat-awn-circle-exclamation.svg b/images/svg/wheat-awn-circle-exclamation.svg
new file mode 100644
index 00000000..42279507
--- /dev/null
+++ b/images/svg/wheat-awn-circle-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wheat-awn.svg b/images/svg/wheat-awn.svg
new file mode 100644
index 00000000..168b6a46
--- /dev/null
+++ b/images/svg/wheat-awn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wheelchair-move.svg b/images/svg/wheelchair-move.svg
new file mode 100644
index 00000000..fef98904
--- /dev/null
+++ b/images/svg/wheelchair-move.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wheelchair.svg b/images/svg/wheelchair.svg
new file mode 100644
index 00000000..d4933654
--- /dev/null
+++ b/images/svg/wheelchair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/whiskey-glass.svg b/images/svg/whiskey-glass.svg
new file mode 100644
index 00000000..19b32fc2
--- /dev/null
+++ b/images/svg/whiskey-glass.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wifi.svg b/images/svg/wifi.svg
new file mode 100644
index 00000000..9e78a32e
--- /dev/null
+++ b/images/svg/wifi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wind.svg b/images/svg/wind.svg
new file mode 100644
index 00000000..de69a7a7
--- /dev/null
+++ b/images/svg/wind.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/window-maximize.svg b/images/svg/window-maximize.svg
new file mode 100644
index 00000000..56e82ce0
--- /dev/null
+++ b/images/svg/window-maximize.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/window-minimize.svg b/images/svg/window-minimize.svg
new file mode 100644
index 00000000..a1069d11
--- /dev/null
+++ b/images/svg/window-minimize.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/window-restore.svg b/images/svg/window-restore.svg
new file mode 100644
index 00000000..1c13002f
--- /dev/null
+++ b/images/svg/window-restore.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wine-bottle.svg b/images/svg/wine-bottle.svg
new file mode 100644
index 00000000..2941b451
--- /dev/null
+++ b/images/svg/wine-bottle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wine-glass-empty.svg b/images/svg/wine-glass-empty.svg
new file mode 100644
index 00000000..58c3d5f7
--- /dev/null
+++ b/images/svg/wine-glass-empty.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wine-glass.svg b/images/svg/wine-glass.svg
new file mode 100644
index 00000000..df3cfe27
--- /dev/null
+++ b/images/svg/wine-glass.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/won-sign.svg b/images/svg/won-sign.svg
new file mode 100644
index 00000000..6a839944
--- /dev/null
+++ b/images/svg/won-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/worm.svg b/images/svg/worm.svg
new file mode 100644
index 00000000..2922c61b
--- /dev/null
+++ b/images/svg/worm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/wrench.svg b/images/svg/wrench.svg
new file mode 100644
index 00000000..9bafb70d
--- /dev/null
+++ b/images/svg/wrench.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/x-ray.svg b/images/svg/x-ray.svg
new file mode 100644
index 00000000..f68f5892
--- /dev/null
+++ b/images/svg/x-ray.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/x.svg b/images/svg/x.svg
new file mode 100644
index 00000000..345bfff7
--- /dev/null
+++ b/images/svg/x.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/xmark.svg b/images/svg/xmark.svg
new file mode 100644
index 00000000..c2b304e2
--- /dev/null
+++ b/images/svg/xmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/xmarks-lines.svg b/images/svg/xmarks-lines.svg
new file mode 100644
index 00000000..30286732
--- /dev/null
+++ b/images/svg/xmarks-lines.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/y.svg b/images/svg/y.svg
new file mode 100644
index 00000000..0c488e55
--- /dev/null
+++ b/images/svg/y.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/yen-sign.svg b/images/svg/yen-sign.svg
new file mode 100644
index 00000000..a49fac19
--- /dev/null
+++ b/images/svg/yen-sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/yin-yang.svg b/images/svg/yin-yang.svg
new file mode 100644
index 00000000..805f453f
--- /dev/null
+++ b/images/svg/yin-yang.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/svg/z.svg b/images/svg/z.svg
new file mode 100644
index 00000000..857f4840
--- /dev/null
+++ b/images/svg/z.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/cdlgconnsettingscanal.cpp b/src/cdlgconnsettingscanal.cpp
index 0dc95b61..e8cf4058 100644
--- a/src/cdlgconnsettingscanal.cpp
+++ b/src/cdlgconnsettingscanal.cpp
@@ -39,11 +39,11 @@
#include "canalconfigwizard.h"
#include "vscphelper.h"
-#include
-#include
-#include
-#include
#include
+#include
+#include
+#include
+#include
#include
@@ -56,16 +56,16 @@
// CTor
//
-CDlgConnSettingsCanal::CDlgConnSettingsCanal(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::CDlgConnSettingsCanal)
+CDlgConnSettingsCanal::CDlgConnSettingsCanal(QWidget* parent)
+ : QDialog(parent)
+ , ui(new Ui::CDlgConnSettingsCanal)
{
- ui->setupUi(this);
+ ui->setupUi(this);
- connect(ui->btnTest, SIGNAL(clicked()), this, SLOT(testDriver()));
- connect(ui->btnSetPath, SIGNAL(clicked()), this, SLOT(setDriverPath()));
- connect(ui->btnWizard, SIGNAL(clicked()), this, SLOT(wizard()));
- connect(ui->btnFilterWizard, SIGNAL(clicked()), this, SLOT(filterwizard()));
+ connect(ui->btnTest, SIGNAL(clicked()), this, SLOT(testDriver()));
+ connect(ui->btnSetPath, SIGNAL(clicked()), this, SLOT(setDriverPath()));
+ connect(ui->btnWizard, SIGNAL(clicked()), this, SLOT(wizard()));
+ connect(ui->btnFilterWizard, SIGNAL(clicked()), this, SLOT(filterwizard()));
}
///////////////////////////////////////////////////////////////////////////////
@@ -74,828 +74,817 @@ CDlgConnSettingsCanal::CDlgConnSettingsCanal(QWidget *parent) :
CDlgConnSettingsCanal::~CDlgConnSettingsCanal()
{
- delete ui;
+ delete ui;
}
///////////////////////////////////////////////////////////////////////////////
// setInitialFocus
//
-void CDlgConnSettingsCanal::setInitialFocus(void)
+void
+CDlgConnSettingsCanal::setInitialFocus(void)
{
- ui->editDescription->setFocus();
+ ui->editDescription->setFocus();
}
-
// Getters / Setters
-
///////////////////////////////////////////////////////////////////////////////
// getName
//
-QString CDlgConnSettingsCanal::getName(void)
+QString
+CDlgConnSettingsCanal::getName(void)
{
- return (ui->editDescription->text());
+ return (ui->editDescription->text());
}
///////////////////////////////////////////////////////////////////////////////
// setName
//
-void CDlgConnSettingsCanal::setName(const QString& str)
+void
+CDlgConnSettingsCanal::setName(const QString& str)
{
- ui->editDescription->setText(str);
+ ui->editDescription->setText(str);
}
///////////////////////////////////////////////////////////////////////////////
// getPath
//
-QString CDlgConnSettingsCanal::getPath(void)
+QString
+CDlgConnSettingsCanal::getPath(void)
{
- return (ui->editPath->text());
+ return (ui->editPath->text());
}
///////////////////////////////////////////////////////////////////////////////
// setPath
//
-void CDlgConnSettingsCanal::setPath(const QString& str)
+void
+CDlgConnSettingsCanal::setPath(const QString& str)
{
- ui->editPath->setText(str);
+ ui->editPath->setText(str);
}
///////////////////////////////////////////////////////////////////////////////
// getConfig
//
-QString CDlgConnSettingsCanal::getConfig(void)
+QString
+CDlgConnSettingsCanal::getConfig(void)
{
- return (ui->editConfig->text());
+ return (ui->editConfig->text());
}
///////////////////////////////////////////////////////////////////////////////
// setConfig
//
-void CDlgConnSettingsCanal::setConfig(const QString& str)
+void
+CDlgConnSettingsCanal::setConfig(const QString& str)
{
- ui->editConfig->setText(str);
+ ui->editConfig->setText(str);
}
///////////////////////////////////////////////////////////////////////////////
// getFlags
//
-uint32_t CDlgConnSettingsCanal::getFlags(void)
+uint32_t
+CDlgConnSettingsCanal::getFlags(void)
{
- return vscp_readStringValue(ui->editFlags->text().toStdString());
+ return vscp_readStringValue(ui->editFlags->text().toStdString());
}
///////////////////////////////////////////////////////////////////////////////
// getFlagsStr
//
-std::string CDlgConnSettingsCanal::getFlagsStr(void)
+std::string
+CDlgConnSettingsCanal::getFlagsStr(void)
{
- return ui->editFlags->text().toStdString();
+ return ui->editFlags->text().toStdString();
}
///////////////////////////////////////////////////////////////////////////////
// setFlags
//
-void CDlgConnSettingsCanal::setFlags(uint32_t flags)
+void
+CDlgConnSettingsCanal::setFlags(uint32_t flags)
{
- std::string str = vscp_str_format("0x%lX", (unsigned long)flags);
- ui->editFlags->setText(str.c_str());
+ std::string str = vscp_str_format("0x%lX", (unsigned long)flags);
+ ui->editFlags->setText(str.c_str());
}
///////////////////////////////////////////////////////////////////////////////
// getDataRate
//
-uint32_t CDlgConnSettingsCanal::getDataRate(void)
+uint32_t
+CDlgConnSettingsCanal::getDataRate(void)
{
- return vscp_readStringValue(ui->editDataRate->text().toStdString());
+ return vscp_readStringValue(ui->editDataRate->text().toStdString());
}
///////////////////////////////////////////////////////////////////////////////
// setDataRate
//
-void CDlgConnSettingsCanal::setDataRate(uint32_t datarate)
+void
+CDlgConnSettingsCanal::setDataRate(uint32_t datarate)
{
- std::string str = vscp_str_format("%lu", (unsigned long)datarate);
- ui->editDataRate->setText(str.c_str());
+ std::string str = vscp_str_format("%lu", (unsigned long)datarate);
+ ui->editDataRate->setText(str.c_str());
}
-
///////////////////////////////////////////////////////////////////////////////
// getJson
//
-QJsonObject CDlgConnSettingsCanal::getJson(void)
+QJsonObject
+CDlgConnSettingsCanal::getJson(void)
{
- m_jsonConfig["type"] = static_cast(CVscpClient::connType::CANAL);
- m_jsonConfig["name"] = getName();
- m_jsonConfig["path"] = getPath();
- m_jsonConfig["config"] = getConfig();
- m_jsonConfig["flags"] = (int)getFlags();
- m_jsonConfig["datarate"] = (int)getDataRate();
- return m_jsonConfig;
+ m_jsonConfig["type"] = static_cast(CVscpClient::connType::CANAL);
+ m_jsonConfig["name"] = getName();
+ m_jsonConfig["path"] = getPath();
+ m_jsonConfig["config"] = getConfig();
+ m_jsonConfig["flags"] = (int)getFlags();
+ m_jsonConfig["datarate"] = (int)getDataRate();
+ return m_jsonConfig;
}
-
///////////////////////////////////////////////////////////////////////////////
// setJson
//
-void CDlgConnSettingsCanal::setJson(const QJsonObject *pobj)
-{
- m_jsonConfig = *pobj;
-
- if (!m_jsonConfig["name"].isNull()) setName(m_jsonConfig["name"].toString());
- if (!m_jsonConfig["path"].isNull()) setPath(m_jsonConfig["path"].toString());
- if (!m_jsonConfig["config"].isNull()) setConfig(m_jsonConfig["config"].toString());
- if (!m_jsonConfig["flags"].isNull()) setFlags(uint32_t(m_jsonConfig["flags"].toInt()));
- if (!m_jsonConfig["datarate"].isNull()) setDataRate(m_jsonConfig["datarate"].toInt());
+void
+CDlgConnSettingsCanal::setJson(const QJsonObject* pobj)
+{
+ m_jsonConfig = *pobj;
+
+ if (!m_jsonConfig["name"].isNull())
+ setName(m_jsonConfig["name"].toString());
+ if (!m_jsonConfig["path"].isNull())
+ setPath(m_jsonConfig["path"].toString());
+ if (!m_jsonConfig["config"].isNull())
+ setConfig(m_jsonConfig["config"].toString());
+ if (!m_jsonConfig["flags"].isNull())
+ setFlags(uint32_t(m_jsonConfig["flags"].toInt()));
+ if (!m_jsonConfig["datarate"].isNull())
+ setDataRate(m_jsonConfig["datarate"].toInt());
}
///////////////////////////////////////////////////////////////////////////////
// testDriver
//
-void CDlgConnSettingsCanal::testDriver()
+void
+CDlgConnSettingsCanal::testDriver()
{
- std::string path = ui->editPath->text().toStdString();
-
- if (!((QFileInfo::exists(path.c_str()) && QFileInfo(path.c_str()).isFile()) || QFileInfo(path.c_str()).isSymLink())) {
- int ret = QMessageBox::warning(this, tr("vscpworks+"),
- tr("The driver does not exist."),
- QMessageBox::Ok );
- }
-
- // Save set path
- std::string save_path = m_vscpClient.m_canalif.getPath();
-
- // Set new path
- m_vscpClient.m_canalif.setPath(path);
-
- int rv;
- if (CANAL_ERROR_SUCCESS != (rv = m_vscpClient.m_canalif.init())) {
- std::string str = vscp_str_format("The driver did not load properly. rv=%d", rv);
- QMessageBox::warning(this,
- tr("vscpworks+"),
- str.c_str(),
- QMessageBox::Ok );
- }
- else {
- uint32_t dllversion = m_vscpClient.m_canalif.CanalGetDllVersion();
- const char *pVendor = m_vscpClient.m_canalif.CanalGetVendorString();
- std::string strGenerationOne = m_vscpClient.m_canalif.isGenerationOne() ?
- "Generation 1 driver (wizard will not work)" : "Generation 2 driver";
- std::string str = vscp_str_format("The driver is OK. \n\nVersion = %d.%d.%d.%d\n%s\n\n%s",
- (dllversion >> 24) & 0xff,
- (dllversion >> 16) & 0xff,
- (dllversion >> 8) & 0xff,
- dllversion & 0xff,
- pVendor,
- strGenerationOne.c_str());
-
- QMessageBox::information(this,
- tr("vscpworks+"),
- str.c_str(),
- QMessageBox::Ok );
- }
-
- // Release the driver
- m_vscpClient.m_canalif.releaseDriver();
-
- // Restore old path
- m_vscpClient.m_canalif.setPath(save_path);
+ std::string path = ui->editPath->text().toStdString();
+
+ if (!((QFileInfo::exists(path.c_str()) && QFileInfo(path.c_str()).isFile()) || QFileInfo(path.c_str()).isSymLink())) {
+ int ret = QMessageBox::warning(this, tr("vscpworks+"), tr("The driver does not exist."), QMessageBox::Ok);
+ }
+
+ // Save set path
+ std::string save_path = m_vscpClient.m_canalif.getPath();
+
+ // Set new path
+ m_vscpClient.m_canalif.setPath(path);
+
+ int rv;
+ if (CANAL_ERROR_SUCCESS != (rv = m_vscpClient.m_canalif.init())) {
+ std::string str = vscp_str_format("The driver did not load properly. rv=%d", rv);
+ QMessageBox::warning(this,
+ tr("vscpworks+"),
+ str.c_str(),
+ QMessageBox::Ok);
+ }
+ else {
+ uint32_t dllversion = m_vscpClient.m_canalif.CanalGetDllVersion();
+ const char* pVendor = m_vscpClient.m_canalif.CanalGetVendorString();
+ std::string strGenerationOne = m_vscpClient.m_canalif.isGenerationOne() ? "Generation 1 driver (wizard will not work)" : "Generation 2 driver";
+ std::string str = vscp_str_format("The driver is OK. \n\nVersion = %d.%d.%d.%d\n%s\n\n%s",
+ (dllversion >> 24) & 0xff,
+ (dllversion >> 16) & 0xff,
+ (dllversion >> 8) & 0xff,
+ dllversion & 0xff,
+ pVendor,
+ strGenerationOne.c_str());
+
+ QMessageBox::information(this,
+ tr("vscpworks+"),
+ str.c_str(),
+ QMessageBox::Ok);
+ }
+
+ // Release the driver
+ m_vscpClient.m_canalif.releaseDriver();
+
+ // Restore old path
+ m_vscpClient.m_canalif.setPath(save_path);
}
///////////////////////////////////////////////////////////////////////////////
// setDriverPath
//
-void CDlgConnSettingsCanal::setDriverPath()
+void
+CDlgConnSettingsCanal::setDriverPath()
{
#ifdef WIN32
- std::string filename =
- QFileDialog::getOpenFileName(this,
- tr("Set path to CANAL driver"),
- "/var/lib/vscp/drivers/level1",
- tr("Drivers (*.so)")).toStdString();
+ std::string filename =
+ QFileDialog::getOpenFileName(this,
+ tr("Set path to CANAL driver"),
+ "/var/lib/vscp/drivers/level1",
+ tr("Drivers (*.so)"))
+ .toStdString();
#else
- std::string filename =
- QFileDialog::getOpenFileName(this,
- tr("Set path to CANAL driver"),
- "/var/lib/vscp/drivers/level1",
- tr("Drivers (*.so);;All (*)")).toStdString();
-#endif
- ui->editPath->setText(filename.c_str());
+ std::string filename =
+ QFileDialog::getOpenFileName(this,
+ tr("Set path to CANAL driver"),
+ "/var/lib/vscp/drivers/level1",
+ tr("Drivers (*.so);;All (*)"))
+ .toStdString();
+#endif
+ ui->editPath->setText(filename.c_str());
}
///////////////////////////////////////////////////////////////////////////////
// wizard
//
-void CDlgConnSettingsCanal::wizard()
+void
+CDlgConnSettingsCanal::wizard()
{
- ///////////////////////////////////////////////////////////////////////////
- // Get XML config data
- ///////////////////////////////////////////////////////////////////////////
-
- std::string path = ui->editPath->text().toStdString();
- std::string config = getConfig().toStdString();
- uint32_t flags = getFlags();
-
- // Get config items
- std::deque m_configItems;
- vscp_split(m_configItems, getConfig().toStdString(), ";");
-
- // Save set path
- QString save_path = m_vscpClient.m_canalif.getPath().c_str();
-
- // Set new path
- m_vscpClient.m_canalif.setPath(path);
-
- int rv;
- if (CANAL_ERROR_SUCCESS != (rv = m_vscpClient.m_canalif.init())) {
- std::string str = vscp_str_format("The driver did not load properly. rv=%d", rv);
- QMessageBox::warning(this,
- tr("vscpworks+"),
- str.c_str(),
- QMessageBox::Ok );
- // Release the driver
- m_vscpClient.m_canalif.releaseDriver();
-
- // Reset old path
- m_vscpClient.m_canalif.setPath(save_path.toStdString());
-
- return;
- }
+ ///////////////////////////////////////////////////////////////////////////
+ // Get XML config data
+ ///////////////////////////////////////////////////////////////////////////
+
+ std::string path = ui->editPath->text().toStdString();
+ std::string config = getConfig().toStdString();
+ uint32_t flags = getFlags();
+
+ // Get config items
+ std::deque m_configItems;
+ vscp_split(m_configItems, getConfig().toStdString(), ";");
+
+ // Save set path
+ QString save_path = m_vscpClient.m_canalif.getPath().c_str();
+
+ // Set new path
+ m_vscpClient.m_canalif.setPath(path);
+
+ int rv;
+ if (CANAL_ERROR_SUCCESS != (rv = m_vscpClient.m_canalif.init())) {
+ std::string str = vscp_str_format("The driver did not load properly. rv=%d", rv);
+ QMessageBox::warning(this,
+ tr("vscpworks+"),
+ str.c_str(),
+ QMessageBox::Ok);
+ // Release the driver
+ m_vscpClient.m_canalif.releaseDriver();
- if (m_vscpClient.m_canalif.isGenerationOne()) {
- QMessageBox::warning(this,
- tr("vscpworks+"),
- tr("Driver is a generation one driver that does not have any configuration data embedded"),
- QMessageBox::Ok );
- // Release the driver
- m_vscpClient.m_canalif.releaseDriver();
+ // Reset old path
+ m_vscpClient.m_canalif.setPath(save_path.toStdString());
- // Reset old path
- m_vscpClient.m_canalif.setPath(save_path.toStdString());
+ return;
+ }
- return;
- }
+ if (m_vscpClient.m_canalif.isGenerationOne()) {
+ QMessageBox::warning(this,
+ tr("vscpworks+"),
+ tr("Driver is a generation one driver that does not have any configuration data embedded"),
+ QMessageBox::Ok);
+ // Release the driver
+ m_vscpClient.m_canalif.releaseDriver();
+
+ // Reset old path
+ m_vscpClient.m_canalif.setPath(save_path.toStdString());
- const char *p = m_vscpClient.m_canalif.CanalGetDriverInfo();
- qDebug() << "Driver XML info \n" << p;
+ return;
+ }
- std::string xml;
- canalXmlConfig xmlcfg;
+ const char* p = m_vscpClient.m_canalif.CanalGetDriverInfo();
+ qDebug() << "Driver XML info \n"
+ << p;
- if ( NULL != p ) {
- xml.assign(p);
-
- if (!xmlcfg.parseXML(xml)) {
- QMessageBox::warning(this,
- tr("vscpworks+"),
- tr("Failed to parse XML file"),
- QMessageBox::Ok );
- }
+ std::string xml;
+ canalXmlConfig xmlcfg;
+
+ if (NULL != p) {
+ xml.assign(p);
+
+ if (!xmlcfg.parseXML(xml)) {
+ QMessageBox::warning(this,
+ tr("vscpworks+"),
+ tr("Failed to parse XML file"),
+ QMessageBox::Ok);
}
- else {
- QMessageBox::warning(this,
- tr("vscpworks+"),
- tr("Sorry, no configuration information available"),
- QMessageBox::Ok );
+ }
+ else {
+ QMessageBox::warning(this,
+ tr("vscpworks+"),
+ tr("Sorry, no configuration information available"),
+ QMessageBox::Ok);
+ }
+
+ // Release the driver
+ m_vscpClient.m_canalif.releaseDriver();
+
+ // Reset old path
+ m_vscpClient.m_canalif.setPath(save_path.toStdString());
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Set up wizard steps
+ ///////////////////////////////////////////////////////////////////////////
+
+ CanalConfigWizard wizard(this);
+ // wizard.setWizardStyle(QWizard::MacStyle);
+
+ // ************************************************************************
+ // Intro page
+ // ************************************************************************
+ QString lbl = tr("This wizard will help to generate and fill in the "
+ "configuration string \nand the flag bits for the. "
+ "the driver.\n\n");
+ lbl += vscp_str_format("Driver is a level %d driver\n", (int)xmlcfg.getLevel() + 1).c_str();
+ lbl += xmlcfg.getBlocking() ? "Driver is blocking.\n" : "Driver is not blocking.\n";
+
+ wizard.addPage(new IntroPage(nullptr, xmlcfg.getDescription().c_str(), lbl, xmlcfg.getInfoUrl().c_str()));
+
+ // For test use
+ if (0) {
+ wizard.addPage(new ConfigStringPage(this, wizardStepBase::wizardType::STRING, "cfg1", "String value", "Configuration pos 1", "This is a string test"));
+ wizard.addPage(new ConfigStringPage(this, wizardStepBase::wizardType::STRING, "cfg2", "String value", "Configuration pos 2", "This is a string test"));
+ wizard.addPage(new ConfigStringPage(this, wizardStepBase::wizardType::STRING, "cfg3", "String value", "Configuration pos 3", "This is a string test"));
+ wizard.addPage(new ConfigBoolPage(this, "cfg4", "Boolean value", "Bool config", "This is a bool test"));
+ std::list list;
+ list.push_back(std::string("Ettan"));
+ list.push_back(std::string("Tvåan"));
+ list.push_back(std::string("Trean"));
+ list.push_back(std::string("Fyran"));
+ list.push_back(std::string("Femman"));
+ wizard.addPage(new ConfigChoicePage(this, "cfg5", list, "Choose one", "Choice config", "This is a choice test"));
+ wizard.addPage(new ConfigChoicePage(this, "cfg6", list, "Choose one", "Choice config", "This is a choice test"));
+ }
+
+ int cfgidx = 0;
+ std::list::iterator itcfg;
+ for (itcfg = xmlcfg.m_stepsWizardItems.begin(); itcfg != xmlcfg.m_stepsWizardItems.end(); ++itcfg) {
+
+ std::string idstr = vscp_str_format("config%d", cfgidx); // id for wizard field
+ std::string idtxt = vscp_str_format("Config pos %d", cfgidx + 1); // Text in head of wizard
+ cfgidx++;
+
+ std::string dlgcfgval; // Set to current config value for this pos
+ bool bUIseDlgCfgVal = false; // Set to tru of there is a value already set for this pos
+ if (m_configItems.size()) {
+ dlgcfgval = m_configItems.front();
+ m_configItems.pop_front();
+ bUIseDlgCfgVal = true;
}
- // Release the driver
- m_vscpClient.m_canalif.releaseDriver();
+ switch ((*itcfg)->m_type) {
- // Reset old path
- m_vscpClient.m_canalif.setPath(save_path.toStdString());
+ case wizardStepBase::wizardType::NONE:
+ break;
- ///////////////////////////////////////////////////////////////////////////
- // Set up wizard steps
- ///////////////////////////////////////////////////////////////////////////
-
- CanalConfigWizard wizard(this);
- //wizard.setWizardStyle(QWizard::MacStyle);
-
- // ************************************************************************
- // Intro page
- // ************************************************************************
- QString lbl = tr("This wizard will help to generate and fill in the "
- "configuration string \nand the flag bits for the. "
- "the driver.\n\n");
- lbl += vscp_str_format("Driver is a level %d driver\n",(int)xmlcfg.getLevel()+1).c_str();
- lbl += xmlcfg.getBlocking() ? "Driver is blocking.\n" : "Driver is not blocking.\n";
-
- wizard.addPage(new IntroPage(nullptr, xmlcfg.getDescription().c_str(), lbl, xmlcfg.getInfoUrl().c_str()));
-
- // For test use
- if (0) {
- wizard.addPage(new ConfigStringPage(this, wizardStepBase::wizardType::STRING, "cfg1", "String value", "Configuration pos 1", "This is a string test"));
- wizard.addPage(new ConfigStringPage(this, wizardStepBase::wizardType::STRING, "cfg2", "String value", "Configuration pos 2", "This is a string test"));
- wizard.addPage(new ConfigStringPage(this, wizardStepBase::wizardType::STRING, "cfg3", "String value", "Configuration pos 3", "This is a string test"));
- wizard.addPage(new ConfigBoolPage(this, "cfg4", "Boolean value", "Bool config", "This is a bool test"));
- std::list list;
- list.push_back(std::string("Ettan"));
- list.push_back(std::string("Tvåan"));
- list.push_back(std::string("Trean"));
- list.push_back(std::string("Fyran"));
- list.push_back(std::string("Femman"));
- wizard.addPage(new ConfigChoicePage(this, "cfg5", list, "Choose one", "Choice config", "This is a choice test"));
- wizard.addPage(new ConfigChoicePage(this, "cfg6", list, "Choose one", "Choice config", "This is a choice test"));
- }
+ case wizardStepBase::wizardType::STRING: {
+ wizardStepString* item = (wizardStepString*)(*itcfg);
- int cfgidx = 0;
- std::list::iterator itcfg;
- for (itcfg = xmlcfg.m_stepsWizardItems.begin(); itcfg != xmlcfg.m_stepsWizardItems.end(); ++itcfg){
-
- std::string idstr = vscp_str_format("config%d", cfgidx); // id for wizard field
- std::string idtxt = vscp_str_format("Config pos %d", cfgidx + 1); // Text in head of wizard
- cfgidx++;
-
- std::string dlgcfgval; // Set to current config value for this pos
- bool bUIseDlgCfgVal = false; // Set to tru of there is a value already set for this pos
- if (m_configItems.size()) {
- dlgcfgval = m_configItems.front();
- m_configItems.pop_front();
- bUIseDlgCfgVal = true;
+ std::string description = item->getDescription();
+ if (item->isOptional()) {
+ description += " ";
+ description += "(optional)";
}
-
- switch ((*itcfg)->m_type) {
-
- case wizardStepBase::wizardType::NONE:
- break;
-
- case wizardStepBase::wizardType::STRING:
- {
- wizardStepString *item = (wizardStepString *)(*itcfg);
-
- std::string description = item->getDescription();
- if (item->isOptional()) {
- description += " ";
- description += "(optional)";
- }
- else {
- idstr += "*";
- }
-
- wizard.addPage(new ConfigStringPage(this,
- wizardStepBase::wizardType::STRING,
- idstr.c_str(),
- "String value",
- idtxt.c_str(),
- item->getDescription().c_str(),
- bUIseDlgCfgVal ? dlgcfgval.c_str() : item->getValue().c_str(),
- item->getInfoUrl().c_str()));
- // Set default value
- wizard.setField(QString::fromUtf8(idstr.c_str()).remove('*'),
- bUIseDlgCfgVal ? dlgcfgval.c_str() : item->getValue().c_str());
- }
- break;
-
- case wizardStepBase::wizardType::BOOL:
- {
- wizardStepBool *item = (wizardStepBool *)(*itcfg);
-
- std::string description = item->getDescription();
- if (item->isOptional()) {
- description += " ";
- description += "(optional)";
- }
- else {
- idstr += "*";
- }
-
- wizard.addPage(new ConfigBoolPage(this,
- idstr.c_str(),
- "Bool value",
- idtxt.c_str(),
- item->getDescription().c_str(),
- item->getValue().c_str(),
- item->getInfoUrl().c_str()));
- wizard.setField(idstr.c_str(), item->getValue().c_str());
- }
- break;
-
- case wizardStepBase::wizardType::INT32:
- {
- wizardStepInt32 *item = (wizardStepInt32 *)(*itcfg);
-
- std::string description = item->getDescription();
- if (item->isOptional()) {
- description += " ";
- description += "(optional)";
- }
- else {
- idstr += "*";
- }
-
- wizard.addPage(new ConfigStringPage(this,
- wizardStepBase::wizardType::INT32,
- idstr.c_str(),
- "Int32 valuee",
- idtxt.c_str(),
- item->getDescription().c_str(),
- item->getValue().c_str(),
- item->getInfoUrl().c_str()));
- wizard.setField(idstr.c_str(), item->getValue().c_str());
- }
- break;
-
- case wizardStepBase::wizardType::UINT32:
- {
- wizardStepUInt32 *item = (wizardStepUInt32 *)(*itcfg);
-
- std::string description = item->getDescription();
- if (item->isOptional()) {
- description += " ";
- description += "(optional)";
- }
- else {
- idstr += "*";
- }
-
- wizard.addPage(new ConfigStringPage(this,
- wizardStepBase::wizardType::UINT32,
- idstr.c_str(),
- "Uint32 value",
- idtxt.c_str(),
- item->getDescription().c_str(),
- item->getValue().c_str(),
- item->getInfoUrl().c_str()));
- wizard.setField(idstr.c_str(), item->getValue().c_str());
- }
- break;
-
- case wizardStepBase::wizardType::INT64:
- {
- wizardStepInt64 *item = (wizardStepInt64 *)(*itcfg);
-
- std::string description = item->getDescription();
- if (item->isOptional()) {
- description += " ";
- description += "(optional)";
- }
- else {
- idstr += "*";
- }
-
- wizard.addPage(new ConfigStringPage(this,
- wizardStepBase::wizardType::INT64,
- idstr.c_str(),
- "Int64 value",
- idtxt.c_str(),
- item->getDescription().c_str(),
- item->getValue().c_str(),
- item->getInfoUrl().c_str()));
- wizard.setField(idstr.c_str(), item->getValue().c_str());
- }
- break;
-
- case wizardStepBase::wizardType::UINT64:
- {
- wizardStepUInt64 *item = (wizardStepUInt64 *)(*itcfg);
-
- std::string description = item->getDescription();
- if (item->isOptional()) {
- description += " ";
- description += "(optional)";
- }
- else {
- idstr += "*";
- }
-
- wizard.addPage(new ConfigStringPage(this,
- wizardStepBase::wizardType::UINT64,
- idstr.c_str(),
- "Uint64 value",
- idtxt.c_str(),
- item->getDescription().c_str(),
- item->getValue().c_str(),
- item->getInfoUrl().c_str()));
- wizard.setField(idstr.c_str(), item->getValue().c_str());
- }
- break;
-
- case wizardStepBase::wizardType::FLOAT:
- {
- wizardStepFloat *item = (wizardStepFloat *)(*itcfg);
-
- std::string description = item->getDescription();
- if (item->isOptional()) {
- description += " ";
- description += "(optional)";
- }
- else {
- idstr += "*";
- }
-
- wizard.addPage(new ConfigStringPage(this,
- wizardStepBase::wizardType::FLOAT,
- idstr.c_str(),
- "Floating point value",
- idtxt.c_str(),
- item->getDescription().c_str(),
- item->getValue().c_str(),
- item->getInfoUrl().c_str()));
- wizard.setField(idstr.c_str(), item->getValue().c_str());
- }
- break;
-
- case wizardStepBase::wizardType::CHOICE:
- {
- std::list choicelist;
- wizardStepChoice *item = (wizardStepChoice *)(*itcfg);
-
- std::string description = item->getDescription();
- if (item->isOptional()) {
- description += " ";
- description += "(optional)";
- }
- else {
- idstr += "*";
- }
-
- std::vector::iterator it;
- for (it = item->m_choices.begin(); it != item->m_choices.end(); ++it){
- wizardChoiceItem *itemChoice = (wizardChoiceItem *)(*it);
- choicelist.push_back(itemChoice->getDescription());
- }
-
- wizard.addPage(new ConfigChoicePage(this,
- idstr.c_str(),
- choicelist,
- "Choices",
- idtxt.c_str(),
- item->getDescription().c_str(),
- 0,
- item->getInfoUrl().c_str()));
- }
- break;
-
- default:
- // we do nothing
- break;
+ else {
+ idstr += "*";
}
- }
+ wizard.addPage(new ConfigStringPage(this,
+ wizardStepBase::wizardType::STRING,
+ idstr.c_str(),
+ "String value",
+ idtxt.c_str(),
+ item->getDescription().c_str(),
+ bUIseDlgCfgVal ? dlgcfgval.c_str() : item->getValue().c_str(),
+ item->getInfoUrl().c_str()));
+ // Set default value
+ wizard.setField(QString::fromUtf8(idstr.c_str()).remove('*'),
+ bUIseDlgCfgVal ? dlgcfgval.c_str() : item->getValue().c_str());
+ } break;
+
+ case wizardStepBase::wizardType::BOOL: {
+ wizardStepBool* item = (wizardStepBool*)(*itcfg);
+
+ std::string description = item->getDescription();
+ if (item->isOptional()) {
+ description += " ";
+ description += "(optional)";
+ }
+ else {
+ idstr += "*";
+ }
- // ************************************************************************
- // Flags
- // ************************************************************************
+ wizard.addPage(new ConfigBoolPage(this,
+ idstr.c_str(),
+ "Bool value",
+ idtxt.c_str(),
+ item->getDescription().c_str(),
+ item->getValue().c_str(),
+ item->getInfoUrl().c_str()));
+ wizard.setField(idstr.c_str(), item->getValue().c_str());
+ } break;
+
+ case wizardStepBase::wizardType::INT32: {
+ wizardStepInt32* item = (wizardStepInt32*)(*itcfg);
+
+ std::string description = item->getDescription();
+ if (item->isOptional()) {
+ description += " ";
+ description += "(optional)";
+ }
+ else {
+ idstr += "*";
+ }
- int flagidx = 0;
- std::list::iterator itflg;
- for (itflg = xmlcfg.m_stepsWizardFlags.begin(); itflg != xmlcfg.m_stepsWizardFlags.end(); ++itflg){
-
- std::string idstr = vscp_str_format("flag%d", flagidx); // id for wizard flag field
- flagidx++;
-
- bool bFlagValue = false;
- std::string strFlags = getFlagsStr();
- uint32_t cfgflags = vscp_readStringValue(strFlags);
- vscp_trim(strFlags);
- if (strFlags.length()) {
- bFlagValue = true;
+ wizard.addPage(new ConfigStringPage(this,
+ wizardStepBase::wizardType::INT32,
+ idstr.c_str(),
+ "Int32 valuee",
+ idtxt.c_str(),
+ item->getDescription().c_str(),
+ item->getValue().c_str(),
+ item->getInfoUrl().c_str()));
+ wizard.setField(idstr.c_str(), item->getValue().c_str());
+ } break;
+
+ case wizardStepBase::wizardType::UINT32: {
+ wizardStepUInt32* item = (wizardStepUInt32*)(*itcfg);
+
+ std::string description = item->getDescription();
+ if (item->isOptional()) {
+ description += " ";
+ description += "(optional)";
+ }
+ else {
+ idstr += "*";
}
-
- switch ((*itflg)->m_type) {
-
- case wizardStepBase::wizardType::NONE:
- break;
-
- case wizardStepBase::wizardType::BOOL:
- {
- std::string idtxt;
- wizardFlagBitBool *item = (wizardFlagBitBool *)(*itflg);
-
- std::string description = item->getDescription();
-
- uint8_t width;
- if ((width = item->getWidth()) > 1) {
- idtxt = vscp_str_format("Flag bit %d-%d", item->getPos(), item->getPos() + width - 1);
- }
- else {
- idtxt = vscp_str_format("Flag bit %d", item->getPos());
- }
-
- wizard.addPage(new ConfigBoolPage(this,
- idstr.c_str(),
- item->getDescription().c_str(),
- idtxt.c_str(),
- item->getDescription().c_str(),
- item->getValue().c_str(),
- item->getInfoUrl().c_str()));
- wizard.setField(idstr.c_str(), item->getValue().c_str());
- }
- break;
-
- case wizardStepBase::wizardType::UINT32:
- {
- std::string idtxt;
-
- wizardFlagBitNumber *item = (wizardFlagBitNumber *)(*itflg);
-
- std::string description = item->getDescription();
-
- uint8_t width;
- if ((width = item->getWidth()) > 1) {
- idtxt = vscp_str_format("Flag bit %d-%d", item->getPos(), item->getPos() + width - 1);
- }
- else {
- idtxt = vscp_str_format("Flag bit %d", item->getPos());
- }
- //idstr += "*";
-
- wizard.addPage(new ConfigStringPage(this,
- wizardStepBase::wizardType::UINT32,
- idstr.c_str(),
- "Uint32 value",
- idtxt.c_str(),
- item->getDescription().c_str(),
- item->getValue().c_str(),
- item->getInfoUrl().c_str(),
- item->getWidth()));
- wizard.setField(idstr.c_str(), item->getValue().c_str());
- }
- break;
-
- case wizardStepBase::wizardType::CHOICE:
- {
- std::string idtxt;
-
- std::list choicelist;
- wizardFlagBitChoice *item = (wizardFlagBitChoice *)(*itflg);
-
- std::string description = item->getDescription();
-
- uint8_t width;
- if ((width = item->getWidth()) > 1) {
- idtxt = vscp_str_format("Flag bit %d-%d", item->getPos(), item->getPos() + width - 1);
- }
- else {
- idtxt = vscp_str_format("Flag bit %d", item->getPos());
- }
-
- std::vector::iterator it;
- for (it = item->m_choices.begin(); it != item->m_choices.end(); ++it){
- wizardBitChoice *itemChoice = (wizardBitChoice *)(*it);
- choicelist.push_back(itemChoice->getDescription());
- }
-
- wizard.addPage(new ConfigChoicePage(this,
- idstr.c_str(),
- choicelist,
- "Choices",
- idtxt.c_str(),
- item->getDescription().c_str(),
- 0,
- item->getInfoUrl().c_str()));
- }
- break;
-
- default:
- // we do nothing
- break;
+
+ wizard.addPage(new ConfigStringPage(this,
+ wizardStepBase::wizardType::UINT32,
+ idstr.c_str(),
+ "Uint32 value",
+ idtxt.c_str(),
+ item->getDescription().c_str(),
+ item->getValue().c_str(),
+ item->getInfoUrl().c_str()));
+ wizard.setField(idstr.c_str(), item->getValue().c_str());
+ } break;
+
+ case wizardStepBase::wizardType::INT64: {
+ wizardStepInt64* item = (wizardStepInt64*)(*itcfg);
+
+ std::string description = item->getDescription();
+ if (item->isOptional()) {
+ description += " ";
+ description += "(optional)";
+ }
+ else {
+ idstr += "*";
}
+ wizard.addPage(new ConfigStringPage(this,
+ wizardStepBase::wizardType::INT64,
+ idstr.c_str(),
+ "Int64 value",
+ idtxt.c_str(),
+ item->getDescription().c_str(),
+ item->getValue().c_str(),
+ item->getInfoUrl().c_str()));
+ wizard.setField(idstr.c_str(), item->getValue().c_str());
+ } break;
+
+ case wizardStepBase::wizardType::UINT64: {
+ wizardStepUInt64* item = (wizardStepUInt64*)(*itcfg);
+
+ std::string description = item->getDescription();
+ if (item->isOptional()) {
+ description += " ";
+ description += "(optional)";
+ }
+ else {
+ idstr += "*";
+ }
+
+ wizard.addPage(new ConfigStringPage(this,
+ wizardStepBase::wizardType::UINT64,
+ idstr.c_str(),
+ "Uint64 value",
+ idtxt.c_str(),
+ item->getDescription().c_str(),
+ item->getValue().c_str(),
+ item->getInfoUrl().c_str()));
+ wizard.setField(idstr.c_str(), item->getValue().c_str());
+ } break;
+
+ case wizardStepBase::wizardType::FLOAT: {
+ wizardStepFloat* item = (wizardStepFloat*)(*itcfg);
+
+ std::string description = item->getDescription();
+ if (item->isOptional()) {
+ description += " ";
+ description += "(optional)";
+ }
+ else {
+ idstr += "*";
+ }
+
+ wizard.addPage(new ConfigStringPage(this,
+ wizardStepBase::wizardType::FLOAT,
+ idstr.c_str(),
+ "Floating point value",
+ idtxt.c_str(),
+ item->getDescription().c_str(),
+ item->getValue().c_str(),
+ item->getInfoUrl().c_str()));
+ wizard.setField(idstr.c_str(), item->getValue().c_str());
+ } break;
+
+ case wizardStepBase::wizardType::CHOICE: {
+ std::list choicelist;
+ wizardStepChoice* item = (wizardStepChoice*)(*itcfg);
+
+ std::string description = item->getDescription();
+ if (item->isOptional()) {
+ description += " ";
+ description += "(optional)";
+ }
+ else {
+ idstr += "*";
+ }
+
+ std::vector::iterator it;
+ for (it = item->m_choices.begin(); it != item->m_choices.end(); ++it) {
+ wizardChoiceItem* itemChoice = (wizardChoiceItem*)(*it);
+ choicelist.push_back(itemChoice->getDescription());
+ }
+
+ wizard.addPage(new ConfigChoicePage(this,
+ idstr.c_str(),
+ choicelist,
+ "Choices",
+ idtxt.c_str(),
+ item->getDescription().c_str(),
+ 0,
+ item->getInfoUrl().c_str()));
+ } break;
+
+ default:
+ // we do nothing
+ break;
}
+ }
+
+ // ************************************************************************
+ // Flags
+ // ************************************************************************
+ int flagidx = 0;
+ std::list::iterator itflg;
+ for (itflg = xmlcfg.m_stepsWizardFlags.begin(); itflg != xmlcfg.m_stepsWizardFlags.end(); ++itflg) {
+
+ std::string idstr = vscp_str_format("flag%d", flagidx); // id for wizard flag field
+ flagidx++;
+
+ bool bFlagValue = false;
+ std::string strFlags = getFlagsStr();
+ uint32_t cfgflags = vscp_readStringValue(strFlags);
+ vscp_trim(strFlags);
+ if (strFlags.length()) {
+ bFlagValue = true;
+ }
- // ************************************************************************
- // Last page
- // ************************************************************************
- wizard.addPage(new ConclusionPage);
-
- // ************************************************************************
- // go, go, go...
- // ************************************************************************
- if (wizard.exec()) {
-
- uint32_t flags = 0;
- std::string strConfig;
-
- // Finish - OK
-
- int cfgidx = 0;
- std::list configStrings;
- std::list::iterator itcfg;
- for (itcfg = xmlcfg.m_stepsWizardItems.begin(); itcfg != xmlcfg.m_stepsWizardItems.end(); ++itcfg){
-
- std::string idstr = vscp_str_format("config%d", cfgidx); // id for wizard field
- cfgidx++;
-
- // Set the value
- std::string newValue = wizard.field(idstr.c_str()).toString().toStdString();
- (*itcfg)->setValue(newValue);
-
- qDebug() << "C: " << wizard.field(idstr.c_str()).toString();
- qDebug() << "R: " << (*itcfg)->getRealValue(wizard.field(idstr.c_str()).toString().toStdString()).c_str();
-
- // If optional and no value set we are done
- qDebug() << " O: " << (*itcfg)->isOptional();
- if (!newValue.length() && (*itcfg)->isOptional()) {
- break;
- }
-
- if (strConfig.length()) strConfig += ";";
- strConfig += (*itcfg)->getRealValue(wizard.field(idstr.c_str()).toString().toStdString());
+ switch ((*itflg)->m_type) {
+
+ case wizardStepBase::wizardType::NONE:
+ break;
+
+ case wizardStepBase::wizardType::BOOL: {
+ std::string idtxt;
+ wizardFlagBitBool* item = (wizardFlagBitBool*)(*itflg);
+
+ std::string description = item->getDescription();
+
+ uint8_t width;
+ if ((width = item->getWidth()) > 1) {
+ idtxt = vscp_str_format("Flag bit %d-%d", item->getPos(), item->getPos() + width - 1);
}
+ else {
+ idtxt = vscp_str_format("Flag bit %d", item->getPos());
+ }
+
+ wizard.addPage(new ConfigBoolPage(this,
+ idstr.c_str(),
+ item->getDescription().c_str(),
+ idtxt.c_str(),
+ item->getDescription().c_str(),
+ item->getValue().c_str(),
+ item->getInfoUrl().c_str()));
+ wizard.setField(idstr.c_str(), item->getValue().c_str());
+ } break;
+
+ case wizardStepBase::wizardType::UINT32: {
+ std::string idtxt;
- int flagidx = 0;
- std::list::iterator itflg;
- for (itflg = xmlcfg.m_stepsWizardFlags.begin(); itflg != xmlcfg.m_stepsWizardFlags.end(); ++itflg){
-
- std::string idstr = vscp_str_format("flag%d", flagidx); // id for wizard flag field
- flagidx++;
+ wizardFlagBitNumber* item = (wizardFlagBitNumber*)(*itflg);
+
+ std::string description = item->getDescription();
+
+ uint8_t width;
+ if ((width = item->getWidth()) > 1) {
+ idtxt = vscp_str_format("Flag bit %d-%d", item->getPos(), item->getPos() + width - 1);
+ }
+ else {
+ idtxt = vscp_str_format("Flag bit %d", item->getPos());
+ }
+ // idstr += "*";
+
+ wizard.addPage(new ConfigStringPage(this,
+ wizardStepBase::wizardType::UINT32,
+ idstr.c_str(),
+ "Uint32 value",
+ idtxt.c_str(),
+ item->getDescription().c_str(),
+ item->getValue().c_str(),
+ item->getInfoUrl().c_str(),
+ item->getWidth()));
+ wizard.setField(idstr.c_str(), item->getValue().c_str());
+ } break;
+
+ case wizardStepBase::wizardType::CHOICE: {
+ std::string idtxt;
+
+ std::list choicelist;
+ wizardFlagBitChoice* item = (wizardFlagBitChoice*)(*itflg);
+
+ std::string description = item->getDescription();
+
+ uint8_t width;
+ if ((width = item->getWidth()) > 1) {
+ idtxt = vscp_str_format("Flag bit %d-%d", item->getPos(), item->getPos() + width - 1);
+ }
+ else {
+ idtxt = vscp_str_format("Flag bit %d", item->getPos());
+ }
- qDebug() << "F: " << wizard.field(idstr.c_str()).toString();
- qDebug() << (*itflg)->getRealValue(wizard.field(idstr.c_str()).toString().toStdString());
- flags += (*itflg)->getRealValue(wizard.field(idstr.c_str()).toString().toStdString());
+ std::vector::iterator it;
+ for (it = item->m_choices.begin(); it != item->m_choices.end(); ++it) {
+ wizardBitChoice* itemChoice = (wizardBitChoice*)(*it);
+ choicelist.push_back(itemChoice->getDescription());
}
- qDebug() << "Config str = " << strConfig.c_str();
- setConfig(strConfig.c_str());
+ wizard.addPage(new ConfigChoicePage(this,
+ idstr.c_str(),
+ choicelist,
+ "Choices",
+ idtxt.c_str(),
+ item->getDescription().c_str(),
+ 0,
+ item->getInfoUrl().c_str()));
+ } break;
+
+ default:
+ // we do nothing
+ break;
+ }
+ }
+
+ // ************************************************************************
+ // Last page
+ // ************************************************************************
+ wizard.addPage(new ConclusionPage);
+
+ // ************************************************************************
+ // go, go, go...
+ // ************************************************************************
+ if (wizard.exec()) {
+
+ uint32_t flags = 0;
+ std::string strConfig;
+
+ // Finish - OK
+
+ int cfgidx = 0;
+ std::list configStrings;
+ std::list::iterator itcfg;
+ for (itcfg = xmlcfg.m_stepsWizardItems.begin(); itcfg != xmlcfg.m_stepsWizardItems.end(); ++itcfg) {
- qDebug() << "flags = " << flags;
- setFlags(flags);
+ std::string idstr = vscp_str_format("config%d", cfgidx); // id for wizard field
+ cfgidx++;
+ // Set the value
+ std::string newValue = wizard.field(idstr.c_str()).toString().toStdString();
+ (*itcfg)->setValue(newValue);
+
+ qDebug() << "C: " << wizard.field(idstr.c_str()).toString();
+ qDebug() << "R: " << (*itcfg)->getRealValue(wizard.field(idstr.c_str()).toString().toStdString()).c_str();
+
+ // If optional and no value set we are done
+ qDebug() << " O: " << (*itcfg)->isOptional();
+ if (!newValue.length() && (*itcfg)->isOptional()) {
+ break;
+ }
+
+ if (strConfig.length())
+ strConfig += ";";
+ strConfig += (*itcfg)->getRealValue(wizard.field(idstr.c_str()).toString().toStdString());
}
+ int flagidx = 0;
+ std::list::iterator itflg;
+ for (itflg = xmlcfg.m_stepsWizardFlags.begin(); itflg != xmlcfg.m_stepsWizardFlags.end(); ++itflg) {
+
+ std::string idstr = vscp_str_format("flag%d", flagidx); // id for wizard flag field
+ flagidx++;
+
+ qDebug() << "F: " << wizard.field(idstr.c_str()).toString();
+ qDebug() << (*itflg)->getRealValue(wizard.field(idstr.c_str()).toString().toStdString());
+ flags += (*itflg)->getRealValue(wizard.field(idstr.c_str()).toString().toStdString());
+ }
+
+ qDebug() << "Config str = " << strConfig.c_str();
+ setConfig(strConfig.c_str());
+
+ qDebug() << "flags = " << flags;
+ setFlags(flags);
+ }
}
///////////////////////////////////////////////////////////////////////////////
// filterwizard
//
-void CDlgConnSettingsCanal::filterwizard()
+void
+CDlgConnSettingsCanal::filterwizard()
{
- CDlgLevel1Filter dlg(this);
+ CDlgLevel1Filter dlg(this);
- dlg.disableDescriptionField(); // Description filed is not needed here
+ dlg.disableDescriptionField(); // Description filed is not needed here
- uint32_t canid = vscp_readStringValue(ui->editFilter->text().toStdString());
- uint32_t mask = vscp_readStringValue(ui->editMask->text().toStdString());
+ uint32_t canid = vscp_readStringValue(ui->editFilter->text().toStdString());
+ uint32_t mask = vscp_readStringValue(ui->editMask->text().toStdString());
- dlg.setVscpPriorityFilter(vscp_getHeadFromCANALid(canid) >> 5);
- dlg.setVscpPriorityMask(vscp_getHeadFromCANALid(mask) >> 5);
+ dlg.setVscpPriorityFilter(vscp_getHeadFromCANALid(canid) >> 5);
+ dlg.setVscpPriorityMask(vscp_getHeadFromCANALid(mask) >> 5);
- if (vscp_getHeadFromCANALid(mask) & VSCP_HEADER_HARD_CODED) {
- dlg.setHardcoded(true);
- }
- else {
- dlg.setHardcoded(false);
- }
+ if (vscp_getHeadFromCANALid(mask) & VSCP_HEADER_HARD_CODED) {
+ dlg.setHardcoded(true);
+ }
+ else {
+ dlg.setHardcoded(false);
+ }
- dlg.setVscpClassFilter(vscp_getVscpClassFromCANALid(canid));
- dlg.setVscpClassMask(vscp_getVscpClassFromCANALid(mask));
+ dlg.setVscpClassFilter(vscp_getVscpClassFromCANALid(canid));
+ dlg.setVscpClassMask(vscp_getVscpClassFromCANALid(mask));
- dlg.setVscpTypeFilter(vscp_getVscpTypeFromCANALid(canid));
- dlg.setVscpTypeMask(vscp_getVscpTypeFromCANALid(mask));
+ dlg.setVscpTypeFilter(vscp_getVscpTypeFromCANALid(canid));
+ dlg.setVscpTypeMask(vscp_getVscpTypeFromCANALid(mask));
- dlg.setVscpNodeIdFilter(canid & 0xff);
- dlg.setVscpNodeIdMask(mask & 0xff);
-
- if (QDialog::Accepted == dlg.exec() ) {
+ dlg.setVscpNodeIdFilter(canid & 0xff);
+ dlg.setVscpNodeIdMask(mask & 0xff);
- vscpworks *pworks = (vscpworks *)QCoreApplication::instance();
+ if (QDialog::Accepted == dlg.exec()) {
- uint32_t canid = vscp_getCANALidFromData(dlg.getVscpPriorityFilter(),
- dlg.getVscpClassFilter(),
- dlg.getVscpTypeFilter());
- canid += dlg.getVscpNodeIdFilter();
- if (dlg.getHardcoded()) {
- canid |= (1 << 25);
- }
-
- uint32_t mask = vscp_getCANALidFromData(dlg.getVscpPriorityMask(),
- dlg.getVscpClassMask(),
- dlg.getVscpTypeMask());
- mask += dlg.getVscpNodeIdMask();
- if (dlg.getHardcoded()) {
- mask |= (1 << 25);
- }
+ vscpworks* pworks = (vscpworks*)QCoreApplication::instance();
- if (dlg.getInverted()) {
- mask = ~mask;
- }
-
- ui->editFilter->setText(pworks->decimalToStringInBase(canid));
- ui->editMask->setText(pworks->decimalToStringInBase(mask));
+ uint32_t canid = vscp_getCANALidFromData(dlg.getVscpPriorityFilter(),
+ dlg.getVscpClassFilter(),
+ dlg.getVscpTypeFilter());
+ canid += dlg.getVscpNodeIdFilter();
+ if (dlg.getHardcoded()) {
+ canid |= (1 << 25);
+ }
+ uint32_t mask = vscp_getCANALidFromData(dlg.getVscpPriorityMask(),
+ dlg.getVscpClassMask(),
+ dlg.getVscpTypeMask());
+ mask += dlg.getVscpNodeIdMask();
+ if (dlg.getHardcoded()) {
+ mask |= (1 << 25);
}
-}
+ if (dlg.getInverted()) {
+ mask = ~mask;
+ }
-
+ ui->editFilter->setText(pworks->decimalToStringInBase(canid));
+ ui->editMask->setText(pworks->decimalToStringInBase(mask));
+ }
+}
diff --git a/src/cdlgdatepicker.cpp b/src/cdlgdatepicker.cpp
index e697c7d7..b85cce53 100644
--- a/src/cdlgdatepicker.cpp
+++ b/src/cdlgdatepicker.cpp
@@ -40,6 +40,7 @@
#include
#include
+#include
#include
#include
@@ -81,92 +82,28 @@ void CDlgDatePicker::setInitialFocus(void)
// ui->editGuid->setFocus();
}
-///////////////////////////////////////////////////////////////////////////////
-// setEditMode
-//
-
-void CDlgDatePicker::setEditMode(void)
-{
- // ui->editGuid->setReadOnly(true);
- // ui->btnSetDummyGuid->setVisible(false);
- // ui->editName->setFocus();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// setDummyGuid
-//
-
-// void cdlgdatepicker::setDummyGuid(void)
-// {
-// //ui->editGuid->setText("00:00:00:00:00:00:00:00:00:00:00:00:xx:xx:xx:xx");
-// }
-
-
// ----------------------------------------------------------------------------
// Getters & Setters
// ----------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////
-// getGuid
-//
-
-// QString cdlgdatepicker::getGuid(void)
-// {
-// //return (ui->editGuid->text());
-// }
-
-///////////////////////////////////////////////////////////////////////////////
-// setGuid
+// getDate
//
-// void cdlgdatepicker::setGuid(const QString& str)
-// {
-// //ui->editGuid->setText(str);
-// }
-
-///////////////////////////////////////////////////////////////////////////////
-// getName
-//
-
-// QString cdlgdatepicker::getName(void)
-// {
-// return (ui->editName->text());
-// }
-
-///////////////////////////////////////////////////////////////////////////////
-// setName
-//
-
-// void cdlgdatepicker::setName(const QString& str)
-// {
-// ui->editName->setText(str);
-// }
+QDate CDlgDatePicker::getDate(void)
+{
+ return ui->calendar->selectedDate();
+}
///////////////////////////////////////////////////////////////////////////////
-// getDescription
+// setDate
//
-// QString cdlgdatepicker::getDescription(void)
-// {
-// #if QT_VERSION >= 0x050E00
-// //return (ui->editDescription->toMarkdown());
-// return (ui->editDescription->toPlainText());
-// #else
-// return (ui->editDescription->toPlainText());
-// #endif
-// }
+void CDlgDatePicker::setDate(const QDate& date)
+{
+ ui->calendar->setSelectedDate(date);
+}
-///////////////////////////////////////////////////////////////////////////////
-// setDescription
-//
-// void cdlgdatepicker::setDescription(const QString& str)
-// {
-// #if QT_VERSION >= 0x050E00
-// ui->editDescription->setMarkdown(str);
-// #else
-// ui->editDescription->setText(str);
-// #endif
-// }
diff --git a/src/cdlgdatepicker.h b/src/cdlgdatepicker.h
index 47eee292..5f3c59a0 100644
--- a/src/cdlgdatepicker.h
+++ b/src/cdlgdatepicker.h
@@ -32,52 +32,37 @@
#include
#include
-
+#include
namespace Ui {
class CDlgDatePicker;
}
-
-class CDlgDatePicker : public QDialog
-{
- Q_OBJECT
+class CDlgDatePicker : public QDialog {
+ Q_OBJECT
public:
-
-
public:
- explicit CDlgDatePicker(QWidget *parent = nullptr);
- ~CDlgDatePicker();
-
- /*!
- Set inital focus to description
- */
- void setInitialFocus(void);
-
- /*!
- Set edit mode.
- GUID will be READ ONLY
- */
- void setEditMode(void);
+ explicit CDlgDatePicker(QWidget* parent = nullptr);
+ ~CDlgDatePicker();
-
+ /*!
+ Set inital focus to description
+ */
+ void setInitialFocus(void);
+ // ----------------------------------------------------------------------------
+ // Getters & Setters
+ // ----------------------------------------------------------------------------
- // ----------------------------------------------------------------------------
- // Getters & Setters
- // ----------------------------------------------------------------------------
-
-
-
- public slots:
+ // Date
+ QDate getDate(void);
+ void setDate(const QDate& date);
+public slots:
private:
-
- Ui::CDlgDatePicker *ui;
-
+ Ui::CDlgDatePicker* ui;
};
-
#endif // CDLGDATEPICKER_H
diff --git a/src/cdlgdatepicker.ui b/src/cdlgdatepicker.ui
index d412ae6b..696bd2db 100644
--- a/src/cdlgdatepicker.ui
+++ b/src/cdlgdatepicker.ui
@@ -29,7 +29,7 @@
QDialogButtonBox::Cancel|QDialogButtonBox::Ok
-
+
20
diff --git a/src/cdlgeditmap.cpp b/src/cdlgeditmap.cpp
new file mode 100644
index 00000000..aaf618dd
--- /dev/null
+++ b/src/cdlgeditmap.cpp
@@ -0,0 +1,363 @@
+// cdlgeditmap.cpp
+//
+// This file is part of the VSCP (https://www.vscp.org)
+//
+// The MIT License (MIT)
+//
+// Copyright © 2000-2023 Ake Hedman, Grodans Paradis AB
+//
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+//
+
+#ifdef WIN32
+#include
+#endif
+
+#include
+#include
+
+#include
+
+#include "cdlgeditmap.h"
+#include "ui_cdlgeditmap.h"
+
+#include "cdlgmdfdescription.h"
+#include "cdlgmdfinfourl.h"
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+///////////////////////////////////////////////////////////////////////////////
+// CTor
+//
+
+CDlgEditMap::CDlgEditMap(QWidget* parent)
+ : QDialog(parent)
+ , ui(new Ui::CDlgEditMap)
+{
+ ui->setupUi(this);
+
+ vscpworks* pworks = (vscpworks*)QCoreApplication::instance();
+
+ // QShortcut* shortcut = new QShortcut(QKeySequence(tr("Ctrl+E", "Edit")), ui->editDate);
+ // connect(shortcut, &QShortcut::activated, this, &CDlgEditMap::editDesc);
+
+ // connect(ui->btnSetDummyGuid, &QPushButton::clicked, this, &cdlgmdfmodule::setDummyGuid);
+
+ connect(ui->btnAddMapItem, &QToolButton::clicked, this, &CDlgEditMap::addMapItem);
+ connect(ui->btnEditMapItem, &QToolButton::clicked, this, &CDlgEditMap::editMapItem);
+ connect(ui->btnDupMapItem, &QToolButton::clicked, this, &CDlgEditMap::dupMapItem);
+ connect(ui->btnDelMapItem, &QToolButton::clicked, this, &CDlgEditMap::deleteMapItem);
+
+ setInitialFocus();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// DTor
+//
+
+CDlgEditMap::~CDlgEditMap()
+{
+ delete ui;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// initDialogData
+//
+
+void
+CDlgEditMap::initDialogData(std::map* pmap, descriptionMap type, const QString* pselstr)
+{
+ QString str;
+
+ if (nullptr == pmap) {
+ spdlog::error("MDF module information - Invalid MDF object (initDialogData)");
+ return;
+ }
+
+ m_pMap = pmap;
+
+ fillMapData(pselstr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// fillMapData
+//
+
+void
+CDlgEditMap::fillMapData(const QString* pselstr)
+{
+ QString str;
+
+ // Fill in map data
+ std::map::iterator itMap = m_pMap->begin();
+ while (itMap != m_pMap->end()) {
+ std::string key = itMap->first; // key
+ std::string value = itMap->second;
+ str = key.c_str() + tr(" - ") + value.c_str();
+ ui->listMap->addItem(str);
+ itMap++;
+ }
+
+ // Select row as of MDF frame selection
+ if ((nullptr != pselstr) && pselstr->length()) {
+ for (int i = 0; i < ui->listMap->count(); i++) {
+ QString selstr = ui->listMap->item(i)->text().left(2);
+ qDebug() << selstr << " - " << *pselstr;
+ if (selstr == *pselstr) {
+ ui->listMap->setCurrentRow(i);
+ ui->listMap->item(i)->setSelected(true);
+ }
+ }
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// fillInfoUrl
+//
+
+// void
+// CDlgEditMap::fillInfoUrl()
+// {
+// QString str;
+
+// // Fill in help URL's
+// std::map* pmapHelpUrl = m_pmdf->getModuleHelpUrlMap();
+// std::map::iterator itInfo = pmapHelpUrl->begin();
+// while (itInfo != pmapHelpUrl->end()) {
+// std::string lang = itInfo->first; // key
+// std::string info = itInfo->second;
+// str = lang.c_str() + tr(" - ") + info.c_str();
+// ui->listInfo->addItem(str);
+// itInfo++;
+// }
+// }
+
+///////////////////////////////////////////////////////////////////////////////
+// setInitialFocus
+//
+
+void
+CDlgEditMap::setInitialFocus(void)
+{
+ // ui->editGuid->setFocus();
+}
+
+// ----------------------------------------------------------------------------
+// Getters & Setters
+// ----------------------------------------------------------------------------
+
+///////////////////////////////////////////////////////////////////////////////
+// accept
+//
+
+void
+CDlgEditMap::accept()
+{
+ std::string str;
+ if (nullptr != m_pMap) {
+
+ }
+ else {
+ spdlog::error("MDF map information - Invalid map object (accept)");
+ }
+
+ QDialog::accept();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// addMapItem
+//
+
+void
+CDlgEditMap::addMapItem(void)
+{
+ QString selstr = "en"; // Default language
+
+ CDlgMdfDescription dlg(this);
+ dlg.initDialogData(m_pMap);
+ if (QDialog::Accepted == dlg.exec()) {
+ ui->listMap->clear();
+ fillMapData();
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// editMapItem
+//
+
+void
+CDlgEditMap::editMapItem(void)
+{
+ if (-1 != ui->listMap->currentRow()) {
+
+ // Save the row
+ int idx = ui->listMap->currentRow();
+
+ QListWidgetItem* pitem = ui->listMap->currentItem();
+ QString selstr = pitem->text().split('_').first().left(2);
+
+ CDlgMdfDescription dlg(this);
+ dlg.initDialogData(m_pMap, &selstr);
+ if (QDialog::Accepted == dlg.exec()) {
+ ui->listMap->clear();
+ fillMapData();
+ ui->listMap->setCurrentRow(idx);
+ }
+ }
+ else {
+ QMessageBox::warning(this, tr("vscpworks+"), tr("An item must be selected"), QMessageBox::Ok);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// dupMapItem
+//
+
+void
+CDlgEditMap::dupMapItem(void)
+{
+ if (-1 != ui->listMap->currentRow()) {
+ CDlgMdfDescription dlg(this);
+ dlg.initDialogData(m_pMap);
+ if (QDialog::Accepted == dlg.exec()) {
+ ui->listMap->clear();
+ fillMapData();
+ }
+ }
+ else {
+ QMessageBox::warning(this, tr("vscpworks+"), tr("An item must be selected"), QMessageBox::Ok);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// deleteMapItem
+//
+
+void
+CDlgEditMap::deleteMapItem(void)
+{
+ if (-1 != ui->listMap->currentRow()) {
+
+ // Save the row
+ int idx = ui->listMap->currentRow();
+
+ QListWidgetItem* pitem = ui->listMap->currentItem();
+ QString selstr = pitem->text().split('_').first().left(2);
+
+ m_pMap->erase(selstr.toStdString());
+ ui->listMap->clear();
+ fillMapData();
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// addInfo
+//
+
+// void
+// CDlgEditMap::addInfo(void)
+// {
+// QString selstr = "en"; // Default language
+
+// CDlgMdfInfoUrl dlg(this);
+// dlg.initDialogData(m_pmdf->getModuleHelpUrlMap()/*, &selstr*/);
+// if (QDialog::Accepted == dlg.exec()) {
+// ui->listInfo->clear();
+// fillInfoUrl();
+// }
+// }
+
+///////////////////////////////////////////////////////////////////////////////
+// editInfo
+//
+
+// void
+// CDlgEditMap::editInfo(void)
+// {
+// if (-1 != ui->listInfo->currentRow()) {
+
+// // Save the row
+// int idx = ui->listInfo->currentRow();
+
+// QListWidgetItem* pitem = ui->listInfo->currentItem();
+// QString selstr = pitem->text().split('_').first().left(2);
+
+// CDlgMdfInfoUrl dlg(this);
+// dlg.initDialogData(m_pmdf->getModuleHelpUrlMap(), &selstr);
+// if (QDialog::Accepted == dlg.exec()) {
+// ui->listInfo->clear();
+// fillInfoUrl();
+// ui->listInfo->setCurrentRow(idx);
+// }
+// }
+// else {
+// QMessageBox::warning(this, tr("vscpworks+"), tr("An item must be selected"), QMessageBox::Ok);
+// }
+// }
+
+///////////////////////////////////////////////////////////////////////////////
+// dupInfo
+//
+
+// void
+// CDlgEditMap::dupInfo(void)
+// {
+// if (-1 != ui->listInfo->currentRow()) {
+// CDlgMdfInfoUrl dlg(this);
+// dlg.initDialogData(m_pmdf->getModuleHelpUrlMap());
+// if (QDialog::Accepted == dlg.exec()) {
+// ui->listInfo->clear();
+// fillInfoUrl();
+// }
+// }
+// else {
+// QMessageBox::warning(this, tr("vscpworks+"), tr("An item must be selected"), QMessageBox::Ok);
+// }
+// }
+
+///////////////////////////////////////////////////////////////////////////////
+// deleteInfo
+//
+
+// void
+// CDlgEditMap::deleteInfo(void)
+// {
+// if (-1 != ui->listInfo->currentRow()) {
+
+// // Save the row
+// int idx = ui->listInfo->currentRow();
+
+// QListWidgetItem* pitem = ui->listInfo->currentItem();
+// QString selstr = pitem->text().split('_').first().left(2);
+
+// m_pmdf->getModuleHelpUrlMap()->erase(selstr.toStdString());
+// ui->listInfo->clear();
+// fillInfoUrl();
+
+// }
+// }
\ No newline at end of file
diff --git a/src/cdlgeditmap.h b/src/cdlgeditmap.h
new file mode 100644
index 00000000..408f31e9
--- /dev/null
+++ b/src/cdlgeditmap.h
@@ -0,0 +1,97 @@
+// cdlgeditmap.h
+//
+// This file is part of the VSCP (https://www.vscp.org)
+//
+// The MIT License (MIT)
+//
+// Copyright © 2000-2023 Ake Hedman, Grodans Paradis AB
+//
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+//
+
+#ifndef CDLGEDITMAP_H
+#define CDLGEDITMAP_H
+
+#include
+#include
+
+#include
+
+typedef enum descriptionMap {
+ map_type_description,
+ map_type_info_url
+} descriptionMap;
+
+namespace Ui {
+class CDlgEditMap;
+}
+
+class CDlgEditMap : public QDialog {
+ Q_OBJECT
+
+public:
+public:
+ explicit CDlgEditMap(QWidget* parent = nullptr);
+ ~CDlgEditMap();
+
+ /*!
+ Set inital focus to description
+ */
+ void setInitialFocus(void);
+
+ /*!
+ Init dialog data
+ @param pmap Pointer to map
+ @param pselstr Pointer to ISO639 language string to handle.
+ Set to nullptr to add new item
+ */
+ void initDialogData(std::map *pmap, descriptionMap type, const QString *pselstr = nullptr);
+
+ /*!
+ Fill in Info URL items
+ @param pselstr Pointer to language string or nullptr
+ */
+ void fillMapData(const QString *pselstr = nullptr);
+
+ // ----------------------------------------------------------------------------
+ // Getters & Setters
+ // ----------------------------------------------------------------------------
+
+
+public slots:
+ void accept(void);
+
+ // Description buttons
+ void addMapItem(void);
+ void editMapItem(void);
+ void dupMapItem(void);
+ void deleteMapItem(void);
+
+private:
+ Ui::CDlgEditMap* ui;
+
+ // map data
+ std::map *m_pMap;
+
+ // Initial selstr
+ QString m_initial_selstr;
+};
+
+#endif // CDLGEDITMAP_H
diff --git a/src/cdlgeditmap.ui b/src/cdlgeditmap.ui
new file mode 100644
index 00000000..7621b5b2
--- /dev/null
+++ b/src/cdlgeditmap.ui
@@ -0,0 +1,181 @@
+
+
+ CDlgEditMap
+
+
+
+ 0
+ 0
+ 730
+ 325
+
+
+
+ Dialog
+
+
+
+
+ 0
+ 290
+ 721
+ 32
+
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok
+
+
+ false
+
+
+
+
+
+ 9
+ 10
+ 711
+ 251
+
+
+
+ -
+
+
-
+
+
-
+
+
+ -
+
+
-
+
+
+ Add description item
+
+
+ ...
+
+
+
+ :/add.png:/add.png
+
+
+ Ctrl+A
+
+
+
+ -
+
+
+ Edit description item
+
+
+ ...
+
+
+
+ :/pencil.svg:/pencil.svg
+
+
+ Ctrl+E
+
+
+
+ -
+
+
+ Duplicate description item
+
+
+ ...
+
+
+
+ :/images/svg/copy.svg:/images/svg/copy.svg
+
+
+ Ctrl+D
+
+
+
+ -
+
+
+ Delete Description item
+
+
+ ...
+
+
+
+ :/remove.png:/remove.png
+
+
+ Ctrl+X
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ buttonBox
+ accepted()
+ CDlgEditMap
+ accept()
+
+
+ 360
+ 305
+
+
+ 364
+ 162
+
+
+
+
+ buttonBox
+ rejected()
+ CDlgEditMap
+ reject()
+
+
+ 360
+ 305
+
+
+ 364
+ 162
+
+
+
+
+
diff --git a/src/cdlgmdfdescription.cpp b/src/cdlgmdfdescription.cpp
new file mode 100644
index 00000000..9903880a
--- /dev/null
+++ b/src/cdlgmdfdescription.cpp
@@ -0,0 +1,195 @@
+// cdlgmdfdescription.cpp
+//
+// This file is part of the VSCP (https://www.vscp.org)
+//
+// The MIT License (MIT)
+//
+// Copyright © 2000-2023 Ake Hedman, Grodans Paradis AB
+//
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+//
+
+#ifdef WIN32
+#include
+#endif
+
+#include
+#include
+
+#include
+
+#include "cdlgmdfdescription.h"
+#include "ui_cdlgmdfdescription.h"
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+///////////////////////////////////////////////////////////////////////////////
+// CTor
+//
+
+CDlgMdfDescription::CDlgMdfDescription(QWidget* parent)
+ : QDialog(parent)
+ , ui(new Ui::CDlgMdfDescription)
+{
+ ui->setupUi(this);
+
+ vscpworks* pworks = (vscpworks*)QCoreApplication::instance();
+
+ // https://stackoverflow.com/questions/26307729/get-list-of-languages-in-qt5
+ QList allLocales = QLocale::matchingLocales(
+ QLocale::AnyLanguage,
+ QLocale::AnyScript,
+ QLocale::AnyCountry);
+
+ QStringList iso639LanguageCodes;
+ QStringList iso639Languages;
+
+ for (const QLocale& locale : allLocales) {
+ iso639Languages << QLocale::languageToString(locale.language());
+ iso639LanguageCodes << locale.name().split('_').first().left(2);
+ }
+
+ iso639LanguageCodes.removeDuplicates();
+ iso639LanguageCodes.sort();
+ iso639LanguageCodes.removeOne("C");
+
+ for (auto item = iso639LanguageCodes.begin(), end = iso639LanguageCodes.end(); item != end; ++item) {
+ // qDebug() << *item;
+ ui->comboBoxLang->addItem(*item);
+ }
+
+ connect(ui->btnSetLanguage, &QToolButton::clicked, this, &CDlgMdfDescription::setLang);
+
+ setInitialFocus();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// DTor
+//
+
+CDlgMdfDescription::~CDlgMdfDescription()
+{
+ delete ui;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// initDialogData
+//
+
+void
+CDlgMdfDescription::initDialogData(std::map* pmap, QString* pselstr)
+{
+ QString str;
+
+ if (nullptr == pmap) {
+ spdlog::error("MDF module information - Invalid MDF object (initDialogData)");
+ return;
+ }
+
+ // Save the selection string for edit to
+ if (nullptr != pselstr) {
+ m_initial_selstr = *pselstr;
+ }
+
+ // Save the map pbject
+ m_pMapDesc = pmap;
+
+ QString lang = (nullptr == pselstr) ? "en" : *pselstr;
+
+ if (nullptr != pselstr) {
+ std::string description = pmap->at(pselstr->toStdString());
+ ui->editLanguage->setText(pselstr->toStdString().c_str());
+ ui->editDescription->setText(description.c_str());
+ }
+ else {
+ ui->editLanguage->setText("en");
+ }
+
+ int idx = ui->comboBoxLang->findText(lang.toStdString().c_str());
+ if (-1 != idx) {
+ ui->comboBoxLang->setCurrentIndex(idx);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// setInitialFocus
+//
+
+void
+CDlgMdfDescription::setInitialFocus(void)
+{
+ ui->editDescription->setFocus();
+}
+
+// ----------------------------------------------------------------------------
+// Getters & Setters
+// ----------------------------------------------------------------------------
+
+///////////////////////////////////////////////////////////////////////////////
+// accept
+//
+
+void
+CDlgMdfDescription::accept()
+{
+ std::string str;
+ if (nullptr != m_pMapDesc) {
+
+ str = ui->editLanguage->text().trimmed().left(2).toStdString();
+
+ if (str.length() < 2) {
+ QMessageBox::warning(this, tr("vscpworks+"), tr("Invalid description object. Language must be set to IOS639 value."), QMessageBox::Ok);
+ return;
+ }
+
+ // If selstr has been change in edit mode we have to take
+ // special care (we remove the old key).
+ if (m_initial_selstr.length() && (m_initial_selstr != str.c_str())) {
+ m_pMapDesc->erase(m_initial_selstr.toStdString());
+ }
+
+ QString desc = ui->editDescription->toPlainText();
+ (*m_pMapDesc)[str] = ui->editDescription->toPlainText().toStdString();
+ }
+ else {
+ spdlog::error("MDF module information - Invalid MDF description object (accept)");
+ QMessageBox::warning(this, tr("vscpworks+"), tr("Invalid description object. Unable to save data."), QMessageBox::Ok);
+ }
+
+ QDialog::accept();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// setLang
+//
+
+void
+CDlgMdfDescription::setLang()
+{
+ ui->editLanguage->setText(ui->comboBoxLang->currentText());
+}
\ No newline at end of file
diff --git a/src/cdlgmdfdescription.h b/src/cdlgmdfdescription.h
new file mode 100644
index 00000000..f361408a
--- /dev/null
+++ b/src/cdlgmdfdescription.h
@@ -0,0 +1,83 @@
+// cdlgmdfdescription.h
+//
+// This file is part of the VSCP (https://www.vscp.org)
+//
+// The MIT License (MIT)
+//
+// Copyright © 2000-2023 Ake Hedman, Grodans Paradis AB
+//
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+//
+
+#ifndef CDLGMDFDESCRIPTION_H
+#define CDLGMDFDESCRIPTION_H
+
+#include
+#include
+
+#include
+
+namespace Ui {
+class CDlgMdfDescription;
+}
+
+class CDlgMdfDescription : public QDialog {
+ Q_OBJECT
+
+public:
+public:
+ explicit CDlgMdfDescription(QWidget* parent = nullptr);
+ ~CDlgMdfDescription();
+
+ /*!
+ Set inital focus to description
+ */
+ void setInitialFocus(void);
+
+ /*!
+ Init dialog data
+ @param pmap Pointer to description map
+ @param pselstr Pointer to ISO639 language string to handle.
+ Set to nullptr to add new item
+ */
+ void initDialogData(std::map *pmap, QString *pselstr = nullptr);
+
+ // ----------------------------------------------------------------------------
+ // Getters & Setters
+ // ----------------------------------------------------------------------------
+
+
+
+public slots:
+ void accept(void);
+ void setLang(void);
+
+
+private:
+ Ui::CDlgMdfDescription* ui;
+
+ // Description map
+ std::map *m_pMapDesc;
+
+ // Initial selstr
+ QString m_initial_selstr;
+};
+
+#endif // CDLGMDFDESCRIPTION_H
diff --git a/src/cdlgmdfdescription.ui b/src/cdlgmdfdescription.ui
index 17fa561c..e6852bcd 100644
--- a/src/cdlgmdfdescription.ui
+++ b/src/cdlgmdfdescription.ui
@@ -1,19 +1,23 @@
- CMdfDescription
-
+ CDlgMdfDescription
+
0
0
729
- 318
+ 305
- Dialog
+ MDF Description
-
+
+
+ :/images/png/128x128/page_add.png:/images/png/128x128/page_add.png
+
+
0
@@ -42,8 +46,8 @@
- -
-
+
-
+
Language
@@ -52,7 +56,45 @@
- -
+
-
+
+
-
+
+
+
+ 100
+ 16777215
+
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/svg/left-arrow.svg:/images/svg/left-arrow.svg
+
+
+
+ -
+
+
+
+ 100
+ 16777215
+
+
+
+
+ -
+
+
+
+
+ -
Description
@@ -62,15 +104,47 @@
- -
-
-
- -
-
+
-
+
-
-
+
+
+
+
+
+ buttonBox
+ accepted()
+ CDlgMdfDescription
+ accept()
+
+
+ 355
+ 285
+
+
+ 364
+ 152
+
+
+
+
+ buttonBox
+ rejected()
+ CDlgMdfDescription
+ reject()
+
+
+ 355
+ 285
+
+
+ 364
+ 152
+
+
+
+
diff --git a/src/cdlgmdfinfourl.cpp b/src/cdlgmdfinfourl.cpp
new file mode 100644
index 00000000..9e429131
--- /dev/null
+++ b/src/cdlgmdfinfourl.cpp
@@ -0,0 +1,191 @@
+// cdlgmdfinfourl.cpp
+//
+// This file is part of the VSCP (https://www.vscp.org)
+//
+// The MIT License (MIT)
+//
+// Copyright © 2000-2023 Ake Hedman, Grodans Paradis AB
+//
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+//
+
+#ifdef WIN32
+#include
+#endif
+
+#include
+#include
+
+#include
+
+#include "cdlgmdfinfourl.h"
+#include "ui_cdlgmdfinfourl.h"
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+///////////////////////////////////////////////////////////////////////////////
+// CTor
+//
+
+CDlgMdfInfoUrl::CDlgMdfInfoUrl(QWidget* parent)
+ : QDialog(parent)
+ , ui(new Ui::CDlgMdfInfoUrl)
+{
+ ui->setupUi(this);
+
+ vscpworks* pworks = (vscpworks*)QCoreApplication::instance();
+
+ // https://stackoverflow.com/questions/26307729/get-list-of-languages-in-qt5
+ QList allLocales = QLocale::matchingLocales(
+ QLocale::AnyLanguage,
+ QLocale::AnyScript,
+ QLocale::AnyCountry);
+
+ QStringList iso639LanguageCodes;
+ QStringList iso639Languages;
+
+ for (const QLocale& locale : allLocales) {
+ iso639Languages << QLocale::languageToString(locale.language());
+ iso639LanguageCodes << locale.name().split('_').first().left(2);
+ }
+
+ iso639LanguageCodes.removeDuplicates();
+ iso639LanguageCodes.sort();
+ iso639LanguageCodes.removeOne("C");
+
+ for (auto item = iso639LanguageCodes.begin(), end = iso639LanguageCodes.end(); item != end; ++item) {
+ // qDebug() << *item;
+ ui->comboBoxLang->addItem(*item);
+ }
+
+ connect(ui->btnSetLanguage, &QToolButton::clicked, this, &CDlgMdfInfoUrl::setLang);
+
+ setInitialFocus();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// DTor
+//
+
+CDlgMdfInfoUrl::~CDlgMdfInfoUrl()
+{
+ delete ui;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// initDialogData
+//
+
+void
+CDlgMdfInfoUrl::initDialogData(std::map* pmap, QString* pselstr)
+{
+ QString str;
+
+ if (nullptr == pmap) {
+ spdlog::error("MDF module information - Invalid MDF object (initDialogData)");
+ return;
+ }
+
+ // Save the map pbject
+ m_pMapInfo = pmap;
+
+ QString lang = (nullptr == pselstr) ? "en" : *pselstr;
+
+ if (nullptr != pselstr) {
+ std::string infourl = pmap->at(pselstr->toStdString());
+ ui->editLanguage->setText(pselstr->toStdString().c_str());
+ ui->editInfoUrl->setText(infourl.c_str());
+ }
+ else {
+ ui->editLanguage->setText("en");
+ }
+
+ int idx = ui->comboBoxLang->findText(lang.toStdString().c_str());
+ if (-1 != idx) {
+ ui->comboBoxLang->setCurrentIndex(idx);
+ }
+}
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+// setInitialFocus
+//
+
+void
+CDlgMdfInfoUrl::setInitialFocus(void)
+{
+ ui->editInfoUrl->setFocus();
+}
+
+// ----------------------------------------------------------------------------
+// Getters & Setters
+// ----------------------------------------------------------------------------
+
+///////////////////////////////////////////////////////////////////////////////
+// accept
+//
+
+void
+CDlgMdfInfoUrl::accept()
+{
+ std::string str;
+ if (nullptr != m_pMapInfo) {
+
+ str = ui->editLanguage->text().trimmed().left(2).toStdString();
+
+ if (str.length() < 2) {
+ QMessageBox::warning(this, tr("vscpworks+"), tr("Invalid description object. Language must be set to IOS639 value."), QMessageBox::Ok);
+ return;
+ }
+
+ // If selstr has been change in edit mode we have to take
+ // special care (we remove the old key).
+ if (m_initial_selstr.length() && (m_initial_selstr != str.c_str())) {
+ m_pMapInfo->erase(m_initial_selstr.toStdString());
+ }
+
+ (*m_pMapInfo)[str] = ui->editInfoUrl->toPlainText().toStdString();
+ }
+ else {
+ spdlog::error("MDF module information - Invalid MDF Info URL object (accept)");
+ QMessageBox::warning(this, tr("vscpworks+"), tr("Invalid Info URL object. Unable to save data."), QMessageBox::Ok);
+ }
+
+ QDialog::accept();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// setLang
+//
+
+void
+CDlgMdfInfoUrl::setLang()
+{
+ ui->editLanguage->setText(ui->comboBoxLang->currentText());
+}
diff --git a/src/cdlgmdfinfourl.h b/src/cdlgmdfinfourl.h
new file mode 100644
index 00000000..c25c2f33
--- /dev/null
+++ b/src/cdlgmdfinfourl.h
@@ -0,0 +1,88 @@
+// cdlgmdfinfourl.h
+//
+// This file is part of the VSCP (https://www.vscp.org)
+//
+// The MIT License (MIT)
+//
+// Copyright © 2000-2023 Ake Hedman, Grodans Paradis AB
+//
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+//
+
+#ifndef CDLGMDFINFOURL_H
+#define CDLGMDFINFOURL_H
+
+#include
+#include
+
+#include
+
+namespace Ui {
+class CDlgMdfInfoUrl;
+}
+
+class CDlgMdfInfoUrl : public QDialog {
+ Q_OBJECT
+
+public:
+public:
+ explicit CDlgMdfInfoUrl(QWidget* parent = nullptr);
+ ~CDlgMdfInfoUrl();
+
+ /*!
+ Set inital focus to description
+ */
+ void setInitialFocus(void);
+
+ /*!
+ Init dialog data
+ @param pmap Pointer to description map
+ @param pselstr Pointer to ISO639 language string to handle.
+ Set to nullptr to add new item
+ */
+ void initDialogData(std::map* pmap, QString* pselstr = nullptr);
+
+ // ----------------------------------------------------------------------------
+ // Getters & Setters
+ // ----------------------------------------------------------------------------
+
+ /*!
+ Name getter/setters
+ */
+ void setName(const QString& name);
+ QString getName(void);
+
+public slots:
+ void accept(void);
+ void setLang(void);
+
+private:
+
+ Ui::CDlgMdfInfoUrl* ui;
+
+ // info URL map
+ std::map* m_pMapInfo;
+
+ // Initial selstr
+ QString m_initial_selstr;
+
+};
+
+#endif // CDLGMDFINFOURL_H
diff --git a/src/cdlgmdfinfourl.ui b/src/cdlgmdfinfourl.ui
new file mode 100644
index 00000000..dfe62bbb
--- /dev/null
+++ b/src/cdlgmdfinfourl.ui
@@ -0,0 +1,169 @@
+
+
+ CDlgMdfInfoUrl
+
+
+
+ 0
+ 0
+ 729
+ 304
+
+
+
+ MDF info URL
+
+
+
+
+ 0
+ 270
+ 711
+ 32
+
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok
+
+
+ false
+
+
+
+
+
+ 10
+ 40
+ 701
+ 221
+
+
+
+ -
+
+
+ Info URL
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ false
+
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 100
+ 16777215
+
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/svg/left-arrow.svg:/images/svg/left-arrow.svg
+
+
+
+ -
+
+
+
+ 100
+ 16777215
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
+
+
+ Language
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+
+
+
+
+
+
+ buttonBox
+ accepted()
+ CDlgMdfInfoUrl
+ accept()
+
+
+ 355
+ 285
+
+
+ 364
+ 151
+
+
+
+
+ buttonBox
+ rejected()
+ CDlgMdfInfoUrl
+ reject()
+
+
+ 355
+ 285
+
+
+ 364
+ 151
+
+
+
+
+
diff --git a/src/cdlgmdfmodule.cpp b/src/cdlgmdfmodule.cpp
index 962240e0..68aee819 100644
--- a/src/cdlgmdfmodule.cpp
+++ b/src/cdlgmdfmodule.cpp
@@ -38,8 +38,13 @@
#include "cdlgmdfmodule.h"
#include "ui_cdlgmdfmodule.h"
-#include
+#include "cdlgmdfdescription.h"
+#include "cdlgmdfinfourl.h"
+
+#include
#include
+#include
+#include
#include
#include
@@ -50,17 +55,30 @@
// CTor
//
-CDlgMdfModule::CDlgMdfModule(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::CDlgMdfModule)
+CDlgMdfModule::CDlgMdfModule(QWidget* parent)
+ : QDialog(parent)
+ , ui(new Ui::CDlgMdfModule)
{
- ui->setupUi(this);
+ ui->setupUi(this);
+
+ vscpworks* pworks = (vscpworks*)QCoreApplication::instance();
- vscpworks *pworks = (vscpworks *)QCoreApplication::instance();
+ QShortcut* shortcut = new QShortcut(QKeySequence(tr("Ctrl+E", "Edit")), ui->editDate);
+ connect(shortcut, &QShortcut::activated, this, &CDlgMdfModule::editDesc);
- //connect(ui->btnSetDummyGuid, &QPushButton::clicked, this, &cdlgmdfmodule::setDummyGuid);
-
- setInitialFocus();
+ // connect(ui->btnSetDummyGuid, &QPushButton::clicked, this, &cdlgmdfmodule::setDummyGuid);
+
+ connect(ui->btnAddDesc, &QToolButton::clicked, this, &CDlgMdfModule::addDesc);
+ connect(ui->btnEditDesc, &QToolButton::clicked, this, &CDlgMdfModule::editDesc);
+ connect(ui->btnDupDesc, &QToolButton::clicked, this, &CDlgMdfModule::dupDesc);
+ connect(ui->btnDelDesc, &QToolButton::clicked, this, &CDlgMdfModule::deleteDesc);
+
+ connect(ui->btnAddInfo, &QToolButton::clicked, this, &CDlgMdfModule::addInfo);
+ connect(ui->btnEditInfo, &QToolButton::clicked, this, &CDlgMdfModule::editInfo);
+ connect(ui->btnDupInfo, &QToolButton::clicked, this, &CDlgMdfModule::dupInfo);
+ connect(ui->btnDelInfo, &QToolButton::clicked, this, &CDlgMdfModule::deleteInfo);
+
+ setInitialFocus();
}
///////////////////////////////////////////////////////////////////////////////
@@ -69,16 +87,141 @@ CDlgMdfModule::CDlgMdfModule(QWidget *parent) :
CDlgMdfModule::~CDlgMdfModule()
{
- delete ui;
+ delete ui;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// initDialogData
+//
+
+void
+CDlgMdfModule::initDialogData(const CMDF_Object* pmdfobj, mdf_module_index index)
+{
+ QString str;
+
+ if (nullptr == pmdfobj) {
+ spdlog::error("MDF module information - Invalid MDF object (initDialogData)");
+ return;
+ }
+
+ m_pmdf = (CMDF*)pmdfobj;
+
+ ui->editName->setText(m_pmdf->getModuleName().c_str());
+ ui->editModel->setText(m_pmdf->getModuleModel().c_str());
+ ui->comboModuleLevel->setCurrentIndex(m_pmdf->getModuleLevel());
+ ui->editVersion->setText(m_pmdf->getModuleVersion().c_str());
+ str = m_pmdf->getModuleChangeDate().c_str();
+ ui->editDate->setDate(QDate::fromString(str, Qt::ISODate));
+ ui->editBufferSize->setValue(m_pmdf->getModuleBufferSize());
+ ui->editCopyright->setText(m_pmdf->getModuleCopyright().c_str());
+
+ switch (index) {
+ case index_module_model:
+ ui->editModel->setFocus();
+ break;
+
+ case index_module_version:
+ ui->editVersion->setFocus();
+ break;
+
+ case index_module_level:
+ ui->comboModuleLevel->setFocus();
+ break;
+
+ case index_module_change_date:
+ ui->editDate->setFocus();
+ break;
+
+ case index_module_buffer_size:
+ ui->editBufferSize->setFocus();
+ break;
+
+ case index_module_copyright:
+ ui->editCopyright->setFocus();
+ break;
+
+ case index_module_name:
+ default:
+ ui->editName->setFocus();
+ break;
+ }
+
+ // Fill in descriptions
+ fillDescription();
+
+ // std::map* pmapDescription = m_pmdf->getModuleDescriptionMap();
+ // std::map::iterator itDesc = pmapDescription->begin();
+ // while (itDesc != pmapDescription->end()) {
+ // std::string lang = itDesc->first; // key
+ // std::string description = itDesc->second;
+ // str = lang.c_str() + tr(" - ") + description.c_str();
+ // ui->listDescription->addItem(str);
+ // itDesc++;
+ // }
+
+ // Fill in help URL's
+ fillInfoUrl();
+ // std::map* pmapHelpUrl = m_pmdf->getModuleHelpUrlMap();
+ // std::map::iterator itInfo = pmapHelpUrl->begin();
+ // while (itInfo != pmapHelpUrl->end()) {
+ // std::string lang = itInfo->first; // key
+ // std::string info = itInfo->second;
+ // str = lang.c_str() + tr(" - ") + info.c_str();
+ // ui->listInfo->addItem(str);
+ // itInfo++;
+ // }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// fillDescription
+//
+
+void
+CDlgMdfModule::fillDescription()
+{
+ QString str;
+
+ // Fill in descriptions
+ std::map* pmapDescription = m_pmdf->getModuleDescriptionMap();
+ std::map::iterator itDesc = pmapDescription->begin();
+ while (itDesc != pmapDescription->end()) {
+ std::string lang = itDesc->first; // key
+ std::string description = itDesc->second;
+ str = lang.c_str() + tr(" - ") + description.c_str();
+ ui->listDescription->addItem(str);
+ itDesc++;
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// fillInfoUrl
+//
+
+void
+CDlgMdfModule::fillInfoUrl()
+{
+ QString str;
+
+ // Fill in help URL's
+ std::map* pmapHelpUrl = m_pmdf->getModuleHelpUrlMap();
+ std::map::iterator itInfo = pmapHelpUrl->begin();
+ while (itInfo != pmapHelpUrl->end()) {
+ std::string lang = itInfo->first; // key
+ std::string info = itInfo->second;
+ str = lang.c_str() + tr(" - ") + info.c_str();
+ ui->listInfo->addItem(str);
+ itInfo++;
+ }
}
///////////////////////////////////////////////////////////////////////////////
// setInitialFocus
//
-void CDlgMdfModule::setInitialFocus(void)
+void
+CDlgMdfModule::setInitialFocus(void)
{
- //ui->editGuid->setFocus();
+ // ui->editGuid->setFocus();
}
///////////////////////////////////////////////////////////////////////////////
@@ -92,57 +235,237 @@ void CDlgMdfModule::setInitialFocus(void)
// ui->editName->setFocus();
// }
-
-
// ----------------------------------------------------------------------------
// Getters & Setters
// ----------------------------------------------------------------------------
-
-
///////////////////////////////////////////////////////////////////////////////
// getName
//
-QString CDlgMdfModule::getName(void)
+QString
+CDlgMdfModule::getName(void)
{
- return (ui->editName->text());
+ return (ui->editName->text());
}
///////////////////////////////////////////////////////////////////////////////
// setName
//
-void CDlgMdfModule::setName(const QString& str)
+void
+CDlgMdfModule::setName(const QString& str)
{
- ui->editName->setText(str);
+ ui->editName->setText(str);
}
+
///////////////////////////////////////////////////////////////////////////////
-// getDescription
+// accept
//
-// QString cdlgmdfmodule::getDescription(void)
-// {
-// #if QT_VERSION >= 0x050E00
-// //return (ui->editDescription->toMarkdown());
-// return (ui->editDescription->toPlainText());
-// #else
-// return (ui->editDescription->toPlainText());
-// #endif
-// }
+void
+CDlgMdfModule::accept()
+{
+ std::string str;
+ if (nullptr != m_pmdf) {
+
+ str = ui->editName->text().toStdString();
+ m_pmdf->setModuleName(str);
+
+ str = ui->editModel->text().toStdString();
+ m_pmdf->setModuleModel(str);
+
+ m_pmdf->setModuleLevel(ui->comboModuleLevel->currentIndex());
+
+ str = ui->editVersion->text().toStdString();
+ m_pmdf->setModuleVersion(str);
+
+ str = ui->editDate->text().toStdString();
+ m_pmdf->setModuleChangeDate(str);
+
+ m_pmdf->setModuleBufferSize(ui->editBufferSize->value());
+
+ str = ui->editCopyright->text().toStdString();
+ m_pmdf->setModuleCopyright(str);
+ }
+ else {
+ spdlog::error("MDF module information - Invalid MDF object (accept)");
+ }
+
+ QDialog::accept();
+}
///////////////////////////////////////////////////////////////////////////////
-// setDescription
+// addDesc
//
-// void cdlgmdfmodule::setDescription(const QString& str)
-// {
-// #if QT_VERSION >= 0x050E00
-// ui->editDescription->setMarkdown(str);
-// #else
-// ui->editDescription->setText(str);
-// #endif
-// }
+void
+CDlgMdfModule::addDesc(void)
+{
+ QString selstr = "en"; // Default language
+
+ CDlgMdfDescription dlg(this);
+ dlg.initDialogData(m_pmdf->getModuleDescriptionMap()/*, &selstr*/);
+ if (QDialog::Accepted == dlg.exec()) {
+ ui->listDescription->clear();
+ fillDescription();
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// editDesc
+//
+
+void
+CDlgMdfModule::editDesc(void)
+{
+ if (-1 != ui->listDescription->currentRow()) {
+
+ // Save the row
+ int idx = ui->listDescription->currentRow();
+
+ QListWidgetItem* pitem = ui->listDescription->currentItem();
+ QString selstr = pitem->text().split('_').first().left(2);
+
+ CDlgMdfDescription dlg(this);
+ dlg.initDialogData(m_pmdf->getModuleDescriptionMap(), &selstr);
+ if (QDialog::Accepted == dlg.exec()) {
+ ui->listDescription->clear();
+ fillDescription();
+ ui->listDescription->setCurrentRow(idx);
+ }
+ }
+ else {
+ QMessageBox::warning(this, tr("vscpworks+"), tr("An item must be selected"), QMessageBox::Ok);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// dupDesc
+//
+
+void
+CDlgMdfModule::dupDesc(void)
+{
+ if (-1 != ui->listDescription->currentRow()) {
+ CDlgMdfDescription dlg(this);
+ dlg.initDialogData(m_pmdf->getModuleDescriptionMap());
+ if (QDialog::Accepted == dlg.exec()) {
+ ui->listDescription->clear();
+ fillDescription();
+ }
+ }
+ else {
+ QMessageBox::warning(this, tr("vscpworks+"), tr("An item must be selected"), QMessageBox::Ok);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// deleteDesc
+//
+
+void
+CDlgMdfModule::deleteDesc(void)
+{
+ if (-1 != ui->listDescription->currentRow()) {
+
+ // Save the row
+ int idx = ui->listDescription->currentRow();
+
+ QListWidgetItem* pitem = ui->listDescription->currentItem();
+ QString selstr = pitem->text().split('_').first().left(2);
+
+ m_pmdf->getModuleDescriptionMap()->erase(selstr.toStdString());
+ ui->listDescription->clear();
+ fillDescription();
+
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// addInfo
+//
+
+void
+CDlgMdfModule::addInfo(void)
+{
+ QString selstr = "en"; // Default language
+
+ CDlgMdfInfoUrl dlg(this);
+ dlg.initDialogData(m_pmdf->getModuleHelpUrlMap()/*, &selstr*/);
+ if (QDialog::Accepted == dlg.exec()) {
+ ui->listInfo->clear();
+ fillInfoUrl();
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// editInfo
+//
+
+void
+CDlgMdfModule::editInfo(void)
+{
+ if (-1 != ui->listInfo->currentRow()) {
+
+ // Save the row
+ int idx = ui->listInfo->currentRow();
+
+ QListWidgetItem* pitem = ui->listInfo->currentItem();
+ QString selstr = pitem->text().split('_').first().left(2);
+
+ CDlgMdfInfoUrl dlg(this);
+ dlg.initDialogData(m_pmdf->getModuleHelpUrlMap(), &selstr);
+ if (QDialog::Accepted == dlg.exec()) {
+ ui->listInfo->clear();
+ fillInfoUrl();
+ ui->listInfo->setCurrentRow(idx);
+ }
+ }
+ else {
+ QMessageBox::warning(this, tr("vscpworks+"), tr("An item must be selected"), QMessageBox::Ok);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// dupInfo
+//
+
+void
+CDlgMdfModule::dupInfo(void)
+{
+ if (-1 != ui->listInfo->currentRow()) {
+ CDlgMdfInfoUrl dlg(this);
+ dlg.initDialogData(m_pmdf->getModuleHelpUrlMap());
+ if (QDialog::Accepted == dlg.exec()) {
+ ui->listInfo->clear();
+ fillInfoUrl();
+ }
+ }
+ else {
+ QMessageBox::warning(this, tr("vscpworks+"), tr("An item must be selected"), QMessageBox::Ok);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// deleteInfo
+//
+
+void
+CDlgMdfModule::deleteInfo(void)
+{
+ if (-1 != ui->listInfo->currentRow()) {
+
+ // Save the row
+ int idx = ui->listInfo->currentRow();
+
+ QListWidgetItem* pitem = ui->listInfo->currentItem();
+ QString selstr = pitem->text().split('_').first().left(2);
+ m_pmdf->getModuleHelpUrlMap()->erase(selstr.toStdString());
+ ui->listInfo->clear();
+ fillInfoUrl();
+ }
+}
\ No newline at end of file
diff --git a/src/cdlgmdfmodule.h b/src/cdlgmdfmodule.h
index bcb279cc..8bff6116 100644
--- a/src/cdlgmdfmodule.h
+++ b/src/cdlgmdfmodule.h
@@ -30,99 +30,143 @@
#define CDLGMDFMODULE_H
#include
+#include
#include
+// Id for fields to identify them in the UI.
+// Use to set focus on edit and to write changed values
+// in correct position among other things.
+typedef enum mdf_module_index {
+ index_module_name = 0,
+ index_module_model,
+ index_module_level,
+ index_module_version,
+ index_module_change_date,
+ index_module_buffer_size,
+ index_module_copyright
+} mdf_module_index;
+
+// Tree prefixes (Text before value in tree table)
+#define PREFIX_MDF_MODULE_NAME tr("Name : ")
+#define PREFIX_MDF_MODULE_MODEL tr("Model: ")
+#define PREFIX_MDF_MODULE_LEVEL tr("VSCP Level: ")
+#define PREFIX_MDF_MODULE_VERSION tr("Version: ")
+#define PREFIX_MDF_MODULE_CHANGE_DATE tr("Change Date: ")
+#define PREFIX_MDF_MODULE_BUFFER_SIZE tr("Buffer Size: ")
+#define PREFIX_MDF_MODULE_COPYRIGHT tr("Copyright: ")
namespace Ui {
class CDlgMdfModule;
}
-
-class CDlgMdfModule : public QDialog
-{
- Q_OBJECT
+class CDlgMdfModule : public QDialog {
+ Q_OBJECT
public:
-
-
public:
- explicit CDlgMdfModule(QWidget *parent = nullptr);
- ~CDlgMdfModule();
-
- /*!
- Set inital focus to description
- */
- void setInitialFocus(void);
-
- /*!
- Set edit mode.
- GUID will be READ ONLY
- */
- void setEditMode(void);
-
- /*!
- Set Dummy GUID
- */
- void setDummyGuid(void);
-
-
- // ----------------------------------------------------------------------------
- // Getters & Setters
- // ----------------------------------------------------------------------------
-
- /*!
- Name getter/setters
- */
- void setName(const QString& name);
- QString getName(void);
-
- /*!
- GUID getter/setters
- */
- void setModel(const QString& guid);
- QString getModel(void);
-
- /*!
- GUID getter/setters
- */
- void setVersion(const QString& guid);
- QString getVersion(void);
-
- /*!
- GUID getter/setters
- */
- void setChangeDate(const QString& guid);
- QString getChangeDate(void);
-
- /*!
- GUID getter/setters
- */
- void setBufferSize(int size);
- int getBufferSize(void);
-
- /*!
- GUID getter/setters
- */
- void setCopyright(const QString& guid);
- QString getCopyright(void);
-
- /*!
- GUID getter/setters
- */
- void setDescription(const QString& guid);
- QString getDescription(void);
-
-
-
- public slots:
-
+ explicit CDlgMdfModule(QWidget* parent = nullptr);
+ ~CDlgMdfModule();
+
+ /*!
+ Set inital focus to description
+ */
+ void setInitialFocus(void);
+
+ /*!
+ Set edit mode.
+ GUID will be READ ONLY
+ */
+ void setEditMode();
+
+ /*!
+ Init dialog data
+ @param pmdfobject Pointer to MDF object
+ @param index The index for the field that will get focus
+ 0 - Module name
+ 1 - Module name
+ 2 - Module version
+ 4 - Module date
+ 5 - Module buffer size
+ 6 - Module copyright
+
+ */
+ void initDialogData(const CMDF_Object* pmdfobj, mdf_module_index index = index_module_name);
+
+ /*!
+ Fill in description items
+ */
+ void fillDescription(void);
+
+ /*!
+ Fill in Info URL items
+ */
+ void fillInfoUrl(void);
+
+ // ----------------------------------------------------------------------------
+ // Getters & Setters
+ // ----------------------------------------------------------------------------
+
+ /*!
+ Name getter/setters
+ */
+ void setName(const QString& name);
+ QString getName(void);
+
+ /*!
+ GUID getter/setters
+ */
+ void setModel(const QString& guid);
+ QString getModel(void);
+
+ /*!
+ GUID getter/setters
+ */
+ void setVersion(const QString& guid);
+ QString getVersion(void);
+
+ /*!
+ GUID getter/setters
+ */
+ void setChangeDate(const QString& guid);
+ QString getChangeDate(void);
+
+ /*!
+ GUID getter/setters
+ */
+ void setBufferSize(int size);
+ int getBufferSize(void);
+
+ /*!
+ GUID getter/setters
+ */
+ void setCopyright(const QString& guid);
+ QString getCopyright(void);
+
+ /*!
+ GUID getter/setters
+ */
+ void setDescription(const QString& guid);
+ QString getDescription(void);
+
+public slots:
+ void accept(void);
+
+ // Description buttons
+ void addDesc(void);
+ void editDesc(void);
+ void dupDesc(void);
+ void deleteDesc(void);
+
+ // Info URL buttons
+ void addInfo(void);
+ void editInfo(void);
+ void dupInfo(void);
+ void deleteInfo(void);
private:
-
- Ui::CDlgMdfModule *ui;
-
+ Ui::CDlgMdfModule* ui;
+ CMDF* m_pmdf;
};
-
#endif // CDLGMDFMODULE_H
diff --git a/src/cdlgmdfmodule.ui b/src/cdlgmdfmodule.ui
index 968a2971..675291d4 100644
--- a/src/cdlgmdfmodule.ui
+++ b/src/cdlgmdfmodule.ui
@@ -7,11 +7,11 @@
0
0
819
- 545
+ 626
- Dialog
+ MDF Module information
@@ -19,7 +19,7 @@
10
30
781
- 441
+ 547
@@ -43,16 +43,6 @@
- -
-
-
- Path to file containg VSCP events
-
-
-
-
-
-
-
@@ -63,47 +53,54 @@
- -
-
-
- Version
+
-
+
+
+ Path to file containg VSCP events
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
- -
-
+
-
+
- Changed
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+ Level
- -
-
-
- Description
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
-
+
+
+
+ 100
+ 16777215
+
+
-
+
+ Level 1
+
+
+ -
+
+ Level 2
+
+
- -
-
+
-
+
- Info.URL
+ Version
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- -
+
-
Path to file containg VSCP events
@@ -113,7 +110,7 @@
- -
+
-
Buffer size
@@ -123,7 +120,17 @@
- -
+
-
+
+
+
+ 100
+ 16777215
+
+
+
+
+ -
Copyright
@@ -133,7 +140,7 @@
- -
+
-
Qt::WheelFocus
@@ -146,26 +153,263 @@
- -
-
+
-
+
+
+ Description
+
+
+
+ -
+
+
-
+
+
-
+
+
+ -
+
+
-
+
+
+ Add description item
+
+
+ ...
+
+
+
+ :/add.png:/add.png
+
+
+ Ctrl+A
+
+
+
+ -
+
+
+ Edit description item
+
+
+ ...
+
+
+
+ :/pencil.svg:/pencil.svg
+
+
+ Ctrl+E
+
+
+
+ -
+
+
+ Duplicate description item
+
+
+ ...
+
+
+
+ :/images/svg/copy.svg:/images/svg/copy.svg
+
+
+ Ctrl+D
+
+
+
+ -
+
+
+ Delete Description item
+
+
+ ...
+
+
+
+ :/remove.png:/remove.png
+
+
+ Ctrl+X
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ Info.URL
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
- -
-
+
-
+
+
-
+
+
-
+
+
+ -
+
+
-
+
+
+ Add Info URL item
+
+
+ ...
+
+
+
+ :/add.png:/add.png
+
+
+ Ctrl+A
+
+
+
+ -
+
+
+ Edit Info URL item
+
+
+ ...
+
+
+
+ :/pencil.svg:/pencil.svg
+
+
+ Ctrl+E
+
+
+
+ -
+
+
+ Duplicate Info URL item
+
+
+ ...
+
+
+
+ :/images/svg/copy.svg:/images/svg/copy.svg
+
+
+ Ctrl+D
+
+
+
+ -
+
+
+ Delete Info URL item
+
+
+ ...
+
+
+
+ :/remove.png:/remove.png
+
+
+ Ctrl+X
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
- -
-
+
-
+
+
-
+
+
+
+ 500
+ 16777215
+
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
- -
-
+
-
+
+
+ Changed
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
-
+
10
- 500
- 801
+ 590
+ 781
32
@@ -180,6 +424,41 @@
-
-
+
+
+
+
+
+ buttonBox
+ accepted()
+ CDlgMdfModule
+ accept()
+
+
+ 410
+ 515
+
+
+ 409
+ 272
+
+
+
+
+ buttonBox
+ rejected()
+ CDlgMdfModule
+ reject()
+
+
+ 410
+ 515
+
+
+ 409
+ 272
+
+
+
+
diff --git a/src/cfrmmdf.cpp b/src/cfrmmdf.cpp
index ceefa06d..b2eb5b10 100644
--- a/src/cfrmmdf.cpp
+++ b/src/cfrmmdf.cpp
@@ -47,6 +47,9 @@
#include "cfrmmdf.h"
#include "ui_cfrmmdf.h"
+#include "cdlgeditmap.h"
+#include "cdlgmdfmodule.h"
+
#include
#include
#include
@@ -80,11 +83,11 @@ QMdfTreeWidgetItem::QMdfTreeWidgetItem(mdf_record_type objtype)
m_pMdfRecord = nullptr;
}
-QMdfTreeWidgetItem::QMdfTreeWidgetItem(CMDF_Object* pobj, mdf_record_type objtype)
+QMdfTreeWidgetItem::QMdfTreeWidgetItem(CMDF_Object* pobj, mdf_record_type objtype, uint16_t index)
: QTreeWidgetItem(QTreeWidgetItem::Type)
{
m_objType = objtype;
- m_fieldIndex = 0;
+ m_fieldIndex = index;
m_pMdfRecord = pobj;
}
@@ -96,12 +99,15 @@ QMdfTreeWidgetItem::QMdfTreeWidgetItem(QTreeWidgetItem* parent, mdf_record_type
m_pMdfRecord = nullptr;
}
-QMdfTreeWidgetItem::QMdfTreeWidgetItem(QTreeWidgetItem* parent, CMDF_Object* pobj, mdf_record_type objtype)
+QMdfTreeWidgetItem::QMdfTreeWidgetItem(QTreeWidgetItem* parent,
+ CMDF_Object* pobj,
+ mdf_record_type objtype,
+ uint16_t index)
: QTreeWidgetItem(parent, QTreeWidgetItem::Type)
{
m_objType = objtype;
- m_fieldIndex = 0;
- m_pMdfRecord = nullptr;
+ m_fieldIndex = index;
+ m_pMdfRecord = pobj;
}
QMdfTreeWidgetItem::~QMdfTreeWidgetItem()
@@ -159,12 +165,15 @@ CFrmMdf::CFrmMdf(QWidget* parent, const char* path)
this,
&CFrmMdf::showMdfContextMenu);
- // New has been selected in the menu
+ // New has been selected in the menu - Create new MDF file
connect(ui->actionNew, SIGNAL(triggered()), this, SLOT(newMdf()));
- // Open has been selected in the menu
+ // Open has been selected in the menu - Open new MDF file
connect(ui->actionOpen, SIGNAL(triggered()), this, SLOT(openMdf()));
+ // Open has been selected in the menu - Edit Module info
+ connect(ui->actionEdit_item, SIGNAL(triggered()), this, SLOT(editModuleData()));
+
// Register row has been clicked.
connect(ui->treeMDF,
&QTreeWidget::itemClicked,
@@ -262,6 +271,7 @@ CFrmMdf::showMdfContextMenu(const QPoint& pos)
QMenu* menu = new QMenu(this);
QMdfTreeWidgetItem* pItem = (QMdfTreeWidgetItem*)ui->treeMDF->currentItem();
+
if (nullptr == pItem) {
menu->addAction(QString(tr("Fetch MDF")), this, SLOT(loadSelectedMdf()));
menu->addAction(QString(tr("Fetch ALL MDF")), this, SLOT(loadAllMdf()));
@@ -282,7 +292,11 @@ CFrmMdf::showMdfContextMenu(const QPoint& pos)
break;
case mdf_type_mdf:
- menu->addAction(QString(tr("MDF")), this, SLOT(loadSelectedMdf()));
+ menu->addAction(QString(tr("Edit")), this, SLOT(editModuleData()));
+ break;
+
+ case mdf_type_mdf_item:
+ menu->addAction(QString(tr("Edit")), this, SLOT(editModuleData()));
break;
case mdf_type_value:
@@ -462,19 +476,19 @@ CFrmMdf::showMdfContextMenu(const QPoint& pos)
break;
case mdf_type_generic_description:
- menu->addAction(QString(tr("description")), this, SLOT(loadSelectedMdf()));
+ menu->addAction(QString(tr("Edit Descriptions")), this, SLOT(editDescription()));
break;
case mdf_type_generic_description_item:
- menu->addAction(QString(tr("description item")), this, SLOT(loadSelectedMdf()));
+ menu->addAction(QString(tr("Edit Description")), this, SLOT(editDescription()));
break;
case mdf_type_generic_help_url:
- menu->addAction(QString(tr("help url")), this, SLOT(loadSelectedMdf()));
+ menu->addAction(QString(tr("Edit Info URL's")), this, SLOT(editInfoUrl()));
break;
case mdf_type_generic_help_url_item:
- menu->addAction(QString(tr("help url item")), this, SLOT(loadSelectedMdf()));
+ menu->addAction(QString(tr("Edit Info URL")), this, SLOT(editInfoUrl()));
break;
default:
@@ -491,24 +505,33 @@ CFrmMdf::showMdfContextMenu(const QPoint& pos)
//
void
-CFrmMdf::fillDescriptionItems(QTreeWidgetItem* pParent, std::map* pObjMap)
+CFrmMdf::fillDescriptionItems(QTreeWidgetItem* pParent, CMDF_Object* pobj, std::map* pObjMap, bool bChildIsKnown)
{
QString str;
+ QMdfTreeWidgetItem* pItemModuleDescription;
QMdfTreeWidgetItem* pItem;
-https: // www.facebook.com/v10.0/dialog/share?app_id=69103156693&channel_url=https%3A%2F%2Fstaticxx.facebook.com%2Fx%2Fconnect%2Fxd_arbiter%2F%3Fversion%3D46%23cb%3Df150d58de1db8e4%26domain%3Dwww.kickstarter.com%26is_canvas%3Dfalse%26origin%3Dhttps%253A%252F%252Fwww.kickstarter.com%252Ffe4a197826998%26relation%3Dopener&display=popup&e2e=%7B%7D&fallback_redirect_uri=https%3A%2F%2Fwww.kickstarter.com%2Fprojects%2Ffolkparksminnen60-99%2Ffolkparksminnen%3Ffbclid%3DIwAR2INbiHAcN1yOkmITEWLu_t0m3KC6et_gZUFpPQhuqO9UhYd_Xr1dLzW4Q&href=https%3A%2F%2Fwww.kickstarter.com%2Fprojects%2Ffolkparksminnen60-99%2Ffolkparksminnen%3Fref%3Dproject_facebook&locale=en_US&next=https%3A%2F%2Fstaticxx.facebook.com%2Fx%2Fconnect%2Fxd_arbiter%2F%3Fversion%3D46%23cb%3Df293d257f56a6d8%26domain%3Dwww.kickstarter.com%26is_canvas%3Dfalse%26origin%3Dhttps%253A%252F%252Fwww.kickstarter.com%252Ffe4a197826998%26relation%3Dopener%26frame%3Df133ebcd98d41c8%26result%3D%2522xxRESULTTOKENxx%2522&sdk=joey&version=v10.0
// Must be valid pointer
if (nullptr == pParent) {
return;
}
+ if (nullptr == pobj) {
+ return;
+ }
+
if (nullptr == pObjMap) {
return;
}
- QMdfTreeWidgetItem* pItemModuleDescription = new QMdfTreeWidgetItem(pParent, mdf_type_generic_description);
- pItemModuleDescription->setText(0, "Description");
- pParent->addChild(pItemModuleDescription);
+ if (!bChildIsKnown) {
+ pItemModuleDescription = new QMdfTreeWidgetItem(pParent, pobj, mdf_type_generic_description);
+ pItemModuleDescription->setText(0, "Description");
+ pParent->addChild(pItemModuleDescription);
+ }
+ else {
+ pItemModuleDescription = (QMdfTreeWidgetItem*)pParent;
+ }
// Must be items to fill in childs
if (!pObjMap->size()) {
@@ -518,7 +541,7 @@ CFrmMdf::fillDescriptionItems(QTreeWidgetItem* pParent, std::map* pmap = pObjMap;
for (auto const& x : *pmap) {
str = x.first.c_str() + QString(": ") + x.second.c_str();
- pItem = new QMdfTreeWidgetItem(pItemModuleDescription, mdf_type_generic_description_item);
+ pItem = new QMdfTreeWidgetItem(pItemModuleDescription, pobj, mdf_type_generic_description_item);
pItem->setText(0, str);
pParent->addChild(pItem);
}
@@ -529,9 +552,10 @@ CFrmMdf::fillDescriptionItems(QTreeWidgetItem* pParent, std::map* pObjMap)
+CFrmMdf::fillHelpUrlItems(QTreeWidgetItem* pParent, CMDF_Object* pobj, std::map* pObjMap, bool bChildIsKnown)
{
QString str;
+ QMdfTreeWidgetItem* pItemModuleHelpUrl;
QMdfTreeWidgetItem* pItem;
// Must be valid pointer
@@ -539,13 +563,22 @@ CFrmMdf::fillHelpUrlItems(QTreeWidgetItem* pParent, std::mapsetText(0, "Help/Info URL");
- pParent->addChild(pItemModuleHelpUrl);
+ if (!bChildIsKnown) {
+ pItemModuleHelpUrl = new QMdfTreeWidgetItem(pParent, pobj, mdf_type_generic_help_url);
+ pItemModuleHelpUrl->setText(0, "Help/Info URL");
+ pParent->addChild(pItemModuleHelpUrl);
+ }
+ else {
+ pItemModuleHelpUrl = (QMdfTreeWidgetItem*)pParent;
+ }
// Must be items to fill in childs
if (!pObjMap->size()) {
@@ -555,7 +588,7 @@ CFrmMdf::fillHelpUrlItems(QTreeWidgetItem* pParent, std::map* pmap = pObjMap;
for (auto const& x : *pmap) {
str = x.first.c_str() + QString(": ") + x.second.c_str();
- pItem = new QMdfTreeWidgetItem(pItemModuleHelpUrl, mdf_type_generic_help_url_item);
+ pItem = new QMdfTreeWidgetItem(pItemModuleHelpUrl, pobj, mdf_type_generic_help_url_item);
pItem->setText(0, str);
pParent->addChild(pItem);
}
@@ -650,10 +683,10 @@ CFrmMdf::fillBitInfo(QTreeWidgetItem* pParent, std::deque& dequebits)
fillValueInfo(pItemParent, *pbit->getListValues());
// Descriptions
- fillDescriptionItems(pItemParent, pbit->getMapDescription());
+ fillDescriptionItems(pItemParent, pbit, pbit->getMapDescription());
// Info URL's
- fillHelpUrlItems(pItemParent, pbit->getMapDescription());
+ fillHelpUrlItems(pItemParent, pbit, pbit->getMapDescription());
}
}
@@ -705,10 +738,10 @@ CFrmMdf::fillValueInfo(QTreeWidgetItem* pParent, std::deque& dequev
pItemValue->addChild(pItem);
// Descriptions
- fillDescriptionItems(pItemParent, pvalue->getMapDescription());
+ fillDescriptionItems(pItemParent, pvalue, pvalue->getMapDescription());
// Info URL's
- fillHelpUrlItems(pItemParent, pvalue->getMapDescription());
+ fillHelpUrlItems(pItemParent, pvalue, pvalue->getMapDescription());
}
}
@@ -849,10 +882,10 @@ CFrmMdf::fillRegisterInfo(QTreeWidgetItem* pParent, CMDF_Register* preg)
fillValueInfo(pParent, *preg->getListValues());
// Descriptions
- fillDescriptionItems(pParent, preg->getMapDescription());
+ fillDescriptionItems(pParent, preg, preg->getMapDescription());
// Info URL's
- fillHelpUrlItems(pParent, preg->getMapDescription());
+ fillHelpUrlItems(pParent, preg, preg->getMapDescription());
}
///////////////////////////////////////////////////////////////////////////////
@@ -886,46 +919,47 @@ CFrmMdf::loadMdf(void)
pItemModule->setFont(0, fontTopItem);
pItemModule->setForeground(0, blueBrush);
pItemModule->setText(0, tr("Module"));
- pItemModule->setObject(&m_mdf);
+ // pItemModule->setObject(&m_mdf);
ui->treeMDF->addTopLevelItem(pItemModule);
+ pItemModule->setExpanded(true);
// Module information
- pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_generic_string);
- pItem->setText(0, QString("Name: ") + m_mdf.getModuleName().c_str());
+ pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_mdf_item, index_module_name);
+ pItem->setText(0, PREFIX_MDF_MODULE_NAME + m_mdf.getModuleName().c_str());
pItemModule->addChild(pItem);
- str = QString("Copyright: ") + m_mdf.getModuleCopyright().c_str();
- pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_generic_string);
+ str = PREFIX_MDF_MODULE_MODEL + QString(m_mdf.getModuleModel().c_str());
+ pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_mdf_item, index_module_model);
pItem->setText(0, str);
pItemModule->addChild(pItem);
- str = QString("Change Date: ") + m_mdf.getModuleChangeDate().c_str();
- pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_generic_string);
+ str = PREFIX_MDF_MODULE_LEVEL + QString::number(m_mdf.getModuleLevel() + 1);
+ pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_mdf_item, index_module_level);
pItem->setText(0, str);
pItemModule->addChild(pItem);
- str = "VSCP Level: " + QString::number(m_mdf.getModuleLevel() + 1);
- pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_generic_number);
+ str = PREFIX_MDF_MODULE_VERSION + QString(m_mdf.getModuleVersion().c_str());
+ pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_mdf_item, index_module_version);
pItem->setText(0, str);
pItemModule->addChild(pItem);
- str = "Model: " + QString(m_mdf.getModuleModel().c_str());
- pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_generic_string);
+ str = PREFIX_MDF_MODULE_CHANGE_DATE + m_mdf.getModuleChangeDate().c_str();
+ pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_mdf_item, index_module_change_date);
pItem->setText(0, str);
pItemModule->addChild(pItem);
- str = "Version: " + QString(m_mdf.getModuleVersion().c_str());
- pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_generic_string);
+ str = PREFIX_MDF_MODULE_BUFFER_SIZE + QString::number(m_mdf.getModuleBufferSize());
+ pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_mdf_item, index_module_buffer_size);
pItem->setText(0, str);
pItemModule->addChild(pItem);
- str = "Buffer size: " + QString::number(m_mdf.getModuleBufferSize());
- pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_generic_number);
+ str = PREFIX_MDF_MODULE_COPYRIGHT + m_mdf.getModuleCopyright().c_str();
+ pItem = new QMdfTreeWidgetItem(pItemModule, &m_mdf, mdf_type_mdf_item, index_module_copyright);
pItem->setText(0, str);
pItemModule->addChild(pItem);
- fillDescriptionItems(pItemModule, m_mdf.getModuleDescriptionMap());
- fillHelpUrlItems(pItemModule, m_mdf.getModuleHelpUrlMap());
+ fillDescriptionItems(pItemModule, &m_mdf, m_mdf.getModuleDescriptionMap());
+ fillHelpUrlItems(pItemModule, &m_mdf, m_mdf.getModuleHelpUrlMap());
// * * * Manufacturer info * * *
@@ -988,8 +1022,8 @@ CFrmMdf::loadMdf(void)
pItem = new QMdfTreeWidgetItem(pItemManufacturer, mdf_type_email);
pItem->setText(0, str);
pItemModule->addChild(pItem);
- fillDescriptionItems(pItem, pManufacturer->getEmailObj()->getDescriptionMap());
- fillHelpUrlItems(pItem, pManufacturer->getEmailObj()->getInfoUrlMap());
+ fillDescriptionItems(pItem, pManufacturer->getEmailObj(), pManufacturer->getEmailObj()->getDescriptionMap());
+ fillHelpUrlItems(pItem, pManufacturer->getEmailObj(), pManufacturer->getEmailObj()->getInfoUrlMap());
}
} while (nullptr != pItemEmail);
@@ -1003,8 +1037,8 @@ CFrmMdf::loadMdf(void)
pItem = new QMdfTreeWidgetItem(pItemManufacturer, mdf_type_phone);
pItem->setText(0, str);
pItemModule->addChild(pItem);
- fillDescriptionItems(pItem, pManufacturer->getPhoneObj()->getDescriptionMap());
- fillHelpUrlItems(pItem, pManufacturer->getPhoneObj()->getInfoUrlMap());
+ fillDescriptionItems(pItem, pManufacturer->getPhoneObj(), pManufacturer->getPhoneObj()->getDescriptionMap());
+ fillHelpUrlItems(pItem, pManufacturer->getPhoneObj(), pManufacturer->getPhoneObj()->getInfoUrlMap());
}
} while (nullptr != pItemPhone);
@@ -1018,8 +1052,8 @@ CFrmMdf::loadMdf(void)
pItem = new QMdfTreeWidgetItem(pItemManufacturer, mdf_type_fax);
pItem->setText(0, str);
pItemModule->addChild(pItem);
- fillDescriptionItems(pItem, pManufacturer->getFaxObj()->getDescriptionMap());
- fillHelpUrlItems(pItem, pManufacturer->getFaxObj()->getInfoUrlMap());
+ fillDescriptionItems(pItem, pManufacturer->getFaxObj(), pManufacturer->getFaxObj()->getDescriptionMap());
+ fillHelpUrlItems(pItem, pManufacturer->getFaxObj(), pManufacturer->getFaxObj()->getInfoUrlMap());
}
} while (nullptr != pItemFax);
@@ -1033,8 +1067,8 @@ CFrmMdf::loadMdf(void)
pItem = new QMdfTreeWidgetItem(pItemManufacturer, mdf_type_web);
pItem->setText(0, str);
pItemModule->addChild(pItem);
- fillDescriptionItems(pItem, pManufacturer->getWebObj()->getDescriptionMap());
- fillHelpUrlItems(pItem, pManufacturer->getWebObj()->getInfoUrlMap());
+ fillDescriptionItems(pItem, pManufacturer->getWebObj(), pManufacturer->getWebObj()->getDescriptionMap());
+ fillHelpUrlItems(pItem, pManufacturer->getWebObj(), pManufacturer->getWebObj()->getInfoUrlMap());
}
} while (nullptr != pItemWeb);
@@ -1048,8 +1082,8 @@ CFrmMdf::loadMdf(void)
pItem = new QMdfTreeWidgetItem(pItemManufacturer, mdf_type_social);
pItem->setText(0, str);
pItemModule->addChild(pItem);
- fillDescriptionItems(pItem, pManufacturer->getSocialObj()->getDescriptionMap());
- fillHelpUrlItems(pItem, pManufacturer->getSocialObj()->getInfoUrlMap());
+ fillDescriptionItems(pItem, pManufacturer->getSocialObj(), pManufacturer->getSocialObj()->getDescriptionMap());
+ fillHelpUrlItems(pItem, pManufacturer->getSocialObj(), pManufacturer->getSocialObj()->getInfoUrlMap());
}
} while (nullptr != pItemSocial);
}
@@ -1138,8 +1172,8 @@ CFrmMdf::loadMdf(void)
pItem->addChild(pSubItem);
}
- fillDescriptionItems(pItem, pManualObj->getMapDescription());
- fillHelpUrlItems(pItem, pManualObj->getMapInfoUrl());
+ fillDescriptionItems(pItem, pManualObj, pManualObj->getMapDescription());
+ fillHelpUrlItems(pItem, pManualObj, pManualObj->getMapInfoUrl());
}
index++;
@@ -1191,8 +1225,8 @@ CFrmMdf::loadMdf(void)
pItem->addChild(pSubItem);
}
- fillDescriptionItems(pItem, pPictureObj->getMapDescription());
- fillHelpUrlItems(pItem, pPictureObj->getMapInfoUrl());
+ fillDescriptionItems(pItem, pPictureObj, pPictureObj->getMapDescription());
+ fillHelpUrlItems(pItem, pPictureObj, pPictureObj->getMapInfoUrl());
}
index++;
@@ -1244,8 +1278,8 @@ CFrmMdf::loadMdf(void)
pItem->addChild(pSubItem);
}
- fillDescriptionItems(pItem, pVideoObj->getMapDescription());
- fillHelpUrlItems(pItem, pVideoObj->getMapInfoUrl());
+ fillDescriptionItems(pItem, pVideoObj, pVideoObj->getMapDescription());
+ fillHelpUrlItems(pItem, pVideoObj, pVideoObj->getMapInfoUrl());
}
index++;
@@ -1339,8 +1373,8 @@ CFrmMdf::loadMdf(void)
pItem->addChild(pSubItem);
}
- fillDescriptionItems(pItem, pFirmwareObj->getMapDescription());
- fillHelpUrlItems(pItem, pFirmwareObj->getMapInfoUrl());
+ fillDescriptionItems(pItem, pFirmwareObj, pFirmwareObj->getMapDescription());
+ fillHelpUrlItems(pItem, pFirmwareObj, pFirmwareObj->getMapInfoUrl());
}
index++;
@@ -1434,8 +1468,8 @@ CFrmMdf::loadMdf(void)
pItem->addChild(pSubItem);
}
- fillDescriptionItems(pItem, pDriverObj->getMapDescription());
- fillHelpUrlItems(pItem, pDriverObj->getMapInfoUrl());
+ fillDescriptionItems(pItem, pDriverObj, pDriverObj->getMapDescription());
+ fillHelpUrlItems(pItem, pDriverObj, pDriverObj->getMapInfoUrl());
}
index++;
@@ -1489,8 +1523,8 @@ CFrmMdf::loadMdf(void)
pItem->addChild(pSubItem);
}
- fillDescriptionItems(pItem, pSetupObj->getMapDescription());
- fillHelpUrlItems(pItem, pSetupObj->getMapInfoUrl());
+ fillDescriptionItems(pItem, pSetupObj, pSetupObj->getMapDescription());
+ fillHelpUrlItems(pItem, pSetupObj, pSetupObj->getMapInfoUrl());
}
index++;
@@ -1654,10 +1688,10 @@ CFrmMdf::loadMdf(void)
fillValueInfo(pSubItem, *pvar->getListValues());
// Descriptions
- fillDescriptionItems(pSubItem, pvar->getMapDescription());
+ fillDescriptionItems(pSubItem, pvar, pvar->getMapDescription());
// Info URL's
- fillHelpUrlItems(pSubItem, pvar->getMapDescription());
+ fillHelpUrlItems(pSubItem, pvar, pvar->getMapDescription());
}
}
}
@@ -1810,19 +1844,19 @@ CFrmMdf::loadMdf(void)
fillValueInfo(pActionParamItem, *pactionparam->getListValues());
// Descriptions
- fillDescriptionItems(pActionParamItem, pactionparam->getMapDescription());
+ fillDescriptionItems(pActionParamItem, pactionparam, pactionparam->getMapDescription());
// Info URL's
- fillHelpUrlItems(pActionParamItem, pactionparam->getMapDescription());
+ fillHelpUrlItems(pActionParamItem, pactionparam, pactionparam->getMapDescription());
}
}
}
// Descriptions
- fillDescriptionItems(pSubItemAction, paction->getMapDescription());
+ fillDescriptionItems(pSubItemAction, paction, paction->getMapDescription());
// Info URL's
- fillHelpUrlItems(pSubItemAction, paction->getMapDescription());
+ fillHelpUrlItems(pSubItemAction, paction, paction->getMapDescription());
}
}
@@ -1933,19 +1967,19 @@ CFrmMdf::loadMdf(void)
fillValueInfo(pEventSubItem, *pEventData->getListValues());
// Descriptions
- fillDescriptionItems(pEventSubItem, pEventData->getMapDescription());
+ fillDescriptionItems(pEventSubItem, pEventData, pEventData->getMapDescription());
// Info URL's
- fillHelpUrlItems(pEventSubItem, pEventData->getMapDescription());
+ fillHelpUrlItems(pEventSubItem, pEventData, pEventData->getMapDescription());
}
} // EventDataList
} // list exist
// Descriptions
- fillDescriptionItems(pSubItem, pevent->getMapDescription());
+ fillDescriptionItems(pSubItem, pevent, pevent->getMapDescription());
// Info URL's
- fillHelpUrlItems(pSubItem, pevent->getMapDescription());
+ fillHelpUrlItems(pSubItem, pevent, pevent->getMapDescription());
}
}
} // EventList
@@ -2046,7 +2080,10 @@ CFrmMdf::onItemDoubleClicked(QTreeWidgetItem* item, int column)
case mdf_type_mdf:
str = tr("MDF");
-
+ break;
+
+ case mdf_type_mdf_item:
+ str = tr("MDF item");
break;
case mdf_type_value:
@@ -2246,7 +2283,357 @@ CFrmMdf::onItemDoubleClicked(QTreeWidgetItem* item, int column)
break;
}
- QMessageBox msgBox;
- msgBox.setText(str);
- msgBox.exec();
+ // QMessageBox msgBox;
+ // msgBox.setText(str);
+ // msgBox.exec();
+ ui->statusbar->showMessage(str, 1000);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// findMdfWidgetItem
+//
+
+QMdfTreeWidgetItem*
+CFrmMdf::findMdfWidgetItem(QMdfTreeWidgetItem* pItem, mdf_record_type type)
+{
+ QMdfTreeWidgetItem* piter = (QMdfTreeWidgetItem*)ui->treeMDF->itemBelow(pItem);
+ while (nullptr != piter) {
+
+ if (type == piter->getObjectType()) {
+ return piter;
+ }
+
+ piter = (QMdfTreeWidgetItem*)ui->treeMDF->itemBelow(piter);
+ }
+
+ return nullptr;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// findDocumentType
+//
+
+int
+CFrmMdf::deleteMdfWidgetChildItems(QMdfTreeWidgetItem* pItem, mdf_record_type type)
+{
+ bool bExpanded;
+ int cnt = 0;
+
+ // Check pointer
+ if (nullptr == pItem) {
+ return 0;
+ }
+
+ // Save expansion state
+ bExpanded = pItem->isExpanded();
+
+ // Expand to make traversion possible
+ pItem->setExpanded(true);
+
+ QMdfTreeWidgetItem* piter = (QMdfTreeWidgetItem*)ui->treeMDF->itemBelow(pItem);
+ while (type == piter->getObjectType()) {
+ pItem->removeChild(piter);
+ delete piter;
+ cnt++;
+ piter = (QMdfTreeWidgetItem*)ui->treeMDF->itemBelow(pItem);
+ }
+
+ // Restore expansion
+ pItem->setExpanded(bExpanded);
+
+ return cnt;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// editModuleData
+//
+
+void
+CFrmMdf::editModuleData()
+{
+ QMdfTreeWidgetItem* pItemModule = nullptr; // Pointer to module top item
+ QMdfTreeWidgetItem* pItemDescription = nullptr; // Pointer to description top item
+ QMdfTreeWidgetItem* pItemItemInfoURL = nullptr; // Pointer to info URL top item
+ QMdfTreeWidgetItem* pItem = (QMdfTreeWidgetItem*)ui->treeMDF->currentItem();
+
+ // Item must be selected
+ if (nullptr == pItem) {
+ int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("No MDF module item selected"));
+ return;
+ }
+
+ // Must have an object
+ if (nullptr == pItem->getObject()) {
+ int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("Internal error: Invalid module object"));
+ spdlog::error("MDF module edit - object has nullptr");
+ return;
+ }
+
+ // Must be correct object type
+ if ((mdf_type_mdf != pItem->getObjectType()) && (mdf_type_mdf_item != pItem->getObjectType())) {
+ int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("This is not a module item"));
+ spdlog::error("MDF module edit - Not a module item");
+ return;
+ }
+
+ // Set pointer to module top item
+ if (mdf_type_mdf == pItem->getObjectType()) {
+
+ pItemModule = pItem;
+
+ // Make sure it is expanded
+ pItem->setExpanded(true);
+ }
+ else if (mdf_type_mdf_item == pItem->getObjectType()) {
+ pItemModule = (QMdfTreeWidgetItem*)pItem->parent();
+ }
+ else {
+ int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("Invalid module top item object type"));
+ spdlog::error("MDF module edit - Invalid module top item object type");
+ return;
+ }
+
+ // piter = (QMdfTreeWidgetItem*)ui->treeMDF->itemBelow(pItemModule);
+ // do {
+ // if (nullptr == piter)
+ // return nullptr;
+ // if( (mdf_type_generic_description == piter->getObjectType()) {
+ // return piter;
+ // }
+ // piter = (QMdfTreeWidgetItem*)ui->treeMDF->itemBelow(piter);
+ // while (mdf_type_mdf_item == piter->getObjectType());
+
+ pItemDescription = findMdfWidgetItem(pItemModule, mdf_type_generic_description); // findDocumentItem(pItemModule);
+ pItemItemInfoURL = findMdfWidgetItem(pItemModule, mdf_type_generic_help_url); // findInfoUrlItem(pItemModule);
+
+ CDlgMdfModule dlg(this);
+ dlg.initDialogData(pItem->getObject(), static_cast(pItem->getElementIndex()));
+
+ if (QDialog::Accepted == dlg.exec()) {
+ // Update Module items
+
+ QMdfTreeWidgetItem* piter = nullptr;
+ // if (nullptr != pItem->parent()) {
+
+ // // Module sub item selected
+ // piter = (QMdfTreeWidgetItem*)pItem->parent();
+
+ // // QMdfTreeWidgetItem* pitemBelow = (QMdfTreeWidgetItem*)ui->treeMDF->itemBelow(pItem->parent());
+ // // if (nullptr != pitemBelow) {
+ // // ui->statusbar->showMessage(pitemBelow->text(0), 3000);
+ // // piter = (QMdfTreeWidgetItem*)pItem->parent();
+ // // }
+ // }
+ // else {
+
+ // // Module top item selected
+ // // ui->statusbar->showMessage(pItem->text(0), 3000);
+ // piter = (QMdfTreeWidgetItem*)pItem;
+
+ // // QMdfTreeWidgetItem* pitemBelow = (QMdfTreeWidgetItem*)ui->treeMDF->itemBelow(pItem);
+ // // if (nullptr != pitemBelow) {
+ // // ui->statusbar->showMessage(pitemBelow->text(0), 3000);
+ // // piter = (QMdfTreeWidgetItem*)pItem->parent();
+ // // }
+ // }
+
+ // Protect against a null pointer
+ // if (nullptr == piter) {
+ // int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("Invalid NULL module item"));
+ // spdlog::error("MDF module edit - module item has nullptr");
+ // return;
+ // }
+
+ // Iterate over module items and update ui
+ piter = (QMdfTreeWidgetItem*)ui->treeMDF->itemBelow(pItemModule);
+ do {
+
+ switch (piter->getElementIndex()) {
+
+ case index_module_name:
+ piter->setText(0, PREFIX_MDF_MODULE_NAME + m_mdf.getModuleName().c_str());
+ break;
+
+ case index_module_model:
+ piter->setText(0, PREFIX_MDF_MODULE_MODEL + m_mdf.getModuleModel().c_str());
+ break;
+
+ case index_module_level: {
+ QString str = "%1";
+ str = PREFIX_MDF_MODULE_LEVEL + str.arg(m_mdf.getModuleLevel() + 1);
+ piter->setText(0, str);
+ } break;
+
+ case index_module_version:
+ piter->setText(0, PREFIX_MDF_MODULE_VERSION + m_mdf.getModuleVersion().c_str());
+ break;
+
+ case index_module_change_date:
+ piter->setText(0, PREFIX_MDF_MODULE_CHANGE_DATE + m_mdf.getModuleChangeDate().c_str());
+ break;
+
+ case index_module_buffer_size: {
+ QString str;
+ str = PREFIX_MDF_MODULE_BUFFER_SIZE + str.arg(m_mdf.getModuleBufferSize());
+ piter->setText(0, str);
+ } break;
+
+ case index_module_copyright: // Copyright
+ piter->setText(0, PREFIX_MDF_MODULE_COPYRIGHT + m_mdf.getModuleCopyright().c_str());
+ break;
+
+ default: // Hmmmm.-.. unkown field index
+ break;
+ }
+
+ piter = (QMdfTreeWidgetItem*)ui->treeMDF->itemBelow(piter);
+ } while (mdf_type_mdf_item == piter->getObjectType());
+
+ // Find module descriptions
+ int n = piter->childCount();
+ if (mdf_type_generic_description == piter->getObjectType()) {
+ piter->setExpanded(false);
+ n = ui->treeMDF->indexOfTopLevelItem(piter);
+ n = ui->treeMDF->topLevelItemCount();
+ n = n + 1;
+ }
+
+ deleteMdfWidgetChildItems(pItemDescription, mdf_type_generic_description_item);
+ fillDescriptionItems(pItemDescription, &m_mdf, m_mdf.getModuleDescriptionMap(), true);
+
+ deleteMdfWidgetChildItems(pItemItemInfoURL, mdf_type_generic_help_url_item);
+ fillHelpUrlItems(pItemItemInfoURL, &m_mdf, m_mdf.getModuleHelpUrlMap(), true);
+
+ } // accept
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// editDescription
+//
+
+void
+CFrmMdf::editDescription()
+{
+ QString selstr = "";
+ QMdfTreeWidgetItem* pItemDescription = nullptr; // Pointer to description top item
+ QMdfTreeWidgetItem* pItem = (QMdfTreeWidgetItem*)ui->treeMDF->currentItem();
+
+ // Item must be selected
+ if (nullptr == pItem) {
+ int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("No MDF description item selected"));
+ return;
+ }
+
+ // Must have an object
+ if (nullptr == pItem->getObject()) {
+ int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("Internal error: Invalid module object"));
+ spdlog::error("MDF module edit - object has nullptr");
+ return;
+ }
+
+ // Must be correct object type
+ if ((mdf_type_generic_description != pItem->getObjectType()) && (mdf_type_generic_description_item != pItem->getObjectType())) {
+ int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("This is not a module description item"));
+ spdlog::error("MDF module edit - Not a module item");
+ return;
+ }
+
+ // Set pointer to module top item
+ if (mdf_type_generic_description == pItem->getObjectType()) {
+
+ pItemDescription = pItem;
+
+ // Make sure it is expanded
+ pItemDescription->setExpanded(true);
+ }
+ else if (mdf_type_generic_description_item == pItem->getObjectType()) {
+ pItemDescription = (QMdfTreeWidgetItem*)pItem->parent();
+ selstr = pItem->text(0).split('_').first().left(2);
+ }
+ else {
+ int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("Invalid module top item object type"));
+ spdlog::error("MDF module edit - Invalid module top item object type");
+ return;
+ }
+
+ // Iterate over module items and update ui
+ QMdfTreeWidgetItem* piter = (QMdfTreeWidgetItem*)ui->treeMDF->itemBelow(pItemDescription);
+
+ CDlgEditMap dlg(this);
+ dlg.initDialogData(m_mdf.getModuleDescriptionMap(), map_type_description, &selstr);
+
+ if (QDialog::Accepted == dlg.exec()) {
+ // Update Module items
+ deleteMdfWidgetChildItems(pItemDescription, mdf_type_generic_description_item);
+ fillDescriptionItems(pItemDescription, &m_mdf, m_mdf.getModuleDescriptionMap(), true);
+
+ QMdfTreeWidgetItem* piter = nullptr;
+
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// editInfoUrl
+//
+
+void
+CFrmMdf::editInfoUrl()
+{
+ QString selstr = "";
+ QMdfTreeWidgetItem* pItemInfoUrl = nullptr; // Pointer to info url top item
+ QMdfTreeWidgetItem* pItem = (QMdfTreeWidgetItem*)ui->treeMDF->currentItem();
+
+ // Item must be selected
+ if (nullptr == pItem) {
+ int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("No MDF info url item selected"));
+ return;
+ }
+
+ // Must have an object
+ if (nullptr == pItem->getObject()) {
+ int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("Internal error: Invalid module object"));
+ spdlog::error("MDF module edit - object has nullptr");
+ return;
+ }
+
+ // Must be correct object type
+ if ((mdf_type_generic_help_url!= pItem->getObjectType()) && (mdf_type_generic_help_url_item != pItem->getObjectType())) {
+ int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("This is not a module help url item"));
+ spdlog::error("MDF module edit - Not a module item");
+ return;
+ }
+
+ // Set pointer to module top item
+ if (mdf_type_generic_help_url== pItem->getObjectType()) {
+
+ pItemInfoUrl = pItem;
+
+ // Make sure it is expanded
+ pItemInfoUrl->setExpanded(true);
+ }
+ else if (mdf_type_generic_help_url_item == pItem->getObjectType()) {
+ pItemInfoUrl = (QMdfTreeWidgetItem*)pItem->parent();
+ selstr = pItem->text(0).split('_').first().left(2);
+ }
+ else {
+ int ret = QMessageBox::critical(this, tr("MDF module edit"), tr("Invalid module top item object type"));
+ spdlog::error("MDF module edit - Invalid module top item object type");
+ return;
+ }
+
+ // Iterate over module items and update ui
+ QMdfTreeWidgetItem* piter = (QMdfTreeWidgetItem*)ui->treeMDF->itemBelow(pItemInfoUrl);
+
+ CDlgEditMap dlg(this);
+ dlg.initDialogData(m_mdf.getModuleHelpUrlMap(), map_type_info_url, &selstr);
+
+ if (QDialog::Accepted == dlg.exec()) {
+
+ // Update Module items
+ deleteMdfWidgetChildItems(pItemInfoUrl, mdf_type_generic_help_url_item);
+ fillHelpUrlItems(pItemInfoUrl, &m_mdf, m_mdf.getModuleHelpUrlMap(), true);
+
+ QMdfTreeWidgetItem* piter = nullptr;
+
+ }
}
\ No newline at end of file
diff --git a/src/cfrmmdf.h b/src/cfrmmdf.h
index dcba276c..d5eec576 100644
--- a/src/cfrmmdf.h
+++ b/src/cfrmmdf.h
@@ -78,55 +78,57 @@ class CFrmMdf;
/*!
Class that represent a row in the TX list
*/
-class QMdfTreeWidgetItem : public QTreeWidgetItem
-{
-
- public:
-
- QMdfTreeWidgetItem(const QString& text);
- QMdfTreeWidgetItem(mdf_record_type objtype);
- QMdfTreeWidgetItem(CMDF_Object *pobj, mdf_record_type objtype);
- QMdfTreeWidgetItem(QTreeWidgetItem* parent, mdf_record_type objtype);
- QMdfTreeWidgetItem(QTreeWidgetItem* parent, CMDF_Object *pobj, mdf_record_type objtype);
- virtual ~QMdfTreeWidgetItem();
-
- /*!
- Get MDF object type
- @return Return MDF object type
- */
- mdf_record_type getObjectType(void) { return m_objType; /*(type() - QTreeWidgetItem::UserType);*/ };
-
- /*!
- Set MDF object type
- @param type MDF object type
- */
- void setObjectType(mdf_record_type objtype) { m_objType = objtype;};
-
- /*!
- Get index for element
- @return Return element index
- */
- uint16_t getElementIndex(void) { return m_fieldIndex; };
-
- /*!
- Set index for element
- @param idx Element index used or direct editing
- */
- void setElementIndex(uint16_t idx) { m_fieldIndex = idx;};
-
- /*!
- Get MDF object
- @return Return pointer to MDF object
- */
- CMDF_Object *getObject(void) { return m_pMdfRecord; };
-
- /*!
- Set pointer to MDF object
- @param pobj Pointer to MDF object
- */
- void setObject(CMDF_Object *pobj) { m_pMdfRecord = pobj;};
-
- private:
+class QMdfTreeWidgetItem : public QTreeWidgetItem {
+
+public:
+ QMdfTreeWidgetItem(const QString& text);
+ QMdfTreeWidgetItem(mdf_record_type objtype);
+ QMdfTreeWidgetItem(CMDF_Object* pobj, mdf_record_type objtype, uint16_t index = 0);
+ QMdfTreeWidgetItem(QTreeWidgetItem* parent, mdf_record_type objtype);
+ QMdfTreeWidgetItem(QTreeWidgetItem* parent, CMDF_Object* pobj, mdf_record_type objtype, uint16_t index = 0);
+ virtual ~QMdfTreeWidgetItem();
+
+ /*!
+ Get MDF object type
+ @return Return MDF object type
+ */
+ mdf_record_type getObjectType(void) { return m_objType; };
+
+ /*!
+ Set MDF object type
+ @param type MDF object type
+ */
+ void setObjectType(mdf_record_type objtype) { m_objType = objtype; };
+
+ /*!
+ Get index for element
+ @return Return element index
+ */
+ uint16_t getElementIndex(void) { return m_fieldIndex; };
+
+ /*!
+ Set index for element
+ @param idx Element index used or direct editing
+ */
+ void setElementIndex(uint16_t idx) { m_fieldIndex = idx; };
+
+ /*!
+ Get MDF object
+ @return Return pointer to MDF object
+ */
+ CMDF_Object* getObject(void) { return m_pMdfRecord; };
+
+ /*!
+ Set pointer to MDF object
+ @param pobj Pointer to MDF object
+ */
+ void setObject(CMDF_Object* pobj) { m_pMdfRecord = pobj; };
+
+private:
+ /*!
+ This is a pointer to a special object for certain types
+ */
+ // void *m_pSpecialObj;
/*!
This is the index for fields of a record.
@@ -136,7 +138,7 @@ class QMdfTreeWidgetItem : public QTreeWidgetItem
/*!
Pointer to MDF record
*/
- CMDF_Object *m_pMdfRecord;
+ CMDF_Object* m_pMdfRecord;
/*!
Pointer to MDF record
@@ -174,28 +176,47 @@ public slots:
void showMdfContextMenu(const QPoint& pos);
/// Item has been clicked
- void onItemClicked(QTreeWidgetItem *item, int column);
+ void onItemClicked(QTreeWidgetItem* item, int column);
/// Item has been double clicked
- void onItemDoubleClicked(QTreeWidgetItem *item, int column);
+ void onItemDoubleClicked(QTreeWidgetItem* item, int column);
+
+ /// Edit MDF module data
+ void editModuleData(void);
+
+ /// Edit MDF descriptions
+ void editDescription(void);
+
+ /// Edit MDF info URL's
+ void editInfoUrl(void);
/*!
Fill in data from info map as children to parent item
- @param parent Pointer to parent treewidget
+ @param parent Pointer to parent treewidget (or description head)
+ @param pobj MDF object
@param pObjMap Pointer to map holding descriptions in different languages
+ @param bChildIsKnown Set to true of pParent points to description head
*/
void
- fillDescriptionItems(QTreeWidgetItem* pParent, std::map* pObjMap);
+ fillDescriptionItems(QTreeWidgetItem* pParent,
+ CMDF_Object* pobj,
+ std::map* pObjMap,
+ bool bChildIsKnown = false);
/*!
Fill in data from help URL map as children to parent item
- @param parent Pointer to parent treewidget
- @param pObjMap Pointer to map holding indo URL's in different languages
+ @param parent Pointer to parent treewidget (or ino URL head)
+ @param pobj MDF object
+ @param pObjMap Pointer to map holding info URL's in different languages
+ @param bChildIsKnown Set to true of pParent points to info URL head
*/
void
- fillHelpUrlItems(QTreeWidgetItem* pParent, std::map* pObjMap);
+ fillHelpUrlItems(QTreeWidgetItem* pParent,
+ CMDF_Object* pobj,
+ std::map* pObjMap,
+ bool bChildIsKnown = false);
/*!
Fill bit list info
@@ -203,7 +224,7 @@ public slots:
@param dequebits Reference for std:deque holding bit infor objects
*/
void
- fillBitInfo(QTreeWidgetItem* pParent, std::deque &dequebits);
+ fillBitInfo(QTreeWidgetItem* pParent, std::deque& dequebits);
/*!
Fill value list info
@@ -221,7 +242,7 @@ public slots:
@preg Pointer to register definition
*/
void
- fillRegisterInfo(QTreeWidgetItem* pParent, CMDF_Register *preg);
+ fillRegisterInfo(QTreeWidgetItem* pParent, CMDF_Register* preg);
/// Do the new operation
void newMdf(void);
@@ -232,6 +253,24 @@ public slots:
/// Load MDF for selected node
void loadMdf(void);
+ /*!
+ Find next MDF type item in tree
+ @param Pointer to MDF widget item
+ @param type MDF item type to search for
+ @return Pointer to item if found or
+ null pointer if not found.
+ */
+ QMdfTreeWidgetItem* findMdfWidgetItem(QMdfTreeWidgetItem* pItem, mdf_record_type type);
+
+ /*!
+ Delete all child items of a specific MDF type
+ @param Pointer to MDF widget item
+ @param type MDF item type to search for
+ @return Return number of items that been deleted.
+ */
+
+ int deleteMdfWidgetChildItems(QMdfTreeWidgetItem* pItem, mdf_record_type type);
+
signals:
private:
@@ -242,7 +281,7 @@ public slots:
CMDF m_mdf;
// The statusbar
- QStatusBar *m_bar;
+ QStatusBar* m_bar;
};
#endif // CFrmMdf_H
diff --git a/src/cfrmmdf.ui b/src/cfrmmdf.ui
index b26340c8..921cae33 100644
--- a/src/cfrmmdf.ui
+++ b/src/cfrmmdf.ui
@@ -234,6 +234,7 @@
&Edit
+
@@ -287,6 +288,17 @@
E&xpand all
+
+ Ctrl+A
+
+
+
+
+ Edit item
+
+
+ Ctrl+E
+
diff --git a/src/copy.svg b/src/copy.svg
new file mode 100644
index 00000000..a80c995a
--- /dev/null
+++ b/src/copy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/iso639.h b/src/iso639.h
new file mode 100644
index 00000000..1a8738af
--- /dev/null
+++ b/src/iso639.h
@@ -0,0 +1,225 @@
+// iso639.h
+//
+// This file is part of the VSCP (https://www.vscp.org)
+//
+// The MIT License (MIT)
+//
+// Copyright © 2000-2023 Ake Hedman, Grodans Paradis AB
+//
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the \"Software\"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+//
+
+// https://datahub.io/core/language-codes
+// https://gist.github.com/jrnk/8eb57b065ea0b098d571
+// https://github.com/haliaeetus/iso-639/tree/master/data
+
+//define ISO639
+
+typedef struct {
+ QString code; // Language code
+ QString name; // Language name
+ QString native; // Native language name
+} _iso639;
+
+_iso639 iso639[] = {
+{"ab","Abkhaz","аҧсуа"},
+{"aa","Afar","Afaraf"},
+{"af","Afrikaans","Afrikaans"},
+{"ak","Akan","Akan"},
+{"sq","Albanian","Shqip"},
+{"am","Amharic","አማርኛ"},
+{"ar","Arabic","العربية"},
+{"an","Aragonese","Aragonés"},
+{"hy","Armenian","Հայերեն"},
+{"as","Assamese","অসমীয়া"},
+{"av","Avaric","авар мацӀ, магӀарул мацӀ"},
+{"ae","Avestan","avesta"},
+{"ay","Aymara","aymar aru"},
+{"az","Azerbaijani","azərbaycan dili"},
+{"bm","Bambara","bamanankan"},
+{"ba","Bashkir","башҡорт теле"},
+{"eu","Basque","euskara, euskera"},
+{"be","Belarusian","Беларуская"},
+{"bn","Bengali","বাংলা"},
+{"bh","Bihari","भोजपुरी"},
+{"bi","Bislama","Bislama"},
+{"bs","Bosnian","bosanski jezik"},
+{"br","Breton","brezhoneg"},
+{"bg","Bulgarian","български език"},
+{"my","Burmese","ဗမာစာ"},
+{"ca","Catalan; Valencian","Català"},
+{"ch","Chamorro","Chamoru"},
+{"ce","Chechen","нохчийн мотт"},
+{"ny","Chichewa; Chewa; Nyanja","chiCheŵa, chinyanja"},
+{"zh","Chinese","中文 (Zhōngwén), 汉语, 漢語"},
+{"cv","Chuvash","чӑваш чӗлхи"},
+{"kw","Cornish","Kernewek"},
+{"co","Corsican","corsu, lingua corsa"},
+{"cr","Cree","ᓀᐦᐃᔭᐍᐏᐣ"},
+{"hr","Croatian","hrvatski"},
+{"cs","Czech","česky, čeština"},
+{"da","Danish","dansk"},
+{"dv","Divehi; Dhivehi; Maldivian;","ދިވެހި"},
+{"nl","Dutch","Nederlands, Vlaams"},
+{"en","English","English"},
+{"eo","Esperanto","Esperanto"},
+{"et","Estonian","eesti, eesti keel"},
+{"ee","Ewe","Eʋegbe"},
+{"fo","Faroese","føroyskt"},
+{"fj","Fijian","vosa Vakaviti"},
+{"fi","Finnish","suomi, suomen kieli"},
+{"fr","French","français, langue française"},
+{"ff","Fula; Fulah; Pulaar; Pular","Fulfulde, Pulaar, Pular"},
+{"gl","Galician","Galego"},
+{"ka","Georgian","ქართული"},
+{"de","German","Deutsch"},
+{"el","Greek, Modern","Ελληνικά"},
+{"gn","Guaraní","Avañeẽ"},
+{"gu","Gujarati","ગુજરાતી"},
+{"ht","Haitian; Haitian Creole","Kreyòl ayisyen"},
+{"ha","Hausa","Hausa, هَوُسَ"},
+{"he","Hebrew (modern)","עברית"},
+{"hz","Herero","Otjiherero"},
+{"hi","Hindi","हिन्दी, हिंदी"},
+{"ho","Hiri Motu","Hiri Motu"},
+{"hu","Hungarian","Magyar"},
+{"ia","Interlingua","Interlingua"},
+{"id","Indonesian","Bahasa Indonesia"},
+{"ie","Interlingue","Originally called Occidental; then Interlingue after WWII"},
+{"ga","Irish","Gaeilge"},
+{"ig","Igbo","Asụsụ Igbo"},
+{"ik","Inupiaq","Iñupiaq, Iñupiatun"},
+{"io","Ido","Ido"},
+{"is","Icelandic","Íslenska"},
+{"it","Italian","Italiano"},
+{"iu","Inuktitut","ᐃᓄᒃᑎᑐᑦ"},
+{"ja","Japanese","日本語 (にほんご/にっぽんご)"},
+{"jv","Javanese","basa Jawa"},
+{"kl","Kalaallisut, Greenlandic","kalaallisut, kalaallit oqaasii"},
+{"kn","Kannada","ಕನ್ನಡ"},
+{"kr","Kanuri","Kanuri"},
+{"ks","Kashmiri","कश्मीरी, كشميري"},
+{"kk","Kazakh","Қазақ тілі"},
+{"km","Khmer","ភាសាខ្មែរ"},
+{"ki","Kikuyu, Gikuyu","Gĩkũyũ"},
+{"rw","Kinyarwanda","Ikinyarwanda"},
+{"ky","Kirghiz, Kyrgyz","кыргыз тили"},
+{"kv","Komi","коми кыв"},
+{"kg","Kongo","KiKongo"},
+{"ko","Korean","한국어 (韓國語), 조선말 (朝鮮語)"},
+{"ku","Kurdish","Kurdî, كوردی"},
+{"kj","Kwanyama, Kuanyama","Kuanyama"},
+{"la","Latin","latine, lingua latina"},
+{"lb","Luxembourgish, Letzeburgesch","Lëtzebuergesch"},
+{"lg","Luganda","Luganda"},
+{"li","Limburgish, Limburgan, Limburger","Limburgs"},
+{"ln","Lingala","Lingála"},
+{"lo","Lao","ພາສາລາວ"},
+{"lt","Lithuanian","lietuvių kalba"},
+{"lu","Luba-Katanga",""},
+{"lv","Latvian","latviešu valoda"},
+{"gv","Manx","Gaelg, Gailck"},
+{"mk","Macedonian","македонски јазик"},
+{"mg","Malagasy","Malagasy fiteny"},
+{"ms","Malay","bahasa Melayu, بهاس ملايو"},
+{"ml","Malayalam","മലയാളം"},
+{"mt","Maltese","Malti"},
+{"mi","Māori","te reo Māori"},
+{"mr","Marathi (Marāṭhī)","मराठी"},
+{"mh","Marshallese","Kajin M̧ajeļ"},
+{"mn","Mongolian","монгол"},
+{"na","Nauru","Ekakairũ Naoero"},
+{"nv","Navajo, Navaho","Diné bizaad, Dinékʼehǰí"},
+{"nb","Norwegian Bokmål","Norsk bokmål"},
+{"nd","North Ndebele","isiNdebele"},
+{"ne","Nepali","नेपाली"},
+{"ng","Ndonga","Owambo"},
+{"nn","Norwegian Nynorsk","Norsk nynorsk"},
+{"no","Norwegian","Norsk"},
+{"ii","Nuosu","ꆈꌠ꒿ Nuosuhxop"},
+{"nr","South Ndebele","isiNdebele"},
+{"oc","Occitan","Occitan"},
+{"oj","Ojibwe, Ojibwa","ᐊᓂᔑᓈᐯᒧᐎᓐ"},
+{"cu","Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic","ѩзыкъ словѣньскъ"},
+{"om","Oromo","Afaan Oromoo"},
+{"or","Oriya","ଓଡ଼ିଆ"},
+{"os","Ossetian, Ossetic","ирон æвзаг"},
+{"pa","Panjabi, Punjabi","ਪੰਜਾਬੀ, پنجابی"},
+{"pi","Pāli","पाऴि"},
+{"fa","Persian","فارسی"},
+{"pl","Polish","polski"},
+{"ps","Pashto, Pushto","پښتو"},
+{"pt","Portuguese","Português"},
+{"qu","Quechua","Runa Simi, Kichwa"},
+{"rm","Romansh","rumantsch grischun"},
+{"rn","Kirundi","kiRundi"},
+{"ro","Romanian, Moldavian, Moldovan","română"},
+{"ru","Russian","русский язык"},
+{"sa","Sanskrit (Saṁskṛta)","संस्कृतम्"},
+{"sc","Sardinian","sardu"},
+{"sd","Sindhi","सिन्धी, سنڌي، سندھی"},
+{"se","Northern Sami","Davvisámegiella"},
+{"sm","Samoan","gagana faa Samoa"},
+{"sg","Sango","yângâ tî sängö"},
+{"sr","Serbian","српски језик"},
+{"gd","Scottish Gaelic; Gaelic","Gàidhlig"},
+{"sn","Shona","chiShona"},
+{"si","Sinhala, Sinhalese","සිංහල"},
+{"sk","Slovak","slovenčina"},
+{"sl","Slovene","slovenščina"},
+{"so","Somali","Soomaaliga, af Soomaali"},
+{"st","Southern Sotho","Sesotho"},
+{"es","Spanish; Castilian","español, castellano"},
+{"su","Sundanese","Basa Sunda"},
+{"sw","Swahili","Kiswahili"},
+{"ss","Swati","SiSwati"},
+{"sv","Swedish","svenska"},
+{"ta","Tamil","தமிழ்"},
+{"te","Telugu","తెలుగు"},
+{"tg","Tajik","тоҷикӣ, toğikī, تاجیکی"},
+{"th","Thai","ไทย"},
+{"ti","Tigrinya","ትግርኛ"},
+{"bo","Tibetan Standard, Tibetan, Central","བོད་ཡིག"},
+{"tk","Turkmen","Türkmen, Түркмен"},
+{"tl","Tagalog","Wikang Tagalog, ᜏᜒᜃᜅ᜔ ᜆᜄᜎᜓᜄ᜔"},
+{"tn","Tswana","Setswana"},
+{"to","Tonga (Tonga Islands)","faka Tonga"},
+{"tr","Turkish","Türkçe"},
+{"ts","Tsonga","Xitsonga"},
+{"tt","Tatar","татарча, tatarça, تاتارچا"},
+{"tw","Twi","Twi"},
+{"ty","Tahitian","Reo Tahiti"},
+{"ug","Uighur, Uyghur","Uyƣurqə, ئۇيغۇرچە"},
+{"uk","Ukrainian","українська"},
+{"ur","Urdu","اردو"},
+{"uz","Uzbek","zbek, Ўзбек, أۇزبېك"},
+{"ve","Venda","Tshivenḓa"},
+{"vi","Vietnamese","Tiếng Việt"},
+{"vo","Volapük","Volapük"},
+{"wa","Walloon","Walon"},
+{"cy","Welsh","Cymraeg"},
+{"wo","Wolof","Wollof"},
+{"fy","Western Frisian","Frysk"},
+{"xh","Xhosa","isiXhosa"},
+{"yi","Yiddish","ייִדיש"},
+{"yo","Yoruba","Yorùbá"},
+{"za","Zhuang, Chuang","Saɯ cueŋƅ, Saw cuengh"},
+{"","",""}
+};
\ No newline at end of file
diff --git a/src/vscpworks.cpp b/src/vscpworks.cpp
index 90dc9694..1e6424e0 100644
--- a/src/vscpworks.cpp
+++ b/src/vscpworks.cpp
@@ -39,25 +39,25 @@
#include
#include
-#include "vscpworks.h"
#include "filedownloader.h"
+#include "vscpworks.h"
#include
#include
+#include
+#include
+#include
+#include
+#include
+#include
#include
#include
-#include
#include
#include
-#include
-#include
-#include
-#include
-#include
-#include
+#include
#include
-#include
+#include
#include
#include
@@ -74,54 +74,58 @@ using namespace kainjow::mustache;
// vscpworks
//
-vscpworks::vscpworks(int &argc, char **argv) :
- QApplication(argc, argv)
+vscpworks::vscpworks(int& argc, char** argv)
+ : QApplication(argc, argv)
{
- m_base = numerical_base::HEX; // Numerical base
- m_preferredLanguage = "en"; // Preferred language
- m_bAskBeforeDelete = true;
- m_bEnableDarkTheme = false;
- m_bSaveAlwaysJSON = false;
-
- // Logging defaults
- m_fileLogLevel = spdlog::level::info;
- m_fileLogPattern = "[vscpd] [%^%l%$] %v";
- m_fileLogPath = "/var/log/vscp/vscp.log";
- m_maxFileLogSize = 5242880;
- m_maxFileLogFiles = 7;
-
- m_bEnableConsoleLog = false;
- m_consoleLogLevel = spdlog::level::info;
- m_consoleLogPattern = "[vscpd] [%^%l%$] %v";
-
- m_session_timeout = 1000;
- m_session_maxEvents = -1;
-
- m_session_ClassDisplayFormat = CFrmSession::classDisplayFormat::symbolic;
- m_session_TypeDisplayFormat = CFrmSession::typeDisplayFormat::symbolic;
- m_session_GuidDisplayFormat = CFrmSession::guidDisplayFormat::symbolic;
-
- m_session_bAutoConnect = true;
- m_session_bShowFullTypeToken = false;
- m_session_bAutoSaveTxRows = true;
-
- m_config_timeout = 1000;
-
- // Logging defaults
- m_fileLogLevel = spdlog::level::info;
- m_fileLogPattern = "[vscpworks+] [%^%l%$] %v";
- m_fileLogPath = "~/.local/share/VSCP/vscpworks+/logs/vscpworks.log";
- m_maxFileLogSize = 5242880;
- m_maxFileLogFiles = 7;
-
- m_bEnableConsoleLog = false;
- m_consoleLogLevel = spdlog::level::info;
- m_consoleLogPattern = "[vscpworks+] [%^%l%$] %v";
-
- // After the following it is possible to create and destroy event objects
- // dynamically at run-time
- int idEvent = qRegisterMetaType();
- int idEventEx = qRegisterMetaType();
+ m_base = numerical_base::HEX; // Numerical base
+ m_preferredLanguage = "en"; // Preferred language
+ m_bAskBeforeDelete = true;
+ m_bEnableDarkTheme = false;
+ m_bSaveAlwaysJSON = false;
+
+ // Logging defaults
+ m_fileLogLevel = spdlog::level::info;
+ m_fileLogPattern = "[vscpd] [%^%l%$] %v";
+ m_fileLogPath = "/var/log/vscp/vscp.log";
+ m_maxFileLogSize = 5242880;
+ m_maxFileLogFiles = 7;
+
+ m_bEnableConsoleLog = false;
+ m_consoleLogLevel = spdlog::level::info;
+ m_consoleLogPattern = "[vscpd] [%^%l%$] %v";
+
+ m_session_timeout = 1000;
+ m_session_maxEvents = -1;
+
+ m_session_ClassDisplayFormat = CFrmSession::classDisplayFormat::symbolic;
+ m_session_TypeDisplayFormat = CFrmSession::typeDisplayFormat::symbolic;
+ m_session_GuidDisplayFormat = CFrmSession::guidDisplayFormat::symbolic;
+
+ m_session_bAutoConnect = true;
+ m_session_bShowFullTypeToken = false;
+ m_session_bAutoSaveTxRows = true;
+
+ m_config_timeout = 1000;
+
+ // Logging defaults
+ m_fileLogLevel = spdlog::level::info;
+ m_fileLogPattern = "[vscpworks+] [%^%l%$] %v";
+ m_fileLogPath = "~/.local/share/VSCP/vscpworks+/logs/vscpworks.log";
+ m_maxFileLogSize = 5242880;
+ m_maxFileLogFiles = 7;
+
+ m_bEnableConsoleLog = false;
+ m_consoleLogLevel = spdlog::level::info;
+ m_consoleLogPattern = "[vscpworks+] [%^%l%$] %v";
+
+ // After the following it is possible to create and destroy event objects
+ // dynamically at run-time
+ int idEvent = qRegisterMetaType();
+ int idEventEx = qRegisterMetaType();
+
+
+
+
}
///////////////////////////////////////////////////////////////////////////////
@@ -147,986 +151,1006 @@ vscpworks::~vscpworks()
// decimalToStringInBase
//
-QString vscpworks::decimalToStringInBase(uint32_t value, int tobase)
+QString
+vscpworks::decimalToStringInBase(uint32_t value, int tobase)
{
- int base = 10;
- QString qstr;
- QString prefix;
-
- numerical_base selbase = (-1 == tobase) ? m_base : static_cast(tobase);
- switch (selbase) {
- case numerical_base::HEX:
- prefix = "0x";
- base = 16;
- break;
- case numerical_base::DECIMAL:
- default:
- prefix = "";
- base = 10;
- break;
- case numerical_base::OCTAL:
- prefix = "0o";
- base = 8;
- break;
- case numerical_base::BINARY:
- prefix = "0b";
- base = 2;
- break;
- }
-
- return (prefix + QString::number(value, base));
- };
+ int base = 10;
+ QString qstr;
+ QString prefix;
+
+ numerical_base selbase = (-1 == tobase) ? m_base : static_cast(tobase);
+ switch (selbase) {
+ case numerical_base::HEX:
+ prefix = "0x";
+ base = 16;
+ break;
+ case numerical_base::DECIMAL:
+ default:
+ prefix = "";
+ base = 10;
+ break;
+ case numerical_base::OCTAL:
+ prefix = "0o";
+ base = 8;
+ break;
+ case numerical_base::BINARY:
+ prefix = "0b";
+ base = 2;
+ break;
+ }
+
+ return (prefix + QString::number(value, base));
+};
///////////////////////////////////////////////////////////////////////////////
// decimalToStringInBase
//
-QString vscpworks::decimalToStringInBase(const QString& strvalue, int tobase)
+QString
+vscpworks::decimalToStringInBase(const QString& strvalue, int tobase)
{
- uint32_t value = vscp_readStringValue(strvalue.toStdString());
- return decimalToStringInBase(value, tobase);
+ uint32_t value = vscp_readStringValue(strvalue.toStdString());
+ return decimalToStringInBase(value, tobase);
}
///////////////////////////////////////////////////////////////////////////////
// getConnectionName
//
-QString vscpworks::getConnectionName(CVscpClient::connType type)
+QString
+vscpworks::getConnectionName(CVscpClient::connType type)
{
- QString str = tr("Unknown type");
-
- switch (type) {
-
- case CVscpClient::connType::NONE:
- str = tr("No connection");
- break;
-
- case CVscpClient::connType::LOCAL:
- str = tr("VSCP local connection");
- break;
-
- case CVscpClient::connType::TCPIP:
- str = tr("VSCP tcp/ip connection");
- break;
-
- case CVscpClient::connType::CANAL:
- str = tr("VSCP CANAL/Level I connection");
- break;
-
- case CVscpClient::connType::SOCKETCAN:
- str = tr("VSCP socketcan connection");
- break;
-
- case CVscpClient::connType::WS1:
- str = tr("VSCP websocket protocol 1 connection");
- break;
-
- case CVscpClient::connType::WS2:
- str = tr("VSCP websocket protocol 2 connection");
- break;
-
- case CVscpClient::connType::MQTT:
- str = tr("VSCP MQTT connection");
- break;
-
- case CVscpClient::connType::UDP:
- str = tr("VSCP UDP connection");
- break;
-
- case CVscpClient::connType::MULTICAST:
- str = tr("VSCP multicast connection");
- break;
-
- case CVscpClient::connType::REST:
- str = tr("VSCP REST connection");
- break;
-
- case CVscpClient::connType::RS232:
- str = tr("VSCP RS-232 connection");
- break;
-
- case CVscpClient::connType::RS485:
- str = tr("VSCP RS-485 connection");
- break;
-
- case CVscpClient::connType::RAWCAN:
- str = tr("Raw CAN connection");
- break;
-
- case CVscpClient::connType::RAWMQTT:
- str = tr("Raw MQTT connection");
- break;
- }
+ QString str = tr("Unknown type");
+
+ switch (type) {
+
+ case CVscpClient::connType::NONE:
+ str = tr("No connection");
+ break;
+
+ case CVscpClient::connType::LOCAL:
+ str = tr("VSCP local connection");
+ break;
+
+ case CVscpClient::connType::TCPIP:
+ str = tr("VSCP tcp/ip connection");
+ break;
+
+ case CVscpClient::connType::CANAL:
+ str = tr("VSCP CANAL/Level I connection");
+ break;
+
+ case CVscpClient::connType::SOCKETCAN:
+ str = tr("VSCP socketcan connection");
+ break;
+
+ case CVscpClient::connType::WS1:
+ str = tr("VSCP websocket protocol 1 connection");
+ break;
+
+ case CVscpClient::connType::WS2:
+ str = tr("VSCP websocket protocol 2 connection");
+ break;
+
+ case CVscpClient::connType::MQTT:
+ str = tr("VSCP MQTT connection");
+ break;
+
+ case CVscpClient::connType::UDP:
+ str = tr("VSCP UDP connection");
+ break;
+
+ case CVscpClient::connType::MULTICAST:
+ str = tr("VSCP multicast connection");
+ break;
+
+ case CVscpClient::connType::REST:
+ str = tr("VSCP REST connection");
+ break;
+
+ case CVscpClient::connType::RS232:
+ str = tr("VSCP RS-232 connection");
+ break;
+
+ case CVscpClient::connType::RS485:
+ str = tr("VSCP RS-485 connection");
+ break;
- return str;
+ case CVscpClient::connType::RAWCAN:
+ str = tr("Raw CAN connection");
+ break;
+
+ case CVscpClient::connType::RAWMQTT:
+ str = tr("Raw MQTT connection");
+ break;
+ }
+
+ return str;
}
///////////////////////////////////////////////////////////////////////////////
// loadSettings *
//
-void vscpworks::loadSettings(void)
+void
+vscpworks::loadSettings(void)
{
- QString str;
+ QString str;
+
+ QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+
+ // Configuration folder
+ // --------------------
+ // Linux: "/home/akhe/.config" Config file is here (VSCP/vscp-works-qt)
+ // Windows:
+ {
+ QString path = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
+ path += "/";
+ path += QCoreApplication::applicationName();
+ path += "/";
+ m_configFolder = settings.value("configFolder", path).toString();
+ }
+ // Share folder
+ // ------------
+ // Linux: "/home/akhe/.local/share/vscp-works-qt" user data is here
+ // Windows:
+ {
+ QString path = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
+ path += "/";
+ m_shareFolder = settings.value("shareFolder", path).toString();
+ // If folder does not exist, create it
+ QDir dir(path);
+ if (!dir.exists()) {
+ dir.mkpath(".");
+ }
+ // Make a folder for receive sets
+ dir.mkpath("./rxsets");
+ // Make a folder for transmission sets
+ dir.mkpath("./txsets");
+ // Make a folder for autosaved/loaded data
+ dir.mkpath("./cache");
+ }
- QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+// VSCP Home folder
+// ----------------
+#ifdef WIN32
+ m_vscpHomeFolder = settings.value("vscpHomeFolder", "c:/program files/vscp").toString();
+#else
+ m_vscpHomeFolder = settings.value("vscpHomeFolder", "/var/lib/vscp").toString();
+#endif
- // Configuration folder
- // --------------------
- // Linux: "/home/akhe/.config" Config file is here (VSCP/vscp-works-qt)
- // Windows:
- {
- QString path = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
- path += "/";
- path += QCoreApplication::applicationName();
- path += "/";
- m_configFolder = settings.value("configFolder", path).toString();
- }
+ // System numerical base
+ // ---------------------
+ m_base = static_cast(settings.value("numericBase", "0").toInt());
- // Share folder
- // ------------
- // Linux: "/home/akhe/.local/share/vscp-works-qt" user data is here
- // Windows:
- {
- QString path = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
- path += "/";
- m_shareFolder = settings.value("shareFolder", path).toString();
- // If folder does not exist, create it
- QDir dir(path);
- if (!dir.exists()) {
- dir.mkpath(".");
- }
- // Make a folder for receive sets
- dir.mkpath("./rxsets");
- // Make a folder for transmission sets
- dir.mkpath("./txsets");
- // Make a folder for autosaved/loaded data
- dir.mkpath("./cache");
- }
+ // preferred language
+ m_preferredLanguage = settings.value("PreferredLanguage", "en").toString().toStdString();
+ ;
+
+ m_bEnableDarkTheme = settings.value("bDarkTheme", true).toBool();
+ m_bAskBeforeDelete = settings.value("bAskBeforeDelete", true).toBool();
+ m_bSaveAlwaysJSON = settings.value("bSaveAlwaysJson", true).toBool();
- // VSCP Home folder
- // ----------------
- #ifdef WIN32
- m_vscpHomeFolder = settings.value("vscpHomeFolder", "c:/program files/vscp").toString();
- #else
- m_vscpHomeFolder = settings.value("vscpHomeFolder", "/var/lib/vscp").toString();
- #endif
-
- // System numerical base
- // ---------------------
- m_base = static_cast(settings.value("numericBase", "0").toInt());
-
- // preferred language
- m_preferredLanguage = settings.value("PreferredLanguage", "en").toString().toStdString();;
-
- m_bEnableDarkTheme = settings.value("bDarkTheme", true).toBool();
- m_bAskBeforeDelete = settings.value("bAskBeforeDelete", true).toBool();
- m_bSaveAlwaysJSON = settings.value("bSaveAlwaysJson", true).toBool();
-
- // * * * Logging * * *
- int level = settings.value("fileLogLevel", 4).toInt(); // Default: 4 == "information";
- switch (level) {
- case 0:
- m_fileLogLevel = spdlog::level::trace;
- break;
- case 1:
- m_fileLogLevel = spdlog::level::debug;
- break;
- default:
- case 2:
- m_fileLogLevel = spdlog::level::info;
- break;
- case 3:
- m_fileLogLevel = spdlog::level::warn;
- break;
- case 4:
- m_fileLogLevel = spdlog::level::err;
- break;
- case 5:
- m_fileLogLevel = spdlog::level::critical;
- break;
- case 6:
- m_fileLogLevel = spdlog::level::off;
- break;
- };
- m_fileLogPattern = settings.value("fileLogPattern", "[vscpworks+] [%^%l%$] %v").toString().toStdString();
- m_fileLogPath = settings.value("fileLogPath", "~/.local/share/VSCP/vscpworks+/logs/vscpworks.log").toString().toStdString();
- m_maxFileLogSize = settings.value("fileLogMaxSize", 5242880).toInt();
- m_maxFileLogFiles = settings.value("fileLogMaxFiles", 10).toInt();
-
- level = settings.value("consoleLogLevel", 4).toInt(); // Default: 4 == "information";
- switch (level) {
- case 0:
- m_consoleLogLevel = spdlog::level::trace;
- break;
- case 1:
- m_consoleLogLevel = spdlog::level::debug;
- break;
- default:
- case 2:
- m_consoleLogLevel = spdlog::level::info;
- break;
- case 3:
- m_consoleLogLevel = spdlog::level::warn;
- break;
- case 4:
- m_consoleLogLevel = spdlog::level::err;
- break;
- case 5:
- m_consoleLogLevel = spdlog::level::critical;
- break;
- case 6:
- m_consoleLogLevel = spdlog::level::off;
- break;
- };
-
- m_consoleLogPattern = settings.value("consoleLogPattern", "[vscpworks+] [%^%l%$] %v").toString().toStdString();
-
- // * * * Session * * *
-
- m_session_maxEvents = settings.value("maxSessionEvents", -1).toInt();
- m_session_timeout = settings.value("sessionTimeout", "1000").toUInt();
- m_session_ClassDisplayFormat = static_cast(settings.value("sessionClassDisplayFormat",
- static_cast(CFrmSession::classDisplayFormat::symbolic)).toInt());
- m_session_TypeDisplayFormat = static_cast(settings.value("sessionTypeDisplayFormat",
- static_cast(CFrmSession::typeDisplayFormat::symbolic)).toInt());
- m_session_GuidDisplayFormat = static_cast(settings.value("sessionGuidDisplayFormat",
- static_cast(CFrmSession::guidDisplayFormat::guid)).toInt());
- m_session_bAutoConnect = settings.value("sessionAutoConnect", true).toBool();
- m_session_bShowFullTypeToken = settings.value("sessionShowFullTypeToken", true).toBool();
- m_session_bAutoSaveTxRows = settings.value("sessionAutoSaveTxRows", true).toBool();
-
- // * * * Config * * *
- m_config_base = static_cast(settings.value("configNumericBase", "1").toInt());
- m_config_bDisableColors = settings.value("configDisableColors", false).toBool();
- m_config_timeout = settings.value("configTimeout", "1000").toUInt();
-
- // VSCP event database last load date/time
- // ---------------------------------------
- m_lastEventDbLoadDateTime = settings.value("last-eventdb-download", "1970-01-01T00:00:00Z").toDateTime();
-
- // * * * Read in defined connections * * *
- // Note!!! Se notes in save
-
- int size = settings.beginReadArray("hosts");
- for (int i = 0; i < size; ++i) {
- settings.setArrayIndex(i);
- QString strJson = settings.value("connection").toString();
-
- QJsonObject conn;
- QJsonDocument doc = QJsonDocument::fromJson(strJson.toUtf8());
- if (!doc.isNull()) {
- if (doc.isObject()) {
- conn = doc.object();
- addConnection(conn);
- }
- else {
- qDebug() << "Connection document is not an object";
- }
- }
- else {
- qDebug() << "Invalid JSON for connection object\n";
- }
-
+ // * * * Logging * * *
+ int level = settings.value("fileLogLevel", 4).toInt(); // Default: 4 == "information";
+ switch (level) {
+ case 0:
+ m_fileLogLevel = spdlog::level::trace;
+ break;
+ case 1:
+ m_fileLogLevel = spdlog::level::debug;
+ break;
+ default:
+ case 2:
+ m_fileLogLevel = spdlog::level::info;
+ break;
+ case 3:
+ m_fileLogLevel = spdlog::level::warn;
+ break;
+ case 4:
+ m_fileLogLevel = spdlog::level::err;
+ break;
+ case 5:
+ m_fileLogLevel = spdlog::level::critical;
+ break;
+ case 6:
+ m_fileLogLevel = spdlog::level::off;
+ break;
+ };
+ m_fileLogPattern = settings.value("fileLogPattern", "[vscpworks+] [%^%l%$] %v").toString().toStdString();
+ m_fileLogPath = settings.value("fileLogPath", "~/.local/share/VSCP/vscpworks+/logs/vscpworks.log").toString().toStdString();
+ m_maxFileLogSize = settings.value("fileLogMaxSize", 5242880).toInt();
+ m_maxFileLogFiles = settings.value("fileLogMaxFiles", 10).toInt();
+
+ level = settings.value("consoleLogLevel", 4).toInt(); // Default: 4 == "information";
+ switch (level) {
+ case 0:
+ m_consoleLogLevel = spdlog::level::trace;
+ break;
+ case 1:
+ m_consoleLogLevel = spdlog::level::debug;
+ break;
+ default:
+ case 2:
+ m_consoleLogLevel = spdlog::level::info;
+ break;
+ case 3:
+ m_consoleLogLevel = spdlog::level::warn;
+ break;
+ case 4:
+ m_consoleLogLevel = spdlog::level::err;
+ break;
+ case 5:
+ m_consoleLogLevel = spdlog::level::critical;
+ break;
+ case 6:
+ m_consoleLogLevel = spdlog::level::off;
+ break;
+ };
+
+ m_consoleLogPattern = settings.value("consoleLogPattern", "[vscpworks+] [%^%l%$] %v").toString().toStdString();
+
+ // * * * Session * * *
+
+ m_session_maxEvents = settings.value("maxSessionEvents", -1).toInt();
+ m_session_timeout = settings.value("sessionTimeout", "1000").toUInt();
+ m_session_ClassDisplayFormat = static_cast(settings.value("sessionClassDisplayFormat",
+ static_cast(CFrmSession::classDisplayFormat::symbolic))
+ .toInt());
+ m_session_TypeDisplayFormat = static_cast(settings.value("sessionTypeDisplayFormat",
+ static_cast(CFrmSession::typeDisplayFormat::symbolic))
+ .toInt());
+ m_session_GuidDisplayFormat = static_cast(settings.value("sessionGuidDisplayFormat",
+ static_cast(CFrmSession::guidDisplayFormat::guid))
+ .toInt());
+ m_session_bAutoConnect = settings.value("sessionAutoConnect", true).toBool();
+ m_session_bShowFullTypeToken = settings.value("sessionShowFullTypeToken", true).toBool();
+ m_session_bAutoSaveTxRows = settings.value("sessionAutoSaveTxRows", true).toBool();
+
+ // * * * Config * * *
+ m_config_base = static_cast(settings.value("configNumericBase", "1").toInt());
+ m_config_bDisableColors = settings.value("configDisableColors", false).toBool();
+ m_config_timeout = settings.value("configTimeout", "1000").toUInt();
+
+ // VSCP event database last load date/time
+ // ---------------------------------------
+ m_lastEventDbLoadDateTime = settings.value("last-eventdb-download", "1970-01-01T00:00:00Z").toDateTime();
+
+ // * * * Read in defined connections * * *
+ // Note!!! Se notes in save
+
+ int size = settings.beginReadArray("hosts");
+ for (int i = 0; i < size; ++i) {
+ settings.setArrayIndex(i);
+ QString strJson = settings.value("connection").toString();
+
+ QJsonObject conn;
+ QJsonDocument doc = QJsonDocument::fromJson(strJson.toUtf8());
+ if (!doc.isNull()) {
+ if (doc.isObject()) {
+ conn = doc.object();
+ addConnection(conn);
+ }
+ else {
+ qDebug() << "Connection document is not an object";
+ }
}
- settings.endArray();
+ else {
+ qDebug() << "Invalid JSON for connection object\n";
+ }
+ }
+ settings.endArray();
}
///////////////////////////////////////////////////////////////////////////////
// writeSettings
//
-void vscpworks::writeSettings()
+void
+vscpworks::writeSettings()
{
- QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
-
- // General settings
- settings.setValue("configFolder", m_configFolder);
- settings.setValue("shareFolder", m_shareFolder);
- settings.setValue("vscpHomeFolder", m_vscpHomeFolder);
- settings.setValue("numericBase", QString::number(static_cast(m_base)));
- settings.setValue("PreferredLanguage", m_preferredLanguage.c_str());
- settings.setValue("bDarkTheme", m_bEnableDarkTheme);
- settings.setValue("bAskBeforeDelete", m_bAskBeforeDelete);
- settings.setValue("bSaveAlwaysJson", m_bSaveAlwaysJSON);
- settings.setValue("last-eventdb-download", m_lastEventDbLoadDateTime);
-
- // * * * Logging * * *
- int level = 4; // Default: 4 == "information";
- switch (m_fileLogLevel) {
- case spdlog::level::trace:
- level = 0;
- break;
- case spdlog::level::debug:
- level = 1;
- break;
- default:
- case spdlog::level::info:
- level = 2;
- break;
- case spdlog::level::warn:
- level = 3;
- break;
- case spdlog::level::err:
- level = 4;
- break;
- case spdlog::level::critical:
- level = 5;
- break;
- case spdlog::level::off:
- level = 6;
- break;
- };
-
- settings.setValue("fileLogLevel", level);
- settings.setValue("fileLogPattern", QString::fromStdString(m_fileLogPattern));
- settings.setValue("fileLogPath", QString::fromStdString(m_fileLogPath));
- settings.setValue("fileLogMaxSize", m_maxFileLogSize);
- settings.setValue("fileLogMaxFiles", m_maxFileLogFiles);
-
-
- level = 4; // Default: 4 == "information";
- switch (m_consoleLogLevel) {
- case spdlog::level::trace:
- level = 0;
- break;
- case spdlog::level::debug:
- level = 1;
- break;
- default:
- case spdlog::level::info:
- level = 2;
- break;
- case spdlog::level::warn:
- level = 3;
- break;
- case spdlog::level::err:
- level = 4;
- break;
- case spdlog::level::critical:
- level = 5;
- break;
- case spdlog::level::off:
- level = 6;
- break;
- };
-
- settings.setValue("consoleLogLevel", level);
- settings.setValue("consoleLogPattern", QString::fromStdString(m_consoleLogPattern));
-
-
- // * * * Session * * *
-
- settings.setValue("sessionTimeout", m_session_timeout);
- settings.setValue("maxSessionEvents", m_session_maxEvents);
-
- settings.setValue("sessionClassDisplayFormat", static_cast(m_session_ClassDisplayFormat));
- settings.setValue("sessionTypeDisplayFormat", static_cast(m_session_TypeDisplayFormat));
- settings.setValue("sessionGuidDisplayFormat", static_cast(m_session_GuidDisplayFormat));
-
- settings.setValue("sessionAutoConnect", m_session_bAutoConnect);
- settings.setValue("sessionShowFullTypeToken", m_session_bShowFullTypeToken);
- settings.setValue("sessionAutoSaveTxRows", m_session_bAutoSaveTxRows);
-
- // * * * Config * * *
- settings.setValue("configNumericBase", static_cast(m_config_base));
- settings.setValue("configDisableColors", m_config_bDisableColors);
- settings.setValue("configTimeout", m_config_timeout);
+ QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+
+ // General settings
+ settings.setValue("configFolder", m_configFolder);
+ settings.setValue("shareFolder", m_shareFolder);
+ settings.setValue("vscpHomeFolder", m_vscpHomeFolder);
+ settings.setValue("numericBase", QString::number(static_cast(m_base)));
+ settings.setValue("PreferredLanguage", m_preferredLanguage.c_str());
+ settings.setValue("bDarkTheme", m_bEnableDarkTheme);
+ settings.setValue("bAskBeforeDelete", m_bAskBeforeDelete);
+ settings.setValue("bSaveAlwaysJson", m_bSaveAlwaysJSON);
+ settings.setValue("last-eventdb-download", m_lastEventDbLoadDateTime);
+
+ // * * * Logging * * *
+ int level = 4; // Default: 4 == "information";
+ switch (m_fileLogLevel) {
+ case spdlog::level::trace:
+ level = 0;
+ break;
+ case spdlog::level::debug:
+ level = 1;
+ break;
+ default:
+ case spdlog::level::info:
+ level = 2;
+ break;
+ case spdlog::level::warn:
+ level = 3;
+ break;
+ case spdlog::level::err:
+ level = 4;
+ break;
+ case spdlog::level::critical:
+ level = 5;
+ break;
+ case spdlog::level::off:
+ level = 6;
+ break;
+ };
+
+ settings.setValue("fileLogLevel", level);
+ settings.setValue("fileLogPattern", QString::fromStdString(m_fileLogPattern));
+ settings.setValue("fileLogPath", QString::fromStdString(m_fileLogPath));
+ settings.setValue("fileLogMaxSize", m_maxFileLogSize);
+ settings.setValue("fileLogMaxFiles", m_maxFileLogFiles);
+
+ level = 4; // Default: 4 == "information";
+ switch (m_consoleLogLevel) {
+ case spdlog::level::trace:
+ level = 0;
+ break;
+ case spdlog::level::debug:
+ level = 1;
+ break;
+ default:
+ case spdlog::level::info:
+ level = 2;
+ break;
+ case spdlog::level::warn:
+ level = 3;
+ break;
+ case spdlog::level::err:
+ level = 4;
+ break;
+ case spdlog::level::critical:
+ level = 5;
+ break;
+ case spdlog::level::off:
+ level = 6;
+ break;
+ };
- writeConnections();
+ settings.setValue("consoleLogLevel", level);
+ settings.setValue("consoleLogPattern", QString::fromStdString(m_consoleLogPattern));
-}
+ // * * * Session * * *
+
+ settings.setValue("sessionTimeout", m_session_timeout);
+ settings.setValue("maxSessionEvents", m_session_maxEvents);
+
+ settings.setValue("sessionClassDisplayFormat", static_cast(m_session_ClassDisplayFormat));
+ settings.setValue("sessionTypeDisplayFormat", static_cast(m_session_TypeDisplayFormat));
+ settings.setValue("sessionGuidDisplayFormat", static_cast(m_session_GuidDisplayFormat));
+ settings.setValue("sessionAutoConnect", m_session_bAutoConnect);
+ settings.setValue("sessionShowFullTypeToken", m_session_bShowFullTypeToken);
+ settings.setValue("sessionAutoSaveTxRows", m_session_bAutoSaveTxRows);
+
+ // * * * Config * * *
+ settings.setValue("configNumericBase", static_cast(m_config_base));
+ settings.setValue("configDisableColors", m_config_bDisableColors);
+ settings.setValue("configTimeout", m_config_timeout);
+
+ writeConnections();
+}
///////////////////////////////////////////////////////////////////////////////
// writeConnections
//
-void vscpworks::writeConnections(void)
+void
+vscpworks::writeConnections(void)
{
- QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+ QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
- // Remove old entries
- int size = settings.beginReadArray("hosts");
- for(auto i=0; i::const_iterator it = m_mapConn.constBegin();
- while (it != m_mapConn.constEnd()) {
- settings.setArrayIndex(i++);
- QJsonDocument doc(it.value());
- QString strJson(doc.toJson(QJsonDocument::Compact));
- //qDebug() << it.key() << ": " << it.value() << ":" << strJson;
- settings.setValue("connection", strJson);
- it++;
- }
- settings.endArray();
+ // Remove old entries
+ int size = settings.beginReadArray("hosts");
+ for (auto i = 0; i < size; i++) {
+ settings.setArrayIndex(i);
+ settings.remove("connection");
+ }
+ settings.endArray();
+
+ // Connections
+ settings.beginWriteArray("hosts");
+ int i = 0;
+
+ /*
+ Note!
+ We need to convert QJsonObject into string due to a bug
+ that prevent saving/loading in some cases.
+ */
+ QMap::const_iterator it = m_mapConn.constBegin();
+ while (it != m_mapConn.constEnd()) {
+ settings.setArrayIndex(i++);
+ QJsonDocument doc(it.value());
+ QString strJson(doc.toJson(QJsonDocument::Compact));
+ // qDebug() << it.key() << ": " << it.value() << ":" << strJson;
+ settings.setValue("connection", strJson);
+ it++;
+ }
+ settings.endArray();
}
///////////////////////////////////////////////////////////////////////////////
// addConnection
//
-bool vscpworks::addConnection(QJsonObject& conn, bool bSave )
+bool
+vscpworks::addConnection(QJsonObject& conn, bool bSave)
{
- if (!conn["uuid"].toString().trimmed().length()) {
- conn["uuid"] = QUuid::createUuid().toString();
- }
+ if (!conn["uuid"].toString().trimmed().length()) {
+ conn["uuid"] = QUuid::createUuid().toString();
+ }
- // Add configuration item to map
- m_mapConn[conn["uuid"].toString().trimmed()] = conn;
+ // Add configuration item to map
+ m_mapConn[conn["uuid"].toString().trimmed()] = conn;
- // Save settings if requested to do so
- if (bSave) writeConnections();
+ // Save settings if requested to do so
+ if (bSave)
+ writeConnections();
- return true;
+ return true;
}
///////////////////////////////////////////////////////////////////////////////
// removeConnection
//
-bool vscpworks::removeConnection(const QString& uuid, bool bSave )
+bool
+vscpworks::removeConnection(const QString& uuid, bool bSave)
{
- QMap::iterator it;
- int n = m_mapConn.remove(uuid);
+ QMap::iterator it;
+ int n = m_mapConn.remove(uuid);
- // Save settings if requested to do so
- if (bSave) writeConnections();
+ // Save settings if requested to do so
+ if (bSave)
+ writeConnections();
- return true;
+ return true;
}
///////////////////////////////////////////////////////////////////////////////
// loadEventDb
//
-bool vscpworks::loadEventDb(void)
+bool
+vscpworks::loadEventDb(void)
{
- m_mutexVscpEventsMaps.lock();
+ m_mutexVscpEventsMaps.lock();
- m_evdb = QSqlDatabase::addDatabase("QSQLITE", "vscpevents");
- QString dbpath = m_shareFolder;
- dbpath += "vscp_events.sqlite3";
+ m_evdb = QSqlDatabase::addDatabase("QSQLITE", "vscpevents");
+ QString dbpath = m_shareFolder;
+ dbpath += "vscp_events.sqlite3";
- // If the database don't exist, bail out
- if (!QFile::exists(dbpath)) {
- QString err = QString(tr("The VSCP event database does not exist. Is it available? [%s]")).arg(dbpath);
- fprintf(stderr, "%s", err.toStdString().c_str());
- m_mutexVscpEventsMaps.unlock();
- return false;
- }
+ // If the database don't exist, bail out
+ if (!QFile::exists(dbpath)) {
+ QString err = QString(tr("The VSCP event database does not exist. Is it available? [%s]")).arg(dbpath);
+ fprintf(stderr, "%s", err.toStdString().c_str());
+ m_mutexVscpEventsMaps.unlock();
+ return false;
+ }
- m_evdb.setDatabaseName(dbpath);
-
- if (!m_evdb.open()) {
- QString err = QString(tr("The VSCP event database could not be opened. Is it available? [%s]")).arg(dbpath);
- fprintf(stderr, "%s", err.toStdString().c_str());
- m_mutexVscpEventsMaps.unlock();
- return false;
- }
- else {
- QSqlQuery queryClass("SELECT * FROM vscp_class order by class", m_evdb);
-
- while (queryClass.next()) {
- uint16_t classid = queryClass.value(0).toUInt();
- QString className = queryClass.value(1).toString();
- QString classToken = queryClass.value(2).toString();
- m_mapVscpClassToToken[classid] = classToken;
-
- QString sqlTypeQuery = QString("SELECT * FROM vscp_type WHERE link_to_class=%1").arg(classid);
- QSqlQuery queryType(sqlTypeQuery, m_evdb);
-
- while (queryType.next()) {
- uint typeIdx = queryType.value(0).toUInt();
- uint16_t typeId = queryType.value(1).toUInt();
- QString typeToken = queryType.value(3).toString();
- uint32_t combined = ((classid << 16) + typeId);
- m_mapVscpTypeToToken[(((uint32_t)classid << 16) + typeId)] = typeToken;
- }
- }
+ m_evdb.setDatabaseName(dbpath);
+ if (!m_evdb.open()) {
+ QString err = QString(tr("The VSCP event database could not be opened. Is it available? [%s]")).arg(dbpath);
+ fprintf(stderr, "%s", err.toStdString().c_str());
+ m_mutexVscpEventsMaps.unlock();
+ return false;
+ }
+ else {
+ QSqlQuery queryClass("SELECT * FROM vscp_class order by class", m_evdb);
+
+ while (queryClass.next()) {
+ uint16_t classid = queryClass.value(0).toUInt();
+ QString className = queryClass.value(1).toString();
+ QString classToken = queryClass.value(2).toString();
+ m_mapVscpClassToToken[classid] = classToken;
+
+ QString sqlTypeQuery = QString("SELECT * FROM vscp_type WHERE link_to_class=%1").arg(classid);
+ QSqlQuery queryType(sqlTypeQuery, m_evdb);
+
+ while (queryType.next()) {
+ uint typeIdx = queryType.value(0).toUInt();
+ uint16_t typeId = queryType.value(1).toUInt();
+ QString typeToken = queryType.value(3).toString();
+ uint32_t combined = ((classid << 16) + typeId);
+ m_mapVscpTypeToToken[(((uint32_t)classid << 16) + typeId)] = typeToken;
+ }
}
+ }
- m_mutexVscpEventsMaps.unlock();
- return true;
+ m_mutexVscpEventsMaps.unlock();
+ return true;
}
///////////////////////////////////////////////////////////////////////////////
// log
//
-void vscpworks::log(int level, const QString& message)
+void
+vscpworks::log(int level, const QString& message)
{
- // Log only messages
- // if (level <= m_logLevel) {
-
- // QDateTime now = QDateTime::currentDateTime();
-
- // QString strQuery = "INSERT INTO log (level, datetime, message) values (";
- // strQuery += QString::number(level);
- // strQuery += ",";
- // strQuery += "'" + now.toString() + "'";
- // strQuery += ",";
- // strQuery += "'" +message + "'";
- // strQuery += ");";
-
- // QSqlQuery query = QSqlQuery( m_worksdb );
- // if (!query.exec(strQuery)) {
- // qDebug() << "Failed to insert log message";
- // }
- // }
+ // Log only messages
+ // if (level <= m_logLevel) {
+
+ // QDateTime now = QDateTime::currentDateTime();
+
+ // QString strQuery = "INSERT INTO log (level, datetime, message) values (";
+ // strQuery += QString::number(level);
+ // strQuery += ",";
+ // strQuery += "'" + now.toString() + "'";
+ // strQuery += ",";
+ // strQuery += "'" +message + "'";
+ // strQuery += ");";
+
+ // QSqlQuery query = QSqlQuery( m_worksdb );
+ // if (!query.exec(strQuery)) {
+ // qDebug() << "Failed to insert log message";
+ // }
+ // }
}
-
-
-
///////////////////////////////////////////////////////////////////////////////
// openVscpWorksDatabase
//
-bool vscpworks::openVscpWorksDatabase(void)
+bool
+vscpworks::openVscpWorksDatabase(void)
{
- // Set up database
- QString eventdbname = m_shareFolder + "vscpworks.sqlite3";
-
- QString dbName(eventdbname);
- m_worksdb = QSqlDatabase::addDatabase("QSQLITE", "vscpworks");
- m_worksdb.setDatabaseName( dbName);
- m_worksdb.open();
-
- // Create GUID table if it does not exist
- QSqlQuery query = QSqlQuery( m_worksdb );
- if (!query.exec("CREATE TABLE IF NOT EXISTS guid ("
- "idx INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,"
- "guid TEXT UNIQUE,"
- "name TEXT,"
- "description TEXT);"
- ) ) {
- qDebug() << query.lastError();
- return false;
- }
+ // Set up database
+ QString eventdbname = m_shareFolder + "vscpworks.sqlite3";
+
+ QString dbName(eventdbname);
+ m_worksdb = QSqlDatabase::addDatabase("QSQLITE", "vscpworks");
+ m_worksdb.setDatabaseName(dbName);
+ m_worksdb.open();
+
+ // Create GUID table if it does not exist
+ QSqlQuery query = QSqlQuery(m_worksdb);
+ if (!query.exec("CREATE TABLE IF NOT EXISTS guid ("
+ "idx INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,"
+ "guid TEXT UNIQUE,"
+ "name TEXT,"
+ "description TEXT);")) {
+ qDebug() << query.lastError();
+ return false;
+ }
- // Create GUID name index
- if (!query.exec("CREATE INDEX IF NOT EXISTS \"idxGuidName\" ON \"guid\" (\"guid\" ASC)")) {
- qDebug() << query.lastError();
- return false;
- }
+ // Create GUID name index
+ if (!query.exec("CREATE INDEX IF NOT EXISTS \"idxGuidName\" ON \"guid\" (\"guid\" ASC)")) {
+ qDebug() << query.lastError();
+ return false;
+ }
- if (!query.exec("CREATE TABLE IF NOT EXISTS \"sensorindex\" ("
- "\"idx\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,"
- "\"link_to_guid\" INTEGER, "
- "\"sensor\" INTEGER, "
- "\"name\" TEXT, "
- "\"description\" TEXT );"
- ) ) {
- qDebug() << query.lastError();
- return false;
- }
+ if (!query.exec("CREATE TABLE IF NOT EXISTS \"sensorindex\" ("
+ "\"idx\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,"
+ "\"link_to_guid\" INTEGER, "
+ "\"sensor\" INTEGER, "
+ "\"name\" TEXT, "
+ "\"description\" TEXT );")) {
+ qDebug() << query.lastError();
+ return false;
+ }
- // Create sensor link + idx unique index
- if (!query.exec("CREATE UNIQUE INDEX IF NOT EXISTS \"idxSensors\" ON \"sensorindex\" (\"link_to_guid\" ASC, \"sensor\" ASC)")) {
- qDebug() << query.lastError();
- return false;
- }
+ // Create sensor link + idx unique index
+ if (!query.exec("CREATE UNIQUE INDEX IF NOT EXISTS \"idxSensors\" ON \"sensorindex\" (\"link_to_guid\" ASC, \"sensor\" ASC)")) {
+ qDebug() << query.lastError();
+ return false;
+ }
- // Create log table if it does not exist
- if (!query.exec("CREATE TABLE IF NOT EXISTS log ("
- "idx INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,"
- "level INTEGER,"
- "datetime TEXT,"
- "message TEXT);"
- ) ) {
- qDebug() << query.lastError();
- return false;
- }
+ // Create log table if it does not exist
+ if (!query.exec("CREATE TABLE IF NOT EXISTS log ("
+ "idx INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,"
+ "level INTEGER,"
+ "datetime TEXT,"
+ "message TEXT);")) {
+ qDebug() << query.lastError();
+ return false;
+ }
- // Load known GUID's to memory
- loadGuidTable();
+ // Load known GUID's to memory
+ loadGuidTable();
- // Load known sensors to memory
- loadSensorTable();
+ // Load known sensors to memory
+ loadSensorTable();
- return true;
+ return true;
}
///////////////////////////////////////////////////////////////////////////////
// loadGuidTable
//
-bool vscpworks::loadGuidTable(void)
+bool
+vscpworks::loadGuidTable(void)
{
- m_mutexGuidMap.lock();
+ m_mutexGuidMap.lock();
- QSqlQuery query("SELECT * FROM guid order by name", m_worksdb);
- if (QSqlError::NoError != query.lastError().type()) {
- m_mutexGuidMap.unlock();
- return false;
- }
+ QSqlQuery query("SELECT * FROM guid order by name", m_worksdb);
+ if (QSqlError::NoError != query.lastError().type()) {
+ m_mutexGuidMap.unlock();
+ return false;
+ }
- while (query.next()) {
- QString guid = query.value(1).toString();
- QString name = query.value(2).toString();
- m_mapGuidToSymbolicName[guid] = name;
- }
+ while (query.next()) {
+ QString guid = query.value(1).toString();
+ QString name = query.value(2).toString();
+ m_mapGuidToSymbolicName[guid] = name;
+ }
- m_mutexGuidMap.unlock();
- return true;
+ m_mutexGuidMap.unlock();
+ return true;
}
///////////////////////////////////////////////////////////////////////////////
// loadSensorTable
//
-bool vscpworks::loadSensorTable(void)
+bool
+vscpworks::loadSensorTable(void)
{
- m_mutexSensorIndexMap.lock();
+ m_mutexSensorIndexMap.lock();
- QSqlQuery query("SELECT * FROM sensorindex order by sensor", m_worksdb);
- if (QSqlError::NoError != query.lastError().type()) {
- m_mutexSensorIndexMap.unlock();
- return false;
- }
+ QSqlQuery query("SELECT * FROM sensorindex order by sensor", m_worksdb);
+ if (QSqlError::NoError != query.lastError().type()) {
+ m_mutexSensorIndexMap.unlock();
+ return false;
+ }
- while (query.next()) {
- int link_to_guid = query.value(1).toInt();
- int sensor = query.value(2).toInt();
- QString name = query.value(3).toString();
- m_mapSensorIndexToSymbolicName[(link_to_guid << 8) + sensor] = name;
- }
+ while (query.next()) {
+ int link_to_guid = query.value(1).toInt();
+ int sensor = query.value(2).toInt();
+ QString name = query.value(3).toString();
+ m_mapSensorIndexToSymbolicName[(link_to_guid << 8) + sensor] = name;
+ }
- m_mutexSensorIndexMap.unlock();
- return true;
+ m_mutexSensorIndexMap.unlock();
+ return true;
}
///////////////////////////////////////////////////////////////////////////////
// addGuid
//
-bool vscpworks::addGuid(QString guid, QString name)
+bool
+vscpworks::addGuid(QString guid, QString name)
{
- m_mutexGuidMap.lock();
+ m_mutexGuidMap.lock();
- // If the GUID symbolic name already exist we
- // are OK and done
- if (0 != m_mapGuidToSymbolicName[guid].length()) {
- m_mutexGuidMap.unlock();
- return true;
- }
+ // If the GUID symbolic name already exist we
+ // are OK and done
+ if (0 != m_mapGuidToSymbolicName[guid].length()) {
+ m_mutexGuidMap.unlock();
+ return true;
+ }
- QString strInsert = "INSERT INTO guid (guid, name) VALUES (%1,%2);";
- QSqlQuery queryClass(strInsert.arg(guid).arg(name), m_worksdb);
- if (queryClass.lastError().isValid()) {
- spdlog::error(std::string(tr("Failed to insert GUID into database %s")
- .arg(queryClass.lastError().text()).toStdString()));
- qDebug() << queryClass.lastError();
- return false;
- }
+ QString strInsert = "INSERT INTO guid (guid, name) VALUES (%1,%2);";
+ QSqlQuery queryClass(strInsert.arg(guid).arg(name), m_worksdb);
+ if (queryClass.lastError().isValid()) {
+ spdlog::error(std::string(tr("Failed to insert GUID into database %s")
+ .arg(queryClass.lastError().text())
+ .toStdString()));
+ qDebug() << queryClass.lastError();
+ return false;
+ }
- // Add to loaded
- m_mapGuidToSymbolicName[guid] = name;
+ // Add to loaded
+ m_mapGuidToSymbolicName[guid] = name;
- m_mutexGuidMap.unlock();
- return true;
+ m_mutexGuidMap.unlock();
+ return true;
}
///////////////////////////////////////////////////////////////////////////////
// getIdxForGuidRecord
//
-int vscpworks::getIdxForGuidRecord(const QString& guid)
+int
+vscpworks::getIdxForGuidRecord(const QString& guid)
{
- int index = -1;
+ int index = -1;
- m_mutexGuidMap.lock();
+ m_mutexGuidMap.lock();
- QString strInsert = "SELECT * FROM guid WHERE guid='%1';";
+ QString strInsert = "SELECT * FROM guid WHERE guid='%1';";
- QSqlQuery query(strInsert.arg(guid), m_worksdb);
- if (query.lastError().isValid()) {
- m_mutexGuidMap.unlock();
- return -1;
- }
+ QSqlQuery query(strInsert.arg(guid), m_worksdb);
+ if (query.lastError().isValid()) {
+ m_mutexGuidMap.unlock();
+ return -1;
+ }
- if (query.next()) {
- index = query.value(0).toInt();
- }
+ if (query.next()) {
+ index = query.value(0).toInt();
+ }
- m_mutexGuidMap.unlock();
- return index;
+ m_mutexGuidMap.unlock();
+ return index;
}
///////////////////////////////////////////////////////////////////////////////
// getShortTypeToken
//
-QString vscpworks::getShortTypeToken(uint16_t vscpClass, uint16_t vscpType)
+QString
+vscpworks::getShortTypeToken(uint16_t vscpClass, uint16_t vscpType)
{
- // * * * Type * * *
- QString strTypeToken = m_mapVscpTypeToToken[((uint32_t)vscpClass << 16) + vscpType];
- if (vscpClass >= 1024) {
- strTypeToken = strTypeToken.right(strTypeToken.length()-11); // Remove "VSCP2_TYPE_"
- }
- else {
- strTypeToken = strTypeToken.right(strTypeToken.length()-10); // Remove "VSCP_TYPE_"
- }
- int posUnderscore = strTypeToken.indexOf("_");
- if (posUnderscore) posUnderscore++;
- return strTypeToken.right(strTypeToken.length()-posUnderscore);
+ // * * * Type * * *
+ QString strTypeToken = m_mapVscpTypeToToken[((uint32_t)vscpClass << 16) + vscpType];
+ if (vscpClass >= 1024) {
+ strTypeToken = strTypeToken.right(strTypeToken.length() - 11); // Remove "VSCP2_TYPE_"
+ }
+ else {
+ strTypeToken = strTypeToken.right(strTypeToken.length() - 10); // Remove "VSCP_TYPE_"
+ }
+ int posUnderscore = strTypeToken.indexOf("_");
+ if (posUnderscore)
+ posUnderscore++;
+ return strTypeToken.right(strTypeToken.length() - posUnderscore);
}
///////////////////////////////////////////////////////////////////////////////
// getHelpUrlForClass
//
-QString vscpworks::getHelpUrlForClass(uint16_t vscpClass)
+QString
+vscpworks::getHelpUrlForClass(uint16_t vscpClass)
{
- // https://grodansparadis.github.io/vscp-doc-spec/#/./class1.protocol
- mustache templ{"https://grodansparadis.github.io/vscp-doc-spec/#/./{{vscp-class-token}}"};
-
- kainjow::mustache::data _data;
- _data.set("vscp-class-token", m_mapVscpClassToToken[vscpClass].toLower().toStdString());
- return templ.render(_data).c_str();
+ // https://grodansparadis.github.io/vscp-doc-spec/#/./class1.protocol
+ mustache templ{ "https://grodansparadis.github.io/vscp-doc-spec/#/./{{vscp-class-token}}" };
+
+ kainjow::mustache::data _data;
+ _data.set("vscp-class-token", m_mapVscpClassToToken[vscpClass].toLower().toStdString());
+ return templ.render(_data).c_str();
}
///////////////////////////////////////////////////////////////////////////////
// getHelpUrlForType
//
-QString vscpworks::getHelpUrlForType(uint16_t vscpClass, uint16_t vscpType)
+QString
+vscpworks::getHelpUrlForType(uint16_t vscpClass, uint16_t vscpType)
{
- // https://grodansparadis.github.io/vscp-doc-spec/#/./class1.measurement?id=type6
- std::string strTemp = getHelpUrlForClass(vscpClass).toStdString();
- strTemp += "?id=type{{vscp-type-id}}";
- mustache templ{strTemp};
-
- kainjow::mustache::data _data;
- _data.set("vscp-type-id", QString::number(vscpType).toStdString());
- return templ.render(_data).c_str();
+ // https://grodansparadis.github.io/vscp-doc-spec/#/./class1.measurement?id=type6
+ std::string strTemp = getHelpUrlForClass(vscpClass).toStdString();
+ strTemp += "?id=type{{vscp-type-id}}";
+ mustache templ{ strTemp };
+
+ kainjow::mustache::data _data;
+ _data.set("vscp-type-id", QString::number(vscpType).toStdString());
+ return templ.render(_data).c_str();
}
///////////////////////////////////////////////////////////////////////////////
// getUnitInfo
//
-CVscpUnit vscpworks::getUnitInfo(uint16_t vscpClass, uint16_t vscpType, uint8_t unit)
+CVscpUnit
+vscpworks::getUnitInfo(uint16_t vscpClass, uint16_t vscpType, uint8_t unit)
{
- CVscpUnit u(unit);
+ CVscpUnit u(unit);
- u.m_vscp_class = vscpClass;
- u.m_vscp_type = vscpType;
+ u.m_vscp_class = vscpClass;
+ u.m_vscp_type = vscpType;
- QString strQuery = "SELECT * FROM vscp_unit WHERE nunit='%1' AND link_to_class=%2 AND link_to_type=%3;";
+ QString strQuery = "SELECT * FROM vscp_unit WHERE nunit='%1' AND link_to_class=%2 AND link_to_type=%3;";
- QSqlQuery query(m_evdb);
- query.exec(strQuery.arg(unit).arg(vscpClass).arg(vscpType));
+ QSqlQuery query(m_evdb);
+ query.exec(strQuery.arg(unit).arg(vscpClass).arg(vscpType));
- while (query.next()) {
- u.m_unit = query.value(3).toInt();
- u.m_name = query.value(4).toString().toStdString();
- u.m_description = query.value(5).toString().toStdString();
- u.m_conversion0 = query.value(6).toString().toStdString();
- u.m_conversion = query.value(7).toString().toStdString();
- u.m_symbol_ascii = query.value(8).toString().toStdString();
- u.m_symbol_utf8= query.value(9).toString().toStdString();
- }
+ while (query.next()) {
+ u.m_unit = query.value(3).toInt();
+ u.m_name = query.value(4).toString().toStdString();
+ u.m_description = query.value(5).toString().toStdString();
+ u.m_conversion0 = query.value(6).toString().toStdString();
+ u.m_conversion = query.value(7).toString().toStdString();
+ u.m_symbol_ascii = query.value(8).toString().toStdString();
+ u.m_symbol_utf8 = query.value(9).toString().toStdString();
+ }
- return u;
+ return u;
}
///////////////////////////////////////////////////////////////////////////////
// addVscpEventToJsRenderFunction
//
-bool vscpworks::addVscpEventToJsRenderFunction(QJSEngine& engine, vscpEvent* pev)
+bool
+vscpworks::addVscpEventToJsRenderFunction(QJSEngine& engine, vscpEvent* pev)
{
- QJSValue result;
- std::string str;
- std::string strEvaluate;
-
- if (nullptr != pev) return false;
-
- strEvaluate = "var e = {};e.vscpData = [";
- vscp_writeDataToString(str, pev);
- strEvaluate += str.c_str();
- strEvaluate += "];e.sizeData=";
- strEvaluate += vscp_str_format("%d",pev->sizeData);
- strEvaluate += ";e.guid = [";
- vscp_writeGuidArrayToString(str, pev->GUID, true);
- strEvaluate += str;
- strEvaluate += "];e.vscpHead=";
- strEvaluate += vscp_str_format("%d",pev->head);
- strEvaluate += ";e.vscpCrc=";
- strEvaluate += vscp_str_format("%d",pev->crc);
- strEvaluate += ";e.vscpObid=";
- strEvaluate += vscp_str_format("%lu",pev->obid);
- strEvaluate += ";e.vscpTimeStamp=";
- strEvaluate += vscp_str_format("%lu",pev->timestamp);
- strEvaluate += ";e.vscpClass=";
- strEvaluate += vscp_str_format("%d",pev->vscp_class);
- strEvaluate += ";e.vscpType=";
- strEvaluate += vscp_str_format("%d",pev->vscp_type);
- strEvaluate += ";e.vscpYear=";
- strEvaluate += vscp_str_format("%d",pev->year);
- strEvaluate += ";e.vscpMonth=";
- strEvaluate += vscp_str_format("%d",pev->month);
- strEvaluate += ";e.vscpDay=";
- strEvaluate += vscp_str_format("%d",pev->day);
- strEvaluate += ";e.vscpHour=";
- strEvaluate += vscp_str_format("%d",pev->hour);
- strEvaluate += ";e.vscpMinute=";
- strEvaluate += vscp_str_format("%d",pev->minute);
- strEvaluate += ";e.vscpSecond=";
- strEvaluate += vscp_str_format("%d",pev->second);
- strEvaluate += ";";
-
- result = engine.evaluate(strEvaluate.c_str());
- return result.isError();
+ QJSValue result;
+ std::string str;
+ std::string strEvaluate;
+
+ if (nullptr != pev)
+ return false;
+
+ strEvaluate = "var e = {};e.vscpData = [";
+ vscp_writeDataToString(str, pev);
+ strEvaluate += str.c_str();
+ strEvaluate += "];e.sizeData=";
+ strEvaluate += vscp_str_format("%d", pev->sizeData);
+ strEvaluate += ";e.guid = [";
+ vscp_writeGuidArrayToString(str, pev->GUID, true);
+ strEvaluate += str;
+ strEvaluate += "];e.vscpHead=";
+ strEvaluate += vscp_str_format("%d", pev->head);
+ strEvaluate += ";e.vscpCrc=";
+ strEvaluate += vscp_str_format("%d", pev->crc);
+ strEvaluate += ";e.vscpObid=";
+ strEvaluate += vscp_str_format("%lu", pev->obid);
+ strEvaluate += ";e.vscpTimeStamp=";
+ strEvaluate += vscp_str_format("%lu", pev->timestamp);
+ strEvaluate += ";e.vscpClass=";
+ strEvaluate += vscp_str_format("%d", pev->vscp_class);
+ strEvaluate += ";e.vscpType=";
+ strEvaluate += vscp_str_format("%d", pev->vscp_type);
+ strEvaluate += ";e.vscpYear=";
+ strEvaluate += vscp_str_format("%d", pev->year);
+ strEvaluate += ";e.vscpMonth=";
+ strEvaluate += vscp_str_format("%d", pev->month);
+ strEvaluate += ";e.vscpDay=";
+ strEvaluate += vscp_str_format("%d", pev->day);
+ strEvaluate += ";e.vscpHour=";
+ strEvaluate += vscp_str_format("%d", pev->hour);
+ strEvaluate += ";e.vscpMinute=";
+ strEvaluate += vscp_str_format("%d", pev->minute);
+ strEvaluate += ";e.vscpSecond=";
+ strEvaluate += vscp_str_format("%d", pev->second);
+ strEvaluate += ";";
+
+ result = engine.evaluate(strEvaluate.c_str());
+ return result.isError();
}
///////////////////////////////////////////////////////////////////////////////
// replaceVscpRenderVariables
//
-std::string vscpworks::replaceVscpRenderVariables(const std::string& str)
+std::string
+vscpworks::replaceVscpRenderVariables(const std::string& str)
{
- std::string strwrk = str;
+ std::string strwrk = str;
- mustache templVar{ strwrk };
- kainjow::mustache::data _data;
- _data.set("newline", "\r\n");
- _data.set("quote", "\"");
- _data.set("quote", "'");
- templVar.render(_data);
+ mustache templVar{ strwrk };
+ kainjow::mustache::data _data;
+ _data.set("newline", "\r\n");
+ _data.set("quote", "\"");
+ _data.set("quote", "'");
+ templVar.render(_data);
- return strwrk;
+ return strwrk;
}
///////////////////////////////////////////////////////////////////////////////
// getVscpRenderData
//
-QStringList vscpworks::getVscpRenderData(uint16_t vscpClass, uint16_t vscpType, QString type)
+QStringList
+vscpworks::getVscpRenderData(uint16_t vscpClass, uint16_t vscpType, QString type)
{
- QStringList strList;
- QString strQuery = "SELECT * FROM vscp_render WHERE type='%1' AND link_to_class=%2 AND link_to_type=%3;";
- qDebug() << strQuery.arg(type).arg(vscpClass).arg(vscpType);
-
- QSqlQuery query(m_evdb);
- query.exec(strQuery.arg(type).arg(vscpClass).arg(vscpType));
- // Try if there is a general render definition if none
- // is defined for the event
- qDebug() << query.size();
- qDebug() << query.numRowsAffected();
- if (query.next()) {
- query.first();
+ QStringList strList;
+ QString strQuery = "SELECT * FROM vscp_render WHERE type='%1' AND link_to_class=%2 AND link_to_type=%3;";
+ qDebug() << strQuery.arg(type).arg(vscpClass).arg(vscpType);
+
+ QSqlQuery query(m_evdb);
+ query.exec(strQuery.arg(type).arg(vscpClass).arg(vscpType));
+ // Try if there is a general render definition if none
+ // is defined for the event
+ qDebug() << query.size();
+ qDebug() << query.numRowsAffected();
+ if (query.next()) {
+ query.first();
+ }
+ else {
+ // Definition for all events of class
+ query.exec(strQuery.arg(type).arg(vscpClass).arg(-1));
+ query.first();
+ }
+ do {
+
+ // * * * VARIABLES * * *
+ QString vscpVariables = query.value(4).toString();
+ if (vscpVariables.startsWith("BASE64:", Qt::CaseInsensitive)) {
+ vscpVariables = vscpVariables.right(vscpVariables.length() - 7);
+ vscpVariables = QByteArray::fromBase64(vscpVariables.toLatin1(), QByteArray::Base64Encoding);
}
- else {
- // Definition for all events of class
- query.exec(strQuery.arg(type).arg(vscpClass).arg(-1));
- query.first();
+
+ qDebug() << vscpVariables;
+ qDebug() << "---------------------------------------------";
+ vscpVariables.replace("\"", ""e;").replace(""e;", "'").replace("&", "&").replace(">", ">").replace("<", "<");
+ qDebug() << vscpVariables;
+
+ // * * * TEMPLATES * * *
+ QString vscpTemplate = query.value(5).toString();
+ if (vscpTemplate.startsWith("BASE64:", Qt::CaseInsensitive)) {
+ vscpTemplate = vscpTemplate.right(vscpTemplate.length() - 7);
+ vscpTemplate = QByteArray::fromBase64(vscpVariables.toLatin1(), QByteArray::Base64Encoding);
}
- do {
-
- // * * * VARIABLES * * *
- QString vscpVariables = query.value(4).toString();
- if (vscpVariables.startsWith("BASE64:", Qt::CaseInsensitive)) {
- vscpVariables = vscpVariables.right(vscpVariables.length()-7);
- vscpVariables = QByteArray::fromBase64(vscpVariables.toLatin1(), QByteArray::Base64Encoding);
- }
-
- qDebug() << vscpVariables;
- qDebug() << "---------------------------------------------";
- vscpVariables.replace("\"",""e;").replace(""e;","'").replace("&","&").replace(">",">").replace("<","<");
- qDebug() << vscpVariables;
-
- // * * * TEMPLATES * * *
- QString vscpTemplate = query.value(5).toString();
- if (vscpTemplate.startsWith("BASE64:", Qt::CaseInsensitive)) {
- vscpTemplate = vscpTemplate.right(vscpTemplate.length()-7);
- vscpTemplate = QByteArray::fromBase64(vscpVariables.toLatin1(), QByteArray::Base64Encoding);
- }
- vscpTemplate.replace("\"",""e;").replace(""e;","'").replace("&","&").replace(">",">").replace("<","<");
- qDebug() << vscpTemplate;
- strList << vscpVariables << vscpTemplate;
- } while (query.next());
-
- return strList;
+ vscpTemplate.replace("\"", ""e;").replace(""e;", "'").replace("&", "&").replace(">", ">").replace("<", "<");
+ qDebug() << vscpTemplate;
+ strList << vscpVariables << vscpTemplate;
+ } while (query.next());
+
+ return strList;
}
///////////////////////////////////////////////////////////////////////////////
// getVscpRenderFunctions
//
-bool vscpworks::getVscpRenderFunctions(std::map& map,
- std::string& strVariables)
+bool
+vscpworks::getVscpRenderFunctions(std::map& map,
+ std::string& strVariables)
{
- //QStringList strlst = QString(strVariables.c_str())::split("\n");
- std::deque strlst;
- vscp_split(strlst, strVariables, "\n");
-
- std::string name;
- std::string func;
- size_t posFunc;
- size_t posColon;
- foreach (std::string str, strlst) {
- vscp_trim(str);
- if (std::string::npos != (posFunc = str.find("function()"))) {
- // We have a function "id: function() {....}
- // it can have one line or be multiline 6
- if (posColon = (posColon = str.find(":"))) {
- return false;
- }
- name = vscp_str_left(str, posColon);
- func = vscp_str_right(str, str.length()-posFunc);
- }
- else {
- func += str + "\n";
- }
-
- // When {} pairs are equal in func we are done
- int cnt = 0;
- foreach(QChar c, func) {
- if('{' == c) {
- cnt++;
- }
- if('}' == c) {
- cnt--;
- }
- }
-
- if (!cnt) {
- map[name] = func;
- }
+ // QStringList strlst = QString(strVariables.c_str())::split("\n");
+ std::deque strlst;
+ vscp_split(strlst, strVariables, "\n");
+
+ std::string name;
+ std::string func;
+ size_t posFunc;
+ size_t posColon;
+ foreach (std::string str, strlst) {
+ vscp_trim(str);
+ if (std::string::npos != (posFunc = str.find("function()"))) {
+ // We have a function "id: function() {....}
+ // it can have one line or be multiline 6
+ if (posColon = (posColon = str.find(":"))) {
+ return false;
+ }
+ name = vscp_str_left(str, posColon);
+ func = vscp_str_right(str, str.length() - posFunc);
+ }
+ else {
+ func += str + "\n";
}
- return true;
+ // When {} pairs are equal in func we are done
+ int cnt = 0;
+ foreach (QChar c, func) {
+ if ('{' == c) {
+ cnt++;
+ }
+ if ('}' == c) {
+ cnt--;
+ }
+ }
+
+ if (!cnt) {
+ map[name] = func;
+ }
+ }
+
+ return true;
}
///////////////////////////////////////////////////////////////////////////////
// renderVscpDataTemplate
//
-std::string vscpworks::renderVscpDataTemplate(std::map& map,
- std::string& strTemplate)
+std::string
+vscpworks::renderVscpDataTemplate(std::map& map,
+ std::string& strTemplate)
{
- std::string strResult;
+ std::string strResult;
- return strResult;
-}
+ return strResult;
+}
///////////////////////////////////////////////////////////////////////////////
// newClientWindow
@@ -1142,7 +1166,7 @@ vscpworks::newChildWindow(QMainWindow* pwnd)
// clearChildWindow
//
-void
+void
vscpworks::clearChildWindow(QMainWindow* pwnd)
{
for (QMainWindow* pitem : m_childWindows) {
diff --git a/src/vscpworks.h b/src/vscpworks.h
index 387798ee..996cc5cb 100644
--- a/src/vscpworks.h
+++ b/src/vscpworks.h
@@ -38,21 +38,21 @@
#include "cfrmsession.h"
#include
+#include
+#include
+#include
#include
#include
-#include
-#include
#include
-#include
#include
-#include
+#include
+#include
#include
-#include
#include
-#include // Needs C++11 -std=c++11
#include
+#include // Needs C++11 -std=c++11
#include "spdlog/sinks/rotating_file_sink.h"
#include "spdlog/spdlog.h"
@@ -71,14 +71,17 @@ Q_DECLARE_METATYPE(vscpEventEx)
// home folder is used for storage of program configuration
// system folder holds databases etc
#ifdef WIN32
-#define DEFAULT_HOME_FOLDER "c:/programdata/vscp/vscpworks/"
-#define DEFAULT_VSCP_SYSTEM_FOLDER "c:/programdata/vscp/"
-#else
-#define DEFAULT_HOME_FOLDER "~/.vscpworks/"
-#define DEFAULT_VSCP_SYSTEM_FOLDER "/var/lib/vscp/"
+#define DEFAULT_HOME_FOLDER "c:/programdata/vscp/vscpworks/"
+#define DEFAULT_VSCP_SYSTEM_FOLDER "c:/programdata/vscp/"
+#else
+#define DEFAULT_HOME_FOLDER "~/.vscpworks/"
+#define DEFAULT_VSCP_SYSTEM_FOLDER "/var/lib/vscp/"
#endif
-enum class numerical_base {HEX, DECIMAL, OCTAL, BINARY};
+enum class numerical_base { HEX,
+ DECIMAL,
+ OCTAL,
+ BINARY };
class FileDownloader;
@@ -87,428 +90,428 @@ class FileDownloader;
*/
class vscpworks : public QApplication {
- Q_OBJECT
-
- public:
- /*!
- Constructor
- */
- vscpworks(int &argc, char **argv);
-
- /*!
- Destructor
- */
- ~vscpworks();
-
- const QString URL_EVENT_VERSION = tr("https://www.vscp.org/events/version.js");
- const QString URL_EVENT_DATABASE = tr("https://www.vscp.org/events/vscp_events.sqlite3");
-
- /*!
- Add connection
- @param conn JSON connection object
- @param bSave Save connections if set to true
- */
- bool addConnection(QJsonObject& conn, bool bSave = false);
-
- /*!
- Remove connection
- @param uuid Id for connection
- @param bSave Save connections if set to true
- */
- bool removeConnection(const QString& uuid, bool bSave = false);
-
- /*!
- Load configuration settings from disk
- */
- void loadSettings(void);
-
- /*!
- Save configuration settings to disk
- */
- void writeSettings(void);
-
- /*!
- Save connections to disk
- */
- void writeConnections(void);
-
- /*!
- Check the remote event information at
- https://vscp.org/events for the file
- version.json which hold the release
- version for the files. A new version
- of the db should be downloaded if this
- date is newer then stored.
-
- @return True if current rate is up to date, if not
- false is returned and a new version of the
- database should be downloaded.
- */
- //bool checkRemoteEventDbVersion(void);
-
- /*!
- Loading data from the VSCP Event database into memory
- @return true on success
- */
- bool loadEventDb(void);
-
- /*!
- Loading data from the vscpworks database GUID table into memory
- @return true on success
- */
- bool loadGuidTable(void);
-
- /*!
- Loading data from the vscpworks database sensorindex table into memory
- @return true on success
- */
- bool loadSensorTable(void);
-
- /*!
- Add GUID with symbolic name
- @param name GUID symbolic name of GUID to add
- @param guid GUID to add
- @return True on success, false on failure
- */
- bool addGuid(QString name, QString guid);
-
- /*!
- Get index for GUID record
- @param guid GUID on string form
- @return index or -1 if error.
- */
- int getIdxForGuidRecord(const QString& guid);
-
- /*!
- Convert integer number to selected base.
- The resulting string representation of the number have
- - No prefix if decimal
- - "0x" prefix if hexadecimal
- - "0o" prefix if octal
- - "0b" prefix if binary
- @param value Integer that should be converted to a number
- in the current base.
- @param tobase If set to -1 (default) the current base is used for
- base, otherwise the set base will be used.
- @return String representing number with prepended base prefix.
- */
- QString decimalToStringInBase(uint32_t value, int tobase = -1);
-
- /*!
- Convert integer number to selected base
- The resulting string representation of the number have
- - No prefix if decimal
- - "0x" prefix if hexadecimal
- - "0o" prefix if octal
- - "0b" prefix if binary
- @param strvalue Integer on string form whish should be converted to
- a number in the current base.
- @param tobase If set to -1 (default) the current base is used for
- base, otherwise the set base will be used.
- @return String representing number with prepended base prefix.
- */
- QString decimalToStringInBase(const QString& strvalue, int tobase = -1);
-
- /*!
- Get connection name
- @param type Connection code
- @return String with connection descriptive name
- */
- QString getConnectionName(CVscpClient::connType type);
-
- /*!
- Create and open the VSCP Works database with tables and structure
- */
- bool openVscpWorksDatabase(void);
-
- /*!
- Log one message to the logging database
- @param level Log level 0 is lowest
- @param message to log
- */
- void log(int level, const QString& message);
-
- /*!
- Get short token from class/type. That is a token on the form
- "TEMPERATURE" instead of "CLASS1_TYPE_MEASUREMENT_TEMPERATURE"
- @param vscpClass A valid VSCP class token
- @param vscpType A valid VSCP type token for the class.
- @return A string contining the token
- */
- QString getShortTypeToken(uint16_t vscpClass, uint16_t vscpType);
-
- /*!
- Get URL for specification page that have info about this class
- @param vscpClass VSCP class to get help URL for
- @return URL to help page
- */
- QString getHelpUrlForClass(uint16_t vscpClass);
-
- /*!
- Get URL for specification page section that have info about this class/type
- @param vscpClass VSCP class to get help URL for
- @param vscpType VSCP type to get help URL for
- @return URL to help page
- */
- QString getHelpUrlForType(uint16_t vscpClass, uint16_t vscpType);
-
- /*!
- Get unit information info from database for a specific event
- @param vscpClass VSCP Class to lookup unit for
- @param vscpClass VSCP TYpe to lookup unit for
- @param unit The VSCP specific unit code to look up
- @return Returns a CVscpUnit with unit data filled in. Defaults to zero.
- */
- CVscpUnit getUnitInfo(uint16_t vscpClass, uint16_t vscpType, uint8_t unit=0);
-
- /*!
- Replace mustache special character variable data with
- proper values
- @param str String that should have tags replaces
- @return Handled string
- */
- std::string replaceVscpRenderVariables(const std::string& str);
-
- /*!
- Get VSCP data conversion function definitions and there names
- @param map A map that will get name/func pairs
- @param strVariable String that holds variable definitions
- @return True on success, false on failure
- */
- bool getVscpRenderFunctions(std::map& map,
- std::string& strVariables);
-
- /*!
- Fill the render template with data from a supplied map.
- The map holds pairs like
-
- lbl-start, ''
- lbl-end, ''
- val-start, ''
- val-end, ''
- newline, '
'
- crc8, '12345'
- ....
-
- @param map A map holding variables and value pairs
- @param strTemplate This is the template to use
- @return A string generated from the supplied template and variables
- */
- std::string renderVscpDataTemplate(std::map& map,
- std::string& strTemplate);
-
- /*!
- Get render variables and template for a class/type pair
- @param vscpClass The VSCP class to get variables/template for
- @param vscpType The VSCP type to get variables/template for
- @param type Environment to get variables/template for, Default is "vscpworks"
- @return A string list with the variables string at pos 0 and
- the template in pos 1
- */
- QStringList getVscpRenderData(uint16_t vscpClass,
- uint16_t vscpType,
- QString type="vscpworks");
-
- /*!
- Define global JavaScript object of a VSCP event for further
- processing by other evaluations
- @param engine Active Qt JavaScript engine
- @param pev VSCP Event to fill in
- @return True on success, false on failure
- */
- bool addVscpEventToJsRenderFunction(QJSEngine& engine, vscpEvent* pev);
-
- /*!
- A client adds itself to the list of child windows
- so the main window can delete the if needed.
- */
- void newChildWindow(QMainWindow* pwnd);
-
- /*!
- A client removes itself from the list of child windows when
- it destroys itself.
- */
- void clearChildWindow(QMainWindow* pwnd);
-
- // ------------------------------------------------------------------------
- // Global Configuration information below
- // This info is read from a configuration file
- // at startup and saved on close. The configuration
- // file should be placed in the home folder.
- // ------------------------------------------------------------------------
-
- // ------------------------------------------------------------------------
-
- /// Folder used for configuration
- /// Linux: ~/.configure/VSCP/(vscpworks+.conf)
- QString m_configFolder;
-
- /// Folder for writeable data
- /// Linux: ~/.local/share/vscp/vscpworks+
- QString m_shareFolder;
-
- // Folder used for VSCP files like db's
- // Linux:
- // vscp/drivers/level1 - contain level one drivers
- // vscp/drivers/level2 - contain level two drivers
- // Windows:
- // c:/program data/vscp/drivers/level1
- // c:/program data/vscp/drivers/level2
- QString m_vscpHomeFolder;
-
- // ---------------------------------------------------
-
- /// Enable darktheme
- bool m_bEnableDarkTheme;
-
- /// Numerical base for all numericals in system
- numerical_base m_base;
-
- /*!
- Prefered language to use for MDF information
- */
- std::string m_preferredLanguage;
-
- /*!
- If true (default) ask before deleting or
- clearing data
- */
- bool m_bAskBeforeDelete;
-
- /*!
- If set to true will not ask for save format
- */
- bool m_bSaveAlwaysJSON;
-
- //**************************************************************************
- // LOGGER (SPDLOG)
- //**************************************************************************
-
- bool m_bEnableFileLog;
- spdlog::level::level_enum m_fileLogLevel;
- std::string m_fileLogPattern;
- std::string m_fileLogPath;
- uint32_t m_maxFileLogSize;
- uint16_t m_maxFileLogFiles;
-
- bool m_bEnableConsoleLog;
- spdlog::level::level_enum m_consoleLogLevel;
- std::string m_consoleLogPattern;
-
- // ------------------------------------------------------------------------
- // Session
- // ------------------------------------------------------------------------
-
- /// Response timeout used for session window
- uint32_t m_session_timeout;
-
- /*!
- Maximum number of events in a session receive list
- -1 is no limit (default)
- */
- int m_session_maxEvents;
-
- /// Autoconnect if true when new session window is opened
- bool m_session_bAutoConnect;
-
- /// Show the full token for VSCP types
- bool m_session_bShowFullTypeToken;
-
- /// TX Rows autosaved/autoloaded on session start/end
- bool m_session_bAutoSaveTxRows;
-
- /*!
- VSCP Class display format in receive list
- */
- CFrmSession::classDisplayFormat m_session_ClassDisplayFormat;
+ Q_OBJECT
+
+public:
+ /*!
+ Constructor
+ */
+ vscpworks(int& argc, char** argv);
+
+ /*!
+ Destructor
+ */
+ ~vscpworks();
+
+ const QString URL_EVENT_VERSION = tr("https://www.vscp.org/events/version.js");
+ const QString URL_EVENT_DATABASE = tr("https://www.vscp.org/events/vscp_events.sqlite3");
+
+ /*!
+ Add connection
+ @param conn JSON connection object
+ @param bSave Save connections if set to true
+ */
+ bool addConnection(QJsonObject& conn, bool bSave = false);
+
+ /*!
+ Remove connection
+ @param uuid Id for connection
+ @param bSave Save connections if set to true
+ */
+ bool removeConnection(const QString& uuid, bool bSave = false);
+
+ /*!
+ Load configuration settings from disk
+ */
+ void loadSettings(void);
+
+ /*!
+ Save configuration settings to disk
+ */
+ void writeSettings(void);
+
+ /*!
+ Save connections to disk
+ */
+ void writeConnections(void);
+
+ /*!
+ Check the remote event information at
+ https://vscp.org/events for the file
+ version.json which hold the release
+ version for the files. A new version
+ of the db should be downloaded if this
+ date is newer then stored.
+
+ @return True if current rate is up to date, if not
+ false is returned and a new version of the
+ database should be downloaded.
+ */
+ // bool checkRemoteEventDbVersion(void);
+
+ /*!
+ Loading data from the VSCP Event database into memory
+ @return true on success
+ */
+ bool loadEventDb(void);
+
+ /*!
+ Loading data from the vscpworks database GUID table into memory
+ @return true on success
+ */
+ bool loadGuidTable(void);
+
+ /*!
+ Loading data from the vscpworks database sensorindex table into memory
+ @return true on success
+ */
+ bool loadSensorTable(void);
+
+ /*!
+ Add GUID with symbolic name
+ @param name GUID symbolic name of GUID to add
+ @param guid GUID to add
+ @return True on success, false on failure
+ */
+ bool addGuid(QString name, QString guid);
+
+ /*!
+ Get index for GUID record
+ @param guid GUID on string form
+ @return index or -1 if error.
+ */
+ int getIdxForGuidRecord(const QString& guid);
+
+ /*!
+ Convert integer number to selected base.
+ The resulting string representation of the number have
+ - No prefix if decimal
+ - "0x" prefix if hexadecimal
+ - "0o" prefix if octal
+ - "0b" prefix if binary
+ @param value Integer that should be converted to a number
+ in the current base.
+ @param tobase If set to -1 (default) the current base is used for
+ base, otherwise the set base will be used.
+ @return String representing number with prepended base prefix.
+ */
+ QString decimalToStringInBase(uint32_t value, int tobase = -1);
+
+ /*!
+ Convert integer number to selected base
+ The resulting string representation of the number have
+ - No prefix if decimal
+ - "0x" prefix if hexadecimal
+ - "0o" prefix if octal
+ - "0b" prefix if binary
+ @param strvalue Integer on string form whish should be converted to
+ a number in the current base.
+ @param tobase If set to -1 (default) the current base is used for
+ base, otherwise the set base will be used.
+ @return String representing number with prepended base prefix.
+ */
+ QString decimalToStringInBase(const QString& strvalue, int tobase = -1);
+
+ /*!
+ Get connection name
+ @param type Connection code
+ @return String with connection descriptive name
+ */
+ QString getConnectionName(CVscpClient::connType type);
+
+ /*!
+ Create and open the VSCP Works database with tables and structure
+ */
+ bool openVscpWorksDatabase(void);
+
+ /*!
+ Log one message to the logging database
+ @param level Log level 0 is lowest
+ @param message to log
+ */
+ void log(int level, const QString& message);
+
+ /*!
+ Get short token from class/type. That is a token on the form
+ "TEMPERATURE" instead of "CLASS1_TYPE_MEASUREMENT_TEMPERATURE"
+ @param vscpClass A valid VSCP class token
+ @param vscpType A valid VSCP type token for the class.
+ @return A string contining the token
+ */
+ QString getShortTypeToken(uint16_t vscpClass, uint16_t vscpType);
+
+ /*!
+ Get URL for specification page that have info about this class
+ @param vscpClass VSCP class to get help URL for
+ @return URL to help page
+ */
+ QString getHelpUrlForClass(uint16_t vscpClass);
+
+ /*!
+ Get URL for specification page section that have info about this class/type
+ @param vscpClass VSCP class to get help URL for
+ @param vscpType VSCP type to get help URL for
+ @return URL to help page
+ */
+ QString getHelpUrlForType(uint16_t vscpClass, uint16_t vscpType);
+
+ /*!
+ Get unit information info from database for a specific event
+ @param vscpClass VSCP Class to lookup unit for
+ @param vscpClass VSCP TYpe to lookup unit for
+ @param unit The VSCP specific unit code to look up
+ @return Returns a CVscpUnit with unit data filled in. Defaults to zero.
+ */
+ CVscpUnit getUnitInfo(uint16_t vscpClass, uint16_t vscpType, uint8_t unit = 0);
+
+ /*!
+ Replace mustache special character variable data with
+ proper values
+ @param str String that should have tags replaces
+ @return Handled string
+ */
+ std::string replaceVscpRenderVariables(const std::string& str);
+
+ /*!
+ Get VSCP data conversion function definitions and there names
+ @param map A map that will get name/func pairs
+ @param strVariable String that holds variable definitions
+ @return True on success, false on failure
+ */
+ bool getVscpRenderFunctions(std::map& map,
+ std::string& strVariables);
+
+ /*!
+ Fill the render template with data from a supplied map.
+ The map holds pairs like
+
+ lbl-start, ''
+ lbl-end, ''
+ val-start, ''
+ val-end, ''
+ newline, '
'
+ crc8, '12345'
+ ....
+
+ @param map A map holding variables and value pairs
+ @param strTemplate This is the template to use
+ @return A string generated from the supplied template and variables
+ */
+ std::string renderVscpDataTemplate(std::map& map,
+ std::string& strTemplate);
+
+ /*!
+ Get render variables and template for a class/type pair
+ @param vscpClass The VSCP class to get variables/template for
+ @param vscpType The VSCP type to get variables/template for
+ @param type Environment to get variables/template for, Default is "vscpworks"
+ @return A string list with the variables string at pos 0 and
+ the template in pos 1
+ */
+ QStringList getVscpRenderData(uint16_t vscpClass,
+ uint16_t vscpType,
+ QString type = "vscpworks");
+
+ /*!
+ Define global JavaScript object of a VSCP event for further
+ processing by other evaluations
+ @param engine Active Qt JavaScript engine
+ @param pev VSCP Event to fill in
+ @return True on success, false on failure
+ */
+ bool addVscpEventToJsRenderFunction(QJSEngine& engine, vscpEvent* pev);
+
+ /*!
+ A client adds itself to the list of child windows
+ so the main window can delete the if needed.
+ */
+ void newChildWindow(QMainWindow* pwnd);
+
+ /*!
+ A client removes itself from the list of child windows when
+ it destroys itself.
+ */
+ void clearChildWindow(QMainWindow* pwnd);
+
+ // ------------------------------------------------------------------------
+ // Global Configuration information below
+ // This info is read from a configuration file
+ // at startup and saved on close. The configuration
+ // file should be placed in the home folder.
+ // ------------------------------------------------------------------------
+
+ // ------------------------------------------------------------------------
+
+ /// Folder used for configuration
+ /// Linux: ~/.configure/VSCP/(vscpworks+.conf)
+ QString m_configFolder;
+
+ /// Folder for writeable data
+ /// Linux: ~/.local/share/vscp/vscpworks+
+ QString m_shareFolder;
+
+ // Folder used for VSCP files like db's
+ // Linux:
+ // vscp/drivers/level1 - contain level one drivers
+ // vscp/drivers/level2 - contain level two drivers
+ // Windows:
+ // c:/program data/vscp/drivers/level1
+ // c:/program data/vscp/drivers/level2
+ QString m_vscpHomeFolder;
+
+ // ---------------------------------------------------
+
+ /// Enable darktheme
+ bool m_bEnableDarkTheme;
+
+ /// Numerical base for all numericals in system
+ numerical_base m_base;
+
+ /*!
+ Prefered language to use for MDF information
+ */
+ std::string m_preferredLanguage;
+
+ /*!
+ If true (default) ask before deleting or
+ clearing data
+ */
+ bool m_bAskBeforeDelete;
+
+ /*!
+ If set to true will not ask for save format
+ */
+ bool m_bSaveAlwaysJSON;
+
+ //**************************************************************************
+ // LOGGER (SPDLOG)
+ //**************************************************************************
+
+ bool m_bEnableFileLog;
+ spdlog::level::level_enum m_fileLogLevel;
+ std::string m_fileLogPattern;
+ std::string m_fileLogPath;
+ uint32_t m_maxFileLogSize;
+ uint16_t m_maxFileLogFiles;
+
+ bool m_bEnableConsoleLog;
+ spdlog::level::level_enum m_consoleLogLevel;
+ std::string m_consoleLogPattern;
+
+ // ------------------------------------------------------------------------
+ // Session
+ // ------------------------------------------------------------------------
+
+ /// Response timeout used for session window
+ uint32_t m_session_timeout;
+
+ /*!
+ Maximum number of events in a session receive list
+ -1 is no limit (default)
+ */
+ int m_session_maxEvents;
+
+ /// Autoconnect if true when new session window is opened
+ bool m_session_bAutoConnect;
- /*!
- VSCP Type display format in receive list
- */
- CFrmSession::typeDisplayFormat m_session_TypeDisplayFormat;
+ /// Show the full token for VSCP types
+ bool m_session_bShowFullTypeToken;
- /*!
- VSCP GUID display format in receive list
- */
- CFrmSession::guidDisplayFormat m_session_GuidDisplayFormat;
+ /// TX Rows autosaved/autoloaded on session start/end
+ bool m_session_bAutoSaveTxRows;
- // ------------------------------------------------------------------------
- // Configuration
- // ------------------------------------------------------------------------
+ /*!
+ VSCP Class display format in receive list
+ */
+ CFrmSession::classDisplayFormat m_session_ClassDisplayFormat;
- /// Base for configuration values
- numerical_base m_config_base;
+ /*!
+ VSCP Type display format in receive list
+ */
+ CFrmSession::typeDisplayFormat m_session_TypeDisplayFormat;
- /// Disable colors in configuration
- bool m_config_bDisableColors;
+ /*!
+ VSCP GUID display format in receive list
+ */
+ CFrmSession::guidDisplayFormat m_session_GuidDisplayFormat;
- /// Response timeout used for configuration window
- uint32_t m_config_timeout;
+ // ------------------------------------------------------------------------
+ // Configuration
+ // ------------------------------------------------------------------------
- // ------------------------------------------------------------------------
+ /// Base for configuration values
+ numerical_base m_config_base;
- /// URL for event database
- QUrl m_eventDbUrl;
+ /// Disable colors in configuration
+ bool m_config_bDisableColors;
- /*!
- This is the date and time for the last event
- database download
- */
- //QDateTime m_lastEventUrlDownLoad;
+ /// Response timeout used for configuration window
+ uint32_t m_config_timeout;
- /*!
- Latest VSCP event download
- */
- QDateTime m_lastEventDbLoadDateTime;
+ // ------------------------------------------------------------------------
- /*!
- Latest VSCP events on server
- */
- QDateTime m_lastEventDbServerDateTime;
+ /// URL for event database
+ QUrl m_eventDbUrl;
- // --------------------------------------------------
+ /*!
+ This is the date and time for the last event
+ database download
+ */
+ // QDateTime m_lastEventUrlDownLoad;
- FileDownloader *m_pVersionCtrl;
+ /*!
+ Latest VSCP event download
+ */
+ QDateTime m_lastEventDbLoadDateTime;
- /// List with defined connections uuid,conf-obj
- QMap m_mapConn;
+ /*!
+ Latest VSCP events on server
+ */
+ QDateTime m_lastEventDbServerDateTime;
- /// Mutex protecting vscpClass/vscpType maps
- QMutex m_mutexVscpEventsMaps;
+ // --------------------------------------------------
- /// VSCP classes (class-id) -> token
- std::map m_mapVscpClassToToken;
+ FileDownloader* m_pVersionCtrl;
- /// VSCP (class-id + token-id) -> token
- std::map m_mapVscpTypeToToken;
+ /// List with defined connections uuid,conf-obj
+ QMap m_mapConn;
- /// Mutex protecting GUID maps
- QMutex m_mutexGuidMap;
+ /// Mutex protecting vscpClass/vscpType maps
+ QMutex m_mutexVscpEventsMaps;
- /// VSCP GUID to symbolic GUID name
- std::map m_mapGuidToSymbolicName;
+ /// VSCP classes (class-id) -> token
+ std::map m_mapVscpClassToToken;
- /// VSCP GUID discovery guid/date + client-info (discoverer)
- std::map m_mapGuidToDiscovery;
+ /// VSCP (class-id + token-id) -> token
+ std::map m_mapVscpTypeToToken;
- /// Mutex protecting Sensor Index maps
- QMutex m_mutexSensorIndexMap;
+ /// Mutex protecting GUID maps
+ QMutex m_mutexGuidMap;
- /*!
- Sensor index to symbolic sensor name
- (link_to_guid << 8) + sensor
- */
- std::map m_mapSensorIndexToSymbolicName;
+ /// VSCP GUID to symbolic GUID name
+ std::map m_mapGuidToSymbolicName;
- /// VSCP works database
- QSqlDatabase m_worksdb;
+ /// VSCP GUID discovery guid/date + client-info (discoverer)
+ std::map m_mapGuidToDiscovery;
- /// Event database
- QSqlDatabase m_evdb;
-
- // List with open childwindows
- std::list m_childWindows;
-};
+ /// Mutex protecting Sensor Index maps
+ QMutex m_mutexSensorIndexMap;
+
+ /*!
+ Sensor index to symbolic sensor name
+ (link_to_guid << 8) + sensor
+ */
+ std::map m_mapSensorIndexToSymbolicName;
+ /// VSCP works database
+ QSqlDatabase m_worksdb;
+
+ /// Event database
+ QSqlDatabase m_evdb;
+
+ // List with open childwindows
+ std::list m_childWindows;
+
+};
#endif
diff --git a/src/vscpworks.qrc b/src/vscpworks.qrc
index 240afb9e..52e8c679 100644
--- a/src/vscpworks.qrc
+++ b/src/vscpworks.qrc
@@ -1,6 +1,11 @@
../images/svg/search.svg
+ ../images/svg/copy.svg
+ ../images/svg/clone.svg
+ ../images/svg/pen.svg
+ ../images/svg/pencil.svg
+ ../images/svg/circle-check.svg
../images/svg/nodes.svg
../images/svg/plug-disconnected-black.svg
../images/svg/plug-disconnected-white.svg