diff --git a/CMakeLists.txt b/CMakeLists.txt
index cc8f6361..0e3bb377 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,7 +13,7 @@ cmake_policy(SET CMP0043 NEW)
# Software version
SET(CPACK_PACKAGE_VERSION_MAJOR "1")
SET(CPACK_PACKAGE_VERSION_MINOR "0")
-SET(CPACK_PACKAGE_VERSION_PATCH "3")
+SET(CPACK_PACKAGE_VERSION_PATCH "4")
SET(CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
add_definitions(-DOPENTERAPLUS_VERSION="${CPACK_PACKAGE_VERSION}" )
add_definitions(-DOPENTERAPLUS_VERSION_MAJOR="${CPACK_PACKAGE_VERSION_MAJOR}" )
diff --git a/client/resources/TeraClient.qrc b/client/resources/TeraClient.qrc
index 4bf0adcc..bb0adff4 100755
--- a/client/resources/TeraClient.qrc
+++ b/client/resources/TeraClient.qrc
@@ -14,7 +14,6 @@
controls/branch_left.png
controls/branch_opened.png
controls/branch_up.png
- icons/connect.png
icons/copy.png
icons/data.png
icons/data_sensor.png
@@ -31,27 +30,14 @@
icons/new.png
icons/options.png
icons/patient.png
- icons/patient_add.png
- icons/patient_filter_red.png
icons/patient_installed.png
- icons/patient_installed_v1.png
- icons/patient_installed_warning.png
- icons/patient_offline.png
- icons/patient_offline_v2.png
icons/patient_online.png
icons/patient_online_busy.png
- icons/patient_online_busy_warning.png
- icons/patient_online_v1.png
- icons/patient_online_warning.png
- icons/photo.png
- icons/photo_add.png
icons/refresh.png
icons/save.png
icons/search.png
icons/sensors.png
icons/session.png
- icons/session_add.png
- icons/session_disconnect.png
icons/session_offline.png
icons/session_offline_warning.png
icons/session_online.png
@@ -67,8 +53,6 @@
icons/unlock.png
icons/user_info.png
icons/usergroup.png
- icons/video.png
- icons/video_add.png
icons/warning.png
TeRA_Background.png
icons/error.png
@@ -77,11 +61,9 @@
icons/device.png
icons/project.png
icons/device_installed.png
- icons/device_offline.png
icons/device_online.png
stylesheet.qss
icons/info.png
- icons/camera.png
icons/navtree.png
icons/history.png
icons/config.png
@@ -103,7 +85,6 @@
icons/service.png
icons/stop.png
status/session_loading.gif
- icons/software_user_offline.png
icons/software_user_online.png
controls/radio-off.png
controls/radio-on.png
diff --git a/client/resources/icons/busy.png b/client/resources/icons/busy.png
new file mode 100644
index 00000000..a68d490d
Binary files /dev/null and b/client/resources/icons/busy.png differ
diff --git a/client/resources/icons/camera.png b/client/resources/icons/camera.png
deleted file mode 100644
index e855361d..00000000
Binary files a/client/resources/icons/camera.png and /dev/null differ
diff --git a/client/resources/icons/config.png b/client/resources/icons/config.png
index 49fbfab1..0155903a 100644
Binary files a/client/resources/icons/config.png and b/client/resources/icons/config.png differ
diff --git a/client/resources/icons/connect.png b/client/resources/icons/connect.png
deleted file mode 100755
index 1ac670c5..00000000
Binary files a/client/resources/icons/connect.png and /dev/null differ
diff --git a/client/resources/icons/copy.png b/client/resources/icons/copy.png
index dba97be6..01a24a01 100755
Binary files a/client/resources/icons/copy.png and b/client/resources/icons/copy.png differ
diff --git a/client/resources/icons/dashboard.png b/client/resources/icons/dashboard.png
index 3eed6b8f..050279fe 100644
Binary files a/client/resources/icons/dashboard.png and b/client/resources/icons/dashboard.png differ
diff --git a/client/resources/icons/data.png b/client/resources/icons/data.png
index fa535458..9e40d954 100644
Binary files a/client/resources/icons/data.png and b/client/resources/icons/data.png differ
diff --git a/client/resources/icons/data_sensor.png b/client/resources/icons/data_sensor.png
index e3c8f835..5a103eec 100755
Binary files a/client/resources/icons/data_sensor.png and b/client/resources/icons/data_sensor.png differ
diff --git a/client/resources/icons/delete.png b/client/resources/icons/delete.png
index 2fcf505b..50128739 100755
Binary files a/client/resources/icons/delete.png and b/client/resources/icons/delete.png differ
diff --git a/client/resources/icons/delete_old.png b/client/resources/icons/delete_old.png
index c25c5c6a..aa7c9e34 100755
Binary files a/client/resources/icons/delete_old.png and b/client/resources/icons/delete_old.png differ
diff --git a/client/resources/icons/details.png b/client/resources/icons/details.png
index 360b71e2..1c1de924 100644
Binary files a/client/resources/icons/details.png and b/client/resources/icons/details.png differ
diff --git a/client/resources/icons/device.png b/client/resources/icons/device.png
index 5550c8f6..36f07d4b 100644
Binary files a/client/resources/icons/device.png and b/client/resources/icons/device.png differ
diff --git a/client/resources/icons/device_installed.png b/client/resources/icons/device_installed.png
index b0e708c8..3d10ba9e 100644
Binary files a/client/resources/icons/device_installed.png and b/client/resources/icons/device_installed.png differ
diff --git a/client/resources/icons/device_installed_busy.png b/client/resources/icons/device_installed_busy.png
index 90f9f0e8..d4e83743 100644
Binary files a/client/resources/icons/device_installed_busy.png and b/client/resources/icons/device_installed_busy.png differ
diff --git a/client/resources/icons/device_offline.png b/client/resources/icons/device_offline.png
deleted file mode 100644
index 7f83f203..00000000
Binary files a/client/resources/icons/device_offline.png and /dev/null differ
diff --git a/client/resources/icons/device_online.png b/client/resources/icons/device_online.png
index 15ddc4cc..82166ef1 100644
Binary files a/client/resources/icons/device_online.png and b/client/resources/icons/device_online.png differ
diff --git a/client/resources/icons/device_online_busy.png b/client/resources/icons/device_online_busy.png
index 3dba8fa9..fb41d151 100644
Binary files a/client/resources/icons/device_online_busy.png and b/client/resources/icons/device_online_busy.png differ
diff --git a/client/resources/icons/download.png b/client/resources/icons/download.png
index ba398009..d3d48f00 100644
Binary files a/client/resources/icons/download.png and b/client/resources/icons/download.png differ
diff --git a/client/resources/icons/edit.png b/client/resources/icons/edit.png
index b0bdad8f..3b387077 100755
Binary files a/client/resources/icons/edit.png and b/client/resources/icons/edit.png differ
diff --git a/client/resources/icons/email.png b/client/resources/icons/email.png
index f4e3c2b6..c1b48419 100644
Binary files a/client/resources/icons/email.png and b/client/resources/icons/email.png differ
diff --git a/client/resources/icons/error.png b/client/resources/icons/error.png
index ddf62ace..e709f40e 100644
Binary files a/client/resources/icons/error.png and b/client/resources/icons/error.png differ
diff --git a/client/resources/icons/error2.png b/client/resources/icons/error2.png
index 7fb396c9..bf362cb6 100644
Binary files a/client/resources/icons/error2.png and b/client/resources/icons/error2.png differ
diff --git a/client/resources/icons/filter.png b/client/resources/icons/filter.png
index 50a7efff..4cd8db61 100755
Binary files a/client/resources/icons/filter.png and b/client/resources/icons/filter.png differ
diff --git a/client/resources/icons/group.png b/client/resources/icons/group.png
index 7a760cfc..01c40678 100644
Binary files a/client/resources/icons/group.png and b/client/resources/icons/group.png differ
diff --git a/client/resources/icons/group_add.png b/client/resources/icons/group_add.png
index d4eb0358..332d433f 100755
Binary files a/client/resources/icons/group_add.png and b/client/resources/icons/group_add.png differ
diff --git a/client/resources/icons/group_delete.png b/client/resources/icons/group_delete.png
index 97ba04e2..8da6edef 100755
Binary files a/client/resources/icons/group_delete.png and b/client/resources/icons/group_delete.png differ
diff --git a/client/resources/icons/history.png b/client/resources/icons/history.png
index 4b4959b2..58ed0f81 100644
Binary files a/client/resources/icons/history.png and b/client/resources/icons/history.png differ
diff --git a/client/resources/icons/info.png b/client/resources/icons/info.png
index 55a93f8e..eba6eddf 100644
Binary files a/client/resources/icons/info.png and b/client/resources/icons/info.png differ
diff --git a/client/resources/icons/join.png b/client/resources/icons/join.png
index c167daad..51a82781 100644
Binary files a/client/resources/icons/join.png and b/client/resources/icons/join.png differ
diff --git a/client/resources/icons/kit.png b/client/resources/icons/kit.png
index 9bd02251..2efc1fa6 100644
Binary files a/client/resources/icons/kit.png and b/client/resources/icons/kit.png differ
diff --git a/client/resources/icons/leave.png b/client/resources/icons/leave.png
index d1cdcac9..cf035a1e 100644
Binary files a/client/resources/icons/leave.png and b/client/resources/icons/leave.png differ
diff --git a/client/resources/icons/lock.png b/client/resources/icons/lock.png
index 2b12e3d6..c5ae8ad3 100755
Binary files a/client/resources/icons/lock.png and b/client/resources/icons/lock.png differ
diff --git a/client/resources/icons/log.png b/client/resources/icons/log.png
index 3aab6d76..f6445bad 100644
Binary files a/client/resources/icons/log.png and b/client/resources/icons/log.png differ
diff --git a/client/resources/icons/navtree.png b/client/resources/icons/navtree.png
index a58b8e8b..9c7b0522 100644
Binary files a/client/resources/icons/navtree.png and b/client/resources/icons/navtree.png differ
diff --git a/client/resources/icons/new.png b/client/resources/icons/new.png
index 6b343375..97d463f9 100755
Binary files a/client/resources/icons/new.png and b/client/resources/icons/new.png differ
diff --git a/client/resources/icons/ok.png b/client/resources/icons/ok.png
index 40622e86..e39ea4c1 100644
Binary files a/client/resources/icons/ok.png and b/client/resources/icons/ok.png differ
diff --git a/client/resources/icons/ok2.png b/client/resources/icons/ok2.png
index c4568562..2415450e 100644
Binary files a/client/resources/icons/ok2.png and b/client/resources/icons/ok2.png differ
diff --git a/client/resources/icons/options.png b/client/resources/icons/options.png
index 3821bf99..4a59a061 100755
Binary files a/client/resources/icons/options.png and b/client/resources/icons/options.png differ
diff --git a/client/resources/icons/password.png b/client/resources/icons/password.png
index db8ef1a1..b5e34b25 100644
Binary files a/client/resources/icons/password.png and b/client/resources/icons/password.png differ
diff --git a/client/resources/icons/patient.png b/client/resources/icons/patient.png
index 60644d0f..a1ecaacb 100644
Binary files a/client/resources/icons/patient.png and b/client/resources/icons/patient.png differ
diff --git a/client/resources/icons/patient_add.png b/client/resources/icons/patient_add.png
deleted file mode 100755
index 05b50083..00000000
Binary files a/client/resources/icons/patient_add.png and /dev/null differ
diff --git a/client/resources/icons/patient_filter_red.png b/client/resources/icons/patient_filter_red.png
deleted file mode 100755
index 2620dfdc..00000000
Binary files a/client/resources/icons/patient_filter_red.png and /dev/null differ
diff --git a/client/resources/icons/patient_installed.png b/client/resources/icons/patient_installed.png
index 9024953b..01ebc122 100755
Binary files a/client/resources/icons/patient_installed.png and b/client/resources/icons/patient_installed.png differ
diff --git a/client/resources/icons/patient_installed_busy.png b/client/resources/icons/patient_installed_busy.png
index b4507bbe..330efb36 100644
Binary files a/client/resources/icons/patient_installed_busy.png and b/client/resources/icons/patient_installed_busy.png differ
diff --git a/client/resources/icons/patient_installed_v1.png b/client/resources/icons/patient_installed_v1.png
deleted file mode 100755
index 4e6b304f..00000000
Binary files a/client/resources/icons/patient_installed_v1.png and /dev/null differ
diff --git a/client/resources/icons/patient_installed_warning.png b/client/resources/icons/patient_installed_warning.png
deleted file mode 100755
index 9f7d748a..00000000
Binary files a/client/resources/icons/patient_installed_warning.png and /dev/null differ
diff --git a/client/resources/icons/patient_offline.png b/client/resources/icons/patient_offline.png
deleted file mode 100755
index 25d0821f..00000000
Binary files a/client/resources/icons/patient_offline.png and /dev/null differ
diff --git a/client/resources/icons/patient_offline_v2.png b/client/resources/icons/patient_offline_v2.png
deleted file mode 100755
index 401371dd..00000000
Binary files a/client/resources/icons/patient_offline_v2.png and /dev/null differ
diff --git a/client/resources/icons/patient_online.png b/client/resources/icons/patient_online.png
index 1e44449e..531ff6c2 100755
Binary files a/client/resources/icons/patient_online.png and b/client/resources/icons/patient_online.png differ
diff --git a/client/resources/icons/patient_online_busy.png b/client/resources/icons/patient_online_busy.png
index 66b1f757..bf77e788 100755
Binary files a/client/resources/icons/patient_online_busy.png and b/client/resources/icons/patient_online_busy.png differ
diff --git a/client/resources/icons/patient_online_busy_warning.png b/client/resources/icons/patient_online_busy_warning.png
deleted file mode 100755
index e56db228..00000000
Binary files a/client/resources/icons/patient_online_busy_warning.png and /dev/null differ
diff --git a/client/resources/icons/patient_online_v1.png b/client/resources/icons/patient_online_v1.png
deleted file mode 100755
index 931e81c7..00000000
Binary files a/client/resources/icons/patient_online_v1.png and /dev/null differ
diff --git a/client/resources/icons/patient_online_warning.png b/client/resources/icons/patient_online_warning.png
deleted file mode 100755
index 38e04190..00000000
Binary files a/client/resources/icons/patient_online_warning.png and /dev/null differ
diff --git a/client/resources/icons/photo.png b/client/resources/icons/photo.png
deleted file mode 100755
index 4c559515..00000000
Binary files a/client/resources/icons/photo.png and /dev/null differ
diff --git a/client/resources/icons/photo_add.png b/client/resources/icons/photo_add.png
deleted file mode 100755
index 5e367d76..00000000
Binary files a/client/resources/icons/photo_add.png and /dev/null differ
diff --git a/client/resources/icons/play.png b/client/resources/icons/play.png
index c53ff0f8..0355af6e 100644
Binary files a/client/resources/icons/play.png and b/client/resources/icons/play.png differ
diff --git a/client/resources/icons/project.png b/client/resources/icons/project.png
index 2ea8a5cf..bf08c9ae 100644
Binary files a/client/resources/icons/project.png and b/client/resources/icons/project.png differ
diff --git a/client/resources/icons/random.png b/client/resources/icons/random.png
index c5dd4855..3375de2a 100644
Binary files a/client/resources/icons/random.png and b/client/resources/icons/random.png differ
diff --git a/client/resources/icons/record.png b/client/resources/icons/record.png
index 9ba70dc5..359cb5e7 100644
Binary files a/client/resources/icons/record.png and b/client/resources/icons/record.png differ
diff --git a/client/resources/icons/record_stop.png b/client/resources/icons/record_stop.png
index 0b30a39a..17e89f62 100644
Binary files a/client/resources/icons/record_stop.png and b/client/resources/icons/record_stop.png differ
diff --git a/client/resources/icons/refresh.png b/client/resources/icons/refresh.png
index 7fa455e6..5001f7de 100755
Binary files a/client/resources/icons/refresh.png and b/client/resources/icons/refresh.png differ
diff --git a/client/resources/icons/save.png b/client/resources/icons/save.png
index 7cfba88e..ed936436 100644
Binary files a/client/resources/icons/save.png and b/client/resources/icons/save.png differ
diff --git a/client/resources/icons/search.png b/client/resources/icons/search.png
index b00d84c4..0e988c4b 100755
Binary files a/client/resources/icons/search.png and b/client/resources/icons/search.png differ
diff --git a/client/resources/icons/sensors.png b/client/resources/icons/sensors.png
index d2f74937..51594373 100755
Binary files a/client/resources/icons/sensors.png and b/client/resources/icons/sensors.png differ
diff --git a/client/resources/icons/server.png b/client/resources/icons/server.png
index df5c07e9..82a7da70 100644
Binary files a/client/resources/icons/server.png and b/client/resources/icons/server.png differ
diff --git a/client/resources/icons/service.png b/client/resources/icons/service.png
index 78f53f8f..be52e94d 100644
Binary files a/client/resources/icons/service.png and b/client/resources/icons/service.png differ
diff --git a/client/resources/icons/session.png b/client/resources/icons/session.png
index 971d839a..16430a2e 100644
Binary files a/client/resources/icons/session.png and b/client/resources/icons/session.png differ
diff --git a/client/resources/icons/session_add.png b/client/resources/icons/session_add.png
deleted file mode 100755
index ac319496..00000000
Binary files a/client/resources/icons/session_add.png and /dev/null differ
diff --git a/client/resources/icons/session_disconnect.png b/client/resources/icons/session_disconnect.png
deleted file mode 100755
index 5127c8fc..00000000
Binary files a/client/resources/icons/session_disconnect.png and /dev/null differ
diff --git a/client/resources/icons/session_offline.png b/client/resources/icons/session_offline.png
index 5c92dd52..9b649f33 100755
Binary files a/client/resources/icons/session_offline.png and b/client/resources/icons/session_offline.png differ
diff --git a/client/resources/icons/session_offline_warning.png b/client/resources/icons/session_offline_warning.png
index c985b07e..742d50f8 100755
Binary files a/client/resources/icons/session_offline_warning.png and b/client/resources/icons/session_offline_warning.png differ
diff --git a/client/resources/icons/session_online.png b/client/resources/icons/session_online.png
index 76de42ae..9063f374 100755
Binary files a/client/resources/icons/session_online.png and b/client/resources/icons/session_online.png differ
diff --git a/client/resources/icons/session_online_warning.png b/client/resources/icons/session_online_warning.png
index eae45118..f02a6ca5 100755
Binary files a/client/resources/icons/session_online_warning.png and b/client/resources/icons/session_online_warning.png differ
diff --git a/client/resources/icons/session_pause.png b/client/resources/icons/session_pause.png
index 00f7589f..ece187fa 100755
Binary files a/client/resources/icons/session_pause.png and b/client/resources/icons/session_pause.png differ
diff --git a/client/resources/icons/session_type.png b/client/resources/icons/session_type.png
index fae6ed38..5ad249c8 100644
Binary files a/client/resources/icons/session_type.png and b/client/resources/icons/session_type.png differ
diff --git a/client/resources/icons/session_warning.png b/client/resources/icons/session_warning.png
index c43fcb89..de87519c 100755
Binary files a/client/resources/icons/session_warning.png and b/client/resources/icons/session_warning.png differ
diff --git a/client/resources/icons/site.png b/client/resources/icons/site.png
index cd271801..32778e5d 100644
Binary files a/client/resources/icons/site.png and b/client/resources/icons/site.png differ
diff --git a/client/resources/icons/smile.png b/client/resources/icons/smile.png
index 86c22edc..b69244fa 100644
Binary files a/client/resources/icons/smile.png and b/client/resources/icons/smile.png differ
diff --git a/client/resources/icons/software_user.png b/client/resources/icons/software_user.png
index e8f26b1c..8dd4f2d6 100644
Binary files a/client/resources/icons/software_user.png and b/client/resources/icons/software_user.png differ
diff --git a/client/resources/icons/software_user_installed.png b/client/resources/icons/software_user_installed.png
new file mode 100644
index 00000000..9451fae8
Binary files /dev/null and b/client/resources/icons/software_user_installed.png differ
diff --git a/client/resources/icons/software_user_offline.png b/client/resources/icons/software_user_offline.png
deleted file mode 100644
index c8d33359..00000000
Binary files a/client/resources/icons/software_user_offline.png and /dev/null differ
diff --git a/client/resources/icons/software_user_offline_busy.png b/client/resources/icons/software_user_offline_busy.png
index 1c3294d3..024ae53e 100644
Binary files a/client/resources/icons/software_user_offline_busy.png and b/client/resources/icons/software_user_offline_busy.png differ
diff --git a/client/resources/icons/software_user_online.png b/client/resources/icons/software_user_online.png
index b0932421..c6c8f165 100644
Binary files a/client/resources/icons/software_user_online.png and b/client/resources/icons/software_user_online.png differ
diff --git a/client/resources/icons/software_user_online_busy.png b/client/resources/icons/software_user_online_busy.png
index ee000948..843e52a9 100644
Binary files a/client/resources/icons/software_user_online_busy.png and b/client/resources/icons/software_user_online_busy.png differ
diff --git a/client/resources/icons/stop.png b/client/resources/icons/stop.png
index b5829bc0..edada8e4 100644
Binary files a/client/resources/icons/stop.png and b/client/resources/icons/stop.png differ
diff --git a/client/resources/icons/test.png b/client/resources/icons/test.png
index e3335915..c0a37a91 100644
Binary files a/client/resources/icons/test.png and b/client/resources/icons/test.png differ
diff --git a/client/resources/icons/test_add.png b/client/resources/icons/test_add.png
index b90aa6f8..43fccc6d 100755
Binary files a/client/resources/icons/test_add.png and b/client/resources/icons/test_add.png differ
diff --git a/client/resources/icons/test_lock.png b/client/resources/icons/test_lock.png
index 27a7730e..94678f44 100755
Binary files a/client/resources/icons/test_lock.png and b/client/resources/icons/test_lock.png differ
diff --git a/client/resources/icons/test_unlock.png b/client/resources/icons/test_unlock.png
index 6bebf4bc..75ea82a2 100755
Binary files a/client/resources/icons/test_unlock.png and b/client/resources/icons/test_unlock.png differ
diff --git a/client/resources/icons/undo.png b/client/resources/icons/undo.png
index c6bf267e..9512607e 100755
Binary files a/client/resources/icons/undo.png and b/client/resources/icons/undo.png differ
diff --git a/client/resources/icons/unlock.png b/client/resources/icons/unlock.png
index 8f8b4f43..8c804541 100755
Binary files a/client/resources/icons/unlock.png and b/client/resources/icons/unlock.png differ
diff --git a/client/resources/icons/user_info.png b/client/resources/icons/user_info.png
index 1d42b262..5fbb0cdd 100755
Binary files a/client/resources/icons/user_info.png and b/client/resources/icons/user_info.png differ
diff --git a/client/resources/icons/usergroup.png b/client/resources/icons/usergroup.png
index f78f10a5..a32346e9 100644
Binary files a/client/resources/icons/usergroup.png and b/client/resources/icons/usergroup.png differ
diff --git a/client/resources/icons/video.png b/client/resources/icons/video.png
deleted file mode 100755
index b43a46a2..00000000
Binary files a/client/resources/icons/video.png and /dev/null differ
diff --git a/client/resources/icons/video_add.png b/client/resources/icons/video_add.png
deleted file mode 100755
index a00cdf70..00000000
Binary files a/client/resources/icons/video_add.png and /dev/null differ
diff --git a/client/resources/icons/view_off.png b/client/resources/icons/view_off.png
index 396a279b..299d6656 100644
Binary files a/client/resources/icons/view_off.png and b/client/resources/icons/view_off.png differ
diff --git a/client/resources/icons/view_on.png b/client/resources/icons/view_on.png
index 9117bead..4dcfdd25 100644
Binary files a/client/resources/icons/view_on.png and b/client/resources/icons/view_on.png differ
diff --git a/client/resources/icons/warning.png b/client/resources/icons/warning.png
index 521288b7..7f12c9cf 100644
Binary files a/client/resources/icons/warning.png and b/client/resources/icons/warning.png differ
diff --git a/client/resources/stylesheet.qss b/client/resources/stylesheet.qss
index e9dc0737..a7755b5c 100644
--- a/client/resources/stylesheet.qss
+++ b/client/resources/stylesheet.qss
@@ -692,12 +692,8 @@ QWidget#wdgParticipantsNum{
border-radius: 10px;
}
-QListWidget#lstOnlineParticipants, QListWidget#lstOnlineUsers, QListWidget#lstOnlineDevices{
- background-color: rgba(255,255,255,20%);
- selection-background-color: rgba(0,0,0,20%);
+QTreeWidget#treeOnline{
+ background-color: rgba(255,255,255,10%);
+ selection-background-color: rgba(0,0,0,0%);
/*selection-color: black;*/
}
-
-QFrame#frameOnlineParticipants, QFrame#frameOnlineUsers, QFrame#frameOnlineDevices{
- background-color: transparent;
-}
diff --git a/client/resources/translations/openteraplus_en.ts b/client/resources/translations/openteraplus_en.ts
index ba5ca8e4..cb4f9674 100644
--- a/client/resources/translations/openteraplus_en.ts
+++ b/client/resources/translations/openteraplus_en.ts
@@ -4,17 +4,17 @@
AboutDialog
-
+
About OpenTera...
-
+
About OpenTeraPlus...
-
+
Thanks!
@@ -22,12 +22,12 @@
BaseDialog
-
+
Dialogue
-
+
Close
@@ -209,7 +209,7 @@
Unknown error
-
+
Form
@@ -255,34 +255,34 @@
Are you sure you want to delete
-
+
Form
-
+
Only ... with a link with ... are displayed.
-
+
Filter
-
+
See All
-
+
Search...
-
-
-
+
+
+
...
@@ -290,32 +290,32 @@
DeviceAssignDialog
-
+
Assign device
-
+
The device is currently assigned to the following participant(s):
-
+
<html><head/><body><p>Do you want to <span style=" font-weight:600;">unlink</span>this device to the actual participants or do you which to <span style=" font-weight:600;">add</span> a new participant to this device?</p></body></html>
-
+
Unlink then add
-
+
Add without unlinking
-
+
Cancel
@@ -323,42 +323,42 @@
DeviceSubTypeWidget
-
+
Form
-
+
Device Sub-Type
-
+
Edit
-
+
Save
-
+
Cancel
-
+
Summary
-
+
Devices
-
+
Details
@@ -366,43 +366,43 @@
DeviceTypeWidget
-
+
Formulaire
Form
-
+
Device Type
-
+
Edit
-
+
Save
-
+
Cancel
-
+
Summary
-
+
Devices
-
+
Details
@@ -439,57 +439,57 @@ Si l'appareil est présentement déployé, les données ne seront plus coll
If the device is currently deployed, the data will not be collected anymore and the device will not be usable during sessions.
-
+
Form
-
+
Device
-
+
Edit
-
+
Save
-
+
Cancel
-
+
Informations
-
+
Updated projects associated to this device
-
+
Sites / Projects
-
+
Remove this device from the participant
-
+
Participants
-
+
Configuration
@@ -497,27 +497,27 @@ If the device is currently deployed, the data will not be collected anymore and
DownloadProgressDialog
-
+
Downloads
-
+
Downloading
-
+
Progression
-
+
File
-
+
Cancel
@@ -568,27 +568,27 @@ If the device is currently deployed, the data will not be collected anymore and
Invite - New session via OpenTeraPlus
-
+
Email invitation
-
+
At the moment, no automated emails are sent by the system. It is your responsability to send the email to the participants.
-
+
To:
-
+
No email specified.
-
+
-
+
Copy
-
+
Send (local)
-
+
Close
@@ -639,32 +639,32 @@ p, li { white-space: pre-wrap; }
GeneratePasswordDialog
-
+
Password generator
-
+
Password
-
+
Generate
-
+
Copy
-
+
Apply
-
+
Cancel
@@ -746,77 +746,77 @@ ou réalisées
or done
-
+
Form
-
+
Participant Group
-
+
Edit
-
+
Save
-
+
Cancel
-
+
XXXX Sessions
-
+
XXXX Participants
-
+
Participant
-
+
State
-
+
Sessions
-
+
First Session
-
+
Last connection
-
+
Last session
-
+
Summary
-
+
Dashboard
@@ -839,73 +839,73 @@ or done
The operation did not succeed. Please try again.
-
+
Terminate session?
-
+
Terminate session?
-
+
Stopping session...
-
+
Waiting for the session to start...
-
+
Already in session
-
+
You are invited to a session, but we denied the invitation for you.
-
+
did not respond to
-
+
refused
-
+
is busy and cannot answer to
-
+
the invitation.
-
+
Reason:
-
+
Unsupported service
-
+
The service "
-
-
+
+
@@ -913,47 +913,47 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du
Please update the software or contribute to the development!
-
+
Session category is not supported
-
+
The session category "
-
+
Quit session?
-
+
Do you want to qui the session?
-
+
Form
-
+
Admin
-
+
Quit
-
+
Close
-
+
Attendees
@@ -974,22 +974,22 @@ Please update the software or contribute to the development!
Participants
-
+
Session - Parameters
-
+
Parameters
-
+
Unknown session
-
+
00:00:00
@@ -1011,37 +1011,37 @@ Please update the software or contribute to the development!
Dialogue
-
+
Join session invitation
-
+
Invitation
-
+
XXXX invites you to join the session.
-
+
The invitation contains the following message:
-
+
Join session
-
+
Refuse to join session
-
+
Sorry, I am busy!
@@ -1135,77 +1135,77 @@ Please update the software or contribute to the development!
Select software to launch in technical support sessions
-
+
OpenTeraPlus - Kit - Configuration
-
+
Loading...
-
+
Close
-
+
Group
-
+
Project
-
+
Site
-
+
Service
-
+
Assign this participant to this kit
-
+
Unassign current participant
-
+
Participant
-
+
Technical support?
-
+
Software to launch in technical support session
-
+
Browse...
-
+
Save
-
+
Hardware configuration
@@ -1231,12 +1231,12 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du
Please update the software or contribute to the development!
-
+
OpenTeraPlus
-
+
Close
@@ -1264,27 +1264,27 @@ Please update the software or contribute to the development!
Error
-
+
Form
-
+
Title
-
+
(Error)
-
+
Retry
-
+
Starting...
@@ -1303,37 +1303,37 @@ Please update the software or contribute to the development!
-
+
Connecting...
-
+
OpenTeraPlus -- Login
-
+
Password
-
+
Server
-
+
Username
-
+
Connect
-
+
Quit
@@ -1440,52 +1440,52 @@ Please update the software or contribute to the development!
Stop support
-
+
Technical support
-
+
OpenTeraPlus - Kit
-
+
Exit
-
+
No selected participant
-
+
Turn on
-
+
Error
-
+
Reboot
-
+
Technical support is enabled
-
+
Technical support
-
+
(Version)
@@ -1493,54 +1493,54 @@ Please update the software or contribute to the development!
MainWindow
-
+
HTTP Error
-
+
Error
-
+
Cannot delete
-
+
Data saved.
-
+
- updating...
-
+
Retreiving
-
+
- deleting...
-
+
Session error
-
+
The following error occured:
-
+
@@ -1549,115 +1549,115 @@ La séance ne peut pas continuer.
The session cannot continue.
-
-
+
+
is online.
-
-
+
+
is offline.
-
+
Server error.
-
-
-
+
+
+
Disconnect
-
+
You'll be logged out. Unsaved data will be lost.
-
+
Do you want to continue?
-
+
You Account
-
+
Global Configuration
-
+
Details
-
+
Change language
-
+
Online (
-
+
The language has been modified.
Would you like to disconnect to apply the changes?
-
+
OpenTeraPlus
-
+
(Message)
-
-
+
+
...
-
+
0.1
-
+
User Name
-
-
+
+
History
-
+
Profile
-
+
Admin
-
+
Browser
@@ -1670,32 +1670,32 @@ Would you like to disconnect to apply the changes?
Users
-
+
Online
-
+
Participant name...
-
+
This feature is not available yet!
-
+
Search
-
+
Time
-
+
Event
@@ -1707,22 +1707,22 @@ Would you like to disconnect to apply the changes?
OpenTera Notification
-
+
OpenTeraPlus Notification
-
+
(Notification text)
-
+
Yes
-
+
No
@@ -1730,131 +1730,170 @@ Would you like to disconnect to apply the changes?
OnlineManagerWidget
-
+
Form
-
-
-
+
+
+
0
-
+
+
+ Filter devices
+
+
+
+
+
+
+ ...
+
+
+
+
+ Filter users
+
+
+
+
+ Filter Participants
+
+
+
+
+ Items
+
+
- Online Participants
+ Online Participants
-
- Online Users
+ Online Users
-
- Online Devices
+ Online Devices
+
+
+
+
+ Participants
+
+
+
+
+ Users
+
+
+
+
+ Devices
ParticipantWidget
-
+
Open
-
-
+
+
Delete
-
+
Download data
-
+
Continue session
-
+
Device:
-
+
Participant:
-
+
Service:
-
+
Unknown
-
+
Download
-
+
Download completed:
-
-
+
+
Delete?
-
+
Are you sure you want to delete
-
+
Are you sure you want to delete all selected sessions ?
-
+
Unassign?
-
+
Are you sure you want to unassign
-
-
+
+
Please select a download folder
-
-
+
+
Session
-
+
Confirmation
-
+
-
+
Username missing<br/>
-
- Passwords do not match.
+ Passwords do not match.
-
+
No specified password.
-
+
Missing information
-
+
The following information is missing:
-
+
already exists.
-
+
has been realised lately but not finished.
-
+
has been planned.
-
+
Resume session?
-
+
A session of the type,
-
+
@@ -1930,223 +1968,222 @@ Souhaitez-vous continuer cette séance?
Would you like to continue this session?
-
+
Form
-
+
Participant
-
+
Active
-
+
Web link
-
+
No weblink generated
-
-
+
+
Copy link
-
-
-
-
-
-
-
+
+
+
+
+
+
...
-
+
Send via email
-
+
Send by email
-
+
Show link
-
+
Username/password login
-
-
+
+
Username
-
-
+
+
Password
-
+
Generate random password
-
- Confirm password
+ Confirm password
-
-
+
+
+
Save
-
-
+
+
Informations
-
+
Month 1
-
+
Month 2
-
+
Month 3
-
+
Select All
-
+
Deselect All
-
+
Date
-
+
Type
-
+
State
-
+
Duration
-
+
Owner
-
+
Actions
-
+
Sessions
-
+
Dashboard
-
+
Edit
-
+
Cancel
-
+
Configuration
-
+
Details
-
+
Assigned Device(s)
-
+
<<< Add
-
+
Remove >>>
-
+
Available devices
-
+
Devices
-
+
New Session
-
+
Filter sessions
-
+
Download All
@@ -2154,48 +2191,48 @@ Would you like to continue this session?
PasswordStrengthDialog
-
-
+
+
Password
-
+
Confirmation
-
+
Minimal length: 10 characters
-
+
At least one lowercase letter
-
+
At least one uppercase letter
-
+
At least one digit
-
+
At least one special character
-
+
Apply
-
+
Cancel
@@ -2203,82 +2240,109 @@ Would you like to continue this session?
ProjectNavigator
-
+
Project
-
+
Group
-
+
Participant
-
+
Delete?
-
+
Are you sure you want to delete
-
+
Form
-
+
+
+
...
+
+
+
+ Find...
+
+
+
+
+ New
+
+
+
+
+ Delete
+
+
+
+
+ Show / hide inactive participants
+
+
+
+
+ Refresh
+
ProjectWidget
-
+
None
-
+
(Device without a name)
-
+
Users
-
+
Participants Groups
-
+
Participants
-
+
Active Participants
-
+
Planned sessions
or done
-
+
Only user groups with access to this project are displayed.
@@ -2289,97 +2353,97 @@ ou réalisées
or done
-
+
Active
-
+
Inactive
-
+
Devices
-
+
Only associated project's session types are displayed.
-
+
Form
-
+
Project
-
+
Edit
-
+
Save
-
+
Cancel
-
+
XXXX Sessions
-
+
XXXX Groups
-
+
XXXX Participants
-
+
XXXX Users
-
+
Participant
-
+
State
-
+
Sessions
-
+
First Session
-
+
Last Session
-
+
Manage Users Groups
@@ -2392,89 +2456,89 @@ or done
Manage Services
-
+
Last connection
-
+
Summary
-
+
Dashboard
-
+
User
-
-
+
+
Role
-
+
Users
-
+
User Group
-
+
Device
-
+
Participant(s)
-
+
Access modification is disabled for users groups which project access is specified in the site (i.e. project's administrators)
-
+
Update roles
-
-
+
+
Users Groups
-
+
Participants Groups
-
+
Session Type
-
+
Updated associated services
-
+
Services
-
+
Details
@@ -2513,7 +2577,7 @@ or done
ServiceConfigWidget
-
+
Configuration - Service
@@ -2522,7 +2586,7 @@ or done
Device Sub-Type
-
+
Configuration
@@ -2531,17 +2595,17 @@ or done
Edit
-
+
Configuration:
-
+
Save
-
+
Cancel
@@ -2607,63 +2671,63 @@ or done
Edit Role
-
+
Form
-
+
Service
-
+
Warning! Those parameters are for advanced users - change at your own risks!
-
-
+
+
Edit
-
+
Save
-
+
Cancel
-
+
Informations
-
+
Update associated projects
-
+
Projects
-
+
New Role
-
+
Delete
-
+
Roles
@@ -2675,97 +2739,105 @@ or done
Form
-
+
Filter Participants
-
-
-
-
+
+
+
+
...
-
-
+
Users
-
+
Session's invitations
-
-
+
Devices
-
+
Add attendees to the session
-
+
Available elements
-
+
+
+ Filter Users
+
+
+
+
+ Filter Devices
+
+
+
Online / Offline
-
+
Search...
-
+
Invite
-
+
Invited to the session
-
+
1
-
+
Participants
-
+
Remove from session
-
+
Maximum attendees reached
-
+
Cannot add more than five (5) participants
-
+
Confirmation
-
+
Are you sure you want to remove selected attendees from the session?
@@ -2777,22 +2849,22 @@ or done
Dialog
-
+
Lobby
-
+
(Session Type)
-
+
Start Session
-
+
Cancel
@@ -2817,52 +2889,52 @@ Vous devez associer au moins un projet.
You should associate at least one project.
-
+
Form
-
+
Session Type
-
+
Edit
-
+
Save
-
+
Cancel
-
+
Summary
-
+
Update projects with this session type
-
+
Projects
-
+
Update configuration
-
+
Settings
@@ -2935,159 +3007,159 @@ You should associate at least one project.
Are you sure you want to delete the data
-
+
Form
-
+
Session
-
+
Session Status
-
+
Edit
-
+
Save
-
+
Cancel
-
+
XXXX Tests
-
+
XXXX Devices
-
+
XXXX Participants
-
+
XXXX Users
-
+
XXXX Data
-
+
XXXX Events
-
-
+
+
Summary
-
-
+
+
Participants
-
+
Users
-
+
Devices
-
+
Device
-
+
Date
-
+
Data
-
+
Size
-
+
Action
-
+
Download All
-
+
Delete
-
+
Data
-
+
Evaluations
-
+
Type
-
+
Date / Hour
-
+
Context
-
+
Description
-
+
Events
-
+
Details
@@ -3138,7 +3210,7 @@ realized sessions
-
+
Projects
@@ -3163,62 +3235,62 @@ realized sessions
Users Groups
-
+
Form
-
+
Site
-
+
Edit
-
+
Save
-
+
Cancel
-
+
XXXX Groups
-
+
XXXX Devices
-
+
XXXX Projects
-
+
XXXX Users
-
+
XXXX Sessions
-
+
XXXX Participants
-
+
Update user groups access
@@ -3227,7 +3299,7 @@ realized sessions
Manage users
-
+
Manage users groups
@@ -3240,37 +3312,37 @@ realized sessions
Manage devices
-
+
Summary
-
+
Dashboard
-
+
Users
-
+
<html><head/><body><p>You cannot specify "Any Role" to users groups that have (Administrator or User) access to a project.</p></body></html>
-
+
User Group
-
+
Role
-
+
Inherited?
@@ -3279,17 +3351,17 @@ realized sessions
Update users roles
-
+
Users Groups
-
+
Devices
-
+
Details
@@ -3301,22 +3373,22 @@ realized sessions
Dialog
-
+
Starting session...
-
+
10
-
+
Starting session...
-
+
Cancel
@@ -3324,17 +3396,17 @@ realized sessions
TeraForm
-
+
Chose a color
-
+
Form
-
+
This form does not contain any information.
@@ -3347,90 +3419,90 @@ realized sessions
UserGroupWidget
-
+
Access - Sites
-
+
Access - Projects
-
+
Form
-
+
User group
-
+
Edit
-
+
Save
-
+
Cancel
-
+
Informations
-
+
<html><head/><body><p>It is not possible to specify "Any role" to user groups that have a least one acces (Admin or User) to a project of the group.</p><p>You cannot specify a role for sites which you are not Administrator.</p></body></html>
-
-
+
+
Site
-
-
+
+
Role
-
+
Update sites' roles
-
+
<html><head/><body><p>You cannot specify a role for a project which you are not Administrator.</p></body></html>
-
+
Project
-
+
Update projects' roles
-
+
Update users members of the group
-
+
Users
@@ -3443,72 +3515,72 @@ realized sessions
N/A
-
+
Form
-
+
User
-
+
New Session
-
+
General
-
+
(Last connection)
-
+
(Complete name)
-
+
Last connection:
-
+
Name:
-
+
Active
-
+
Contact
-
+
Email:
-
+
(Email)
-
+
Edit
-
+
Information
@@ -3520,125 +3592,137 @@ realized sessions
Field user_profile can't be set.
-
+
User's groups
-
+
Application language
-
+
French
-
+
English
-
+
Notification sounds
-
+
Warning
-
+
You should specify at least one user group
-
-
+
+
User
-
+
Edit
-
+
Generate random password
-
+
Save
-
+
Cancel
-
+
Informations
-
+
This user is a superuser. It is not possible to assign a user group.
-
+
Update this user groups
-
+
Groups
-
+
Effective roles
-
+
+
+ Sites
+
+
+
+
Site
-
+
+
+ Projects
+
+
+
Project
-
+
+
Role
-
+
Roles
-
+
Update Preferences
-
-
+
+
Preferences
-
+
Configuration
@@ -3658,53 +3742,53 @@ Vous devez spécifier au moins un groupe utilisateur
VideoRehabPTZDialog
-
+
PTZ Camera Settings
-
+
Control type:
-
-
+
+
admin
-
+
Vivotek
-
+
Address (URL):
-
+
User:
-
+
Password:
-
+
Port:
-
+
Apply
-
+
Cancel
@@ -3716,37 +3800,37 @@ Vous devez spécifier au moins un groupe utilisateur
Form
-
+
VideoRehabSetup
-
+
Title
-
+
(Error)
-
+
Retry
-
+
Loading...
-
+
Define as default
-
+
Advanced Configuration
@@ -3810,67 +3894,67 @@ Vous devez spécifier au moins un groupe utilisateur
VideoRehabToolsWidget
-
+
Form
-
+
Reconnect
-
+
Recording
-
+
A recording of the session is in progress.
-
+
If you continue, the recording might be lost.
-
+
Do you want to continue?
-
-
+
+
Save
-
+
You are about to locally record a video session.
-
+
If you accept and proceed with this recording, you accept the professional, legal and ethic responsability related to the storage, distribution, use and confidentiality required with that kind of media.
-
+
Do you still want to start video recording?
-
+
Required confirmation
-
+
Stop recording
@@ -3878,58 +3962,58 @@ Vous devez spécifier au moins un groupe utilisateur
VideoRehabVirtualCamSetupDialog
-
+
Virtual camera - Configuration
-
+
Configuration wizard?
-
+
Camera source
-
+
User:
-
+
Source type:
-
+
Address (URL):
-
+
Vivotek
-
-
+
+
admin
-
+
Password:
-
+
Apply
-
+
Cancel
@@ -3937,27 +4021,27 @@ Vous devez spécifier au moins un groupe utilisateur
VideoRehabWidget
-
+
Form
-
+
Title
-
+
(Error)
-
+
Retry
-
+
Connecting...
@@ -3966,37 +4050,37 @@ Vous devez spécifier au moins un groupe utilisateur
Unable to load camera preview page
-
+
File available
-
+
File
-
+
is available in the folder
-
+
Unable to load page
-
+
Video Problem
-
+
Audio Problem
-
+
Error
diff --git a/client/resources/translations/openteraplus_fr.ts b/client/resources/translations/openteraplus_fr.ts
index a475c1bb..280284cd 100644
--- a/client/resources/translations/openteraplus_fr.ts
+++ b/client/resources/translations/openteraplus_fr.ts
@@ -4,17 +4,17 @@
AboutDialog
-
+
-
+
-
+
@@ -22,12 +22,12 @@
BaseDialog
-
+
-
+
@@ -205,7 +205,7 @@
-
+
@@ -251,34 +251,34 @@
-
+
-
+
-
+
-
+
-
+
-
-
-
+
+
+
@@ -286,32 +286,32 @@
DeviceAssignDialog
-
+
-
+
-
+
-
+
-
+
-
+
@@ -319,42 +319,42 @@
DeviceSubTypeWidget
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -362,42 +362,42 @@
DeviceTypeWidget
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -432,57 +432,57 @@ Si l'appareil est présentement déployé, les données ne seront plus coll
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -490,27 +490,27 @@ Si l'appareil est présentement déployé, les données ne seront plus coll
DownloadProgressDialog
-
+
-
+
-
+
-
+
-
+
@@ -561,27 +561,27 @@ Si l'appareil est présentement déployé, les données ne seront plus coll
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -618,32 +618,32 @@ p, li { white-space: pre-wrap; }
GeneratePasswordDialog
-
+
-
+
-
+
-
+
-
+
-
+
@@ -698,77 +698,77 @@ ou réalisées
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -791,140 +791,140 @@ ou réalisées
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -942,37 +942,37 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1066,77 +1066,77 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1161,12 +1161,12 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du
-
+
-
+
@@ -1194,27 +1194,27 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du
-
+
-
+
-
+
-
+
-
+
@@ -1233,37 +1233,37 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1370,52 +1370,52 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1423,197 +1423,197 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du
MainWindow
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1621,22 +1621,22 @@ Souhaitez-vous vous déconnecter pour appliquer les changements?
NotifyWindow
-
+
-
+
-
+
-
+
@@ -1644,131 +1644,158 @@ Souhaitez-vous vous déconnecter pour appliquer les changements?
OnlineManagerWidget
-
+
-
-
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ParticipantWidget
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
-
-
-
-
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
-
-
-
-
-
+
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2058,48 +2075,48 @@ Souhaitez-vous continuer cette séance?
PasswordStrengthDialog
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2107,263 +2124,290 @@ Souhaitez-vous continuer cette séance?
ProjectNavigator
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ProjectWidget
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
@@ -2371,27 +2415,27 @@ ou réalisées
ServiceConfigWidget
-
+
-
+
-
+
-
+
-
+
@@ -2445,63 +2489,63 @@ ou réalisées
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2509,97 +2553,105 @@ ou réalisées
SessionInviteWidget
-
+
-
-
-
-
+
+
+
+
-
-
+
-
+
-
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2607,22 +2659,22 @@ ou réalisées
SessionLobbyDialog
-
+
-
+
-
+
-
+
@@ -2646,52 +2698,52 @@ Vous devez associer au moins un projet.
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2760,159 +2812,159 @@ Vous devez associer au moins un projet.
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -2957,7 +3009,7 @@ ou réalisées
-
+
@@ -2982,117 +3034,117 @@ ou réalisées
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3100,22 +3152,22 @@ ou réalisées
StartSessionDialog
-
+
-
+
-
+
-
+
@@ -3123,17 +3175,17 @@ ou réalisées
TeraForm
-
+
-
+
-
+
@@ -3142,90 +3194,90 @@ ou réalisées
UserGroupWidget
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3238,72 +3290,72 @@ ou réalisées
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3311,125 +3363,137 @@ ou réalisées
UserWidget
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
-
+
+
-
+
-
+
-
-
+
+
-
+
@@ -3445,53 +3509,53 @@ Vous devez spécifier au moins un groupe utilisateur
VideoRehabPTZDialog
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3499,37 +3563,37 @@ Vous devez spécifier au moins un groupe utilisateur
VideoRehabSetupWidget
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3593,67 +3657,67 @@ Vous devez spécifier au moins un groupe utilisateur
VideoRehabToolsWidget
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
@@ -3661,58 +3725,58 @@ Vous devez spécifier au moins un groupe utilisateur
VideoRehabVirtualCamSetupDialog
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
@@ -3720,62 +3784,62 @@ Vous devez spécifier au moins un groupe utilisateur
VideoRehabWidget
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/client/src/ClientApp.cpp b/client/src/ClientApp.cpp
index 14ffd51f..9c99e5fa 100755
--- a/client/src/ClientApp.cpp
+++ b/client/src/ClientApp.cpp
@@ -26,8 +26,8 @@ ClientApp::ClientApp(int &argc, char **argv)
QString stylesheet = QLatin1String(file.readAll());
setStyleSheet(stylesheet);
- setApplicationName(QString("OpenTeraPlus v") + QString(OPENTERAPLUS_VERSION));
- qDebug() << "Starting App " << applicationName();
+ //setApplicationName(QString("OpenTeraPlus v") + QString(OPENTERAPLUS_VERSION));
+ qDebug() << "Starting App " << applicationName() + " v" + QString(OPENTERAPLUS_VERSION);
// Load config
loadConfig();
diff --git a/client/src/dialogs/BaseDialog.cpp b/client/src/dialogs/BaseDialog.cpp
index 9a01ceff..7d852797 100644
--- a/client/src/dialogs/BaseDialog.cpp
+++ b/client/src/dialogs/BaseDialog.cpp
@@ -21,7 +21,7 @@ void BaseDialog::setCentralWidget(QWidget *widget)
{
widget->setParent(m_ui.centralWidget);
m_centralWidgetLayout->addWidget(widget);
- widget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+ //widget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
}
diff --git a/client/src/dialogs/BaseDialog.ui b/client/src/dialogs/BaseDialog.ui
index 6fcd3781..dc87c2da 100644
--- a/client/src/dialogs/BaseDialog.ui
+++ b/client/src/dialogs/BaseDialog.ui
@@ -39,13 +39,20 @@
5
-
-
-
-
- 0
- 0
-
+
+
+ true
+
+
+
+ 0
+ 0
+ 672
+ 259
+
+
+
-
diff --git a/client/src/editors/DataEditorWidget.cpp b/client/src/editors/DataEditorWidget.cpp
index 8399dcb3..7e419237 100644
--- a/client/src/editors/DataEditorWidget.cpp
+++ b/client/src/editors/DataEditorWidget.cpp
@@ -13,8 +13,8 @@ DataEditorWidget::DataEditorWidget(ComManager *comMan, const TeraData *data, QWi
m_cancelButton = nullptr;
m_mainForm = nullptr;
- setData(data);
- setLoading();
+ DataEditorWidget::setData(data);
+ DataEditorWidget::setLoading();
// Set ComManager pointer
m_comManager = comMan;
diff --git a/client/src/editors/DataListWidget.cpp b/client/src/editors/DataListWidget.cpp
index ecbeef91..9fc98b6e 100644
--- a/client/src/editors/DataListWidget.cpp
+++ b/client/src/editors/DataListWidget.cpp
@@ -105,7 +105,7 @@ void DataListWidget::updateDataInList(TeraData* data, bool select_item){
// If we have extra fields to display, append them
QString extra_field = "";
if (!m_extraDisplayFields.isEmpty() && !m_extraInfos.contains(data->getId())){
- for (QString field:m_extraDisplayFields){
+ for (QString field:qAsConst(m_extraDisplayFields)){
QStringList subfields = field.split(".");
QString subfield;
if (subfields.count() > 1){
@@ -120,7 +120,7 @@ void DataListWidget::updateDataInList(TeraData* data, bool select_item){
if (field_value.canConvert(QMetaType::QVariantList)){
QVariantList field_values = field_value.toList();
QString merged_list;
- for (QVariant field_value:field_values){
+ for (QVariant field_value:qAsConst(field_values)){
if (!merged_list.isEmpty())
merged_list += ", ";
// Search for subfield?
@@ -159,10 +159,10 @@ void DataListWidget::updateDataInList(TeraData* data, bool select_item){
}
}
- /*QString color_field = TeraData::getDataTypeName(m_dataType) + "_color";
+ QString color_field = TeraData::getDataTypeName(m_dataType) + "_color";
if (data->hasFieldName(color_field)){
item->setForeground(QColor(data->getFieldValue(color_field).toString()));
- }*/
+ }
if (select_item){
ui->lstData->setCurrentItem(item);
diff --git a/client/src/editors/GroupWidget.cpp b/client/src/editors/GroupWidget.cpp
index a5484529..e977c6c2 100644
--- a/client/src/editors/GroupWidget.cpp
+++ b/client/src/editors/GroupWidget.cpp
@@ -191,7 +191,7 @@ void GroupWidget::processStatsReply(TeraData stats, QUrlQuery reply_query)
QVariantList parts_list = stats.getFieldValue("participants").toList();
- for(QVariant part:parts_list){
+ for(const QVariant &part:qAsConst(parts_list)){
QVariantMap part_info = part.toMap();
int part_id = part_info["id_participant"].toInt();
@@ -252,6 +252,8 @@ void GroupWidget::processStatsReply(TeraData stats, QUrlQuery reply_query)
}
ui->tableSummary->setItem(current_row, 5, item);
}
+ ui->tableSummary->resizeColumnsToContents();
+ ui->tableSummary->sortByColumn(4, Qt::DescendingOrder); // Sort by last session date
}
}
diff --git a/client/src/editors/GroupWidget.ui b/client/src/editors/GroupWidget.ui
index bd2a9844..06ce8afc 100644
--- a/client/src/editors/GroupWidget.ui
+++ b/client/src/editors/GroupWidget.ui
@@ -10,7 +10,7 @@
0
0
750
- 505
+ 630
@@ -299,7 +299,7 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
0
0
710
- 98
+ 376
@@ -314,7 +314,7 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
15
-
-
+
-
@@ -345,7 +345,7 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- -
+
-
@@ -361,7 +361,7 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- -
+
-
@@ -377,7 +377,7 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- -
+
-
Qt::Horizontal
@@ -390,7 +390,7 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- -
+
-
@@ -423,92 +423,92 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 150
+
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ QAbstractItemView::SelectRows
+
+
+ true
+
+
+ 125
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+
+ Participant
+
+
+
+
+ État
+
+
+ AlignCenter
+
+
+
+
+ Séances
+
+
+ AlignCenter
+
+
+
+
+ Première séance
+
+
+ AlignCenter
+
+
+
+
+ Dernière séance
+
+
+ AlignCenter
+
+
+
+
+ Dernière connexion
+
+
+ AlignCenter
+
+
+
+
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 150
-
-
-
- QAbstractItemView::NoEditTriggers
-
-
- QAbstractItemView::SelectRows
-
-
- true
-
-
- 125
-
-
- true
-
-
- false
-
-
- false
-
-
-
- Participant
-
-
-
-
- État
-
-
- AlignCenter
-
-
-
-
- Séances
-
-
- AlignCenter
-
-
-
-
- Première séance
-
-
- AlignCenter
-
-
-
-
- Dernière séance
-
-
- AlignCenter
-
-
-
-
- Dernière connexion
-
-
- AlignCenter
-
-
-
-
@@ -525,6 +525,7 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+
diff --git a/client/src/editors/ParticipantWidget.cpp b/client/src/editors/ParticipantWidget.cpp
index 2eb9890e..b260e4d2 100644
--- a/client/src/editors/ParticipantWidget.cpp
+++ b/client/src/editors/ParticipantWidget.cpp
@@ -10,6 +10,7 @@
#include "editors/SessionWidget.h"
#include "dialogs/GeneratePasswordDialog.h"
+#include "dialogs/PasswordStrengthDialog.h"
ParticipantWidget::ParticipantWidget(ComManager *comMan, const TeraData *data, QWidget *parent) :
DataEditorWidget(comMan, data, parent),
@@ -149,6 +150,7 @@ void ParticipantWidget::updateControlsState()
void ParticipantWidget::updateFieldsValue()
{
+
if (m_data){
if (!dataIsNew()){
ui->lblTitle->setText(m_data->getName());
@@ -873,7 +875,7 @@ void ParticipantWidget::displaySessionDetails(QTableWidgetItem *session_item)
m_diag_editor->setCentralWidget(ses_widget);
m_diag_editor->setWindowTitle(tr("Séance"));
- m_diag_editor->setMinimumSize(this->width(), this->height());
+ m_diag_editor->setMinimumSize(2*this->width()/3, 2*this->height()/3);
connect(ses_widget, &SessionWidget::closeRequest, m_diag_editor, &QDialog::accept);
@@ -1149,8 +1151,6 @@ void ParticipantWidget::on_btnRandomPass_clicked()
if (dlg.exec() == QDialog::Accepted){
QString password = dlg.getPassword();
ui->txtPassword->setText(password);
- ui->txtPasswordConfirm->setText(password);
- on_txtPassword_textEdited(password);
}
}
@@ -1165,13 +1165,6 @@ void ParticipantWidget::on_btnSaveLogin_clicked()
err_msg.append(tr("Code utilisateur manquant
"));
}
- if (!ui->txtPassword->text().isEmpty() || !ui->txtPasswordConfirm->text().isEmpty()){
- if (ui->txtPassword->text() != ui->txtPasswordConfirm->text()){
- all_ok = false;
- err_msg.append(tr("Les mots de passe ne correspondent pas."));
- }
- }
-
if (ui->txtPassword->text().isEmpty()){
all_ok = false;
err_msg.append(tr("Aucun mot de passe spécifié."));
@@ -1190,7 +1183,6 @@ void ParticipantWidget::on_btnSaveLogin_clicked()
saveData();
ui->wdgParticipant->resetFormValues(); // Ensure data is always sent when using this button
ui->txtPassword->clear();
- ui->txtPasswordConfirm->clear();
}
@@ -1205,26 +1197,30 @@ void ParticipantWidget::on_txtUsername_textEdited(const QString ¤t)
void ParticipantWidget::on_txtPassword_textEdited(const QString ¤t)
{
- QString confirm_pass = ui->txtPasswordConfirm->text();
- if (current != confirm_pass || ui->txtPassword->text().isEmpty()){
- ui->txtPassword->setStyleSheet("background-color: #ffaaaa;");
- ui->txtPasswordConfirm->setStyleSheet("background-color: #ffaaaa;");
+ if (current.isEmpty())
+ return;
+
+ // Show password validator
+ PasswordStrengthDialog dlg(current);
+ //QLineEdit* wdg_editor = dynamic_cast(ui->wdgUser->getWidgetForField("user_password"));
+ //dlg.setCursorPosition(wdg_editor->cursorPosition());
+
+ if (dlg.exec() == QDialog::Accepted){
+ //m_passwordJustGenerated = true;
+ ui->txtPassword->setText(dlg.getCurrentPassword());
}else{
- ui->txtPassword->setStyleSheet("");
- ui->txtPasswordConfirm->setStyleSheet("");
+ ui->txtPassword->setText("");
+ //wdg_editor->undo();
}
-}
-void ParticipantWidget::on_txtPasswordConfirm_textEdited(const QString ¤t)
-{
- QString pass = ui->txtPassword->text();
- if (current != pass || ui->txtPassword->text().isEmpty()){
- ui->txtPasswordConfirm->setStyleSheet("background-color: #ffaaaa;");
+ /*QString confirm_pass = ui->txtPasswordConfirm->text();
+ if (current != confirm_pass || ui->txtPassword->text().isEmpty()){
ui->txtPassword->setStyleSheet("background-color: #ffaaaa;");
+ ui->txtPasswordConfirm->setStyleSheet("background-color: #ffaaaa;");
}else{
- ui->txtPasswordConfirm->setStyleSheet("");
ui->txtPassword->setStyleSheet("");
- }
+ ui->txtPasswordConfirm->setStyleSheet("");
+ }*/
}
void ParticipantWidget::on_tabInfos_currentChanged(int index)
diff --git a/client/src/editors/ParticipantWidget.h b/client/src/editors/ParticipantWidget.h
index 1eca3395..66f388d0 100644
--- a/client/src/editors/ParticipantWidget.h
+++ b/client/src/editors/ParticipantWidget.h
@@ -115,7 +115,6 @@ private slots:
void on_btnSaveLogin_clicked();
void on_txtUsername_textEdited(const QString ¤t);
void on_txtPassword_textEdited(const QString ¤t);
- void on_txtPasswordConfirm_textEdited(const QString ¤t);
void on_tabInfos_currentChanged(int index);
void on_btnNewSession_clicked();
void on_btnCheckSessionTypes_clicked();
diff --git a/client/src/editors/ParticipantWidget.ui b/client/src/editors/ParticipantWidget.ui
index c76cf94b..14db5fb9 100644
--- a/client/src/editors/ParticipantWidget.ui
+++ b/client/src/editors/ParticipantWidget.ui
@@ -441,6 +441,12 @@ QCalendarWidget QSpinBox::down-arrow { width:16px; height:16px; }
0
+
+
+ 150
+ 0
+
+
PointingHandCursor
@@ -660,6 +666,12 @@ QCalendarWidget QSpinBox::down-arrow { width:16px; height:16px; }
-
+
+
+ 150
+ 0
+
+
PointingHandCursor
@@ -691,6 +703,18 @@ QCalendarWidget QSpinBox::down-arrow { width:16px; height:16px; }
-
+
+
+ 0
+ 0
+
+
+
+
+ 16777215
+ 16777215
+
+
Code utilisateur
@@ -704,6 +728,12 @@ QCalendarWidget QSpinBox::down-arrow { width:16px; height:16px; }
32
+
+
+ 125
+ 16777215
+
+
Code utilisateur
@@ -711,6 +741,12 @@ QCalendarWidget QSpinBox::down-arrow { width:16px; height:16px; }
-
+
+
+ 0
+ 0
+
+
Mot de passe
@@ -747,27 +783,17 @@ QCalendarWidget QSpinBox::down-arrow { width:16px; height:16px; }
32
-
- QLineEdit::Password
-
-
- Mot de passe
-
-
-
- -
-
-
+
- 0
- 32
+ 125
+ 16777215
QLineEdit::Password
- Confirmation mot de passe
+ Mot de passe
@@ -780,7 +806,7 @@ QCalendarWidget QSpinBox::down-arrow { width:16px; height:16px; }
Sauvegarder
- ...
+ Sauvegarder
@@ -792,8 +818,24 @@ QCalendarWidget QSpinBox::down-arrow { width:16px; height:16px; }
24
+
+ Qt::ToolButtonTextBesideIcon
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
@@ -1878,6 +1920,7 @@ QCalendarWidget QSpinBox::down-arrow { width:16px; height:16px; }
+
diff --git a/client/src/editors/ProjectWidget.cpp b/client/src/editors/ProjectWidget.cpp
index f8cb8781..df91201b 100644
--- a/client/src/editors/ProjectWidget.cpp
+++ b/client/src/editors/ProjectWidget.cpp
@@ -29,7 +29,7 @@ ProjectWidget::ProjectWidget(ComManager *comMan, const TeraData *data, QWidget *
queryDataRequest(WEB_FORMS_PATH, QUrlQuery(WEB_FORMS_QUERY_PROJECT));
ui->wdgProject->setComManager(m_comManager);
- setData(data);
+ ProjectWidget::setData(data);
}
@@ -111,6 +111,13 @@ void ProjectWidget::updateUserProjectAccess(const TeraData *access)
int current_row = ui->tableUsers->rowCount()-1;
QTableWidgetItem* item = new QTableWidgetItem(QIcon(access->getIconFilenameForDataType(TERADATA_USER)),
access->getFieldValue("user_name").toString());
+ if (access->hasFieldName("user_enabled")){
+ if (access->getFieldValue("user_enabled").toBool()){
+ item->setForeground(Qt::green);
+ }else{
+ item->setForeground(Qt::red);
+ }
+ }
ui->tableUsers->setItem(current_row, 0, item);
item = new QTableWidgetItem(DataEditorWidget::getRoleName(project_role));
ui->tableUsers->setItem(current_row, 1, item);
@@ -423,7 +430,7 @@ void ProjectWidget::processStatsReply(TeraData stats, QUrlQuery reply_query)
QVariantList parts_list = stats.getFieldValue("participants").toList();
- for(QVariant part:parts_list){
+ for(const QVariant &part:qAsConst(parts_list)){
QVariantMap part_info = part.toMap();
int part_id = part_info["id_participant"].toInt();
@@ -484,6 +491,8 @@ void ProjectWidget::processStatsReply(TeraData stats, QUrlQuery reply_query)
}
ui->tableSummary->setItem(current_row, 5, item);
}
+ ui->tableSummary->resizeColumnsToContents();
+ ui->tableSummary->sortByColumn(4, Qt::DescendingOrder); // Sort by last session date
}
}
@@ -513,8 +522,10 @@ void ProjectWidget::btnUpdateAccess_clicked()
QJsonObject base_obj;
QJsonArray roles;
- for (int i=0; i::iterator i;
+ //for (int i=0; irow();
QComboBox* combo_roles = dynamic_cast(ui->tableUserGroups->cellWidget(row,1));
if (combo_roles->property("original_index").toInt() != combo_roles->currentIndex()){
@@ -664,10 +675,13 @@ void ProjectWidget::on_btnUpdateServices_clicked()
for (int i=0; ilstServices->count(); i++){
QListWidgetItem* item = ui->lstServices->item(i);
- if (m_listServicesProjects_items.values().contains(item)){
+ int service_id = m_listServicesProjects_items.key(item, 0);
+ //if (m_listServicesProjects_items.values().contains(item)){
+ if (service_id >0){
if (item->checkState() == Qt::Unchecked){
// Service was unselected
- todel_ids.append(m_listServicesProjects_items.key(item));
+ //todel_ids.append(m_listServicesProjects_items.key(item));
+ todel_ids.append(service_id);
}
}else{
if (item->checkState() == Qt::Checked){
@@ -721,7 +735,7 @@ void ProjectWidget::on_btnUserGroups_clicked()
m_diag_editor->setCentralWidget(list_widget);
m_diag_editor->setWindowTitle(tr("Groupes Utilisateurs"));
- m_diag_editor->setFixedSize(size().width(), size().height());
+ m_diag_editor->setMinimumSize(size().width(), 2*size().height()/3);
connect(m_diag_editor, &BaseDialog::finished, this, &ProjectWidget::userGroupsEditor_finished);
m_diag_editor->open();
diff --git a/client/src/editors/ProjectWidget.h b/client/src/editors/ProjectWidget.h
index 83f00f8b..1b9f2718 100644
--- a/client/src/editors/ProjectWidget.h
+++ b/client/src/editors/ProjectWidget.h
@@ -24,9 +24,9 @@ class ProjectWidget : public DataEditorWidget
explicit ProjectWidget(ComManager* comMan, const TeraData* data = nullptr, QWidget *parent = nullptr);
~ProjectWidget();
- void saveData(bool signal=true);
+ void saveData(bool signal=true) override;
- void setData(const TeraData* data);
+ void setData(const TeraData* data) override;
private slots:
void processFormsReply(QString form_type, QString data);
@@ -79,9 +79,9 @@ private slots:
void updateDevice(const TeraData* device);
void updateServiceProject(const TeraData* sp);
- void updateControlsState();
- void updateFieldsValue();
- bool validateData();
+ void updateControlsState() override;
+ void updateFieldsValue() override;
+ bool validateData() override;
bool isSiteAdmin();
diff --git a/client/src/editors/ProjectWidget.ui b/client/src/editors/ProjectWidget.ui
index 0a0a1b31..a9af538e 100644
--- a/client/src/editors/ProjectWidget.ui
+++ b/client/src/editors/ProjectWidget.ui
@@ -7,7 +7,7 @@
0
0
753
- 771
+ 783
@@ -296,7 +296,7 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
0
0
713
- 522
+ 529
@@ -980,6 +980,12 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+
+ TeraForm
+ QWidget
+
+ 1
+
ClickableLabel
QLabel
@@ -989,15 +995,10 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
clicked()
-
- TeraForm
- QWidget
-
- 1
-
+
diff --git a/client/src/editors/SiteWidget.cpp b/client/src/editors/SiteWidget.cpp
index 95c97b28..114f1655 100644
--- a/client/src/editors/SiteWidget.cpp
+++ b/client/src/editors/SiteWidget.cpp
@@ -399,7 +399,7 @@ void SiteWidget::btnProjects_clicked()
m_diag_editor->setCentralWidget(list_widget);
m_diag_editor->setWindowTitle(tr("Projets"));
- m_diag_editor->setFixedSize(size().width(), size().height());
+ m_diag_editor->setMinimumSize(size().width(), 2*size().height()/3);
m_diag_editor->open();
}
@@ -530,7 +530,7 @@ void SiteWidget::on_btnUserGroups_clicked()
m_diag_editor->setCentralWidget(list_widget);
m_diag_editor->setWindowTitle(tr("Groupes Utilisateurs"));
- m_diag_editor->setFixedSize(size().width(), size().height());
+ m_diag_editor->setMinimumSize(size().width(), 2*size().height()/3);
connect(m_diag_editor, &BaseDialog::finished, this, &SiteWidget::userGroupsEditor_finished);
m_diag_editor->open();
diff --git a/client/src/editors/SiteWidget.ui b/client/src/editors/SiteWidget.ui
index d1fef698..d07e84c4 100644
--- a/client/src/editors/SiteWidget.ui
+++ b/client/src/editors/SiteWidget.ui
@@ -172,7 +172,7 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- 1
+ 0
@@ -327,15 +327,15 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
10
- -
-
+
-
+
- XXXX Groupes
+ XXX Appareils
- -
-
+
-
+
0
@@ -358,22 +358,46 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- :/icons/project.png
+ :/icons/software_user.png
true
- -
-
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 64
+ 64
+
+
+
+
+ 64
+ 64
+
+
- XXX Appareils
+
+
+
+ :/icons/session.png
+
+
+ true
- -
-
+
-
+
0
@@ -381,7 +405,23 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- XXXX Projets
+ XXXX Séances
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ XXXX Utilisateurs
Qt::AlignCenter
@@ -419,8 +459,8 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- -
-
+
-
+
0
@@ -443,15 +483,22 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- :/icons/patient.png
+ :/icons/group.png
true
- -
-
+
-
+
+
+ XXXX Groupes
+
+
+
+ -
+
0
@@ -474,31 +521,15 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- :/icons/software_user.png
+ :/icons/project.png
true
- -
-
-
-
- 0
- 0
-
-
-
- XXXX Utilisateurs
-
-
- Qt::AlignCenter
-
-
-
- -
-
+
-
+
0
@@ -506,31 +537,15 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- XXXX Séances
-
-
- Qt::AlignCenter
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- XXXX Participants
+ XXXX Projets
Qt::AlignCenter
- -
-
+
-
+
0
@@ -553,41 +568,26 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- :/icons/group.png
+ :/icons/patient.png
true
- -
-
+
-
+
-
+
0
0
-
-
- 64
- 64
-
-
-
-
- 64
- 64
-
-
-
-
-
- :/icons/session.png
+ XXXX Participants
-
- true
+
+ Qt::AlignCenter
@@ -925,6 +925,7 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+
diff --git a/client/src/editors/TeraForm.cpp b/client/src/editors/TeraForm.cpp
index f58838bd..aa18b034 100644
--- a/client/src/editors/TeraForm.cpp
+++ b/client/src/editors/TeraForm.cpp
@@ -15,10 +15,10 @@ TeraForm::TeraForm(QWidget *parent, ComManager *com_man) :
m_highlightConditionals = true;
// TODO: Find out why the global stylesheet isn't correctly used by TeraForm
- QFile file(":/stylesheet.qss");
+ /*QFile file(":/stylesheet.qss");
file.open(QFile::ReadOnly);
QString stylesheet = QLatin1String(file.readAll());
- setStyleSheet(stylesheet);
+ setStyleSheet(stylesheet);*/
// Automatically sets comManager
/*DataEditorWidget* parent_editor = dynamic_cast(parent);
@@ -419,7 +419,7 @@ void TeraForm::buildFormFromStructure(QWidget *page, const QVariantList &structu
layout = static_cast(page->layout());
}
- for (QVariant item:structure){
+ for (const QVariant &item:structure){
if (item.canConvert(QMetaType::QVariantHash)){
QVariantHash item_data = item.toHash();
QString item_id = item_data["id"].toString();
@@ -523,6 +523,7 @@ void TeraForm::buildFormFromStructure(QWidget *page, const QVariantList &structu
}else{
LOG_WARNING("Unknown item type: " + item_type, "TeraForm::buildFormFromStructure");
+ item_label->deleteLater();
}
}
}
@@ -726,9 +727,8 @@ QWidget *TeraForm::createColorWidget(const QVariantHash &structure)
item_btn->setFlat(true);
item_btn->setProperty("color", "#FFFFFF");
- item_btn->setStyleSheet("background-color: #FFFFFF");
+ item_btn->setStyleSheet("background-color: #FFFFFF;min-width: 32px;");
item_btn->setCursor(Qt::PointingHandCursor);
- item_btn->setMaximumWidth(100);
// Connect signal
connect(item_btn, &QPushButton::clicked, this, &TeraForm::colorWidgetClicked);
@@ -1076,7 +1076,7 @@ void TeraForm::setWidgetValue(QWidget *widget, const QVariant &value)
if (QPushButton* btn = dynamic_cast(widget)){
if (value.toString().startsWith("#")){
btn->setProperty("color", value.toString());
- btn->setStyleSheet(QString("background-color: " + value.toString() + ";"));
+ btn->setStyleSheet(QString("background-color: " + value.toString() + ";min-width: 32px;"));
return;
}
@@ -1185,7 +1185,8 @@ bool TeraForm::validateWidget(QWidget *widget, bool include_hidden)
}
if (rval){
- widget->setStyleSheet("");
+ if (!dynamic_cast(widget)) // Ignore push button in validation
+ widget->setStyleSheet("");
}else{
widget->setStyleSheet("background-color: #ffaaaa;");
}
diff --git a/client/src/editors/UserWidget.cpp b/client/src/editors/UserWidget.cpp
index 11f2a9a1..786ea4cd 100644
--- a/client/src/editors/UserWidget.cpp
+++ b/client/src/editors/UserWidget.cpp
@@ -103,7 +103,9 @@ void UserWidget::saveData(bool signal){
new_data->setName(new_data->getFieldValue("user_firstname").toString() + " " + new_data->getFieldValue("user_lastname").toString());
*m_data = *new_data;
delete new_data;
- emit dataWasChanged();
+ if (!m_currentUserPasswordChanged)
+ // If current password was changed, we will process it in the user replies
+ emit dataWasChanged();
}
/*if (parent())
@@ -338,6 +340,7 @@ void UserWidget::processUsersReply(QList users)
m_comManager->setCredentials(m_data->getFieldValue("user_username").toString(),
ui->wdgUser->getFieldValue("user_password").toString());
m_currentUserPasswordChanged = false;
+ emit dataWasChanged();
}
// We found "ourself" in the list - update data.
//*m_data = users.at(i);
diff --git a/client/src/main/MainWindow.cpp b/client/src/main/MainWindow.cpp
index 6ac593b6..20c56c9f 100644
--- a/client/src/main/MainWindow.cpp
+++ b/client/src/main/MainWindow.cpp
@@ -880,7 +880,8 @@ void MainWindow::on_btnEditUser_clicked()
ui->projNavigator->setOnHold(true);
m_diag_editor = new BaseDialog(this);
- m_diag_editor->setMinimumHeight(600);
+ //m_diag_editor->setMinimumHeight(600);
+ m_diag_editor->setMinimumSize(this->width()/2, 2*this->height()/3);
UserWidget* user_editor = new UserWidget(m_comManager, &(m_comManager->getCurrentUser()), nullptr);
m_diag_editor->setCentralWidget(user_editor);
diff --git a/client/src/main/MainWindow.ui b/client/src/main/MainWindow.ui
index c2bd903d..d2ed8fd2 100644
--- a/client/src/main/MainWindow.ui
+++ b/client/src/main/MainWindow.ui
@@ -41,7 +41,7 @@ QLabel#lblLogo, QLabel#lblVersion, QLabel#lblUser{background-color:transparent;}
0
0
1069
- 749
+ 750
@@ -474,7 +474,7 @@ QLabel#lblLogo, QLabel#lblVersion, QLabel#lblUser{background-color:transparent;}
- :/icons/user_info.png:/icons/user_info.png
+ :/icons/software_user.png:/icons/software_user.png
@@ -559,7 +559,7 @@ QLabel#lblLogo, QLabel#lblVersion, QLabel#lblUser{background-color:transparent;}
QTabWidget::West
- 0
+ 1
@@ -826,7 +826,7 @@ QLabel#lblLogo, QLabel#lblVersion, QLabel#lblUser{background-color:transparent;}
0
0
1689
- 21
+ 20
@@ -856,6 +856,7 @@ QLabel#lblLogo, QLabel#lblVersion, QLabel#lblUser{background-color:transparent;}
+
diff --git a/client/src/managers/ComManager.cpp b/client/src/managers/ComManager.cpp
index 2d612873..72f1f197 100644
--- a/client/src/managers/ComManager.cpp
+++ b/client/src/managers/ComManager.cpp
@@ -916,6 +916,8 @@ void ComManager::updateCurrentUser(const TeraData &user_data)
// Update fields that we received with the new values
//qDebug() << "Updating user...";
m_currentUser.updateFrom(user_data);
+
+ // Update credentials
emit currentUserUpdated();
}
}
@@ -954,7 +956,9 @@ QString ComManager::filterReplyString(const QString &data_str)
void ComManager::onNetworkAuthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)
{
Q_UNUSED(reply)
- if (!m_settedCredentials){
+ // If we are logging in, credentials were already sent, and if we get here, it's because they were
+ // rejected
+ if (!m_settedCredentials && !m_loggingInProgress){
LOG_DEBUG("Sending authentication request...", "ComManager::onNetworkAuthenticationRequired");
authenticator->setUser(m_username);
authenticator->setPassword(m_password);
diff --git a/client/src/managers/WebSocketManager.cpp b/client/src/managers/WebSocketManager.cpp
index fffe53a5..79b2ddaa 100644
--- a/client/src/managers/WebSocketManager.cpp
+++ b/client/src/managers/WebSocketManager.cpp
@@ -153,7 +153,7 @@ void WebSocketManager::onSocketTextMessageReceived(const QString &message)
// Handle received message depending on type
TeraMessage tera_msg;
- if (google::protobuf::util::JsonStringToMessage(message.toStdString(), &tera_msg) == google::protobuf::util::Status::OK){
+ if (google::protobuf::util::JsonStringToMessage(message.toStdString(), &tera_msg).ok()){
// TeraMessage
if (tera_msg.message().Is()){
TeraEvent tera_event;
diff --git a/client/src/services/VideoRehabService/VideoRehabToolsWidget.cpp b/client/src/services/VideoRehabService/VideoRehabToolsWidget.cpp
index 3199f9dc..4cca519c 100644
--- a/client/src/services/VideoRehabService/VideoRehabToolsWidget.cpp
+++ b/client/src/services/VideoRehabService/VideoRehabToolsWidget.cpp
@@ -32,6 +32,7 @@ bool VideoRehabToolsWidget::sessionCanBeEnded()
void VideoRehabToolsWidget::setReadyState(bool ready_state)
{
+ setEnabled(ready_state);
if (ui->frameRecord->isVisible())
ui->frameRecord->setEnabled(ready_state);
}
diff --git a/client/src/services/VideoRehabService/VideoRehabWidget.cpp b/client/src/services/VideoRehabService/VideoRehabWidget.cpp
index 26d7efbf..397d1372 100644
--- a/client/src/services/VideoRehabService/VideoRehabWidget.cpp
+++ b/client/src/services/VideoRehabService/VideoRehabWidget.cpp
@@ -74,8 +74,8 @@ void VideoRehabWidget::initUI()
//Set page to view
m_webEngine->setPage(m_webPage);
- QWebEngineProfile::defaultProfile()->setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies);
- QWebEngineProfile::defaultProfile()->setHttpCacheType(QWebEngineProfile::NoCache);
+ QWebEngineProfile::defaultProfile()->setPersistentCookiesPolicy(/*QWebEngineProfile::AllowPersistentCookies*/QWebEngineProfile::NoPersistentCookies);
+ QWebEngineProfile::defaultProfile()->setHttpCacheType(/*QWebEngineProfile::DiskHttpCache*/QWebEngineProfile::NoCache);
// Set download path
QStringList documents_path = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
@@ -154,7 +154,8 @@ void VideoRehabWidget::webEngineURLChanged(QUrl url)
void VideoRehabWidget::webEngineDownloadRequested(QWebEngineDownloadItem *item)
{
- qDebug() << "WebEngine: about to download " << item->suggestedFileName();
+ //qDebug() << "WebEngine: about to download " << item->suggestedFileName();
+ emit widgetIsReady(false);
// Rework filename
QString file_name = item->suggestedFileName();
@@ -191,8 +192,14 @@ void VideoRehabWidget::webEngineDownloadRequested(QWebEngineDownloadItem *item)
void VideoRehabWidget::webEngineDownloadCompleted()
{
+
+ // Enable buttons
+ emit widgetIsReady(true);
+
QWebEngineDownloadItem* item = dynamic_cast(sender());
if (item){
+ if (item->receivedBytes() == 0)
+ return;
GlobalMessageBox msg_box;
msg_box.setTextFormat(Qt::RichText);
QString full_dir_path = item->downloadDirectory();
diff --git a/client/src/services/VideoRehabService/WebSocket/SharedObject.cpp b/client/src/services/VideoRehabService/WebSocket/SharedObject.cpp
index d6987b61..caa658aa 100644
--- a/client/src/services/VideoRehabService/WebSocket/SharedObject.cpp
+++ b/client/src/services/VideoRehabService/WebSocket/SharedObject.cpp
@@ -4,6 +4,7 @@ SharedObject::SharedObject(QObject *parent) : QObject(parent)
{
m_cameraIndex = -1;
m_ptzCameraDriver = nullptr;
+ m_imgSettingsDialog = nullptr;
m_camPTZName = "";
}
diff --git a/client/src/widgets/InSessionWidget.cpp b/client/src/widgets/InSessionWidget.cpp
index 928b165c..101b1712 100644
--- a/client/src/widgets/InSessionWidget.cpp
+++ b/client/src/widgets/InSessionWidget.cpp
@@ -134,7 +134,7 @@ void InSessionWidget::newSessionInviteesRequested(QStringList user_uuids, QStrin
// Devices
if (!device_uuids.isEmpty()){
QJsonArray devices;
- for(QString device_uuid:device_uuids){
+ for(const QString &device_uuid:device_uuids){
devices.append(QJsonValue(device_uuid));
}
item_obj.insert("session_devices", devices);
@@ -143,7 +143,7 @@ void InSessionWidget::newSessionInviteesRequested(QStringList user_uuids, QStrin
// Participants
if (!participant_uuids.isEmpty()){
QJsonArray participants;
- for(QString part_uuid:participant_uuids){
+ for(const QString &part_uuid:participant_uuids){
participants.append(QJsonValue(part_uuid));
}
item_obj.insert("session_participants", participants);
@@ -151,7 +151,7 @@ void InSessionWidget::newSessionInviteesRequested(QStringList user_uuids, QStrin
if (!user_uuids.isEmpty()){
QJsonArray users;
- for(QString user_uuid:user_uuids){
+ for(const QString &user_uuid:user_uuids){
users.append(QJsonValue(user_uuid));
}
item_obj.insert("session_users", users);
@@ -214,6 +214,16 @@ void InSessionWidget::sessionTimer()
ui->lblTimer->setText(m_sessionDuration.toString("hh:mm:ss"));
}
+void InSessionWidget::setReadyState(bool state)
+{
+ ui->btnEndSession->setEnabled(state);
+ ui->btnLeaveSession->setEnabled(state);
+ ui->btnInSessionInfos->setEnabled(state);
+
+ if (m_serviceToolsWidget)
+ m_serviceToolsWidget->setReadyState(state);
+}
+
void InSessionWidget::on_btnEndSession_clicked()
{
@@ -438,6 +448,7 @@ void InSessionWidget::initUI()
ui->wdgInvitees->setConfirmOnRemove(true);
ui->wdgInvitees->setComManager(m_comManager);
+ //ui->wdgInvitees->showAvailableInvitees(true);
ui->btnInSessionInfos->setChecked(true);
//ui->tabInfos->hide();
@@ -482,7 +493,7 @@ void InSessionWidget::initUI()
msg_box.showWarning(tr("Service non-supporté"), tr("Le service \"") + service_key + tr("\" n'est pas gérée par cette version du logiciel.\n\nVeuillez vérifier si une mise à jour existe ou contribuez au développement du logiciel!"));
}else{
// Connect signals between tools and main widget
- connect(m_serviceWidget, &BaseServiceWidget::widgetIsReady, m_serviceToolsWidget, &BaseServiceToolsWidget::setReadyState);
+ connect(m_serviceWidget, &BaseServiceWidget::widgetIsReady, this, &InSessionWidget::setReadyState);
}
break;
diff --git a/client/src/widgets/InSessionWidget.h b/client/src/widgets/InSessionWidget.h
index 3c0dc494..275c230f 100644
--- a/client/src/widgets/InSessionWidget.h
+++ b/client/src/widgets/InSessionWidget.h
@@ -35,6 +35,7 @@ class InSessionWidget : public QWidget
private slots:
void on_btnEndSession_clicked();
+ void on_btnLeaveSession_clicked();
void on_btnInSessionInfos_toggled(bool checked);
void processSessionsReply(QList sessions);
@@ -58,7 +59,7 @@ private slots:
void sessionTimer();
- void on_btnLeaveSession_clicked();
+ void setReadyState(bool state);
private:
void connectSignals();
diff --git a/client/src/widgets/OnlineManagerWidget.cpp b/client/src/widgets/OnlineManagerWidget.cpp
index e4eb3f06..728f7a1d 100644
--- a/client/src/widgets/OnlineManagerWidget.cpp
+++ b/client/src/widgets/OnlineManagerWidget.cpp
@@ -1,5 +1,6 @@
#include "OnlineManagerWidget.h"
#include "ui_OnlineManagerWidget.h"
+#include "TeraSettings.h"
// Must be reset each time a site is changed.
// 1. Query online * using APIs
@@ -10,8 +11,14 @@ OnlineManagerWidget::OnlineManagerWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::OnlineManagerWidget)
{
+
m_comManager = nullptr;
+ m_baseDevices = nullptr;
+ m_baseUsers = nullptr;
+ m_baseParticipants = nullptr;
ui->setupUi(this);
+
+
}
OnlineManagerWidget::~OnlineManagerWidget()
@@ -21,6 +28,8 @@ OnlineManagerWidget::~OnlineManagerWidget()
void OnlineManagerWidget::setComManager(ComManager *comMan)
{
+ initUi();
+
if (m_comManager)
m_comManager->deleteLater();
@@ -28,7 +37,25 @@ void OnlineManagerWidget::setComManager(ComManager *comMan)
connectSignals();
- initUi();
+ // Update filter buttons state
+ bool filter = TeraSettings::getUsersetting(m_comManager->getCurrentUser().getUuid(), SETTINGS_UI_ONLINEFILTERDEVICES).toBool();
+ ui->btnFilterDevices->setChecked(filter);
+ filter = TeraSettings::getUsersetting(m_comManager->getCurrentUser().getUuid(), SETTINGS_UI_ONLINEFILTERUSERS).toBool();
+ ui->btnFilterUsers->setChecked(filter);
+ filter = TeraSettings::getUsersetting(m_comManager->getCurrentUser().getUuid(), SETTINGS_UI_ONLINEFILTERPARTICIPANTS).toBool();
+ ui->btnFilterParticipants->setChecked(filter);
+
+ // If all off, select at least users and participants
+ if (!ui->btnFilterDevices->isChecked() && !ui->btnFilterParticipants->isChecked() && !ui->btnFilterUsers->isChecked()){
+ ui->btnFilterParticipants->setChecked(true);
+ ui->btnFilterUsers->setChecked(true);
+ }
+
+ // Update filtering state
+ on_btnFilterParticipants_clicked();
+ on_btnFilterUsers_clicked();
+ on_btnFilterDevices_clicked();
+
}
@@ -42,9 +69,28 @@ void OnlineManagerWidget::setCurrentSite(const QString &site_name, const int &si
void OnlineManagerWidget::initUi()
{
- ui->lstOnlineDevices->hide();
- ui->lstOnlineUsers->hide();
- ui->btnShowOnlineParticipants->setChecked(true); // Expand participants by default
+ ui->treeOnline->clear();
+
+ m_baseParticipants = new QTreeWidgetItem();
+ m_baseParticipants->setText(0, tr("Participants"));
+ m_baseParticipants->setIcon(0, QIcon("://icons/patient.png"));
+ m_baseParticipants->setForeground(0, Qt::cyan);
+ ui->treeOnline->addTopLevelItem(m_baseParticipants);
+
+ m_baseUsers = new QTreeWidgetItem();
+ m_baseUsers->setText(0, tr("Utilisateurs"));
+ m_baseUsers->setIcon(0, QIcon("://icons/software_user.png"));
+ m_baseUsers->setForeground(0, Qt::cyan);
+ ui->treeOnline->addTopLevelItem(m_baseUsers);
+
+ m_baseDevices = new QTreeWidgetItem();
+ m_baseDevices->setText(0, tr("Appareils"));
+ m_baseDevices->setIcon(0, QIcon("://icons/device.png"));
+ m_baseDevices->setForeground(0, Qt::cyan);
+ ui->treeOnline->addTopLevelItem(m_baseDevices);
+
+ ui->treeOnline->expandAll();
+
}
void OnlineManagerWidget::connectSignals()
@@ -60,10 +106,11 @@ void OnlineManagerWidget::connectSignals()
void OnlineManagerWidget::refreshOnlines()
{
- // Clear participant list since site was changed
- ui->lstOnlineUsers->clear();
- ui->lstOnlineDevices->clear();
- ui->lstOnlineParticipants->clear();
+ // Clear online list
+ qDeleteAll(m_onlineDevices);
+ qDeleteAll(m_onlineUsers);
+ qDeleteAll(m_onlineParticipants);
+
m_onlineUsers.clear();
m_onlineDevices.clear();
m_onlineParticipants.clear();
@@ -80,11 +127,11 @@ void OnlineManagerWidget::refreshOnlines()
void OnlineManagerWidget::updateCounts()
{
- ui->lblDevicesNum->setText(QString::number(ui->lstOnlineDevices->count()));
- ui->lblParticipantsNum->setText(QString::number(ui->lstOnlineParticipants->count()));
- ui->lblUsersNum->setText(QString::number(ui->lstOnlineUsers->count()));
+ ui->lblDevicesNum->setText(QString::number(m_onlineDevices.count()));
+ ui->lblParticipantsNum->setText(QString::number(m_onlineParticipants.count()));
+ ui->lblUsersNum->setText(QString::number(m_onlineUsers.count()));
- emit totalCountUpdated(ui->lstOnlineDevices->count() + ui->lstOnlineParticipants->count() + ui->lstOnlineUsers->count());
+ emit totalCountUpdated(m_onlineDevices.count() + m_onlineParticipants.count() + m_onlineUsers.count());
}
void OnlineManagerWidget::updateOnlineUser(const TeraData* online_user)
@@ -92,15 +139,18 @@ void OnlineManagerWidget::updateOnlineUser(const TeraData* online_user)
QString uuid = online_user->getUuid();
- QListWidgetItem* user_item = nullptr;
+ QTreeWidgetItem* user_item = nullptr;
if (m_onlineUsers.contains(uuid)){
user_item = m_onlineUsers[uuid];
}else{
if (online_user->isOnline()/* || online_user.isBusy()*/){ // Not online and not busy = don't need to add!
- user_item = new QListWidgetItem(QIcon(online_user->getIconStateFilename()), online_user->getName());
- user_item->setToolTip(uuid);
- ui->lstOnlineUsers->addItem(user_item);
+ user_item = new QTreeWidgetItem(m_baseUsers);
+ user_item->setIcon(0, QIcon(online_user->getIconStateFilename()));
+ user_item->setText(0, online_user->getName());
+#ifdef QT_DEBUG
+ user_item->setToolTip(0, uuid);
+#endif
m_onlineUsers[uuid] = user_item;
}
}
@@ -115,10 +165,11 @@ void OnlineManagerWidget::updateOnlineUser(const TeraData* online_user)
// Update name / icon if needed
/*if (!online_user->getName().isEmpty())
user_item->setText(online_user->getName());*/
- user_item->setIcon(QIcon(online_user->getIconStateFilename()));
+ user_item->setIcon(0, QIcon(online_user->getIconStateFilename()));
// Resort items
- ui->lstOnlineUsers->sortItems();
+ //ui->lstOnline->sortItems();
+ m_baseUsers->sortChildren(0, Qt::AscendingOrder);
}
}
}
@@ -127,15 +178,18 @@ void OnlineManagerWidget::updateOnlineParticipant(const TeraData *online_partici
{
QString uuid = online_participant->getUuid();
- QListWidgetItem* participant_item = nullptr;
+ QTreeWidgetItem* participant_item = nullptr;
if (m_onlineParticipants.contains(uuid)){
participant_item = m_onlineParticipants[uuid];
}else{
if (online_participant->isOnline()/* || online_participant.isBusy()*/){ // Not online and not busy = don't need to add!
- participant_item = new QListWidgetItem(QIcon(online_participant->getIconStateFilename()), online_participant->getName());
- participant_item->setToolTip(uuid);
- ui->lstOnlineParticipants->addItem(participant_item);
+ participant_item = new QTreeWidgetItem(m_baseParticipants);
+ participant_item->setIcon(0, QIcon(online_participant->getIconStateFilename()));
+ participant_item->setText(0, online_participant->getName());
+#ifdef QT_DEBUG
+ participant_item->setToolTip(0, uuid);
+#endif
m_onlineParticipants[uuid] = participant_item;
}
}
@@ -150,10 +204,11 @@ void OnlineManagerWidget::updateOnlineParticipant(const TeraData *online_partici
// Update name / icon if needed
/*if (!online_participant->getName().isEmpty())
participant_item->setText(online_participant->getName());*/
- participant_item->setIcon(QIcon(online_participant->getIconStateFilename()));
+ participant_item->setIcon(0, QIcon(online_participant->getIconStateFilename()));
// Resort items
- ui->lstOnlineParticipants->sortItems();
+ // ui->lstOnline->sortItems();
+ m_baseParticipants->sortChildren(0, Qt::AscendingOrder);
}
}
}
@@ -162,15 +217,19 @@ void OnlineManagerWidget::updateOnlineDevice(const TeraData *online_device)
{
QString uuid = online_device->getUuid();
- QListWidgetItem* device_item = nullptr;
+ QTreeWidgetItem* device_item = nullptr;
if (m_onlineDevices.contains(uuid)){
device_item = m_onlineDevices[uuid];
}else{
if (online_device->isOnline()/* || online_device.isBusy()*/){ // Not online and not busy = don't need to add!
- device_item = new QListWidgetItem(QIcon(online_device->getIconStateFilename()), online_device->getName()/* + " " + uuid*/);
- device_item->setToolTip(uuid);
- ui->lstOnlineDevices->addItem(device_item);
+ device_item = new QTreeWidgetItem(m_baseDevices);
+ device_item->setIcon(0,QIcon(online_device->getIconStateFilename()));
+ device_item->setText(0, online_device->getName());
+#ifdef QT_DEBUG
+ device_item->setToolTip(0, uuid);
+#endif
+ //ui->lstOnline->addItem(device_item);
m_onlineDevices[uuid] = device_item;
}
}
@@ -185,10 +244,11 @@ void OnlineManagerWidget::updateOnlineDevice(const TeraData *online_device)
// Update name / icon if needed
/*if (!online_device->getName().isEmpty())
device_item->setText(online_device->getName());*/
- device_item->setIcon(QIcon(online_device->getIconStateFilename()));
+ device_item->setIcon(0, QIcon(online_device->getIconStateFilename()));
// Resort items
- ui->lstOnlineDevices->sortItems();
+ // ui->lstOnline->sortItems();
+ m_baseDevices->sortChildren(0, Qt::AscendingOrder);
}
}
}
@@ -357,57 +417,57 @@ void OnlineManagerWidget::processOnlineDevices(QList devices)
updateCounts();
}
-void OnlineManagerWidget::on_btnShowOnlineParticipants_clicked()
+void OnlineManagerWidget::on_treeOnline_itemClicked(QTreeWidgetItem *item, int column)
{
- ui->lstOnlineParticipants->setVisible(ui->btnShowOnlineParticipants->isChecked());
- ui->btnShowOnlineDevices->setChecked(false);
- ui->lstOnlineDevices->hide();
- ui->btnShowOnlineUsers->setChecked(false);
- ui->lstOnlineUsers->hide();
-}
+ if (!item || item == m_baseDevices || item == m_baseParticipants || item == m_baseUsers)
+ return;
-void OnlineManagerWidget::on_btnShowOnlineUsers_clicked()
-{
- ui->lstOnlineUsers->setVisible(ui->btnShowOnlineUsers->isChecked());
- ui->btnShowOnlineDevices->setChecked(false);
- ui->lstOnlineDevices->hide();
- ui->btnShowOnlineParticipants->setChecked(false);
- ui->lstOnlineParticipants->hide();
-}
+ item->setSelected(false);
+ QString uuid;
-void OnlineManagerWidget::on_btnShowOnlineDevices_clicked()
-{
- ui->lstOnlineDevices->setVisible(ui->btnShowOnlineDevices->isChecked());
- ui->btnShowOnlineParticipants->setChecked(false);
- ui->lstOnlineParticipants->hide();
- ui->btnShowOnlineUsers->setChecked(false);
- ui->lstOnlineUsers->hide();
-}
-
-void OnlineManagerWidget::on_lstOnlineParticipants_itemClicked(QListWidgetItem *item)
-{
- ui->lstOnlineDevices->clearSelection();
- ui->lstOnlineUsers->clearSelection();
+ uuid = m_onlineDevices.key(item, QString());
+ if (!uuid.isEmpty()){
+ emit dataDisplayRequest(TERADATA_DEVICE, uuid);
+ return;
+ }
- QString uuid = m_onlineParticipants.key(item);
- emit dataDisplayRequest(TERADATA_PARTICIPANT, uuid);
+ uuid = m_onlineUsers.key(item, QString());
+ if (!uuid.isEmpty()){
+ emit dataDisplayRequest(TERADATA_USER, uuid);
+ return;
+ }
+ uuid = m_onlineParticipants.key(item, QString());
+ if (!uuid.isEmpty()){
+ emit dataDisplayRequest(TERADATA_PARTICIPANT, uuid);
+ return;
+ }
}
-void OnlineManagerWidget::on_lstOnlineUsers_itemClicked(QListWidgetItem *item)
-{
- ui->lstOnlineDevices->clearSelection();
- ui->lstOnlineParticipants->clearSelection();
- QString uuid = m_onlineUsers.key(item);
- emit dataDisplayRequest(TERADATA_USER, uuid);
+void OnlineManagerWidget::on_btnFilterParticipants_clicked()
+{
+ m_baseParticipants->setHidden(!ui->btnFilterParticipants->isChecked());
+ // Save new setting
+ if (m_comManager)
+ TeraSettings::setUserSetting(m_comManager->getCurrentUser().getUuid(), SETTINGS_UI_ONLINEFILTERPARTICIPANTS, ui->btnFilterParticipants->isChecked());
}
-void OnlineManagerWidget::on_lstOnlineDevices_itemClicked(QListWidgetItem *item)
+
+void OnlineManagerWidget::on_btnFilterUsers_clicked()
{
- ui->lstOnlineParticipants->clearSelection();
- ui->lstOnlineUsers->clearSelection();
+ m_baseUsers->setHidden(!ui->btnFilterUsers->isChecked());
+ // Save new setting
+ if (m_comManager)
+ TeraSettings::setUserSetting(m_comManager->getCurrentUser().getUuid(), SETTINGS_UI_ONLINEFILTERUSERS, ui->btnFilterUsers->isChecked());
+}
- QString uuid = m_onlineDevices.key(item);
- emit dataDisplayRequest(TERADATA_DEVICE, uuid);
+
+void OnlineManagerWidget::on_btnFilterDevices_clicked()
+{
+ m_baseDevices->setHidden(!ui->btnFilterDevices->isChecked());
+ // Save new setting
+ if (m_comManager)
+ TeraSettings::setUserSetting(m_comManager->getCurrentUser().getUuid(), SETTINGS_UI_ONLINEFILTERDEVICES, ui->btnFilterDevices->isChecked());
}
+
diff --git a/client/src/widgets/OnlineManagerWidget.h b/client/src/widgets/OnlineManagerWidget.h
index d4c781c9..47cbfbbd 100644
--- a/client/src/widgets/OnlineManagerWidget.h
+++ b/client/src/widgets/OnlineManagerWidget.h
@@ -2,7 +2,7 @@
#define ONLINEMANAGERWIDGET_H
#include
-#include
+#include
#include "managers/ComManager.h"
@@ -28,10 +28,15 @@ class OnlineManagerWidget : public QWidget
QString m_siteName;
int m_siteId;
+ // Base tree items
+ QTreeWidgetItem* m_baseUsers;
+ QTreeWidgetItem* m_baseParticipants;
+ QTreeWidgetItem* m_baseDevices;
+
// Data management
- QHash m_onlineUsers; // User UUID mapping of online users
- QHash m_onlineParticipants; // Participant UUID mapping of online participants
- QHash m_onlineDevices; // Participant UUID mapping of online participants
+ QHash m_onlineUsers; // User UUID mapping of online users
+ QHash m_onlineParticipants; // Participant UUID mapping of online participants
+ QHash m_onlineDevices; // Participant UUID mapping of online participants
QHash m_onlineUsersData; // UUID mapping to data of online users
QHash m_onlineParticipantsData; // UUID mapping to data of online users
@@ -59,12 +64,13 @@ private slots:
void processOnlineParticipants(QList participants);
void processOnlineDevices(QList devices);
- void on_btnShowOnlineParticipants_clicked();
- void on_btnShowOnlineUsers_clicked();
- void on_btnShowOnlineDevices_clicked();
- void on_lstOnlineParticipants_itemClicked(QListWidgetItem *item);
- void on_lstOnlineUsers_itemClicked(QListWidgetItem *item);
- void on_lstOnlineDevices_itemClicked(QListWidgetItem *item);
+ void on_treeOnline_itemClicked(QTreeWidgetItem *item, int column);
+
+ void on_btnFilterParticipants_clicked();
+
+ void on_btnFilterUsers_clicked();
+
+ void on_btnFilterDevices_clicked();
signals:
void dataDisplayRequest(TeraDataTypes data_type, QString data_uuid);
diff --git a/client/src/widgets/OnlineManagerWidget.ui b/client/src/widgets/OnlineManagerWidget.ui
index 5ffbc084..9c6bc09f 100644
--- a/client/src/widgets/OnlineManagerWidget.ui
+++ b/client/src/widgets/OnlineManagerWidget.ui
@@ -18,361 +18,222 @@
QLayout::SetMinAndMaxSize
-
-
-
-
- 0
- 0
-
-
-
-
- 2
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 24
- 24
-
-
-
-
- 24
- 24
-
-
-
-
-
-
- :/icons/patient_online.png
-
-
- true
-
-
-
- -
-
-
-
- 0
- 24
-
-
-
-
- 32
- 24
-
-
-
-
-
-
-
- 4
-
-
- 4
-
-
- 4
-
-
- 4
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 9
- 75
- true
-
-
-
- 0
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 24
-
-
-
- PointingHandCursor
-
-
- Participants en ligne
-
-
-
- :/controls/branch_closed.png
- :/controls/branch_opened.png:/controls/branch_closed.png
-
-
-
- 20
- 20
-
-
-
- true
-
-
-
-
-
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 9
+ 75
+ true
+
+
+
+ 0
+
+
+
+ -
+
+
+
+ 32
+ 32
+
+
+
+
+ 32
+ 32
+
+
+
+ PointingHandCursor
+
+
+ Filtrer appareils
+
+
+ ...
+
+
+
+ :/icons/device.png:/icons/device.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+ false
+
+
+
+ -
+
+
+
+ 32
+ 32
+
+
+
+
+ 32
+ 32
+
+
+
+ PointingHandCursor
+
+
+ Filtrer utilisateurs
+
+
+ ...
+
+
+
+ :/icons/software_user.png:/icons/software_user.png
+
+
+
+ 20
+ 20
+
+
+
+ true
+
+
+ true
+
+
+
+ -
+
+
+
+ 32
+ 32
+
+
+
+
+ 32
+ 32
+
+
+
+ PointingHandCursor
+
+
+ Filtrer participants
+
+
+ ...
+
+
+
+ :/icons/patient.png:/icons/patient.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+ true
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 9
+ 75
+ true
+
+
+
+ 0
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 9
+ 75
+ true
+
+
+
+ 0
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
-
-
-
-
- 0
- 0
-
-
-
-
- 0
- 0
-
-
-
- QAbstractScrollArea::AdjustToContents
-
-
- true
-
-
- QAbstractItemView::NoEditTriggers
-
-
- false
-
-
-
- 24
- 24
-
-
-
- QListView::Fixed
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 5
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 20
- 20
-
-
-
-
- 20
- 20
-
-
-
-
-
-
- :/icons/software_user_online.png
-
-
- true
-
-
-
- -
-
-
-
- 0
- 24
-
-
-
-
- 32
- 24
-
-
-
-
-
-
-
- 4
-
-
- 4
-
-
- 4
-
-
- 4
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 9
- 75
- true
-
-
-
- 0
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 24
-
-
-
- PointingHandCursor
-
-
- Utilisateurs en ligne
-
-
-
- :/controls/branch_closed.png
- :/controls/branch_opened.png:/controls/branch_closed.png
-
-
-
- 20
- 20
-
-
-
- true
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 0
-
-
-
- Qt::ScrollBarAsNeeded
-
-
- QAbstractScrollArea::AdjustToContents
-
-
- QAbstractItemView::NoEditTriggers
-
-
- false
+
+
+ QAbstractItemView::NoSelection
@@ -380,205 +241,21 @@
24
-
- QListView::Adjust
-
-
- QListView::SinglePass
-
-
- false
-
-
+
false
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 2
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
+
+
+
+ Items
- -
-
-
-
- 0
- 0
-
-
-
-
- 24
- 24
-
-
-
-
- 24
- 24
-
-
-
-
-
-
- :/icons/device_online.png
-
-
- true
-
-
-
- -
-
-
-
- 0
- 24
-
-
-
-
- 32
- 24
-
-
-
-
-
-
-
- 4
-
-
- 4
-
-
- 4
-
-
- 4
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 9
- 75
- true
-
-
-
- 0
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 24
-
-
-
- PointingHandCursor
-
-
- Appareils en ligne
-
-
-
- :/controls/branch_closed.png
- :/controls/branch_opened.png:/controls/branch_closed.png
-
-
-
- 20
- 20
-
-
-
- true
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 0
-
-
-
- QAbstractScrollArea::AdjustToContents
-
-
- QAbstractItemView::NoEditTriggers
-
-
- false
-
-
-
- 24
- 24
-
-
-
- QListView::Fixed
-
+
-
+
+
diff --git a/client/src/widgets/ProjectNavigator.cpp b/client/src/widgets/ProjectNavigator.cpp
index a8eea819..e37abc16 100644
--- a/client/src/widgets/ProjectNavigator.cpp
+++ b/client/src/widgets/ProjectNavigator.cpp
@@ -2,6 +2,7 @@
#include "GlobalMessageBox.h"
#include "ui_ProjectNavigator.h"
#include
+#include "TeraSettings.h"
ProjectNavigator::ProjectNavigator(QWidget *parent) :
@@ -20,6 +21,7 @@ ProjectNavigator::ProjectNavigator(QWidget *parent) :
m_currentParticipantUuid.clear();
m_selectionHold = false;
m_siteJustChanged = false;
+ m_sitesLoaded = false;
}
ProjectNavigator::~ProjectNavigator()
@@ -57,6 +59,10 @@ void ProjectNavigator::initUi()
new_action->setDisabled(true);
ui->btnNewItem->setMenu(m_newItemMenu);
+ // Load setting for filter inactive
+ bool filter = TeraSettings::getUsersetting(m_comManager->getCurrentUser().getUuid(), SETTINGS_UI_FILTERINACTIVE).toBool();
+ ui->btnFilterActive->setChecked(filter);
+
// Request sites
m_comManager->doQuery(WEB_SITEINFO_PATH, QUrlQuery(WEB_QUERY_LIST));
@@ -132,25 +138,35 @@ void ProjectNavigator::selectItem(const TeraDataTypes &data_type, const int &id)
return;
}
+ if (data_type == TERADATA_SITE){
+ for(int i=0; icmbSites->count(); i++){
+ if (ui->cmbSites->itemData(i).toInt() == id){
+ ui->cmbSites->setCurrentIndex(i);
+ m_currentSiteId = id;
+ return;
+ }
+ }
+ return;
+ }
+
}
bool ProjectNavigator::selectItemByName(const TeraDataTypes &data_type, const QString &name)
{
if (data_type == TERADATA_GROUP){
- for(int i=0; itext(0) == name){
- ui->treeNavigator->setCurrentItem(m_groups_items.values()[i]);
- currentNavItemChanged(m_groups_items.values()[i], nullptr);
+ foreach(QTreeWidgetItem* item, m_groups_items){
+ if (item->text(0) == name){
+ ui->treeNavigator->setCurrentItem(item);
+ currentNavItemChanged(item, nullptr);
return true;
}
}
}
if (data_type == TERADATA_PROJECT){
- for(int i=0; itext(0) == name){
- QTreeWidgetItem* item = m_projects_items.values()[i];
+ foreach(QTreeWidgetItem* item, m_projects_items){
+ if (item->text(0) == name){
ui->treeNavigator->setCurrentItem(item);
currentNavItemChanged(item, nullptr);
return true;
@@ -159,11 +175,11 @@ bool ProjectNavigator::selectItemByName(const TeraDataTypes &data_type, const QS
}
if (data_type == TERADATA_PARTICIPANT){
- for(int i=0; itext(0) == name){
- ui->treeNavigator->setCurrentItem(m_participants_items.values()[i]);
- currentNavItemChanged(m_participants_items.values()[i], nullptr);
- return true;
+ foreach(QTreeWidgetItem* item, m_participants_items){
+ if (item->text(0) == name){
+ ui->treeNavigator->setCurrentItem(item);
+ currentNavItemChanged(item, nullptr);
+ return true;
}
}
}
@@ -277,8 +293,8 @@ void ProjectNavigator::connectSignals()
connect(m_comManager->getWebSocketManager(), &WebSocketManager::participantEventReceived, this, &ProjectNavigator::ws_participantEvent);
- void (QComboBox::* comboIndexChangedSignal)(int) = &QComboBox::currentIndexChanged;
- connect(ui->cmbSites, comboIndexChangedSignal, this, &ProjectNavigator::currentSiteChanged);
+ //void (QComboBox::* comboIndexChangedSignal)(int) = &QComboBox::currentIndexChanged;
+ //connect(ui->cmbSites, comboIndexChangedSignal, this, &ProjectNavigator::currentSiteChanged);
connect(ui->btnEditSite, &QPushButton::clicked, this, &ProjectNavigator::btnEditSite_clicked);
//connect(ui->treeNavigator, &QTreeWidget::currentItemChanged, this, &ProjectNavigator::currentNavItemChanged);
connect(ui->treeNavigator, &QTreeWidget::itemExpanded, this, &ProjectNavigator::navItemExpanded);
@@ -565,8 +581,10 @@ int ProjectNavigator::getParticipantProjectId(QTreeWidgetItem *part_item)
while (current_item->parent()){
current_item = current_item->parent();
- if (m_projects_items.values().contains(current_item))
- return m_projects_items.key(current_item);
+ //if (m_projects_items.values().contains(current_item))
+ int current_key = m_projects_items.key(current_item, -1);
+ if (current_key>=0)
+ return current_key;
}
return -1;
@@ -578,8 +596,11 @@ int ProjectNavigator::getParticipantGroupId(QTreeWidgetItem *part_item)
while (current_item->parent()){
current_item = current_item->parent();
- if (m_groups_items.values().contains(current_item))
- return m_groups_items.key(current_item);
+ //if (m_groups_items.values().contains(current_item))
+ int current_key = m_groups_items.key(current_item, -1);
+ if (current_key>=0)
+ //return m_groups_items.key(current_item);
+ return current_key;
}
return -1;
}
@@ -655,15 +676,18 @@ void ProjectNavigator::updateAvailableActions(QTreeWidgetItem* current_item)
TeraDataTypes ProjectNavigator::getItemType(QTreeWidgetItem *item)
{
- if (m_projects_items.values().contains(item)){
+ //if (m_projects_items.values().contains(item)){
+ if (std::find(m_projects_items.cbegin(), m_projects_items.cend(), item) != m_projects_items.cend()){
return TERADATA_PROJECT;
}
- if (m_groups_items.values().contains(item)){
+ //if (m_groups_items.values().contains(item)){
+ if (std::find(m_groups_items.cbegin(), m_groups_items.cend(), item) != m_groups_items.cend()){
return TERADATA_GROUP;
}
- if (m_participants_items.values().contains(item)){
+ //if (m_participants_items.values().contains(item)){
+ if (std::find(m_participants_items.cbegin(), m_participants_items.cend(), item) != m_participants_items.cend()){
return TERADATA_PARTICIPANT;
}
@@ -756,10 +780,27 @@ void ProjectNavigator::processSitesReply(QList sites)
updateSite(&sites.at(i));
}
+
if (ui->cmbSites->count()==1){
// Select the only site in the list
ui->cmbSites->setCurrentIndex(0);
+ }else{
+ if (m_comManager){
+ if (m_sitesLoaded == false){ // Only select the last site on first connection
+ int lastSiteId = TeraSettings::getUsersetting(m_comManager->getCurrentUser().getUuid(), SETTINGS_LASTSITEID).toInt();
+ if (getCurrentSiteId() != lastSiteId){
+ selectItem(TERADATA_SITE, lastSiteId);
+ //m_siteJustChanged = true;
+ }
+ }
+ }
+ }
+ if (!m_sitesLoaded){
+ m_sitesLoaded = true;
+ currentSiteChanged(false);
}
+
+
}
void ProjectNavigator::processProjectsReply(QList projects)
@@ -838,14 +879,25 @@ void ProjectNavigator::processCurrentUserUpdated()
updateAvailableActions(ui->treeNavigator->currentItem());
}
-void ProjectNavigator::currentSiteChanged()
+void ProjectNavigator::currentSiteChanged(bool requestDisplay)
{
+
+ if (!m_sitesLoaded)
+ return;
+
m_currentSiteId = ui->cmbSites->currentData().toInt();
+
+ // Save last site in settings
+ if (m_comManager){
+ TeraSettings::setUserSetting(m_comManager->getCurrentUser().getUuid(), SETTINGS_LASTSITEID, m_currentSiteId);
+ }
+
m_siteJustChanged = true;
- //qDebug() << "Current Site Changed";
+ //qDebug() << "Current Site Changed " << m_currentSiteId;
// Display site
- emit dataDisplayRequest(TERADATA_SITE, m_currentSiteId);
+ if (requestDisplay)
+ emit dataDisplayRequest(TERADATA_SITE, m_currentSiteId);
// Clear all data
clearData(true);
@@ -921,7 +973,7 @@ void ProjectNavigator::navItemClicked(QTreeWidgetItem *item)
void ProjectNavigator::navItemExpanded(QTreeWidgetItem *item)
{
// PROJECT
- if (m_projects_items.values().contains(item)){
+ if (std::find(m_projects_items.cbegin(), m_projects_items.cend(), item) != m_projects_items.cend()){
// Project: load groups for that project
int id = m_projects_items.key(item);
@@ -940,7 +992,7 @@ void ProjectNavigator::navItemExpanded(QTreeWidgetItem *item)
}
// PARTICIPANT GROUP
- if (m_groups_items.values().contains(item)){
+ if (std::find(m_groups_items.cbegin(), m_groups_items.cend(), item) != m_groups_items.cend()){
// We have a participants group
int id = m_groups_items.key(item);
@@ -961,15 +1013,17 @@ void ProjectNavigator::btnEditSite_clicked()
void ProjectNavigator::on_btnFilterActive_toggled(bool checked)
{
- Q_UNUSED(checked)
- for (int i=0; isetHidden(filtered);
}
}
+ // Save new setting
+ TeraSettings::setUserSetting(m_comManager->getCurrentUser().getUuid(), SETTINGS_UI_FILTERINACTIVE, checked);
+
}
void ProjectNavigator::on_btnSearch_toggled(bool checked)
@@ -990,3 +1044,10 @@ void ProjectNavigator::on_txtNavSearch_textChanged(const QString &search_text)
item->setHidden(isParticipantFiltered(part_uuid));
}
}
+
+void ProjectNavigator::on_cmbSites_currentIndexChanged(int index)
+{
+ Q_UNUSED(index)
+ currentSiteChanged();
+}
+
diff --git a/client/src/widgets/ProjectNavigator.h b/client/src/widgets/ProjectNavigator.h
index 65fb6c80..65c706b7 100644
--- a/client/src/widgets/ProjectNavigator.h
+++ b/client/src/widgets/ProjectNavigator.h
@@ -53,6 +53,7 @@ class ProjectNavigator : public QWidget
bool m_selectionHold;
bool m_siteJustChanged;
+ bool m_sitesLoaded;
QMap m_projects_items;
QMap m_groups_items;
@@ -101,7 +102,7 @@ private slots:
void processCurrentUserUpdated();
- void currentSiteChanged();
+ void currentSiteChanged(bool requestDisplay=true);
void currentNavItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous);
void navItemClicked(QTreeWidgetItem* item);
void navItemExpanded(QTreeWidgetItem* item);
@@ -113,6 +114,8 @@ private slots:
void on_txtNavSearch_textChanged(const QString &search_text);
+ void on_cmbSites_currentIndexChanged(int index);
+
signals:
void dataDisplayRequest(TeraDataTypes data_type, int data_id);
void dataDeleteRequest(TeraDataTypes data_type, int data_id);
diff --git a/client/src/widgets/SessionInviteWidget.cpp b/client/src/widgets/SessionInviteWidget.cpp
index 0b4bf069..a517c331 100644
--- a/client/src/widgets/SessionInviteWidget.cpp
+++ b/client/src/widgets/SessionInviteWidget.cpp
@@ -358,8 +358,11 @@ void SessionInviteWidget::setConfirmOnRemove(const bool &confirm)
QList SessionInviteWidget::getParticipantsInSession()
{
QList rval;
- foreach(int id, m_participantsInSession.keys()){
+ /*foreach(int id, m_participantsInSession.keys()){
rval.append(m_participants[id]);
+ }*/
+ foreach(QTreeWidgetItem* item, m_participantsInSession){
+ rval.append(m_participants[m_participantsInSession.key(item)]);
}
return rval;
}
@@ -367,18 +370,24 @@ QList SessionInviteWidget::getParticipantsInSession()
QList SessionInviteWidget::getUsersInSession()
{
QList rval;
- foreach(int id, m_usersInSession.keys()){
+ /*foreach(int id, m_usersInSession.keys()){
rval.append(m_users[id]);
- }
+ }*/
+ foreach(QTreeWidgetItem* item, m_usersInSession){
+ rval.append(m_users[m_usersInSession.key(item)]);
+ }
return rval;
}
QList SessionInviteWidget::getDevicesInSession()
{
QList rval;
- foreach(int id, m_devicesInSession.keys()){
+ /*foreach(int id, m_devicesInSession.keys()){
rval.append(m_devices[id]);
- }
+ }*/
+ foreach(QTreeWidgetItem* item, m_devicesInSession){
+ rval.append(m_devices[m_devicesInSession.key(item)]);
+ }
return rval;
}
@@ -459,6 +468,12 @@ void SessionInviteWidget::selectDefaultFilter()
updateFilters();
}
+void SessionInviteWidget::showAvailableInvitees(const bool &show)
+{
+ ui->btnManageInvitees->setChecked(show);
+ on_btnManageInvitees_clicked();
+}
+
void SessionInviteWidget::ws_userEvent(UserEvent event)
{
QString uuid = QString::fromStdString(event.user_uuid());
@@ -590,26 +605,26 @@ void SessionInviteWidget::connectSignals()
void SessionInviteWidget::updateItem(const TeraData &item)
{
// Get pointers to correct structures depending on item type
- QHash* item_data;
+ //QHash* item_data;
QHash* item_availables;
QHash* item_invitees;
QTreeWidgetItem* base_tree_item;
QList* item_required;
if (item.getDataType() == TERADATA_PARTICIPANT){
- item_data = &m_participants;
+ //item_data = &m_participants;
item_availables = &m_participantsItems;
item_invitees = &m_participantsInSession;
item_required = &m_requiredParticipants;
base_tree_item = ui->treeInvitees->topLevelItem(0);
}else if(item.getDataType() == TERADATA_USER){
- item_data = &m_users;
+ //item_data = &m_users;
item_availables = &m_usersItems;
item_invitees = &m_usersInSession;
item_required = &m_requiredUsers;
base_tree_item = ui->treeInvitees->topLevelItem(1);
}else if(item.getDataType() == TERADATA_DEVICE){
- item_data = &m_devices;
+ //item_data = &m_devices;
item_availables = &m_devicesItems;
item_invitees = &m_devicesInSession;
item_required = &m_requiredDevices;
@@ -720,12 +735,17 @@ TeraData *SessionInviteWidget::getUserFromUuid(const QString &uuid)
{
TeraData* data = nullptr;
- for (int i=0; i &participants);
void setAvailableUsers(const QList &users);
diff --git a/client/src/widgets/SessionInviteWidget.ui b/client/src/widgets/SessionInviteWidget.ui
index f4076b29..a6592237 100644
--- a/client/src/widgets/SessionInviteWidget.ui
+++ b/client/src/widgets/SessionInviteWidget.ui
@@ -127,7 +127,7 @@
PointingHandCursor
- Utilisateurs
+ Filtrer Utilisateurs
...
@@ -162,7 +162,7 @@
PointingHandCursor
- Appareils
+ Filtrer Appareils
...
@@ -477,6 +477,7 @@
+
diff --git a/shared/src/Utils.h b/shared/src/Utils.h
index 80964fe3..d4208a79 100644
--- a/shared/src/Utils.h
+++ b/shared/src/Utils.h
@@ -36,6 +36,7 @@ class Utils : public QObject
static QString removeAccents(QString s);
static bool isNewerVersion(QString version);
+
signals:
};
diff --git a/shared/src/data/TeraData.cpp b/shared/src/data/TeraData.cpp
index 9ec95128..2634612f 100644
--- a/shared/src/data/TeraData.cpp
+++ b/shared/src/data/TeraData.cpp
@@ -467,7 +467,7 @@ QString TeraData::getIconStateFilename() const
return "://icons/device_online.png";
if (isEnabled())
return "://icons/device_installed.png";
- return "://icons/device_offline.png";
+ return "://icons/device.png";
case TERADATA_PARTICIPANT:
case TERADATA_ONLINE_PARTICIPANT:
diff --git a/shared/src/data/TeraSettings.h b/shared/src/data/TeraSettings.h
index 74dc31cf..aacbe5fc 100644
--- a/shared/src/data/TeraSettings.h
+++ b/shared/src/data/TeraSettings.h
@@ -3,6 +3,12 @@
#include
+#define SETTINGS_UI_FILTERINACTIVE "ui_filterInactives"
+#define SETTINGS_UI_ONLINEFILTERPARTICIPANTS "ui_filterOnlineParticipants"
+#define SETTINGS_UI_ONLINEFILTERUSERS "ui_filterOnlineUsers"
+#define SETTINGS_UI_ONLINEFILTERDEVICES "ui_filterOnlineDevices"
+#define SETTINGS_LASTSITEID "lastSiteId"
+
class TeraSettings
{
public: