aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-05-05 11:43:19 +0300
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-05-05 11:43:19 +0300
commit9cc18084e2f9db73ce9e2820dfebcab4e50e5730 (patch)
tree7e8751d6796a34599adf4fd90964ac62c0ee1cc7 /Software
parenteda6e4979dbb722ce5f9412955f89388dfa2af3f (diff)
downloadTango-9cc18084e2f9db73ce9e2820dfebcab4e50e5730.tar.gz
Tango-9cc18084e2f9db73ce9e2820dfebcab4e50e5730.zip
MREGE.
Diffstat (limited to 'Software')
-rw-r--r--Software/Android_Studio/ColorCapture/app/build.gradle61
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/AndroidManifest.xml17
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/controls/CircleActionButton.java91
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ApplicationComponent.java9
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ViewModelsModule.java40
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/confirm/ConfirmDialog.java22
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/confirm/ConfirmDialogVM.java41
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/error/ErrorDialogVM.java20
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/progress/ProgressDialogVM.java20
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/success/SuccessDialogVM.java20
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeClient.java1
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/logging/LogManager.java35
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/models/ColorResult.java54
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/models/ColorResultVM.java40
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/MessageDialogViewModelBase.java25
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java1
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationActivity.java1
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationFragment.java5
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/TabState.java8
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/TabStateManager.java25
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/AndroidNotificationProvider.java30
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/INotificationProvider.java13
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/settings/SettingsManager.java96
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java31
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/IMainActivity.java1
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java9
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java96
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/mycolors/MyColorsFragmentVM.java70
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragmentVM.java2
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/rename/IRenameFragment.java7
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/rename/RenameFragment.java62
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/rename/RenameFragmentVM.java50
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragmentVM.java44
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/ISendToEmailActivity.java7
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivity.java30
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivityVM.java21
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java27
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/ITCCService.java5
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/TCCService.java50
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/WebApiFactory.java6
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/DefinitionResponse.java30
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/about.pngbin0 -> 1998 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/delete_thin.pngbin0 -> 2039 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/error.pngbin0 -> 6542 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/how_to.pngbin0 -> 2350 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icon_twine_card.pngbin0 -> 1989 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_close.pngbin0 -> 367 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_delete.pngbin0 -> 2140 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/info.pngbin0 -> 1699 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/snapmatch.pngbin0 -> 181461 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/twine_card_icon.pngbin0 -> 5155 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/about.pngbin0 -> 1229 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/delete_thin.pngbin0 -> 1240 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/error.pngbin0 -> 3836 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/how_to.pngbin0 -> 1435 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icon_twine_card.pngbin0 -> 1215 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_close.pngbin0 -> 284 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_delete.pngbin0 -> 1278 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/info.pngbin0 -> 1066 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/snapmatch.pngbin0 -> 98923 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/twine_card_icon.pngbin0 -> 2864 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/about.pngbin0 -> 2748 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/delete_thin.pngbin0 -> 2827 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/error.pngbin0 -> 9549 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/how_to.pngbin0 -> 3118 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icon_twine_card.pngbin0 -> 2661 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_close.pngbin0 -> 424 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_delete.pngbin0 -> 3094 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/info.pngbin0 -> 2417 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/snapmatch.pngbin0 -> 281457 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/twine_card_icon.pngbin0 -> 7906 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/about.pngbin0 -> 4258 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/delete_thin.pngbin0 -> 4926 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/error.pngbin0 -> 16261 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/how_to.pngbin0 -> 4930 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icon_twine_card.pngbin0 -> 4793 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_close.pngbin0 -> 542 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_delete.pngbin0 -> 5369 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/info.pngbin0 -> 3553 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/snapmatch.pngbin0 -> 550027 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/twine_card_icon.pngbin0 -> 14760 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/about.pngbin0 -> 5859 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/delete_thin.pngbin0 -> 7208 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/error.pngbin0 -> 23926 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/how_to.pngbin0 -> 6656 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icon_twine_card.pngbin0 -> 6794 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_close.pngbin0 -> 719 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_delete.pngbin0 -> 7523 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/info.pngbin0 -> 5016 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/snapmatch.pngbin0 -> 894264 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/twine_card_icon.pngbin0 -> 24126 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_main.xml30
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_send_to_email.xml66
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/color_result_item.xml135
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_confirm.xml87
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_error.xml18
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_success.xml18
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml2
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_mycolors.xml39
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_rename.xml83
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_result.xml4
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/side_menu.xml187
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-hdpi/ic_launcher.pngbin2963 -> 4407 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-hdpi/ic_launcher_round.pngbin4905 -> 6054 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-mdpi/ic_launcher.pngbin2060 -> 2304 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-mdpi/ic_launcher_round.pngbin2783 -> 3179 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xhdpi/ic_launcher.pngbin4490 -> 6532 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xhdpi/ic_launcher_round.pngbin6895 -> 8926 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxhdpi/ic_launcher.pngbin6387 -> 12164 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.pngbin10413 -> 16791 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxxhdpi/ic_launcher.pngbin9128 -> 21793 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.pngbin15132 -> 27968 bytes
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/values/strings.xml2
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/values/styles.xml1
-rw-r--r--Software/DB/PPC/Tango.mdfbin75497472 -> 75497472 bytes
-rw-r--r--Software/DB/PPC/Tango_log.ldfbin53673984 -> 53673984 bytes
-rw-r--r--Software/DB/TCC/TCC.mdfbin8388608 -> 8388608 bytes
-rw-r--r--Software/DB/TCC/TCC_log.ldfbin8388608 -> 8388608 bytes
-rw-r--r--Software/DB/Tango.mdfbin75497472 -> 75497472 bytes
-rw-r--r--Software/DB/Tango_log.ldfbin22675456 -> 22675456 bytes
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c7
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c2
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-hdpi/about.pngbin0 -> 1998 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-hdpi/delete_thin.pngbin0 -> 2039 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-hdpi/error.pngbin0 -> 6542 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-hdpi/how_to.pngbin0 -> 2350 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-hdpi/icon_twine_Card.pngbin0 -> 1989 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_close.pngbin0 -> 367 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_delete.pngbin0 -> 2140 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-hdpi/info.pngbin0 -> 1699 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card.pngbin4292 -> 1989 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card_icon.pngbin0 -> 5155 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-mdpi/about.pngbin0 -> 1229 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-mdpi/delete_thin.pngbin0 -> 1240 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-mdpi/error.pngbin0 -> 3836 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-mdpi/how_to.pngbin0 -> 1435 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-mdpi/icon_twine_Card.pngbin0 -> 1215 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_close.pngbin0 -> 284 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_delete.pngbin0 -> 1278 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-mdpi/info.pngbin0 -> 1066 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card.pngbin3305 -> 1215 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card_icon.pngbin0 -> 2864 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xhdpi/about.pngbin0 -> 2748 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xhdpi/delete_thin.pngbin0 -> 2827 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xhdpi/error.pngbin0 -> 9549 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xhdpi/how_to.pngbin0 -> 3118 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xhdpi/icon_twine_Card.pngbin0 -> 2661 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_close.pngbin0 -> 424 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_delete.pngbin0 -> 3094 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xhdpi/info.pngbin0 -> 2417 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card.pngbin5560 -> 2661 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card_icon.pngbin0 -> 7906 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxhdpi/about.pngbin0 -> 4258 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxhdpi/delete_thin.pngbin0 -> 4926 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxhdpi/error.pngbin0 -> 16261 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxhdpi/how_to.pngbin0 -> 4930 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icon_twine_Card.pngbin0 -> 4793 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_close.pngbin0 -> 542 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_delete.pngbin0 -> 5369 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxhdpi/info.pngbin0 -> 3553 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card.pngbin7547 -> 4793 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card_icon.pngbin0 -> 14760 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/about.pngbin0 -> 5859 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/delete_thin.pngbin0 -> 7208 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/error.pngbin0 -> 23926 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/how_to.pngbin0 -> 6656 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icon_twine_Card.pngbin0 -> 6794 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_close.pngbin0 -> 719 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_delete.pngbin0 -> 7523 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/info.pngbin0 -> 5016 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card.pngbin9807 -> 6794 bytes
-rw-r--r--Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card_icon.pngbin0 -> 24126 bytes
-rw-r--r--Software/Stubs Collection/stubs/FFS_ReBuild.cs24
-rw-r--r--Software/Stubs Collection/stubs/FlashFileSystemInit.cs23
-rw-r--r--Software/Stubs Collection/stubs/mot stop.cs7
-rw-r--r--Software/Stubs Collection/stubs/technician view files/lp4 Tech Board.tpf266
-rw-r--r--Software/Stubs Collection/stubs/technician view files/lp4 with waste.tpf2069
-rw-r--r--Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnkbin1518 -> 1581 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/DeveloperModuleSettings.cs13
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs13
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml4
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs2
-rw-r--r--Software/Visual_Studio/TCC/Tango.TCC.BL/Entities/Device.cs6
-rw-r--r--Software/Visual_Studio/TCC/Tango.TCC.BL/Entities/TCCEntityBase.cs5
-rw-r--r--Software/Visual_Studio/TCC/Tango.TCC.BL/Web/DefinitionResponse.cs3
-rw-r--r--Software/Visual_Studio/TCC/Tango.TCC.Service/Controllers/ColorDetectionController.cs98
-rw-r--r--Software/Visual_Studio/TCC/Tango.TCC.Service/DB/TccDbContext.cs46
-rw-r--r--Software/Visual_Studio/TCC/Tango.TCC.Service/TCCServiceConfig.cs5
-rw-r--r--Software/Visual_Studio/TCC/Tango.TCC.Service/Tango.TCC.Service.csproj5
-rw-r--r--Software/Visual_Studio/TCC/Tango.TCC.Service/Web.config3
-rw-r--r--Software/Visual_Studio/Tango.Web/Helpers/ObservablesContextHelper.cs4
191 files changed, 4103 insertions, 397 deletions
diff --git a/Software/Android_Studio/ColorCapture/app/build.gradle b/Software/Android_Studio/ColorCapture/app/build.gradle
index 7b8adc999..ae4fcfeb1 100644
--- a/Software/Android_Studio/ColorCapture/app/build.gradle
+++ b/Software/Android_Studio/ColorCapture/app/build.gradle
@@ -17,13 +17,13 @@ android {
ndk {
// Tells Gradle to build outputs for the following ABIs and package
// them into your APK.
- abiFilters 'armeabi-v7a' //Supported on most devices.
+ // abiFilters 'armeabi-v7a' //Supported on most devices.
}
}
buildTypes {
debug {
- buildConfigField "String", "WEB_SERVICE_ADDRESS", "\"http://192.168.1.86:45455/api/\""
+ buildConfigField "String", "WEB_SERVICE_ADDRESS", "\"http://10.100.102.46:45455/api/\""
buildConfigField "String", "WEB_SERVICE_APP_ID", "\"Tdf793i4ughsiduf8749509237885ehgfdlkghlT\""
}
@@ -51,6 +51,63 @@ android {
path "CMakeLists.txt"
}
}
+
+ splits {
+
+ // Configures multiple APKs based on ABI.
+ abi {
+
+ // Enables building multiple APKs per ABI.
+ enable true
+
+ // By default all ABIs are included, so use reset() and include to specify that we only
+ // want APKs for x86 and x86_64.
+
+ // Resets the list of ABIs that Gradle should create APKs for to none.
+ reset()
+
+ // Specifies a list of ABIs that Gradle should create APKs for.
+ include "armeabi-v7a", "arm64-v8a", "x86"
+
+ // Specifies that we do not want to also generate a universal APK that includes all ABIs.
+ universalApk false
+ }
+ }
+}
+
+// Map for the version code that gives each ABI a value.
+ext.abiCodes = ['armeabi-v7a':1, 'arm64-v8a':2, 'x86':3]
+
+import com.android.build.OutputFile
+
+// For each APK output variant, override versionCode with a combination of
+// ext.abiCodes * 1000 + variant.versionCode. In this example, variant.versionCode
+// is equal to defaultConfig.versionCode. If you configure product flavors that
+// define their own versionCode, variant.versionCode uses that value instead.
+android.applicationVariants.all { variant ->
+
+ // Assigns a different version code for each output APK
+ // other than the universal APK.
+ variant.outputs.each { output ->
+
+ // Stores the value of ext.abiCodes that is associated with the ABI for this variant.
+ def baseAbiVersionCode =
+ // Determines the ABI for this variant and returns the mapped value.
+ project.ext.abiCodes.get(output.getFilter(OutputFile.ABI))
+
+ // Because abiCodes.get() returns null for ABIs that are not mapped by ext.abiCodes,
+ // the following code does not override the version code for universal APKs.
+ // However, because we want universal APKs to have the lowest version code,
+ // this outcome is desirable.
+ if (baseAbiVersionCode != null) {
+
+ // Assigns the new version code to versionCodeOverride, which changes the version code
+ // for only the output APK, not for the variant itself. Skipping this step simply
+ // causes Gradle to use the value of variant.versionCode for the APK.
+ output.versionCodeOverride =
+ baseAbiVersionCode * 1000 + variant.versionCode
+ }
+ }
}
dependencies {
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/AndroidManifest.xml b/Software/Android_Studio/ColorCapture/app/src/main/AndroidManifest.xml
index a03d65975..441817928 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/AndroidManifest.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/AndroidManifest.xml
@@ -26,14 +26,27 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="false"
android:theme="@style/AppTheme">
- <activity android:name=".views.loading.LoadingActivity" android:noHistory="true">
+ <activity
+ android:name=".views.loading.LoadingActivity"
+ android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+
+ <data
+ android:scheme="http"
+ android:host="twine-s.com" />
+ </intent-filter>
</activity>
- <activity android:name=".views.main.MainActivity"></activity>
+ <activity android:name=".views.main.MainActivity"/>
+ <activity android:name=".views.sendtoemail.SendToEmailActivity" />
</application>
</manifest> \ No newline at end of file
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/controls/CircleActionButton.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/controls/CircleActionButton.java
index 242702fe9..afa02c511 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/controls/CircleActionButton.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/controls/CircleActionButton.java
@@ -4,14 +4,18 @@ import android.animation.Animator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
+import android.databinding.BindingAdapter;
+import android.databinding.InverseBindingAdapter;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.AppCompatTextView;
import android.util.AttributeSet;
+import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.view.animation.AlphaAnimation;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
@@ -27,15 +31,18 @@ public class CircleActionButton extends FrameLayout implements View.OnTouchListe
private int initial_circle_width;
private ValueAnimator animationDown;
private ValueAnimator animationUp;
+ private AlphaAnimation alphaAnimationDown;
+ private AlphaAnimation alphaAnimationUp;
private Drawable icon;
+ private AppCompatTextView textView;
public CircleActionButton(@NonNull Context context, @Nullable AttributeSet attrs)
{
super(context, attrs);
- init(context,attrs);
+ init(context, attrs);
}
- private void init(Context context,AttributeSet attrs)
+ private void init(Context context, AttributeSet attrs)
{
inflate(context, R.layout.circle_action_button, this);
@@ -43,12 +50,19 @@ public class CircleActionButton extends FrameLayout implements View.OnTouchListe
circleActionButton = findViewById(R.id.actionButtonCircle);
frameAfterPadding = findViewById(R.id.frameAfterPadding);
ImageView imageView = findViewById(R.id.circleActionButtonImageView);
- AppCompatTextView textView = findViewById(R.id.circleActionButtonTextView);
+ textView = findViewById(R.id.circleActionButtonTextView);
btn.setOnTouchListener(this);
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CircleActionButton);
+ int textSize = a.getDimensionPixelSize(R.styleable.CircleActionButton_textSize, 0);
+
+ if (textSize > 0)
+ {
+ textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
+ }
+
icon = getContext().getDrawable(a.getResourceId(R.styleable.CircleActionButton_src, 0));
CharSequence text = a.getText(R.styleable.CircleActionButton_text);
@@ -67,7 +81,7 @@ public class CircleActionButton extends FrameLayout implements View.OnTouchListe
}
else if (motionEvent.getAction() == MotionEvent.ACTION_UP)
{
- animateUp();
+ //animateUp();
performClick();
}
@@ -83,11 +97,21 @@ public class CircleActionButton extends FrameLayout implements View.OnTouchListe
initial_circle_width = circleActionButton.getMeasuredWidth();
}
+
+ alphaAnimationDown = new AlphaAnimation(1f, 0.5f);
+ alphaAnimationDown.setDuration(50);
+ alphaAnimationDown.setFillAfter(true);
+ circleActionButton.startAnimation(alphaAnimationDown);
+
+ final CircleActionButton that = this;
+
ValueAnimator anim = ValueAnimator.ofInt(initial_circle_width, frameAfterPadding.getMeasuredWidth());
animationDown = anim;
- anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+ anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
+ {
@Override
- public void onAnimationUpdate(ValueAnimator valueAnimator) {
+ public void onAnimationUpdate(ValueAnimator valueAnimator)
+ {
int val = (Integer) valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams layoutParams = circleActionButton.getLayoutParams();
layoutParams.width = val;
@@ -105,7 +129,7 @@ public class CircleActionButton extends FrameLayout implements View.OnTouchListe
@Override
public void onAnimationEnd(Animator animator)
{
-
+ that.animateUp();
}
@Override
@@ -124,22 +148,31 @@ public class CircleActionButton extends FrameLayout implements View.OnTouchListe
anim.start();
}
- private void animateUp()
+ public void animateUp()
{
cancelAnimations();
+
+ alphaAnimationUp = new AlphaAnimation(0.5f, 1f);
+ alphaAnimationUp.setDuration(500);
+ alphaAnimationUp.setFillAfter(true);
+ alphaAnimationUp.setStartTime(1000);
+ circleActionButton.startAnimation(alphaAnimationUp);
+
ValueAnimator anim = ValueAnimator.ofInt(circleActionButton.getMeasuredWidth(), initial_circle_width);
animationUp = anim;
- anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+ anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
+ {
@Override
- public void onAnimationUpdate(ValueAnimator valueAnimator) {
+ public void onAnimationUpdate(ValueAnimator valueAnimator)
+ {
int val = (Integer) valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams layoutParams = circleActionButton.getLayoutParams();
layoutParams.width = val;
circleActionButton.setLayoutParams(layoutParams);
}
});
- anim.setDuration(300);
- anim.setStartDelay(200);
+ anim.setDuration(500);
+ anim.setStartDelay(1000);
anim.start();
}
@@ -156,5 +189,39 @@ public class CircleActionButton extends FrameLayout implements View.OnTouchListe
animationUp.cancel();
animationUp = null;
}
+
+ if (alphaAnimationDown != null)
+ {
+ alphaAnimationDown.cancel();
+ alphaAnimationDown = null;
+ }
+
+ if (alphaAnimationUp != null)
+ {
+ alphaAnimationUp.cancel();
+ alphaAnimationUp = null;
+ }
+ }
+
+ public void setText(String text)
+ {
+ this.textView.setText(text);
+ }
+
+ public String getText()
+ {
+ return this.textView.getText().toString();
+ }
+
+ @BindingAdapter("text")
+ public static void setText(CircleActionButton view, String value)
+ {
+ view.setText(value);
+ }
+
+ @InverseBindingAdapter(attribute = "text")
+ public static String getText(CircleActionButton view)
+ {
+ return view.getText();
}
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ApplicationComponent.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ApplicationComponent.java
index 498e3776d..db2848fa1 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ApplicationComponent.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ApplicationComponent.java
@@ -1,5 +1,6 @@
package com.twine.colorcapture.dagger;
+import com.twine.colorcapture.dialogs.confirm.ConfirmDialog;
import com.twine.colorcapture.dialogs.error.ErrorDialog;
import com.twine.colorcapture.dialogs.processing.ProcessingDialog;
import com.twine.colorcapture.dialogs.progress.ProgressDialog;
@@ -10,7 +11,9 @@ import com.twine.colorcapture.views.mycolors.MyColorsFragment;
import com.twine.colorcapture.views.loading.LoadingActivity;
import com.twine.colorcapture.views.main.MainActivity;
import com.twine.colorcapture.views.register.RegisterFragment;
+import com.twine.colorcapture.views.rename.RenameFragment;
import com.twine.colorcapture.views.result.ResultFragment;
+import com.twine.colorcapture.views.sendtoemail.SendToEmailActivity;
import com.twine.colorcapture.views.sendtomachine.SendToMachineFragment;
import javax.inject.Singleton;
@@ -48,4 +51,10 @@ public interface ApplicationComponent
void inject(SuccessDialog successDialog);
void inject(SendToMachineFragment sendToMachineFragment);
+
+ void inject(ConfirmDialog confirmDialog);
+
+ void inject(RenameFragment renameFragment);
+
+ void inject(SendToEmailActivity sendToEmailActivity);
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ViewModelsModule.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ViewModelsModule.java
index 40a49f021..f83826b21 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ViewModelsModule.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dagger/ViewModelsModule.java
@@ -1,6 +1,7 @@
package com.twine.colorcapture.dagger;
import com.squareup.otto.Bus;
+import com.twine.colorcapture.dialogs.confirm.ConfirmDialogVM;
import com.twine.colorcapture.dialogs.error.ErrorDialogVM;
import com.twine.colorcapture.dialogs.processing.ProcessingDialogVM;
import com.twine.colorcapture.dialogs.progress.ProgressDialogVM;
@@ -13,7 +14,9 @@ import com.twine.colorcapture.views.loading.LoadingActivityVM;
import com.twine.colorcapture.views.mycolors.MyColorsFragmentVM;
import com.twine.colorcapture.views.main.MainActivityVM;
import com.twine.colorcapture.views.register.RegisterFragmentVM;
+import com.twine.colorcapture.views.rename.RenameFragmentVM;
import com.twine.colorcapture.views.result.ResultFragmentVM;
+import com.twine.colorcapture.views.sendtoemail.SendToEmailActivityVM;
import com.twine.colorcapture.views.sendtomachine.SendToMachineFragmentVM;
import com.twine.colorcapture.web.ITCCService;
@@ -46,16 +49,23 @@ public class ViewModelsModule
@Provides
@Singleton
+ public SendToEmailActivityVM provideSendToEmailActivityVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider, ITCCService tccService)
+ {
+ return new SendToEmailActivityVM();
+ }
+
+ @Provides
+ @Singleton
public MyColorsFragmentVM provideMyColorsFragmentVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider)
{
- return new MyColorsFragmentVM(navigationProvider);
+ return new MyColorsFragmentVM(navigationProvider, notificationProvider);
}
@Provides
@Singleton
public CaptureFragmentVM provideCaptureFragmentVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider, ITCCService tccService)
{
- return new CaptureFragmentVM(eventBus,tccService, navigationProvider, notificationProvider);
+ return new CaptureFragmentVM(eventBus, tccService, navigationProvider, notificationProvider);
}
@Provides
@@ -67,23 +77,30 @@ public class ViewModelsModule
@Provides
@Singleton
- public ResultFragmentVM provideResultFragmentVM(Bus eventBus,INavigationProvider navigationProvider)
+ public ResultFragmentVM provideResultFragmentVM(Bus eventBus, INavigationProvider navigationProvider, ITCCService tccService)
{
- return new ResultFragmentVM(eventBus,navigationProvider);
+ return new ResultFragmentVM(eventBus, navigationProvider, tccService);
}
@Provides
@Singleton
- public RegisterFragmentVM provideRegisterFragmentVM(INotificationProvider notificationProvider, INavigationProvider navigationProvider, ITCCService tccService,Bus eventBus)
+ public RegisterFragmentVM provideRegisterFragmentVM(INotificationProvider notificationProvider, INavigationProvider navigationProvider, ITCCService tccService, Bus eventBus)
{
- return new RegisterFragmentVM(notificationProvider,navigationProvider,tccService,eventBus);
+ return new RegisterFragmentVM(notificationProvider, navigationProvider, tccService, eventBus);
}
@Provides
@Singleton
- public SendToMachineFragmentVM provideSendMachineFragmentVM(INotificationProvider notificationProvider, INavigationProvider navigationProvider)
+ public RenameFragmentVM provideRenameFragmentVM(INavigationProvider navigationProvider)
{
- return new SendToMachineFragmentVM(notificationProvider,navigationProvider);
+ return new RenameFragmentVM(navigationProvider);
+ }
+
+ @Provides
+ @Singleton
+ public SendToMachineFragmentVM provideSendMachineFragmentVM(INotificationProvider notificationProvider, INavigationProvider navigationProvider, ITCCService tccService)
+ {
+ return new SendToMachineFragmentVM(notificationProvider, navigationProvider, tccService);
}
@Provides
@@ -109,6 +126,13 @@ public class ViewModelsModule
@Provides
@Singleton
+ public ConfirmDialogVM provideConfirmDialogVM()
+ {
+ return new ConfirmDialogVM();
+ }
+
+ @Provides
+ @Singleton
public WelcomeDialogVM provideWelcomeDialogVM()
{
return new WelcomeDialogVM();
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/confirm/ConfirmDialog.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/confirm/ConfirmDialog.java
new file mode 100644
index 000000000..9b67c2a08
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/confirm/ConfirmDialog.java
@@ -0,0 +1,22 @@
+package com.twine.colorcapture.dialogs.confirm;
+
+import com.twine.colorcapture.App;
+import com.twine.colorcapture.R;
+import com.twine.colorcapture.databinding.DialogConfirmBinding;
+import com.twine.colorcapture.mvvm.DialogBase;
+
+public class ConfirmDialog extends DialogBase<DialogConfirmBinding,ConfirmDialogVM>
+{
+
+ @Override
+ public int getLayoutId()
+ {
+ return R.layout.dialog_confirm;
+ }
+
+ @Override
+ public void inject()
+ {
+ App.getComponent().inject(this);
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/confirm/ConfirmDialogVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/confirm/ConfirmDialogVM.java
new file mode 100644
index 000000000..5fa0db57c
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/confirm/ConfirmDialogVM.java
@@ -0,0 +1,41 @@
+package com.twine.colorcapture.dialogs.confirm;
+
+import com.twine.colorcapture.mvvm.DependencyProperty;
+import com.twine.colorcapture.mvvm.MessageDialogViewModelBase;
+import com.twine.colorcapture.mvvm.RelayCommand;
+
+public class ConfirmDialogVM extends MessageDialogViewModelBase
+{
+ private boolean confirmed;
+
+ public DependencyProperty<String> confirmText;
+ public RelayCommand confirmCommand;
+
+ public ConfirmDialogVM()
+ {
+ super();
+ confirmText = new DependencyProperty<>("OK");
+ confirmCommand = new RelayCommand(this::onConfirmed);
+ }
+
+ private void onConfirmed()
+ {
+ confirmed = true;
+ close();
+ }
+
+ public void setConfirmText(String confirmText)
+ {
+ this.confirmText.set(confirmText);
+ }
+
+ public boolean isConfirmed()
+ {
+ return this.confirmed;
+ }
+
+ public void setConfirmed(Boolean confirmed)
+ {
+ this.confirmed = confirmed;
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/error/ErrorDialogVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/error/ErrorDialogVM.java
index 4bc2dbb36..6dee3dfe1 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/error/ErrorDialogVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/error/ErrorDialogVM.java
@@ -2,25 +2,9 @@ package com.twine.colorcapture.dialogs.error;
import com.twine.colorcapture.mvvm.DependencyProperty;
import com.twine.colorcapture.mvvm.DialogViewModelBase;
+import com.twine.colorcapture.mvvm.MessageDialogViewModelBase;
-public class ErrorDialogVM extends DialogViewModelBase
+public class ErrorDialogVM extends MessageDialogViewModelBase
{
- public DependencyProperty<String> title;
- public DependencyProperty<String> message;
- public ErrorDialogVM()
- {
- title = new DependencyProperty<>("");
- message = new DependencyProperty<>("");
- }
-
- public void setTitle(String title)
- {
- this.title.set(title);
- }
-
- public void setMessage(String message)
- {
- this.message.set(message);
- }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/progress/ProgressDialogVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/progress/ProgressDialogVM.java
index 4b7dc1d34..24d0da2ea 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/progress/ProgressDialogVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/progress/ProgressDialogVM.java
@@ -2,25 +2,9 @@ package com.twine.colorcapture.dialogs.progress;
import com.twine.colorcapture.mvvm.DependencyProperty;
import com.twine.colorcapture.mvvm.DialogViewModelBase;
+import com.twine.colorcapture.mvvm.MessageDialogViewModelBase;
-public class ProgressDialogVM extends DialogViewModelBase
+public class ProgressDialogVM extends MessageDialogViewModelBase
{
- public DependencyProperty<String> title;
- public DependencyProperty<String> message;
- public ProgressDialogVM()
- {
- title = new DependencyProperty<>("");
- message = new DependencyProperty<>("");
- }
-
- public void setTitle(String title)
- {
- this.title.set(title);
- }
-
- public void setMessage(String message)
- {
- this.message.set(message);
- }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/success/SuccessDialogVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/success/SuccessDialogVM.java
index b1fb00129..466f32879 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/success/SuccessDialogVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/dialogs/success/SuccessDialogVM.java
@@ -2,25 +2,9 @@ package com.twine.colorcapture.dialogs.success;
import com.twine.colorcapture.mvvm.DependencyProperty;
import com.twine.colorcapture.mvvm.DialogViewModelBase;
+import com.twine.colorcapture.mvvm.MessageDialogViewModelBase;
-public class SuccessDialogVM extends DialogViewModelBase
+public class SuccessDialogVM extends MessageDialogViewModelBase
{
- public DependencyProperty<String> title;
- public DependencyProperty<String> message;
- public SuccessDialogVM()
- {
- title = new DependencyProperty<>("");
- message = new DependencyProperty<>("");
- }
-
- public void setTitle(String title)
- {
- this.title.set(title);
- }
-
- public void setMessage(String message)
- {
- this.message.set(message);
- }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeClient.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeClient.java
index b2ccc16dc..99436a6b2 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeClient.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/integration/ExternalBridgeClient.java
@@ -31,6 +31,7 @@ public class ExternalBridgeClient
try
{
Socket tcpClient = new Socket();
+ tcpClient.setSoTimeout(10000);
tcpClient.connect(new InetSocketAddress(machine.getIpAddress(), EXTERNAL_BRIDGE_PORT), 2000);
//Create detection color
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/logging/LogManager.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/logging/LogManager.java
new file mode 100644
index 000000000..a15e0752d
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/logging/LogManager.java
@@ -0,0 +1,35 @@
+package com.twine.colorcapture.logging;
+
+import android.util.Log;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+public class LogManager
+{
+ private static final String TAG = "TCC";
+
+ public static void log(String message)
+ {
+ Log.d(TAG, message);
+ }
+
+ public static Exception log(Exception ex)
+ {
+ Log.e(TAG, ex.toString());
+ return ex;
+ }
+
+ public static Exception log(Exception ex, String message)
+ {
+ Log.e(TAG, message, ex);
+ return ex;
+ }
+
+ public static void log(String message, Object obj)
+ {
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ String json = gson.toJson(obj);
+ Log.d(TAG, message + "\n" + json);
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/models/ColorResult.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/models/ColorResult.java
new file mode 100644
index 000000000..a4c726ef6
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/models/ColorResult.java
@@ -0,0 +1,54 @@
+package com.twine.colorcapture.models;
+
+import android.databinding.BaseObservable;
+
+import com.twine.colorcapture.mvvm.ExtendedObject;
+import com.twine.colorcapture.web.messages.DetectionColor;
+import com.twine.colorcapture.web.messages.DetectionResponse;
+
+import org.joda.time.DateTime;
+
+public class ColorResult extends BaseObservable
+{
+ private DetectionResponse detectionResponse;
+ private String date;
+ private String name;
+
+ public DetectionResponse getDetectionResponse()
+ {
+ return detectionResponse;
+ }
+
+ public void setDetectionResponse(DetectionResponse detectionResponse)
+ {
+ this.detectionResponse = detectionResponse;
+ }
+
+ public String getDate()
+ {
+ return date;
+ }
+
+ public void setDate(String date)
+ {
+ this.date = date;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ notifyChange();
+ }
+
+ public ColorResult(DetectionResponse detectionResponse, String date, String name)
+ {
+ this.detectionResponse = detectionResponse;
+ this.date = date;
+ this.name = name;
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/models/ColorResultVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/models/ColorResultVM.java
new file mode 100644
index 000000000..02dd14b8b
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/models/ColorResultVM.java
@@ -0,0 +1,40 @@
+package com.twine.colorcapture.models;
+
+import com.twine.colorcapture.core.IAction1;
+import com.twine.colorcapture.mvvm.RelayCommand;
+import com.twine.colorcapture.mvvm.ViewModelBase;
+
+public class ColorResultVM extends ViewModelBase
+{
+ private ColorResult result;
+ public RelayCommand deleteCommand;
+ private IAction1<ColorResultVM> onDeleteListener;
+
+ public ColorResultVM()
+ {
+ deleteCommand = new RelayCommand(this::handleDeleteCommand);
+ }
+
+ private void handleDeleteCommand()
+ {
+ if (onDeleteListener != null)
+ {
+ onDeleteListener.invoke(this);
+ }
+ }
+
+ public ColorResult getResult()
+ {
+ return result;
+ }
+
+ public void setResult(ColorResult result)
+ {
+ this.result = result;
+ }
+
+ public void setOnDeleteListener(IAction1<ColorResultVM> listener)
+ {
+ onDeleteListener = listener;
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/MessageDialogViewModelBase.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/MessageDialogViewModelBase.java
new file mode 100644
index 000000000..f2026ecc6
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/MessageDialogViewModelBase.java
@@ -0,0 +1,25 @@
+package com.twine.colorcapture.mvvm;
+
+public class MessageDialogViewModelBase extends DialogViewModelBase
+{
+ public DependencyProperty<String> title;
+ public DependencyProperty<String> message;
+ public RelayCommand closeCommand;
+
+ public MessageDialogViewModelBase()
+ {
+ title = new DependencyProperty<>("");
+ message = new DependencyProperty<>("");
+ closeCommand = new RelayCommand(this::close);
+ }
+
+ public void setTitle(String title)
+ {
+ this.title.set(title);
+ }
+
+ public void setMessage(String message)
+ {
+ this.message.set(message);
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java
index 5924c17d9..07bb16ecc 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java
@@ -279,6 +279,7 @@ public class AndroidNavigationProvider extends ExtendedObject implements INaviga
{
Class cls = Class.forName(activityName);
Intent intent = new Intent(context, cls);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (!addToHistory)
{
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationActivity.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationActivity.java
index b03f688bc..760e0f8b6 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationActivity.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationActivity.java
@@ -4,4 +4,5 @@ public enum NavigationActivity
{
Loading,
Main,
+ SendToEmail,
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationFragment.java
index 07474ec3e..0731287e8 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationFragment.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/NavigationFragment.java
@@ -8,5 +8,8 @@ public enum NavigationFragment
@PreventHistory
Register,
@PreventHistory
- SendToMachine
+ SendToMachine,
+ @PreventHistory
+ Rename
+
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/TabState.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/TabState.java
new file mode 100644
index 000000000..2682ded78
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/TabState.java
@@ -0,0 +1,8 @@
+package com.twine.colorcapture.navigation;
+
+public enum TabState
+{
+ Capture,
+ MyColors,
+ More
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/TabStateManager.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/TabStateManager.java
new file mode 100644
index 000000000..89156af17
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/TabStateManager.java
@@ -0,0 +1,25 @@
+package com.twine.colorcapture.navigation;
+
+import com.twine.colorcapture.mvvm.DependencyProperty;
+
+public class TabStateManager
+{
+ private static TabStateManager instance;
+
+ public DependencyProperty<TabState> state;
+
+ public static TabStateManager getInstance()
+ {
+ if (instance == null)
+ {
+ instance = new TabStateManager();
+ }
+
+ return instance;
+ }
+
+ public TabStateManager()
+ {
+ state = new DependencyProperty<>(TabState.Capture);
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/AndroidNotificationProvider.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/AndroidNotificationProvider.java
index 307fc5edf..528bea2e2 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/AndroidNotificationProvider.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/AndroidNotificationProvider.java
@@ -9,6 +9,8 @@ import android.widget.Toast;
import com.twine.colorcapture.core.IAction;
import com.twine.colorcapture.core.IAction1;
+import com.twine.colorcapture.dialogs.confirm.ConfirmDialog;
+import com.twine.colorcapture.dialogs.confirm.ConfirmDialogVM;
import com.twine.colorcapture.dialogs.error.ErrorDialog;
import com.twine.colorcapture.dialogs.error.ErrorDialogVM;
import com.twine.colorcapture.dialogs.progress.ProgressDialog;
@@ -153,6 +155,34 @@ public class AndroidNotificationProvider implements INotificationProvider
}
@Override
+ public void showConfirm(String title, String message,String confirmText, IAction1<ConfirmDialogVM> onDismiss)
+ {
+ closeDialog();
+ ConfirmDialog dialog = new ConfirmDialog();
+ dialog.inject();
+
+ lastDialog = dialog;
+ FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
+ Fragment prev = activity.getFragmentManager().findFragmentByTag("dialog");
+ if (prev != null) {
+ ft.remove(prev);
+ }
+ ft.addToBackStack(null);
+
+ dialog.setOnDismissListener(onDismiss);
+
+ //show the dialog.
+ dialog.show(ft, "dialog");
+
+ ConfirmDialogVM vm = dialog.getVM();
+
+ vm.setConfirmed(false);
+ vm.setTitle(title);
+ vm.setMessage(message);
+ vm.setConfirmText(confirmText);
+ }
+
+ @Override
public void closeDialog()
{
if (lastDialog != null)
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/INotificationProvider.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/INotificationProvider.java
index b1295a8b4..121ce0919 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/INotificationProvider.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/notification/INotificationProvider.java
@@ -4,6 +4,7 @@ import android.app.Activity;
import com.twine.colorcapture.core.IAction;
import com.twine.colorcapture.core.IAction1;
+import com.twine.colorcapture.dialogs.confirm.ConfirmDialogVM;
import com.twine.colorcapture.dialogs.error.ErrorDialogVM;
import com.twine.colorcapture.dialogs.progress.ProgressDialogVM;
import com.twine.colorcapture.dialogs.success.SuccessDialog;
@@ -37,6 +38,7 @@ public interface INotificationProvider
/**
* Displays a progress dialog...
+ *
* @param title
* @param message
*/
@@ -44,6 +46,7 @@ public interface INotificationProvider
/**
* Displays a success dialog.
+ *
* @param title
* @param message
* @param onDismiss
@@ -52,6 +55,7 @@ public interface INotificationProvider
/**
* Displays an error dialog.
+ *
* @param title
* @param message
* @param onDismiss
@@ -59,6 +63,15 @@ public interface INotificationProvider
void showError(String title, String message, IAction1<ErrorDialogVM> onDismiss);
/**
+ * Displays a confirmation dialog.
+ *
+ * @param title
+ * @param message
+ * @param onDismiss
+ */
+ void showConfirm(String title, String message, String confirmText, IAction1<ConfirmDialogVM> onDismiss);
+
+ /**
* Closes the last dialog.
*/
void closeDialog();
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/settings/SettingsManager.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/settings/SettingsManager.java
new file mode 100644
index 000000000..b90f11a13
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/settings/SettingsManager.java
@@ -0,0 +1,96 @@
+package com.twine.colorcapture.settings;
+
+import android.content.SharedPreferences;
+
+import com.google.gson.Gson;
+import com.twine.colorcapture.logging.LogManager;
+import com.twine.colorcapture.models.ColorResult;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static android.content.Context.MODE_PRIVATE;
+import static com.twine.colorcapture.App.getContext;
+
+public class SettingsManager
+{
+ private static final String SETTINGS_FILE_NAME = "TCC_Settings";
+ private static SettingsManager instance;
+ private boolean isWelcomeScreenShown;
+ private List<ColorResult> results;
+
+ public boolean isWelcomeScreenShown()
+ {
+ return isWelcomeScreenShown;
+ }
+
+ public void setWelcomeScreenShown(boolean welcomeScreenShown)
+ {
+ isWelcomeScreenShown = welcomeScreenShown;
+ }
+
+ public List<ColorResult> getResults()
+ {
+ return results;
+ }
+
+ public static SettingsManager getInstance()
+ {
+ if (instance == null)
+ {
+ instance = load();
+ }
+
+ return instance;
+ }
+
+ public static void save()
+ {
+ try
+ {
+ LogManager.log("Saving settings...");
+ Gson gson = new Gson();
+ String value = gson.toJson(getInstance());
+ SharedPreferences.Editor editor = getContext().getSharedPreferences(SETTINGS_FILE_NAME, MODE_PRIVATE).edit();
+ editor.putString("settings", value);
+ editor.apply();
+
+ LogManager.log("Settings:", getInstance());
+ }
+ catch (Exception ex)
+ {
+ LogManager.log(ex, "Error saving settings.");
+ }
+ }
+
+ private static SettingsManager load()
+ {
+ SettingsManager result = new SettingsManager();
+
+ try
+ {
+ LogManager.log("Loading settings...");
+ SharedPreferences prefs = getContext().getSharedPreferences(SETTINGS_FILE_NAME, MODE_PRIVATE);
+ String value = prefs.getString("settings", null);
+
+ if (value != null)
+ {
+ Gson gson = new Gson();
+ result = gson.fromJson(value, SettingsManager.class);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.log(ex, "Error loading settings.");
+ }
+
+ LogManager.log("Settings:", result);
+
+ return result;
+ }
+
+ public SettingsManager()
+ {
+ results = new ArrayList<>();
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java
index b043bef9f..c0b89fba8 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java
@@ -8,12 +8,16 @@ import com.squareup.otto.Bus;
import com.twine.colorcapture.core.Task.TaskBuilder;
import com.twine.colorcapture.dialogs.processing.ProcessingDialog;
import com.twine.colorcapture.dialogs.welcome.WelcomeDialog;
+import com.twine.colorcapture.models.ColorResult;
import com.twine.colorcapture.mvvm.DependencyProperty;
import com.twine.colorcapture.mvvm.ViewModelBase;
import com.twine.colorcapture.navigation.INavigationProvider;
import com.twine.colorcapture.navigation.NavigationFragment;
+import com.twine.colorcapture.navigation.TabState;
+import com.twine.colorcapture.navigation.TabStateManager;
import com.twine.colorcapture.notification.INotificationProvider;
import com.twine.colorcapture.opencv.ImageProcessor;
+import com.twine.colorcapture.settings.SettingsManager;
import com.twine.colorcapture.utils.ThreadingUtils;
import com.twine.colorcapture.views.capture.ICaptureFragment.ICaptureFragmentListener;
import com.twine.colorcapture.web.ITCCService;
@@ -24,6 +28,11 @@ import com.yanzhenjie.zbar.ImageScanner;
import com.yanzhenjie.zbar.Symbol;
import com.yanzhenjie.zbar.SymbolSet;
+import org.joda.time.LocalDateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import java.util.Locale;
import java.util.concurrent.atomic.AtomicBoolean;
public class CaptureFragmentVM extends ViewModelBase<ICaptureFragment> implements ICaptureFragmentListener
@@ -42,7 +51,6 @@ public class CaptureFragmentVM extends ViewModelBase<ICaptureFragment> implement
private DefinitionResponse definition;
private INavigationProvider navigationProvider;
private INotificationProvider notificationProvider;
- private boolean startDialogShown;
private boolean preventDetection;
private Bus eventBus;
@@ -161,8 +169,17 @@ public class CaptureFragmentVM extends ViewModelBase<ICaptureFragment> implement
if (!abort.get())
{
+ LocalDateTime date = LocalDateTime.now();
+ DateTimeFormatter fmt = DateTimeFormat.forPattern("d MMMM, yyyy, hh:mm:ss").withLocale(Locale.ENGLISH);
+ String name = date.toString(fmt);
+
+ ColorResult colorResult = new ColorResult(response, date.toString(), name);
+
+ SettingsManager.getInstance().getResults().add(colorResult);
+ SettingsManager.save();
+
notificationProvider.closeDialog();
- navigationProvider.navigateWithObjectTo(NavigationFragment.Result, true, false, response);
+ navigationProvider.navigateWithObjectTo(NavigationFragment.Result, true, false, colorResult);
}
else
{
@@ -203,18 +220,22 @@ public class CaptureFragmentVM extends ViewModelBase<ICaptureFragment> implement
protected void onNavigatedTo()
{
super.onNavigatedTo();
+ TabStateManager.getInstance().state.set(TabState.Capture);
preventDetection = false;
- if (!startDialogShown)
- {
- startDialogShown = true;
+ boolean showDialog = !SettingsManager.getInstance().isWelcomeScreenShown();
+ if (showDialog)
+ {
notificationProvider.showDialog(new WelcomeDialog(), (vm) ->
{
isCardDetected.set(false);
view.startCamera();
});
+
+ SettingsManager.getInstance().setWelcomeScreenShown(true);
+ SettingsManager.save();
}
else
{
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/IMainActivity.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/IMainActivity.java
index 866a0ece7..0835d4eef 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/IMainActivity.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/IMainActivity.java
@@ -4,4 +4,5 @@ import com.twine.colorcapture.mvvm.IView;
public interface IMainActivity extends IView
{
+ void cloneMenu();
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java
index e0eaca38c..f40b78a4b 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java
@@ -10,6 +10,7 @@ import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.ImageButton;
import android.widget.LinearLayout;
import com.twine.colorcapture.App;
@@ -38,7 +39,7 @@ public class MainActivity extends ActivityBase<ActivityMainBinding, MainActivity
public INotificationProvider notificationProvider;
@BindView(R.id.btnMenu)
- ToggleImageButton btnMenu;
+ ImageButton btnMenu;
@BindView(R.id.header)
LinearLayout frameHeader;
@@ -125,4 +126,10 @@ public class MainActivity extends ActivityBase<ActivityMainBinding, MainActivity
navigationProvider.reset();
super.onDestroy();
}
+
+ @Override
+ public void cloneMenu()
+ {
+ drawerLayout.closeDrawer(Gravity.START);
+ }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java
index b579a3e9f..23f3e3868 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivityVM.java
@@ -4,9 +4,12 @@ import com.squareup.otto.Bus;
import com.twine.colorcapture.dialogs.welcome.WelcomeDialog;
import com.twine.colorcapture.integration.ExternalBridgeScanner;
import com.twine.colorcapture.mvvm.DependencyProperty;
+import com.twine.colorcapture.mvvm.RelayCommand;
import com.twine.colorcapture.mvvm.ViewModelBase;
import com.twine.colorcapture.navigation.INavigationProvider;
import com.twine.colorcapture.navigation.NavigationFragment;
+import com.twine.colorcapture.navigation.TabState;
+import com.twine.colorcapture.navigation.TabStateManager;
import com.twine.colorcapture.notification.INotificationProvider;
import javax.inject.Inject;
@@ -24,86 +27,73 @@ public class MainActivityVM extends ViewModelBase<IMainActivity>
private INotificationProvider notificationProvider;
private CurrentTab currentTab;
- public DependencyProperty<Boolean> isMoreToggled;
- public DependencyProperty<Boolean> isCaptureToggled;
- public DependencyProperty<Boolean> isMyColorsToggled;
+ public TabStateManager tabStateManager;
+
+ public RelayCommand captureCommand;
+ public RelayCommand myColorsCommand;
+ public RelayCommand moreCommand;
+
+ public RelayCommand howToUseCommand;
@Inject
public MainActivityVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider)
{
+ tabStateManager = TabStateManager.getInstance();
+
this.navigationProvider = navigationProvider;
this.notificationProvider = notificationProvider;
- isMoreToggled = new DependencyProperty<Boolean>(false, this::onMoreToggled);
- isCaptureToggled = new DependencyProperty<Boolean>(false, this::onCaptureToggled);
- isMyColorsToggled = new DependencyProperty<Boolean>(false, this::onMyColorsToggled);
currentTab = CurrentTab.Capture;
- setCurrentTab(currentTab);
navigationProvider.addFragmentNavigationListener(this::onNavigation);
+
+ howToUseCommand = new RelayCommand(this::handleHowToUseCommand);
+
+ captureCommand = new RelayCommand(this::handleCaptureCommand);
+ myColorsCommand = new RelayCommand(this::handleMyColorsCommand);
+ moreCommand = new RelayCommand(this::handleMoreCommand);
}
- private void onNavigation(NavigationFragment navigationFragment)
+ private void handleMoreCommand()
+ {
+
+ }
+
+ private void handleMyColorsCommand()
{
- if (navigationFragment == NavigationFragment.Capture || navigationFragment == NavigationFragment.Result && currentTab != CurrentTab.Capture)
+ if (navigationProvider.getCurrentFragment() != NavigationFragment.MyColors)
{
- isMoreToggled.setNoCallback(false);
- isMyColorsToggled.setNoCallback(false);
- isCaptureToggled.setNoCallback(true);
+ navigationProvider.navigateTo(NavigationFragment.MyColors, true, false);
}
}
- @Override
- protected void onViewAttached(IMainActivity view)
+ private void handleCaptureCommand()
{
- super.onViewAttached(view);
+ if (navigationProvider.getCurrentFragment() != NavigationFragment.Capture)
+ {
+ navigationProvider.navigateTo(NavigationFragment.Capture, false, true);
+ }
}
- private void onMyColorsToggled(DependencyProperty<Boolean> booleanDependencyProperty, Boolean value)
+ @Override
+ protected void onNavigatedTo()
{
- setCurrentTab(CurrentTab.MyColors);
+ super.onNavigatedTo();
+ tabStateManager.state.set(TabState.Capture);
}
- private void onCaptureToggled(DependencyProperty<Boolean> booleanDependencyProperty, Boolean value)
+ private void handleHowToUseCommand()
{
- setCurrentTab(CurrentTab.Capture);
+ view.cloneMenu();
+ notificationProvider.showDialog(new WelcomeDialog(), (vm) -> { });
}
- private void onMoreToggled(DependencyProperty<Boolean> booleanDependencyProperty, Boolean value)
+ private void onNavigation(NavigationFragment navigationFragment)
{
- setCurrentTab(CurrentTab.More);
+
}
- private void setCurrentTab(CurrentTab tab)
+ @Override
+ protected void onViewAttached(IMainActivity view)
{
- currentTab = tab;
-
- if (tab == CurrentTab.More)
- {
- if (isMoreToggled.get())
- {
- isCaptureToggled.setNoCallback(false);
- isMyColorsToggled.setNoCallback(false);
- }
- isMoreToggled.setNoCallback(true);
- }
- else if (tab == CurrentTab.Capture)
- {
- if (isCaptureToggled.get())
- {
- isMoreToggled.setNoCallback(false);
- isMyColorsToggled.setNoCallback(false);
- navigationProvider.navigateTo(NavigationFragment.Capture, false, true);
- }
- isCaptureToggled.setNoCallback(true);
- }
- else if (tab == CurrentTab.MyColors)
- {
- if (isMyColorsToggled.get())
- {
- isMoreToggled.setNoCallback(false);
- isCaptureToggled.setNoCallback(false);
- navigationProvider.navigateTo(NavigationFragment.MyColors, true, false);
- }
- isMyColorsToggled.setNoCallback(true);
- }
+ super.onViewAttached(view);
}
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/mycolors/MyColorsFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/mycolors/MyColorsFragmentVM.java
index 9a2358516..6b0fc7b27 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/mycolors/MyColorsFragmentVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/mycolors/MyColorsFragmentVM.java
@@ -1,17 +1,83 @@
package com.twine.colorcapture.views.mycolors;
+import android.databinding.ObservableArrayList;
+import android.databinding.ObservableList;
+import android.view.View;
+import android.widget.AdapterView;
+
+import com.twine.colorcapture.BR;
+import com.twine.colorcapture.R;
+import com.twine.colorcapture.integration.ExternalBridgeMachine;
+import com.twine.colorcapture.logging.LogManager;
+import com.twine.colorcapture.models.ColorResult;
+import com.twine.colorcapture.models.ColorResultVM;
import com.twine.colorcapture.mvvm.ViewModelBase;
import com.twine.colorcapture.navigation.INavigationProvider;
+import com.twine.colorcapture.navigation.NavigationFragment;
+import com.twine.colorcapture.navigation.TabState;
+import com.twine.colorcapture.navigation.TabStateManager;
+import com.twine.colorcapture.notification.INotificationProvider;
+import com.twine.colorcapture.settings.SettingsManager;
+
+import java.util.Collections;
import javax.inject.Inject;
+import me.tatarka.bindingcollectionadapter2.ItemBinding;
+
+import static br.com.zbra.androidlinq.Linq.stream;
+
public class MyColorsFragmentVM extends ViewModelBase<IMyColorsFragment>
{
private INavigationProvider navigationProvider;
-
+ private INotificationProvider notificationProvider;
+ public ObservableList<ColorResultVM> results;
+ public ItemBinding<String> resultBinding;
+
@Inject
- public MyColorsFragmentVM(INavigationProvider navigationProvider)
+ public MyColorsFragmentVM(INavigationProvider navigationProvider, INotificationProvider notificationProvider)
{
+ this.notificationProvider = notificationProvider;
this.navigationProvider = navigationProvider;
+
+ results = new ObservableArrayList<>();
+ resultBinding = ItemBinding.of(BR.result, R.layout.color_result_item);
+ }
+
+ public void onResultSelected(AdapterView<?> adapterView, View view, int i, long l)
+ {
+ ColorResultVM colorResultVM = (ColorResultVM) adapterView.getAdapter().getItem(i);
+ navigationProvider.navigateWithObjectTo(NavigationFragment.Result, true, false, colorResultVM.getResult());
+ }
+
+ @Override
+ protected void onNavigatedTo()
+ {
+ super.onNavigatedTo();
+
+ TabStateManager.getInstance().state.set(TabState.MyColors);
+
+ results.clear();
+
+ for (ColorResult result : stream(SettingsManager.getInstance().getResults()).reverse())
+ {
+ ColorResultVM vm = new ColorResultVM();
+ vm.setResult(result);
+ results.add(vm);
+ vm.setOnDeleteListener(this::onResultDeleted);
+ }
+ }
+
+ private void onResultDeleted(ColorResultVM colorResultVM)
+ {
+ notificationProvider.showConfirm("Delete color", "Are you sure you want to delete the selected color?", "Delete", (vm) ->
+ {
+ if (vm.isConfirmed())
+ {
+ results.remove(colorResultVM);
+ SettingsManager.getInstance().getResults().remove(colorResultVM.getResult());
+ SettingsManager.save();
+ }
+ });
}
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragmentVM.java
index 3641e89ee..3002bf243 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragmentVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/register/RegisterFragmentVM.java
@@ -81,7 +81,7 @@ public class RegisterFragmentVM extends ViewModelBase<IResultFragment>
catch (Exception ex)
{
pVM.close();
- //TODO: display error message!
+ notificationProvider.showError("Registering your system","Device registration failed.\nPlease check your serial number.",(e) -> {});
Log.i("REGISTER", ex.getMessage());
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/rename/IRenameFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/rename/IRenameFragment.java
new file mode 100644
index 000000000..9cd9e9a54
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/rename/IRenameFragment.java
@@ -0,0 +1,7 @@
+package com.twine.colorcapture.views.rename;
+
+import com.twine.colorcapture.mvvm.IView;
+
+public interface IRenameFragment extends IView
+{
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/rename/RenameFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/rename/RenameFragment.java
new file mode 100644
index 000000000..228ccd66d
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/rename/RenameFragment.java
@@ -0,0 +1,62 @@
+package com.twine.colorcapture.views.rename;
+
+import android.content.Context;
+import android.databinding.Bindable;
+import android.support.v7.widget.AppCompatEditText;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+
+import com.twine.colorcapture.App;
+import com.twine.colorcapture.R;
+import com.twine.colorcapture.databinding.FragmentRenameBinding;
+import com.twine.colorcapture.mvvm.FragmentBase;
+
+import butterknife.BindView;
+
+public class RenameFragment extends FragmentBase<FragmentRenameBinding, RenameFragmentVM>
+{
+ @BindView(R.id.txtName)
+ public AppCompatEditText txtName;
+
+ @Override
+ protected int getLayoutId()
+ {
+ return R.layout.fragment_rename;
+ }
+
+ @Override
+ protected void inject()
+ {
+ App.getComponent().inject(this);
+ }
+
+ @Override
+ public String getTitle()
+ {
+ return "Rename";
+ }
+
+ @Override
+ protected void onCreated()
+ {
+ super.onCreated();
+
+ InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
+ txtName.requestFocus();
+ txtName.selectAll();
+ imgr.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS);
+ }
+
+ @Override
+ public void onPause()
+ {
+ super.onPause();
+
+ // Check if no view has focus:
+ View view = getActivity().getCurrentFocus();
+ if (view != null) {
+ InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
+ inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+ }
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/rename/RenameFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/rename/RenameFragmentVM.java
new file mode 100644
index 000000000..e860d0aac
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/rename/RenameFragmentVM.java
@@ -0,0 +1,50 @@
+package com.twine.colorcapture.views.rename;
+
+import com.twine.colorcapture.models.ColorResult;
+import com.twine.colorcapture.models.ColorResultVM;
+import com.twine.colorcapture.mvvm.DependencyProperty;
+import com.twine.colorcapture.mvvm.RelayCommand;
+import com.twine.colorcapture.mvvm.ViewModelBase;
+import com.twine.colorcapture.navigation.INavigationObjectReceiver;
+import com.twine.colorcapture.navigation.INavigationProvider;
+import com.twine.colorcapture.navigation.TabState;
+import com.twine.colorcapture.navigation.TabStateManager;
+import com.twine.colorcapture.settings.SettingsManager;
+
+public class RenameFragmentVM extends ViewModelBase<IRenameFragment> implements INavigationObjectReceiver<ColorResult>
+{
+ private INavigationProvider navigationProvider;
+
+ public DependencyProperty<ColorResult> colorResult;
+ public DependencyProperty<String> name;
+ public RelayCommand renameCommand;
+
+ public RenameFragmentVM(INavigationProvider navigationProvider)
+ {
+ this.navigationProvider = navigationProvider;
+ colorResult = new DependencyProperty<>();
+ renameCommand = new RelayCommand(this::handleRenameCommand);
+ name = new DependencyProperty<>("");
+ }
+
+ private void handleRenameCommand()
+ {
+ colorResult.get().setName(name.get());
+ SettingsManager.save();
+ navigationProvider.navigateBack();
+ }
+
+ @Override
+ protected void onNavigatedTo()
+ {
+ super.onNavigatedTo();
+ TabStateManager.getInstance().state.set(TabState.MyColors);
+ }
+
+ @Override
+ public void onNavigationObjectReceived(ColorResult colorResult)
+ {
+ this.colorResult.set(colorResult);
+ this.name.set(colorResult.getName());
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragmentVM.java
index 2e5639154..2e58e2777 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragmentVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/result/ResultFragmentVM.java
@@ -5,19 +5,34 @@ import android.util.Log;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
import com.twine.colorcapture.messages.MachineRegisteredMessage;
+import com.twine.colorcapture.models.ColorResult;
+import com.twine.colorcapture.models.ColorResultVM;
import com.twine.colorcapture.mvvm.DependencyProperty;
import com.twine.colorcapture.mvvm.RelayCommand;
import com.twine.colorcapture.mvvm.ViewModelBase;
import com.twine.colorcapture.navigation.INavigationObjectReceiver;
import com.twine.colorcapture.navigation.INavigationProvider;
+import com.twine.colorcapture.navigation.NavigationActivity;
import com.twine.colorcapture.navigation.NavigationFragment;
+import com.twine.colorcapture.navigation.TabState;
+import com.twine.colorcapture.navigation.TabStateManager;
+import com.twine.colorcapture.settings.SettingsManager;
+import com.twine.colorcapture.web.ITCCService;
import com.twine.colorcapture.web.messages.DetectionResponse;
+import org.joda.time.LocalDateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import java.util.Locale;
+
import javax.inject.Inject;
-public class ResultFragmentVM extends ViewModelBase<IResultFragment> implements INavigationObjectReceiver<DetectionResponse>
+public class ResultFragmentVM extends ViewModelBase<IResultFragment> implements INavigationObjectReceiver<ColorResult>
{
private INavigationProvider navigationProvider;
+ private ITCCService tccService;
+ public ColorResult colorResult;
public DependencyProperty<Boolean> isCameraColorToggled;
public DependencyProperty<DetectionResponse> detectionResponse;
@@ -28,10 +43,12 @@ public class ResultFragmentVM extends ViewModelBase<IResultFragment> implements
public RelayCommand sendToMachineCommand;
public RelayCommand registerMachineCommand;
+
@Inject
- public ResultFragmentVM(Bus eventBus, INavigationProvider navigationProvider)
+ public ResultFragmentVM(Bus eventBus, INavigationProvider navigationProvider, ITCCService tccService)
{
this.navigationProvider = navigationProvider;
+ this.tccService = tccService;
isCameraColorToggled = new DependencyProperty<>(false);
isMachineRegistred = new DependencyProperty<>(false);
@@ -63,11 +80,12 @@ public class ResultFragmentVM extends ViewModelBase<IResultFragment> implements
private void handleRenameCommand()
{
+ navigationProvider.navigateWithObjectTo(NavigationFragment.Rename, true, false, colorResult);
}
private void handleEmailCommand()
{
- Log.d("RESULT", "handleEmailCommand: ");
+ navigationProvider.navigateTo(NavigationActivity.SendToEmail, false);
}
private void toggleCameraColor()
@@ -76,8 +94,24 @@ public class ResultFragmentVM extends ViewModelBase<IResultFragment> implements
}
@Override
- public void onNavigationObjectReceived(DetectionResponse detectionResponse)
+ public void onNavigationObjectReceived(ColorResult colorResult)
+ {
+ this.colorResult = colorResult;
+ this.detectionResponse.set(colorResult.getDetectionResponse());
+ }
+
+ @Override
+ protected void onNavigatedTo()
{
- this.detectionResponse.set(detectionResponse);
+ super.onNavigatedTo();
+
+ try
+ {
+ isMachineRegistred.set(tccService.getDefinition().isRegistered());
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
}
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/ISendToEmailActivity.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/ISendToEmailActivity.java
new file mode 100644
index 000000000..980d2eb49
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/ISendToEmailActivity.java
@@ -0,0 +1,7 @@
+package com.twine.colorcapture.views.sendtoemail;
+
+import com.twine.colorcapture.mvvm.IView;
+
+public interface ISendToEmailActivity extends IView
+{
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivity.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivity.java
new file mode 100644
index 000000000..d886de513
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivity.java
@@ -0,0 +1,30 @@
+package com.twine.colorcapture.views.sendtoemail;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import com.twine.colorcapture.App;
+import com.twine.colorcapture.R;
+import com.twine.colorcapture.databinding.ActivitySendToEmailBinding;
+import com.twine.colorcapture.mvvm.ActivityBase;
+
+public class SendToEmailActivity extends ActivityBase<ActivitySendToEmailBinding, SendToEmailActivityVM> implements ISendToEmailActivity
+{
+ @Override
+ protected void onCreating(Bundle savedInstanceState)
+ {
+
+ }
+
+ @Override
+ protected int getLayoutId()
+ {
+ return R.layout.activity_send_to_email;
+ }
+
+ @Override
+ protected void inject()
+ {
+ App.getComponent().inject(this);
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivityVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivityVM.java
new file mode 100644
index 000000000..77467fff4
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtoemail/SendToEmailActivityVM.java
@@ -0,0 +1,21 @@
+package com.twine.colorcapture.views.sendtoemail;
+
+import com.twine.colorcapture.models.ColorResult;
+import com.twine.colorcapture.mvvm.RelayCommand;
+import com.twine.colorcapture.mvvm.ViewModelBase;
+
+public class SendToEmailActivityVM extends ViewModelBase<ISendToEmailActivity>
+{
+ public RelayCommand sendCommand;
+ public ColorResult colorResult;
+
+ public SendToEmailActivityVM()
+ {
+ sendCommand = new RelayCommand(this::handleSendCommand);
+ }
+
+ private void handleSendCommand()
+ {
+
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java
index 0d415b498..a51d0eb71 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/sendtomachine/SendToMachineFragmentVM.java
@@ -2,8 +2,6 @@ package com.twine.colorcapture.views.sendtomachine;
import android.databinding.ObservableArrayList;
import android.databinding.ObservableList;
-import android.os.Handler;
-import android.os.Looper;
import android.view.View;
import android.widget.AdapterView;
@@ -16,6 +14,7 @@ import com.twine.colorcapture.mvvm.ViewModelBase;
import com.twine.colorcapture.navigation.INavigationObjectReceiver;
import com.twine.colorcapture.navigation.INavigationProvider;
import com.twine.colorcapture.notification.INotificationProvider;
+import com.twine.colorcapture.web.ITCCService;
import com.twine.colorcapture.web.messages.DetectionColor;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -24,21 +23,25 @@ import javax.inject.Inject;
import me.tatarka.bindingcollectionadapter2.ItemBinding;
+import static br.com.zbra.androidlinq.Linq.stream;
+
public class SendToMachineFragmentVM extends ViewModelBase<ISendToMachineFragment> implements INavigationObjectReceiver<DetectionColor>
{
private ExternalBridgeScanner scanner;
private DetectionColor detectionColor;
private INotificationProvider notificationProvider;
private INavigationProvider navigationProvider;
+ private ITCCService tccService;
public ObservableList<ExternalBridgeMachine> machines;
public ItemBinding<String> machineBinding;
@Inject
- public SendToMachineFragmentVM(INotificationProvider notificationProvider, INavigationProvider navigationProvider)
+ public SendToMachineFragmentVM(INotificationProvider notificationProvider, INavigationProvider navigationProvider, ITCCService tccService)
{
this.notificationProvider = notificationProvider;
this.navigationProvider = navigationProvider;
+ this.tccService = tccService;
machines = new ObservableArrayList<>();
scanner = new ExternalBridgeScanner();
@@ -50,18 +53,24 @@ public class SendToMachineFragmentVM extends ViewModelBase<ISendToMachineFragmen
private void onMachineDisconnected(Object o, ExternalBridgeMachine machine)
{
- invokeUI(() ->
+ if (stream(tccService.getOrganizationMachines()).any(x -> x.equals(machine.getSerialNumber())))
{
- machines.remove(machine);
- });
+ invokeUI(() ->
+ {
+ machines.remove(machine);
+ });
+ }
}
private void onMachineDiscovered(Object o, ExternalBridgeMachine machine)
{
- invokeUI(() ->
+ if (stream(tccService.getOrganizationMachines()).any(x -> x.equals(machine.getSerialNumber())))
{
- machines.add(0, machine);
- });
+ invokeUI(() ->
+ {
+ machines.add(0, machine);
+ });
+ }
}
@Override
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/ITCCService.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/ITCCService.java
index feefe86f8..362abe121 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/ITCCService.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/ITCCService.java
@@ -8,6 +8,7 @@ import com.twine.colorcapture.web.messages.DetectionResponse;
import com.twine.colorcapture.web.messages.MachineRegistrationResponse;
import java.io.IOException;
+import java.util.List;
public interface ITCCService
{
@@ -16,4 +17,8 @@ public interface ITCCService
DetectionResponse detect(Bitmap bitmap, String barcode) throws Exception;
MachineRegistrationResponse register(String serialNumber) throws Exception;
+
+ boolean isRegistered();
+
+ List<String> getOrganizationMachines();
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/TCCService.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/TCCService.java
index 6e03755b8..6999d2f0e 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/TCCService.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/TCCService.java
@@ -7,6 +7,7 @@ import android.provider.Settings;
import android.util.Base64;
import com.twine.colorcapture.BuildConfig;
+import com.twine.colorcapture.logging.LogManager;
import com.twine.colorcapture.utils.BitmapUtils;
import com.twine.colorcapture.web.messages.DefinitionRequest;
import com.twine.colorcapture.web.messages.DefinitionResponse;
@@ -18,6 +19,7 @@ import com.twine.colorcapture.web.messages.MachineRegistrationRequest;
import com.twine.colorcapture.web.messages.MachineRegistrationResponse;
import java.io.IOException;
+import java.util.List;
import java.util.UUID;
import javax.inject.Inject;
@@ -34,6 +36,8 @@ public class TCCService implements ITCCService
private IWebServiceAPI webAPI;
private LoginResponse loginResponse;
private static final String DEVICE_ID_PREF_NAME = "DeviceIdFile";
+ private boolean isRegistered;
+ private List<String> organizationMachines;
@Inject
public TCCService(IWebServiceAPI webServiceAPI)
@@ -44,6 +48,8 @@ public class TCCService implements ITCCService
@Override
public DefinitionResponse getDefinition() throws Exception
{
+ LogManager.log("Retrieving definition...");
+
ensureAuthenticated();
if (definition == null)
@@ -52,11 +58,15 @@ public class TCCService implements ITCCService
if (response.isSuccessful())
{
- definition = webAPI.getDefinition(new DefinitionRequest()).execute().body();
+ definition = response.body();
+ isRegistered = definition.isRegistered();
+ organizationMachines = definition.getOrganizationMachines();
+
+ LogManager.log("Definition retrieved.", definition);
}
else
{
- throw new Exception(response.message());
+ throw LogManager.log(new Exception(response.message()));
}
}
@@ -88,20 +98,30 @@ public class TCCService implements ITCCService
@Override
public MachineRegistrationResponse register(String serialNumber) throws Exception
{
+ LogManager.log("Registering machine...");
+
ensureAuthenticated();
MachineRegistrationRequest request = new MachineRegistrationRequest();
request.setSerialnumber(serialNumber);
+ LogManager.log("Sending machine registration request:", request);
+
Response<MachineRegistrationResponse> response = webAPI.register(request).execute();
if (response.isSuccessful())
{
- return response.body();
+ MachineRegistrationResponse r = response.body();
+
+ LogManager.log("Machine registration successful.", r);
+
+ isRegistered = true;
+ organizationMachines = r.getOrganizationMachines();
+ return r;
}
else
{
- throw new Exception(response.message());
+ throw LogManager.log(new Exception(response.message()), "Machine registration failed.");
}
}
@@ -115,37 +135,57 @@ public class TCCService implements ITCCService
private LoginResponse login() throws Exception
{
+ LogManager.log("Logging in to TCC service...");
+
LoginRequest request = new LoginRequest();
request.setAppId(BuildConfig.WEB_SERVICE_APP_ID);
String deviceId;
+ LogManager.log("Getting device id from shared preferences...");
+
SharedPreferences prefs = getContext().getSharedPreferences(DEVICE_ID_PREF_NAME, MODE_PRIVATE);
deviceId = prefs.getString("DeviceId", null);
if (deviceId == null)
{
+ LogManager.log("Device id was not found in shared preferences. Generating device id...");
deviceId = UUID.randomUUID().toString();
SharedPreferences.Editor editor = getContext().getSharedPreferences(DEVICE_ID_PREF_NAME, MODE_PRIVATE).edit();
editor.putString("DeviceId", deviceId);
editor.apply();
}
+ LogManager.log("Device id: " + deviceId + ".");
+
request.setDeviceId(deviceId);
request.setDevice(Build.MANUFACTURER + " " + Build.MODEL);
request.setOsVersion(Build.VERSION_CODES.class.getFields()[android.os.Build.VERSION.SDK_INT].getName());
+ LogManager.log("Sending log-in request:", request);
+
Response<LoginResponse> response = webAPI.login(request).execute();
if (response.isSuccessful())
{
loginResponse = response.body();
+ LogManager.log("Login response received:", loginResponse);
WebApiFactory.setAuthenticationToken(loginResponse.getAccessToken());
return loginResponse;
}
else
{
- throw new Exception(response.message());
+ throw LogManager.log(new Exception(response.message()), "LogIn request failed.");
}
}
+
+ public boolean isRegistered()
+ {
+ return isRegistered;
+ }
+
+ public List<String> getOrganizationMachines()
+ {
+ return organizationMachines;
+ }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/WebApiFactory.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/WebApiFactory.java
index 3aeaccd14..17c4f2d43 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/WebApiFactory.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/WebApiFactory.java
@@ -3,6 +3,7 @@ package com.twine.colorcapture.web;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import com.twine.colorcapture.logging.LogManager;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
@@ -47,6 +48,7 @@ public class WebApiFactory
/**
* Creates the specified API interface instance.
+ *
* @param cls
* @param timeout
* @param <T>
@@ -55,7 +57,8 @@ public class WebApiFactory
private static <T> T createAPI(Class<?> cls, int timeout)
{
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
- httpClient.addInterceptor(new Interceptor() {
+ httpClient.addInterceptor(new Interceptor()
+ {
@Override
public Response intercept(Chain chain) throws IOException
{
@@ -69,6 +72,7 @@ public class WebApiFactory
{
request = chain.request().newBuilder().build();
}
+
return chain.proceed(request);
}
});
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/DefinitionResponse.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/DefinitionResponse.java
index 2dde27e09..d5da8ffe6 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/DefinitionResponse.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/web/messages/DefinitionResponse.java
@@ -1,5 +1,8 @@
package com.twine.colorcapture.web.messages;
+import java.util.ArrayList;
+import java.util.List;
+
public class DefinitionResponse
{
private String templateString;
@@ -11,6 +14,28 @@ public class DefinitionResponse
private double similarityTolerance;
private boolean enableDoubleChecking;
private boolean enforceBarcodeDetection;
+ private boolean isRegistered;
+ private List<String> organizationMachines;
+
+ public boolean isRegistered()
+ {
+ return isRegistered;
+ }
+
+ public void setRegistered(boolean registered)
+ {
+ isRegistered = registered;
+ }
+
+ public List<String> getOrganizationMachines()
+ {
+ return organizationMachines;
+ }
+
+ public void setOrganizationMachines(List<String> organizationMachines)
+ {
+ this.organizationMachines = organizationMachines;
+ }
public String getTemplateString()
{
@@ -102,4 +127,9 @@ public class DefinitionResponse
{
this.enforceBarcodeDetection = enforceBarcodeDetection;
}
+
+ public DefinitionResponse()
+ {
+ organizationMachines = new ArrayList<>();
+ }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/about.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/about.png
new file mode 100644
index 000000000..69ff01eea
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/about.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/delete_thin.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/delete_thin.png
new file mode 100644
index 000000000..c1a9b62a9
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/delete_thin.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/error.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/error.png
new file mode 100644
index 000000000..bc9aeb86b
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/error.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/how_to.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/how_to.png
new file mode 100644
index 000000000..50aca55cb
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/how_to.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icon_twine_card.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icon_twine_card.png
new file mode 100644
index 000000000..188126db8
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icon_twine_card.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_close.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_close.png
new file mode 100644
index 000000000..89c3b1653
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_close.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_delete.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_delete.png
new file mode 100644
index 000000000..c04a02d4d
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_delete.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/info.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/info.png
new file mode 100644
index 000000000..79a64c487
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/info.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/snapmatch.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/snapmatch.png
new file mode 100644
index 000000000..05656ffdc
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/snapmatch.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/twine_card_icon.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/twine_card_icon.png
new file mode 100644
index 000000000..ec9ae5576
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/twine_card_icon.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/about.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/about.png
new file mode 100644
index 000000000..65e278cd4
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/about.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/delete_thin.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/delete_thin.png
new file mode 100644
index 000000000..524997a78
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/delete_thin.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/error.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/error.png
new file mode 100644
index 000000000..db3db4966
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/error.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/how_to.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/how_to.png
new file mode 100644
index 000000000..59ba0e181
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/how_to.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icon_twine_card.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icon_twine_card.png
new file mode 100644
index 000000000..bad44f686
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icon_twine_card.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_close.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_close.png
new file mode 100644
index 000000000..4e9940432
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_close.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_delete.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_delete.png
new file mode 100644
index 000000000..e9a9a108e
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_delete.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/info.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/info.png
new file mode 100644
index 000000000..a9bec6997
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/info.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/snapmatch.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/snapmatch.png
new file mode 100644
index 000000000..bbd2be018
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/snapmatch.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/twine_card_icon.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/twine_card_icon.png
new file mode 100644
index 000000000..e7ff93a39
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/twine_card_icon.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/about.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/about.png
new file mode 100644
index 000000000..d5701a483
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/about.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/delete_thin.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/delete_thin.png
new file mode 100644
index 000000000..b6b951c0a
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/delete_thin.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/error.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/error.png
new file mode 100644
index 000000000..41fa3df55
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/error.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/how_to.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/how_to.png
new file mode 100644
index 000000000..fbeb31818
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/how_to.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icon_twine_card.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icon_twine_card.png
new file mode 100644
index 000000000..48e6595fa
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icon_twine_card.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_close.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_close.png
new file mode 100644
index 000000000..f4e9e1c50
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_close.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_delete.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_delete.png
new file mode 100644
index 000000000..55753d24a
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_delete.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/info.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/info.png
new file mode 100644
index 000000000..3e33de5a6
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/info.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/snapmatch.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/snapmatch.png
new file mode 100644
index 000000000..994d77ffe
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/snapmatch.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/twine_card_icon.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/twine_card_icon.png
new file mode 100644
index 000000000..ff3f1c99c
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/twine_card_icon.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/about.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/about.png
new file mode 100644
index 000000000..06fedcd88
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/about.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/delete_thin.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/delete_thin.png
new file mode 100644
index 000000000..f1e190f1c
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/delete_thin.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/error.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/error.png
new file mode 100644
index 000000000..019edf5c7
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/error.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/how_to.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/how_to.png
new file mode 100644
index 000000000..bae6374b6
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/how_to.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icon_twine_card.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icon_twine_card.png
new file mode 100644
index 000000000..e399b466b
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icon_twine_card.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_close.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_close.png
new file mode 100644
index 000000000..91ba9167d
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_close.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_delete.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_delete.png
new file mode 100644
index 000000000..8e54c739c
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_delete.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/info.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/info.png
new file mode 100644
index 000000000..3727e7129
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/info.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/snapmatch.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/snapmatch.png
new file mode 100644
index 000000000..198fb9f6f
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/snapmatch.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/twine_card_icon.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/twine_card_icon.png
new file mode 100644
index 000000000..e8c54a75f
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/twine_card_icon.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/about.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/about.png
new file mode 100644
index 000000000..85234de5d
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/about.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/delete_thin.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/delete_thin.png
new file mode 100644
index 000000000..33b633fcc
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/delete_thin.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/error.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/error.png
new file mode 100644
index 000000000..f386b553d
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/error.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/how_to.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/how_to.png
new file mode 100644
index 000000000..0569f95f7
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/how_to.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icon_twine_card.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icon_twine_card.png
new file mode 100644
index 000000000..589cf908d
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icon_twine_card.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_close.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_close.png
new file mode 100644
index 000000000..f37a9bbbc
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_close.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_delete.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_delete.png
new file mode 100644
index 000000000..ccc594f43
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_delete.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/info.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/info.png
new file mode 100644
index 000000000..07af24775
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/info.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/snapmatch.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/snapmatch.png
new file mode 100644
index 000000000..7bf802396
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/snapmatch.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/twine_card_icon.png b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/twine_card_icon.png
new file mode 100644
index 000000000..e2b2bf09f
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/twine_card_icon.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_main.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_main.xml
index d2e2f89c1..7c55188cc 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_main.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_main.xml
@@ -6,6 +6,7 @@
<data>
<import type="android.view.View" />
+ <import type="com.twine.colorcapture.navigation.TabState"/>
<variable
name="vm"
@@ -34,51 +35,46 @@
android:orientation="horizontal"
android:visibility="visible">
- <com.twine.colorcapture.controls.ToggleImageButton
+ <ImageButton
android:id="@+id/btnMenu"
android:layout_width="68dp"
android:layout_height="65dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
- android:background="@color/colorTransparent"
- bind:normalImage="@drawable/more_normal"
- bind:checkedImage="@drawable/more_selected"
- bind:checked="@={vm.isMoreToggled}"/>
+ android:background="@drawable/button_transparent_fill_ripple"
+ android:src="@{vm.tabStateManager.state == TabState.More ? @drawable/more_selected : @drawable/more_normal}" />
<Space
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
- <com.twine.colorcapture.controls.ToggleImageButton
+ <ImageButton
android:id="@+id/imageButton2"
- android:layout_width="68dp"
+ android:layout_width="72dp"
android:layout_height="65dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
- android:background="@color/colorTransparent"
- bind:normalImage="@drawable/twinesnap_normal"
- bind:checkedImage="@drawable/twinesnap_selected"
- bind:checked="@={vm.isCaptureToggled}"/>
+ android:background="@drawable/button_transparent_fill_ripple"
+ android:src="@{vm.tabStateManager.state == TabState.Capture ? @drawable/twinesnap_selected : @drawable/twinesnap_normal}"
+ bind:command="@{vm.captureCommand}"/>
<Space
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
- <com.twine.colorcapture.controls.ToggleImageButton
+ <ImageButton
android:id="@+id/imageButton3"
android:layout_width="68dp"
android:layout_height="65dp"
android:layout_marginRight="20dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
- android:background="@color/colorTransparent"
- bind:normalImage="@drawable/my_colors"
- bind:checkedImage="@drawable/selected"
- bind:checked="@={vm.isMyColorsToggled}"
- />
+ android:background="@drawable/button_transparent_fill_ripple"
+ android:src="@{vm.tabStateManager.state == TabState.MyColors ? @drawable/selected : @drawable/my_colors}"
+ bind:command="@{vm.myColorsCommand}"/>
</LinearLayout>
<FrameLayout
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_send_to_email.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_send_to_email.xml
new file mode 100644
index 000000000..2e97be0b5
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_send_to_email.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:bind="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <data>
+
+ <variable
+ name="vm"
+ type="com.twine.colorcapture.views.sendtoemail.SendToEmailActivityVM" />
+ </data>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layoutDirection="ltr"
+ tools:context="com.twine.colorcapture.views.sendtoemail.SendToEmailActivity">
+
+ <FrameLayout
+ android:id="@+id/frameTitle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:padding="20dp"
+ android:background="@color/colorPrimaryBackground">
+
+ <android.support.v7.widget.AppCompatTextView
+ android:id="@+id/txtTitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="left|center"
+ android:fontFamily="@font/flexo_bold"
+ android:letterSpacing="0.07"
+ android:text="Share your color"
+ android:textSize="17.3sp" />
+
+ <android.support.v7.widget.AppCompatButton
+ android:id="@+id/btnDone"
+ android:background="@drawable/button_transparent_fill_ripple"
+ android:layout_gravity="right"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="17.3sp"
+ android:letterSpacing="0.07"
+ android:textStyle="bold"
+ android:text="Send"
+ android:layout_marginRight="-10dp"
+ android:fontFamily="@font/flexo_bold"
+ android:textAllCaps="false"
+ bind:command="@{vm.sendCommand}"/>
+
+ </FrameLayout>
+
+ <LinearLayout
+ android:layout_below="@id/frameTitle"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@color/white">
+
+
+
+ </LinearLayout>
+
+ </RelativeLayout>
+</layout>
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/color_result_item.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/color_result_item.xml
new file mode 100644
index 000000000..9be44f3da
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/color_result_item.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:bind="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <data>
+
+ <variable
+ name="result"
+ type="com.twine.colorcapture.models.ColorResultVM" />
+ </data>
+
+ <FrameLayout
+ android:background="@drawable/list_view_selectable"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="20dp"
+ android:orientation="vertical">
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <LinearLayout
+ android:id="@+id/frame"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <com.github.florent37.shapeofview.shapes.RoundRectView
+ android:id="@+id/resultRect"
+ android:layout_width="67dp"
+ android:layout_height="67dp"
+ bind:shape_roundRect_borderColor="@android:color/black"
+ bind:shape_roundRect_borderWidth="0dp"
+ bind:shape_roundRect_bottomLeftRadius="5dp"
+ bind:shape_roundRect_bottomRightRadius="5dp"
+ bind:shape_roundRect_topLeftRadius="5dp"
+ bind:shape_roundRect_topRightRadius="5dp">
+
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:background="@color/colorAccent"
+ android:background="@{result.result.detectionResponse.getProcessedColor().getColor()}" />
+
+ </com.github.florent37.shapeofview.shapes.RoundRectView>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="5dp">
+
+ <android.support.v7.widget.AppCompatTextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_marginTop="5dp"
+ android:fontFamily="@font/flexo_medium"
+ android:letterSpacing="0.07"
+ android:text="@{result.result.name}"
+ android:textSize="15.4sp"
+ tools:text="Nike 100" />
+
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="10dp"
+ android:orientation="horizontal">
+
+ <android.support.v7.widget.AppCompatTextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:fontFamily="@font/flexo_light"
+ android:letterSpacing="0.07"
+ android:text="RGB:"
+ android:textSize="15.4sp" />
+
+ <android.support.v7.widget.AppCompatTextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:fontFamily="@font/flexo_light"
+ android:letterSpacing="0.07"
+ android:layout_marginLeft="5dp"
+ android:text="@{result.result.detectionResponse.getProcessedColor().toString()}"
+ tools:text="200, 100, 0"
+ android:textSize="15.4sp" />
+ </LinearLayout>
+ </LinearLayout>
+ </LinearLayout>
+ </RelativeLayout>
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="2dp"
+ android:layout_marginLeft="2dp"
+ android:layout_marginTop="20dp"
+ android:layout_marginRight="2dp"
+ android:background="@color/white" />
+ </LinearLayout>
+
+ <FrameLayout
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:layout_gravity="right|center"
+ android:layout_marginRight="10dp"
+ android:layout_marginBottom="10dp">
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:src="@drawable/delete_thin" />
+
+ <Button
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:focusable="false"
+ android:focusableInTouchMode="false"
+ bind:command="@{result.deleteCommand}"
+ android:background="@drawable/button_transparent_fill_ripple" />
+
+ </FrameLayout>
+ </FrameLayout>
+</layout> \ No newline at end of file
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_confirm.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_confirm.xml
new file mode 100644
index 000000000..1bad9d630
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_confirm.xml
@@ -0,0 +1,87 @@
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:bind="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <data>
+
+ <variable
+ name="vm"
+ type="com.twine.colorcapture.dialogs.confirm.ConfirmDialogVM" />
+ </data>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/colorBlueMask">
+
+ <RelativeLayout
+ android:layout_width="313.9dp"
+ android:layout_height="202.6dp"
+ android:layout_centerVertical="true"
+ android:layout_centerHorizontal="true"
+ android:elevation="10dp"
+ android:background="@drawable/border_primary_background">
+
+ <FrameLayout
+ android:layout_width="40dp"
+ android:layout_alignParentRight="true"
+ android:layout_height="40dp">
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:src="@drawable/icons_close"/>
+
+ <Button
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ bind:command="@{vm.closeCommand}"
+ android:background="@drawable/button_transparent_fill_ripple"/>
+ </FrameLayout>
+
+
+ <android.support.v7.widget.AppCompatTextView
+ android:id="@+id/txtTitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerHorizontal="true"
+ android:layout_marginTop="15dp"
+ android:fontFamily="@font/flexo_bold"
+ android:gravity="center"
+ android:letterSpacing="0.07"
+ android:textSize="13.4sp"
+ tools:text="Error title"
+ android:text="@{vm.title}" />
+
+
+ <android.support.v7.widget.AppCompatTextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/txtTitle"
+ android:layout_centerHorizontal="true"
+ android:layout_marginTop="20dp"
+ android:fontFamily="@font/flexo_light"
+ android:gravity="center"
+ android:letterSpacing="0.07"
+ android:textSize="13.4sp"
+ tools:text="Success message"
+ android:text="@{vm.message}"/>
+
+ <com.twine.colorcapture.controls.CircleActionButton
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_marginLeft="20dp"
+ android:layout_marginRight="20dp"
+ android:layout_marginBottom="20dp"
+ bind:text="@{vm.confirmText}"
+ bind:command="@{vm.confirmCommand}"
+ tools:text="Delete"
+ bind:textSize="15.3sp"
+ bind:src="@drawable/icons_delete"
+ android:clickable="true" />
+
+ </RelativeLayout>
+ </RelativeLayout>
+</layout>
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_error.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_error.xml
index bd8dad40c..eee19cd3b 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_error.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_error.xml
@@ -21,6 +21,24 @@
android:layout_centerHorizontal="true"
android:background="@drawable/border_primary_background">
+ <FrameLayout
+ android:layout_width="40dp"
+ android:layout_alignParentRight="true"
+ android:layout_height="40dp">
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:src="@drawable/icons_close"/>
+
+ <Button
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ bind:command="@{vm.closeCommand}"
+ android:background="@drawable/button_transparent_fill_ripple"/>
+ </FrameLayout>
+
<android.support.v7.widget.AppCompatTextView
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_success.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_success.xml
index 5cba917ec..aa4fb6639 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_success.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/dialog_success.xml
@@ -21,6 +21,24 @@
android:layout_centerHorizontal="true"
android:background="@drawable/border_primary_background">
+ <FrameLayout
+ android:layout_width="40dp"
+ android:layout_alignParentRight="true"
+ android:layout_height="40dp">
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:src="@drawable/icons_close"/>
+
+ <Button
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ bind:command="@{vm.closeCommand}"
+ android:background="@drawable/button_transparent_fill_ripple"/>
+ </FrameLayout>
+
<android.support.v7.widget.AppCompatTextView
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml
index 24b2c0f7e..585829bcb 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/external_machine_item.xml
@@ -13,6 +13,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:background="@drawable/list_view_selectable"
android:orientation="horizontal">
<ImageView
@@ -26,7 +27,6 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@drawable/list_view_selectable"
android:orientation="vertical"
android:padding="5dp">
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_mycolors.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_mycolors.xml
index edc10f2ce..1fdcb2710 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_mycolors.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_mycolors.xml
@@ -13,30 +13,33 @@
android:layoutDirection="ltr"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingLeft="40dp"
- android:paddingRight="40dp"
+ android:paddingLeft="20dp"
+ android:paddingRight="20dp"
+ android:background="@color/colorDarkBackground"
tools:context="com.twine.colorcapture.views.mycolors.MyColorsFragment">
- <TextView
- android:id="@+id/textView"
+ <android.support.v7.widget.AppCompatTextView
+ android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_centerHorizontal="true"
- android:layout_centerVertical="true"
- android:text="My Colors"
- android:textSize="30sp"
- tools:text="My Colors" />
+ android:layout_gravity="center"
+ android:layout_marginTop="20dp"
+ android:fontFamily="@font/flexo_bold"
+ android:letterSpacing="0.07"
+ android:text="My colors"
+ android:textSize="17.3sp" />
- <!--<Button-->
- <!--android:id="@+id/btnStart"-->
- <!--android:layout_width="150dp"-->
- <!--android:layout_height="wrap_content"-->
- <!--android:layout_alignParentBottom="true"-->
- <!--android:layout_centerHorizontal="true"-->
- <!--android:layout_marginBottom="36dp"-->
- <!--android:text="Start"-->
- <!--bind:command="@{vm.startCaptureCommand}" />-->
+ <ListView
+ android:id="@+id/listResults"
+ android:layout_marginTop="20dp"
+ android:layout_below="@id/txtTitle"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:choiceMode="none"
+ android:onItemClick="@{vm::onResultSelected}"
+ bind:itemBinding="@{vm.resultBinding}"
+ bind:items="@{vm.results}" />
</RelativeLayout>
</layout>
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_rename.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_rename.xml
new file mode 100644
index 000000000..fb95f1c14
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_rename.xml
@@ -0,0 +1,83 @@
+<layout xmlns:tools="http://schemas.android.com/tools"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:bind="http://schemas.android.com/apk/res-auto">
+
+ <data>
+ <variable
+ name="vm"
+ type="com.twine.colorcapture.views.rename.RenameFragmentVM" />
+ </data>
+
+ <RelativeLayout
+ android:layoutDirection="ltr"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingLeft="20dp"
+ android:paddingRight="20dp"
+ android:background="@color/colorDarkBackground"
+ tools:context="com.twine.colorcapture.views.rename.RenameFragment">
+
+
+ <FrameLayout
+ android:id="@+id/frameTitle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="15dp">
+
+ <android.support.v7.widget.AppCompatTextView
+ android:id="@+id/txtTitlef"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:fontFamily="@font/flexo_bold"
+ android:letterSpacing="0.07"
+ android:layout_gravity="left|center"
+ android:text="Rename my color"
+ android:textSize="17.3sp" />
+
+
+ <android.support.v7.widget.AppCompatButton
+ android:id="@+id/btnDone"
+ android:background="@drawable/button_transparent_fill_ripple"
+ android:layout_gravity="right"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="17.3sp"
+ android:letterSpacing="0.07"
+ android:textStyle="bold"
+ android:text="Done"
+ android:layout_marginRight="-10dp"
+ android:fontFamily="@font/flexo_bold"
+ android:textAllCaps="false"
+ bind:command="@{vm.renameCommand}"/>
+ </FrameLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/frameTitle"
+ android:layout_marginTop="50dp"
+ android:orientation="vertical">
+
+ <android.support.v7.widget.AppCompatTextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:fontFamily="@font/flexo_light"
+ android:letterSpacing="0.07"
+ android:textSize="13.4sp"
+ android:text="Name this color as:" />
+
+ <android.support.v7.widget.AppCompatEditText
+ android:id="@+id/txtName"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="5dp"
+ android:fontFamily="@font/flexo_light"
+ android:letterSpacing="0.07"
+ android:textSize="15.4sp"
+ android:textDirection="ltr"
+ android:text="@={vm.name}"/>
+
+ </LinearLayout>
+
+ </RelativeLayout>
+</layout>
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_result.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_result.xml
index 1bf65d15b..90242ec30 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_result.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/fragment_result.xml
@@ -30,7 +30,7 @@
android:fontFamily="@font/flexo_bold"
android:gravity="center"
android:letterSpacing="0.07"
- android:text="@string/my_color"
+ android:text="@{vm.colorResult.name}"
android:textSize="17.3sp" />
<com.github.florent37.shapeofview.shapes.RoundRectView
@@ -51,7 +51,7 @@
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@{vm.detectionResponse.getProcessedColor().getColor()}"></FrameLayout>
+ android:background="@{vm.detectionResponse.getProcessedColor().getColor()}"/>
</com.github.florent37.shapeofview.shapes.RoundRectView>
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/side_menu.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/side_menu.xml
index 9921a92a5..aa20bd3ef 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/side_menu.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/side_menu.xml
@@ -1,53 +1,180 @@
<?xml version="1.0" encoding="utf-8"?>
-<layout xmlns:android="http://schemas.android.com/apk/res/android">
+<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bind="http://schemas.android.com/apk/res-auto">
<data>
+
<variable
name="vm"
- type="com.twine.colorcapture.views.main.MainActivityVM"/>
+ type="com.twine.colorcapture.views.main.MainActivityVM" />
</data>
- <RelativeLayout
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="250dp"
+ <RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
- android:background="#151515">
+ android:background="@color/colorPrimaryBackground">
<LinearLayout
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="#303030"
- android:gravity="center_vertical|start"
- android:orientation="horizontal">
-
- <ImageView
- android:id="@+id/imageView"
- android:layout_width="match_parent"
- android:layout_height="150dp"
- android:adjustViewBounds="true"
- android:background="@color/colorPrimaryDark"
- android:scaleType="fitXY"
- android:src="@drawable/hand_phone" />
+ android:orientation="vertical"
+ android:padding="20dp">
- <TextView
- android:id="@+id/txtUserName"
+ <android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textSize="24sp" />
+ android:layout_gravity="center"
+ android:layout_marginTop="10dp"
+ android:fontFamily="@font/flexo_bold"
+ android:letterSpacing="0.07"
+ android:text="@string/app_name"
+ android:textSize="17.3sp" />
+
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_marginTop="20dp"
+ android:layout_height="wrap_content">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/info" />
+
+ <android.support.v7.widget.AppCompatTextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_marginLeft="15dp"
+ android:fontFamily="@font/flexo_medium"
+ android:letterSpacing="0.06"
+ android:text="About Twine"
+ android:textSize="15.4sp" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="2dp"
+ android:layout_marginTop="20dp"
+ android:background="@drawable/accent_gradient" />
+
+ </LinearLayout>
+
+ <Button
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@drawable/button_transparent_fill_ripple"/>
+ </FrameLayout>
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_marginTop="40dp"
+ android:layout_height="wrap_content">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/about" />
+
+ <android.support.v7.widget.AppCompatTextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_marginLeft="15dp"
+ android:fontFamily="@font/flexo_medium"
+ android:letterSpacing="0.06"
+ android:text="About SnapMatch"
+ android:textSize="15.4sp" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="2dp"
+ android:layout_marginTop="20dp"
+ android:background="@drawable/accent_gradient" />
+
+ </LinearLayout>
+
+ <Button
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@drawable/button_transparent_fill_ripple"/>
+ </FrameLayout>
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_marginTop="40dp"
+ android:layout_height="60dp">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/how_to" />
+
+ <android.support.v7.widget.AppCompatTextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_marginLeft="15dp"
+ android:fontFamily="@font/flexo_medium"
+ android:letterSpacing="0.06"
+ android:text="How to use"
+ android:textSize="15.4sp" />
+ </LinearLayout>
+
+ </LinearLayout>
+
+ <Button
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@drawable/button_transparent_fill_ripple"
+ bind:command="@{vm.howToUseCommand}"/>
+ </FrameLayout>
+
</LinearLayout>
- <ListView
- android:id="@+id/menuList"
+ <com.twine.colorcapture.controls.CircleActionButton
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:listSelector="@android:color/transparent"
- android:layout_alignParentStart="true"
- android:layout_below="@+id/linear"
- android:choiceMode="singleChoice"
- android:background="@color/colorPrimaryDark"
- android:padding="10dp" />
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_marginLeft="20dp"
+ android:layout_marginRight="20dp"
+ android:layout_marginBottom="60dp"
+ bind:text=" Get a twine TTC™ card"
+ bind:textSize="15.3sp"
+ bind:src="@drawable/icon_twine_card"
+ android:clickable="true" />
</RelativeLayout>
</layout> \ No newline at end of file
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-hdpi/ic_launcher.png b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-hdpi/ic_launcher.png
index 898f3ed59..d0bba595f 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-hdpi/ic_launcher.png
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
index dffca3601..698bb5a95 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-mdpi/ic_launcher.png b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-mdpi/ic_launcher.png
index 64ba76f75..346b6e1b9 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-mdpi/ic_launcher.png
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
index dae5e0823..b4a48b906 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index e5ed46597..ea6b05b48 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
index 14ed0af35..9bc8d9af9 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index b0907cac3..547f0e8e3 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
index d8ae03154..157ded94b 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 2c18de9e6..a678fba65 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
index beed3cdd2..e31967651 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/values/strings.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/values/strings.xml
index fe1ec6d7c..ebb9cfd4c 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/values/strings.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
<resources>
- <string name="app_name">Color Capture</string>
+ <string name="app_name">SnapMatch</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/values/styles.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/values/styles.xml
index cbf34a8c3..aaf895d46 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/values/styles.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/values/styles.xml
@@ -26,6 +26,7 @@
<declare-styleable name="CircleActionButton">
<attr name="text" format="string" />
+ <attr name="textSize" format="dimension" />
<attr name="src" format="reference" />
</declare-styleable>
diff --git a/Software/DB/PPC/Tango.mdf b/Software/DB/PPC/Tango.mdf
index 0fc4b64c3..79c194d77 100644
--- a/Software/DB/PPC/Tango.mdf
+++ b/Software/DB/PPC/Tango.mdf
Binary files differ
diff --git a/Software/DB/PPC/Tango_log.ldf b/Software/DB/PPC/Tango_log.ldf
index 4f43b9c7e..539afcfc3 100644
--- a/Software/DB/PPC/Tango_log.ldf
+++ b/Software/DB/PPC/Tango_log.ldf
Binary files differ
diff --git a/Software/DB/TCC/TCC.mdf b/Software/DB/TCC/TCC.mdf
index c0bbe251e..b4a83e6b3 100644
--- a/Software/DB/TCC/TCC.mdf
+++ b/Software/DB/TCC/TCC.mdf
Binary files differ
diff --git a/Software/DB/TCC/TCC_log.ldf b/Software/DB/TCC/TCC_log.ldf
index 844153dde..d7a91e5ac 100644
--- a/Software/DB/TCC/TCC_log.ldf
+++ b/Software/DB/TCC/TCC_log.ldf
Binary files differ
diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf
index 147f8d1b6..659b32f42 100644
--- a/Software/DB/Tango.mdf
+++ b/Software/DB/Tango.mdf
Binary files differ
diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf
index c8e576a2a..27cf94e8f 100644
--- a/Software/DB/Tango_log.ldf
+++ b/Software/DB/Tango_log.ldf
Binary files differ
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
index 785d9fc3c..db13f5e15 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
@@ -67,7 +67,11 @@ DiagnosticsMonitors DiagnosticsMonitor = DIAGNOSTICS_MONITORS__INIT;
#define DIAGNOSTICS_LIMIT 3
#define DIAGNOSTICS_DANCER_LIMIT 30
int DiagnosticsIndex = 0;
+#ifdef REDUCED_DIAGNOSTICS
+int DiagnosticCollectionLimit = 1; //number of data samples to collect before sending to the host
+#else
int DiagnosticCollectionLimit = 2; //number of data samples to collect before sending to the host
+#endif
//int DiagnosticLimit = eHundredMillisecond; //frequency of data collection
//int DiagnosticFastLimit = eTenMillisecond; //frequency of data collection
#ifdef REDUCED_DIAGNOSTICS
@@ -190,6 +194,9 @@ void SetDiagnosticCollectionLimit(int limit)
{
if ((limit)&&(limit<= DIAGNOSTICS_LIMIT))
DiagnosticCollectionLimit = limit;
+#ifdef REDUCED_DIAGNOSTICS
+ DiagnosticCollectionLimit = 1; //overrule - send at least once every second
+#endif
}
uint8_t HeaterCounterIndex[MAX_HEATERS_NUM]= {0,0,0,0,0,0,0,0,0,0};
diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
index b12064915..f0ce7397c 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
@@ -118,7 +118,7 @@ void LoadConfigurationParameters(ConfigurationParameters *Params)
EmbeddedParameters.has_breaksensorlimit = true;
EmbeddedParameters.breaksensorlimit = 10;
EmbeddedParameters.has_diagnosticcollectionlimit = true;
- EmbeddedParameters.diagnosticcollectionlimit = 2;
+ EmbeddedParameters.diagnosticcollectionlimit = 1;
EmbeddedParameters.has_overheatcountlimit = true;
EmbeddedParameters.overheatcountlimit = 3;
EmbeddedParameters.has_underheatcountlimit = true;
diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/about.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/about.png
new file mode 100644
index 000000000..69ff01eea
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/about.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/delete_thin.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/delete_thin.png
new file mode 100644
index 000000000..c1a9b62a9
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/delete_thin.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/error.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/error.png
new file mode 100644
index 000000000..bc9aeb86b
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/error.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/how_to.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/how_to.png
new file mode 100644
index 000000000..50aca55cb
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/how_to.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/icon_twine_Card.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/icon_twine_Card.png
new file mode 100644
index 000000000..188126db8
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/icon_twine_Card.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_close.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_close.png
new file mode 100644
index 000000000..89c3b1653
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_close.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_delete.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_delete.png
new file mode 100644
index 000000000..c04a02d4d
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_delete.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/info.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/info.png
new file mode 100644
index 000000000..79a64c487
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/info.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card.png
index 33849c970..188126db8 100644
--- a/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card.png
+++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card_icon.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card_icon.png
new file mode 100644
index 000000000..ec9ae5576
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card_icon.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/about.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/about.png
new file mode 100644
index 000000000..65e278cd4
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/about.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/delete_thin.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/delete_thin.png
new file mode 100644
index 000000000..524997a78
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/delete_thin.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/error.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/error.png
new file mode 100644
index 000000000..db3db4966
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/error.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/how_to.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/how_to.png
new file mode 100644
index 000000000..59ba0e181
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/how_to.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/icon_twine_Card.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/icon_twine_Card.png
new file mode 100644
index 000000000..bad44f686
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/icon_twine_Card.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_close.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_close.png
new file mode 100644
index 000000000..4e9940432
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_close.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_delete.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_delete.png
new file mode 100644
index 000000000..e9a9a108e
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_delete.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/info.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/info.png
new file mode 100644
index 000000000..a9bec6997
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/info.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card.png
index 1b77e264e..bad44f686 100644
--- a/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card.png
+++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card_icon.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card_icon.png
new file mode 100644
index 000000000..e7ff93a39
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card_icon.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/about.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/about.png
new file mode 100644
index 000000000..d5701a483
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/about.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/delete_thin.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/delete_thin.png
new file mode 100644
index 000000000..b6b951c0a
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/delete_thin.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/error.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/error.png
new file mode 100644
index 000000000..41fa3df55
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/error.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/how_to.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/how_to.png
new file mode 100644
index 000000000..fbeb31818
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/how_to.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icon_twine_Card.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icon_twine_Card.png
new file mode 100644
index 000000000..48e6595fa
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icon_twine_Card.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_close.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_close.png
new file mode 100644
index 000000000..f4e9e1c50
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_close.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_delete.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_delete.png
new file mode 100644
index 000000000..55753d24a
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_delete.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/info.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/info.png
new file mode 100644
index 000000000..3e33de5a6
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/info.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card.png
index 4eb5dc787..48e6595fa 100644
--- a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card.png
+++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card_icon.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card_icon.png
new file mode 100644
index 000000000..ff3f1c99c
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card_icon.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/about.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/about.png
new file mode 100644
index 000000000..06fedcd88
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/about.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/delete_thin.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/delete_thin.png
new file mode 100644
index 000000000..f1e190f1c
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/delete_thin.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/error.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/error.png
new file mode 100644
index 000000000..019edf5c7
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/error.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/how_to.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/how_to.png
new file mode 100644
index 000000000..bae6374b6
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/how_to.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icon_twine_Card.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icon_twine_Card.png
new file mode 100644
index 000000000..e399b466b
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icon_twine_Card.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_close.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_close.png
new file mode 100644
index 000000000..91ba9167d
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_close.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_delete.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_delete.png
new file mode 100644
index 000000000..8e54c739c
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_delete.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/info.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/info.png
new file mode 100644
index 000000000..3727e7129
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/info.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card.png
index d095059bb..e399b466b 100644
--- a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card.png
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card_icon.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card_icon.png
new file mode 100644
index 000000000..e8c54a75f
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card_icon.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/about.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/about.png
new file mode 100644
index 000000000..85234de5d
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/about.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/delete_thin.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/delete_thin.png
new file mode 100644
index 000000000..33b633fcc
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/delete_thin.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/error.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/error.png
new file mode 100644
index 000000000..f386b553d
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/error.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/how_to.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/how_to.png
new file mode 100644
index 000000000..0569f95f7
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/how_to.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icon_twine_Card.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icon_twine_Card.png
new file mode 100644
index 000000000..589cf908d
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icon_twine_Card.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_close.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_close.png
new file mode 100644
index 000000000..f37a9bbbc
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_close.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_delete.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_delete.png
new file mode 100644
index 000000000..ccc594f43
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_delete.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/info.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/info.png
new file mode 100644
index 000000000..07af24775
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/info.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card.png
index 857f83930..589cf908d 100644
--- a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card.png
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card.png
Binary files differ
diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card_icon.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card_icon.png
new file mode 100644
index 000000000..e2b2bf09f
--- /dev/null
+++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card_icon.png
Binary files differ
diff --git a/Software/Stubs Collection/stubs/FFS_ReBuild.cs b/Software/Stubs Collection/stubs/FFS_ReBuild.cs
new file mode 100644
index 000000000..a8fc766f9
--- /dev/null
+++ b/Software/Stubs Collection/stubs/FFS_ReBuild.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Text;
+using System.Linq;
+using System.Drawing;
+using System.Diagnostics;
+using System.Windows.Forms;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Collections.Generic;
+using Tango.PMR.Stubs;
+using Tango.Stubs;
+
+public void OnExecute(StubManager stubManager)
+{
+
+//CF - initialize FFS
+//DF - reset
+ProgressRequest progressRequest = new ProgressRequest();
+progressRequest.Amount = 0xCF;
+progressRequest.Delay = 0xCF;
+
+ var response = stubManager.Run<ProgressResponse>(progressRequest);
+
+} \ No newline at end of file
diff --git a/Software/Stubs Collection/stubs/FlashFileSystemInit.cs b/Software/Stubs Collection/stubs/FlashFileSystemInit.cs
new file mode 100644
index 000000000..a10bc4ed4
--- /dev/null
+++ b/Software/Stubs Collection/stubs/FlashFileSystemInit.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Text;
+using System.Linq;
+using System.Drawing;
+using System.Diagnostics;
+using System.Windows.Forms;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Collections.Generic;
+using Tango.PMR.Stubs;
+using Tango.Stubs;
+
+public void OnExecute(StubManager stubManager)
+{
+
+
+ProgressRequest progressRequest = new ProgressRequest();
+progressRequest.Amount = 10;
+progressRequest.Delay = 10;
+
+ var response = stubManager.Run<ProgressResponse>(progressRequest);
+
+} \ No newline at end of file
diff --git a/Software/Stubs Collection/stubs/mot stop.cs b/Software/Stubs Collection/stubs/mot stop.cs
index 38f3acca1..6b47b0cbb 100644
--- a/Software/Stubs Collection/stubs/mot stop.cs
+++ b/Software/Stubs Collection/stubs/mot stop.cs
@@ -12,12 +12,7 @@ using Tango.Stubs;
public void OnExecute(StubManager stubManager)
{
- int i;
-
- for(i=0;i<30;i++)
- {
- stubManager.Run("StubMotorStopRequest" ,i, 3); // 3 - SoftHiZ / 2 - HardHiZ / 1 - SoftStop / 0 - HardStop
- }
+ stubManager.Run("StubMotorStopRequest" ,5, 3); // 3 - SoftHiZ / 2 - HardHiZ / 1 - SoftStop / 0 - HardStop
}
diff --git a/Software/Stubs Collection/stubs/technician view files/lp4 Tech Board.tpf b/Software/Stubs Collection/stubs/technician view files/lp4 Tech Board.tpf
index e07ffacd0..92e30526f 100644
--- a/Software/Stubs Collection/stubs/technician view files/lp4 Tech Board.tpf
+++ b/Software/Stubs Collection/stubs/technician view files/lp4 Tech Board.tpf
@@ -24,7 +24,7 @@
<Width>575</Width>
<Height>201.64159292035407</Height>
<Angle>0</Angle>
- <ItemGuid>AFB7B6F7-8FFB-4A7F-B814-04F0C163CAA1</ItemGuid>
+ <ItemGuid>D7585119-4A42-4370-8F1E-F3E62553E588</ItemGuid>
<ColorNumber>-14774017</ColorNumber>
<DecimalPlaces>1</DecimalPlaces>
<Duration>701</Duration>
@@ -32,6 +32,20 @@
<Max>300</Max>
<UseAutoRange>true</UseAutoRange>
</TechItem>
+ <TechItem xsi:type="ControllerItem">
+ <ID>ba743caa-95f2-4b20-8c32-8e5943ada3fc</ID>
+ <Left>144</Left>
+ <Top>589.78318584070769</Top>
+ <Width>380</Width>
+ <Height>194.54867256637203</Height>
+ <Angle>0</Angle>
+ <ItemGuid>78482AA4-3DF6-421F-944C-64328D3C3EF2</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <OptimalRangeMinimum>0</OptimalRangeMinimum>
+ <OptimalRangeMaximum>70</OptimalRangeMaximum>
+ <UpdateInterval>10</UpdateInterval>
+ <IsSetToDefault>true</IsSetToDefault>
+ </TechItem>
<TechItem xsi:type="DigitalOutItem">
<ID>e4892498-fa1a-413c-9dd8-633efaade51c</ID>
<Left>561</Left>
@@ -110,7 +124,7 @@
<HeaterState>
<HeaterType>DryerAirHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>113.1</CurrentValue>
+ <CurrentValue>27.099999999999998</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -129,7 +143,7 @@
<HeaterState>
<HeaterType>DryerMainHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>169.79999999999998</CurrentValue>
+ <CurrentValue>27.56</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -148,7 +162,7 @@
<HeaterState>
<HeaterType>DryerSecondaryHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>168.88</CurrentValue>
+ <CurrentValue>22.639999999999997</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -166,13 +180,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone3</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>51.809999999999995</CurrentValue>
+ <SetPoint>135</SetPoint>
+ <CurrentValue>131.29</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>135</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>7e8dd386-cca6-4d07-8a3e-af5403756002</ID>
@@ -185,13 +199,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone2</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>49.419999999999995</CurrentValue>
+ <SetPoint>120</SetPoint>
+ <CurrentValue>119.36</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>120</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>32a91e5f-27c8-490d-b187-8e39b6626a13</ID>
@@ -204,13 +218,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone1</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>37.83</CurrentValue>
+ <SetPoint>80</SetPoint>
+ <CurrentValue>79.34</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>80</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>c844235a-8a29-4c2e-a964-e8f546d2ced7</ID>
@@ -224,7 +238,7 @@
<HeaterState>
<HeaterType>MixerHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>59.69</CurrentValue>
+ <CurrentValue>37.46</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -242,13 +256,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone4</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>56.68</CurrentValue>
- <IsActive>false</IsActive>
+ <SetPoint>135</SetPoint>
+ <CurrentValue>130.05</CurrentValue>
+ <IsActive>true</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>135</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>e6b3eb18-482b-450e-b8a8-d2ac6bba4fd4</ID>
@@ -261,13 +275,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone5</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>62.029999999999994</CurrentValue>
+ <SetPoint>135</SetPoint>
+ <CurrentValue>133.47</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>135</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>efff2e67-e3a3-4667-9208-4704707d7cda</ID>
@@ -280,13 +294,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone6</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>51.849999999999994</CurrentValue>
- <IsActive>false</IsActive>
+ <SetPoint>140</SetPoint>
+ <CurrentValue>132.97</CurrentValue>
+ <IsActive>true</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>140</SetPoint>
</TechItem>
<TechItem xsi:type="MonitorItem">
<ID>f9936dba-cef8-41e3-a715-eb629dca1870</ID>
@@ -380,16 +394,6 @@
<ItemGuid>cac03991-b332-4dfa-b491-c0e381b74fb9</ItemGuid>
<ColorNumber>-1</ColorNumber>
</TechItem>
- <TechItem xsi:type="BlowerItem">
- <ID>929aeb7f-8f42-4a17-9b33-6e6e719b11e6</ID>
- <Left>69</Left>
- <Top>601.88053097345141</Top>
- <Width>347</Width>
- <Height>108.42035398230087</Height>
- <Angle>0</Angle>
- <ItemGuid>0B1752D6-7D4B-4957-BCDE-15465EA8EB55</ItemGuid>
- <ColorNumber>-1</ColorNumber>
- </TechItem>
</Items>
</MachineTechViewProjectTab>
<MachineTechViewProjectTab>
@@ -417,7 +421,7 @@
<ItemGuid>96B89605-F999-43FE-A1CD-2645BFB33A36</ItemGuid>
<ColorNumber>-1</ColorNumber>
<UpdateInterval>10</UpdateInterval>
- <DecimalPoints>2</DecimalPoints>
+ <DecimalPoints>0</DecimalPoints>
</TechItem>
<TechItem xsi:type="MonitorItem">
<ID>6be024c6-3d1b-4267-9b77-44473aba56b7</ID>
@@ -429,7 +433,7 @@
<ItemGuid>FC60060A-3736-4910-B41A-FF6DABDF0E9E</ItemGuid>
<ColorNumber>-1</ColorNumber>
<UpdateInterval>10</UpdateInterval>
- <DecimalPoints>2</DecimalPoints>
+ <DecimalPoints>0</DecimalPoints>
</TechItem>
<TechItem xsi:type="MonitorItem">
<ID>7c720f3b-00e1-49dd-92f9-fdd1e9686623</ID>
@@ -441,7 +445,7 @@
<ItemGuid>4CE6A82E-D841-4D33-BBB2-11F0743A441C</ItemGuid>
<ColorNumber>-1</ColorNumber>
<UpdateInterval>10</UpdateInterval>
- <DecimalPoints>2</DecimalPoints>
+ <DecimalPoints>0</DecimalPoints>
</TechItem>
<TechItem xsi:type="SingleGraphItem">
<ID>3ebd6759-521b-4ed1-a353-ee1ad7801f28</ID>
@@ -503,17 +507,6 @@
<Max>100</Max>
<UseAutoRange>true</UseAutoRange>
</TechItem>
- <TechItem xsi:type="MotorItem">
- <ID>3ccb1485-b0e9-4d36-a931-a1b3865edeaa</ID>
- <Left>460</Left>
- <Top>38.28761061946841</Top>
- <Width>267</Width>
- <Height>221.90707964601768</Height>
- <Angle>0</Angle>
- <ItemGuid>08d15ca1-d7d1-460f-8f37-42c37c287cd1</ItemGuid>
- <ColorNumber>-1</ColorNumber>
- <Speed>952.3546144121359</Speed>
- </TechItem>
<TechItem xsi:type="SingleGraphItem">
<ID>be4cb8d9-b516-4604-a6a5-1638cbc50251</ID>
<Left>860</Left>
@@ -576,22 +569,23 @@
</TechItem>
<TechItem xsi:type="MonitorRecorderItem">
<ID>9c34dc69-cfaa-48b4-9d02-8f0d9bba79dd</ID>
- <Left>1303</Left>
- <Top>34.380530973454768</Top>
- <Width>176</Width>
- <Height>83.05309734512457</Height>
+ <Left>1358</Left>
+ <Top>123.61504424778764</Top>
+ <Width>170</Width>
+ <Height>573.5132743362833</Height>
<Angle>0</Angle>
<ColorNumber>-1</ColorNumber>
- <SelectedMonitorsGuids>
- <string>89B7B89D-8050-4188-B568-35B1910CFB6F</string>
- <string>96B89605-F999-43FE-A1CD-2645BFB33A36</string>
- <string>84CF23C9-D20D-4C08-BE1D-80201FC43C06</string>
- <string>FC60060A-3736-4910-B41A-FF6DABDF0E9E</string>
- <string>5F12B974-2C9E-4DDD-9B20-733251A5D7E6</string>
- <string>9ADF7823-B293-4275-9999-F62474D246AA</string>
- <string>4CE6A82E-D841-4D33-BBB2-11F0743A441C</string>
- <string>F1DF490B-0577-4FA7-ACA1-0EEF4F934E8F</string>
- </SelectedMonitorsGuids>
+ <SelectedMonitorsGuids />
+ </TechItem>
+ <TechItem xsi:type="ThreadMotionItem">
+ <ID>b083f678-c5ea-4700-bfa2-ca51ed62cf4b</ID>
+ <Left>480</Left>
+ <Top>23.300884955752224</Top>
+ <Width>317</Width>
+ <Height>192.52212389380532</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>20</Speed>
</TechItem>
</Items>
</MachineTechViewProjectTab>
@@ -607,19 +601,19 @@
<Angle>0</Angle>
<ItemGuid>2CC8E461-E91F-4D4C-A402-922477F06C87</ItemGuid>
<ColorNumber>-1</ColorNumber>
- <Speed>1200</Speed>
+ <Speed>1000</Speed>
<DisplayName>Dispenser 1</DisplayName>
</TechItem>
<TechItem xsi:type="DispenserItem">
<ID>2d03fc19-0502-43e1-a3ff-4012a612112b</ID>
<Left>1124</Left>
<Top>213.33185840707085</Top>
- <Width>159</Width>
+ <Width>160</Width>
<Height>215.8274336283186</Height>
<Angle>0</Angle>
<ItemGuid>C8D8FE90-0375-44A2-A6D1-E997789E065C</ItemGuid>
<ColorNumber>-16724737</ColorNumber>
- <Speed>1200</Speed>
+ <Speed>1000</Speed>
<DisplayName>Dispenser 2</DisplayName>
</TechItem>
<TechItem xsi:type="DispenserItem">
@@ -631,7 +625,7 @@
<Angle>0</Angle>
<ItemGuid>08ED9044-CAD6-4492-94B2-C07206E0164B</ItemGuid>
<ColorNumber>-65325</ColorNumber>
- <Speed>1200</Speed>
+ <Speed>1000</Speed>
<DisplayName>Dispenser 3</DisplayName>
</TechItem>
<TechItem xsi:type="DispenserItem">
@@ -643,7 +637,7 @@
<Angle>0</Angle>
<ItemGuid>179F34BB-3252-4D3A-965C-E6EB43D6FE7C</ItemGuid>
<ColorNumber>-524544</ColorNumber>
- <Speed>1200</Speed>
+ <Speed>1000</Speed>
<DisplayName>Dispenser 4</DisplayName>
</TechItem>
<TechItem xsi:type="DispenserItem">
@@ -655,7 +649,7 @@
<Angle>0</Angle>
<ItemGuid>716B35CF-46E0-47D5-AF85-5233D212568F</ItemGuid>
<ColorNumber>-2108246</ColorNumber>
- <Speed>1200</Speed>
+ <Speed>1000</Speed>
<DisplayName>Dispenser 5</DisplayName>
</TechItem>
<TechItem xsi:type="DispenserItem">
@@ -792,8 +786,8 @@
</TechItem>
<TechItem xsi:type="DigitalOutItem">
<ID>bce8c8e8-a317-4991-9aa7-cd99a45d1509</ID>
- <Left>41</Left>
- <Top>752.82743362831809</Top>
+ <Left>35</Left>
+ <Top>680.88495575221179</Top>
<Width>247</Width>
<Height>122.24778761061873</Height>
<Angle>0</Angle>
@@ -802,8 +796,8 @@
</TechItem>
<TechItem xsi:type="DigitalOutItem">
<ID>72a23702-31bb-4ab8-aee5-2a02bcb1270b</ID>
- <Left>333</Left>
- <Top>810.36283185840728</Top>
+ <Left>321</Left>
+ <Top>708.02212389380554</Top>
<Width>200</Width>
<Height>94.15929203539747</Height>
<Angle>0</Angle>
@@ -1005,18 +999,6 @@
<UpdateInterval>10</UpdateInterval>
<DecimalPoints>0</DecimalPoints>
</TechItem>
- <TechItem xsi:type="MonitorItem">
- <ID>1cda0250-1e81-4598-995c-3df30359ce08</ID>
- <Left>74</Left>
- <Top>625.67699115044252</Top>
- <Width>144</Width>
- <Height>80.495575221237516</Height>
- <Angle>0</Angle>
- <ItemGuid>37872FE8-D68A-45BC-A441-372B7805C011</ItemGuid>
- <ColorNumber>-1</ColorNumber>
- <UpdateInterval>10</UpdateInterval>
- <DecimalPoints>0</DecimalPoints>
- </TechItem>
</Items>
</MachineTechViewProjectTab>
<MachineTechViewProjectTab>
@@ -1079,8 +1061,8 @@
</TechItem>
<TechItem xsi:type="ThreadMotionItem">
<ID>4d562029-3fdf-40a4-a5a7-9a322253c912</ID>
- <Left>1168</Left>
- <Top>47.305309734517039</Top>
+ <Left>1127</Left>
+ <Top>36.09292035398596</Top>
<Width>304</Width>
<Height>167.26548672566202</Height>
<Angle>0</Angle>
@@ -1120,17 +1102,6 @@
<Speed>500</Speed>
</TechItem>
<TechItem xsi:type="MotorItem">
- <ID>339b7d00-d688-41cf-926a-8171d5e62740</ID>
- <Left>376</Left>
- <Top>553.11061946903</Top>
- <Width>240</Width>
- <Height>159.84070796460173</Height>
- <Angle>0</Angle>
- <ItemGuid>f3b5076e-cba3-4ad2-b3cc-0c4e907bd9ef</ItemGuid>
- <ColorNumber>-1</ColorNumber>
- <Speed>40</Speed>
- </TechItem>
- <TechItem xsi:type="MotorItem">
<ID>7644a8f9-00a2-4e37-8f48-0667b1541114</ID>
<Left>1014</Left>
<Top>290.60619469026437</Top>
@@ -1173,6 +1144,27 @@
<ColorNumber>-1</ColorNumber>
<Speed>30</Speed>
</TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>71dcc876-ff6e-4016-b24e-1c44e663f6c0</ID>
+ <Left>407</Left>
+ <Top>538.87610619469456</Top>
+ <Width>273</Width>
+ <Height>174.296460176989</Height>
+ <Angle>0</Angle>
+ <ItemGuid>f3b5076e-cba3-4ad2-b3cc-0c4e907bd9ef</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>100</Speed>
+ </TechItem>
+ <TechItem xsi:type="DigitalOutItem">
+ <ID>ca25594d-1323-4e59-906e-e67c8db064aa</ID>
+ <Left>222</Left>
+ <Top>422.72566371681091</Top>
+ <Width>269</Width>
+ <Height>127.67256637168134</Height>
+ <Angle>0</Angle>
+ <ItemGuid>6b9cba1d-4acf-4992-97ad-e422bca6ada2</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
</Items>
</MachineTechViewProjectTab>
<MachineTechViewProjectTab>
@@ -1389,13 +1381,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone4</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>56.68</CurrentValue>
- <IsActive>false</IsActive>
+ <SetPoint>135</SetPoint>
+ <CurrentValue>130.05</CurrentValue>
+ <IsActive>true</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>135</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>4fa7a50d-5155-4785-95a0-508cd40fad4d</ID>
@@ -1408,13 +1400,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone1</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>37.83</CurrentValue>
+ <SetPoint>80</SetPoint>
+ <CurrentValue>79.34</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>80</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>9da56601-7b5b-4f0f-afbf-2b31970b104f</ID>
@@ -1427,13 +1419,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone3</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>51.809999999999995</CurrentValue>
+ <SetPoint>135</SetPoint>
+ <CurrentValue>131.29</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>135</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>b700e59d-f923-4f13-9dcc-942050548c22</ID>
@@ -1446,13 +1438,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone5</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>62.029999999999994</CurrentValue>
+ <SetPoint>135</SetPoint>
+ <CurrentValue>133.47</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>135</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>97bf8fa2-b07f-4f0e-87ac-820ea52d236e</ID>
@@ -1466,7 +1458,7 @@
<HeaterState>
<HeaterType>MixerHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>59.69</CurrentValue>
+ <CurrentValue>37.46</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -1484,13 +1476,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone2</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>49.419999999999995</CurrentValue>
+ <SetPoint>120</SetPoint>
+ <CurrentValue>119.36</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>120</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>3020fbc5-305e-4adf-9f1e-d7a48168e2e7</ID>
@@ -1503,13 +1495,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone6</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>51.849999999999994</CurrentValue>
- <IsActive>false</IsActive>
+ <SetPoint>140</SetPoint>
+ <CurrentValue>132.97</CurrentValue>
+ <IsActive>true</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>140</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>a4049a51-7417-4eab-8bc1-837574307e93</ID>
@@ -1523,7 +1515,7 @@
<HeaterState>
<HeaterType>DryerAirHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>113.1</CurrentValue>
+ <CurrentValue>27.099999999999998</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -1602,13 +1594,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone3</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>51.809999999999995</CurrentValue>
+ <SetPoint>135</SetPoint>
+ <CurrentValue>131.29</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>135</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>ddda12e1-54ad-4ffd-9f77-5845372e134f</ID>
@@ -1621,13 +1613,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone4</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>56.68</CurrentValue>
- <IsActive>false</IsActive>
+ <SetPoint>135</SetPoint>
+ <CurrentValue>130.05</CurrentValue>
+ <IsActive>true</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>135</SetPoint>
</TechItem>
<TechItem xsi:type="HeaterItem">
<ID>479f6fd7-25bb-4583-985e-169e045895ce</ID>
@@ -1640,13 +1632,13 @@
<ColorNumber>-1</ColorNumber>
<HeaterState>
<HeaterType>HeaterZone5</HeaterType>
- <SetPoint>0</SetPoint>
- <CurrentValue>62.029999999999994</CurrentValue>
+ <SetPoint>135</SetPoint>
+ <CurrentValue>133.47</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
- <SetPoint>0</SetPoint>
+ <SetPoint>135</SetPoint>
</TechItem>
<TechItem xsi:type="ProcessParametersItem">
<ID>2eed9e1e-31cd-4dc4-9d44-dd35798ff733</ID>
@@ -1794,15 +1786,15 @@
<Items>
<TechItem xsi:type="SingleGraphItem">
<ID>f9531a72-3742-47a7-86bb-b589f8b3eb55</ID>
- <Left>123</Left>
- <Top>128.33628318584061</Top>
+ <Left>124</Left>
+ <Top>131.40265486725656</Top>
<Width>390</Width>
<Height>249.67699115047321</Height>
<Angle>0</Angle>
<ItemGuid>A499E5E0-A812-4032-8F96-B38C6762C4BD</ItemGuid>
<ColorNumber>-14774017</ColorNumber>
<DecimalPlaces>3</DecimalPlaces>
- <Duration>1858</Duration>
+ <Duration>3600</Duration>
<Min>0</Min>
<Max>100</Max>
<UseAutoRange>true</UseAutoRange>
@@ -1817,7 +1809,7 @@
<ItemGuid>F33667BD-D9FA-4DC7-BC2C-0E89E60AE4BE</ItemGuid>
<ColorNumber>-14774017</ColorNumber>
<DecimalPlaces>3</DecimalPlaces>
- <Duration>1803</Duration>
+ <Duration>3600</Duration>
<Min>0</Min>
<Max>100</Max>
<UseAutoRange>true</UseAutoRange>
@@ -1904,7 +1896,7 @@
<ItemGuid>1F0F907A-EC16-4386-AFC8-B2B156F2A822</ItemGuid>
<ColorNumber>-14774017</ColorNumber>
<DecimalPlaces>3</DecimalPlaces>
- <Duration>1833</Duration>
+ <Duration>3600</Duration>
<Min>0</Min>
<Max>100</Max>
<UseAutoRange>true</UseAutoRange>
@@ -1941,7 +1933,7 @@
<ItemGuid>6B1DF4B0-BCC2-400C-A3B7-31C5119A55BB</ItemGuid>
<ColorNumber>-14774017</ColorNumber>
<DecimalPlaces>3</DecimalPlaces>
- <Duration>1833</Duration>
+ <Duration>3600</Duration>
<Min>0</Min>
<Max>100</Max>
<UseAutoRange>true</UseAutoRange>
@@ -1978,7 +1970,7 @@
<ItemGuid>19645882-6587-4A50-BD85-AF06617DC654</ItemGuid>
<ColorNumber>-14774017</ColorNumber>
<DecimalPlaces>3</DecimalPlaces>
- <Duration>1850</Duration>
+ <Duration>3600</Duration>
<Min>0</Min>
<Max>100</Max>
<UseAutoRange>true</UseAutoRange>
diff --git a/Software/Stubs Collection/stubs/technician view files/lp4 with waste.tpf b/Software/Stubs Collection/stubs/technician view files/lp4 with waste.tpf
new file mode 100644
index 000000000..1dc30cb3e
--- /dev/null
+++ b/Software/Stubs Collection/stubs/technician view files/lp4 with waste.tpf
@@ -0,0 +1,2069 @@
+<?xml version="1.0"?>
+<MachineTechViewProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <Items />
+ <Tabs>
+ <MachineTechViewProjectTab>
+ <Name>Temperatures</Name>
+ <Items>
+ <TechItem xsi:type="MonitorItem">
+ <ID>50bae43f-8b1a-4279-9238-b976a0c72af3</ID>
+ <Left>1530</Left>
+ <Top>193.19911504424795</Top>
+ <Width>169</Width>
+ <Height>181.37610619469029</Height>
+ <Angle>0</Angle>
+ <ItemGuid>A8DB1D27-6B25-4FB4-A3F5-46A29BA51955</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>88d1ed8f-752b-4eb0-9dad-b47aee34d5db</ID>
+ <Left>677</Left>
+ <Top>64.513274336283189</Top>
+ <Width>575</Width>
+ <Height>201.64159292035407</Height>
+ <Angle>0</Angle>
+ <ItemGuid>AFB7B6F7-8FFB-4A7F-B814-04F0C163CAA1</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>701</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>300</Max>
+ </TechItem>
+ <TechItem xsi:type="ControllerItem">
+ <ID>ba743caa-95f2-4b20-8c32-8e5943ada3fc</ID>
+ <Left>144</Left>
+ <Top>589.78318584070769</Top>
+ <Width>380</Width>
+ <Height>194.54867256637203</Height>
+ <Angle>0</Angle>
+ <ItemGuid>78482AA4-3DF6-421F-944C-64328D3C3EF2</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <OptimalRangeMinimum>0</OptimalRangeMinimum>
+ <OptimalRangeMaximum>70</OptimalRangeMaximum>
+ <UpdateInterval>10</UpdateInterval>
+ <IsSetToDefault>true</IsSetToDefault>
+ </TechItem>
+ <TechItem xsi:type="DigitalOutItem">
+ <ID>e4892498-fa1a-413c-9dd8-633efaade51c</ID>
+ <Left>561</Left>
+ <Top>638.02654867256649</Top>
+ <Width>203</Width>
+ <Height>160.09734513274339</Height>
+ <Angle>0</Angle>
+ <ItemGuid>75f69efe-1c7e-4015-a6eb-2686d4f67a67</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="DigitalOutItem">
+ <ID>1a243586-f54c-4208-bc29-458c45acd578</ID>
+ <Left>776</Left>
+ <Top>641.06637168141606</Top>
+ <Width>215</Width>
+ <Height>159.08407079646031</Height>
+ <Angle>0</Angle>
+ <ItemGuid>b05b8324-022b-4d61-ae4a-33c97cd1f51b</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>c399ec1f-152e-4517-b6a3-c17bb445fc79</ID>
+ <Left>57</Left>
+ <Top>853.73451327433634</Top>
+ <Width>251</Width>
+ <Height>184.41592920353969</Height>
+ <Angle>0</Angle>
+ <ItemGuid>6f851979-d69c-4243-9383-1517a8bdc656</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>500</Speed>
+ </TechItem>
+ <TechItem xsi:type="DispenserItem">
+ <ID>211ad3c8-3c39-47a1-88c0-089fb13678a0</ID>
+ <Left>361</Left>
+ <Top>858.80088495575251</Top>
+ <Width>245</Width>
+ <Height>204.68141592920335</Height>
+ <Angle>0</Angle>
+ <ItemGuid>C8D8FE90-0375-44A2-A6D1-E997789E065C</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>1700</Speed>
+ <DisplayName>Dispenser 2</DisplayName>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>07ad9c30-c4cf-461a-904e-f6661d464c26</ID>
+ <Left>665</Left>
+ <Top>870.96017699115055</Top>
+ <Width>216</Width>
+ <Height>147.93805309734523</Height>
+ <Angle>0</Angle>
+ <ItemGuid>3bed8c31-bcd6-479b-8a5d-92ce8a5e4d41</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>500</Speed>
+ </TechItem>
+ <TechItem xsi:type="DispenserItem">
+ <ID>de829cd4-0493-48d3-ac3a-4b9db77f2f42</ID>
+ <Left>969</Left>
+ <Top>866.90707964601779</Top>
+ <Width>190</Width>
+ <Height>145.91150442477886</Height>
+ <Angle>0</Angle>
+ <ItemGuid>08ED9044-CAD6-4492-94B2-C07206E0164B</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>1700</Speed>
+ <DisplayName>Dispenser 3</DisplayName>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>a15665e3-af39-42d8-8c06-97d770632e10</ID>
+ <Left>1289</Left>
+ <Top>72.951327433628364</Top>
+ <Width>207</Width>
+ <Height>184.4159292035398</Height>
+ <Angle>0</Angle>
+ <ItemGuid>6D6CFA18-5922-4AFE-84B3-2721CE128681</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>DryerAirHeater</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>97.1</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>0ac64716-d30c-489b-939e-a26d06445866</ID>
+ <Left>450</Left>
+ <Top>54.65044247787489</Top>
+ <Width>212</Width>
+ <Height>177.32300884955754</Height>
+ <Angle>0</Angle>
+ <ItemGuid>A5DFC2DB-3B36-4377-96A0-D492CE785C00</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>DryerMainHeater</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>139.61</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>181796d8-64f6-420a-8f37-9af9df67d6a9</ID>
+ <Left>245</Left>
+ <Top>50.159292035398948</Top>
+ <Width>199</Width>
+ <Height>180.36283185840711</Height>
+ <Angle>0</Angle>
+ <ItemGuid>86808B48-B7F9-43AD-840E-2A6A5987C305</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>DryerSecondaryHeater</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>138.16</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>fd2bb3a3-a411-470d-bde7-0beaf84da059</ID>
+ <Left>667</Left>
+ <Top>320.19026548672576</Top>
+ <Width>186</Width>
+ <Height>195.56194690265494</Height>
+ <Angle>0</Angle>
+ <ItemGuid>8E764A14-0F84-4FEC-928B-32A2509CAD57</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>HeaterZone3</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>35.35</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>7e8dd386-cca6-4d07-8a3e-af5403756002</ID>
+ <Left>894</Left>
+ <Top>321.20353982300895</Top>
+ <Width>200</Width>
+ <Height>187.45575221238937</Height>
+ <Angle>0</Angle>
+ <ItemGuid>B4EE8CC0-EE2B-4ABE-BF09-9226860E756B</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>HeaterZone2</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>32.25</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>32a91e5f-27c8-490d-b187-8e39b6626a13</ID>
+ <Left>1128</Left>
+ <Top>326.26991150442478</Top>
+ <Width>157</Width>
+ <Height>194.54867256637175</Height>
+ <Angle>0</Angle>
+ <ItemGuid>27E7BB74-81C3-4EF2-80AE-962F111C441F</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>HeaterZone1</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>28.049999999999997</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>c844235a-8a29-4c2e-a964-e8f546d2ced7</ID>
+ <Left>1281</Left>
+ <Top>587.69469026548677</Top>
+ <Width>173</Width>
+ <Height>183.40265486725662</Height>
+ <Angle>0</Angle>
+ <ItemGuid>42A62A48-F1D5-4BB6-AFEA-6A7DF6DCF626</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>MixerHeater</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>37.02</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>45b121b5-cf7c-41f7-8089-6d4d6b1ed2c8</ID>
+ <Left>469</Left>
+ <Top>324.61946902655012</Top>
+ <Width>178</Width>
+ <Height>207.41150442477846</Height>
+ <Angle>0</Angle>
+ <ItemGuid>94574D69-46E1-4144-A8B5-D4BF0DA96D18</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>HeaterZone4</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>35.56</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>e6b3eb18-482b-450e-b8a8-d2ac6bba4fd4</ID>
+ <Left>257</Left>
+ <Top>328.66814159291738</Top>
+ <Width>186</Width>
+ <Height>195.56194690265494</Height>
+ <Angle>0</Angle>
+ <ItemGuid>D6771DF4-771E-4D62-B6BA-BDE361C0A0F3</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>HeaterZone5</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>36.74</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>efff2e67-e3a3-4667-9208-4704707d7cda</ID>
+ <Left>65</Left>
+ <Top>331.91150442477812</Top>
+ <Width>186</Width>
+ <Height>195.56194690265494</Height>
+ <Angle>0</Angle>
+ <ItemGuid>D2B6CAA0-055E-4871-8D91-A5370F1ACB22</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>HeaterZone6</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>30.34</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>f9936dba-cef8-41e3-a715-eb629dca1870</ID>
+ <Left>1311</Left>
+ <Top>346.53539823008856</Top>
+ <Width>199</Width>
+ <Height>114.5</Height>
+ <Angle>0</Angle>
+ <ItemGuid>1778C1A7-AFB5-42F9-9E00-E80D30D9FC0A</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>0</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>217c677a-3e11-4a7c-959b-616dae1259dd</ID>
+ <Left>1167</Left>
+ <Top>280.67256637168151</Top>
+ <Width>44</Width>
+ <Height>42.557522123893705</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>A</Text>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>f129ea0d-9abb-437f-928e-1cd1f569db2a</ID>
+ <Left>980.0000000000025</Left>
+ <Top>272.39823008849913</Top>
+ <Width>44</Width>
+ <Height>42.557522123893705</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>C</Text>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>5f2610dc-3b9d-4302-b8f5-77a5e1c73b8c</ID>
+ <Left>739.99999999999727</Left>
+ <Top>269.79203539822839</Top>
+ <Width>44</Width>
+ <Height>42.557522123893705</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>D</Text>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>eadb5257-47a2-4336-a72a-f2d157fe70cb</ID>
+ <Left>552.99999999999909</Left>
+ <Top>277.11946902654887</Top>
+ <Width>44</Width>
+ <Height>42.557522123893705</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>F</Text>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>6c59af66-169a-46e0-89ae-a81e3e619043</ID>
+ <Left>334.00000000000153</Left>
+ <Top>280.39380530973477</Top>
+ <Width>44</Width>
+ <Height>42.557522123893705</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>I</Text>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>3b32b9a8-f300-443f-950e-c49f81678bac</ID>
+ <Left>133.99999999999966</Left>
+ <Top>283.84070796460247</Top>
+ <Width>44</Width>
+ <Height>42.557522123893705</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>L</Text>
+ </TechItem>
+ <TechItem xsi:type="PidItem">
+ <ID>f6d44793-ed44-46ed-8854-eacbc11af10c</ID>
+ <Left>909</Left>
+ <Top>544.12389380530976</Top>
+ <Width>219</Width>
+ <Height>97.2743362831859</Height>
+ <Angle>0</Angle>
+ <ItemGuid>df38139e-0026-46bc-b72f-df5f9eec80f7</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="DigitalOutItem">
+ <ID>dd8f8a58-c09f-43dc-af6f-13fe83471be4</ID>
+ <Left>1005</Left>
+ <Top>624.17256637168157</Top>
+ <Width>237</Width>
+ <Height>170.23008849557505</Height>
+ <Angle>0</Angle>
+ <ItemGuid>cac03991-b332-4dfa-b491-c0e381b74fb9</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="MonitorRecorderItem">
+ <ID>43793f93-da64-4409-b583-bca498f641e6</ID>
+ <Left>18</Left>
+ <Top>25.3274336283186</Top>
+ <Width>203</Width>
+ <Height>107.40707964601774</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-1</ColorNumber>
+ <SelectedMonitorsGuids />
+ </TechItem>
+ </Items>
+ </MachineTechViewProjectTab>
+ <MachineTechViewProjectTab>
+ <Name>Thread</Name>
+ <Items>
+ <TechItem xsi:type="MonitorItem">
+ <ID>50bae43f-8b1a-4279-9238-b976a0c72af3</ID>
+ <Left>1530</Left>
+ <Top>193.19911504424795</Top>
+ <Width>169</Width>
+ <Height>181.37610619469029</Height>
+ <Angle>0</Angle>
+ <ItemGuid>A8DB1D27-6B25-4FB4-A3F5-46A29BA51955</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>68eef943-2151-4df5-be61-044c3865606e</ID>
+ <Left>1172</Left>
+ <Top>145.78318584070678</Top>
+ <Width>175</Width>
+ <Height>167.827433628319</Height>
+ <Angle>0</Angle>
+ <ItemGuid>96B89605-F999-43FE-A1CD-2645BFB33A36</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>6be024c6-3d1b-4267-9b77-44473aba56b7</ID>
+ <Left>988</Left>
+ <Top>143.32300884955998</Top>
+ <Width>190</Width>
+ <Height>167.09734513274049</Height>
+ <Angle>0</Angle>
+ <ItemGuid>FC60060A-3736-4910-B41A-FF6DABDF0E9E</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>7c720f3b-00e1-49dd-92f9-fdd1e9686623</ID>
+ <Left>817</Left>
+ <Top>142.42035398230098</Top>
+ <Width>169</Width>
+ <Height>168.31858407079625</Height>
+ <Angle>0</Angle>
+ <ItemGuid>4CE6A82E-D841-4D33-BBB2-11F0743A441C</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>3ebd6759-521b-4ed1-a353-ee1ad7801f28</ID>
+ <Left>922</Left>
+ <Top>516.43362831858417</Top>
+ <Width>439</Width>
+ <Height>304.995575221239</Height>
+ <Angle>0</Angle>
+ <ItemGuid>D126DB23-784B-4F0C-8F88-D89A65A7549F</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>1460</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>16384</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>984b4126-3dda-4624-a79f-0646eb0e1358</ID>
+ <Left>465</Left>
+ <Top>515.420353982301</Top>
+ <Width>439</Width>
+ <Height>304.995575221239</Height>
+ <Angle>0</Angle>
+ <ItemGuid>10102BC3-0EAE-47FF-A8E5-8640780CAA3D</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>1516</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>16384</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>8ebc3ab7-a02d-4b12-93b3-2563443831d7</ID>
+ <Left>15</Left>
+ <Top>518.46017699115032</Top>
+ <Width>439</Width>
+ <Height>304.995575221239</Height>
+ <Angle>0</Angle>
+ <ItemGuid>C0BCCD5C-346B-4C4A-A080-39D28E9E1A0C</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>1398</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>16384</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>acafb268-5e97-4277-8dc8-173250a9e3f8</ID>
+ <Left>12</Left>
+ <Top>13.849557522123973</Top>
+ <Width>439</Width>
+ <Height>304.995575221239</Height>
+ <Angle>0</Angle>
+ <ItemGuid>9FBC5460-BA59-486B-8D85-BD7D8A959F98</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>1273</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>3ccb1485-b0e9-4d36-a931-a1b3865edeaa</ID>
+ <Left>460</Left>
+ <Top>38.28761061946841</Top>
+ <Width>267</Width>
+ <Height>221.90707964601768</Height>
+ <Angle>0</Angle>
+ <ItemGuid>08d15ca1-d7d1-460f-8f37-42c37c287cd1</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>952.3546144121359</Speed>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>be4cb8d9-b516-4604-a6a5-1638cbc50251</ID>
+ <Left>860</Left>
+ <Top>-24.18584070796669</Top>
+ <Width>345</Width>
+ <Height>169.21681415929209</Height>
+ <Angle>0</Angle>
+ <ItemGuid>4CE6A82E-D841-4D33-BBB2-11F0743A441C</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>514</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100000</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>75b99507-4eba-4b11-b52e-26732d4c5479</ID>
+ <Left>19</Left>
+ <Top>324.14159292035305</Top>
+ <Width>429</Width>
+ <Height>193.26548672566258</Height>
+ <Angle>0</Angle>
+ <ItemGuid>F1DF490B-0577-4FA7-ACA1-0EEF4F934E8F</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>4</DecimalPlaces>
+ <Duration>1398</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>a30e48de-be76-4230-92d0-d27d6f37b940</ID>
+ <Left>474</Left>
+ <Top>320.03097345132551</Top>
+ <Width>429</Width>
+ <Height>193.26548672566258</Height>
+ <Angle>0</Angle>
+ <ItemGuid>5F12B974-2C9E-4DDD-9B20-733251A5D7E6</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>4</DecimalPlaces>
+ <Duration>1398</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>5ac4b368-093a-4192-98d4-e9d24f229b13</ID>
+ <Left>928</Left>
+ <Top>321.64601769912122</Top>
+ <Width>429</Width>
+ <Height>193.26548672566258</Height>
+ <Angle>0</Angle>
+ <ItemGuid>84CF23C9-D20D-4C08-BE1D-80201FC43C06</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>4</DecimalPlaces>
+ <Duration>1398</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ <TechItem xsi:type="MonitorRecorderItem">
+ <ID>9c34dc69-cfaa-48b4-9d02-8f0d9bba79dd</ID>
+ <Left>1303</Left>
+ <Top>34.380530973454768</Top>
+ <Width>176</Width>
+ <Height>83.05309734512457</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-1</ColorNumber>
+ <SelectedMonitorsGuids>
+ <string>89B7B89D-8050-4188-B568-35B1910CFB6F</string>
+ <string>96B89605-F999-43FE-A1CD-2645BFB33A36</string>
+ <string>84CF23C9-D20D-4C08-BE1D-80201FC43C06</string>
+ <string>FC60060A-3736-4910-B41A-FF6DABDF0E9E</string>
+ <string>5F12B974-2C9E-4DDD-9B20-733251A5D7E6</string>
+ <string>9ADF7823-B293-4275-9999-F62474D246AA</string>
+ <string>4CE6A82E-D841-4D33-BBB2-11F0743A441C</string>
+ <string>F1DF490B-0577-4FA7-ACA1-0EEF4F934E8F</string>
+ </SelectedMonitorsGuids>
+ </TechItem>
+ </Items>
+ </MachineTechViewProjectTab>
+ <MachineTechViewProjectTab>
+ <Name>Dispensers</Name>
+ <Items>
+ <TechItem xsi:type="DispenserItem">
+ <ID>dce78f33-c966-4848-8c6e-a4a01dbc7577</ID>
+ <Left>1321</Left>
+ <Top>214.15929203538531</Top>
+ <Width>159</Width>
+ <Height>215.8274336283186</Height>
+ <Angle>0</Angle>
+ <ItemGuid>2CC8E461-E91F-4D4C-A402-922477F06C87</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>1200</Speed>
+ <DisplayName>Dispenser 1</DisplayName>
+ </TechItem>
+ <TechItem xsi:type="DispenserItem">
+ <ID>2d03fc19-0502-43e1-a3ff-4012a612112b</ID>
+ <Left>1136</Left>
+ <Top>209.13274336282245</Top>
+ <Width>159</Width>
+ <Height>215.8274336283186</Height>
+ <Angle>0</Angle>
+ <ItemGuid>C8D8FE90-0375-44A2-A6D1-E997789E065C</ItemGuid>
+ <ColorNumber>-16724737</ColorNumber>
+ <Speed>1200</Speed>
+ <DisplayName>Dispenser 2</DisplayName>
+ </TechItem>
+ <TechItem xsi:type="DispenserItem">
+ <ID>81958374-3fa3-48b3-a554-5653fe1934b1</ID>
+ <Left>959</Left>
+ <Top>210.32743362830422</Top>
+ <Width>156</Width>
+ <Height>215.8274336283186</Height>
+ <Angle>0</Angle>
+ <ItemGuid>08ED9044-CAD6-4492-94B2-C07206E0164B</ItemGuid>
+ <ColorNumber>-65325</ColorNumber>
+ <Speed>1200</Speed>
+ <DisplayName>Dispenser 3</DisplayName>
+ </TechItem>
+ <TechItem xsi:type="DispenserItem">
+ <ID>8fead411-7198-4428-a364-e32f3035ed94</ID>
+ <Left>775</Left>
+ <Top>206.42920353980952</Top>
+ <Width>159</Width>
+ <Height>215.8274336283186</Height>
+ <Angle>0</Angle>
+ <ItemGuid>179F34BB-3252-4D3A-965C-E6EB43D6FE7C</ItemGuid>
+ <ColorNumber>-524544</ColorNumber>
+ <Speed>1200</Speed>
+ <DisplayName>Dispenser 4</DisplayName>
+ </TechItem>
+ <TechItem xsi:type="DispenserItem">
+ <ID>31bfa89f-e64d-4a3b-8585-c4a1b2e5a139</ID>
+ <Left>585</Left>
+ <Top>208.47345132741418</Top>
+ <Width>159</Width>
+ <Height>215.8274336283186</Height>
+ <Angle>0</Angle>
+ <ItemGuid>716B35CF-46E0-47D5-AF85-5233D212568F</ItemGuid>
+ <ColorNumber>-2108246</ColorNumber>
+ <Speed>1200</Speed>
+ <DisplayName>Dispenser 5</DisplayName>
+ </TechItem>
+ <TechItem xsi:type="DispenserItem">
+ <ID>c2bff5f3-6dc9-4b07-87ba-9e3a5814804e</ID>
+ <Left>372</Left>
+ <Top>216.75221238937439</Top>
+ <Width>159</Width>
+ <Height>215.8274336283186</Height>
+ <Angle>0</Angle>
+ <ItemGuid>99528449-4D76-4874-AB95-522951560E01</ItemGuid>
+ <ColorNumber>-263685</ColorNumber>
+ <Speed>1200</Speed>
+ <DisplayName>Dispenser 6</DisplayName>
+ </TechItem>
+ <TechItem xsi:type="DispenserItem">
+ <ID>071281a5-3569-4a62-8b68-7bea850a3c07</ID>
+ <Left>217</Left>
+ <Top>211.63716814158107</Top>
+ <Width>159</Width>
+ <Height>215.8274336283186</Height>
+ <Angle>0</Angle>
+ <ItemGuid>E8ED07E2-7C36-459C-B9E5-6A23A1E24F03</ItemGuid>
+ <ColorNumber>-723724</ColorNumber>
+ <Speed>0</Speed>
+ <DisplayName>Dispenser 7</DisplayName>
+ </TechItem>
+ <TechItem xsi:type="DispenserItem">
+ <ID>7b703b9a-a626-4ae5-8e31-fa1cfe5718f4</ID>
+ <Left>45</Left>
+ <Top>216.04867256635521</Top>
+ <Width>159</Width>
+ <Height>215.8274336283186</Height>
+ <Angle>0</Angle>
+ <ItemGuid>8A957565-4165-49F7-854D-D21F95FFBE1B</ItemGuid>
+ <ColorNumber>-724238</ColorNumber>
+ <Speed>0</Speed>
+ <DisplayName>Dispenser 8</DisplayName>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>caca40a2-310c-452e-adcf-c28ee38f6bdc</ID>
+ <Left>1305</Left>
+ <Top>31.606194690259713</Top>
+ <Width>150</Width>
+ <Height>156.04424778761069</Height>
+ <Angle>0</Angle>
+ <ItemGuid>1F0F907A-EC16-4386-AFC8-B2B156F2A822</ItemGuid>
+ <ColorNumber>-15856114</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>af52d36f-27a2-4a31-8ceb-9c43fedbed22</ID>
+ <Left>1127</Left>
+ <Top>32.535398230081626</Top>
+ <Width>150</Width>
+ <Height>156.04424778761069</Height>
+ <Angle>0</Angle>
+ <ItemGuid>A499E5E0-A812-4032-8F96-B38C6762C4BD</ItemGuid>
+ <ColorNumber>-15293470</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>d40eada8-d22a-4521-bd2a-d998ed93106f</ID>
+ <Left>955</Left>
+ <Top>32.61946902653176</Top>
+ <Width>150</Width>
+ <Height>156.04424778761069</Height>
+ <Angle>0</Angle>
+ <ItemGuid>6B1DF4B0-BCC2-400C-A3B7-31C5119A55BB</ItemGuid>
+ <ColorNumber>-1570857</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>b2d6364d-8b5c-43d2-8838-927c85b017b1</ID>
+ <Left>774</Left>
+ <Top>31.960176991142362</Top>
+ <Width>150</Width>
+ <Height>156.04424778761069</Height>
+ <Angle>0</Angle>
+ <ItemGuid>F33667BD-D9FA-4DC7-BC2C-0E89E60AE4BE</ItemGuid>
+ <ColorNumber>-1379575</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>3980e685-73b3-4af1-9593-9235be147322</ID>
+ <Left>596</Left>
+ <Top>32.889380530964274</Top>
+ <Width>150</Width>
+ <Height>156.04424778761069</Height>
+ <Angle>0</Angle>
+ <ItemGuid>19645882-6587-4A50-BD85-AF06617DC654</ItemGuid>
+ <ColorNumber>-7763381</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>51465293-58d5-40a4-8302-81856f8b4f47</ID>
+ <Left>424</Left>
+ <Top>32.973451327414409</Top>
+ <Width>150</Width>
+ <Height>156.04424778761069</Height>
+ <Angle>0</Angle>
+ <ItemGuid>AF3FD56C-95BF-4DE1-8EDC-8426B0DB2A26</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>c2a8c5b2-891b-4f9f-862c-c1c294366c78</ID>
+ <Left>252</Left>
+ <Top>31.703539823006281</Top>
+ <Width>150</Width>
+ <Height>156.04424778761069</Height>
+ <Angle>0</Angle>
+ <ItemGuid>60DA9EA3-C8A6-4D41-8AD8-3EB1BAA79CC9</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>9618e441-8973-4e16-a90b-06ce5798bd29</ID>
+ <Left>80</Left>
+ <Top>31.787610619456416</Top>
+ <Width>150</Width>
+ <Height>156.04424778761069</Height>
+ <Angle>0</Angle>
+ <ItemGuid>EF66F95A-E166-4FA2-B1AF-D6F55621817A</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="DigitalOutItem">
+ <ID>bce8c8e8-a317-4991-9aa7-cd99a45d1509</ID>
+ <Left>35</Left>
+ <Top>680.88495575221179</Top>
+ <Width>247</Width>
+ <Height>122.24778761061873</Height>
+ <Angle>0</Angle>
+ <ItemGuid>074b6ed8-0f87-4973-bbea-509838f9c3ed</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="DigitalOutItem">
+ <ID>72a23702-31bb-4ab8-aee5-2a02bcb1270b</ID>
+ <Left>321</Left>
+ <Top>708.02212389380554</Top>
+ <Width>200</Width>
+ <Height>94.15929203539747</Height>
+ <Angle>0</Angle>
+ <ItemGuid>c3d1b555-3bad-4b68-84c7-7b00a0345635</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="ControllerItem">
+ <ID>2dd6ff17-e515-4d8f-814f-a9683f404a8e</ID>
+ <Left>140</Left>
+ <Top>867.73893805310092</Top>
+ <Width>160</Width>
+ <Height>85.49115044247776</Height>
+ <Angle>0</Angle>
+ <ItemGuid>78482AA4-3DF6-421F-944C-64328D3C3EF2</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <OptimalRangeMinimum>0</OptimalRangeMinimum>
+ <OptimalRangeMaximum>70</OptimalRangeMaximum>
+ <UpdateInterval>10</UpdateInterval>
+ <IsSetToDefault>true</IsSetToDefault>
+ </TechItem>
+ <TechItem xsi:type="DigitalOutItem">
+ <ID>06843009-1da0-4811-8e77-50576d0edcb1</ID>
+ <Left>507</Left>
+ <Top>792.77433628318749</Top>
+ <Width>219</Width>
+ <Height>125.75221238938025</Height>
+ <Angle>0</Angle>
+ <ItemGuid>0c5dc1e9-da17-4ff8-86aa-6b39fd796ba9</ItemGuid>
+ <ColorNumber>-16777216</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>935dddd0-0c6f-4766-8173-f9118006a12b</ID>
+ <Left>1303</Left>
+ <Top>475.87168141593065</Top>
+ <Width>160</Width>
+ <Height>124.6504424778754</Height>
+ <Angle>0</Angle>
+ <ItemGuid>B2164815-FBF3-4CF8-81D8-20F719626664</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MultiGraphItem">
+ <ID>97e39a59-dba8-4e42-a124-b37de9453baf</ID>
+ <Left>648</Left>
+ <Top>602.92920353982106</Top>
+ <Width>622</Width>
+ <Height>181.74336283186938</Height>
+ <Angle>0</Angle>
+ <ItemGuid>D023F15D-3555-48E9-A9E9-5DF99F60D791</ItemGuid>
+ <ColorNumber>0</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>1956</Duration>
+ <Min>0</Min>
+ <Max>100</Max>
+ <UseAutoRange>true</UseAutoRange>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>46bdfce3-1c69-45dd-bbe9-582d1ac1e6f2</ID>
+ <Left>1128</Left>
+ <Top>482.80530973451141</Top>
+ <Width>140</Width>
+ <Height>117.32300884955743</Height>
+ <Angle>0</Angle>
+ <ItemGuid>0FE216B2-A097-4F2C-B465-08593F2532B3</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>429154a5-9a16-4423-85ca-ee4bae9aec3c</ID>
+ <Left>968</Left>
+ <Top>481.35398230088504</Top>
+ <Width>140</Width>
+ <Height>117.32300884955743</Height>
+ <Angle>0</Angle>
+ <ItemGuid>3271FD82-46D3-4789-B612-564967826C75</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>0f6ab8e8-99a7-4468-bde8-690a63467688</ID>
+ <Left>766</Left>
+ <Top>476.07964601769811</Top>
+ <Width>140</Width>
+ <Height>117.32300884955743</Height>
+ <Angle>0</Angle>
+ <ItemGuid>FBB806E7-42FA-4BAA-BDA1-3B8B07913AAD</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>bc0ac903-9c1f-4580-8b9e-670a76350473</ID>
+ <Left>586</Left>
+ <Top>474.38938053097161</Top>
+ <Width>140</Width>
+ <Height>117.32300884955743</Height>
+ <Angle>0</Angle>
+ <ItemGuid>436A22BB-AF79-4CB2-8A7D-DD4D9E54A81E</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>f9c960b2-b93e-46d5-b892-30337c0b55af</ID>
+ <Left>391</Left>
+ <Top>474.87168141592781</Top>
+ <Width>140</Width>
+ <Height>117.32300884955743</Height>
+ <Angle>0</Angle>
+ <ItemGuid>89EA6CC8-5363-4BEC-A370-D906611087A7</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>5ac157ab-2d53-4307-bf0b-b069854701ac</ID>
+ <Left>226</Left>
+ <Top>471.66814159292005</Top>
+ <Width>140</Width>
+ <Height>117.32300884955743</Height>
+ <Angle>0</Angle>
+ <ItemGuid>D5EBE52B-E2DF-4C97-80B1-F111F6B15854</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>65a19d7e-c524-48a0-bd70-28b99b113dd1</ID>
+ <Left>69</Left>
+ <Top>473.97787610619389</Top>
+ <Width>140</Width>
+ <Height>117.32300884955743</Height>
+ <Angle>0</Angle>
+ <ItemGuid>FE521D1B-A0EA-4FEA-AE64-33998A6CE138</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>5bf7a681-ee47-477e-8b47-ba7a2eb6e115</ID>
+ <Left>1130</Left>
+ <Top>624.9557522123913</Top>
+ <Width>144</Width>
+ <Height>80.495575221237516</Height>
+ <Angle>0</Angle>
+ <ItemGuid>3174ADCF-5793-4B5A-A3C6-B96E146A903D</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>0</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>29b17a4b-fd4e-49cc-a3cd-418730176bf7</ID>
+ <Left>969</Left>
+ <Top>625.95575221239</Top>
+ <Width>144</Width>
+ <Height>80.495575221237516</Height>
+ <Angle>0</Angle>
+ <ItemGuid>AD50C358-5BAF-4A2F-8593-51A22C85B3D1</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>0</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>21a5429f-c3a2-4e3b-ae77-c5538f30130d</ID>
+ <Left>775</Left>
+ <Top>623.66814159292062</Top>
+ <Width>144</Width>
+ <Height>82.535398230087083</Height>
+ <Angle>0</Angle>
+ <ItemGuid>E2F0FC31-CE7E-416B-ACEA-8EB6CA9B850B</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>0</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>96a46b0c-37b1-4457-93fb-b3dc301c5743</ID>
+ <Left>588</Left>
+ <Top>625.06637168141322</Top>
+ <Width>144</Width>
+ <Height>80.495575221237516</Height>
+ <Angle>0</Angle>
+ <ItemGuid>37872FE8-D68A-45BC-A441-372B7805C09F</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>0</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>d4ad8603-9929-415f-9990-1869fcff36e4</ID>
+ <Left>1310</Left>
+ <Top>628.69469026548632</Top>
+ <Width>144</Width>
+ <Height>80.495575221237516</Height>
+ <Angle>0</Angle>
+ <ItemGuid>84682E90-6926-42AA-BF8C-2CCCF5C26C97</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>0</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="ValveItem">
+ <ID>25249d78-ee37-42a8-b5aa-96f60e97c3ea</ID>
+ <Left>228</Left>
+ <Top>602.79646017698838</Top>
+ <Width>327</Width>
+ <Height>108.53097345133028</Height>
+ <Angle>0</Angle>
+ <ItemGuid>8B1FCBC3-FEEA-4F87-B56F-CE5D28B7ACA4</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>fc1d62f7-d13b-4a7b-8f9f-c687c987c7a9</ID>
+ <Left>1065</Left>
+ <Top>788.41592920352355</Top>
+ <Width>370</Width>
+ <Height>362.10619469026585</Height>
+ <Angle>0</Angle>
+ <ItemGuid>1F0F907A-EC16-4386-AFC8-B2B156F2A822</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>3</DecimalPlaces>
+ <Duration>1426</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>cc99a514-1498-4b93-a4eb-4e0a2a2e9de6</ID>
+ <Left>202</Left>
+ <Top>216.83628318584073</Top>
+ <Width>394</Width>
+ <Height>372.88495575221242</Height>
+ <Angle>0</Angle>
+ <ItemGuid>A499E5E0-A812-4032-8F96-B38C6762C4BD</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>1282</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ </Items>
+ </MachineTechViewProjectTab>
+ <MachineTechViewProjectTab>
+ <Name>Thread insertion</Name>
+ <Items>
+ <TechItem xsi:type="MotorItem">
+ <ID>443a977c-8e89-4a56-82e4-684bac7945c9</ID>
+ <Left>25</Left>
+ <Top>22.761061946902203</Top>
+ <Width>247</Width>
+ <Height>172.25663716814159</Height>
+ <Angle>0</Angle>
+ <ItemGuid>08d15ca1-d7d1-460f-8f37-42c37c287cd1</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>500</Speed>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>a821b716-cb7d-4951-84ee-e56955431099</ID>
+ <Left>355</Left>
+ <Top>20.592920353981697</Top>
+ <Width>260</Width>
+ <Height>153.00442477876106</Height>
+ <Angle>0</Angle>
+ <ItemGuid>b90a4e78-ebbf-44db-829b-949517d6400b</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>753.31858407079721</Speed>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>e36e321b-d48d-4199-a1ee-75ac18e9de1e</ID>
+ <Left>694</Left>
+ <Top>19.367256637167998</Top>
+ <Width>217</Width>
+ <Height>155.26106194690203</Height>
+ <Angle>0</Angle>
+ <ItemGuid>b7c1aea4-32c1-41cb-bca3-4aa665529b49</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>825.30467762326157</Speed>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>8790db03-4dfd-4d49-aec0-706babb55af9</ID>
+ <Left>364</Left>
+ <Top>222.16814159291846</Top>
+ <Width>240</Width>
+ <Height>172.30973451327589</Height>
+ <Angle>0</Angle>
+ <ItemGuid>2d3eaca5-4dfd-40d9-9d1f-aa4ae794eddc</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>500</Speed>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>69ebcb28-13d9-41b3-a9ef-b2be51584141</ID>
+ <Left>29</Left>
+ <Top>241.34955752210982</Top>
+ <Width>263</Width>
+ <Height>174.296460176989</Height>
+ <Angle>0</Angle>
+ <ItemGuid>c6099065-a735-4cc5-b575-c31a45bb9262</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>200</Speed>
+ </TechItem>
+ <TechItem xsi:type="ThreadMotionItem">
+ <ID>4d562029-3fdf-40a4-a5a7-9a322253c912</ID>
+ <Left>1168</Left>
+ <Top>47.305309734517039</Top>
+ <Width>304</Width>
+ <Height>167.26548672566202</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>38</Speed>
+ </TechItem>
+ <TechItem xsi:type="BreakSensorItem">
+ <ID>92607e12-2dd6-41c9-8f89-f051f386b734</ID>
+ <Left>1258</Left>
+ <Top>277.55752212389069</Top>
+ <Width>240</Width>
+ <Height>156.04424778761069</Height>
+ <Angle>0</Angle>
+ <ItemGuid>DCE08A06-6711-43AE-AB7C-EADD5AB70EE0</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>7b5b6896-f626-4e59-a5cf-2600e603c0f6</ID>
+ <Left>695</Left>
+ <Top>223.44247787610908</Top>
+ <Width>228</Width>
+ <Height>175.0353982300901</Height>
+ <Angle>0</Angle>
+ <ItemGuid>7b6d0a93-5a91-4e1f-af47-353afd8b5ea6</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>83.833754740833143</Speed>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>2052a2d3-843c-4a1c-87fd-acd0832fd1b9</ID>
+ <Left>81</Left>
+ <Top>542.88495575220634</Top>
+ <Width>220</Width>
+ <Height>168.473451327436</Height>
+ <Angle>0</Angle>
+ <ItemGuid>c9482395-35e6-4340-8dab-83d5dfe907a7</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>500</Speed>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>339b7d00-d688-41cf-926a-8171d5e62740</ID>
+ <Left>376</Left>
+ <Top>553.11061946903</Top>
+ <Width>240</Width>
+ <Height>159.84070796460173</Height>
+ <Angle>0</Angle>
+ <ItemGuid>f3b5076e-cba3-4ad2-b3cc-0c4e907bd9ef</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>40</Speed>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>7644a8f9-00a2-4e37-8f48-0667b1541114</ID>
+ <Left>1014</Left>
+ <Top>290.60619469026437</Top>
+ <Width>240</Width>
+ <Height>172.30973451327589</Height>
+ <Angle>0</Angle>
+ <ItemGuid>92237d83-9f85-48db-aa6f-2fc5c9e0d8cd</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>500</Speed>
+ </TechItem>
+ <TechItem xsi:type="DigitalOutItem">
+ <ID>c706d31b-48b0-44cc-a9c4-11d3acdcf667</ID>
+ <Left>548</Left>
+ <Top>418.71652683599893</Top>
+ <Width>269</Width>
+ <Height>127.67256637168134</Height>
+ <Angle>0</Angle>
+ <ItemGuid>2a454081-bd5e-41de-ae5d-97aefe1d76de</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>7ccff69d-50f9-4e9b-a997-72a67917df5e</ID>
+ <Left>803</Left>
+ <Top>569.80530973451619</Top>
+ <Width>227</Width>
+ <Height>145.08849557522183</Height>
+ <Angle>0</Angle>
+ <ItemGuid>9c02effb-7deb-40a1-90c3-df1fb48e6431</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>30</Speed>
+ </TechItem>
+ <TechItem xsi:type="MotorItem">
+ <ID>a88a74cb-418b-4ed0-89ec-c42ff560528e</ID>
+ <Left>1107</Left>
+ <Top>573.87168141592883</Top>
+ <Width>227</Width>
+ <Height>145.08849557522183</Height>
+ <Angle>0</Angle>
+ <ItemGuid>a359e9d0-adcc-40a5-b3d9-b9cb26eca092</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>30</Speed>
+ </TechItem>
+ </Items>
+ </MachineTechViewProjectTab>
+ <MachineTechViewProjectTab>
+ <Name>Head graphs</Name>
+ <Items>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>ffe980da-dbbe-4bac-9595-46f587e9df00</ID>
+ <Left>1</Left>
+ <Top>57.486725663716754</Top>
+ <Width>430</Width>
+ <Height>187.15486725663709</Height>
+ <Angle>0</Angle>
+ <ItemGuid>D7585119-4A42-4370-8F1E-F3E62553E588</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>2</DecimalPlaces>
+ <Duration>2962</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>300</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>c4e19f7c-e6e9-4f45-987e-f124456b2529</ID>
+ <Left>784</Left>
+ <Top>57.265486725668495</Top>
+ <Width>412</Width>
+ <Height>195.38938053097343</Height>
+ <Angle>0</Angle>
+ <ItemGuid>A8DB1D27-6B25-4FB4-A3F5-46A29BA51955</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>3</DecimalPlaces>
+ <Duration>2817</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>300</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>b8b24455-1c20-417d-bd78-5fe4c7e3d023</ID>
+ <Left>0</Left>
+ <Top>240.77433628319324</Top>
+ <Width>430</Width>
+ <Height>224.47345132743214</Height>
+ <Angle>0</Angle>
+ <ItemGuid>6C0C1AB0-3EE9-40D7-8424-A79436FBC804</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>2</DecimalPlaces>
+ <Duration>2982</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>300</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>2129a0cd-454f-4834-8197-3b048bf4b978</ID>
+ <Left>779</Left>
+ <Top>253.09292035398954</Top>
+ <Width>414</Width>
+ <Height>208.6194690265487</Height>
+ <Angle>0</Angle>
+ <ItemGuid>098F7CAB-030C-46B0-B2B8-A85AF2253032</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>2</DecimalPlaces>
+ <Duration>2949</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>892fabb7-01fa-4b39-a19e-a557fafae0ac</ID>
+ <Left>3</Left>
+ <Top>465.50884955753315</Top>
+ <Width>423</Width>
+ <Height>226.97345132743362</Height>
+ <Angle>0</Angle>
+ <ItemGuid>DACEBF90-E2B4-4CC9-A973-B8B429AA0089</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>2</DecimalPlaces>
+ <Duration>2628</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>300</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>4859974c-7224-42d5-97ca-0e2e549372f5</ID>
+ <Left>788</Left>
+ <Top>469.56194690266409</Top>
+ <Width>409</Width>
+ <Height>220.55752212389314</Height>
+ <Angle>0</Angle>
+ <ItemGuid>246C2551-5EFD-48E9-94F6-6313C5E5018F</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>2</DecimalPlaces>
+ <Duration>3153</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>300</Max>
+ </TechItem>
+ <TechItem xsi:type="PidItem">
+ <ID>81b78212-14d8-4a66-bf3a-eeea9900e0d6</ID>
+ <Left>423</Left>
+ <Top>69.712389380530908</Top>
+ <Width>179</Width>
+ <Height>131.99999999999773</Height>
+ <Angle>0</Angle>
+ <ItemGuid>df38139e-0026-46bc-b72f-df5f9eec80f7</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="PidItem">
+ <ID>34c56855-114d-4c94-b8b7-16881430d626</ID>
+ <Left>1198</Left>
+ <Top>60.787610619475856</Top>
+ <Width>144</Width>
+ <Height>147.96017699114969</Height>
+ <Angle>0</Angle>
+ <ItemGuid>d59b64f7-a8cf-4a2b-935a-943ae35fb78c</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="PidItem">
+ <ID>0d35c220-41f5-49e8-99ba-72d5134e4c81</ID>
+ <Left>1200</Left>
+ <Top>269.79646017698923</Top>
+ <Width>148</Width>
+ <Height>154.90265486725662</Height>
+ <Angle>0</Angle>
+ <ItemGuid>9de55ec4-201f-4f62-9003-f63ebea06f8f</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="PidItem">
+ <ID>e72a263a-41c2-408c-ac98-7345c787a3b0</ID>
+ <Left>1204</Left>
+ <Top>471.31858407080483</Top>
+ <Width>148</Width>
+ <Height>160.278761061948</Height>
+ <Angle>0</Angle>
+ <ItemGuid>d28bfa3c-edce-4f19-a296-3da251fcc0e2</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="PidItem">
+ <ID>62fd293e-9461-4c91-a5b3-26ef7893f780</ID>
+ <Left>420</Left>
+ <Top>250.1769911504424</Top>
+ <Width>189</Width>
+ <Height>145.75221238937741</Height>
+ <Angle>0</Angle>
+ <ItemGuid>81a3ae80-f4ea-4857-bc4e-2055d3b5fbc7</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="PidItem">
+ <ID>10c62974-d2f9-4849-b88f-f223e04bacc6</ID>
+ <Left>435</Left>
+ <Top>474.43362831858008</Top>
+ <Width>178</Width>
+ <Height>153.6504424778766</Height>
+ <Angle>0</Angle>
+ <ItemGuid>16D0DEF7-A2E0-4163-9F4B-FBEC2573BCC7</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>37657a24-40d2-4c10-be0b-0587406d77bf</ID>
+ <Left>10</Left>
+ <Top>691.58849557522046</Top>
+ <Width>415</Width>
+ <Height>203.57522123893648</Height>
+ <Angle>0</Angle>
+ <ItemGuid>AFB7B6F7-8FFB-4A7F-B814-04F0C163CAA1</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>2</DecimalPlaces>
+ <Duration>3153</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>300</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>9330a6be-17f1-4ecb-978d-719adf9fec1f</ID>
+ <Left>781</Left>
+ <Top>692.69911504425033</Top>
+ <Width>409</Width>
+ <Height>220.55752212389314</Height>
+ <Angle>0</Angle>
+ <ItemGuid>9A3877B2-9F98-4A5C-9A93-DECA2836FA8A</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>2</DecimalPlaces>
+ <Duration>3153</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>300</Max>
+ </TechItem>
+ <TechItem xsi:type="PidItem">
+ <ID>3228b2ba-83f3-4eb2-a6d2-7200301758a4</ID>
+ <Left>1191</Left>
+ <Top>723.03539823007986</Top>
+ <Width>186</Width>
+ <Height>110.3451327433603</Height>
+ <Angle>0</Angle>
+ <ItemGuid>105ac1be-e6db-4a57-9f4a-bb9c780afd33</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="PidItem">
+ <ID>6fd0eeb3-6a2a-435f-a877-0c17c26c6692</ID>
+ <Left>411</Left>
+ <Top>727.73008849557368</Top>
+ <Width>204</Width>
+ <Height>114.92035398229848</Height>
+ <Angle>0</Angle>
+ <ItemGuid>9d403aad-157a-4128-874c-704da4ed9ac1</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>f9b4095c-4e87-41f2-955c-3b572ebee370</ID>
+ <Left>611</Left>
+ <Top>269.90265486725662</Top>
+ <Width>142</Width>
+ <Height>151.99115044247787</Height>
+ <Angle>0</Angle>
+ <ItemGuid>94574D69-46E1-4144-A8B5-D4BF0DA96D18</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>HeaterZone4</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>35.56</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>4fa7a50d-5155-4785-95a0-508cd40fad4d</ID>
+ <Left>1360</Left>
+ <Top>77.818584070796476</Top>
+ <Width>140</Width>
+ <Height>168.77876106194691</Height>
+ <Angle>0</Angle>
+ <ItemGuid>27E7BB74-81C3-4EF2-80AE-962F111C441F</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>HeaterZone1</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>28.049999999999997</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>9da56601-7b5b-4f0f-afbf-2b31970b104f</ID>
+ <Left>1352</Left>
+ <Top>292.19469026548552</Top>
+ <Width>166</Width>
+ <Height>148.95132743362956</Height>
+ <Angle>0</Angle>
+ <ItemGuid>8E764A14-0F84-4FEC-928B-32A2509CAD57</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>HeaterZone3</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>35.35</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>b700e59d-f923-4f13-9dcc-942050548c22</ID>
+ <Left>1359</Left>
+ <Top>501.84513274336314</Top>
+ <Width>160</Width>
+ <Height>139.92920353982277</Height>
+ <Angle>0</Angle>
+ <ItemGuid>D6771DF4-771E-4D62-B6BA-BDE361C0A0F3</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>HeaterZone5</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>36.74</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>97bf8fa2-b07f-4f0e-87ac-820ea52d236e</ID>
+ <Left>1358</Left>
+ <Top>716.707964601771</Top>
+ <Width>160</Width>
+ <Height>128.73451327433531</Height>
+ <Angle>0</Angle>
+ <ItemGuid>42A62A48-F1D5-4BB6-AFEA-6A7DF6DCF626</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>MixerHeater</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>37.02</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>3941a557-05e6-4c1b-bb98-4f2a59892431</ID>
+ <Left>606</Left>
+ <Top>66.234513274336223</Top>
+ <Width>155</Width>
+ <Height>157.05752212389382</Height>
+ <Angle>0</Angle>
+ <ItemGuid>B4EE8CC0-EE2B-4ABE-BF09-9226860E756B</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>HeaterZone2</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>32.25</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>3020fbc5-305e-4adf-9f1e-d7a48168e2e7</ID>
+ <Left>628</Left>
+ <Top>488.76991150442484</Top>
+ <Width>133</Width>
+ <Height>155.03097345132744</Height>
+ <Angle>0</Angle>
+ <ItemGuid>D2B6CAA0-055E-4871-8D91-A5370F1ACB22</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>HeaterZone6</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>30.34</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ <TechItem xsi:type="HeaterItem">
+ <ID>a4049a51-7417-4eab-8bc1-837574307e93</ID>
+ <Left>599</Left>
+ <Top>716.27876106194685</Top>
+ <Width>161</Width>
+ <Height>143.34955752212409</Height>
+ <Angle>0</Angle>
+ <ItemGuid>6D6CFA18-5922-4AFE-84B3-2721CE128681</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <HeaterState>
+ <HeaterType>DryerAirHeater</HeaterType>
+ <SetPoint>0</SetPoint>
+ <CurrentValue>97.1</CurrentValue>
+ <IsActive>false</IsActive>
+ <IsRampingUp>false</IsRampingUp>
+ <IsInSetPoint>true</IsInSetPoint>
+ </HeaterState>
+ <SetPoint>0</SetPoint>
+ </TechItem>
+ </Items>
+ </MachineTechViewProjectTab>
+ <MachineTechViewProjectTab>
+ <Name>waste</Name>
+ <Items>
+ <TechItem xsi:type="DigitalOutItem">
+ <ID>bb9bf273-0a3d-4202-98ce-37a5f206ed75</ID>
+ <Left>119</Left>
+ <Top>68.898230088495609</Top>
+ <Width>339</Width>
+ <Height>184.4159292035398</Height>
+ <Angle>0</Angle>
+ <ItemGuid>7e1f53ec-8176-4efa-ac3d-c8f2436e60d1</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="DigitalOutItem">
+ <ID>59678a51-f995-4952-b250-e449f1fcbeac</ID>
+ <Left>468</Left>
+ <Top>80.336283185839477</Top>
+ <Width>280</Width>
+ <Height>166.17699115044252</Height>
+ <Angle>0</Angle>
+ <ItemGuid>78db28d0-0407-4942-bb62-c44da81c4f9e</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="DigitalInItem">
+ <ID>8f9ff579-0e9d-4f48-8ed0-6fa563f2aba7</ID>
+ <Left>873</Left>
+ <Top>63.831858407079665</Top>
+ <Width>174</Width>
+ <Height>133.75221238938059</Height>
+ <Angle>0</Angle>
+ <ItemGuid>06bd7c0b-5aef-445a-86c0-853becf8594b</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="DigitalInItem">
+ <ID>70d1bd1e-acdb-436a-b205-6eeb9d137120</ID>
+ <Left>1070</Left>
+ <Top>70.106194690265909</Top>
+ <Width>221</Width>
+ <Height>123.61946902654864</Height>
+ <Angle>0</Angle>
+ <ItemGuid>4048bf02-27dc-4049-9284-fe913a7e0ebe</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="DigitalInItem">
+ <ID>dcc7ce16-5b89-4ff8-acd5-7fb0b9ebb6d1</ID>
+ <Left>877</Left>
+ <Top>248.24778761061947</Top>
+ <Width>186</Width>
+ <Height>126.65929203539827</Height>
+ <Angle>0</Angle>
+ <ItemGuid>00ea1771-efee-4f3e-a0d2-8b2a4214e9fd</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>2b99bbf7-94da-4bb2-acc9-91b35e543c5d</ID>
+ <Left>897</Left>
+ <Top>358.69469026548683</Top>
+ <Width>147</Width>
+ <Height>69.9159292035398</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>Waste lower presence</Text>
+ </TechItem>
+ <TechItem xsi:type="DigitalInItem">
+ <ID>c150533c-abe4-4edf-b6ad-fa475b133142</ID>
+ <Left>1112</Left>
+ <Top>253.66814159291806</Top>
+ <Width>186</Width>
+ <Height>126.65929203539827</Height>
+ <Angle>0</Angle>
+ <ItemGuid>d2f266e3-779b-4dfe-b513-26ce61c529a4</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>d96f2a6d-0ccb-401e-8931-09086ca81fae</ID>
+ <Left>1143</Left>
+ <Top>366.78318584070507</Top>
+ <Width>147</Width>
+ <Height>69.9159292035398</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>Waste middle presence</Text>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>bb9847ba-9671-4613-bf23-a0c637ebc79d</ID>
+ <Left>151</Left>
+ <Top>271.55309734513281</Top>
+ <Width>200</Width>
+ <Height>63.836283185840671</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>pump</Text>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>d13a2df4-3f54-4c31-8f9a-ee7810fb6af5</ID>
+ <Left>504</Left>
+ <Top>283.71238938053096</Top>
+ <Width>192</Width>
+ <Height>67.88938053097354</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>valve</Text>
+ </TechItem>
+ </Items>
+ </MachineTechViewProjectTab>
+ <MachineTechViewProjectTab>
+ <Name>disp</Name>
+ <Items>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>f9531a72-3742-47a7-86bb-b589f8b3eb55</ID>
+ <Left>123</Left>
+ <Top>128.33628318584061</Top>
+ <Width>390</Width>
+ <Height>249.67699115047321</Height>
+ <Angle>0</Angle>
+ <ItemGuid>A499E5E0-A812-4032-8F96-B38C6762C4BD</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>3</DecimalPlaces>
+ <Duration>3600</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>aae29286-81b3-476a-9f58-c0fd246cae96</ID>
+ <Left>880</Left>
+ <Top>158.81415929204155</Top>
+ <Width>442</Width>
+ <Height>241.88495575221771</Height>
+ <Angle>0</Angle>
+ <ItemGuid>F33667BD-D9FA-4DC7-BC2C-0E89E60AE4BE</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>3</DecimalPlaces>
+ <Duration>3600</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>7d94c7c4-1288-4f9d-b0e6-a06794829642</ID>
+ <Left>1055</Left>
+ <Top>14.181415929203524</Top>
+ <Width>161</Width>
+ <Height>111.46017699115049</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>Y</Text>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>c95f9ad1-b607-4606-8217-400bea76f3d6</ID>
+ <Left>384</Left>
+ <Top>23.991150442480944</Top>
+ <Width>161</Width>
+ <Height>111.46017699115049</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>C</Text>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>8f141fa5-fb24-4557-adcf-a6aa55a28fb4</ID>
+ <Left>121</Left>
+ <Top>-8.8495575221214722</Top>
+ <Width>169</Width>
+ <Height>132.73893805309734</Height>
+ <Angle>0</Angle>
+ <ItemGuid>A499E5E0-A812-4032-8F96-B38C6762C4BD</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>3</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>7eab018a-ef43-4bca-a6cf-857d69767bba</ID>
+ <Left>839</Left>
+ <Top>-4.7079646017762684</Top>
+ <Width>169</Width>
+ <Height>132.73893805309734</Height>
+ <Angle>0</Angle>
+ <ItemGuid>F33667BD-D9FA-4DC7-BC2C-0E89E60AE4BE</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>3</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="MonitorRecorderItem">
+ <ID>2a9e89d4-5d60-4a83-9527-cb77fdf35c14</ID>
+ <Left>1276</Left>
+ <Top>22.287610619469035</Top>
+ <Width>187</Width>
+ <Height>102.34070796460179</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-1</ColorNumber>
+ <SelectedMonitorsGuids>
+ <string>1F0F907A-EC16-4386-AFC8-B2B156F2A822</string>
+ <string>A499E5E0-A812-4032-8F96-B38C6762C4BD</string>
+ <string>6B1DF4B0-BCC2-400C-A3B7-31C5119A55BB</string>
+ <string>F33667BD-D9FA-4DC7-BC2C-0E89E60AE4BE</string>
+ <string>19645882-6587-4A50-BD85-AF06617DC654</string>
+ </SelectedMonitorsGuids>
+ </TechItem>
+ <TechItem xsi:type="DispenserItem">
+ <ID>6d2e7962-b3ae-4682-b20e-9654f48dcffe</ID>
+ <Left>587</Left>
+ <Top>5.0619469026548813</Top>
+ <Width>155</Width>
+ <Height>131.72566371681415</Height>
+ <Angle>0</Angle>
+ <ItemGuid>2CC8E461-E91F-4D4C-A402-922477F06C87</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>500</Speed>
+ <DisplayName>Dispenser 1</DisplayName>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>5ee2718f-f068-427b-a31e-d586c7d7682c</ID>
+ <Left>131</Left>
+ <Top>552.94690265486338</Top>
+ <Width>390</Width>
+ <Height>249.67699115047321</Height>
+ <Angle>0</Angle>
+ <ItemGuid>1F0F907A-EC16-4386-AFC8-B2B156F2A822</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>3</DecimalPlaces>
+ <Duration>3600</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>1c254a92-c075-453f-9667-cdcc91cf8e6a</ID>
+ <Left>399</Left>
+ <Top>455.67256637168265</Top>
+ <Width>161</Width>
+ <Height>111.46017699115049</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>K</Text>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>d1087b1a-c36b-4242-96f5-07c2bb602cc4</ID>
+ <Left>145</Left>
+ <Top>409.52212389380446</Top>
+ <Width>169</Width>
+ <Height>132.73893805309734</Height>
+ <Angle>0</Angle>
+ <ItemGuid>1F0F907A-EC16-4386-AFC8-B2B156F2A822</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>3</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>53fe93a2-88a5-4d4d-9cd5-eb4d8a8fefae</ID>
+ <Left>604</Left>
+ <Top>561.16371681414739</Top>
+ <Width>390</Width>
+ <Height>249.67699115047321</Height>
+ <Angle>0</Angle>
+ <ItemGuid>6B1DF4B0-BCC2-400C-A3B7-31C5119A55BB</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>3</DecimalPlaces>
+ <Duration>3600</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>0bef6e9d-6da0-4f06-9e1a-c00142bde4c1</ID>
+ <Left>832</Left>
+ <Top>440.91150442477635</Top>
+ <Width>161</Width>
+ <Height>111.46017699115049</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>M</Text>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>762c5a97-a3bc-45b4-aa9f-0b50afa9cb9b</ID>
+ <Left>633</Left>
+ <Top>434.0132743362783</Top>
+ <Width>169</Width>
+ <Height>132.73893805309734</Height>
+ <Angle>0</Angle>
+ <ItemGuid>6B1DF4B0-BCC2-400C-A3B7-31C5119A55BB</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>3</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>be584f80-3250-494c-87fc-250d6deae051</ID>
+ <Left>1045</Left>
+ <Top>559.4070796459921</Top>
+ <Width>390</Width>
+ <Height>249.67699115047321</Height>
+ <Angle>0</Angle>
+ <ItemGuid>19645882-6587-4A50-BD85-AF06617DC654</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>3</DecimalPlaces>
+ <Duration>3600</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>39f6a02c-c4d9-47d0-b92d-bdea0ed5d3ce</ID>
+ <Left>1056</Left>
+ <Top>435.43805309733875</Top>
+ <Width>169</Width>
+ <Height>132.73893805309734</Height>
+ <Angle>0</Angle>
+ <ItemGuid>19645882-6587-4A50-BD85-AF06617DC654</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>3</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="TextItem">
+ <ID>5b924929-9b16-4598-94cc-b2f4bca26798</ID>
+ <Left>1304</Left>
+ <Top>448.0884955752224</Top>
+ <Width>161</Width>
+ <Height>111.46017699115049</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-14774017</ColorNumber>
+ <Text>TI</Text>
+ </TechItem>
+ <TechItem xsi:type="ValveItem">
+ <ID>89ae1fa5-1ad1-469e-ae76-0a29c35805cd</ID>
+ <Left>588</Left>
+ <Top>317.1504424778762</Top>
+ <Width>283</Width>
+ <Height>74.982300884955748</Height>
+ <Angle>0</Angle>
+ <ItemGuid>E144A221-4859-4DC3-9A7E-4A2969FB0826</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="ValveItem">
+ <ID>c218cf34-74c2-41bb-8c3b-3030abce451a</ID>
+ <Left>1363</Left>
+ <Top>384.02654867256643</Top>
+ <Width>156</Width>
+ <Height>94.234513274336337</Height>
+ <Angle>0</Angle>
+ <ItemGuid>E144A221-4859-4DC3-9A7E-4A2969FB0826</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="ValveItem">
+ <ID>75af30c6-d7f8-4745-bfb5-d6dc5d50479a</ID>
+ <Left>767</Left>
+ <Top>362.74778761061958</Top>
+ <Width>283</Width>
+ <Height>74.982300884955748</Height>
+ <Angle>0</Angle>
+ <ItemGuid>E144A221-4859-4DC3-9A7E-4A2969FB0826</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ </Items>
+ </MachineTechViewProjectTab>
+ <MachineTechViewProjectTab>
+ <Name>thread 2</Name>
+ <Items>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>661ffe9d-c924-45f8-a4ad-139ad5b0c76d</ID>
+ <Left>783</Left>
+ <Top>13.716814159289129</Top>
+ <Width>370</Width>
+ <Height>325.26106194690266</Height>
+ <Angle>0</Angle>
+ <ItemGuid>96B89605-F999-43FE-A1CD-2645BFB33A36</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>10</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100000</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>3d0f66be-0002-403d-8d4b-0d49d85c0570</ID>
+ <Left>778</Left>
+ <Top>357.34070796460236</Top>
+ <Width>370</Width>
+ <Height>325.26106194690266</Height>
+ <Angle>0</Angle>
+ <ItemGuid>D126DB23-784B-4F0C-8F88-D89A65A7549F</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>10</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>16384</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>6ce9bf4a-e710-4bc6-bcc1-e8055b77530c</ID>
+ <Left>392</Left>
+ <Top>14.632743362830524</Top>
+ <Width>370</Width>
+ <Height>325.26106194690266</Height>
+ <Angle>0</Angle>
+ <ItemGuid>FC60060A-3736-4910-B41A-FF6DABDF0E9E</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>10</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100000</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>da0aa379-4643-40cb-b990-45574e5545df</ID>
+ <Left>384</Left>
+ <Top>358.6415929203568</Top>
+ <Width>370</Width>
+ <Height>325.26106194690266</Height>
+ <Angle>0</Angle>
+ <ItemGuid>10102BC3-0EAE-47FF-A8E5-8640780CAA3D</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>10</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>16384</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>09b31ecb-8eaf-4c70-8057-1a11b5f10bad</ID>
+ <Left>9</Left>
+ <Top>12.004424778760324</Top>
+ <Width>370</Width>
+ <Height>325.26106194690266</Height>
+ <Angle>0</Angle>
+ <ItemGuid>89B7B89D-8050-4188-B568-35B1910CFB6F</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>10</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100000</Max>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>2a970ff9-b593-4df4-977f-7d29ce25d0c6</ID>
+ <Left>1157</Left>
+ <Top>358.73008849558084</Top>
+ <Width>370</Width>
+ <Height>325.26106194690266</Height>
+ <Angle>0</Angle>
+ <ItemGuid>84CF23C9-D20D-4C08-BE1D-80201FC43C06</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <DecimalPlaces>1</DecimalPlaces>
+ <Duration>10</Duration>
+ <UseAutoRange>true</UseAutoRange>
+ <Min>0</Min>
+ <Max>100</Max>
+ </TechItem>
+ <TechItem xsi:type="PidItem">
+ <ID>eebe8aa9-cff0-45ef-b1dd-d71cbe3b2947</ID>
+ <Left>1190</Left>
+ <Top>18.473451327433565</Top>
+ <Width>250</Width>
+ <Height>288.54424778761074</Height>
+ <Angle>0</Angle>
+ <ItemGuid>457458a4-3d46-4c56-b1d5-db2a2f0e2f3b</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="PidItem">
+ <ID>a47289e5-d489-4136-8c32-d88fe44acde8</ID>
+ <Left>40</Left>
+ <Top>347.32743362831985</Top>
+ <Width>290</Width>
+ <Height>352.60176991150331</Height>
+ <Angle>0</Angle>
+ <ItemGuid>7cb1cbfc-50cf-4725-b15a-937626cee8a3</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ </TechItem>
+ <TechItem xsi:type="ThreadMotionItem">
+ <ID>09068c33-62d1-45dc-891c-f645431ff5f2</ID>
+ <Left>531</Left>
+ <Top>704.22123893805315</Top>
+ <Width>232</Width>
+ <Height>103.35398230088504</Height>
+ <Angle>0</Angle>
+ <ColorNumber>-1</ColorNumber>
+ <Speed>40</Speed>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>d2e6c2a2-7205-45d3-84c9-658bf3c15b7f</ID>
+ <Left>259</Left>
+ <Top>664.7035398230089</Top>
+ <Width>183</Width>
+ <Height>142.87168141592929</Height>
+ <Angle>0</Angle>
+ <ItemGuid>FC60060A-3736-4910-B41A-FF6DABDF0E9E</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ </Items>
+ </MachineTechViewProjectTab>
+ </Tabs>
+ <SelectedTabIndex>2</SelectedTabIndex>
+</MachineTechViewProject> \ No newline at end of file
diff --git a/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk b/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk
index 793efc9e8..c6e1d0aed 100644
--- a/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk
+++ b/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk
Binary files differ
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/DeveloperModuleSettings.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/DeveloperModuleSettings.cs
index e6d5674e1..2099b12d9 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/DeveloperModuleSettings.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/DeveloperModuleSettings.cs
@@ -24,9 +24,22 @@ namespace Tango.MachineStudio.Developer
public String DefaultJobRmlGuid { get; set; }
+ /// <summary>
+ /// Gets or sets a value indicating whether to enable gradient generation.
+ /// </summary>
+ public bool EnableGradientGeneration { get; set; }
+
+ /// <summary>
+ /// Gets or sets the gradient resolution in centimeters.
+ /// </summary>
+ public int GradientResolutionCM { get; set; }
+
public DeveloperModuleSettings()
{
ProcessParametersIndices = new List<ParameterIndex>();
+
+ EnableGradientGeneration = true;
+ GradientResolutionCM = 500;
}
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
index 4ce8ab39d..3f28c2cff 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
@@ -552,6 +552,12 @@ namespace Tango.MachineStudio.Developer.ViewModels
public IAuthenticationProvider AuthenticationProvider { get; set; }
+ public DeveloperModuleSettings Settings
+ {
+ get { return _settings; }
+ set { _settings = value; RaisePropertyChangedAuto(); }
+ }
+
#endregion
#region Commands
@@ -783,7 +789,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
public override void OnApplicationReady()
{
- _settings = SettingsManager.Default.GetOrCreate<DeveloperModuleSettings>();
+ Settings = SettingsManager.Default.GetOrCreate<DeveloperModuleSettings>();
SelectedJobs = new ObservableCollection<Job>();
JobEvents = new ObservableCollection<MachinesEvent>();
@@ -972,7 +978,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
{
_preparingTaskItem = _notification.PushTaskItem("Preparing job for printing...");
}
- else if (percent == 100)
+ else if (percent == 100 && _preparingTaskItem != null)
{
_preparingTaskItem.Pop();
_preparingTaskItem = null;
@@ -1341,6 +1347,9 @@ namespace Tango.MachineStudio.Developer.ViewModels
IsFree = false;
LogManager.Log("Sending job to machine operator...");
+ MachineOperator.GradientGenerationConfiguration.IsEnabled = Settings.EnableGradientGeneration;
+ MachineOperator.GradientGenerationConfiguration.ResolutionCM = Settings.GradientResolutionCM;
+
if (resumeFunc == null)
{
JobHandler = await MachineOperator.Print(ActiveJob, SelectedProcessParametersTable);
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml
index a5d137e67..8a5ec94fa 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml
@@ -867,9 +867,9 @@
<DockPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Right" VerticalAlignment="Center" Margin="0 0 0 0">
<TextBlock VerticalAlignment="Center" Foreground="DimGray">Generate Gradient</TextBlock>
- <ToggleButton Margin="10 0 0 0" IsChecked="{Binding ApplicationManager.ConnectedMachine.GradientGenerationConfiguration.IsEnabled,Mode=TwoWay}" />
+ <ToggleButton Margin="10 0 0 0" IsChecked="{Binding Settings.EnableGradientGeneration,Mode=TwoWay}" />
<TextBlock Margin="10 0 0 0" VerticalAlignment="Center" Foreground="DimGray">Resolution:</TextBlock>
- <mahapps:NumericUpDown HideUpDownButtons="True" Width="90" HorizontalAlignment="Left" FontSize="14" FontFamily="{StaticResource digital-7}" StringFormat="{}{0:N0} cm" Margin="5 1 0 0" Minimum="10" Maximum="1000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" BorderBrush="DimGray" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Left" Value="{Binding MachineOperator.GradientGenerationConfiguration.ResolutionCM,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
+ <mahapps:NumericUpDown HideUpDownButtons="True" Width="90" HorizontalAlignment="Left" FontSize="14" FontFamily="{StaticResource digital-7}" StringFormat="{}{0:N0} cm" Margin="5 1 0 0" Minimum="10" Maximum="1000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" BorderBrush="DimGray" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Left" Value="{Binding Settings.GradientResolutionCM,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
<mahapps:NumericUpDown.Resources>
<StaticResource ResourceKey="SelectAllTextBoxResource"></StaticResource>
</mahapps:NumericUpDown.Resources>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs
index e5fe63d87..0433ff7be 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs
@@ -146,7 +146,7 @@ namespace Tango.MachineStudio.Common
StudioModulesBounds = new List<StudioModuleBounds>();
Environment = WorkingEnvironment.Remote;
DeploymentSlot = DeploymentSlot.DEV;
- JobUploadStrategy = JobUploadStrategy.Default;
+ JobUploadStrategy = JobUploadStrategy.JobDescriptionFile;
MaximumCacheTime = TimeSpan.FromMinutes(5);
CachingMode = ObservablesContextInMemoryCachingMode.None;
}
diff --git a/Software/Visual_Studio/TCC/Tango.TCC.BL/Entities/Device.cs b/Software/Visual_Studio/TCC/Tango.TCC.BL/Entities/Device.cs
index 709b72a21..e2b3d68e4 100644
--- a/Software/Visual_Studio/TCC/Tango.TCC.BL/Entities/Device.cs
+++ b/Software/Visual_Studio/TCC/Tango.TCC.BL/Entities/Device.cs
@@ -24,5 +24,11 @@ namespace Tango.TCC.BL.Entities
[Column("LAST_LOGIN")]
public DateTime LastLogin { get; set; }
+
+ [Column("MACHINE_REGISTERED")]
+ public bool MachineRegistered { get; set; }
+
+ [Column("ORGANIZATION_GUID")]
+ public String OrganizationGuid { get; set; }
}
}
diff --git a/Software/Visual_Studio/TCC/Tango.TCC.BL/Entities/TCCEntityBase.cs b/Software/Visual_Studio/TCC/Tango.TCC.BL/Entities/TCCEntityBase.cs
index 9e3778a3c..f003bf6f0 100644
--- a/Software/Visual_Studio/TCC/Tango.TCC.BL/Entities/TCCEntityBase.cs
+++ b/Software/Visual_Studio/TCC/Tango.TCC.BL/Entities/TCCEntityBase.cs
@@ -14,5 +14,10 @@ namespace Tango.TCC.BL.Entities
[Column("GUID")]
public String Guid { get; set; }
+
+ public TCCEntityBase()
+ {
+ Guid = System.Guid.NewGuid().ToString();
+ }
}
}
diff --git a/Software/Visual_Studio/TCC/Tango.TCC.BL/Web/DefinitionResponse.cs b/Software/Visual_Studio/TCC/Tango.TCC.BL/Web/DefinitionResponse.cs
index 5ab6cfd6d..ea09dfdef 100644
--- a/Software/Visual_Studio/TCC/Tango.TCC.BL/Web/DefinitionResponse.cs
+++ b/Software/Visual_Studio/TCC/Tango.TCC.BL/Web/DefinitionResponse.cs
@@ -18,6 +18,8 @@ namespace Tango.TCC.BL.Web
public CardDetectionHistogramMethods HistogramMethod { get; set; }
public bool EnableDoubleChecking { get; set; }
public bool EnforceBarcodeDetection { get; set; }
+ public List<String> OrganizationMachines { get; set; }
+ public bool IsRegistered { get; set; }
public DefinitionResponse()
{
@@ -29,6 +31,7 @@ namespace Tango.TCC.BL.Web
HistogramMethod = CardDetectionHistogramMethods.Chi_Square;
EnableDoubleChecking = true;
EnforceBarcodeDetection = true;
+ OrganizationMachines = new List<string>();
}
}
}
diff --git a/Software/Visual_Studio/TCC/Tango.TCC.Service/Controllers/ColorDetectionController.cs b/Software/Visual_Studio/TCC/Tango.TCC.Service/Controllers/ColorDetectionController.cs
index a9ab84931..a28c2cb12 100644
--- a/Software/Visual_Studio/TCC/Tango.TCC.Service/Controllers/ColorDetectionController.cs
+++ b/Software/Visual_Studio/TCC/Tango.TCC.Service/Controllers/ColorDetectionController.cs
@@ -11,11 +11,14 @@ using System.Security.Authentication;
using System.Web.Http;
using Tango.PMR.TCC;
using Tango.TCC.BL;
+using Tango.TCC.BL.Entities;
using Tango.TCC.BL.Web;
+using Tango.TCC.Service.DB;
using Tango.TCC.Service.Filters;
using Tango.TCC.Service.Security;
using Tango.Web.Controllers;
using Tango.Web.Security;
+using System.Data.Entity;
namespace Tango.TCC.Service.Controllers
{
@@ -28,6 +31,23 @@ namespace Tango.TCC.Service.Controllers
if (request.AppID == TCCServiceConfig.APP_ID)
{
+ using (var db = TccDbContext.CreateTCC())
+ {
+ var device = db.Devices.SingleOrDefault(x => x.DeviceID == request.DeviceID);
+
+ if (device == null)
+ {
+ device = new Device();
+ device.DeviceID = request.DeviceID;
+ device.DeviceModel = request.Device;
+ device.Email = request.Email;
+ device.LastLogin = DateTime.UtcNow;
+ device.OSVersion = request.OSVersion;
+ db.Devices.Add(device);
+ db.SaveChanges();
+ }
+ }
+
response.AccessToken = WebToken<DeviceTokenObject>.CreateNew(TCCServiceConfig.JWT_TOKEN_SECRET, new DeviceTokenObject()
{
DeviceID = request.DeviceID,
@@ -45,20 +65,40 @@ namespace Tango.TCC.Service.Controllers
[HttpPost]
public DefinitionResponse GetDefinition(DefinitionRequest request)
{
- String s = RequestToken.Object.DeviceID;
-
- return new DefinitionResponse()
+ using (var db = TccDbContext.CreateTCC())
{
- TemplateString = TCCServiceConfig.TEMPLATE_STRING,
- SampleWidth = TCCServiceConfig.SAMPLE_WIDTH,
- SampleHeight = TCCServiceConfig.SAMPLE_HEIGHT,
- CameraWidth = TCCServiceConfig.CAMERA_WIDTH,
- CameraHeight = TCCServiceConfig.CAMERA_HEIGHT,
- HistogramMethod = TCCServiceConfig.HISTOGRAM_METHOD,
- SimilarityTolerance = TCCServiceConfig.SIMILARITY_TOLERANCE,
- EnableDoubleChecking = TCCServiceConfig.ENABLE_DOUBLE_CHECKING,
- EnforceBarcodeDetection = TCCServiceConfig.ENFORCE_BARCODE_DETECTION,
- };
+ var response = new DefinitionResponse()
+ {
+ TemplateString = TCCServiceConfig.TEMPLATE_STRING,
+ SampleWidth = TCCServiceConfig.SAMPLE_WIDTH,
+ SampleHeight = TCCServiceConfig.SAMPLE_HEIGHT,
+ CameraWidth = TCCServiceConfig.CAMERA_WIDTH,
+ CameraHeight = TCCServiceConfig.CAMERA_HEIGHT,
+ HistogramMethod = TCCServiceConfig.HISTOGRAM_METHOD,
+ SimilarityTolerance = TCCServiceConfig.SIMILARITY_TOLERANCE,
+ EnableDoubleChecking = TCCServiceConfig.ENABLE_DOUBLE_CHECKING,
+ EnforceBarcodeDetection = TCCServiceConfig.ENFORCE_BARCODE_DETECTION,
+ };
+
+ var device = db.Devices.SingleOrDefault(x => x.DeviceID == RequestToken.Object.DeviceID);
+
+ if (device != null && device.MachineRegistered)
+ {
+ using (var tangoDb = TccDbContext.CreateTango())
+ {
+ var machines = tangoDb.Machines.Where(x => x.OrganizationGuid == device.OrganizationGuid);
+
+ response.IsRegistered = true;
+
+ foreach (var m in machines)
+ {
+ response.OrganizationMachines.Add(m.SerialNumber);
+ }
+ }
+ }
+
+ return response;
+ }
}
[JwtTokenFilter]
@@ -111,9 +151,37 @@ namespace Tango.TCC.Service.Controllers
{
MachineRegistrationResponse response = new MachineRegistrationResponse();
- response.OrganizationMachines.Add("0002");
+ using (var tangoDB = TccDbContext.CreateTango())
+ {
+ var machine = tangoDB.Machines.SingleOrDefault(x => x.SerialNumber == request.SerialNumber);
+
+ if (machine == null)
+ {
+ throw new AuthenticationException("Invalid serial number.");
+ }
+
+ var all_machines = tangoDB.Machines.Where(x => x.OrganizationGuid == machine.OrganizationGuid);
+
+ foreach (var m in all_machines)
+ {
+ response.OrganizationMachines.Add(m.SerialNumber);
+ }
- //throw new AuthenticationException("No such serial number...");
+ using (var db = TccDbContext.CreateTCC())
+ {
+ String deviceId = RequestToken.Object.DeviceID;
+ var device = db.Devices.SingleOrDefault(x => x.DeviceID == deviceId);
+
+ if (device == null)
+ {
+ throw new InvalidOperationException("Could not find the device id.");
+ }
+
+ device.MachineRegistered = true;
+ device.OrganizationGuid = machine.OrganizationGuid;
+ db.SaveChanges();
+ }
+ }
return response;
}
diff --git a/Software/Visual_Studio/TCC/Tango.TCC.Service/DB/TccDbContext.cs b/Software/Visual_Studio/TCC/Tango.TCC.Service/DB/TccDbContext.cs
new file mode 100644
index 000000000..de38c0b91
--- /dev/null
+++ b/Software/Visual_Studio/TCC/Tango.TCC.Service/DB/TccDbContext.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Tango.BL;
+using Tango.Core;
+using Tango.TCC.BL.Entities;
+using Tango.Web;
+using Tango.Web.Helpers;
+
+namespace Tango.TCC.Service.DB
+{
+ public class TccDbContext
+ {
+ public static ObservablesContext CreateTango()
+ {
+ return ObservablesContextHelper.CreateContext(TCCServiceConfig.TANGO_DB_CATALOG);
+ }
+
+ public static TCCContext CreateTCC()
+ {
+ if (System.Diagnostics.Debugger.IsAttached)
+ {
+ return new TCCContext(new Core.DataSource()
+ {
+ Address = "localhost\\SQLEXPRESS",
+ Catalog = "TCC",
+ IntegratedSecurity = true,
+ Type = DataSourceType.SQLServer,
+ });
+ }
+ else
+ {
+ return new TCCContext(new Core.DataSource()
+ {
+ Address = WebConfig.DB_ADDRESS,
+ Catalog = WebConfig.DB_CATALOG,
+ IntegratedSecurity = false,
+ Type = DataSourceType.SQLServer,
+ UserName = WebConfig.DB_USER_NAME,
+ Password = WebConfig.DB_PASSWORD
+ });
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Software/Visual_Studio/TCC/Tango.TCC.Service/TCCServiceConfig.cs b/Software/Visual_Studio/TCC/Tango.TCC.Service/TCCServiceConfig.cs
index 14e9ef8cc..343d27e0a 100644
--- a/Software/Visual_Studio/TCC/Tango.TCC.Service/TCCServiceConfig.cs
+++ b/Software/Visual_Studio/TCC/Tango.TCC.Service/TCCServiceConfig.cs
@@ -76,5 +76,10 @@ namespace Tango.TCC.Service
/// Gets the mobile application ID.
/// </summary>
public static String APP_ID => ConfigurationManager.AppSettings[nameof(APP_ID)].ToString();
+
+ /// <summary>
+ /// Gets the database catalog.
+ /// </summary>
+ public static String TANGO_DB_CATALOG => ConfigurationManager.AppSettings[nameof(TANGO_DB_CATALOG)].ToString();
}
} \ No newline at end of file
diff --git a/Software/Visual_Studio/TCC/Tango.TCC.Service/Tango.TCC.Service.csproj b/Software/Visual_Studio/TCC/Tango.TCC.Service/Tango.TCC.Service.csproj
index fe4d6e85b..b7042197c 100644
--- a/Software/Visual_Studio/TCC/Tango.TCC.Service/Tango.TCC.Service.csproj
+++ b/Software/Visual_Studio/TCC/Tango.TCC.Service/Tango.TCC.Service.csproj
@@ -175,6 +175,7 @@
<Compile Include="Controllers\AccountController.cs" />
<Compile Include="Controllers\ColorDetectionController.cs" />
<Compile Include="Controllers\HomeController.cs" />
+ <Compile Include="DB\TccDbContext.cs" />
<Compile Include="Filters\JwtTokenFilter.cs" />
<Compile Include="Global.asax.cs">
<DependentUpon>Global.asax</DependentUpon>
@@ -215,6 +216,10 @@
<None Include="Properties\PublishProfiles\TwineTCC - Production.pubxml" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\..\Tango.BL\Tango.BL.csproj">
+ <Project>{f441feee-322a-4943-b566-110e12fd3b72}</Project>
+ <Name>Tango.BL</Name>
+ </ProjectReference>
<ProjectReference Include="..\..\Tango.Core\Tango.Core.csproj">
<Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project>
<Name>Tango.Core</Name>
diff --git a/Software/Visual_Studio/TCC/Tango.TCC.Service/Web.config b/Software/Visual_Studio/TCC/Tango.TCC.Service/Web.config
index 37e3e528d..de53d7d14 100644
--- a/Software/Visual_Studio/TCC/Tango.TCC.Service/Web.config
+++ b/Software/Visual_Studio/TCC/Tango.TCC.Service/Web.config
@@ -18,7 +18,8 @@
<add key="DB_ADDRESS" value="twine.database.windows.net" />
<add key="DB_USER_NAME" value="Roy" />
<add key="DB_PASSWORD" value="Aa123456" />
- <add key="DB_CATALOG" value="TCC_DEV" />
+ <add key="DB_CATALOG" value="TCC" />
+ <add key="TANGO_DB_CATALOG" value="Tango_TEST" />
<add key="STORAGE_ACCOUNT" value="DefaultEndpointsProtocol=https;AccountName=tangostorage;AccountKey=S4z/D+Yg6mwMis+bs/VpcDLA9yE1iZaYq23shQlRIi2KmM9E7JY8zdZjeAPOPdG3gONHoNDEpsgH6D4cqQ/bsA==;EndpointSuffix=core.windows.net" />
<add key="TENANT_ID" value="2ebd63a5-bc2f-41dc-9066-4409ed5e5dd4" />
<add key="CLIENT_ID" value="ec612854-7abc-457b-808a-5d0c5ba80c57" />
diff --git a/Software/Visual_Studio/Tango.Web/Helpers/ObservablesContextHelper.cs b/Software/Visual_Studio/Tango.Web/Helpers/ObservablesContextHelper.cs
index fcf6eb599..b0ef6b104 100644
--- a/Software/Visual_Studio/Tango.Web/Helpers/ObservablesContextHelper.cs
+++ b/Software/Visual_Studio/Tango.Web/Helpers/ObservablesContextHelper.cs
@@ -10,12 +10,12 @@ namespace Tango.Web.Helpers
{
public static class ObservablesContextHelper
{
- public static ObservablesContext CreateContext()
+ public static ObservablesContext CreateContext(String catalog = null)
{
return new ObservablesContext(new DataSource()
{
Address = WebConfig.DB_ADDRESS,
- Catalog = WebConfig.DB_CATALOG,
+ Catalog = catalog != null ? catalog : WebConfig.DB_CATALOG,
IntegratedSecurity = false,
Type = DataSourceType.SQLServer,
UserName = WebConfig.DB_USER_NAME,