diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-05-05 11:43:19 +0300 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-05-05 11:43:19 +0300 |
| commit | 9cc18084e2f9db73ce9e2820dfebcab4e50e5730 (patch) | |
| tree | 7e8751d6796a34599adf4fd90964ac62c0ee1cc7 /Software | |
| parent | eda6e4979dbb722ce5f9412955f89388dfa2af3f (diff) | |
| download | Tango-9cc18084e2f9db73ce9e2820dfebcab4e50e5730.tar.gz Tango-9cc18084e2f9db73ce9e2820dfebcab4e50e5730.zip | |
MREGE.
Diffstat (limited to 'Software')
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 Binary files differnew file mode 100644 index 000000000..69ff01eea --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/about.png 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 Binary files differnew file mode 100644 index 000000000..c1a9b62a9 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/delete_thin.png 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 Binary files differnew file mode 100644 index 000000000..bc9aeb86b --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/error.png 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 Binary files differnew file mode 100644 index 000000000..50aca55cb --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/how_to.png 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 Binary files differnew file mode 100644 index 000000000..188126db8 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icon_twine_card.png 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 Binary files differnew file mode 100644 index 000000000..89c3b1653 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_close.png 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 Binary files differnew file mode 100644 index 000000000..c04a02d4d --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/icons_delete.png 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 Binary files differnew file mode 100644 index 000000000..79a64c487 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/info.png 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 Binary files differnew file mode 100644 index 000000000..05656ffdc --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/snapmatch.png 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 Binary files differnew file mode 100644 index 000000000..ec9ae5576 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-hdpi/twine_card_icon.png 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 Binary files differnew file mode 100644 index 000000000..65e278cd4 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/about.png 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 Binary files differnew file mode 100644 index 000000000..524997a78 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/delete_thin.png 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 Binary files differnew file mode 100644 index 000000000..db3db4966 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/error.png 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 Binary files differnew file mode 100644 index 000000000..59ba0e181 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/how_to.png 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 Binary files differnew file mode 100644 index 000000000..bad44f686 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icon_twine_card.png 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 Binary files differnew file mode 100644 index 000000000..4e9940432 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_close.png 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 Binary files differnew file mode 100644 index 000000000..e9a9a108e --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/icons_delete.png 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 Binary files differnew file mode 100644 index 000000000..a9bec6997 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/info.png 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 Binary files differnew file mode 100644 index 000000000..bbd2be018 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/snapmatch.png 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 Binary files differnew file mode 100644 index 000000000..e7ff93a39 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-mdpi/twine_card_icon.png 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 Binary files differnew file mode 100644 index 000000000..d5701a483 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/about.png 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 Binary files differnew file mode 100644 index 000000000..b6b951c0a --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/delete_thin.png 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 Binary files differnew file mode 100644 index 000000000..41fa3df55 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/error.png 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 Binary files differnew file mode 100644 index 000000000..fbeb31818 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/how_to.png 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 Binary files differnew file mode 100644 index 000000000..48e6595fa --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icon_twine_card.png 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 Binary files differnew file mode 100644 index 000000000..f4e9e1c50 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_close.png 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 Binary files differnew file mode 100644 index 000000000..55753d24a --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/icons_delete.png 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 Binary files differnew file mode 100644 index 000000000..3e33de5a6 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/info.png 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 Binary files differnew file mode 100644 index 000000000..994d77ffe --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/snapmatch.png 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 Binary files differnew file mode 100644 index 000000000..ff3f1c99c --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xhdpi/twine_card_icon.png 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 Binary files differnew file mode 100644 index 000000000..06fedcd88 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/about.png 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 Binary files differnew file mode 100644 index 000000000..f1e190f1c --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/delete_thin.png 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 Binary files differnew file mode 100644 index 000000000..019edf5c7 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/error.png 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 Binary files differnew file mode 100644 index 000000000..bae6374b6 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/how_to.png 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 Binary files differnew file mode 100644 index 000000000..e399b466b --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icon_twine_card.png 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 Binary files differnew file mode 100644 index 000000000..91ba9167d --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_close.png 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 Binary files differnew file mode 100644 index 000000000..8e54c739c --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/icons_delete.png 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 Binary files differnew file mode 100644 index 000000000..3727e7129 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/info.png 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 Binary files differnew file mode 100644 index 000000000..198fb9f6f --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/snapmatch.png 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 Binary files differnew file mode 100644 index 000000000..e8c54a75f --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxhdpi/twine_card_icon.png 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 Binary files differnew file mode 100644 index 000000000..85234de5d --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/about.png 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 Binary files differnew file mode 100644 index 000000000..33b633fcc --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/delete_thin.png 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 Binary files differnew file mode 100644 index 000000000..f386b553d --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/error.png 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 Binary files differnew file mode 100644 index 000000000..0569f95f7 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/how_to.png 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 Binary files differnew file mode 100644 index 000000000..589cf908d --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icon_twine_card.png 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 Binary files differnew file mode 100644 index 000000000..f37a9bbbc --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_close.png 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 Binary files differnew file mode 100644 index 000000000..ccc594f43 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/icons_delete.png 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 Binary files differnew file mode 100644 index 000000000..07af24775 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/info.png 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 Binary files differnew file mode 100644 index 000000000..7bf802396 --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/snapmatch.png 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 Binary files differnew file mode 100644 index 000000000..e2b2bf09f --- /dev/null +++ b/Software/Android_Studio/ColorCapture/app/src/main/res/drawable-xxxhdpi/twine_card_icon.png 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 0fc4b64c3..79c194d77 100644 --- a/Software/DB/PPC/Tango.mdf +++ b/Software/DB/PPC/Tango.mdf diff --git a/Software/DB/PPC/Tango_log.ldf b/Software/DB/PPC/Tango_log.ldf Binary files differindex 4f43b9c7e..539afcfc3 100644 --- a/Software/DB/PPC/Tango_log.ldf +++ b/Software/DB/PPC/Tango_log.ldf diff --git a/Software/DB/TCC/TCC.mdf b/Software/DB/TCC/TCC.mdf Binary files differindex c0bbe251e..b4a83e6b3 100644 --- a/Software/DB/TCC/TCC.mdf +++ b/Software/DB/TCC/TCC.mdf diff --git a/Software/DB/TCC/TCC_log.ldf b/Software/DB/TCC/TCC_log.ldf Binary files differindex 844153dde..d7a91e5ac 100644 --- a/Software/DB/TCC/TCC_log.ldf +++ b/Software/DB/TCC/TCC_log.ldf diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf Binary files differindex 147f8d1b6..659b32f42 100644 --- a/Software/DB/Tango.mdf +++ b/Software/DB/Tango.mdf diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf Binary files differindex c8e576a2a..27cf94e8f 100644 --- a/Software/DB/Tango_log.ldf +++ b/Software/DB/Tango_log.ldf 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 Binary files differnew file mode 100644 index 000000000..69ff01eea --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/about.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/delete_thin.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/delete_thin.png Binary files differnew file mode 100644 index 000000000..c1a9b62a9 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/delete_thin.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/error.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/error.png Binary files differnew file mode 100644 index 000000000..bc9aeb86b --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/error.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/how_to.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/how_to.png Binary files differnew file mode 100644 index 000000000..50aca55cb --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/how_to.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/icon_twine_Card.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/icon_twine_Card.png Binary files differnew file mode 100644 index 000000000..188126db8 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/icon_twine_Card.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_close.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_close.png Binary files differnew file mode 100644 index 000000000..89c3b1653 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_close.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_delete.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_delete.png Binary files differnew file mode 100644 index 000000000..c04a02d4d --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/icons_delete.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/info.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/info.png Binary files differnew file mode 100644 index 000000000..79a64c487 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/info.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card.png Binary files differindex 33849c970..188126db8 100644 --- a/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card.png +++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card_icon.png b/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card_icon.png Binary files differnew file mode 100644 index 000000000..ec9ae5576 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-hdpi/twine_card_icon.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/about.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/about.png Binary files differnew file mode 100644 index 000000000..65e278cd4 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/about.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/delete_thin.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/delete_thin.png Binary files differnew file mode 100644 index 000000000..524997a78 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/delete_thin.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/error.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/error.png Binary files differnew file mode 100644 index 000000000..db3db4966 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/error.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/how_to.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/how_to.png Binary files differnew file mode 100644 index 000000000..59ba0e181 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/how_to.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/icon_twine_Card.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/icon_twine_Card.png Binary files differnew file mode 100644 index 000000000..bad44f686 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/icon_twine_Card.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_close.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_close.png Binary files differnew file mode 100644 index 000000000..4e9940432 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_close.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_delete.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_delete.png Binary files differnew file mode 100644 index 000000000..e9a9a108e --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/icons_delete.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/info.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/info.png Binary files differnew file mode 100644 index 000000000..a9bec6997 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/info.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card.png Binary files differindex 1b77e264e..bad44f686 100644 --- a/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card.png +++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card_icon.png b/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card_icon.png Binary files differnew file mode 100644 index 000000000..e7ff93a39 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-mdpi/twine_card_icon.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/about.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/about.png Binary files differnew file mode 100644 index 000000000..d5701a483 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/about.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/delete_thin.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/delete_thin.png Binary files differnew file mode 100644 index 000000000..b6b951c0a --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/delete_thin.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/error.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/error.png Binary files differnew file mode 100644 index 000000000..41fa3df55 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/error.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/how_to.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/how_to.png Binary files differnew file mode 100644 index 000000000..fbeb31818 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/how_to.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icon_twine_Card.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icon_twine_Card.png Binary files differnew file mode 100644 index 000000000..48e6595fa --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icon_twine_Card.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_close.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_close.png Binary files differnew file mode 100644 index 000000000..f4e9e1c50 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_close.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_delete.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_delete.png Binary files differnew file mode 100644 index 000000000..55753d24a --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/icons_delete.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/info.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/info.png Binary files differnew file mode 100644 index 000000000..3e33de5a6 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/info.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card.png Binary files differindex 4eb5dc787..48e6595fa 100644 --- a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card.png +++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card_icon.png b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card_icon.png Binary files differnew file mode 100644 index 000000000..ff3f1c99c --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xhdpi/twine_card_icon.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/about.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/about.png Binary files differnew file mode 100644 index 000000000..06fedcd88 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/about.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/delete_thin.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/delete_thin.png Binary files differnew file mode 100644 index 000000000..f1e190f1c --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/delete_thin.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/error.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/error.png Binary files differnew file mode 100644 index 000000000..019edf5c7 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/error.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/how_to.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/how_to.png Binary files differnew file mode 100644 index 000000000..bae6374b6 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/how_to.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icon_twine_Card.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icon_twine_Card.png Binary files differnew file mode 100644 index 000000000..e399b466b --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icon_twine_Card.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_close.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_close.png Binary files differnew file mode 100644 index 000000000..91ba9167d --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_close.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_delete.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_delete.png Binary files differnew file mode 100644 index 000000000..8e54c739c --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/icons_delete.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/info.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/info.png Binary files differnew file mode 100644 index 000000000..3727e7129 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/info.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card.png Binary files differindex d095059bb..e399b466b 100644 --- a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card.png +++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card_icon.png b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card_icon.png Binary files differnew file mode 100644 index 000000000..e8c54a75f --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxhdpi/twine_card_icon.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/about.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/about.png Binary files differnew file mode 100644 index 000000000..85234de5d --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/about.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/delete_thin.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/delete_thin.png Binary files differnew file mode 100644 index 000000000..33b633fcc --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/delete_thin.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/error.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/error.png Binary files differnew file mode 100644 index 000000000..f386b553d --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/error.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/how_to.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/how_to.png Binary files differnew file mode 100644 index 000000000..0569f95f7 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/how_to.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icon_twine_Card.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icon_twine_Card.png Binary files differnew file mode 100644 index 000000000..589cf908d --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icon_twine_Card.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_close.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_close.png Binary files differnew file mode 100644 index 000000000..f37a9bbbc --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_close.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_delete.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_delete.png Binary files differnew file mode 100644 index 000000000..ccc594f43 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/icons_delete.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/info.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/info.png Binary files differnew file mode 100644 index 000000000..07af24775 --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/info.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card.png Binary files differindex 857f83930..589cf908d 100644 --- a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card.png +++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card.png diff --git a/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card_icon.png b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card_icon.png Binary files differnew file mode 100644 index 000000000..e2b2bf09f --- /dev/null +++ b/Software/Graphics/Mobile/zeplin/drawable-xxxhdpi/twine_card_icon.png 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 Binary files differindex 793efc9e8..c6e1d0aed 100644 --- a/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk +++ b/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk 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, |
