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 - + À propos d'OpenTera... About OpenTera... - + À propos d'OpenTeraPlus... About OpenTeraPlus... - + Merci! Thanks! @@ -22,12 +22,12 @@ BaseDialog - + Dialog Dialogue - + Fermer Close @@ -209,7 +209,7 @@ Unknown error - + Form Form @@ -255,34 +255,34 @@ Are you sure you want to delete - + Form Form - + Seuls les ... ayant un lien avec ce ... sont présentement affichés. Only ... with a link with ... are displayed. - + Filtrer Filter - + Tout voir See All - + Recherche... Search... - - - + + + ... ... @@ -290,32 +290,32 @@ DeviceAssignDialog - + Assignation d'un appareil Assign device - + L'appareil est présentement assigné au(x) participant(s) suivant(s): The device is currently assigned to the following participant(s): - + <html><head/><body><p>Souhaitez-vous <span style=" font-weight:600;">désassocier</span> cet appareil de ces participants avant de l'ajouter au participant actuel ou souhaitez-vous <span style=" font-weight:600;">ajouter</span> un participant supplémentaire à cet appareil?</p></body></html> <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> - + Déassocier puis ajouter Unlink then add - + Ajouter sans désassocier Add without unlinking - + Annuler Cancel @@ -323,42 +323,42 @@ DeviceSubTypeWidget - + Form Form - + Sous-type appareil Device Sub-Type - + Éditer Edit - + Sauvegarder Save - + Annuler Cancel - + Résumé Summary - + Appareils Devices - + Détails Details @@ -366,43 +366,43 @@ DeviceTypeWidget - + Form Formulaire Form - + Type Appareil Device Type - + Éditer Edit - + Sauvegarder Save - + Annuler Cancel - + Résumé Summary - + Appareils Devices - + Détails 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 Form - + Appareil Device - + Éditer Edit - + Sauvegarder Save - + Annuler Cancel - + Informations Informations - + Mettre à jour les projets associés à cet appareil Updated projects associated to this device - + Sites / Projets Sites / Projects - + Retirer cet appareil de ce participant Remove this device from the participant - + Participants Participants - + Configuration Configuration @@ -497,27 +497,27 @@ If the device is currently deployed, the data will not be collected anymore and DownloadProgressDialog - + Téléchargements Downloads - + Téléchargements en cours Downloading - + Progression Progression - + Fichier File - + Annuler Cancel @@ -568,27 +568,27 @@ If the device is currently deployed, the data will not be collected anymore and Invite - New session via OpenTeraPlus - + Invitation par courriel Email invitation - + Pour le moment, aucun courriel automatisé n'est envoyé par le système. Vous êtes responsable d'envoyer ce courriel. At the moment, no automated emails are sent by the system. It is your responsability to send the email to the participants. - + Destinataire: To: - + Aucun courriel spécifié. No email specified. - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -621,17 +621,17 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">{username}</span></p></body></html> - + Copier Copy - + Envoyer (local) Send (local) - + Fermer Close @@ -639,32 +639,32 @@ p, li { white-space: pre-wrap; } GeneratePasswordDialog - + Générateur de mot de passe Password generator - + Mot de passe Password - + Générer Generate - + Copier Copy - + Appliquer Apply - + Annuler Cancel @@ -746,77 +746,77 @@ ou réalisées or done - + Form Form - + Groupe participant Participant Group - + Éditer Edit - + Sauvegarder Save - + Annuler Cancel - + XXXX Séances XXXX Sessions - + XXXX Participants XXXX Participants - + Participant Participant - + État State - + Séances Sessions - + Première séance First Session - + Dernière connexion Last connection - + Dernière séance Last session - + Résumé Summary - + Tableau de bord Dashboard @@ -839,73 +839,73 @@ or done The operation did not succeed. Please try again. - + Terminer la séance? Terminate session? - + Mettre fin à la séance? Terminate session? - + Arrêt de la séance en cours... Stopping session... - + En attente de démarrage de séance... Waiting for the session to start... - + Déjà en séance Already in session - + vous a invité dans une séance, mais nous avons refusé l'invitation pour vous. You are invited to a session, but we denied the invitation for you. - + n'a pas répondu à did not respond to - + a refusé refused - + est occupé et ne peut répondre à is busy and cannot answer to - + l'invitation. the invitation. - + Raison: Reason: - + Service non-supporté Unsupported service - + Le service " The service " - - + + " n'est pas gérée par cette version du logiciel. Veuillez vérifier si une mise à jour existe ou contribuez au développement du logiciel! @@ -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! - + Catégorie de séance non-supportée Session category is not supported - + La catégorie de séance " The session category " - + Quitter la séance? Quit session? - + Désirez-vous quitter la séance? Do you want to qui the session? - + Form Form - + Gestion Admin - + Quitter Quit - + Terminer Close - + Inivités Attendees @@ -974,22 +974,22 @@ Please update the software or contribute to the development! Participants - + Paramètres - séance Session - Parameters - + Paramètres Parameters - + Séance inconnue Unknown session - + 00:00:00 00:00:00 @@ -1011,37 +1011,37 @@ Please update the software or contribute to the development! Dialogue - + Invitation à rejoindre une séance Join session invitation - + Invitation Invitation - + XXXX vous invite à rejoindre une séance. XXXX invites you to join the session. - + L'invitation comporte le message suivant: The invitation contains the following message: - + Joindre la séance Join session - + Refuser de joindre la séance Refuse to join session - + Désolé, je suis occupé! 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 OpenTeraPlus - Kit - Configuration - + Chargement en cours... Loading... - + Fermer Close - + Groupe Group - + Projet Project - + Site Site - + Service Service - + Associer ce participant à ce kit Assign this participant to this kit - + Désassocier le participant actuel Unassign current participant - + Participant Participant - + Support technique? Technical support? - + Logiciel à lancer lors de l'activation du support technique Software to launch in technical support session - + Parcourir... Browse... - + Sauvegarder Save - + Configuration matérielle 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 OpenTeraPlus - + Éteindre Close @@ -1264,27 +1264,27 @@ Please update the software or contribute to the development! Error - + Form Form - + Titre Title - + (Erreur) (Error) - + Réessayer Retry - + Démarrage en cours... Starting... @@ -1303,37 +1303,37 @@ Please update the software or contribute to the development! - + Connexion en cours... Connecting... - + OpenTeraPlus - Login OpenTeraPlus -- Login - + Mot de passe Password - + Serveur Server - + Code utilisateur Username - + Connecter Connect - + Quitter Quit @@ -1440,52 +1440,52 @@ Please update the software or contribute to the development! Stop support - + Support technique Technical support - + OpenTeraPlus - Kit OpenTeraPlus - Kit - + Exit Exit - + Aucun participant sélectionné No selected participant - + Allumer Turn on - + Erreur Error - + Redémarrer Reboot - + Le support technique est activé Technical support is enabled - + Support Technique Technical support - + (Version) (Version) @@ -1493,54 +1493,54 @@ Please update the software or contribute to the development! MainWindow - + Erreur HTTP HTTP Error - + Erreur Error - + Suppression impossible Cannot delete - + Données sauvegardées. Data saved. - + - mise à jour... - updating... - + Récupération de Retreiving - + - suppression... - deleting... - + Erreur de séance Session error - + Une erreur est survenue: The following error occured: - + La séance ne peut pas continuer. @@ -1549,115 +1549,115 @@ La séance ne peut pas continuer. The session cannot continue. - - + + est en ligne. is online. - - + + est hors-ligne. is offline. - + Erreur de serveur. Server error. - - - + + + Déconnexion Disconnect - + Vous serez déconnecté du logiciel. Toute donnée non enregistrée sera perdue. You'll be logged out. Unsaved data will be lost. - + Souhaitez-vous continuer? Do you want to continue? - + Votre compte You Account - + Configuration Globale Global Configuration - + Détails Details - + Changement de langue Change language - + En ligne ( Online ( - + La langue a été modifiée. Souhaitez-vous vous déconnecter pour appliquer les changements? The language has been modified. Would you like to disconnect to apply the changes? - + OpenTeraPlus OpenTeraPlus - + (Message) (Message) - - + + ... ... - + 0.1 0.1 - + Nom Utilisateur User Name - - + + Historique History - + Profil Profile - + Admin Admin - + Navigateur Browser @@ -1670,32 +1670,32 @@ Would you like to disconnect to apply the changes? Users - + En ligne Online - + Nom participant... Participant name... - + Cette fonctionnalité n'est pas encore disponible! This feature is not available yet! - + Recherche Search - + Heure Time - + Événement Event @@ -1707,22 +1707,22 @@ Would you like to disconnect to apply the changes? OpenTera Notification - + OpenTeraPlus Notification OpenTeraPlus Notification - + (Texte de la notification) (Notification text) - + Oui Yes - + Non No @@ -1730,131 +1730,170 @@ Would you like to disconnect to apply the changes? OnlineManagerWidget - + Form Form - - - + + + 0 0 - + + Filtrer appareils + Filter devices + + + + + + ... + ... + + + + Filtrer utilisateurs + Filter users + + + + Filtrer participants + Filter Participants + + + + Items + Items + + Participants en ligne - Online Participants + Online Participants - Utilisateurs en ligne - Online Users + Online Users - Appareils en ligne - Online Devices + Online Devices + + + + Participants + Participants + + + + Utilisateurs + Users + + + + Appareils + Devices ParticipantWidget - + Ouvrir Open - - + + Supprimer Delete - + Télécharger les données Download data - + Continuer la séance Continue session - + Appareil: Device: - + Participant: Participant: - + Service: Service: - + Inconnu Unknown - + Téléchargement Download - + Téléchargement terminé: Download completed: - - + + Suppression? Delete? - + Êtes-vous sûrs de vouloir supprimer Are you sure you want to delete - + Êtes-vous sûrs de vouloir supprimer toutes les séances sélectionnées? Are you sure you want to delete all selected sessions ? - + Déassignation? Unassign? - + Êtes-vous sûrs de vouloir désassigner Are you sure you want to unassign - - + + Sélectionnez un dossier pour le téléchargement Please select a download folder - - + + Séance Session - + Confirmation Confirmation - + En désactivant l'accès web, le lien sera supprimé. Si un accès est à nouveau créé, le lien sera différent et il faudra envoyer à nouveau le lien au participant. @@ -1871,57 +1910,56 @@ Do you want to continue? Password generated - + Code utilisateur manquant<br/> Username missing<br/> - Les mots de passe ne correspondent pas. - Passwords do not match. + Passwords do not match. - + Aucun mot de passe spécifié. No specified password. - + Informations manquantes Missing information - + Les informations suivantes sont incorrectes: The following information is missing: - + existe déjà. already exists. - + a été réalisée récemment et n'a pas été terminée. has been realised lately but not finished. - + a été planifiée. has been planned. - + Reprendre une séance? Resume session? - + Un séance de ce type, A session of the type, - + Souhaitez-vous continuer cette séance? @@ -1930,223 +1968,222 @@ Souhaitez-vous continuer cette séance? Would you like to continue this session? - + Form Form - + Participant Participant - + Actif Active - + Accès via lien web Web link - + Aucun lien n'a été généré No weblink generated - - + + Copier le lien Copy link - - - - - - - + + + + + + ... ... - + Envoyer par courriel Send via email - + Envoyer le lien par courriel Send by email - + Afficher le lien Show link - + Accès via identification Username/password login - - + + Code utilisateur Username - - + + Mot de passe Password - + Générer mot de passe aléatoire Generate random password - Confirmation mot de passe - Confirm password + Confirm password - - + + + Sauvegarder Save - - + + Informations Informations - + Mois 1 Month 1 - + Mois 2 Month 2 - + Mois 3 Month 3 - + Tout cocher Select All - + Tout décocher Deselect All - + Date Date - + Type Type - + État State - + Durée Duration - + Responsable Owner - + Actions Actions - + Séances Sessions - + Tableau de bord Dashboard - + Éditer Edit - + Annuler Cancel - + Configuration Configuration - + Détails Details - + Appareil(s) assigné(s) Assigned Device(s) - + <<< Ajouter <<< Add - + Retirer >>> Remove >>> - + Appareils disponibles Available devices - + Appareils Devices - + Nouvelle Séance New Session - + Filtrer les séances Filter sessions - + Tout télécharger Download All @@ -2154,48 +2191,48 @@ Would you like to continue this session? PasswordStrengthDialog - - + + Mot de passe Password - + Confirmation Confirmation - + Longueur minimale de 10 caractères Minimal length: 10 characters - + Au moins une lettre minuscule At least one lowercase letter - + Au moins une lettre majuscule At least one uppercase letter - + Au moins un chiffre At least one digit - + Au moins un caractère spécial At least one special character - + Appliquer Apply - + Annuler Cancel @@ -2203,82 +2240,109 @@ Would you like to continue this session? ProjectNavigator - + Projet Project - + Groupe Group - + Participant Participant - + Suppression? Delete? - + Êtes-vous sûrs de vouloir supprimer Are you sure you want to delete - + Form Form - + + + ... ... + + + Recherche... + Find... + + + + Nouveau + New + + + + Supprimer + Delete + + + + Afficher / masquer les participants inactifs + Show / hide inactive participants + + + + Rafraichir + Refresh + ProjectWidget - + Aucun None - + (Appareil sans nom) (Device without a name) - + Utilisateurs Users - + Groupes participants Participants Groups - + Participants Participants - + Participants actifs Active Participants - + Séances planifiées ou réalisées Planned sessions or done - + Seuls les groupes utilisateurs ayant un accès au projet sont affichés. Only user groups with access to this project are displayed. @@ -2289,97 +2353,97 @@ ou réalisées or done - + Actif Active - + Inactif Inactive - + Appareils Devices - + Seuls les types de séance associés au projet sont affichés. Only associated project's session types are displayed. - + Form Form - + Projet Project - + Éditer Edit - + Sauvegarder Save - + Annuler Cancel - + XXXX Séances XXXX Sessions - + XXXX Groupes XXXX Groups - + XXXX Participants XXXX Participants - + XXXX Utilisateurs XXXX Users - + Participant Participant - + État State - + Séances Sessions - + Première séance First Session - + Dernière séance Last Session - + Gérer les groupes utilisateurs Manage Users Groups @@ -2392,89 +2456,89 @@ or done Manage Services - + Dernière connexion Last connection - + Résumé Summary - + Tableau de bord Dashboard - + Utilisateur User - - + + Rôle Role - + Utilisateurs Users - + Groupe Utilisateur User Group - + Appareil Device - + Participant(s) Participant(s) - + La modification des accès est désactivée pour les groupes utilisateurs dont l'accès au projet provient du site (i.e. administrateurs du site associé au projet) Access modification is disabled for users groups which project access is specified in the site (i.e. project's administrators) - + Mettre à jour les rôles Update roles - - + + Groupes Utilisateurs Users Groups - + Groupes Participants Participants Groups - + Types de séance Session Type - + Mettre à jour les services associés Updated associated services - + Services Services - + Détails Details @@ -2513,7 +2577,7 @@ or done ServiceConfigWidget - + Configuration - Service Configuration - Service @@ -2522,7 +2586,7 @@ or done Device Sub-Type - + Configuration Configuration @@ -2531,17 +2595,17 @@ or done Edit - + Configuration: Configuration: - + Sauvegarder Save - + Annuler Cancel @@ -2607,63 +2671,63 @@ or done Edit Role - + Form Form - + Service Service - + Attention! Ces paramètres sont pour des utilisateurs avancés - modifiez à vos propres risques! Warning! Those parameters are for advanced users - change at your own risks! - - + + Éditer Edit - + Sauvegarder Save - + Annuler Cancel - + Informations Informations - + Mettre à jour les projets associés Update associated projects - + Projets Projects - + Nouveau Rôle New Role - + Supprimer Delete - + Rôles Roles @@ -2675,97 +2739,105 @@ or done Form - + Filtrer participants Filter Participants - - - - + + + + ... ... - - + Utilisateurs Users - + Invitations à la séance Session's invitations - - + Appareils Devices - + Ajouter des invités à la séance Add attendees to the session - + Éléments disponibles Available elements - + + Filtrer Utilisateurs + Filter Users + + + + Filtrer Appareils + Filter Devices + + + En ligne / Hors ligne Online / Offline - + Recherche... Search... - + Inviter Invite - + Invités dans la séance Invited to the session - + 1 1 - + Participants Participants - + Retirer de la séance Remove from session - + Nombre d'invités atteint Maximum attendees reached - + Impossible d'ajouter ces invités à la séance: le nombre maximal de participants (5) serait dépassé Cannot add more than five (5) participants - + Confirmation Confirmation - + Êtes-vous sûrs de vouloir retirer les invités sélectionnés de la séance? Are you sure you want to remove selected attendees from the session? @@ -2777,22 +2849,22 @@ or done Dialog - + Vestibule Lobby - + (Type de séance) (Session Type) - + Démarrer la séance Start Session - + Annuler Cancel @@ -2817,52 +2889,52 @@ Vous devez associer au moins un projet. You should associate at least one project. - + Form Form - + Type de séance Session Type - + Éditer Edit - + Sauvegarder Save - + Annuler Cancel - + Résumé Summary - + Mettre à jour les projets de ce type de séance Update projects with this session type - + Projets Projects - + Mettre à jour la configuration Update configuration - + Paramètres Settings @@ -2935,159 +3007,159 @@ You should associate at least one project. Are you sure you want to delete the data - + Form Form - + Séance Session - + État de la séance Session Status - + Éditer Edit - + Sauvegarder Save - + Annuler Cancel - + XXXX Évaluations XXXX Tests - + XXX Appareils XXXX Devices - + XXXX Participants XXXX Participants - + XXXX Utilisateurs XXXX Users - + XXXX Données XXXX Data - + XXXX Événements XXXX Events - - + + Résumé Summary - - + + Participants Participants - + Utilisateurs Users - + Appareils Devices - + Appareil Device - + Date Date - + Donnée Data - + Taille Size - + Action Action - + Tout télécharger Download All - + Supprimer Delete - + Données Data - + Évaluations Evaluations - + Type Type - + Date / Heure Date / Hour - + Contexte Context - + Description Description - + Événements Events - + Détails Details @@ -3138,7 +3210,7 @@ realized sessions - + Projets Projects @@ -3163,62 +3235,62 @@ realized sessions Users Groups - + Form Form - + Site Site - + Éditer Edit - + Sauvegarder Save - + Annuler Cancel - + XXXX Groupes XXXX Groups - + XXX Appareils XXXX Devices - + XXXX Projets XXXX Projects - + XXXX Utilisateurs XXXX Users - + XXXX Séances XXXX Sessions - + XXXX Participants XXXX Participants - + Mettre à jour les rôles des groupes utilisateurs Update user groups access @@ -3227,7 +3299,7 @@ realized sessions Manage users - + Gérer les groupes utilisateurs Manage users groups @@ -3240,37 +3312,37 @@ realized sessions Manage devices - + Résumé Summary - + Tableau de bord Dashboard - + Utilisateurs Users - + <html><head/><body><p>Il n'est pas possible de spécifier &quot;Aucun rôle&quot; aux groupes utilisateurs qui ont au moins un accès (Administrateur ou Utilisateur) à un projet du groupe.</p></body></html> <html><head/><body><p>You cannot specify &quot;Any Role&quot; to users groups that have (Administrator or User) access to a project.</p></body></html> - + Groupe utilisateur User Group - + Rôle Role - + Hérité? Inherited? @@ -3279,17 +3351,17 @@ realized sessions Update users roles - + Groupes utilisateurs Users Groups - + Appareils Devices - + Détails Details @@ -3301,22 +3373,22 @@ realized sessions Dialog - + Démarrage de séance... Starting session... - + 10 10 - + Démarrage de la séance en cours... Starting session... - + Annuler Cancel @@ -3324,17 +3396,17 @@ realized sessions TeraForm - + Choisir la couleur Chose a color - + Form Form - + Ce formulaire ne contient aucune information. This form does not contain any information. @@ -3347,90 +3419,90 @@ realized sessions UserGroupWidget - + Accès - Sites Access - Sites - + Accès - Projets Access - Projects - + Form Form - + Groupe utilisateur User group - + Éditer Edit - + Sauvegarder Save - + Annuler Cancel - + Informations Informations - + <html><head/><body><p>Il n'est pas possible de spécifier &quot;Aucun rôle&quot; aux groupes utilisateurs qui ont au moins un accès (Administrateur ou Utilisateur) à un projet du groupe.</p><p>Vous ne pouvez pas spécifier un rôle pour les sites dont vous n'est pas Administrateur.</p></body></html> <html><head/><body><p>It is not possible to specify &quot;Any role&quot; 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 Site - - + + Rôle Role - + Mettre à jour les rôles des sites Update sites' roles - + <html><head/><body><p>Vous ne pouvez pas spécifier un rôle pour les projets dont vous n'est pas Administrateur.</p></body></html> <html><head/><body><p>You cannot specify a role for a project which you are not Administrator.</p></body></html> - + Projet Project - + Mettre à jour les rôles des projets Update projects' roles - + Mettre à jour les utilisateurs membres de ce groupe Update users members of the group - + Utilisateurs Users @@ -3443,72 +3515,72 @@ realized sessions N/A - + Form Form - + Utilisateur User - + Nouvelle Séance New Session - + Général General - + (Dernière connexion) (Last connection) - + (Nom complet) (Complete name) - + Dernière connexion: Last connection: - + Nom: Name: - + Actif Active - + Contact Contact - + Courriel: Email: - + (Courriel) (Email) - + Éditer Edit - + Informations Information @@ -3520,125 +3592,137 @@ realized sessions Field user_profile can't be set. - + Groupes utilisateurs User's groups - + Langue de l'interface Application language - + Français French - + Anglais English - + Sons lors des notifications Notification sounds - + Attention Warning - + Aucun groupe utilisateur n'a été spécifié. Vous devez spécifier au moins un groupe utilisateur You should specify at least one user group - - + + Utilisateur User - + Éditer Edit - + Générer mot de passe aléatoire Generate random password - + Sauvegarder Save - + Annuler Cancel - + Informations Informations - + Cet utilisateur est un super administrateur. Il est donc impossible de lui assigner des groupes utiilsateurs. This user is a superuser. It is not possible to assign a user group. - + Mettre à jour les groupes de cet utilisateur Update this user groups - + Groupes Groups - + Rôles effectifs Effective roles - + + Sites + Sites + + + + Site Site - + + Projets + Projects + + + Projet Project - + + Rôle Role - + Rôles Roles - + Mettre à jour les préférences Update Preferences - - + + Préférences Preferences - + Configuration Configuration @@ -3658,53 +3742,53 @@ Vous devez spécifier au moins un groupe utilisateur VideoRehabPTZDialog - + Configuration Caméra PTZ PTZ Camera Settings - + Type de contrôle: Control type: - - + + admin admin - + Vivotek Vivotek - + Adresse (URL): Address (URL): - + Utilisateur: User: - + Mot de passe: Password: - + Port: Port: - + Appliquer Apply - + Annuler Cancel @@ -3716,37 +3800,37 @@ Vous devez spécifier au moins un groupe utilisateur Form - + VideoRehabSetup VideoRehabSetup - + Titre Title - + (Erreur) (Error) - + Réessayer Retry - + Chargement en cours... Loading... - + Définir par défaut Define as default - + Configuration avancée Advanced Configuration @@ -3810,67 +3894,67 @@ Vous devez spécifier au moins un groupe utilisateur VideoRehabToolsWidget - + Form Form - + Reconnecter Reconnect - + Enregistrement en cours Recording - + Un enregistrement de la séance est en cours. A recording of the session is in progress. - + Si vous continuez, l'enregistrement pourrait être perdu. If you continue, the recording might be lost. - + Êtes-vous sûrs de vouloir continuer? Do you want to continue? - - + + Enregistrer Save - + Vous vous apprêtez à enregistrer localement une séance vidéo. You are about to locally record a video session. - + En acceptant de poursuivre avec cet enregistrement, vous acceptez la responsabilité professionnelle, légale et éthique en lien avec la conservation, la diffusion, l'utilisation et la confidentialité requise avec ce type de média. 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. - + Souhaitez-vous toujours activer l'enregistrement vidéo? Do you still want to start video recording? - + Confirmation requise Required confirmation - + Arrêter l'enregistrement Stop recording @@ -3878,58 +3962,58 @@ Vous devez spécifier au moins un groupe utilisateur VideoRehabVirtualCamSetupDialog - + Configuration - Caméra virtuelle Virtual camera - Configuration - + Configuration assistée? Configuration wizard? - + Source de la caméra Camera source - + Utilisateur: User: - + Type de source: Source type: - + Adresse (URL): Address (URL): - + Vivotek Vivotek - - + + admin admin - + Mot de passe: Password: - + Appliquer Apply - + Annuler Cancel @@ -3937,27 +4021,27 @@ Vous devez spécifier au moins un groupe utilisateur VideoRehabWidget - + Form Form - + Titre Title - + (Erreur) (Error) - + Réessayer Retry - + Établissement de la connexion... Connecting... @@ -3966,37 +4050,37 @@ Vous devez spécifier au moins un groupe utilisateur Unable to load camera preview page - + Fichier disponible File available - + Le fichier File - + est disponible dans le répertoire is available in the folder - + Impossible de charger la page Unable to load page - + Problème vidéo Video Problem - + Problème audio Audio Problem - + Erreur 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 - + À propos d'OpenTera... - + À propos d'OpenTeraPlus... - + Merci! @@ -22,12 +22,12 @@ BaseDialog - + Dialog - + Fermer @@ -205,7 +205,7 @@ - + Form @@ -251,34 +251,34 @@ - + Form - + Seuls les ... ayant un lien avec ce ... sont présentement affichés. - + Filtrer - + Tout voir - + Recherche... - - - + + + ... @@ -286,32 +286,32 @@ DeviceAssignDialog - + Assignation d'un appareil - + L'appareil est présentement assigné au(x) participant(s) suivant(s): - + <html><head/><body><p>Souhaitez-vous <span style=" font-weight:600;">désassocier</span> cet appareil de ces participants avant de l'ajouter au participant actuel ou souhaitez-vous <span style=" font-weight:600;">ajouter</span> un participant supplémentaire à cet appareil?</p></body></html> - + Déassocier puis ajouter - + Ajouter sans désassocier - + Annuler @@ -319,42 +319,42 @@ DeviceSubTypeWidget - + Form - + Sous-type appareil - + Éditer - + Sauvegarder - + Annuler - + Résumé - + Appareils - + Détails @@ -362,42 +362,42 @@ DeviceTypeWidget - + Form - + Type Appareil - + Éditer - + Sauvegarder - + Annuler - + Résumé - + Appareils - + Détails @@ -432,57 +432,57 @@ Si l'appareil est présentement déployé, les données ne seront plus coll - + Form - + Appareil - + Éditer - + Sauvegarder - + Annuler - + Informations - + Mettre à jour les projets associés à cet appareil - + Sites / Projets - + Retirer cet appareil de ce participant - + Participants - + Configuration @@ -490,27 +490,27 @@ Si l'appareil est présentement déployé, les données ne seront plus coll DownloadProgressDialog - + Téléchargements - + Téléchargements en cours - + Progression - + Fichier - + Annuler @@ -561,27 +561,27 @@ Si l'appareil est présentement déployé, les données ne seront plus coll - + Invitation par courriel - + Pour le moment, aucun courriel automatisé n'est envoyé par le système. Vous êtes responsable d'envoyer ce courriel. - + Destinataire: - + Aucun courriel spécifié. - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -600,17 +600,17 @@ p, li { white-space: pre-wrap; } - + Copier - + Envoyer (local) - + Fermer @@ -618,32 +618,32 @@ p, li { white-space: pre-wrap; } GeneratePasswordDialog - + Générateur de mot de passe - + Mot de passe - + Générer - + Copier - + Appliquer - + Annuler @@ -698,77 +698,77 @@ ou réalisées - + Form - + Groupe participant - + Éditer - + Sauvegarder - + Annuler - + XXXX Séances - + XXXX Participants - + Participant - + État - + Séances - + Première séance - + Dernière connexion - + Dernière séance - + Résumé - + Tableau de bord @@ -791,140 +791,140 @@ ou réalisées - + Terminer la séance? - + Mettre fin à la séance? - + Arrêt de la séance en cours... - + En attente de démarrage de séance... - + Déjà en séance - + vous a invité dans une séance, mais nous avons refusé l'invitation pour vous. - + n'a pas répondu à - + a refusé - + est occupé et ne peut répondre à - + l'invitation. - + Raison: - + Service non-supporté - + Le service " - - + + " n'est pas gérée par cette version du logiciel. Veuillez vérifier si une mise à jour existe ou contribuez au développement du logiciel! - + Catégorie de séance non-supportée - + La catégorie de séance " - + Quitter la séance? - + Désirez-vous quitter la séance? - + Form - + Gestion - + Quitter - + Terminer - + Inivités - + Paramètres - séance - + Paramètres - + Séance inconnue - + 00:00:00 @@ -942,37 +942,37 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du - + Invitation à rejoindre une séance - + Invitation - + XXXX vous invite à rejoindre une séance. - + L'invitation comporte le message suivant: - + Joindre la séance - + Refuser de joindre la séance - + Désolé, je suis occupé! @@ -1066,77 +1066,77 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du - + OpenTeraPlus - Kit - Configuration - + Chargement en cours... - + Fermer - + Groupe - + Projet - + Site - + Service - + Associer ce participant à ce kit - + Désassocier le participant actuel - + Participant - + Support technique? - + Logiciel à lancer lors de l'activation du support technique - + Parcourir... - + Sauvegarder - + Configuration matérielle @@ -1161,12 +1161,12 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du - + OpenTeraPlus - + Éteindre @@ -1194,27 +1194,27 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du - + Form - + Titre - + (Erreur) - + Réessayer - + Démarrage en cours... @@ -1233,37 +1233,37 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du - + Connexion en cours... - + OpenTeraPlus - Login - + Mot de passe - + Serveur - + Code utilisateur - + Connecter - + Quitter @@ -1370,52 +1370,52 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du - + Support technique - + OpenTeraPlus - Kit - + Exit - + Aucun participant sélectionné - + Allumer - + Erreur - + Redémarrer - + Le support technique est activé - + Support Technique - + (Version) @@ -1423,197 +1423,197 @@ Veuillez vérifier si une mise à jour existe ou contribuez au développement du MainWindow - + Erreur HTTP - + Erreur - + Suppression impossible - + Données sauvegardées. - + - mise à jour... - + Récupération de - + - suppression... - + Erreur de séance - + Une erreur est survenue: - + La séance ne peut pas continuer. - - + + est en ligne. - - + + est hors-ligne. - + Erreur de serveur. - - - + + + Déconnexion - + Vous serez déconnecté du logiciel. Toute donnée non enregistrée sera perdue. - + Souhaitez-vous continuer? - + Votre compte - + Configuration Globale - + Détails - + Changement de langue - + En ligne ( - + La langue a été modifiée. Souhaitez-vous vous déconnecter pour appliquer les changements? - + OpenTeraPlus - + (Message) - - + + ... - + 0.1 - + Nom Utilisateur - - + + Historique - + Profil - + Admin - + Navigateur - + En ligne - + Nom participant... - + Cette fonctionnalité n'est pas encore disponible! - + Recherche - + Heure - + Événement @@ -1621,22 +1621,22 @@ Souhaitez-vous vous déconnecter pour appliquer les changements? NotifyWindow - + OpenTeraPlus Notification - + (Texte de la notification) - + Oui - + Non @@ -1644,131 +1644,158 @@ Souhaitez-vous vous déconnecter pour appliquer les changements? OnlineManagerWidget - + Form - - - + + + 0 - - Participants en ligne + + Filtrer appareils + + + + + + + ... + + + + + Filtrer utilisateurs - - Utilisateurs en ligne + + Filtrer participants - - Appareils en ligne + + Items + + + + + Participants + + + + + Utilisateurs + + + + + Appareils ParticipantWidget - + Ouvrir - - + + Supprimer - + Télécharger les données - + Continuer la séance - + Appareil: - + Participant: - + Service: - + Inconnu - + Téléchargement - + Téléchargement terminé: - - + + Suppression? - + Êtes-vous sûrs de vouloir supprimer - + Êtes-vous sûrs de vouloir supprimer toutes les séances sélectionnées? - + Déassignation? - + Êtes-vous sûrs de vouloir désassigner - - + + Sélectionnez un dossier pour le téléchargement - - + + Séance - + Confirmation - + En désactivant l'accès web, le lien sera supprimé. Si un accès est à nouveau créé, le lien sera différent et il faudra envoyer à nouveau le lien au participant. @@ -1777,280 +1804,270 @@ Souhaitez-vous continuer? - + Code utilisateur manquant<br/> - Les mots de passe ne correspondent pas. - - - - Aucun mot de passe spécifié. - + Informations manquantes - + Les informations suivantes sont incorrectes: - + existe déjà. - + a été réalisée récemment et n'a pas été terminée. - + a été planifiée. - + Reprendre une séance? - + Un séance de ce type, - + Souhaitez-vous continuer cette séance? - + Form - + Participant - + Actif - + Accès via lien web - + Aucun lien n'a été généré - - + + Copier le lien - - - - - - - + + + + + + ... - + Envoyer par courriel - + Envoyer le lien par courriel - + Afficher le lien - + Accès via identification - - + + Code utilisateur - - + + Mot de passe - + Générer mot de passe aléatoire - - Confirmation mot de passe - - - - - + + + Sauvegarder - - + + Informations - + Mois 1 - + Mois 2 - + Mois 3 - + Tout cocher - + Tout décocher - + Date - + Type - + État - + Durée - + Responsable - + Actions - + Séances - + Tableau de bord - + Éditer - + Annuler - + Configuration - + Détails - + Appareil(s) assigné(s) - + <<< Ajouter - + Retirer >>> - + Appareils disponibles - + Appareils - + Nouvelle Séance - + Filtrer les séances - + Tout télécharger @@ -2058,48 +2075,48 @@ Souhaitez-vous continuer cette séance? PasswordStrengthDialog - - + + Mot de passe - + Confirmation - + Longueur minimale de 10 caractères - + Au moins une lettre minuscule - + Au moins une lettre majuscule - + Au moins un chiffre - + Au moins un caractère spécial - + Appliquer - + Annuler @@ -2107,263 +2124,290 @@ Souhaitez-vous continuer cette séance? ProjectNavigator - + Projet - + Groupe - + Participant - + Suppression? - + Êtes-vous sûrs de vouloir supprimer - + Form - + + + ... + + + Recherche... + + + + + Nouveau + + + + + Supprimer + + + + + Afficher / masquer les participants inactifs + + + + + Rafraichir + + ProjectWidget - + Aucun - + (Appareil sans nom) - + Utilisateurs - + Groupes participants - + Participants - + Participants actifs - + Séances planifiées ou réalisées - + Actif - + Inactif - + Seuls les groupes utilisateurs ayant un accès au projet sont affichés. - + Appareils - + Seuls les types de séance associés au projet sont affichés. - + Form - + Projet - + Éditer - + Sauvegarder - + Annuler - + XXXX Séances - + XXXX Groupes - + XXXX Participants - + XXXX Utilisateurs - + Participant - + État - + Séances - + Première séance - + Dernière séance - + Dernière connexion - + Résumé - + Tableau de bord - + Utilisateur - - + + Rôle - + Utilisateurs - + Gérer les groupes utilisateurs - + Groupe Utilisateur - + Appareil - + Participant(s) - + La modification des accès est désactivée pour les groupes utilisateurs dont l'accès au projet provient du site (i.e. administrateurs du site associé au projet) - + Mettre à jour les rôles - - + + Groupes Utilisateurs - + Groupes Participants - + Types de séance - + Mettre à jour les services associés - + Services - + Détails @@ -2371,27 +2415,27 @@ ou réalisées ServiceConfigWidget - + Configuration - Service - + Configuration - + Configuration: - + Sauvegarder - + Annuler @@ -2445,63 +2489,63 @@ ou réalisées - + Form - + Service - + Attention! Ces paramètres sont pour des utilisateurs avancés - modifiez à vos propres risques! - - + + Éditer - + Sauvegarder - + Annuler - + Informations - + Mettre à jour les projets associés - + Projets - + Nouveau Rôle - + Supprimer - + Rôles @@ -2509,97 +2553,105 @@ ou réalisées SessionInviteWidget - + Filtrer participants - - - - + + + + ... - - + Utilisateurs - + Invitations à la séance - - + Appareils - + Ajouter des invités à la séance - + Éléments disponibles - + + Filtrer Utilisateurs + + + + + Filtrer Appareils + + + + En ligne / Hors ligne - + Recherche... - + Inviter - + Invités dans la séance - + 1 - + Participants - + Retirer de la séance - + Nombre d'invités atteint - + Impossible d'ajouter ces invités à la séance: le nombre maximal de participants (5) serait dépassé - + Confirmation - + Êtes-vous sûrs de vouloir retirer les invités sélectionnés de la séance? @@ -2607,22 +2659,22 @@ ou réalisées SessionLobbyDialog - + Vestibule - + (Type de séance) - + Démarrer la séance - + Annuler @@ -2646,52 +2698,52 @@ Vous devez associer au moins un projet. - + Form - + Type de séance - + Éditer - + Sauvegarder - + Annuler - + Résumé - + Mettre à jour les projets de ce type de séance - + Projets - + Mettre à jour la configuration - + Paramètres @@ -2760,159 +2812,159 @@ Vous devez associer au moins un projet. - + Form - + Séance - + État de la séance - + Éditer - + Sauvegarder - + Annuler - + XXXX Évaluations - + XXX Appareils - + XXXX Participants - + XXXX Utilisateurs - + XXXX Données - + XXXX Événements - - + + Résumé - - + + Participants - + Utilisateurs - + Appareils - + Appareil - + Date - + Donnée - + Taille - + Action - + Tout télécharger - + Supprimer - + Données - + Évaluations - + Type - + Date / Heure - + Contexte - + Description - + Événements - + Détails @@ -2957,7 +3009,7 @@ ou réalisées - + Projets @@ -2982,117 +3034,117 @@ ou réalisées - + Form - + Site - + Éditer - + Sauvegarder - + Annuler - + XXXX Groupes - + XXX Appareils - + XXXX Projets - + XXXX Utilisateurs - + XXXX Séances - + XXXX Participants - + Gérer les groupes utilisateurs - + Mettre à jour les rôles des groupes utilisateurs - + Résumé - + Tableau de bord - + Utilisateurs - + <html><head/><body><p>Il n'est pas possible de spécifier &quot;Aucun rôle&quot; aux groupes utilisateurs qui ont au moins un accès (Administrateur ou Utilisateur) à un projet du groupe.</p></body></html> - + Groupe utilisateur - + Rôle - + Hérité? - + Groupes utilisateurs - + Appareils - + Détails @@ -3100,22 +3152,22 @@ ou réalisées StartSessionDialog - + Démarrage de séance... - + 10 - + Démarrage de la séance en cours... - + Annuler @@ -3123,17 +3175,17 @@ ou réalisées TeraForm - + Choisir la couleur - + Form - + Ce formulaire ne contient aucune information. @@ -3142,90 +3194,90 @@ ou réalisées UserGroupWidget - + Accès - Sites - + Accès - Projets - + Form - + Groupe utilisateur - + Éditer - + Sauvegarder - + Annuler - + Informations - + <html><head/><body><p>Il n'est pas possible de spécifier &quot;Aucun rôle&quot; aux groupes utilisateurs qui ont au moins un accès (Administrateur ou Utilisateur) à un projet du groupe.</p><p>Vous ne pouvez pas spécifier un rôle pour les sites dont vous n'est pas Administrateur.</p></body></html> - - + + Site - - + + Rôle - + Mettre à jour les rôles des sites - + <html><head/><body><p>Vous ne pouvez pas spécifier un rôle pour les projets dont vous n'est pas Administrateur.</p></body></html> - + Projet - + Mettre à jour les rôles des projets - + Mettre à jour les utilisateurs membres de ce groupe - + Utilisateurs @@ -3238,72 +3290,72 @@ ou réalisées - + Form - + Utilisateur - + Nouvelle Séance - + Général - + (Dernière connexion) - + (Nom complet) - + Dernière connexion: - + Nom: - + Actif - + Contact - + Courriel: - + (Courriel) - + Éditer - + Informations @@ -3311,125 +3363,137 @@ ou réalisées UserWidget - + Groupes utilisateurs - + Langue de l'interface - + Français - + Anglais - + Sons lors des notifications - + Attention - + Aucun groupe utilisateur n'a été spécifié. Vous devez spécifier au moins un groupe utilisateur - - + + Utilisateur - + Éditer - + Générer mot de passe aléatoire - + Sauvegarder - + Annuler - + Informations - + Cet utilisateur est un super administrateur. Il est donc impossible de lui assigner des groupes utiilsateurs. - + Mettre à jour les groupes de cet utilisateur - + Groupes - + Rôles effectifs - + + Sites + + + + + Site - + + Projets + + + + Projet - + + Rôle - + Rôles - + Mettre à jour les préférences - - + + Préférences - + Configuration @@ -3445,53 +3509,53 @@ Vous devez spécifier au moins un groupe utilisateur VideoRehabPTZDialog - + Configuration Caméra PTZ - + Type de contrôle: - - + + admin - + Vivotek - + Adresse (URL): - + Utilisateur: - + Mot de passe: - + Port: - + Appliquer - + Annuler @@ -3499,37 +3563,37 @@ Vous devez spécifier au moins un groupe utilisateur VideoRehabSetupWidget - + VideoRehabSetup - + Titre - + (Erreur) - + Réessayer - + Chargement en cours... - + Définir par défaut - + Configuration avancée @@ -3593,67 +3657,67 @@ Vous devez spécifier au moins un groupe utilisateur VideoRehabToolsWidget - + Form - + Reconnecter - + Enregistrement en cours - + Un enregistrement de la séance est en cours. - + Si vous continuez, l'enregistrement pourrait être perdu. - + Êtes-vous sûrs de vouloir continuer? - - + + Enregistrer - + Vous vous apprêtez à enregistrer localement une séance vidéo. - + En acceptant de poursuivre avec cet enregistrement, vous acceptez la responsabilité professionnelle, légale et éthique en lien avec la conservation, la diffusion, l'utilisation et la confidentialité requise avec ce type de média. - + Souhaitez-vous toujours activer l'enregistrement vidéo? - + Confirmation requise - + Arrêter l'enregistrement @@ -3661,58 +3725,58 @@ Vous devez spécifier au moins un groupe utilisateur VideoRehabVirtualCamSetupDialog - + Configuration - Caméra virtuelle - + Configuration assistée? - + Source de la caméra - + Utilisateur: - + Type de source: - + Adresse (URL): - + Vivotek - - + + admin - + Mot de passe: - + Appliquer - + Annuler @@ -3720,62 +3784,62 @@ Vous devez spécifier au moins un groupe utilisateur VideoRehabWidget - + Form - + Titre - + (Erreur) - + Réessayer - + Établissement de la connexion... - + Fichier disponible - + Le fichier - + est disponible dans le répertoire - + Impossible de charger la page - + Problème vidéo - + Problème audio - + Erreur 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 +
TeraForm.h
+ 1 +
ClickableLabel QLabel @@ -989,15 +995,10 @@ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, clicked() - - TeraForm - QWidget -
TeraForm.h
- 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: