From 6fa2436a3b9c8b04c3e9ea8d0082062da076ed35 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar S Date: Mon, 1 Jun 2015 17:15:22 +0800 Subject: [PATCH 01/37] IntelliJ idea project structure --- .idea/.name | 1 + .idea/compiler.xml | 22 + .idea/copyright/profiles_settings.xml | 3 + .idea/flexCompiler.xml | 6 + .idea/misc.xml | 32 + .idea/modules.xml | 14 + .idea/vcs.xml | 6 + .idea/workspace.xml | 637 ++++++++++++++++++ .../CollisionDetectionKit_v15.iml | 29 + FLV Encoder/FLV Encoder.iml | 45 ++ Gestouch/Gestouch.iml | 45 ++ KSKApp_Air/KSKApp_Air.iml | 58 ++ KSKApp_Web/KSKApp_Web.iml | 103 +++ KSKInterface/KSKInterface.iml | 87 +++ .../src/sg/edu/smu/ksketch2/KSketchAssets.as | 184 ++--- KSKLibrary/KSKLibrary.iml | 29 + 16 files changed, 1209 insertions(+), 92 deletions(-) create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/flexCompiler.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 CollisionDetectionKit_v15/CollisionDetectionKit_v15.iml create mode 100644 FLV Encoder/FLV Encoder.iml create mode 100644 Gestouch/Gestouch.iml create mode 100644 KSKApp_Air/KSKApp_Air.iml create mode 100644 KSKApp_Web/KSKApp_Web.iml create mode 100644 KSKInterface/KSKInterface.iml create mode 100644 KSKLibrary/KSKLibrary.iml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 00000000..bd297db9 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +ksketch2 \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 00000000..9a8b7e5c --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000..e7bedf33 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/flexCompiler.xml b/.idea/flexCompiler.xml new file mode 100644 index 00000000..be46c8b2 --- /dev/null +++ b/.idea/flexCompiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..525f5cdb --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + 1.8 + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..565f1f5d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000..f0d622d4 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,637 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1432897052284 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CollisionDetectionKit_v15/CollisionDetectionKit_v15.iml b/CollisionDetectionKit_v15/CollisionDetectionKit_v15.iml new file mode 100644 index 00000000..b3820348 --- /dev/null +++ b/CollisionDetectionKit_v15/CollisionDetectionKit_v15.iml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FLV Encoder/FLV Encoder.iml b/FLV Encoder/FLV Encoder.iml new file mode 100644 index 00000000..615e9170 --- /dev/null +++ b/FLV Encoder/FLV Encoder.iml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Gestouch/Gestouch.iml b/Gestouch/Gestouch.iml new file mode 100644 index 00000000..1c0355a5 --- /dev/null +++ b/Gestouch/Gestouch.iml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KSKApp_Air/KSKApp_Air.iml b/KSKApp_Air/KSKApp_Air.iml new file mode 100644 index 00000000..a598e666 --- /dev/null +++ b/KSKApp_Air/KSKApp_Air.iml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KSKApp_Web/KSKApp_Web.iml b/KSKApp_Web/KSKApp_Web.iml new file mode 100644 index 00000000..b3e96545 --- /dev/null +++ b/KSKApp_Web/KSKApp_Web.iml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KSKInterface/KSKInterface.iml b/KSKInterface/KSKInterface.iml new file mode 100644 index 00000000..537072ed --- /dev/null +++ b/KSKInterface/KSKInterface.iml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchAssets.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchAssets.as index 2959dd03..1dde4ff4 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchAssets.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchAssets.as @@ -15,372 +15,372 @@ package sg.edu.smu.ksketch2 } - [Embed("assets/Button_Texture_Play.png")] + [Embed("/assets/Button_Texture_Play.png")] [Bindable] public static var texture_play:Class; - [Embed("assets/Button_Texture_Pause.png")] + [Embed("/assets/Button_Texture_Pause.png")] [Bindable] public static var texture_pause:Class; - [Embed("assets/Button_Texture_Back.png")] + [Embed("/assets/Button_Texture_Back.png")] [Bindable] public static var texture_back:Class; - [Embed("assets/Button_Texture_Back_Down.png")] + [Embed("/assets/Button_Texture_Back_Down.png")] [Bindable] public static var texture_back_down:Class; - [Embed("assets/Button_Texture_Forward.png")] + [Embed("/assets/Button_Texture_Forward.png")] [Bindable] public static var texture_forward:Class; - [Embed("assets/Button_Texture_Forward_Down.png")] + [Embed("/assets/Button_Texture_Forward_Down.png")] [Bindable] public static var texture_forward_down:Class; - [Embed("assets/Button_Texture_Frame_Prev.png")] + [Embed("/assets/Button_Texture_Frame_Prev.png")] [Bindable] public static var texture_frame_previous:Class; - [Embed("assets/Button_Texture_Frame_Prev_Down.png")] + [Embed("/assets/Button_Texture_Frame_Prev_Down.png")] [Bindable] public static var texture_frame_previous_down:Class; - [Embed("assets/Button_Texture_Frame_Next.png")] + [Embed("/assets/Button_Texture_Frame_Next.png")] [Bindable] public static var texture_frame_next:Class; - [Embed("assets/Button_Texture_Frame_Next_Down.png")] + [Embed("/assets/Button_Texture_Frame_Next_Down.png")] [Bindable] public static var texture_frame_next_down:Class; - [Embed("assets/Button_Texture_Time_Prev.png")] + [Embed("/assets/Button_Texture_Time_Prev.png")] [Bindable] public static var texture_time_previous:Class; - [Embed("assets/Button_Texture_Time_Prev_Down.png")] + [Embed("/assets/Button_Texture_Time_Prev_Down.png")] [Bindable] public static var texture_time_previous_down:Class; - [Embed("assets/Button_Texture_Time_Next.png")] + [Embed("/assets/Button_Texture_Time_Next.png")] [Bindable] public static var texture_time_next:Class; - [Embed("assets/Button_Texture_Time_Next_Down.png")] + [Embed("/assets/Button_Texture_Time_Next_Down.png")] [Bindable] public static var texture_time_next_down:Class; - [Embed("assets/Button_Texture_Menu.png")] + [Embed("/assets/Button_Texture_Menu.png")] [Bindable] public static var texture_menu:Class; - [Embed("assets/Button_Texture_Menu_Down.png")] + [Embed("/assets/Button_Texture_Menu_Down.png")] [Bindable] public static var texture_menu_down:Class; - [Embed("assets/Button_Texture_BlackPen.png")] + [Embed("/assets/Button_Texture_BlackPen.png")] [Bindable] public static var texture_blackPen:Class; - [Embed("assets/Button_Texture_BlackPen_Down.png")] + [Embed("/assets/Button_Texture_BlackPen_Down.png")] [Bindable] public static var texture_blackPen_down:Class; - [Embed("assets/Button_Texture_RedPen.png")] + [Embed("/assets/Button_Texture_RedPen.png")] [Bindable] public static var texture_redPen:Class; - [Embed("assets/Button_Texture_RedPen_Down.png")] + [Embed("/assets/Button_Texture_RedPen_Down.png")] [Bindable] public static var texture_redPen_down:Class; - [Embed("assets/Button_Texture_BluePen.png")] + [Embed("/assets/Button_Texture_BluePen.png")] [Bindable] public static var texture_bluePen:Class; - [Embed("assets/Button_Texture_BluePen_Down.png")] + [Embed("/assets/Button_Texture_BluePen_Down.png")] [Bindable] public static var texture_bluePen_down:Class; - [Embed("assets/Button_Texture_GreenPen.png")] + [Embed("/assets/Button_Texture_GreenPen.png")] [Bindable] public static var texture_greenPen:Class; - [Embed("assets/Button_Texture_GreenPen_Down.png")] + [Embed("/assets/Button_Texture_GreenPen_Down.png")] [Bindable] public static var texture_greenPen_down:Class; - [Embed("assets/Button_Texture_New_Doc.png")] + [Embed("/assets/Button_Texture_New_Doc.png")] [Bindable] public static var texture_new:Class; - [Embed("assets/Button_Texture_New_Doc_Down.png")] + [Embed("/assets/Button_Texture_New_Doc_Down.png")] [Bindable] public static var texture_new_down:Class; - [Embed("assets/Button_Texture_Eraser.png")] + [Embed("/assets/Button_Texture_Eraser.png")] [Bindable] public static var texture_eraser:Class; - [Embed("assets/Button_Texture_Eraser_Down.png")] + [Embed("/assets/Button_Texture_Eraser_Down.png")] [Bindable] public static var texture_eraser_down:Class; - [Embed("assets/Button_Texture_Options.png")] + [Embed("/assets/Button_Texture_Options.png")] [Bindable] public static var texture_options:Class; - [Embed("assets/Button_Texture_Options_Down.png")] + [Embed("/assets/Button_Texture_Options_Down.png")] [Bindable] public static var texture_options_down:Class; - [Embed("assets/Button_Texture_Help.png")] + [Embed("/assets/Button_Texture_Help.png")] [Bindable] public static var texture_help:Class; - [Embed("assets/Button_Texture_Help_Down.png")] + [Embed("/assets/Button_Texture_Help_Down.png")] [Bindable] public static var texture_help_down:Class; - [Embed("assets/Button_Texture_Undo.png")] + [Embed("/assets/Button_Texture_Undo.png")] [Bindable] public static var texture_undo:Class; - [Embed("assets/Button_Texture_Undo_Down.png")] + [Embed("/assets/Button_Texture_Undo_Down.png")] [Bindable] public static var texture_undo_down:Class; - [Embed("assets/Button_Texture_Redo.png")] + [Embed("/assets/Button_Texture_Redo.png")] [Bindable] public static var texture_redo:Class; - [Embed("assets/Button_Texture_Redo_Down.png")] + [Embed("/assets/Button_Texture_Redo_Down.png")] [Bindable] public static var texture_redo_down:Class; - [Embed("assets/Button_Texture_DocumentScreen.png")] + [Embed("/assets/Button_Texture_DocumentScreen.png")] [Bindable] public static var texture_document:Class; - [Embed("assets/Button_Texture_DocumentScreen_Down.png")] + [Embed("/assets/Button_Texture_DocumentScreen_Down.png")] [Bindable] public static var texture_document_down:Class; - [Embed("assets/Button_Texture_Camera.png")] + [Embed("/assets/Button_Texture_Camera.png")] [Bindable] public static var texture_camera:Class; - [Embed("assets/Button_Texture_Camera_Down.png")] + [Embed("/assets/Button_Texture_Camera_Down.png")] [Bindable] public static var texture_camera_down:Class; - [Embed("assets/Button_Texture_Trash.png")] + [Embed("/assets/Button_Texture_Trash.png")] [Bindable] public static var texture_trash:Class; - [Embed("assets/Button_Texture_Trash_Down.png")] + [Embed("/assets/Button_Texture_Trash_Down.png")] [Bindable] public static var texture_trash_down:Class; - [Embed("assets/Button_Texture_Insert.png")] + [Embed("/assets/Button_Texture_Insert.png")] [Bindable] public static var texture_insert:Class; - [Embed("assets/Button_Texture_Insert_Down.png")] + [Embed("/assets/Button_Texture_Insert_Down.png")] [Bindable] public static var texture_insert_down:Class; - [Embed("assets/Button_Texture_Remove.png")] + [Embed("/assets/Button_Texture_Remove.png")] [Bindable] public static var texture_remove:Class; - [Embed("assets/Button_Texture_Remove_Down.png")] + [Embed("/assets/Button_Texture_Remove_Down.png")] [Bindable] public static var texture_remove_down:Class; - [Embed("assets/Button_Texture_Clear.png")] + [Embed("/assets/Button_Texture_Clear.png")] [Bindable] public static var texture_clear:Class; - [Embed("assets/Button_Texture_Clear_Down.png")] + [Embed("/assets/Button_Texture_Clear_Down.png")] [Bindable] public static var texture_clear_down:Class; - [Embed("assets/Button_Texture_OK.png")] + [Embed("/assets/Button_Texture_OK.png")] [Bindable] public static var texture_ok:Class; - [Embed("assets/Button_Texture_OK_Down.png")] + [Embed("/assets/Button_Texture_OK_Down.png")] [Bindable] public static var texture_ok_down:Class; - [Embed("assets/Button_Texture_Cancel.png")] + [Embed("/assets/Button_Texture_Cancel.png")] [Bindable] public static var texture_cancel:Class; - [Embed("assets/Button_Texture_Cancel_Down.png")] + [Embed("/assets/Button_Texture_Cancel_Down.png")] [Bindable] public static var texture_cancel_down:Class; - [Embed("assets/Button_Texture_PrevScreen.png")] + [Embed("/assets/Button_Texture_PrevScreen.png")] [Bindable] public static var texture_prevScreen:Class; - [Embed("assets/Button_Texture_PrevScreen_Down.png")] + [Embed("/assets/Button_Texture_PrevScreen_Down.png")] [Bindable] public static var texture_prevScreen_down:Class; - [Embed("assets/Button_Texture_Photos.png")] + [Embed("/assets/Button_Texture_Photos.png")] [Bindable] public static var texture_photo:Class; - [Embed("assets/Button_Texture_Photos_Down.png")] + [Embed("/assets/Button_Texture_Photos_Down.png")] [Bindable] public static var texture_photo_down:Class; - [Embed("assets/Button_Texture_Crop.png")] + [Embed("/assets/Button_Texture_Crop.png")] [Bindable] public static var texture_crop:Class; - [Embed("assets/Button_Texture_Crop_Down.png")] + [Embed("/assets/Button_Texture_Crop_Down.png")] [Bindable] public static var texture_crop_down:Class; - [Embed("assets/Button_Texture_Extend.png")] + [Embed("/assets/Button_Texture_Extend.png")] [Bindable] public static var texture_extend:Class; - [Embed("assets/Button_Texture_Extend_Down.png")] + [Embed("/assets/Button_Texture_Extend_Down.png")] [Bindable] public static var texture_extend_down:Class; - [Embed("assets/Button_Texture_Group.png")] + [Embed("/assets/Button_Texture_Group.png")] [Bindable] public static var texture_group:Class; - [Embed("assets/Button_Texture_Group_Down.png")] + [Embed("/assets/Button_Texture_Group_Down.png")] [Bindable] public static var texture_group_down:Class; - [Embed("assets/Button_Texture_Ungroup.png")] + [Embed("/assets/Button_Texture_Ungroup.png")] [Bindable] public static var texture_ungroup:Class; - [Embed("assets/Button_Texture_Ungroup_Down.png")] + [Embed("/assets/Button_Texture_Ungroup_Down.png")] [Bindable] public static var texture_ungroup_down:Class; - [Embed("assets/Button_Texture_Image.png")] + [Embed("/assets/Button_Texture_Image.png")] [Bindable] public static var texture_images:Class; - [Embed("assets/Button_Texture_Image_Down.png")] + [Embed("/assets/Button_Texture_Image_Down.png")] [Bindable] public static var texture_images_down:Class; - [Embed("assets/Button_Texture_Lasso.png")] + [Embed("/assets/Button_Texture_Lasso.png")] [Bindable] public static var texture_lasso:Class; - [Embed("assets/Button_Texture_Lasso_Down.png")] + [Embed("/assets/Button_Texture_Lasso_Down.png")] [Bindable] public static var texture_lasso_down:Class; //========== - [Embed("assets/Button_Texture_Save.png")] + [Embed("/assets/Button_Texture_Save.png")] [Bindable] public static var texture_save:Class; - [Embed("assets/Button_Texture_Save_Down.png")] + [Embed("/assets/Button_Texture_Save_Down.png")] [Bindable] public static var texture_save_down:Class; - [Embed("assets/Button_Texture_Debug.png")] + [Embed("/assets/Button_Texture_Debug.png")] [Bindable] public static var texture_debug:Class; - [Embed("assets/Button_Texture_Debug_Down.png")] + [Embed("/assets/Button_Texture_Debug_Down.png")] [Bindable] public static var texture_debug_down:Class; - [Embed("assets/Button_Texture_Share_Android.png")] + [Embed("/assets/Button_Texture_Share_Android.png")] [Bindable] public static var texture_share_android:Class; - [Embed("assets/Button_Texture_Share_Android_Down.png")] + [Embed("/assets/Button_Texture_Share_Android_Down.png")] [Bindable] public static var texture_share_android_down:Class; - [Embed("assets/Button_Texture_Share_IOS.png")] + [Embed("/assets/Button_Texture_Share_IOS.png")] [Bindable] public static var texture_share_ios:Class; - [Embed("assets/Button_Texture_Share_IOS_Down.png")] + [Embed("/assets/Button_Texture_Share_IOS_Down.png")] [Bindable] public static var texture_share_ios_down:Class; - [Embed("assets/Button_Texture_Share_Mail.png")] + [Embed("/assets/Button_Texture_Share_Mail.png")] [Bindable] public static var texture_share_mail:Class; - [Embed("assets/Button_Texture_Share_Mail_Down.png")] + [Embed("/assets/Button_Texture_Share_Mail_Down.png")] [Bindable] public static var texture_share_mail_down:Class; - [Embed("assets/Button_Texture_Share_Facebook.png")] + [Embed("/assets/Button_Texture_Share_Facebook.png")] [Bindable] public static var texture_share_facebook:Class; - [Embed("assets/Button_Texture_Share_Facebook_Down.png")] + [Embed("/assets/Button_Texture_Share_Facebook_Down.png")] [Bindable] public static var texture_share_facebook_down:Class; - [Embed("assets/Button_Texture_Share_Twitter.png")] + [Embed("/assets/Button_Texture_Share_Twitter.png")] [Bindable] public static var texture_share_twitter:Class; - [Embed("assets/Button_Texture_Share_Twitter_Down.png")] + [Embed("/assets/Button_Texture_Share_Twitter_Down.png")] [Bindable] public static var texture_share_twitter_down:Class; //========== - [Embed("assets/Button_Texture_Center.png")] + [Embed("/assets/Button_Texture_Center.png")] [Bindable] public static var texture_center:Class; - [Embed("assets/Button_Texture_Center_Down.png")] + [Embed("/assets/Button_Texture_Center_Down.png")] [Bindable] public static var texture_center_down:Class; - [Embed("assets/Logo_KSketch.png")] + [Embed("/assets/Logo_KSketch.png")] [Bindable] public static var texture_logo:Class; - [Embed("assets/Home_KSketch_New.png")] + [Embed("/assets/Home_KSketch_New.png")] [Bindable] public static var image_new:Class; - [Embed("assets/Home_KSketch_Error.png")] + [Embed("/assets/Home_KSketch_Error.png")] [Bindable] public static var image_error:Class; - [Embed("assets/Splash_KSketch.png")] + [Embed("/assets/Splash_KSketch.png")] [Bindable] public static var image_splash:Class; - [Embed("assets/Help_KSketch.png")] + [Embed("/assets/Help_KSketch.png")] [Bindable] public static var image_help:Class; - [Embed("assets/Button_ActionList_Delete.png")] + [Embed("/assets/Button_ActionList_Delete.png")] [Bindable] public static var actionList_delete:Class; - [Embed("assets/Button_ActionList_Log.png")] + [Embed("/assets/Button_ActionList_Log.png")] [Bindable] public static var actionList_log:Class; - [Embed("assets/Button_ActionList_Save.png")] + [Embed("/assets/Button_ActionList_Save.png")] [Bindable] public static var actionList_save:Class; } diff --git a/KSKLibrary/KSKLibrary.iml b/KSKLibrary/KSKLibrary.iml new file mode 100644 index 00000000..dbafc22d --- /dev/null +++ b/KSKLibrary/KSKLibrary.iml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 3f75a380893acb26acce76589bfc8dacde8496d6 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar S Date: Wed, 3 Jun 2015 23:12:55 +0800 Subject: [PATCH 02/37] Low resolution assets --- .../src/assets/Button_Texture_Clear.png | Bin 1015 -> 3258 bytes .../src/assets/Button_Texture_Clear_Down.png | Bin 898 -> 3237 bytes .../src/assets/Button_Texture_Insert.png | Bin 953 -> 3174 bytes .../src/assets/Button_Texture_Insert_Down.png | Bin 808 -> 3142 bytes .../src/assets/Button_Texture_Remove.png | Bin 1035 -> 3201 bytes .../src/assets/Button_Texture_Remove_Down.png | Bin 890 -> 3166 bytes 6 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 KSKInterface/src/assets/Button_Texture_Clear.png mode change 100644 => 100755 KSKInterface/src/assets/Button_Texture_Clear_Down.png mode change 100644 => 100755 KSKInterface/src/assets/Button_Texture_Insert.png mode change 100644 => 100755 KSKInterface/src/assets/Button_Texture_Insert_Down.png mode change 100644 => 100755 KSKInterface/src/assets/Button_Texture_Remove.png mode change 100644 => 100755 KSKInterface/src/assets/Button_Texture_Remove_Down.png diff --git a/KSKInterface/src/assets/Button_Texture_Clear.png b/KSKInterface/src/assets/Button_Texture_Clear.png old mode 100644 new mode 100755 index 2a3c996c4630f2ff9abf69a973de0d3725135c3f..c007ff1ca9780d3d2686358183d80cc2e4c22e62 GIT binary patch literal 3258 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 PfJ8i9{an^LB{Ts5WDdmi diff --git a/KSKInterface/src/assets/Button_Texture_Clear_Down.png b/KSKInterface/src/assets/Button_Texture_Clear_Down.png old mode 100644 new mode 100755 index 1f60759ff058e4e3ed51c244d4b3b57782359be5..c91c6418df9fa032fbf0c3fd7c228d4307e64d81 GIT binary patch literal 3237 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 Q?cE>|Pgg&ebxsLQ0J>X`5&!@I diff --git a/KSKInterface/src/assets/Button_Texture_Insert.png b/KSKInterface/src/assets/Button_Texture_Insert.png old mode 100644 new mode 100755 index 5e6ae3973c438f5a07c5bfa1a9545d1f18e23025..9c73fa2d128073d624310fbe240d8682353b26e6 GIT binary patch literal 3174 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 M07*qoM6N<$f;xNbb^rhX literal 953 zcmeAS@N?(olHy`uVBq!ia0vp^MIg+<1|<9Mw$=hE$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%+a1Mjv*Dd-rV&Ml5!Mj_~_`NYHi6hPa$P`><6}c3Mn(^ zS~_Z}Png3{%+#G4R?)nnWV!i-rPF?X-<7kbutXCGFJ9*YUx@!1N~4DWM3n|k!|UGEAfKXV72Ki~akPW+Yj`02E8`wbS_!E+}r z_PEY!RL~40CpD-jG^!|YdN2ujFd;aT8dyLaP7jdGq;0F0S3duvH0NsO|L|Mq7`~@( z;r|mq-B6tItH>kE9mzNC#HLPeeR^N!iMiy4%O`$YOzU26`un@{w$3+?jc&JJyJWOO zz4=LT{On(*y?-UjjmmEy{hKs@*Wcpb_kPVfZJTQR(PvvJTf!6e)%QRBJKO#BS{u*p zd-lG@pO)Onx$BzU9O`r@W!l%jhEJJa&Nu1VzT?$7!|g6Hrr(ZFJKJNERd9E1qL~X% zVa_v!*-9+Od0HeM-Ply^s34K%aKxtmFGs89?Yidw$@ireEfZ%EYc!m#Afs)!?bek& zk}WoKV#VC1*Y2NC9r;mVd;2wg*Q%{$KC!y)f4-l8-<`Mq`Mi`p{wx>w-uq>1?a}`; z*ns`oybPPmD;4VUKC|t<<>p|Je#}tz(eiEiTUHmU@FcrAhHz(!7)ve6@<^T$D0tOb z>R?Y_22+sbGAS!r?f*&Q8{^)iwU z=WqtwCJ9ZjK4#K5gXc+~!C3`0R!ND=B1uIP8V$}Ws&U>FxU7=2X@cq*-*b#c-7{SC z0$1f+*RQF2vNe83)-FG_8F^_|Yxs{o-YQ{iFFgIu)6Nbci2DC^@u$4tCEMNKvs_!L zu*+P}BDv?xmk$T;UHv-I`Pi|L=Bx6nyw9s|+H3mf!Y%%S^b+r*x_d5do^Z1w?zi!! zqECwxL+YqTu@ diff --git a/KSKInterface/src/assets/Button_Texture_Insert_Down.png b/KSKInterface/src/assets/Button_Texture_Insert_Down.png old mode 100644 new mode 100755 index dc7c43d40776576b8e2100e2fd0a7dd67b3568d5..41a8e896af2d2fc86c22975faae2e88167b2c663 GIT binary patch literal 3142 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 literal 808 zcmeAS@N?(olHy`uVBq!ia0vp^MIg+<1|<9Mw$=hE$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@Os70u978H@y}A27@Q{H_!^0z=t$PB@5}04J?Q(RVz?s5) zhrv8RUBiz-`T*MoN8ddKTx^?NQ8|HJ#07l;T73Ql}bqQxE+diBPi zlV{CJ{@b}^S0>RB~9s3Q9-SliuY|4s1d7{-^ zT3`26WTo;IqyNim8{h1BGyfawqy`m*Mim844<;cGCIn|v0}F`5=>d|Nr1#qFiS%=^ zYj36>%-wQr_JO?kWp#G!yOTTbJ$%4(*39(wum1kexBrXs>LtJ0n38bo!KZHF?dRjZ z8FSos$ajCJyU#g3{Y_HX`){fs@`=-5YHBy$h`Lde-zlAGT<-`wt6eC1t~I#c@MBgt7N+UZm0q-i}p!*GUG;hd;zKj$I_9|6{c zCJhE*7seS1TnAVJ8PqzM3>-xo2uU#?oztknzS-jQ>eAb4-RaK$>P?x`86wtLm;UHp zH$ScVYSep+r=1-@P*wl4@Jnv6NFMurmSz0{s`?gFZ)EgW?y)O6bHgPx%v||x>?@m3 zyRY3T{_m=Ce5cXo!l2(0lGWeN2CrA=RTK0tYhV%bP-rBYF!J^IzVlkT=y&$1#pnNu zPn3DyZuva!mBRdx{{2o~_wGucc`y9F;v_@%%g0&aza=u$QqTQ3(wLF0RGztW0+T+2r>mdKI;Vst0Ng`V(f|Me diff --git a/KSKInterface/src/assets/Button_Texture_Remove.png b/KSKInterface/src/assets/Button_Texture_Remove.png old mode 100644 new mode 100755 index 60d5a8bfd311912f53135273d3ebe87dcae6ee07..1c20c76de057886e0b2c46d7782e90db0b44b684 GIT binary patch literal 3201 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 literal 1035 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 Eg5XW;+W-In literal 890 zcmeAS@N?(olHy`uVBq!ia0vp^MIg+<1|<9Mw$=hE$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%rc%Xjv*Dd-puU{ylo)TuvUgSg(aQo5R0!_LbICm0hYaf z0%i)*SLQ0bV`8Nu8t!zj-6T){T zYIljgcKEZ0;jP*`4WFIJ6zFsa=i4^Vc>>QN)qS_p{@lMaY2yynu$vQh{!mp4p6HUI zHL1hLRcPW$4<#c}PnTs%ohL$61ZQ@sU`mQ8U-p>(B98Cm@$J7R-IPlH*3lFF=!Frl zQ0WO1k1L9o6$0CRnvdN3a9a1ev+njeoK_#^Ds_5VOuM@zDkY=W->dzQx$_n;P2EkW zO_%QTJ{`5kp4(7GE?OiuJAJJcF%*$3& zx_p1u^VC}Je|3vq%ZGn^7-k8KP6h^vvLAxq{N_%U`Z#Bm^_&^TopoKW#4WqpTs1%c zx!te2v$Jcz7`%Gb=Qywba5#^RVa zE*hKXxa(F=T=Ui}srCp9*aF?;lXJD%!{z?Ivg|Z$Q{rj&m4=(I~>0vn>?aCp|-&`)-?VSPXAw%3*= z%Nstt&$)l?PVS$9L1zv|r$pF(Q|?S(STxJ0Ja+YaRk>F#_jZb#xpuUd?)0eqb~2Lv sW5AWTHy?5mdKI;Vst0KA-m$^ZZW From a35604204c1cada4df03baa2f4484da30d7cfdeb Mon Sep 17 00:00:00 2001 From: Ram Vibhakar S Date: Thu, 4 Jun 2015 00:20:12 +0800 Subject: [PATCH 03/37] Moved config to a single file --- .../sg/edu/smu/ksketch2/KSketchWebLinks.as | 26 +++++++++---------- .../src/sg/edu/smu/ksketch2/KSketch_Config.as | 10 +++++++ .../popup/KSketch_CanvasNotice.mxml | 10 ++++--- .../canvas/components/popup/KSketch_Help.mxml | 6 +++-- .../components/view/KSketch_HomeView.mxml | 6 +++-- 5 files changed, 37 insertions(+), 21 deletions(-) create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as index 7233b91d..95df37fc 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as @@ -11,22 +11,22 @@ package sg.edu.smu.ksketch2 public class KSketchWebLinks { public static const pingurl:String = "http://google.com"; - public static const url:String = "http://ksketch.smu.edu.sg/app/login.html"; //Page displayed on stagewebview - public static const jsonurlUser:String = "http://ksketch.smu.edu.sg/user/getuser"; //To retrieve user information after login - public static const jsonurlUserMobile:String = "http://ksketch.smu.edu.sg/user/getusermobile"; //To retrieve user information after login using ID - public static const urlUser:String = "http://ksketch.smu.edu.sg/user/urlUser"; //To retrieve user id through URL + public static const url:String = KSketch_Config.host_name+"/app/login.html"; //Page displayed on stagewebview + public static const jsonurlUser:String = KSketch_Config.host_name+"/user/getuser"; //To retrieve user information after login + public static const jsonurlUserMobile:String = KSketch_Config.host_name+"/user/getusermobile"; //To retrieve user information after login using ID + public static const urlUser:String = KSketch_Config.host_name+"/user/urlUser"; //To retrieve user id through URL - public static const login_success:String = "http://ksketch.smu.edu.sg/app/login_successful"; - public static const redirecturl_login:String = "http://ksketch.smu.edu.sg/app/profile.html"; //Indicates successful login - public static const redirecturl_index:String = "http://ksketch.smu.edu.sg/app/index.html"; - public static const redirecturl_skip:String = "http://ksketch.smu.edu.sg/app/skip.html"; //Indicates user chooses to skip login process + public static const login_success:String = KSketch_Config.host_name+"/app/login_successful"; + public static const redirecturl_login:String = KSketch_Config.host_name+"/app/profile.html"; //Indicates successful login + public static const redirecturl_index:String = KSketch_Config.host_name+"/app/index.html"; + public static const redirecturl_skip:String = KSketch_Config.host_name+"/app/skip.html"; //Indicates user chooses to skip login process - public static const jsonurlSketch:String = "http://ksketch.smu.edu.sg/list/sketch/latest"; //user/"; //To retrieve list of sketches - public static const jsonurlSketchXML:String = "http://ksketch.smu.edu.sg/get/sketch/view"; //To retrieve XML of a specific sketch + public static const jsonurlSketch:String = KSketch_Config.host_name+"/list/sketch/latest"; //user/"; //To retrieve list of sketches + public static const jsonurlSketchXML:String = KSketch_Config.host_name+"/get/sketch/view"; //To retrieve XML of a specific sketch - public static const jsonurlGetXML:String = "http://ksketch.smu.edu.sg/get/sketchxml"; //To save a sketch to Datastore - public static const jsonurlOverwriteGetXML:String = "http://ksketch.smu.edu.sg/get/overwritesketchxml"; //To save a sketch from an older version to Datastore + public static const jsonurlGetXML:String = KSketch_Config.host_name+"/get/sketchxml"; //To save a sketch to Datastore + public static const jsonurlOverwriteGetXML:String = KSketch_Config.host_name+"/get/overwritesketchxml"; //To save a sketch from an older version to Datastore - public static const jsonurlDeleteSketch:String = "http://ksketch.smu.edu.sg/get/deletesketch"; //To delete a sketch from Datastore + public static const jsonurlDeleteSketch:String = KSketch_Config.host_name+"/get/deletesketch"; //To delete a sketch from Datastore } } \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as new file mode 100644 index 00000000..b996613c --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as @@ -0,0 +1,10 @@ +/** + * Created by ramvibhakar on 03/06/15. + */ +package sg.edu.smu.ksketch2 { +public class KSketch_Config { + public static const host_name = "http://ksketch.smu.edu.sg" + public static const email = "ksketch@smu.edu.sg" + public static var isMobile:Boolean = true; +} +} diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml index 550cf114..21ee5d34 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml @@ -15,7 +15,9 @@ @@ -36,7 +36,9 @@ import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.utils.ObjectProxy; - + + import sg.edu.smu.ksketch2.KSketch_Config; + import spark.events.IndexChangeEvent; import air.net.URLMonitor; From 569f195b41faba655ba7efe2e244d7257980ea38 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar S Date: Sun, 7 Jun 2015 23:58:06 +0800 Subject: [PATCH 04/37] License agreement on desktop build --- .../src/sg/edu/smu/ksketch2/KSketch_Config.as | 2 +- .../view/KSketch_LicenseAggrement.mxml | 81 +++++++++++++++++++ .../components/view/KSketch_SplashView.mxml | 69 ++++++++-------- .../smu/ksketch2/utils/KSketch_Preference.as | 28 +++++++ 4 files changed, 146 insertions(+), 34 deletions(-) create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LicenseAggrement.mxml create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/utils/KSketch_Preference.as diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as index b996613c..7d36d105 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as @@ -5,6 +5,6 @@ package sg.edu.smu.ksketch2 { public class KSketch_Config { public static const host_name = "http://ksketch.smu.edu.sg" public static const email = "ksketch@smu.edu.sg" - public static var isMobile:Boolean = true; + public static var isMobile:Boolean = false; } } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LicenseAggrement.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LicenseAggrement.mxml new file mode 100644 index 00000000..27f14ced --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LicenseAggrement.mxml @@ -0,0 +1,81 @@ + + + + + -1) { + if (stage.orientation == StageOrientation.DEFAULT || stage.orientation == StageOrientation.UPSIDE_DOWN) + stage.setOrientation(StageOrientation.ROTATED_RIGHT); + else + stage.setOrientation(stage.orientation); + } + + } + + private function exitApp():void { + NativeApplication.nativeApplication.exit(); + } + + private function accept():void { + KSketch_Preference.createPreferences(); + navigator.pushView(KSketch_HomeView); + } + ]]> + + + + + + + + + + *The licence goes here* + + + + + + + + + + + + + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_SplashView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_SplashView.mxml index a2a2e2d5..ea48083f 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_SplashView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_SplashView.mxml @@ -18,42 +18,45 @@ > -1) - { - if(stage.orientation == StageOrientation.DEFAULT || stage.orientation == StageOrientation.UPSIDE_DOWN) - stage.setOrientation(StageOrientation.ROTATED_RIGHT); - else - stage.setOrientation(stage.orientation); - } - - timer = new Timer(3000); - - timer.addEventListener(TimerEvent.TIMER, timerComplete); - timer.start(); + import sg.edu.smu.ksketch2.KSketchAssets; + import sg.edu.smu.ksketch2.KSketch_Config; + import sg.edu.smu.ksketch2.utils.KSketch_Preference; + + private var timer:Timer; + public static var initialOrientation:String = null; + + private function addedToStageHandler():void { + this.removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); + + + if (!initialOrientation) + initialOrientation = stage.orientation; + + if (Capabilities.version.indexOf('IOS') > -1) { + if (stage.orientation == StageOrientation.DEFAULT || stage.orientation == StageOrientation.UPSIDE_DOWN) + stage.setOrientation(StageOrientation.ROTATED_RIGHT); + else + stage.setOrientation(stage.orientation); } - - private function timerComplete(event:TimerEvent):void - { - timer.removeEventListener(TimerEvent.TIMER, timerComplete); - timer.stop(); - - canvasCover.visible = true; - stage.setAspectRatio("landscape"); + + timer = new Timer(3000); + + timer.addEventListener(TimerEvent.TIMER, timerComplete); + timer.start(); + } + + private function timerComplete(event:TimerEvent):void { + timer.removeEventListener(TimerEvent.TIMER, timerComplete); + timer.stop(); + + canvasCover.visible = true; + stage.setAspectRatio("landscape"); + if (!KSketch_Config.isMobile && !KSketch_Preference.isPrefsAvailable()) { + navigator.pushView(KSketch_LicenseAggrement); + } else { navigator.pushView(KSketch_HomeView); } + } ]]> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/utils/KSketch_Preference.as b/KSKInterface/src/sg/edu/smu/ksketch2/utils/KSketch_Preference.as new file mode 100644 index 00000000..d5c0c769 --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/utils/KSketch_Preference.as @@ -0,0 +1,28 @@ +/** + * Created by ramvibhakar on 05/06/15. + */ +package sg.edu.smu.ksketch2.utils { +import flash.filesystem.File; +import flash.filesystem.FileMode; +import flash.filesystem.FileStream; + +public class KSketch_Preference { + private static var prefsFile:File = File.applicationStorageDirectory; + //This function creates a preferences xml. Can be used in future to store preferences + //Currently used to check if user has accepted the license agreement in desktop + public static function createPreferences():void{ + var configFile:File = prefsFile.resolvePath("preferences.xml"); + if(!configFile.exists) { + var configXML:XML = new XML(""); + var fileStream:FileStream = new FileStream(); + fileStream.open(configFile,FileMode.WRITE); + fileStream.writeUTFBytes(configXML); + fileStream.close(); + } + } + public static function isPrefsAvailable() { + var configFile:File = prefsFile.resolvePath("preferences.xml"); + return configFile.exists; + } +} +} From d43334e8934a5a0c12370fbc7e61064a167b49b9 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Mon, 8 Jun 2015 16:56:06 +0800 Subject: [PATCH 05/37] Gitignore workspace.xml --- .gitignore | 1 + .idea/workspace.xml | 637 -------------------------------------------- 2 files changed, 1 insertion(+), 637 deletions(-) delete mode 100644 .idea/workspace.xml diff --git a/.gitignore b/.gitignore index 6cfbbf42..b5bae552 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,4 @@ TestDrag/ TestDragV2/ as3corelib/ +.idea/workspace.xml diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index f0d622d4..00000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,637 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1432897052284 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 1323ed1e32f1c8118c8b4f262a717ba2723f0373 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Thu, 2 Jul 2015 15:32:55 +0800 Subject: [PATCH 06/37] Added token to webrequests --- .../sg/edu/smu/ksketch2/KSketchWebLinks.as | 2 +- .../src/sg/edu/smu/ksketch2/KSketch_User.as | 5 +- .../ksketch2/canvas/KSketch_LoginView.mxml | 10 +- .../popup/KSketch_CanvasNotice.mxml | 94 +- .../components/view/KSketch_HomeView.mxml | 1710 ++++++++--------- 5 files changed, 871 insertions(+), 950 deletions(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as index 95df37fc..e768c730 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as @@ -14,7 +14,7 @@ package sg.edu.smu.ksketch2 public static const url:String = KSketch_Config.host_name+"/app/login.html"; //Page displayed on stagewebview public static const jsonurlUser:String = KSketch_Config.host_name+"/user/getuser"; //To retrieve user information after login public static const jsonurlUserMobile:String = KSketch_Config.host_name+"/user/getusermobile"; //To retrieve user information after login using ID - public static const urlUser:String = KSketch_Config.host_name+"/user/urlUser"; //To retrieve user id through URL + public static const urlUser:String = KSketch_Config.host_name+"/user/urlUserV2"; //To retrieve user id through URL public static const login_success:String = KSketch_Config.host_name+"/app/login_successful"; public static const redirecturl_login:String = KSketch_Config.host_name+"/app/profile.html"; //Indicates successful login diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_User.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_User.as index cb9244ae..a5bd0c7c 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_User.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_User.as @@ -17,7 +17,7 @@ package sg.edu.smu.ksketch2 public var u_isactive:String; public var u_version:String; public var u_email:String; - + public var token:String; public function KSketch_User(obj:Object) { if(obj.status.indexOf("success") >= 0) @@ -35,6 +35,9 @@ package sg.edu.smu.ksketch2 this.u_isactive = obj.u_isactive; this.u_version = obj.u_version; this.u_email = obj.u_email; + if(obj.hasOwnProperty("token")){ + this.token = obj.token; + } } else { diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml index 0d602c28..ee142f57 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml @@ -8,7 +8,7 @@ > - @@ -50,7 +50,7 @@ private var _monitorTimer:Timer; private var _webView:StageWebView = new StageWebView(); private var _isLoggedOut:Boolean = false; - + private var token:String = ""; protected function viewActivateHandler(event:ViewNavigatorEvent):void { // TODO Auto-generated method stub @@ -59,7 +59,7 @@ _webView.stage = stage; _stageWidth = stage.stageWidth; _stageHeight = stage.stageHeight; - + //check for network connection _monitorTimer = new Timer(3000); _monitor = new URLMonitor(new URLRequest(KSketchWebLinks.url)); @@ -167,12 +167,13 @@ _webView.viewPort = null; _webView.dispose(); _webView = null; - + var arr:Array = currentURL.split(".html?"); var vars:URLVariables = new URLVariables(arr[1]); //get json url GetUser.url = KSketchWebLinks.jsonurlUserMobile + "?id=" + vars.id; + token = vars.token; GetUser.send(); GetUser.addEventListener(FaultEvent.FAULT, faultHandler); startProgressBar(); @@ -194,6 +195,7 @@ // create a new User instance and // save it to data property var kUser:KSketch_User = new KSketch_User(obj); + kUser.token = token; userData.kUser = kUser; userData.listSketches = ""; userData.resolveConflict = 1; diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml index 21ee5d34..c0d354a7 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml @@ -13,52 +13,59 @@ initialize="init()"> @@ -83,6 +90,7 @@ + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index ee5ff3ba..844a6a42 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -28,970 +28,878 @@ -1)) - { - if(KSketch_SplashView.initialOrientation == StageOrientation.DEFAULT || + else + KSketch_CanvasView_Preferences.mobileEnabled = KSketch_CanvasView_Preferences.MOBILE_OFF; + + if (stage.deviceOrientation == StageOrientation.UNKNOWN && (Capabilities.version.indexOf('IOS') > -1)) { + if (KSketch_SplashView.initialOrientation == StageOrientation.DEFAULT || KSketch_SplashView.initialOrientation == StageOrientation.UPSIDE_DOWN) - stage.setOrientation(StageOrientation.ROTATED_RIGHT); - else - stage.setOrientation(KSketch_SplashView.initialOrientation); - } - - - if(!canvasTimerDisabled) - { - canvasTimer = new Timer(2000); - canvasTimer.addEventListener(TimerEvent.TIMER, timerComplete); - canvasTimer.start(); - } + stage.setOrientation(StageOrientation.ROTATED_RIGHT); else - canvasCover.visible = false; - - _fileControl = new KFileControl(); - - _syncOptions = new KSketch_SyncOptions(); - _syncOptions.createDeferredContent(); - - _logoffNotice = new KSketch_LogoutNotice(); - _logoffNotice.createDeferredContent(); - - _canvasNotice = new KSketch_CanvasNotice(); - _canvasNotice.createDeferredContent(); - - GetUserSketch.addEventListener(FaultEvent.FAULT, retrieveFaultHandler); - GetUserSketch.addEventListener(ResultEvent.RESULT, retrieveResultHandler); - stage.addEventListener(KSwipeEvent.DELETE_ACTION, listSketches_deleteSketchHandler); - stage.addEventListener(KSwipeEvent.LOG_ACTION, listSketches_logSketchHandler); - stage.addEventListener(KSwipeEvent.SAVE_ACTION, listSketches_saveSketchHandler); - listSketches.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe); + stage.setOrientation(KSketch_SplashView.initialOrientation); } - - private function prepareHomeView():void - { - _mobileControl = new KMobileControl(); - - //initialize login button and KUser object - if(!data || data == KSketch_LoginView.LOGIN_CANCEL - || data == KSketch_LoginView.LOGIN_LOSTCONN - || data == KSketch_LoginView.LOGIN_JANRAINFAIL) - { - if(data) - { - var errorMessage:String = String(data); - - if((errorMessage == KSketch_LoginView.LOGIN_LOSTCONN || errorMessage == KSketch_LoginView.LOGIN_JANRAINFAIL) && !_failedLogin) - { - displayFailedMessage = DISPLAY_FAILED_LOGIN; - startDisplayFailedNotification(1000); - - hasBeenNotified = true; - _failedLogin = true; - } - } - - var obj:Object = new Object(); - var kUser:KSketch_User; - userData.listSketches = ""; - userData.resolveConflict = 0; - - if(_mobileControl.user != null) - { - obj = _mobileControl.user; - kUser = new KSketch_User(obj); - userData.kUser = kUser; - - KSketch_LoginView._isLoggedIn = true; - loginButton.label = "Logout, "+ userData.kUser.u_realname; - refreshButton.label = "Refresh"; - } - else - { - obj.status = "failed"; - obj.u_login = "n.a"; - kUser = new KSketch_User(obj); - userData.kUser = kUser; - - loginButton.label = "Login"; - refreshButton.visible = false; + + + if (!canvasTimerDisabled) { + canvasTimer = new Timer(2000); + canvasTimer.addEventListener(TimerEvent.TIMER, timerComplete); + canvasTimer.start(); + } + else + canvasCover.visible = false; + + _fileControl = new KFileControl(); + + _syncOptions = new KSketch_SyncOptions(); + _syncOptions.createDeferredContent(); + + _logoffNotice = new KSketch_LogoutNotice(); + _logoffNotice.createDeferredContent(); + + _canvasNotice = new KSketch_CanvasNotice(); + _canvasNotice.createDeferredContent(); + + GetUserSketch.addEventListener(FaultEvent.FAULT, retrieveFaultHandler); + GetUserSketch.addEventListener(ResultEvent.RESULT, retrieveResultHandler); + stage.addEventListener(KSwipeEvent.DELETE_ACTION, listSketches_deleteSketchHandler); + stage.addEventListener(KSwipeEvent.LOG_ACTION, listSketches_logSketchHandler); + stage.addEventListener(KSwipeEvent.SAVE_ACTION, listSketches_saveSketchHandler); + listSketches.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe); + } + + private function prepareHomeView():void { + _mobileControl = new KMobileControl(); + + //initialize login button and KUser object + if (!data || data == KSketch_LoginView.LOGIN_CANCEL + || data == KSketch_LoginView.LOGIN_LOSTCONN + || data == KSketch_LoginView.LOGIN_JANRAINFAIL) { + if (data) { + var errorMessage:String = String(data); + + if ((errorMessage == KSketch_LoginView.LOGIN_LOSTCONN || errorMessage == KSketch_LoginView.LOGIN_JANRAINFAIL) && !_failedLogin) { + displayFailedMessage = DISPLAY_FAILED_LOGIN; + startDisplayFailedNotification(1000); + + hasBeenNotified = true; + _failedLogin = true; } } - else - { - //cast data from previous view to ObjectProxy. This is to avoid getting IEventDispatcher error - var dataProxy:ObjectProxy = new ObjectProxy(data); - userData.listSketches = dataProxy.listSketches; - userData.resolveConflict = dataProxy.resolveConflict; - - if(dataProxy.kUser) - userData.kUser = dataProxy.kUser; - - if(userData.kUser.id != "n.a") - { - _mobileControl.user = userData.kUser; - loginButton.label = "Logout, "+ userData.kUser.u_realname; - refreshButton.label = "Refresh"; - - if(!_isConnected && !hasBeenNotified) - { - displayFailedMessage = DISPLAY_FAILED_SYNC; - startDisplayFailedNotification(3500); - hasBeenNotified = true; - } - } - else - { - loginButton.label = "Login"; - refreshButton.visible = false; - } - - - _failedLogin = false; + + var obj:Object = new Object(); + var kUser:KSketch_User; + userData.listSketches = ""; + userData.resolveConflict = 0; + + if (_mobileControl.user != null) { + obj = _mobileControl.user; + kUser = new KSketch_User(obj); + userData.kUser = kUser; + + KSketch_LoginView._isLoggedIn = true; + loginButton.label = "Logout, " + userData.kUser.u_realname; + refreshButton.label = "Refresh"; + } + else { + obj.status = "failed"; + obj.u_login = "n.a"; + kUser = new KSketch_User(obj); + userData.kUser = kUser; + + loginButton.label = "Login"; + refreshButton.visible = false; } - - createButton.label = "Create a Sketch"; - loadButton.label = "Load Sketch from File"; //DESKTOP ENABLE - createButton.setStyle("fontSize", KSketchStyles.BUTTON_SIZE); - loadButton.setStyle("fontSize", KSketchStyles.BUTTON_SIZE); //DESKTOP ENABLE - loginButton.setStyle("fontSize", KSketchStyles.BUTTON_SIZE); - refreshButton.setStyle("fontSize", KSketchStyles.BUTTON_SIZE); - prepareDataList(); } - - public function prepareDataList():void - { - startProgressBar(); - - userData.homeView = this; - userData.mobileControl = _mobileControl; - userData.kSketchDocument = null; - - if(KSketch_LoginView._isLoggedIn) //logged in - { - if(_isConnected) - { - _webControl = new KWebControl(userData.kUser, _mobileControl); - //create a buffer time for scene to prepare itself, implement timer - _viewTimer = new Timer(1000,1); - _viewTimer.addEventListener(TimerEvent.TIMER_COMPLETE, loadConnected); - _viewTimer.start(); + else { + //cast data from previous view to ObjectProxy. This is to avoid getting IEventDispatcher error + var dataProxy:ObjectProxy = new ObjectProxy(data); + userData.listSketches = dataProxy.listSketches; + userData.resolveConflict = dataProxy.resolveConflict; + + if (dataProxy.kUser) + userData.kUser = dataProxy.kUser; + + if (userData.kUser.id != "n.a") { + _mobileControl.user = userData.kUser; + loginButton.label = "Logout, " + userData.kUser.u_realname; + refreshButton.label = "Refresh"; + + if (!_isConnected && !hasBeenNotified) { + displayFailedMessage = DISPLAY_FAILED_SYNC; + startDisplayFailedNotification(3500); + hasBeenNotified = true; } - else - displaySketchData(); } - else //anonymous - displaySketchData(); + else { + loginButton.label = "Login"; + refreshButton.visible = false; + } + + + _failedLogin = false; } - - private function loadConnected(event:TimerEvent):void - { - _viewTimer.stop(); - _viewTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, loadConnected); - - if(userData.resolveConflict == 1) - { - resolveConflict(); - data.resolveConflict = 0; - } + + createButton.label = "Create a Sketch"; + loadButton.label = "Load Sketch from File"; //DESKTOP ENABLE + createButton.setStyle("fontSize", KSketchStyles.BUTTON_SIZE); + loadButton.setStyle("fontSize", KSketchStyles.BUTTON_SIZE); //DESKTOP ENABLE + loginButton.setStyle("fontSize", KSketchStyles.BUTTON_SIZE); + refreshButton.setStyle("fontSize", KSketchStyles.BUTTON_SIZE); + prepareDataList(); + } + + public function prepareDataList():void { + startProgressBar(); + + userData.homeView = this; + userData.mobileControl = _mobileControl; + userData.kSketchDocument = null; + + if (KSketch_LoginView._isLoggedIn) //logged in + { + if (_isConnected) { + _webControl = new KWebControl(userData.kUser, _mobileControl); + //create a buffer time for scene to prepare itself, implement timer + _viewTimer = new Timer(1000, 1); + _viewTimer.addEventListener(TimerEvent.TIMER_COMPLETE, loadConnected); + _viewTimer.start(); + } else - updateFromWeb(); + displaySketchData(); } - - - - public function updateFromWeb():void - { - _isXML = false; //JSON retrieval is list of sketches, not XML of sketch - - //get json object of user's list of sketches from the URL - //returned result will be a stringified JSON object - var parameter:String; - if(data) - parameter = "{\"sketchID\":[" + data.listSketches + "],\"userid\":" + userData.kUser.id + "}"; - else - { - data = userData; - parameter = ""; - } - - GetUserSketch.url = KSketchWebLinks.jsonurlSketch + "/" + parameter; - GetUserSketch.send(); + else //anonymous + displaySketchData(); + } + + private function loadConnected(event:TimerEvent):void { + _viewTimer.stop(); + _viewTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, loadConnected); + + if (userData.resolveConflict == 1) { + resolveConflict(); + data.resolveConflict = 0; } - - private function retrieveResultHandler(event:ResultEvent):void - { - var rawData:String = String(event.result); - var resultObj:Object = com.adobe.serialization.json.JSON.decode(rawData,true); - - if(!_isXML && !_deleteSketchFlag) - { - var syncSketchArr:ArrayCollection; - if(resultObj) - { - - - var tempArr:Array = (resultObj.entities as Array); - for each(var tempObj:Object in tempArr) - { - tempObj = KWebData.convertWebObjForMobile(tempObj); - _mobileControl.informationArr[1] = _fileControl.solveDiscrepancy(_mobileControl.informationArr[1], tempObj); + else + updateFromWeb(); + } + + + public function updateFromWeb():void { + _isXML = false; //JSON retrieval is list of sketches, not XML of sketch + + //get json object of user's list of sketches from the URL + //returned result will be a stringified JSON object + var parameter:String; + if (data) { + parameter = "{\"sketchID\":[" + data.listSketches + "],\"userid\":" + userData.kUser.id + ", \"token\":"+userData.kUser.id+"}"; + } else { + parameter = "{\"sketchID\":[],\"userid\":" + userData.kUser.id + ", \"token\":"+userData.kUser.id+"}"; + } + + GetUserSketch.url = KSketchWebLinks.jsonurlSketch + "/" + parameter; + GetUserSketch.send(); + } + + private function retrieveResultHandler(event:ResultEvent):void { + var rawData:String = String(event.result); + var resultObj:Object = com.adobe.serialization.json.JSON.decode(rawData, true); + + if (!_isXML && !_deleteSketchFlag) { + var syncSketchArr:ArrayCollection; + if (resultObj) { + if (resultObj.hasOwnProperty("status")) { + if (resultObj.status == "session_expired") { + _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_EXPIRED_SESSION; + _canvasNotice.open(this, true); + PopUpManager.centerPopUp(_canvasNotice); } - tempArr = null; - data.listSketches = ""; } - - //reset webcontrol - _webControl.reset(); - displaySketchData(); - } - - if(_isXML && !_deleteSketchFlag) - { - resultObj = KWebData.convertWebObjForMobile(resultObj); - displaySketchDocument(resultObj, true); - } - - if(_deleteSketchFlag) - { - _deleteSketchFlag = false; - startMonitorConnection(); + + var tempArr:Array = (resultObj.entities as Array); + for each(var tempObj:Object in tempArr) { + tempObj = KWebData.convertWebObjForMobile(tempObj); + _mobileControl.informationArr[1] = _fileControl.solveDiscrepancy(_mobileControl.informationArr[1], tempObj); + } + tempArr = null; + data.listSketches = ""; } + + //reset webcontrol + _webControl.reset(); + displaySketchData(); } - - private function retrieveFaultHandler(event:FaultEvent):void - { - if(!_isXML && !_deleteSketchFlag) - displaySketchData(); - else if (_isXML && !_deleteSketchFlag) - displaySketchDocument(null, false); - else if(_deleteSketchFlag) - deleteSketchDocument(null, KFileControl.DELETE_WEB); + + if (_isXML && !_deleteSketchFlag) { + resultObj = KWebData.convertWebObjForMobile(resultObj); + displaySketchDocument(resultObj, true); } - - private function resolveConflict():void - { - var syncSketchArr:ArrayCollection = new ArrayCollection(); //array for list of sketches to sync - var deletedSketchArr:ArrayCollection = new ArrayCollection(); - - if(_mobileControl.informationArr[1]) - { - var tempObj:Object = _fileControl.getSyncSketchObjects(_mobileControl.informationArr[1]); - syncSketchArr = tempObj.syncArr; - deletedSketchArr = tempObj.delArr; - tempObj = null; - } - - //if there are sketches to sync, then prompt dialog - //else just display data - if(syncSketchArr.length > 0) - { - _syncOptions.deleteFlag = false; - _syncOptions.resetSyncArrays(); - - _syncOptions.currentUser = userData.kUser; - _syncOptions.syncSketchArr = syncSketchArr; - _syncOptions.open(this,true); - PopUpManager.centerPopUp(_syncOptions); - } - - if(deletedSketchArr.length > 0) - { - - updateFromWeb(); - _syncOptions.deleteFlag = true; - _syncOptions.deleteSketch(deletedSketchArr, this); - } - - if(syncSketchArr.length == 0 && deletedSketchArr.length == 0) - updateFromWeb(); + + if (_deleteSketchFlag) { + _deleteSketchFlag = false; + startMonitorConnection(); } - - public function displaySketchData():void - { - arrDG.removeAll(); //reset arrDG - var sketchArr:ArrayCollection = new ArrayCollection(); //array for list of sketches from web or mobile - - if (_mobileControl && _mobileControl.sketchList) - sketchArr.addAll(_mobileControl.sketchList); //display everything from mobile control - - if(sketchArr.length > 0) - { - var userSketch:KSketch_UserSketches = new KSketch_UserSketches(); - userSketch.createArray(sketchArr, userData.kUser.id); - - autoSaveCounter = userSketch.autoSaveCounter; - userSketch.autoSaveCounter = 0; - - //Set DataGrid array to user sketches collection - if(!arrDG) - arrDG = userSketch.getUserSketchArray(); - else - arrDG.addAll(userSketch.getUserSketchArray()); - - listSketches_unavailable.visible = false; - } + } + + private function retrieveFaultHandler(event:FaultEvent):void { + if (!_isXML && !_deleteSketchFlag) + displaySketchData(); + else if (_isXML && !_deleteSketchFlag) + displaySketchDocument(null, false); + else if (_deleteSketchFlag) + deleteSketchDocument(null, KFileControl.DELETE_WEB); + } + + private function resolveConflict():void { + var syncSketchArr:ArrayCollection = new ArrayCollection(); //array for list of sketches to sync + var deletedSketchArr:ArrayCollection = new ArrayCollection(); + + if (_mobileControl.informationArr[1]) { + var tempObj:Object = _fileControl.getSyncSketchObjects(_mobileControl.informationArr[1]); + syncSketchArr = tempObj.syncArr; + deletedSketchArr = tempObj.delArr; + tempObj = null; + } + + //if there are sketches to sync, then prompt dialog + //else just display data + if (syncSketchArr.length > 0) { + _syncOptions.deleteFlag = false; + _syncOptions.resetSyncArrays(); + + _syncOptions.currentUser = userData.kUser; + _syncOptions.syncSketchArr = syncSketchArr; + _syncOptions.open(this, true); + PopUpManager.centerPopUp(_syncOptions); + } + + if (deletedSketchArr.length > 0) { + + updateFromWeb(); + _syncOptions.deleteFlag = true; + _syncOptions.deleteSketch(deletedSketchArr, this); + } + + if (syncSketchArr.length == 0 && deletedSketchArr.length == 0) + updateFromWeb(); + } + + public function displaySketchData():void { + arrDG.removeAll(); //reset arrDG + var sketchArr:ArrayCollection = new ArrayCollection(); //array for list of sketches from web or mobile + + if (_mobileControl && _mobileControl.sketchList) + sketchArr.addAll(_mobileControl.sketchList); //display everything from mobile control + + if (sketchArr.length > 0) { + var userSketch:KSketch_UserSketches = new KSketch_UserSketches(); + userSketch.createArray(sketchArr, userData.kUser.id); + + autoSaveCounter = userSketch.autoSaveCounter; + userSketch.autoSaveCounter = 0; + + //Set DataGrid array to user sketches collection + if (!arrDG) + arrDG = userSketch.getUserSketchArray(); else - { - autoSaveCounter = 0; - startNewSketch(); - } - - stopProgressBar(); - _mobileControl.writeToCache(_mobileControl.informationArr); + arrDG.addAll(userSketch.getUserSketchArray()); + + listSketches_unavailable.visible = false; } - - private function startDisplayFailedNotification(time:Number):void - { - canvasTimer = new Timer(time,1); - canvasTimer.addEventListener(TimerEvent.TIMER_COMPLETE, displayFailedNotification); - canvasTimer.start(); + else { + autoSaveCounter = 0; + startNewSketch(); } - - private function displayFailedNotification(event:TimerEvent):void - { - if(displayFailedMessage == DISPLAY_FAILED_LOGIN) - _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_FAILED_LOGIN; - else if(displayFailedMessage == DISPLAY_FAILED_SYNC) - _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_FAILED_SYNC; - - if(displayFailedMessage != DISPLAY_FAILED_DEFAULT) - { - _canvasNotice.open(this, true); - PopUpManager.centerPopUp(_canvasNotice); - - displayFailedMessage = DISPLAY_FAILED_DEFAULT; - } - - canvasTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, displayFailedNotification); + + stopProgressBar(); + _mobileControl.writeToCache(_mobileControl.informationArr); + } + + private function startDisplayFailedNotification(time:Number):void { + canvasTimer = new Timer(time, 1); + canvasTimer.addEventListener(TimerEvent.TIMER_COMPLETE, displayFailedNotification); + canvasTimer.start(); + } + + private function displayFailedNotification(event:TimerEvent):void { + if (displayFailedMessage == DISPLAY_FAILED_LOGIN) + _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_FAILED_LOGIN; + else if (displayFailedMessage == DISPLAY_FAILED_SYNC) + _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_FAILED_SYNC; + + if (displayFailedMessage != DISPLAY_FAILED_DEFAULT) { + _canvasNotice.open(this, true); + PopUpManager.centerPopUp(_canvasNotice); + + displayFailedMessage = DISPLAY_FAILED_DEFAULT; } - - var finalObj:Object; - - private function displaySketchDocument(obj:Object, checkConflict:Boolean):void - { - finalObj = obj; - - var sketchDocArr:ArrayCollection; - sketchDocArr = _mobileControl.sketchList; - - var i:int; - var tempObj:Object; - - if(sketchDocArr) - { - for(i=0; i= 1) + progressBar.value = 0; + } + + private function prepareCanvasView():void { + if (_isConnected) { + var finalSketchVersion:String = _selectedSketchVersion; + + //retrieve the latest version from the web + if (KSketch_LoginView._isLoggedIn && _isConnected) + finalSketchVersion = -1 + ""; + + //get json object of sketch from the URL and according to sketchid and version number + GetUserSketch.url = KSketchWebLinks.jsonurlSketchXML + "/" + _selectedSketchId + "/" + finalSketchVersion + "/" + userData.kUser.id; //selectedSketchVersion; + GetUserSketch.send(); + startProgressBar(); } - - private function progressBarHandler(event:TimerEvent):void - { - progressBar.value += .008; - - if (progressBar.value >= 1) - progressBar.value = 0; + else { + displaySketchDocument(null, false); } - - private function prepareCanvasView():void - { - if(_isConnected) - { - var finalSketchVersion:String = _selectedSketchVersion; - - //retrieve the latest version from the web - if(KSketch_LoginView._isLoggedIn && _isConnected) - finalSketchVersion = -1 + ""; - + + } + + private function prepareDeleteSketch():void { + if (data) + data.resolveConflict = 1; + + if (_isConnected && KSketch_LoginView._isLoggedIn) { + if (_selectedSketchId && (parseInt(_selectedSketchId) > -1)) { + var objToSend:Object = new Object(); + objToSend["sketchid"] = parseInt(_selectedSketchId); + objToSend["userid"] = userData.kUser.id; + objToSend["token"] = userData.kUser.token; + //get json object of sketch from the URL and according to sketchid and version number - GetUserSketch.url = KSketchWebLinks.jsonurlSketchXML + "/" + _selectedSketchId + "/" + finalSketchVersion + "/" + userData.kUser.id; //selectedSketchVersion; - GetUserSketch.send(); - startProgressBar(); - } - else - { - displaySketchDocument(null, false); - } - - } - - private function prepareDeleteSketch():void - { - if(data) - data.resolveConflict = 1; - - if(_isConnected && KSketch_LoginView._isLoggedIn) - { - if(_selectedSketchId && (parseInt(_selectedSketchId) > -1)) - { - var objToSend:Object = new Object(); - objToSend["sketchid"] = parseInt(_selectedSketchId); - objToSend["userid"] = userData.kUser.id; - - //get json object of sketch from the URL and according to sketchid and version number - GetUserSketch.url = KSketchWebLinks.jsonurlDeleteSketch; - GetUserSketch.send(objToSend); - - startProgressBar(); - } - - deleteSketchDocument(null, KFileControl.DELETE_CACHE); + GetUserSketch.url = KSketchWebLinks.jsonurlDeleteSketch; + GetUserSketch.send(objToSend); + + startProgressBar(); } - else if(KSketch_LoginView._isLoggedIn) - deleteSketchDocument(null, KFileControl.DELETE_WEB); - else - deleteSketchDocument(null, KFileControl.DELETE_CACHE); - - stage.dispatchEvent(new KSwipeEvent(KSwipeEvent.SAVE_CLOSE_ACTION)); + + deleteSketchDocument(null, KFileControl.DELETE_CACHE); } - - public function deleteSketchDocument(obj:Object, type:String):void - { - //close action bar - if(_oldEvent) - { - if(_oldEvent.target is KSketch_HomeView_IconItemRenderer) - if((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar) - if((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar.stage) - { - KSketch_HomeView_IconItemRenderer.openActionBar = false; - (_oldEvent.target as KSketch_HomeView_IconItemRenderer).removeElement((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar); - } - - _oldEvent = null; - } - - var i:int; - if(!obj) - { - var sketchDocArr:ArrayCollection = _mobileControl.sketchList; - for(i=0; i From 26c09c45962ede2db4bf5e02e269aae29b089e08 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Thu, 2 Jul 2015 20:01:49 +0800 Subject: [PATCH 07/37] token for list sketch service --- .../components/view/KSketch_HomeView.mxml | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index 844a6a42..6b19f0ec 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -301,9 +301,10 @@ //returned result will be a stringified JSON object var parameter:String; if (data) { - parameter = "{\"sketchID\":[" + data.listSketches + "],\"userid\":" + userData.kUser.id + ", \"token\":"+userData.kUser.id+"}"; + parameter = "{\"sketchID\":[" + data.listSketches + "],\"userid\":" + userData.kUser.id + ", \"token\":\"" + userData.kUser.token + "\"}"; } else { - parameter = "{\"sketchID\":[],\"userid\":" + userData.kUser.id + ", \"token\":"+userData.kUser.id+"}"; + data = userData; + parameter = "{\"sketchID\":[],\"userid\":" + userData.kUser.id + ", \"token\":\""+userData.kUser.token+"\"}"; } GetUserSketch.url = KSketchWebLinks.jsonurlSketch + "/" + parameter; @@ -317,21 +318,20 @@ if (!_isXML && !_deleteSketchFlag) { var syncSketchArr:ArrayCollection; if (resultObj) { - if (resultObj.hasOwnProperty("status")) { - if (resultObj.status == "session_expired") { + if ((resultObj.hasOwnProperty("status")) && (resultObj.status == "session_expired")) { _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_EXPIRED_SESSION; _canvasNotice.open(this, true); PopUpManager.centerPopUp(_canvasNotice); - } - } + } else { - var tempArr:Array = (resultObj.entities as Array); - for each(var tempObj:Object in tempArr) { - tempObj = KWebData.convertWebObjForMobile(tempObj); - _mobileControl.informationArr[1] = _fileControl.solveDiscrepancy(_mobileControl.informationArr[1], tempObj); + var tempArr:Array = (resultObj.entities as Array); + for each(var tempObj:Object in tempArr) { + tempObj = KWebData.convertWebObjForMobile(tempObj); + _mobileControl.informationArr[1] = _fileControl.solveDiscrepancy(_mobileControl.informationArr[1], tempObj); + } + tempArr = null; + data.listSketches = ""; } - tempArr = null; - data.listSketches = ""; } //reset webcontrol @@ -571,7 +571,7 @@ _mobileControl.writeToCache(_mobileControl.informationArr); if (screenName.indexOf("RELOGIN") != -1) { navigator.pushView(KSketch_LoginView); - }else if (screenName.indexOf("CANVAS") == -1) //if screen name is Login + } else if (screenName.indexOf("CANVAS") == -1) //if screen name is Login { KSketch_LoginView.userData = new Object(); From 368f1f85d844b0b421232353ef2dcc75aeb874ba Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Mon, 6 Jul 2015 19:07:11 +0800 Subject: [PATCH 08/37] Fix for delete when offline --- .../ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml index 1df0ef06..bb273e09 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml @@ -130,7 +130,7 @@ var objToSend:Object = new Object(); objToSend["fileData"] = com.adobe.serialization.json.JSON.encode(currentObj); - objToSend["userid"] = userData.kUser.id; + objToSend["userid"] = _homeView.userData.kUser.id; httpService.url = KSketchWebLinks.jsonurlGetXML; httpService.send(objToSend); @@ -170,6 +170,7 @@ var objToSend:Object = new Object(); objToSend["sketchid"] = com.adobe.serialization.json.JSON.encode(currentObj.sketchId); objToSend["userid"] = currentObj.owner_id;//userData.kUser.id; + objToSend["token"] = _homeView.userData.kUser.token; httpService.url = KSketchWebLinks.jsonurlDeleteSketch; httpService.send(objToSend); From f4f9cbf56e6c96ca12a381c0b0b40ef45d2007db Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Mon, 6 Jul 2015 20:10:23 +0800 Subject: [PATCH 09/37] Users should be able to log in for the first time through their mobile device --- .../src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml index ee142f57..3d18fab0 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml @@ -140,7 +140,7 @@ var currentURL:String = event.location.toString(); //if successful login - if(currentURL.indexOf(KSketchWebLinks.redirecturl_login) >= 0) + if((currentURL.indexOf(KSketchWebLinks.redirecturl_login) >= 0) || (currentURL.indexOf(KSketchWebLinks.urlApproval) >= 0)) { //retrieve id from HTML page _webView.loadURL(KSketchWebLinks.urlUser); @@ -156,7 +156,7 @@ { var currentURL:String = event.location.toString(); - if(currentURL.indexOf(KSketchWebLinks.redirecturl_login) >= 0) + if((currentURL.indexOf(KSketchWebLinks.redirecturl_login) >= 0) || (currentURL.indexOf(KSketchWebLinks.urlApproval) >= 0)) { //retrieve id from HTML page _webView.loadURL(KSketchWebLinks.urlUser); From c5a50c6b762f23e61293acfe8c8404c215ed3d34 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Wed, 8 Jul 2015 12:17:48 +0800 Subject: [PATCH 10/37] Weblink for allowing first time sign in --- KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as | 1 + 1 file changed, 1 insertion(+) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as index e768c730..92c1ce01 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as @@ -28,5 +28,6 @@ package sg.edu.smu.ksketch2 public static const jsonurlOverwriteGetXML:String = KSketch_Config.host_name+"/get/overwritesketchxml"; //To save a sketch from an older version to Datastore public static const jsonurlDeleteSketch:String = KSketch_Config.host_name+"/get/deletesketch"; //To delete a sketch from Datastore + public static const urlApproval:String = KSketch_Config.host_name+"/app/approval.html"; } } \ No newline at end of file From e17400378355c397ea3fdc3daf66c2c1b201c38d Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Fri, 10 Jul 2015 15:53:05 +0800 Subject: [PATCH 11/37] wrapper class for list item --- KSKInterface/src/data/KSketch_DataListItem.as | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 KSKInterface/src/data/KSketch_DataListItem.as diff --git a/KSKInterface/src/data/KSketch_DataListItem.as b/KSKInterface/src/data/KSketch_DataListItem.as new file mode 100644 index 00000000..4e50b572 --- /dev/null +++ b/KSKInterface/src/data/KSketch_DataListItem.as @@ -0,0 +1,9 @@ +/** + * Created by ramvibhakar on 10/07/15. + */ +package data { +public class KSketch_DataListItem { + public function KSketch_DataListItem() { + } +} +} From d6acde7f2b3b4fe95492afc100ab3b36c871d85e Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Fri, 10 Jul 2015 15:56:05 +0800 Subject: [PATCH 12/37] Wrapper class --- KSKInterface/src/data/KSketch_ListItem.as | 68 +++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 KSKInterface/src/data/KSketch_ListItem.as diff --git a/KSKInterface/src/data/KSketch_ListItem.as b/KSKInterface/src/data/KSketch_ListItem.as new file mode 100644 index 00000000..170acc67 --- /dev/null +++ b/KSKInterface/src/data/KSketch_ListItem.as @@ -0,0 +1,68 @@ +/** + * Created by ramvibhakar on 10/07/15. + */ +package data { + +import org.as3commons.collections.framework.IComparator; +// Wrapper class for keeping the list items retrieved from the web service +public class KSketch_ListItem implements IComparator{ + private var _sketchId:Number; + private var _fileName:String; + private var _thumbnailData:String; + private var _version:int; + + public function KSketch_ListItem() { + this.sketchId = 0; + this.fileName = ""; + this.thumbnailData = ""; + this.version = 0 + } + + public function fromWebData(webData:Object) { + this.sketchId = webData.sketchId; + this.fileName = webData.fileName; + this.thumbnailData = webData.thumbnailData; + this.version = webData.version; + } + + public function compare(item1:*, item2:*):int { + if(item1.sketchId < item2.sketchId) + return -1; + if(item1.sketchId > item2.sketchId) + return -1; + return 0; + } + + public function get sketchId():Number { + return _sketchId; + } + + public function set sketchId(value:Number):void { + _sketchId = value; + } + + public function get fileName():String { + return _fileName; + } + + public function set fileName(value:String):void { + _fileName = value; + } + + public function get thumbnailData():String { + return _thumbnailData; + } + + public function set thumbnailData(value:String):void { + _thumbnailData = value; + } + + public function get version():int { + return _version; + } + + public function set version(value:int):void { + _version = value; + } +} +} From 7f8cb505183156966ea8c9b9cd7a6ca4492cc1de Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Fri, 10 Jul 2015 15:58:13 +0800 Subject: [PATCH 13/37] AS3Commons package added --- as3commons-collections-1.3.2.swc | Bin 0 -> 69751 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 as3commons-collections-1.3.2.swc diff --git a/as3commons-collections-1.3.2.swc b/as3commons-collections-1.3.2.swc new file mode 100644 index 0000000000000000000000000000000000000000..bcffba42e21e2fb7ccf8c47adfe6816ac21b0eac GIT binary patch literal 69751 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 Z Date: Fri, 10 Jul 2015 16:17:14 +0800 Subject: [PATCH 14/37] Cache control for sync and save --- .../canvas/controls/KSketch_CacheControl.as | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as new file mode 100644 index 00000000..b4e347b0 --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as @@ -0,0 +1,132 @@ +package sg.edu.smu.ksketch2.canvas.controls +{ + import com.adobe.serialization.json.JSON; + + import flash.net.SharedObject; + + import mx.rpc.events.FaultEvent; + import mx.rpc.events.ResultEvent; + import mx.rpc.http.HTTPService; + + import data.KSketch_ListItem; + + import org.as3commons.collections.SortedList; + + import sg.edu.smu.ksketch2.KSketchWebLinks; + + public class KSketch_CacheControl + { + //class variables + public var informationArr:Array; + private var _mySO:SharedObject = SharedObject.getLocal("mydata"); + private var httpService:HTTPService = new HTTPService(); + private var webList:SortedList = new SortedList(); + + public function KSketch_CacheControl() + { + informationArr = new Array(2); + informationArr[0] = null; //user: user object + informationArr[1] = null; //cachedSketchList: cached sketch list + informationArr[2] = null; //webSketchList: web sketch list + informationArr[3] = null; //syncSketchList: cached sketch list to sync with web + + if (_mySO.data) + { + if(_mySO.data.user) + { + informationArr[0] = _mySO.data.user; + } + + if(_mySO.data.cachedSketchList) + { + informationArr[1] = _mySO.data.cachedSketchList; + } + + if(_mySO.data.webSketchList) + { + informationArr[0] = _mySO.data.webSketchList; + } + + if(_mySO.data.syncSketchList) + { + informationArr[1] = _mySO.data.syncSketchList; + } + } + + httpService.addEventListener(FaultEvent.FAULT, faultHandler); + httpService.addEventListener(ResultEvent.RESULT, resultHandler); + } + + public function get user():Object + { + return informationArr[0]; + } + + /** set user as anonymous **/ + public function newUser():void + { + var userObject:Object = new Object(); + userObject.status = "failed"; + userObject.u_realname = "Anonymous"; + userObject.u_logincount = "n.a"; + userObject.u_lastlogin = "n.a"; + userObject.u_isadmin = "n.a"; + userObject.id = "n.a"; + userObject.g_hash = "n.a"; + userObject.u_name = "Anonymous"; + userObject.u_created = "n.a"; + userObject.u_login = "n.a"; + userObject.u_isactive = "n.a"; + userObject.u_version = "n.a"; + userObject.u_email = "n.a"; + + informationArr[0] = userObject; + } + + /** set user based on received user object **/ + public function set user(userObject:Object):void + { + informationArr[0] = userObject; + } + + public function retrieveAllSketchList():void + { + var allList:SortedList = new SortedList(); + + + //var webSketchArr:Array = retrieveUserSketchList(); + } + + public function retrieveWebSketchList():void + { + if(user.id != "n.a" && (user.status.indexOf("success") >= 0)) + { + //make web request to pull list of sketches + var parameter:String = "{\"sketchID\":[],\"userid\":" + user.id + "}"; + + httpService.url = KSketchWebLinks.jsonurlSketch + "/" + parameter; + httpService.send(); + } + } + + private function resultHandler(event:ResultEvent):Array + { + //TODO: RAM check for negative cases + var rawData:String = String(event.result); + var resultObj:Object = com.adobe.serialization.json.JSON.decode(rawData,true); + + var tempArr:Array = (resultObj.entities as Array); + for each(var tempObj:Object in tempArr) + { + var _ksketchListItem:KSketch_ListItem = new KSketch_ListItem(); + _ksketchListItem.fromWebData(tempObj); + webList.add(_ksketchListItem); + } + } + + private function faultHandler(event:FaultEvent):void + { + //TODO: RAM check for negative cases + } + } +} \ No newline at end of file From de457d714232774655ec746ba74c1b65f6dce4e3 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Fri, 10 Jul 2015 20:37:04 +0800 Subject: [PATCH 15/37] Sync algorithm added --- KSKInterface/src/data/KSketch_ListItem.as | 15 +++++- .../canvas/controls/KSketch_CacheControl.as | 47 +++++++++++++++++-- 2 files changed, 56 insertions(+), 6 deletions(-) diff --git a/KSKInterface/src/data/KSketch_ListItem.as b/KSKInterface/src/data/KSketch_ListItem.as index 170acc67..8fb948c3 100644 --- a/KSKInterface/src/data/KSketch_ListItem.as +++ b/KSKInterface/src/data/KSketch_ListItem.as @@ -10,12 +10,14 @@ public class KSketch_ListItem implements IComparator{ private var _fileName:String; private var _thumbnailData:String; private var _version:int; + private var _isSaved:Boolean; public function KSketch_ListItem() { this.sketchId = 0; this.fileName = ""; this.thumbnailData = ""; - this.version = 0 + this.version = 0; + this.isSaved = true; } public function fromWebData(webData:Object) { @@ -23,13 +25,14 @@ public class KSketch_ListItem implements IComparator{ this.fileName = webData.fileName; this.thumbnailData = webData.thumbnailData; this.version = webData.version; + this.isSaved = true; } public function compare(item1:*, item2:*):int { if(item1.sketchId < item2.sketchId) return -1; if(item1.sketchId > item2.sketchId) - return -1; + return 1; return 0; } @@ -64,5 +67,13 @@ public class KSketch_ListItem implements IComparator{ public function set version(value:int):void { _version = value; } + + public function get isSaved():Boolean { + return _isSaved; + } + + public function set isSaved(value:Boolean):void { + _isSaved = value; + } } } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as index b4e347b0..2557091e 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as @@ -89,12 +89,50 @@ package sg.edu.smu.ksketch2.canvas.controls informationArr[0] = userObject; } - public function retrieveAllSketchList():void + public function retrieveAllSketchList():Array { + var result:Object; + + var cacheList:SortedList = new SortedList(); + result = syncList(cacheList,webList); + //TODO: Handle toBeSavedList here + //result.toBeSavedList + return result.syncedList.toArray(); + + } + // Probably the most efficient way of syncing the sketch list in the cache and + // sketch list from the web + private function syncList(cacheList:SortedList,webList:SortedList): Object{ var allList:SortedList = new SortedList(); - - - //var webSketchArr:Array = retrieveUserSketchList(); + var updateList:SortedList = new SortedList(); + var ret:Object = new Object(); + var x:int =0 , y:int = 0; + while((x < cacheList.size) || (y < webList.size)){ + if(y >= webList.size) { + if(!cacheList.itemAt(x).isSaved) { + updateList.add(cacheList.itemAt(x)); + } + x += 1; + } else if (x >= cacheList.size) { + allList.add(webList.itemAt(y)); + y+=1; + } else if (cacheList.itemAt(x).compare(webList.itemAt(y)) == -1) { + if(!cacheList.itemAt(x).isSaved) { + updateList.add(cacheList.itemAt(x)); + } + x += 1; + } else if (cacheList.itemAt(x).compare(webList.itemAt(y)) == 1) { + allList.add(webList.itemAt(y)); + y += 1; + } else { + allList.add(webList.itemAt(y)); + x += 1; + y += 1; + } + } + ret.syncedList = allList; + ret.toBeSavedList = updateList; + return ret; } public function retrieveWebSketchList():void @@ -122,6 +160,7 @@ package sg.edu.smu.ksketch2.canvas.controls _ksketchListItem.fromWebData(tempObj); webList.add(_ksketchListItem); } + return retrieveAllSketchList(); } private function faultHandler(event:FaultEvent):void From f8ab4111e86026d7869e829277b991068c134037 Mon Sep 17 00:00:00 2001 From: camellia Date: Tue, 14 Jul 2015 12:57:22 +0800 Subject: [PATCH 16/37] Update for new save and sync --- .gitignore | 1 - KSKApp_Air/.actionScriptProperties | 17 +- KSKApp_Air/src/OverrideRuntimeDPIProvider.as | 21 +- KSKInterface/.actionScriptProperties | 7 +- KSKInterface/.flexLibProperties | 2 +- KSKInterface/src/data/KSketch_DataListItem.as | 170 ++- KSKInterface/src/data/KSketch_ListItem.as | 44 +- .../sg/edu/smu/ksketch2/KSketchStyleSheet.as | 302 ++++ .../sg/edu/smu/ksketch2/KSketchWebLinks.as | 2 +- .../src/sg/edu/smu/ksketch2/KSketch_User.as | 5 +- .../ksketch2/canvas/KSketch_LoginView.mxml | 30 +- .../popup/KSketch_LogoutNotice.mxml | 4 +- .../popup/KSketch_OverwriteSaveOptions.mxml | 2 +- .../components/popup/KSketch_PopUp_Menu.mxml | 4 +- .../components/popup/KSketch_SaveOptions.mxml | 85 +- .../components/popup/KSketch_SyncOptions.mxml | 20 +- .../components/view/KSketch_CanvasView.mxml | 55 +- .../components/view/KSketch_HomeView.mxml | 1293 ++++++----------- .../KSketch_HomeView_IconItemRenderer.mxml | 8 +- .../canvas/controls/KSketch_CacheControl.as | 134 +- .../src/sg/edu/smu/ksketch2/utils/KWebData.as | 10 +- 21 files changed, 1229 insertions(+), 987 deletions(-) create mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyleSheet.as diff --git a/.gitignore b/.gitignore index b5bae552..6cfbbf42 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,3 @@ TestDrag/ TestDragV2/ as3corelib/ -.idea/workspace.xml diff --git a/KSKApp_Air/.actionScriptProperties b/KSKApp_Air/.actionScriptProperties index df1b657a..2f2a16c7 100755 --- a/KSKApp_Air/.actionScriptProperties +++ b/KSKApp_Air/.actionScriptProperties @@ -21,14 +21,15 @@ - - + + + @@ -42,8 +43,9 @@ - - + + + @@ -53,11 +55,11 @@ - - + + @@ -67,10 +69,10 @@ - + @@ -79,7 +81,6 @@ - diff --git a/KSKApp_Air/src/OverrideRuntimeDPIProvider.as b/KSKApp_Air/src/OverrideRuntimeDPIProvider.as index 84404779..8c07312a 100644 --- a/KSKApp_Air/src/OverrideRuntimeDPIProvider.as +++ b/KSKApp_Air/src/OverrideRuntimeDPIProvider.as @@ -3,19 +3,26 @@ package import flash.system.Capabilities; import mx.core.RuntimeDPIProvider; - import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchStyleSheet; public class OverrideRuntimeDPIProvider extends RuntimeDPIProvider { override public function get runtimeDPI():Number { - //For iPad retina display - if(Capabilities.version.indexOf('IOS') > -1) + trace("Screen X: " + Capabilities.screenResolutionX); + trace("Screen Y: " + Capabilities.screenResolutionY); + + if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY > 1500) + { + KSketchStyleSheet.scaleHome(2); + KSketchStyleSheet.scaleCanvas(1.8); + KSketchStyleSheet.scaleFont(2); + } + else if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY < 1500) { - if (Capabilities.screenResolutionX > 1500) - { - KSketchStyles.scaleUp(2); - } + KSketchStyleSheet.scaleHome(2); + KSketchStyleSheet.scaleCanvas(1.4); + KSketchStyleSheet.scaleFont(2); } return super.runtimeDPI; diff --git a/KSKInterface/.actionScriptProperties b/KSKInterface/.actionScriptProperties index a1376a92..3a7db6d3 100755 --- a/KSKInterface/.actionScriptProperties +++ b/KSKInterface/.actionScriptProperties @@ -3,6 +3,7 @@ + @@ -22,16 +23,16 @@ - - + + + - diff --git a/KSKInterface/.flexLibProperties b/KSKInterface/.flexLibProperties index 188e2fae..11008d41 100755 --- a/KSKInterface/.flexLibProperties +++ b/KSKInterface/.flexLibProperties @@ -3,7 +3,6 @@ - @@ -22,6 +21,7 @@ + diff --git a/KSKInterface/src/data/KSketch_DataListItem.as b/KSKInterface/src/data/KSketch_DataListItem.as index 4e50b572..7a867fb6 100644 --- a/KSKInterface/src/data/KSketch_DataListItem.as +++ b/KSKInterface/src/data/KSketch_DataListItem.as @@ -1,9 +1,169 @@ /** - * Created by ramvibhakar on 10/07/15. + * Copyright 2010-2012 Singapore Management University + * Developed under a grant from the Singapore-MIT GAMBIT Game Lab + * This Source Code Form is subject to the terms of the + * Mozilla Public License, v. 2.0. If a copy of the MPL was + * not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. */ package data { -public class KSketch_DataListItem { - public function KSketch_DataListItem() { - } -} + + public class KSketch_DataListItem { + + private var _fileData:XML; + private var _fileName:String; + private var _originalName:String; + private var _id:String; + private var _modified:Date + private var _changeDescription:String; + private var _sketchId:int; + private var _originalSketchId:int; + private var _version:int; + private var _newVersion:int; + + + public function KSketch_DataListItem(fileData:String, fileName:String, originalName:String, id:String, + modified:String, changeDescription:String, sketchId:int, version:int) { + _fileData = new XML(fileData); + _fileName = fileName; + _id = id; + _changeDescription = changeDescription; + + _modified = new Date(); + if(modified != "") + { + _modified.setTime(Date.parse(modified)); + } + + if(originalName != "") + { + _originalName = originalName; + } + else + { + _originalName = _fileName; + } + + if(sketchId > 0) + { + _sketchId = sketchId; + } + else + { + _sketchId = -1; + } + _originalSketchId = _sketchId; + + _version = version; + if(_version == 0) + { + _newVersion = -1; + } + else + { + _newVersion = _version; + } + } + + public function set fileData(value:XML):void + { + _fileData = value; + } + + public function get fileData():XML + { + return _fileData; + } + + public function set fileName(value:String):void + { + _fileName = value; + } + + public function get fileName():String + { + return _fileName; + } + + public function set originalName(value:String):void + { + _originalName = value; + } + + public function get originalName():String + { + return _originalName; + } + + public function set id(value:String):void + { + _id = value; + } + + public function get id():String + { + return _id; + } + + public function set modified(value:Date):void + { + _modified = value; + } + + public function get modified():Date + { + return _modified; + } + + public function set changeDescription(value:String):void + { + _changeDescription = value; + } + + public function get changeDescription():String + { + return _changeDescription; + } + + public function set sketchId(value:int):void + { + _sketchId = value; + } + + public function get sketchId():int + { + return _sketchId; + } + + public function set originalSketchId(value:int):void + { + _originalSketchId = value; + } + + public function get originalSketchId():int + { + return _originalSketchId; + } + + public function set version(value:int):void + { + _version = value; + } + + public function get version():int + { + return _version; + } + + public function set newVersion(value:int):void + { + _newVersion = value; + } + + public function get newVersion():int + { + return _newVersion; + } + + } } diff --git a/KSKInterface/src/data/KSketch_ListItem.as b/KSKInterface/src/data/KSketch_ListItem.as index 8fb948c3..2dabc712 100644 --- a/KSKInterface/src/data/KSketch_ListItem.as +++ b/KSKInterface/src/data/KSketch_ListItem.as @@ -1,5 +1,10 @@ /** - * Created by ramvibhakar on 10/07/15. + * Copyright 2010-2012 Singapore Management University + * Developed under a grant from the Singapore-MIT GAMBIT Game Lab + * This Source Code Form is subject to the terms of the + * Mozilla Public License, v. 2.0. If a copy of the MPL was + * not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. */ package data { @@ -9,29 +14,32 @@ public class KSketch_ListItem implements IComparator{ private var _sketchId:Number; private var _fileName:String; private var _thumbnailData:String; + private var _created:String; private var _version:int; private var _isSaved:Boolean; public function KSketch_ListItem() { - this.sketchId = 0; - this.fileName = ""; - this.thumbnailData = ""; - this.version = 0; - this.isSaved = true; + this._sketchId = 0; + this._fileName = ""; + this._thumbnailData = ""; + this._created = ""; + this._version = 0; + this._isSaved = true; } - public function fromWebData(webData:Object) { - this.sketchId = webData.sketchId; - this.fileName = webData.fileName; - this.thumbnailData = webData.thumbnailData; - this.version = webData.version; - this.isSaved = true; + public function fromWebData(webData:Object):void { + this._sketchId = webData.data.sketchId; + this._fileName = webData.data.fileName; + this._thumbnailData = webData.data.thumbnailData; + this._created = webData.data.created; + this._version = webData.data.version; + this._isSaved = true; } public function compare(item1:*, item2:*):int { - if(item1.sketchId < item2.sketchId) + if(item1._sketchId < item2._sketchId) return -1; - if(item1.sketchId > item2.sketchId) + if(item1._sketchId > item2._sketchId) return 1; return 0; } @@ -59,6 +67,14 @@ public class KSketch_ListItem implements IComparator{ public function set thumbnailData(value:String):void { _thumbnailData = value; } + + public function get created():String { + return _created; + } + + public function set created(value:String):void { + _created = value; + } public function get version():int { return _version; diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyleSheet.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyleSheet.as new file mode 100755 index 00000000..31c6b480 --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyleSheet.as @@ -0,0 +1,302 @@ +/** + * Copyright 2010-2012 Singapore Management University + * Developed under a grant from the Singapore-MIT GAMBIT Game Lab + * This Source Code Form is subject to the terms of the + * Mozilla Public License, v. 2.0. If a copy of the MPL was + * not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + */ +package sg.edu.smu.ksketch2 +{ + public class KSketchStyleSheet + { + //==========HOME VIEW variables========== + //Logo + public static var LOGO_BUTTON_WIDTH:Number = 150; + public static var LOGO_BUTTON_HEIGHT:Number = 150; + public static var LOGO_PADDING_LEFT:Number = 80; + public static var LOGO_PADDING_TOP:Number = 40; + public static var LOGO_PADDING_BUTTON:Number = 10; + + //Main buttons + public static var HOME_BUTTON_SIZE:int = 15; + public static var HOME_BUTTON_FONTSIZE:int = 14; + + //List of sketches + public static const LIST_SKETCH_GAP:int = 0; + public static var LIST_SKETCH_FONT:int = 20; + public static var LIST_SKETCH_LINE:int = 1000; + public static var LIST_SKETCH_WIDTH:Number = 74; + public static var LIST_SKETCH_HEIGHT:Number = 120; + public static var LIST_SKETCH_IMAGE_WIDTH:Number = 160; + public static var LIST_SKETCH_IMAGE_HEIGHT:Number = 90; + + //==========CANVAS VIEW variables========== + //COLORS, FONTS + //Application + public static const APP_BACKGROUND_COLOR:uint = 0xD0D2D3; + public static const APP_FONT_FAMILY:String = "Arial, Helvetica"; + + //Pop up menu + public static const BLACK_PEN:uint = 0x000000; + public static const BLUE_PEN:uint = 0x0000FF; + public static const GREEN_PEN:uint = 0x00FF00; + public static const RED_PEN:uint = 0xFF0000; + public static const GREY_HIGHLIGHT:uint = 0xd3d3d3; + public static const WHITE_HIDE:uint = 0xFFFFFF; + public static const MENU_BACKGROUND_COLOR:uint = 0xA6A8AB; + public static const CONTEXTMENU_BACKGROUND_COLOR:uint = 0x000000; + + //Canvas + public static const CANVAS_BUTTON_NORMAL:uint = 0xC8CCCE; + public static const CANVAS_BUTTON_ACTIVATED:uint = 0x505050; + public static const CANVAS_BUTTON_PLAY_ACTIVATED:uint = 0xDD1F26; + public static const CANVAS_BUTTON_SHADOW_COLOR:uint = 0x000000; + public static const CANVAS_BUTTON_SHADOW_STRENGTH:Number = 0.5; + public static const CANVAS_BUTTON_SHADOW_ALPHA:Number = 0.6; + public static const CANVAS_BUTTON_SHADOW_DISTANCE:Number = 3; + public static const CANVAS_BUTTON_SHADOW_ANGLE:Number = 50; + public static const CANVAS_BACKGROUND_COLOR:uint = 0xA6A8AB; + public static const CANVAS_PAPER_COLOR:uint = 0xFFFFFF; + public static const CANVAS_PAPER_REGION:uint = 0xC43F2D; + public static const CANVAS_BORDER_COLOR:uint = 0x000000; + public static const CANVAS_SHADOW_COLOR:uint = 0x000000; + public static const CANVAS_SHADOW_ALPHA:Number = 0.4; + public static const CANVAS_SHADOW_X_DISTANCE:Number = 12; + public static const CANVAS_SHADOW_Y_DISTANCE:Number = 12; + public static const CANVAS_SHADOW_ANGLE:Number = 45; + public static const CANVAS_SHADOW_STRENGTH:Number = 2; + + //Timebar + public static const TIMEBAR_BACKGROUND_COLOR:uint = 0xA6A8AB; + public static const TIMEBAR_SHADOW_COLOR:uint = 0x000000; + public static const TIMEBAR_SHADOW_ALPHA:Number = 0.35; + public static const TIMEBAR_SHADOW_DISTANCE:Number = 8; + public static const TIMEBAR_SHADOW_ANGLE:Number = 90; + public static const TIMEBAR_SHADOW_STRENGTH:Number = 2; + public static const TIME_CONTROL_BACKGROUND_COLOR:uint = 0xFFFFFF; + public static const TIME_CONTROL_FILL_COLOR:uint = 0xDD1F26; + public static const TIME_INDICATOR_COLOR:uint = 0x000000; + public static const TIME_LABEL_FONT_COLOR:Number = 0x404041; + public static const TIME_TICK_KEYFRAME:uint = 0x6B0000; //for keyframes (passthrough = false) + public static const TIME_TICK_CONTROLPOINT:uint = 0x6B0000; //for controlpoints (passthroug = true) + public static const TIME_TICK_SELECTED_ALPHA:Number = 1; + public static const TIME_TICK_UNSELECTED_ALPHA:Number = 0.5; + public static const ACTIVITY_COLOR:uint = 0xFF0000; + public static const ACTIVITY_OTHER_COLOR:uint = 0xC2C2C2; + public static const ACTIVITY_ALPHA:Number = 1.0; + + //Magnifier/Toggle Button + public static const MAGNIFIER_BACKGROUND_COLOR:uint = 0x000000; + public static const MAGNIFIER_FONT_COLOR:uint = 0xFFFFFF; + public static const MAGNIFIER_CURRENTTIMELABEL_COLOR_MULTIPLIER:Number = 100; + public static const TOGGLEBUTTON_ON_COLOR:uint = 0xFFFFFF; + public static const TOGGLEBUTTON_OFF_COLOR:uint = 0x000000; + + //Widget + public static const WIDGET_ENABLED_ALPHA:Number = 1; + public static const WIDGET_DISABLED_ALPHA:Number = 0.2; + public static const WIDGET_INTERPOLATE_COLOR:uint = 0x6E6F71; + public static const WIDGET_PERFORM_COLOR:uint = 0x971C24; + + //Feedback + public static const FEEDBACK_BACKGROUND_ALPHA:Number = 0; + + //Scale + public static var SCALE:int = 1; + public static var CANVAS_SCALE:Number = 0.8; + + //Login + public static var LOGIN_CONNECTION_FONT_SIZE:Number = 23; + + //Canvas + public static var CANVAS_BUTTON_CORNER_RADIUS:Number = 5; + public static var CANVAS_BORDER_WEIGHT:Number = 1; + + //Timebar + public static var TIMEBAR_LAYOUT_GAP:Number = 4; + public static var TIMEBAR_LAYOUT_PADDING_HORIZONTAL:Number = 5; + public static var TIMEBAR_LAYOUT_PADDING_VERTICAL:Number = 5; + public static var TIMEBAR_GAP_CONTEXTMENU_DOUBLE:int = 15; + public static var TIMEBAR_GAP_CONTEXTMENU_SINGLE:int = 100; + public static var TIMEBAR_X_LIMIT_DOUBLE:int = 875; + public static var TIMEBAR_X_LIMIT_SINGLE:int = 960; + public static var TIMEBAR_X_LIMIT_DOUBLE_ANDROID:int = 1100; + public static var TIMEBAR_X_LIMIT_SINGLE_ANDROID:int = 1200; + public static var TIMEBAR_PLAY_BUTTON_WIDTH:Number = 60; + public static var TIMEBAR_PLAY_BUTTON_HEIGHT:Number = 60; + public static var TIMEBAR_BUTTON_WIDTH:Number = 50; + public static var TIMEBAR_BUTTON_HEIGHT:Number = 50; + public static var TIME_CONTROL_HEIGHT:Number = 80; + public static var TIME_LABEL_FONT_SIZE:Number = 10; + public static var TIME_PARTITION_FONT_SIZE:Number = 10.5; + public static var TIME_TICK_THICKNESS:Number = 4; + public static var TIME_TICK_THICKNESS_A:Number = 3; + public static var TIME_TICK_THICKNESS_B:Number = 7; + public static var MAGNIFIER_IMAGE_UNSCALED_WIDTH:Number = 50; + public static var MAGNIFIER_SCALE:Number = 2; + public static var MAGNIFIER_PADDING:Number = 7.5; + public static var MAGNIFIER_FONT_SIZE:Number = 11; + public static var MAGNIFIER_ARROW_PROPORTION:Number = 0.4; + public static var MAGNIFIER_INDICATOR_THICKNESS:Number = 3; + public static var MAGNIFIER_CIRCLE_1:int = 18; + public static var MAGNIFIER_CIRCLE_2:int = 14; + public static var MAGNIFIER_CIRCLE_POS:int = 23; + public static var MAGNIFIER_CURRENTTIMELABEL_THICKNESS:Number = 1; + public static var TOGGLEBUTTON_PADDING:Number = 2; + public static var TOGGLEBUTTON_FONT_SIZE:Number = 9; + public static var TOGGLEBUTTON_CORNERS:Number = 2; + + //Dialog button skins + public static var DIALOGBUTTON_PADDING:Number = 10; + + //Feedback Message + public static var FEEDBACK_FONT_SIZE:Number = 60; + public static var FEEDBACK_FADE_TIME:Number = 250; + + //Menu + public static var MENU_GAP:Number = 10; + public static var MENU_CORNER_RADIUS:Number = 5; + public static var MENU_PADDING:Number = 5; + public static var MENU_BUTTON_GAP:Number = 10; + public static var MENU_BUTTON_WIDTH:Number = 35; + public static var MENU_BUTTON_HEIGHT:Number = 35; + public static var POPUP_SEPARATOR_LINE:int = 60; + public static var POPUP_SEPARATOR_GAP:int = 5; + public static var CONTEXTMENU_PADDING:Number = 7.5; + public static var CONTEXTMENU_BUTTON_PADDING:Number = 5; + public static var CONTEXTMENU_CORNERS:Number = 5; + + //Widget + public static var WIDGET_CENTROID_SIZE:Number = 10; //PIVOT + + //General Button + public static var BUTTON_SIZE:int = 15; + public static var DIALOG_PADDING_20:int = 20; + public static var DIALOG_PADDING_15:int = 15; + public static var DIALOG_PADDING_10:int = 10; + public static var DIALOG_PADDING_5:int = 5; + public static var DIALOG_MEASUREMENT_25:int = 50; + public static var DIALOG_MEASUREMENT_50:int = 50; + public static var DIALOG_MEASUREMENT_100:int = 100; + public static var DIALOG_MEASUREMENT_300:int = 300; + + //Help screen + public static var X_POS_BUTTON:int = 600; + public static var Y_POS_BUTTON:int = 450; + public static var IMAGE_HELP_WIDTH:int = 750; + public static var IMAGE_HELP_HEIGHT:int = 512; + + + public static var FONT_LARGE:int = 26; + public static var FONT_MEDIUM:int = 18; + public static var FONT_STANDARD:int = 14; + public static var FONT_SMALL:Number = 12; + public static var FONT_XSMALL:int = 10; + + + public static function scaleHome(scaleFactor:Number):void + { + LOGO_BUTTON_WIDTH = 150 * scaleFactor; + LOGO_BUTTON_HEIGHT = 150 * scaleFactor; + LOGO_PADDING_LEFT = 80 * scaleFactor; + LOGO_PADDING_TOP = 40 * scaleFactor; + LOGO_PADDING_BUTTON = 10 * scaleFactor; + + HOME_BUTTON_SIZE = 15 * scaleFactor; + HOME_BUTTON_FONTSIZE = 14 * scaleFactor; + + LIST_SKETCH_FONT = 20 * scaleFactor; + LIST_SKETCH_LINE = 1000 * scaleFactor; + LIST_SKETCH_WIDTH = 74 * scaleFactor; + LIST_SKETCH_HEIGHT = 120 * scaleFactor; + LIST_SKETCH_IMAGE_WIDTH = 160 * scaleFactor; + LIST_SKETCH_IMAGE_HEIGHT = 90 * scaleFactor; + } + + public static function scaleCanvas(scaleFactor:Number):void + { + SCALE = 1.9; + CANVAS_SCALE = 1.2 / scaleFactor; + LOGIN_CONNECTION_FONT_SIZE = 23 * scaleFactor; + + CANVAS_BUTTON_CORNER_RADIUS = 5 * scaleFactor; + CANVAS_BORDER_WEIGHT = 1 * scaleFactor; + + TIMEBAR_LAYOUT_GAP = 4 * scaleFactor; + TIMEBAR_LAYOUT_PADDING_HORIZONTAL = 5 * scaleFactor; + TIMEBAR_LAYOUT_PADDING_VERTICAL = 5 * scaleFactor; + TIMEBAR_GAP_CONTEXTMENU_DOUBLE = 15 * scaleFactor; + TIMEBAR_GAP_CONTEXTMENU_SINGLE = 100 * scaleFactor; + TIMEBAR_X_LIMIT_DOUBLE = 875 * scaleFactor; + TIMEBAR_X_LIMIT_SINGLE = 960 * scaleFactor; + TIMEBAR_X_LIMIT_DOUBLE_ANDROID = 1100 * scaleFactor; + TIMEBAR_X_LIMIT_SINGLE_ANDROID = 1200 * scaleFactor; + TIMEBAR_PLAY_BUTTON_WIDTH = 60 * scaleFactor; + TIMEBAR_PLAY_BUTTON_HEIGHT = 60 * scaleFactor; + TIMEBAR_BUTTON_WIDTH = 50 * scaleFactor; + TIMEBAR_BUTTON_HEIGHT = 50 * scaleFactor; + TIME_CONTROL_HEIGHT = 80 * scaleFactor; + TIME_LABEL_FONT_SIZE = 10 * scaleFactor; + TIME_PARTITION_FONT_SIZE = 10.5 * scaleFactor; + TIME_TICK_THICKNESS = 4 * scaleFactor; + TIME_TICK_THICKNESS_A = 3 * scaleFactor; + TIME_TICK_THICKNESS_B = 7 * scaleFactor; + MAGNIFIER_IMAGE_UNSCALED_WIDTH = 50 * scaleFactor; + MAGNIFIER_SCALE = 2 * scaleFactor; + MAGNIFIER_PADDING = 7.5 * scaleFactor; + MAGNIFIER_FONT_SIZE = 11 * scaleFactor; + MAGNIFIER_ARROW_PROPORTION = 0.4 * scaleFactor; + MAGNIFIER_INDICATOR_THICKNESS = 3 * scaleFactor; + MAGNIFIER_CIRCLE_1 = 18 * scaleFactor; + MAGNIFIER_CIRCLE_2 = 14 * scaleFactor; + MAGNIFIER_CIRCLE_POS = 23 * scaleFactor; + MAGNIFIER_CURRENTTIMELABEL_THICKNESS = 1 * scaleFactor; + TOGGLEBUTTON_PADDING = 2 * scaleFactor; + TOGGLEBUTTON_FONT_SIZE = 9 * scaleFactor; + TOGGLEBUTTON_CORNERS = 2 * scaleFactor; + DIALOGBUTTON_PADDING = 10 * scaleFactor; + + FEEDBACK_FONT_SIZE = 60 * scaleFactor; + FEEDBACK_FADE_TIME = 250 * scaleFactor; + + MENU_GAP = 10 * scaleFactor; + MENU_CORNER_RADIUS = 5 * scaleFactor; + MENU_PADDING = 5 * scaleFactor; + MENU_BUTTON_GAP = 10 * scaleFactor; + MENU_BUTTON_WIDTH = 35 * scaleFactor; + MENU_BUTTON_HEIGHT = 35 * scaleFactor; + POPUP_SEPARATOR_LINE = 60 * scaleFactor; + POPUP_SEPARATOR_GAP = 5 * scaleFactor; + CONTEXTMENU_PADDING = 7.5 * scaleFactor; + CONTEXTMENU_BUTTON_PADDING = 5 * scaleFactor; + CONTEXTMENU_CORNERS = 5 * scaleFactor; + + WIDGET_CENTROID_SIZE = 10 * scaleFactor; + + BUTTON_SIZE = 15 * scaleFactor; + DIALOG_PADDING_20 = 20 * scaleFactor; + DIALOG_PADDING_15 = 15 * scaleFactor; + DIALOG_PADDING_10 = 10 * scaleFactor; + DIALOG_PADDING_5 = 5 * scaleFactor; + DIALOG_MEASUREMENT_25 = 50 * scaleFactor; + DIALOG_MEASUREMENT_50 = 50 * scaleFactor; + DIALOG_MEASUREMENT_100 = 100 * scaleFactor; + DIALOG_MEASUREMENT_300 = 300 * scaleFactor; + + X_POS_BUTTON = 600 * scaleFactor; + Y_POS_BUTTON = 450 * scaleFactor; + IMAGE_HELP_WIDTH = 750 * scaleFactor; + IMAGE_HELP_HEIGHT = 512 * scaleFactor; + } + + public static function scaleFont(scaleFactor:Number):void + { + FONT_LARGE = 26 * scaleFactor; + FONT_MEDIUM = 18 * scaleFactor; + FONT_STANDARD = 14 * scaleFactor + FONT_SMALL = 12 * scaleFactor; + FONT_XSMALL = 10 * scaleFactor; + } + } +} \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as index 92c1ce01..ffe6e9b5 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as @@ -14,7 +14,7 @@ package sg.edu.smu.ksketch2 public static const url:String = KSketch_Config.host_name+"/app/login.html"; //Page displayed on stagewebview public static const jsonurlUser:String = KSketch_Config.host_name+"/user/getuser"; //To retrieve user information after login public static const jsonurlUserMobile:String = KSketch_Config.host_name+"/user/getusermobile"; //To retrieve user information after login using ID - public static const urlUser:String = KSketch_Config.host_name+"/user/urlUserV2"; //To retrieve user id through URL + public static const urlUser:String = KSketch_Config.host_name+"/user/urlUser"; //To retrieve user id through URL public static const login_success:String = KSketch_Config.host_name+"/app/login_successful"; public static const redirecturl_login:String = KSketch_Config.host_name+"/app/profile.html"; //Indicates successful login diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_User.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_User.as index a5bd0c7c..cb9244ae 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_User.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_User.as @@ -17,7 +17,7 @@ package sg.edu.smu.ksketch2 public var u_isactive:String; public var u_version:String; public var u_email:String; - public var token:String; + public function KSketch_User(obj:Object) { if(obj.status.indexOf("success") >= 0) @@ -35,9 +35,6 @@ package sg.edu.smu.ksketch2 this.u_isactive = obj.u_isactive; this.u_version = obj.u_version; this.u_email = obj.u_email; - if(obj.hasOwnProperty("token")){ - this.token = obj.token; - } } else { diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml index 3d18fab0..832a7272 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml @@ -8,7 +8,7 @@ > - @@ -31,7 +31,6 @@ import air.net.URLMonitor; import sg.edu.smu.ksketch2.KSketchWebLinks; - import sg.edu.smu.ksketch2.KSketch_User; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_DataProgressBar; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_HomeView; @@ -41,7 +40,6 @@ public static var userData:Object = new Object(); - public static var _isLoggedIn:Boolean = false; private var progressTimer:Timer; private var _stageWidth:Number; @@ -50,7 +48,7 @@ private var _monitorTimer:Timer; private var _webView:StageWebView = new StageWebView(); private var _isLoggedOut:Boolean = false; - private var token:String = ""; + protected function viewActivateHandler(event:ViewNavigatorEvent):void { // TODO Auto-generated method stub @@ -59,7 +57,7 @@ _webView.stage = stage; _stageWidth = stage.stageWidth; _stageHeight = stage.stageHeight; - + //check for network connection _monitorTimer = new Timer(3000); _monitor = new URLMonitor(new URLRequest(KSketchWebLinks.url)); @@ -140,7 +138,7 @@ var currentURL:String = event.location.toString(); //if successful login - if((currentURL.indexOf(KSketchWebLinks.redirecturl_login) >= 0) || (currentURL.indexOf(KSketchWebLinks.urlApproval) >= 0)) + if(currentURL.indexOf(KSketchWebLinks.redirecturl_login) >= 0) { //retrieve id from HTML page _webView.loadURL(KSketchWebLinks.urlUser); @@ -156,7 +154,7 @@ { var currentURL:String = event.location.toString(); - if((currentURL.indexOf(KSketchWebLinks.redirecturl_login) >= 0) || (currentURL.indexOf(KSketchWebLinks.urlApproval) >= 0)) + if(currentURL.indexOf(KSketchWebLinks.redirecturl_login) >= 0) { //retrieve id from HTML page _webView.loadURL(KSketchWebLinks.urlUser); @@ -167,13 +165,12 @@ _webView.viewPort = null; _webView.dispose(); _webView = null; - + var arr:Array = currentURL.split(".html?"); var vars:URLVariables = new URLVariables(arr[1]); //get json url GetUser.url = KSketchWebLinks.jsonurlUserMobile + "?id=" + vars.id; - token = vars.token; GetUser.send(); GetUser.addEventListener(FaultEvent.FAULT, faultHandler); startProgressBar(); @@ -194,12 +191,10 @@ { // create a new User instance and // save it to data property - var kUser:KSketch_User = new KSketch_User(obj); - kUser.token = token; - userData.kUser = kUser; + userData.userObject = obj; + userData.loginView = this; userData.listSketches = ""; userData.resolveConflict = 1; - _isLoggedIn = true; navigator.pushView(KSketch_HomeView, userData); } @@ -236,6 +231,15 @@ skipConnection(LOGIN_LOSTCONN); } + public function set isLoggedOut(value:Boolean):void + { + _isLoggedOut = value; + } + + public function get isLoggedOut():Boolean + { + return _isLoggedOut; + } ]]> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml index 789ebbfc..f4bb73a8 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml @@ -63,7 +63,7 @@ private function cancel():void { - _saveOptions.mobileControl.reset(); + //CAM: _saveOptions.mobileControl.reset(); _saveOptions.overwriteSave = false; close(); } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml index 5b4319af..651a30e7 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml @@ -319,9 +319,7 @@ stream.writeUTFBytes(str); stream.close(); - //save to cache - _canvasView.mobileControl.addSketchToList(objDoc, KFileControl.ADD_SAVE_CACHE); - _canvasView.mobileControl.writeToCache(_canvasView.mobileControl.informationArr); + //CAM:save to cache _exit(); } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml index 37509398..fb787bb6 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml @@ -25,6 +25,7 @@ import com.adobe.serialization.json.JSON; import mx.events.FlexEvent; + import mx.formatters.DateFormatter; import mx.managers.PopUpManager; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; @@ -37,7 +38,7 @@ import sg.edu.smu.ksketch2.canvas.components.view.KSketch_CanvasView; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_HomeView; import sg.edu.smu.ksketch2.canvas.controls.KFileControl; - import sg.edu.smu.ksketch2.canvas.controls.KMobileControl; + import sg.edu.smu.ksketch2.canvas.controls.KSketch_CacheControl; import sg.edu.smu.ksketch2.utils.KWebData; public static var saveCounter:int = 0; @@ -55,7 +56,7 @@ public var result:Object; public var userData:Object = new Object(); - public var mobileControl:KMobileControl; + private var _cacheControl:KSketch_CacheControl; public var returnToHome:Boolean = false; public var overwriteSave:Boolean = false; @@ -85,11 +86,11 @@ var confirmSave:Boolean = false; userData = _canvasView.saveSketch(confirmSave); - mobileControl = _canvasView.mobileControl; + _cacheControl = _canvasView.cacheControl; if(saveCounter == 0) { - saveCounter = KSketch_HomeView.autoSaveCounter; + //CAM: saveCounter = KSketch_HomeView.autoSaveCounter; saveCounter ++; } @@ -112,7 +113,7 @@ if(_success) { - mobileControl.writeToCache(mobileControl.informationArr); + //CAM: mobileControl.writeToCache(mobileControl.informationArr); if(!returnToHome) { canvasDirty = true; @@ -141,13 +142,13 @@ { if(!canvasDirty) { - if(userData.kSketchDocument.originalName == "N/A") + if(userData.sketchData.originalName == "") { - sketchName.text = userData.kSketchDocument.name; - userData.kSketchDocument.originalName = userData.kSketchDocument.name; + sketchName.text = userData.sketchData.fileName; + userData.sketchData.originalName = userData.sketchData.fileName; } else - sketchName.text = userData.kSketchDocument.name; + sketchName.text = userData.sketchData.originalName; saveAsWarning.visible = true; } @@ -200,6 +201,7 @@ var finalFileName:String = sketchName.text; objDoc = KWebData.prepareSketchDocument(userData, finalFileName); + objDoc.save = -1; objDoc.deleteFlag = 0; @@ -212,11 +214,11 @@ } //save to cache - mobileControl.addSketchToList(objDoc, KFileControl.ADD_SAVE_CACHE); + //CAM: mobileControl.addSketchToList(objDoc, KFileControl.ADD_SAVE_CACHE); if(_canvasView._isNewSketch) { - if(KSketch_LoginView._isLoggedIn) //logged in + if(true)//CAM: KSketch_LoginView._isLoggedIn) //logged in { if(_isConnected) //connected saveToWeb(); //save to web @@ -228,7 +230,7 @@ } else //existing sketch { - if(KSketch_LoginView._isLoggedIn) //logged in + if(true) //CAM: KSketch_LoginView._isLoggedIn) //logged in { if(_isConnected) //connected saveToWeb(); //save to web @@ -257,6 +259,57 @@ httpService.addEventListener(FaultEvent.FAULT, faultHandler); } + private function formatObjectForSave():Object + { + var data:Object = new Object(); + data.group_permissions = []; + data.thumbnailData = userData.thumbnailData; + data.p_edit = true; + data.changeDescription = ""; + data.date = generateTimestamp(null); + + data.fileName = sketchName; + //data.lowerFileName = sketchName.toLowerCase(); + + if(userData.sketchData.originalName != "" && (sketchName == userData.sketchData.originalName)) + { + data.sketchId = userData.sketchData.sketchId; + data.originalVersion = userData.sketchData.originalVersion; + data.originalSketch = userData.sketchData.originalSketch; + data.originalName = userData.sketchData.originalName; + } + else + { + data.sketchId = ""; + data.originalVersion = 1; + data.originalSketch = -1; + data.originalName = sketchName; + } + + data.appver = 1.0; + data.version = userData.kSketchDocument.version; + data.p_view = 1; + data.fileData = userData.kSketchDocument.xml.toXMLString(); + data.p_comment = true; + data.owner = userData.kUser.u_realname; + data.owner_id = userData.kUser.id; + return data; + } + + private function generateTimestamp(timestamp:Date):String + { + if (timestamp == null) + { + timestamp = new Date(); + var offsetMilliseconds:Number = timestamp.getTimezoneOffset() * 60 * 1000; + timestamp.setTime(timestamp.getTime() + offsetMilliseconds); + } + + var dateFormatter:DateFormatter = new DateFormatter(); + dateFormatter.formatString = "DD MMM YYYY, HH:NN:SS"; + return dateFormatter.format(timestamp); + } + private function resultHandler(event:ResultEvent):void { var resultRaw:Object = event.result; @@ -266,7 +319,7 @@ { //save to cache objDoc.save = 0; - mobileControl.addSketchToList(objDoc, KFileControl.ADD_SAVE_CACHE); + //CAM: mobileControl.addSketchToList(objDoc, KFileControl.ADD_SAVE_CACHE); overwriteSave = false; _success = true; @@ -292,7 +345,7 @@ { objDoc.save = -1 //flag save to web for existing sketch - mobileControl.addSketchToList(objDoc, KFileControl.ADD_SAVE_CACHE); //overwrite cached object + //CAM: mobileControl.addSketchToList(objDoc, KFileControl.ADD_SAVE_CACHE); //overwrite cached object navigateBack(); } @@ -341,11 +394,13 @@ saveCounter ++; } + //CAM: + /* if(saveCounter <= KSketch_HomeView.autoSaveCounter) { saveCounter = KSketch_HomeView.autoSaveCounter; saveCounter ++; - } + }*/ } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml index bb273e09..dbfb7b73 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml @@ -76,7 +76,7 @@ override public function close(commit:Boolean=false, data:*=null):void { - _homeView._mobileControl.writeToCache(_homeView._mobileControl.informationArr); + //CAM: _homeView._mobileControl.writeToCache(_homeView._mobileControl.informationArr); resetSyncArrays(); @@ -85,8 +85,8 @@ if(_homeView && _success) _homeView.refresh(); - else if(_homeView) - _homeView.displaySketchData(); + //CAM: else if(_homeView) + //CAM: _homeView.displaySketchData(); } @@ -123,7 +123,7 @@ syncSketchArr.getItemAt(i).owner = currentUser.u_realname; syncSketchArr.getItemAt(i).owner_id = currentUser.id; - if(_isConnected && KSketch_LoginView._isLoggedIn) + if(true) //CAM: _isConnected && KSketch_LoginView._isLoggedIn) { currentObj = syncSketchArr.getItemAt(i); currentObj.save = 0; @@ -242,8 +242,8 @@ if(_counterSave == syncSketchArr.length) writeAllToCache(); } - else - _homeView.deleteSketchDocument(obj, KFileControl.DELETE_CACHE); + //CAM: else + //CAM: _homeView.deleteSketchDocument(obj, KFileControl.DELETE_CACHE); }; } @@ -294,7 +294,7 @@ for(i=0; i 0) - _KSketch.generateSceneFromXML(new XML(_currentDocument.xml.scene)); + if(_currentDocument.fileData.scene.children().length() > 0) + _KSketch.generateSceneFromXML(new XML(_currentDocument.fileData.scene)); } } @@ -357,8 +358,6 @@ public function saveSketch(confirmSave:Boolean):Object { - userData.resolveConflict = 1; - //if save is confirmed, set all interaction selection to null //to generate an "unselected" thumbnail if(confirmSave) @@ -368,26 +367,26 @@ } //get existing KSketchDocument object - var kSketchDocumentObj:KSketchDocument = (createReturnObject() as KSketchDocument); + var sketchData:KSketch_DataListItem = (createReturnObject() as KSketch_DataListItem); - if(kSketchDocumentObj != null) + if(sketchData != null) { - userData.name = kSketchDocumentObj.name.toString(); - userData.lowerFileName = kSketchDocumentObj.name.toString().toLowerCase(); + userData.name = sketchData.fileName; + userData.lowerFileName = sketchData.fileName.toString().toLowerCase(); - var fileData:String = kSketchDocumentObj.xml.toXMLString(); + var fileData:String = sketchData.fileData.toXMLString(); - userData.kSketchDocument = kSketchDocumentObj; + userData.sketchData = sketchData; - var thumbnailLength:int = userData.kSketchDocument.xml.child("thumbnail").length(); + var thumbnailLength:int = sketchData.fileData.child("thumbnail").length(); if(thumbnailLength > 0) { var recentThumbnail:int = thumbnailLength - 1; - userData.thumbnailData = userData.kSketchDocument.xml.child("thumbnail")[recentThumbnail].@data.toString(); + //userData.thumbnailData = sketchData.fileData.child("thumbnail")[recentThumbnail].@data.toString(); }else { - userData.thumbnailData = userData.kSketchDocument.xml.child("thumbnail").@data.toString(); + userData.thumbnailData = sketchData.fileData.child("thumbnail").@data.toString(); } return userData; @@ -402,9 +401,10 @@ _saveOptions.canvasDirty = false; KSketch_SaveOptions.saveCounter = 0; - KSketch_HomeView.canvasTimerDisabled = true; + //CAM: + /*KSketch_HomeView.canvasTimerDisabled = true; if(KSketch_HomeView.hasBeenNotified) - KSketch_HomeView.hasBeenNotified = true; + KSketch_HomeView.hasBeenNotified = true;*/ navigator.pushView(KSketch_HomeView, userData); @@ -429,7 +429,7 @@ if(_currentDocument != null) { - delete(_currentDocument.xml.scene); + delete(_currentDocument.fileData.scene); } sceneXML = _KSketch.sceneXML; @@ -463,11 +463,11 @@ if(_currentDocument == null) { //(name:String, xml:XML, id:String, date:Date, originalName:String, version:int, sketchId:int, description:String = "") - _currentDocument = new KSketchDocument("",saveXML,"",new Date(),"", 0,-1,""); + _currentDocument = new KSketch_DataListItem(saveXML.toXMLString(), "", "", "", "", "", -1, 0); } else { - _currentDocument.xml = saveXML; + _currentDocument.fileData = saveXML; } return _currentDocument; @@ -520,6 +520,11 @@ return null; } + public function get cacheControl():KSketch_CacheControl + { + return _cacheControl; + } + ]]> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index 6b19f0ec..29be5c24 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -15,891 +15,512 @@ xmlns:view="sg.edu.smu.ksketch2.canvas.components.view.*" xmlns:buttons="sg.edu.smu.ksketch2.canvas.components.buttons.*" xmlns:popup="sg.edu.smu.ksketch2.canvas.components.popup.*" - initialize="init(KSketch_Config.isMobile)" - addedToStage="startMonitorConnection()" + initialize="init(true)" destructionPolicy="auto" > - - -1)) { - if (KSketch_SplashView.initialOrientation == StageOrientation.DEFAULT || - KSketch_SplashView.initialOrientation == StageOrientation.UPSIDE_DOWN) - stage.setOrientation(StageOrientation.ROTATED_RIGHT); + import mx.collections.ArrayCollection; + import mx.events.FlexEvent; + import mx.managers.PopUpManager; + import mx.utils.ObjectProxy; + + import spark.events.IndexChangeEvent; + + import data.KSketch_DataListItem; + + import org.as3commons.collections.SortedList; + + import sg.edu.smu.ksketch2.KSketchAssets; + import sg.edu.smu.ksketch2.KSketchStyleSheet; + import sg.edu.smu.ksketch2.canvas.KSketch_CanvasView_Preferences; + import sg.edu.smu.ksketch2.canvas.KSketch_LoginView; + import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_CanvasNotice; + import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_LogoutNotice; + import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_SyncOptions; + import sg.edu.smu.ksketch2.canvas.controls.KSketch_CacheControl; + import sg.edu.smu.ksketch2.utils.KSwipeEvent; + + private static const DISPLAY_FAILED_DEFAULT:int = -1; + private static const DISPLAY_FAILED_LOGIN:int = 0; + private static const DISPLAY_FAILED_SYNC:int = 1; + + [Bindable] private var sortedArr:SortedList = new SortedList(); + [Bindable] private var arrDG:ArrayCollection = new ArrayCollection(); + + //variables for canvas timer + private var _canvasTimer:Object; + private var _canvasTimerDisabled:Boolean; + + private var _loginView:KSketch_LoginView; + private var _cacheControl:KSketch_CacheControl; + private var _syncOptions:KSketch_SyncOptions; + private var _logoffNotice:KSketch_LogoutNotice; + private var _canvasNotice:KSketch_CanvasNotice; + + //variables for login + public var userData:Object = new Object(); + private var _displayFailedMessage:int; + private var _hasBeenNotified:Boolean = false; + private var _failedLogin:Boolean = false; + private var _isConnected:Boolean = false; + + //variables for progress bar + private var _progressTimer:Timer; + + //variables for selecting sketch + private var _createNewSketch:Boolean = false; + private var _isXML:Boolean = false; + private var _oldEvent:Event; + private var _isSwipe:Boolean; + private var _logSketchFlag:Boolean = false; + private var _saveSketchFlag:Boolean = false; + private var _deleteSketchFlag:Boolean = false; + + private function init(isMobile:Boolean):void + { + //Check for mobile version. Set false to export for Desktop version + if(isMobile) + { + mainButtons.removeElementAt(2); + KSketch_CanvasView_Preferences.mobileEnabled = KSketch_CanvasView_Preferences.MOBILE_ON; + } else - stage.setOrientation(KSketch_SplashView.initialOrientation); + { + KSketch_CanvasView_Preferences.mobileEnabled = KSketch_CanvasView_Preferences.MOBILE_OFF; + } + + //Quick fix for orientation on IOS devices + if(stage.deviceOrientation == StageOrientation.UNKNOWN && (Capabilities.version.indexOf('IOS') > -1)) + { + if(KSketch_SplashView.initialOrientation == StageOrientation.DEFAULT || + KSketch_SplashView.initialOrientation == StageOrientation.UPSIDE_DOWN) + { + stage.setOrientation(StageOrientation.ROTATED_RIGHT); + } + else + { + stage.setOrientation(KSketch_SplashView.initialOrientation); + } + } + + //Hide canvas based on timer + if(!_canvasTimerDisabled) + { + _canvasTimer = new Timer(2000); + _canvasTimer.addEventListener(TimerEvent.TIMER, timerComplete); + _canvasTimer.start(); + } + else + { + _canvasCover.visible = false; + } + + //retrieve cache control object + _cacheControl = new KSketch_CacheControl(this); + + //create pop-up content to potentially appear on Home view + _syncOptions = new KSketch_SyncOptions(); + _logoffNotice = new KSketch_LogoutNotice(); + _canvasNotice = new KSketch_CanvasNotice(); + _syncOptions.createDeferredContent(); + _logoffNotice.createDeferredContent(); + _canvasNotice.createDeferredContent(); + + //add/remove event listeners + this.removeEventListener(FlexEvent.INITIALIZE, init); + stage.addEventListener(KSwipeEvent.DELETE_ACTION, listSketches_deleteSketchHandler); + stage.addEventListener(KSwipeEvent.LOG_ACTION, listSketches_logSketchHandler); + stage.addEventListener(KSwipeEvent.SAVE_ACTION, listSketches_saveSketchHandler); + //listSketches.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe); + + _setupUser(); } - - - if (!canvasTimerDisabled) { - canvasTimer = new Timer(2000); - canvasTimer.addEventListener(TimerEvent.TIMER, timerComplete); - canvasTimer.start(); + + private function timerComplete(event:TimerEvent):void + { + _canvasTimer.removeEventListener(TimerEvent.TIMER, timerComplete); + _canvasTimer.stop(); + + _canvasCover.visible = false; + _canvasTimerDisabled = true; } - else - canvasCover.visible = false; - - _fileControl = new KFileControl(); - - _syncOptions = new KSketch_SyncOptions(); - _syncOptions.createDeferredContent(); - - _logoffNotice = new KSketch_LogoutNotice(); - _logoffNotice.createDeferredContent(); - - _canvasNotice = new KSketch_CanvasNotice(); - _canvasNotice.createDeferredContent(); - - GetUserSketch.addEventListener(FaultEvent.FAULT, retrieveFaultHandler); - GetUserSketch.addEventListener(ResultEvent.RESULT, retrieveResultHandler); - stage.addEventListener(KSwipeEvent.DELETE_ACTION, listSketches_deleteSketchHandler); - stage.addEventListener(KSwipeEvent.LOG_ACTION, listSketches_logSketchHandler); - stage.addEventListener(KSwipeEvent.SAVE_ACTION, listSketches_saveSketchHandler); - listSketches.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe); - } - - private function prepareHomeView():void { - _mobileControl = new KMobileControl(); - - //initialize login button and KUser object - if (!data || data == KSketch_LoginView.LOGIN_CANCEL - || data == KSketch_LoginView.LOGIN_LOSTCONN - || data == KSketch_LoginView.LOGIN_JANRAINFAIL) { - if (data) { + + private function _setupUser():void + { + //initialize login button based on the KUser object + var _anonymousUser:Boolean = false; + + if(data) + { var errorMessage:String = String(data); - - if ((errorMessage == KSketch_LoginView.LOGIN_LOSTCONN || errorMessage == KSketch_LoginView.LOGIN_JANRAINFAIL) && !_failedLogin) { - displayFailedMessage = DISPLAY_FAILED_LOGIN; - startDisplayFailedNotification(1000); - - hasBeenNotified = true; + + //prompt once for failed login + if((errorMessage == KSketch_LoginView.LOGIN_LOSTCONN || errorMessage == KSketch_LoginView.LOGIN_JANRAINFAIL) && !_failedLogin) + { + _displayFailedMessage = DISPLAY_FAILED_LOGIN; + _startDisplayFailedNotification(1000); + + _hasBeenNotified = true; _failedLogin = true; + _anonymousUser = true; } } - - var obj:Object = new Object(); - var kUser:KSketch_User; - userData.listSketches = ""; - userData.resolveConflict = 0; - - if (_mobileControl.user != null) { - obj = _mobileControl.user; - kUser = new KSketch_User(obj); - userData.kUser = kUser; - - KSketch_LoginView._isLoggedIn = true; - loginButton.label = "Logout, " + userData.kUser.u_realname; - refreshButton.label = "Refresh"; - } - else { - obj.status = "failed"; - obj.u_login = "n.a"; - kUser = new KSketch_User(obj); - userData.kUser = kUser; - - loginButton.label = "Login"; - refreshButton.visible = false; - } - } - else { - //cast data from previous view to ObjectProxy. This is to avoid getting IEventDispatcher error - var dataProxy:ObjectProxy = new ObjectProxy(data); - userData.listSketches = dataProxy.listSketches; - userData.resolveConflict = dataProxy.resolveConflict; - - if (dataProxy.kUser) - userData.kUser = dataProxy.kUser; - - if (userData.kUser.id != "n.a") { - _mobileControl.user = userData.kUser; - loginButton.label = "Logout, " + userData.kUser.u_realname; - refreshButton.label = "Refresh"; - - if (!_isConnected && !hasBeenNotified) { - displayFailedMessage = DISPLAY_FAILED_SYNC; - startDisplayFailedNotification(3500); - hasBeenNotified = true; + else + { + _failedLogin = true; + + if(_cacheControl.user == null) + { + _anonymousUser = true; } } - else { + + //create userdata object based on anonymous and login states + if(_anonymousUser) + { + _cacheControl.newUser(); + var object:Object = _cacheControl.user; + userData.userObject = object; + userData.listSketches = ""; + userData.resolveConflict = 0; + userData.loginView = null; + loginButton.label = "Login"; refreshButton.visible = false; } - - - _failedLogin = false; - } - - createButton.label = "Create a Sketch"; - loadButton.label = "Load Sketch from File"; //DESKTOP ENABLE - createButton.setStyle("fontSize", KSketchStyles.BUTTON_SIZE); - loadButton.setStyle("fontSize", KSketchStyles.BUTTON_SIZE); //DESKTOP ENABLE - loginButton.setStyle("fontSize", KSketchStyles.BUTTON_SIZE); - refreshButton.setStyle("fontSize", KSketchStyles.BUTTON_SIZE); - prepareDataList(); - } - - public function prepareDataList():void { - startProgressBar(); - - userData.homeView = this; - userData.mobileControl = _mobileControl; - userData.kSketchDocument = null; - - if (KSketch_LoginView._isLoggedIn) //logged in - { - if (_isConnected) { - _webControl = new KWebControl(userData.kUser, _mobileControl); - //create a buffer time for scene to prepare itself, implement timer - _viewTimer = new Timer(1000, 1); - _viewTimer.addEventListener(TimerEvent.TIMER_COMPLETE, loadConnected); - _viewTimer.start(); + else if(!_anonymousUser && _failedLogin) + { + userData.userObject = _cacheControl.user; + userData.listSketches = ""; + userData.resolveConflict = 0; + userData.loginView = null; + + loginButton.label = "Logout, "+ userData.userObject.u_realname; + refreshButton.label = "Refresh"; } - else - displaySketchData(); - } - else //anonymous - displaySketchData(); - } - - private function loadConnected(event:TimerEvent):void { - _viewTimer.stop(); - _viewTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, loadConnected); - - if (userData.resolveConflict == 1) { - resolveConflict(); - data.resolveConflict = 0; - } - else - updateFromWeb(); - } - - - public function updateFromWeb():void { - _isXML = false; //JSON retrieval is list of sketches, not XML of sketch - - //get json object of user's list of sketches from the URL - //returned result will be a stringified JSON object - var parameter:String; - if (data) { - parameter = "{\"sketchID\":[" + data.listSketches + "],\"userid\":" + userData.kUser.id + ", \"token\":\"" + userData.kUser.token + "\"}"; - } else { - data = userData; - parameter = "{\"sketchID\":[],\"userid\":" + userData.kUser.id + ", \"token\":\""+userData.kUser.token+"\"}"; - } - - GetUserSketch.url = KSketchWebLinks.jsonurlSketch + "/" + parameter; - GetUserSketch.send(); - } - - private function retrieveResultHandler(event:ResultEvent):void { - var rawData:String = String(event.result); - var resultObj:Object = com.adobe.serialization.json.JSON.decode(rawData, true); - - if (!_isXML && !_deleteSketchFlag) { - var syncSketchArr:ArrayCollection; - if (resultObj) { - if ((resultObj.hasOwnProperty("status")) && (resultObj.status == "session_expired")) { - _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_EXPIRED_SESSION; - _canvasNotice.open(this, true); - PopUpManager.centerPopUp(_canvasNotice); - } else { - - var tempArr:Array = (resultObj.entities as Array); - for each(var tempObj:Object in tempArr) { - tempObj = KWebData.convertWebObjForMobile(tempObj); - _mobileControl.informationArr[1] = _fileControl.solveDiscrepancy(_mobileControl.informationArr[1], tempObj); + else if(!_anonymousUser) + { + //cast data from previous view to ObjectProxy. This is to avoid getting IEventDispatcher error + var dataProxy:ObjectProxy = new ObjectProxy(data); + userData.userObject = dataProxy.userObject; + userData.listSketches = dataProxy.listSketches; + userData.resolveConflict = dataProxy.resolveConflict; + userData.loginView = dataProxy.loginView; + + _loginView = dataProxy.loginView; + + if(userData.userObject.id != "n.a") + { + _cacheControl.user = dataProxy.userObject; + loginButton.label = "Logout, "+ userData.userObject.u_realname; + refreshButton.label = "Refresh"; + + if(!_isConnected && !_hasBeenNotified) + { + _displayFailedMessage = DISPLAY_FAILED_SYNC; + _startDisplayFailedNotification(3500); + _hasBeenNotified = true; } - tempArr = null; - data.listSketches = ""; } + else + { + loginButton.label = "Login"; + refreshButton.visible = false; + } + + _failedLogin = false; } - - //reset webcontrol - _webControl.reset(); - displaySketchData(); - } - - if (_isXML && !_deleteSketchFlag) { - resultObj = KWebData.convertWebObjForMobile(resultObj); - displaySketchDocument(resultObj, true); + userData.homeView = this; + userData.cacheControl = _cacheControl; + userData.sketchData = null; + + //init the fonts for buttons + createButton.label = "Create a Sketch"; + loadButton.label = "Load Sketch from File"; //DESKTOP ENABLE + createButton.setStyle("fontSize", KSketchStyleSheet.HOME_BUTTON_SIZE); + loadButton.setStyle("fontSize", KSketchStyleSheet.HOME_BUTTON_SIZE); //DESKTOP ENABLE + loginButton.setStyle("fontSize", KSketchStyleSheet.HOME_BUTTON_SIZE); + refreshButton.setStyle("fontSize", KSketchStyleSheet.HOME_BUTTON_SIZE); + + _setupSketchListView(); } - - if (_deleteSketchFlag) { - _deleteSketchFlag = false; - startMonitorConnection(); + + private function _startDisplayFailedNotification(time:Number):void + { + _canvasTimer = new Timer(time,1); + _canvasTimer.addEventListener(TimerEvent.TIMER_COMPLETE, _displayFailedNotification); + _canvasTimer.start(); } - } - - private function retrieveFaultHandler(event:FaultEvent):void { - if (!_isXML && !_deleteSketchFlag) - displaySketchData(); - else if (_isXML && !_deleteSketchFlag) - displaySketchDocument(null, false); - else if (_deleteSketchFlag) - deleteSketchDocument(null, KFileControl.DELETE_WEB); - } - - private function resolveConflict():void { - var syncSketchArr:ArrayCollection = new ArrayCollection(); //array for list of sketches to sync - var deletedSketchArr:ArrayCollection = new ArrayCollection(); - - if (_mobileControl.informationArr[1]) { - var tempObj:Object = _fileControl.getSyncSketchObjects(_mobileControl.informationArr[1]); - syncSketchArr = tempObj.syncArr; - deletedSketchArr = tempObj.delArr; - tempObj = null; + + private function _displayFailedNotification(event:TimerEvent):void + { + if(_displayFailedMessage == DISPLAY_FAILED_LOGIN) + { + _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_FAILED_LOGIN; + } + else if(_displayFailedMessage == DISPLAY_FAILED_SYNC) + { + _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_FAILED_SYNC; + } + + + if(_displayFailedMessage != DISPLAY_FAILED_DEFAULT) + { + _canvasNotice.open(this, true); + PopUpManager.centerPopUp(_canvasNotice); + + _displayFailedMessage = DISPLAY_FAILED_DEFAULT; + } + + _canvasTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, _displayFailedNotification); } - - //if there are sketches to sync, then prompt dialog - //else just display data - if (syncSketchArr.length > 0) { - _syncOptions.deleteFlag = false; - _syncOptions.resetSyncArrays(); - - _syncOptions.currentUser = userData.kUser; - _syncOptions.syncSketchArr = syncSketchArr; - _syncOptions.open(this, true); - PopUpManager.centerPopUp(_syncOptions); + + private function _setupSketchLoad(sketchName:String, sketchId:String, sketchVersion:String):void + { + _startProgressBar(); + _cacheControl.retrieveSketchData(sketchName, sketchId, sketchVersion); } - - if (deletedSketchArr.length > 0) { - - updateFromWeb(); - _syncOptions.deleteFlag = true; - _syncOptions.deleteSketch(deletedSketchArr, this); + + private function _setupSketchLog():void + { + } - - if (syncSketchArr.length == 0 && deletedSketchArr.length == 0) - updateFromWeb(); - } - - public function displaySketchData():void { - arrDG.removeAll(); //reset arrDG - var sketchArr:ArrayCollection = new ArrayCollection(); //array for list of sketches from web or mobile - - if (_mobileControl && _mobileControl.sketchList) - sketchArr.addAll(_mobileControl.sketchList); //display everything from mobile control - - if (sketchArr.length > 0) { - var userSketch:KSketch_UserSketches = new KSketch_UserSketches(); - userSketch.createArray(sketchArr, userData.kUser.id); - - autoSaveCounter = userSketch.autoSaveCounter; - userSketch.autoSaveCounter = 0; - - //Set DataGrid array to user sketches collection - if (!arrDG) - arrDG = userSketch.getUserSketchArray(); - else - arrDG.addAll(userSketch.getUserSketchArray()); - - listSketches_unavailable.visible = false; + + private function _setupSketchSave():void + { + } - else { - autoSaveCounter = 0; - startNewSketch(); + + private function _setupSketchDelete():void + { + } - - stopProgressBar(); - _mobileControl.writeToCache(_mobileControl.informationArr); - } - - private function startDisplayFailedNotification(time:Number):void { - canvasTimer = new Timer(time, 1); - canvasTimer.addEventListener(TimerEvent.TIMER_COMPLETE, displayFailedNotification); - canvasTimer.start(); - } - - private function displayFailedNotification(event:TimerEvent):void { - if (displayFailedMessage == DISPLAY_FAILED_LOGIN) - _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_FAILED_LOGIN; - else if (displayFailedMessage == DISPLAY_FAILED_SYNC) - _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_FAILED_SYNC; - - if (displayFailedMessage != DISPLAY_FAILED_DEFAULT) { - _canvasNotice.open(this, true); - PopUpManager.centerPopUp(_canvasNotice); - - displayFailedMessage = DISPLAY_FAILED_DEFAULT; + + private function _setupSketchListView():void + { + _startProgressBar(); + + listSketches_unavailable.visible = true; + + sortedArr.clear(); + + _cacheControl.retrieveWebSketchList(); } - - canvasTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, displayFailedNotification); - } - - var finalObj:Object; - - private function displaySketchDocument(obj:Object, checkConflict:Boolean):void { - finalObj = obj; - - var sketchDocArr:ArrayCollection; - sketchDocArr = _mobileControl.sketchList; - - var i:int; - var tempObj:Object; - - if (sketchDocArr) { - for (i = 0; i < sketchDocArr.length; i++) { - tempObj = sketchDocArr.getItemAt(i); - - if ((tempObj.fileName == _selectedSketchName) && (tempObj.sketchId == _selectedSketchId)) { - if (!obj || (obj && tempObj.save == -1)) { - finalObj = tempObj; - break; + + public function displaySketchList(sortedArr:SortedList):void + { + if(sortedArr) + { + if(sortedArr.size > 0) + { + for(var i:int=0; i= 1) + progressBar.value = 0; } - } - - private function fileSelected(event:Event):void { - var stream:FileStream = new FileStream(); - stream.open(event.target as File, FileMode.READ); - var fileData:String = stream.readUTFBytes(stream.bytesAvailable); - - //create XML and date object from JSON to create a KSketchDocument object - try { - var fileObj:Object = com.adobe.serialization.json.JSON.decode(fileData); - - if (fileObj.hasOwnProperty("fileName") && fileObj.hasOwnProperty("fileData") && - fileObj.hasOwnProperty("originalName") && fileObj.hasOwnProperty("version") && - fileObj.hasOwnProperty("sketchId") && fileObj.hasOwnProperty("changeDescription")) { - //enable this condition once Janrain login is fixed - //if(fileObj.owner_id == userData.kUser.id || (userData.kUser.id == "n.a" && fileObj.owner_id == "n.a")) - //{ - fileObj.lowerFileName = fileObj.fileName.toString().toLowerCase(); - var xml:XML = new XML(fileObj.fileData); - var date:Date = new Date(fileObj.modified); - var docObj:KSketchDocument = new KSketchDocument(fileObj.fileName, xml, fileObj.id, date, fileObj.originalName, fileObj.version, fileObj.sketchId, fileObj.changeDescription); - userData.kSketchDocument = docObj; - - _mobileControl.addSketchToList(fileObj, KFileControl.ADD_SAVE_CACHE); - navigateToScreen("CANVAS"); - //} - } + + private function createSketch():void + { + userData.kSketchDocument = null; + _createNewSketch = true; + navigateToScreen('CANVAS'); } - catch (error:Error) { - trace("Unknown file"); + + private function loadSketch():void + { + } - } - - public function navigateToScreen(screenName:String):void { - _mobileControl.writeToCache(_mobileControl.informationArr); - if (screenName.indexOf("RELOGIN") != -1) { - navigator.pushView(KSketch_LoginView); - } else if (screenName.indexOf("CANVAS") == -1) //if screen name is Login + + public function refresh():void { - KSketch_LoginView.userData = new Object(); - - //if this is a logout button, then reset view & delete cache - if (loginButton.label.indexOf("Login") == -1) { - if (!_fileControl.unsavedSketchExist(_mobileControl.informationArr[1])) - logout(); - else { - _logoffNotice.open(this, true); - PopUpManager.centerPopUp(_logoffNotice); - } - } - else - navigator.pushView(KSketch_LoginView); + } - else //if screen name is Canvas + + public function logout():void { - Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; - - if (_logSketchFlag) { - _logSketchFlag = false; - KSketch_HomeView_IconItemRenderer.openActionBar = false; - navigator.pushView(KSketch_LogView, userData); - resetDatagridSelectItem(); + if(_loginView) + { + _loginView.isLoggedOut = true; } + + //KSketch_SaveOptions.saveCounter = 0; + data = null; + arrDG.removeAll(); + loginButton.label = "Login"; + + _cacheControl.reset(); + _setupUser(); + } + + public function navigateToScreen(screenName:String):void + { + if(screenName.indexOf("CANVAS") == -1) //if screen name is Login + { + KSketch_LoginView.userData = new Object(); + + //if this is a logout button, then reset view & delete cache + if(loginButton.label.indexOf("Login") == -1) + { + logout(); + /*if(!_fileControl.unsavedSketchExist(_mobileControl.informationArr[1])) + { + logout(); + } + else + { + _logoffNotice.open(this,true); + PopUpManager.centerPopUp(_logoffNotice); + }*/ + } + else + { + navigator.pushView(KSketch_LoginView); + } + } else + { + Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; navigator.pushView(KSketch_CanvasView, userData); - - } - - resetDatagridSelectItem(); - } - - public function logout():void { - KSketch_LoginView._isLoggedIn = false; - KSketch_SaveOptions.saveCounter = 0; - data = null; - _mobileControl.reset(); - _mobileControl.writeToCache(_mobileControl.informationArr); - _mobileControl = null; - _webControl = null; - - startMonitorConnection(); - } - - public function refresh():void { - data.listSketches = ""; - startMonitorConnection(); - } - - public function startMonitorConnection():void { - this.removeEventListener(Event.ADDED_TO_STAGE, startMonitorConnection); - - //check for network connection - _monitor = new URLMonitor(new URLRequest(KSketchWebLinks.url)); - _monitor.addEventListener(StatusEvent.STATUS, monitorConnection); - _monitor.start(); - - _monitorTimer = new Timer(2000); - _monitorTimer.addEventListener(TimerEvent.TIMER_COMPLETE, endMonitor); - _monitorTimer.start(); - } - - private function endMonitor(event:TimerEvent):void { - _isConnected = false; - - _monitor.stop(); - _monitorTimer.stop(); - - _monitor.removeEventListener(StatusEvent.STATUS, monitorConnection); - _monitorTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, endMonitor); - - if (_isXML) - prepareCanvasView(); - else - prepareHomeView(); - } - - private function monitorConnection(event:StatusEvent):void { - if (_monitor.available) { - _isConnected = true; - hasBeenNotified = false; - } - else - _isConnected = false; - - _monitor.stop(); - _monitorTimer.stop(); - - _monitor.removeEventListener(StatusEvent.STATUS, monitorConnection); - _monitorTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, endMonitor); - - if (_isXML) - prepareCanvasView(); - else if (_deleteSketchFlag) - prepareDeleteSketch(); - else - prepareHomeView(); - } - - private function startProgressBar():void { - progressBar.visible = true; - - progressTimer = new Timer(1); - progressTimer.addEventListener(TimerEvent.TIMER, progressBarHandler); - progressTimer.start(); - } - - private function stopProgressBar():void { - //stop progress bar - progressTimer.stop(); - progressTimer.removeEventListener(TimerEvent.TIMER, progressBarHandler); - progressBar.visible = false; - } - - private function progressBarHandler(event:TimerEvent):void { - progressBar.value += .008; - - if (progressBar.value >= 1) - progressBar.value = 0; - } - - private function prepareCanvasView():void { - if (_isConnected) { - var finalSketchVersion:String = _selectedSketchVersion; - - //retrieve the latest version from the web - if (KSketch_LoginView._isLoggedIn && _isConnected) - finalSketchVersion = -1 + ""; - - //get json object of sketch from the URL and according to sketchid and version number - GetUserSketch.url = KSketchWebLinks.jsonurlSketchXML + "/" + _selectedSketchId + "/" + finalSketchVersion + "/" + userData.kUser.id; //selectedSketchVersion; - GetUserSketch.send(); - startProgressBar(); - } - else { - displaySketchDocument(null, false); - } - - } - - private function prepareDeleteSketch():void { - if (data) - data.resolveConflict = 1; - - if (_isConnected && KSketch_LoginView._isLoggedIn) { - if (_selectedSketchId && (parseInt(_selectedSketchId) > -1)) { - var objToSend:Object = new Object(); - objToSend["sketchid"] = parseInt(_selectedSketchId); - objToSend["userid"] = userData.kUser.id; - objToSend["token"] = userData.kUser.token; - - //get json object of sketch from the URL and according to sketchid and version number - GetUserSketch.url = KSketchWebLinks.jsonurlDeleteSketch; - GetUserSketch.send(objToSend); - - startProgressBar(); } - - deleteSketchDocument(null, KFileControl.DELETE_CACHE); + } + + protected function listSketches_deleteSketchHandler(event:KSwipeEvent):void + { + _deleteSketchFlag = true; } - else if (KSketch_LoginView._isLoggedIn) - deleteSketchDocument(null, KFileControl.DELETE_WEB); - else - deleteSketchDocument(null, KFileControl.DELETE_CACHE); - - stage.dispatchEvent(new KSwipeEvent(KSwipeEvent.SAVE_CLOSE_ACTION)); - } - - public function deleteSketchDocument(obj:Object, type:String):void { - //close action bar - if (_oldEvent) { - if (_oldEvent.target is KSketch_HomeView_IconItemRenderer) - if ((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar) - if ((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar.stage) { - KSketch_HomeView_IconItemRenderer.openActionBar = false; - (_oldEvent.target as KSketch_HomeView_IconItemRenderer).removeElement((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar); - } - - _oldEvent = null; + + protected function listSketches_logSketchHandler(event:KSwipeEvent):void + { + _logSketchFlag = true; } - - var i:int; - if (!obj) { - var sketchDocArr:ArrayCollection = _mobileControl.sketchList; - for (i = 0; i < sketchDocArr.length; i++) { - var tempObj:Object = sketchDocArr.getItemAt(i); - - if ((tempObj.fileName == _selectedSketchName) && (tempObj.sketchId == _selectedSketchId)) { - if (_selectedSketchId == "") - type = KFileControl.DELETE_CACHE; - - obj = tempObj; - break; - } - } + + protected function listSketches_saveSketchHandler(event:KSwipeEvent):void + { + _saveSketchFlag = true; + listSketches_changeSelectedHandler(event); } - - _mobileControl.deleteSketchFromList(obj, type); - - _deleteSketchFlag = false; - stopProgressBar(); - displaySketchData(); - } - - private function saveData(event:Event):void { - var newFile:File = event.target as File; - var finalFileName:String = newFile.name; - - //create XML and date object from JSON to create a KSketchDocument object - var xml:XML = new XML(finalObj.fileData); - var date:Date = new Date(finalObj.modified); - finalObj.version = 0; - finalObj.sketchId = ""; - userData.kSketchDocument = new KSketchDocument(finalObj.fileName, xml, finalObj.id, date, finalObj.originalName, finalObj.version, finalObj.sketchId, finalObj.changeDescription); - userData.thumbnailData = finalObj.thumbnailData; - finalObj = KWebData.prepareSketchDocument(userData, finalFileName); - - //save to file - var str:String = com.adobe.serialization.json.JSON.encode(finalObj); - var stream:FileStream = new FileStream(); - stream.open(newFile, FileMode.WRITE); - stream.writeUTFBytes(str); - stream.close(); - - stage.dispatchEvent(new KSwipeEvent(KSwipeEvent.SAVE_CLOSE_ACTION)); - } - - protected function listSketches_mouseDownHandler(event:MouseEvent):void { - //TODO Auto-generated method stub - if (!_oldEvent) - _oldEvent = event; - else { - var currentSelectedSketchName:String; - if (event.target) { - if (event.target as KSketch_HomeView_IconItemRenderer) { - if ((_oldEvent.target is KSketch_HomeView_IconItemRenderer) - && (event.target is KSketch_HomeView_IconItemRenderer) + + protected function listSketches_mouseDownHandler(event:MouseEvent):void + { + if(!_oldEvent) + _oldEvent = event; + else + { + var currentSelectedSketchName:String; + if(event.target) + { + if(event.target as KSketch_HomeView_IconItemRenderer) + { + if((_oldEvent.target is KSketch_HomeView_IconItemRenderer) + && (event.target is KSketch_HomeView_IconItemRenderer) && ((_oldEvent.target as KSketch_HomeView_IconItemRenderer) != (event.target as KSketch_HomeView_IconItemRenderer) - )) { - currentSelectedSketchName = (event.target as KSketch_HomeView_IconItemRenderer).sketchName.text; - - if ((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar) - if ((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar.stage) { - KSketch_HomeView_IconItemRenderer.openActionBar = false; - (_oldEvent.target as KSketch_HomeView_IconItemRenderer).removeElement((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar); - } - - _oldEvent = event; + )) + { + currentSelectedSketchName = (event.target as KSketch_HomeView_IconItemRenderer).sketchName.text; + + if((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar) + if((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar.stage) + { + KSketch_HomeView_IconItemRenderer.openActionBar = false; + (_oldEvent.target as KSketch_HomeView_IconItemRenderer).removeElement((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar); + } + + _oldEvent = event; + } } - } + } } } - } - - protected function onSwipe(event:TransformGestureEvent):void { - _isSwipe = true; - _swipeTimer = new Timer(2000, 1); - _swipeTimer.start(); - _swipeTimer.addEventListener(TimerEvent.TIMER_COMPLETE, resetSwipe); - } - - protected function resetSwipe(event:TimerEvent):void { - _isSwipe = false; - _swipeTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, resetSwipe); - } - - protected function listSketches_changeSelectedHandler(event:Event):void { - _selectedSketchName = KSketch_HomeView_IconItemRenderer.selectedSketchName; - _selectedSketchId = KSketch_HomeView_IconItemRenderer.selectedSketchId; - _selectedSketchVersion = KSketch_HomeView_IconItemRenderer.selectedVersion; - - if (_isSwipe) { - listSketches.selectedIndex = -1; - stage.dispatchEvent(new KSwipeEvent(KSwipeEvent.TAP_ACTION)); + + protected function listSketches_changeSelectedHandler(event:Event):void + { + var sketchName:String = KSketch_HomeView_IconItemRenderer.selectedSketchName; + var sketchId:String = KSketch_HomeView_IconItemRenderer.selectedSketchId; + var sketchVersion:String = KSketch_HomeView_IconItemRenderer.selectedVersion; + + if(_isSwipe) + { + listSketches.selectedIndex = -1; + stage.dispatchEvent(new KSwipeEvent(KSwipeEvent.TAP_ACTION)); + } + + //if action bar is displayed, reset selection to -1 + if(KSketch_HomeView_IconItemRenderer.openActionBar) + listSketches.selectedIndex = -1; + + //if action bar is not displayed and there is no additional flag + if(!KSketch_HomeView_IconItemRenderer.openActionBar && !_deleteSketchFlag && !_isSwipe && !_logSketchFlag && !_saveSketchFlag) + _setupSketchLoad(sketchName, sketchId, sketchVersion); //_isXML = true; + + //if action bar is displayed and there is a log sketch flag + if(KSketch_HomeView_IconItemRenderer.openActionBar && _logSketchFlag) + _setupSketchLog(); //_isXML = true; + + //if action bar is displayed and there is a save sketch flag + if(KSketch_HomeView_IconItemRenderer.openActionBar && _saveSketchFlag) + _setupSketchSave(); //_isXML = true; + + //if action bar is displayed and there is a delete sketch flag + if(KSketch_HomeView_IconItemRenderer.openActionBar && _deleteSketchFlag) + _setupSketchDelete(); //_isXML = true; + + _isSwipe = false; + } + + public function set createNewSketch(value:Boolean) + { + _createNewSketch = value; + } + + public function get createNewSketch():Boolean + { + return _createNewSketch; } - - //if action bar is displayed, reset selection to -1 - if (KSketch_HomeView_IconItemRenderer.openActionBar) - listSketches.selectedIndex = -1; - - //if action bar is not displayed and there is no additional flag - if (!KSketch_HomeView_IconItemRenderer.openActionBar && !_deleteSketchFlag && !_isSwipe && !_logSketchFlag && !_saveSketchFlag) - _isXML = true; - - //if action bar is displayed and there is a log sketch flag - if (KSketch_HomeView_IconItemRenderer.openActionBar && _logSketchFlag) - _isXML = true; - - //if action bar is displayed and there is a save sketch flag - if (KSketch_HomeView_IconItemRenderer.openActionBar && _saveSketchFlag) - _isXML = true; - - if (_isXML || _deleteSketchFlag || _logSketchFlag || _saveSketchFlag) - startMonitorConnection(); - - _isSwipe = false; - } - - protected function listSketches_deleteSketchHandler(event:KSwipeEvent):void { - _deleteSketchFlag = true; - } - - protected function listSketches_logSketchHandler(event:KSwipeEvent):void { - _logSketchFlag = true; - } - - protected function listSketches_saveSketchHandler(event:KSwipeEvent):void { - _saveSketchFlag = true; - listSketches_changeSelectedHandler(event); - } - - private function resetDatagridSelectItem():void { - GetUserSketch.removeEventListener(FaultEvent.FAULT, retrieveFaultHandler); - GetUserSketch.removeEventListener(ResultEvent.RESULT, retrieveResultHandler); - stage.removeEventListener(KSwipeEvent.DELETE_ACTION, listSketches_deleteSketchHandler); - stage.removeEventListener(KSwipeEvent.LOG_ACTION, listSketches_logSketchHandler); - stage.removeEventListener(KSwipeEvent.SAVE_ACTION, listSketches_saveSketchHandler); - listSketches.removeEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe); - - arrDG.removeAll(); - _selectedSketchName = null; - _selectedSketchId = null; - _selectedSketchVersion = null; - KSketch_HomeView_IconItemRenderer.selectedSketchName = null; - KSketch_HomeView_IconItemRenderer.selectedSketchId = null; - KSketch_HomeView_IconItemRenderer.selectedVersion = null; - } ]]> @@ -922,31 +543,31 @@ - + + width="{KSketchStyleSheet.LOGO_BUTTON_WIDTH}" + height="{KSketchStyleSheet.LOGO_BUTTON_HEIGHT}"/> - + - + - - + + - + @@ -1000,7 +621,7 @@ - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml index 35ab0412..55922f36 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml @@ -49,14 +49,14 @@ override public function set data(value:Object):void { - if(value.image) + if(value.thumbnailData) { super.data = value; //set name and date properties - sketchName.text = value.name; + sketchName.text = value.fileName; sketchName.setStyle("fontSize",KSketchStyles.LIST_SKETCH_FONT); - sketchDate.text = value.date; + sketchDate.text = value.created; sketchId.text = value.sketchId; sketchVersion.text = value.version; @@ -68,7 +68,7 @@ //decode for Image var decoder:Base64Decoder = new Base64Decoder(); - decoder.decode(value.image); + decoder.decode(value.thumbnailData); var bytes:ByteArray = decoder.toByteArray(); _loader = new Loader(); diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as index 2557091e..30db83ce 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as @@ -1,3 +1,11 @@ +/** + * Copyright 2010-2012 Singapore Management University + * Developed under a grant from the Singapore-MIT GAMBIT Game Lab + * This Source Code Form is subject to the terms of the + * Mozilla Public License, v. 2.0. If a copy of the MPL was + * not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + */ package sg.edu.smu.ksketch2.canvas.controls { import com.adobe.serialization.json.JSON; @@ -8,26 +16,34 @@ package sg.edu.smu.ksketch2.canvas.controls import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; + import data.KSketch_DataListItem; import data.KSketch_ListItem; import org.as3commons.collections.SortedList; import sg.edu.smu.ksketch2.KSketchWebLinks; + import sg.edu.smu.ksketch2.canvas.components.view.KSketch_HomeView; public class KSketch_CacheControl { //class variables public var informationArr:Array; + private var _selectedSketch:Array; + private var _homeView:KSketch_HomeView; private var _mySO:SharedObject = SharedObject.getLocal("mydata"); - private var httpService:HTTPService = new HTTPService(); - private var webList:SortedList = new SortedList(); + private var _httpService:HTTPService = new HTTPService(); + private var _webList:SortedList = new SortedList(); + private var _isData:Boolean = false; - public function KSketch_CacheControl() + + public function KSketch_CacheControl(homeView:KSketch_HomeView) { - informationArr = new Array(2); + _homeView = homeView; + + informationArr = new Array(4); informationArr[0] = null; //user: user object informationArr[1] = null; //cachedSketchList: cached sketch list - informationArr[2] = null; //webSketchList: web sketch list + informationArr[2] = null; //syncSketchList: cached sketch list to sync with web informationArr[3] = null; //syncSketchList: cached sketch list to sync with web if (_mySO.data) @@ -41,20 +57,13 @@ package sg.edu.smu.ksketch2.canvas.controls { informationArr[1] = _mySO.data.cachedSketchList; } - - if(_mySO.data.webSketchList) - { - informationArr[0] = _mySO.data.webSketchList; - } - - if(_mySO.data.syncSketchList) + else { - informationArr[1] = _mySO.data.syncSketchList; - } + informationArr[1] = new SortedList(); + } } - httpService.addEventListener(FaultEvent.FAULT, faultHandler); - httpService.addEventListener(ResultEvent.RESULT, resultHandler); + _httpService.resultFormat = "text"; } public function get user():Object @@ -62,6 +71,11 @@ package sg.edu.smu.ksketch2.canvas.controls return informationArr[0]; } + public function set user(userObject:Object):void + { + informationArr[0] = userObject; + } + /** set user as anonymous **/ public function newUser():void { @@ -83,21 +97,19 @@ package sg.edu.smu.ksketch2.canvas.controls informationArr[0] = userObject; } - /** set user based on received user object **/ - public function set user(userObject:Object):void + public function get cachedList():SortedList { - informationArr[0] = userObject; + return informationArr[1]; } - public function retrieveAllSketchList():Array + public function retrieveAllSketchList():SortedList { + _isData = false; var result:Object; - - var cacheList:SortedList = new SortedList(); - result = syncList(cacheList,webList); + result = syncList(cachedList,_webList); //TODO: Handle toBeSavedList here //result.toBeSavedList - return result.syncedList.toArray(); + return result.syncedList; } // Probably the most efficient way of syncing the sketch list in the cache and @@ -111,6 +123,7 @@ package sg.edu.smu.ksketch2.canvas.controls if(y >= webList.size) { if(!cacheList.itemAt(x).isSaved) { updateList.add(cacheList.itemAt(x)); + allList.add(cacheList.itemAt(x)); } x += 1; } else if (x >= cacheList.size) { @@ -142,12 +155,49 @@ package sg.edu.smu.ksketch2.canvas.controls //make web request to pull list of sketches var parameter:String = "{\"sketchID\":[],\"userid\":" + user.id + "}"; - httpService.url = KSketchWebLinks.jsonurlSketch + "/" + parameter; - httpService.send(); + _httpService.removeEventListener(ResultEvent.RESULT, dataResultHandler); + _httpService.addEventListener(FaultEvent.FAULT, faultHandler); + _httpService.addEventListener(ResultEvent.RESULT, listResultHandler); + + _httpService.url = KSketchWebLinks.jsonurlSketch + "/" + parameter; + _httpService.send(); + } + else + { + _homeView.displaySketchList(null); } } - private function resultHandler(event:ResultEvent):Array + public function retrieveSketchData(sketchName:String, sketchId:String, version:String):void + { + _selectedSketch = new Array(3); + _selectedSketch[0] = sketchName; + _selectedSketch[1] = sketchId; + _selectedSketch[2] = version; + + if(user.id != "n.a" && (user.status.indexOf("success") >= 0)) + { + if(user.id != "n.a" && (user.status.indexOf("success") >= 0)) + { + version = "-1"; //set to -1 to pull the latest version + } + + _httpService.removeEventListener(ResultEvent.RESULT, listResultHandler); + _httpService.addEventListener(FaultEvent.FAULT, faultHandler); + _httpService.addEventListener(ResultEvent.RESULT, dataResultHandler); + + _httpService.url = KSketchWebLinks.jsonurlSketchXML + "/" + sketchId + "/" + version + "/" + user.id; + _httpService.send(); + } + else + { + //loop through cachedSketchList for the object + //then retrieve object from same index location in the cachedSketchData + //_sketchData = ""; + } + } + + private function listResultHandler(event:ResultEvent):void { //TODO: RAM check for negative cases var rawData:String = String(event.result); @@ -158,14 +208,40 @@ package sg.edu.smu.ksketch2.canvas.controls { var _ksketchListItem:KSketch_ListItem = new KSketch_ListItem(); _ksketchListItem.fromWebData(tempObj); - webList.add(_ksketchListItem); + _webList.add(_ksketchListItem); } - return retrieveAllSketchList(); + + _homeView.displaySketchList(retrieveAllSketchList()); + } + + private function dataResultHandler(event:ResultEvent):void + { + var rawData:String = String(event.result); + var resultObj:Object = com.adobe.serialization.json.JSON.decode(rawData,true); + var sketchData:KSketch_DataListItem = null; + + if(resultObj.data.fileData) + { + sketchData = new KSketch_DataListItem(resultObj.data.fileData, resultObj.data.fileName, resultObj.data.originalName, + resultObj.data.owner_id, resultObj.modified, resultObj.data.changeDescription, + resultObj.data.sketchId, resultObj.data.version); + } + + _homeView.displaySketchData(sketchData, _selectedSketch); } private function faultHandler(event:FaultEvent):void { //TODO: RAM check for negative cases + _homeView.displaySketchList(null); + } + + public function reset():void + { + informationArr[0] = null; + informationArr[1] = null; + informationArr[2] = null; + informationArr[3] = null; } } } \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/utils/KWebData.as b/KSKInterface/src/sg/edu/smu/ksketch2/utils/KWebData.as index 6c4fb1b7..0a2edf8c 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/utils/KWebData.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/utils/KWebData.as @@ -29,12 +29,12 @@ package sg.edu.smu.ksketch2.utils data.fileName = sketchName; data.lowerFileName = sketchName.toLowerCase(); - if(userData.kSketchDocument.originalName != "" && (sketchName == userData.kSketchDocument.originalName)) + if(userData.sketchData.originalName != "" && (sketchName == userData.sketchData.originalName)) { - data.sketchId = userData.kSketchDocument.sketchId; - data.originalVersion = userData.kSketchDocument.originalVersion; - data.originalSketch = userData.kSketchDocument.originalSketch; - data.originalName = userData.kSketchDocument.originalName; + data.sketchId = userData.sketchData.sketchId; + data.originalVersion = userData.sketchData.originalVersion; + data.originalSketch = userData.sketchData.originalSketch; + data.originalName = userData.sketchData.originalName; } else { From 1e329d9b9bda5109affbd6dc94e8b8ac27899ce9 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Tue, 14 Jul 2015 21:35:44 +0800 Subject: [PATCH 17/37] HomeView loads faster with itemRendererFunction --- .../components/view/KSketch_HomeView.mxml | 883 +++++++++--------- .../canvas/controls/KSketch_CacheControl.as | 10 +- 2 files changed, 421 insertions(+), 472 deletions(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index 29be5c24..0c537f08 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -23,504 +23,453 @@ -1)) - { - if(KSketch_SplashView.initialOrientation == StageOrientation.DEFAULT || - KSketch_SplashView.initialOrientation == StageOrientation.UPSIDE_DOWN) - { - stage.setOrientation(StageOrientation.ROTATED_RIGHT); - } - else - { - stage.setOrientation(KSketch_SplashView.initialOrientation); - } - } - - //Hide canvas based on timer - if(!_canvasTimerDisabled) - { - _canvasTimer = new Timer(2000); - _canvasTimer.addEventListener(TimerEvent.TIMER, timerComplete); - _canvasTimer.start(); - } - else - { - _canvasCover.visible = false; - } - - //retrieve cache control object - _cacheControl = new KSketch_CacheControl(this); - - //create pop-up content to potentially appear on Home view - _syncOptions = new KSketch_SyncOptions(); - _logoffNotice = new KSketch_LogoutNotice(); - _canvasNotice = new KSketch_CanvasNotice(); - _syncOptions.createDeferredContent(); - _logoffNotice.createDeferredContent(); - _canvasNotice.createDeferredContent(); - - //add/remove event listeners - this.removeEventListener(FlexEvent.INITIALIZE, init); - stage.addEventListener(KSwipeEvent.DELETE_ACTION, listSketches_deleteSketchHandler); - stage.addEventListener(KSwipeEvent.LOG_ACTION, listSketches_logSketchHandler); - stage.addEventListener(KSwipeEvent.SAVE_ACTION, listSketches_saveSketchHandler); - //listSketches.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe); - - _setupUser(); + + import mx.collections.ArrayCollection; + import mx.events.FlexEvent; + import mx.managers.PopUpManager; + import mx.utils.ObjectProxy; + + import spark.events.IndexChangeEvent; + + import data.KSketch_DataListItem; + + import org.as3commons.collections.SortedList; + + import sg.edu.smu.ksketch2.KSketchAssets; + import sg.edu.smu.ksketch2.KSketchStyleSheet; + import sg.edu.smu.ksketch2.canvas.KSketch_CanvasView_Preferences; + import sg.edu.smu.ksketch2.canvas.KSketch_LoginView; + import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_CanvasNotice; + import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_LogoutNotice; + import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_SyncOptions; + import sg.edu.smu.ksketch2.canvas.controls.KSketch_CacheControl; + import sg.edu.smu.ksketch2.utils.KSwipeEvent; + + private static const DISPLAY_FAILED_DEFAULT:int = -1; + private static const DISPLAY_FAILED_LOGIN:int = 0; + private static const DISPLAY_FAILED_SYNC:int = 1; + + [Bindable] + private var sortedArr:SortedList = new SortedList(); + [Bindable] + private var arrDG:ArrayCollection = new ArrayCollection(); + + //variables for canvas timer + private var _canvasTimer:Object; + private var _canvasTimerDisabled:Boolean; + + private var _loginView:KSketch_LoginView; + private var _cacheControl:KSketch_CacheControl; + private var _syncOptions:KSketch_SyncOptions; + private var _logoffNotice:KSketch_LogoutNotice; + private var _canvasNotice:KSketch_CanvasNotice; + + //variables for login + public var userData:Object = new Object(); + private var _displayFailedMessage:int; + private var _hasBeenNotified:Boolean = false; + private var _failedLogin:Boolean = false; + private var _isConnected:Boolean = false; + + //variables for progress bar + private var _progressTimer:Timer; + + //variables for selecting sketch + private var _createNewSketch:Boolean = false; + private var _isXML:Boolean = false; + private var _oldEvent:Event; + private var _isSwipe:Boolean; + private var _logSketchFlag:Boolean = false; + private var _saveSketchFlag:Boolean = false; + private var _deleteSketchFlag:Boolean = false; + + //variable for item renderer + private var itemRender:IFactory = new ClassFactory(KSketch_HomeView_IconItemRenderer); + + private function init(isMobile:Boolean):void { + //Check for mobile version. Set false to export for Desktop version + if (isMobile) { + mainButtons.removeElementAt(2); + KSketch_CanvasView_Preferences.mobileEnabled = KSketch_CanvasView_Preferences.MOBILE_ON; } - - private function timerComplete(event:TimerEvent):void - { - _canvasTimer.removeEventListener(TimerEvent.TIMER, timerComplete); - _canvasTimer.stop(); - - _canvasCover.visible = false; - _canvasTimerDisabled = true; + else { + KSketch_CanvasView_Preferences.mobileEnabled = KSketch_CanvasView_Preferences.MOBILE_OFF; } - - private function _setupUser():void - { - //initialize login button based on the KUser object - var _anonymousUser:Boolean = false; - - if(data) - { - var errorMessage:String = String(data); - - //prompt once for failed login - if((errorMessage == KSketch_LoginView.LOGIN_LOSTCONN || errorMessage == KSketch_LoginView.LOGIN_JANRAINFAIL) && !_failedLogin) - { - _displayFailedMessage = DISPLAY_FAILED_LOGIN; - _startDisplayFailedNotification(1000); - - _hasBeenNotified = true; - _failedLogin = true; - _anonymousUser = true; - } - } - else - { - _failedLogin = true; - - if(_cacheControl.user == null) - { - _anonymousUser = true; - } - } - - //create userdata object based on anonymous and login states - if(_anonymousUser) - { - _cacheControl.newUser(); - var object:Object = _cacheControl.user; - userData.userObject = object; - userData.listSketches = ""; - userData.resolveConflict = 0; - userData.loginView = null; - - loginButton.label = "Login"; - refreshButton.visible = false; - } - else if(!_anonymousUser && _failedLogin) - { - userData.userObject = _cacheControl.user; - userData.listSketches = ""; - userData.resolveConflict = 0; - userData.loginView = null; - - loginButton.label = "Logout, "+ userData.userObject.u_realname; - refreshButton.label = "Refresh"; + + //Quick fix for orientation on IOS devices + if (stage.deviceOrientation == StageOrientation.UNKNOWN && (Capabilities.version.indexOf('IOS') > -1)) { + if (KSketch_SplashView.initialOrientation == StageOrientation.DEFAULT || + KSketch_SplashView.initialOrientation == StageOrientation.UPSIDE_DOWN) { + stage.setOrientation(StageOrientation.ROTATED_RIGHT); } - else if(!_anonymousUser) - { - //cast data from previous view to ObjectProxy. This is to avoid getting IEventDispatcher error - var dataProxy:ObjectProxy = new ObjectProxy(data); - userData.userObject = dataProxy.userObject; - userData.listSketches = dataProxy.listSketches; - userData.resolveConflict = dataProxy.resolveConflict; - userData.loginView = dataProxy.loginView; - - _loginView = dataProxy.loginView; - - if(userData.userObject.id != "n.a") - { - _cacheControl.user = dataProxy.userObject; - loginButton.label = "Logout, "+ userData.userObject.u_realname; - refreshButton.label = "Refresh"; - - if(!_isConnected && !_hasBeenNotified) - { - _displayFailedMessage = DISPLAY_FAILED_SYNC; - _startDisplayFailedNotification(3500); - _hasBeenNotified = true; - } - } - else - { - loginButton.label = "Login"; - refreshButton.visible = false; - } - - _failedLogin = false; + else { + stage.setOrientation(KSketch_SplashView.initialOrientation); } - userData.homeView = this; - userData.cacheControl = _cacheControl; - userData.sketchData = null; - - //init the fonts for buttons - createButton.label = "Create a Sketch"; - loadButton.label = "Load Sketch from File"; //DESKTOP ENABLE - createButton.setStyle("fontSize", KSketchStyleSheet.HOME_BUTTON_SIZE); - loadButton.setStyle("fontSize", KSketchStyleSheet.HOME_BUTTON_SIZE); //DESKTOP ENABLE - loginButton.setStyle("fontSize", KSketchStyleSheet.HOME_BUTTON_SIZE); - refreshButton.setStyle("fontSize", KSketchStyleSheet.HOME_BUTTON_SIZE); - - _setupSketchListView(); } - - private function _startDisplayFailedNotification(time:Number):void - { - _canvasTimer = new Timer(time,1); - _canvasTimer.addEventListener(TimerEvent.TIMER_COMPLETE, _displayFailedNotification); + + //Hide canvas based on timer + if (!_canvasTimerDisabled) { + _canvasTimer = new Timer(2000); + _canvasTimer.addEventListener(TimerEvent.TIMER, timerComplete); _canvasTimer.start(); } - - private function _displayFailedNotification(event:TimerEvent):void - { - if(_displayFailedMessage == DISPLAY_FAILED_LOGIN) - { - _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_FAILED_LOGIN; - } - else if(_displayFailedMessage == DISPLAY_FAILED_SYNC) - { - _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_FAILED_SYNC; - } - - - if(_displayFailedMessage != DISPLAY_FAILED_DEFAULT) - { - _canvasNotice.open(this, true); - PopUpManager.centerPopUp(_canvasNotice); - - _displayFailedMessage = DISPLAY_FAILED_DEFAULT; - } - - _canvasTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, _displayFailedNotification); - } - - private function _setupSketchLoad(sketchName:String, sketchId:String, sketchVersion:String):void - { - _startProgressBar(); - _cacheControl.retrieveSketchData(sketchName, sketchId, sketchVersion); + else { + _canvasCover.visible = false; } - - private function _setupSketchLog():void - { - + + //retrieve cache control object + _cacheControl = new KSketch_CacheControl(this); + + //create pop-up content to potentially appear on Home view + _syncOptions = new KSketch_SyncOptions(); + _logoffNotice = new KSketch_LogoutNotice(); + _canvasNotice = new KSketch_CanvasNotice(); + _syncOptions.createDeferredContent(); + _logoffNotice.createDeferredContent(); + _canvasNotice.createDeferredContent(); + + //add/remove event listeners + this.removeEventListener(FlexEvent.INITIALIZE, init); + stage.addEventListener(KSwipeEvent.DELETE_ACTION, listSketches_deleteSketchHandler); + stage.addEventListener(KSwipeEvent.LOG_ACTION, listSketches_logSketchHandler); + stage.addEventListener(KSwipeEvent.SAVE_ACTION, listSketches_saveSketchHandler); + //listSketches.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe); + + _setupUser(); + } + + private function timerComplete(event:TimerEvent):void { + _canvasTimer.removeEventListener(TimerEvent.TIMER, timerComplete); + _canvasTimer.stop(); + + _canvasCover.visible = false; + _canvasTimerDisabled = true; + } + + private function _setupUser():void { + //initialize login button based on the KUser object + var _anonymousUser:Boolean = false; + + if (data) { + var errorMessage:String = String(data); + + //prompt once for failed login + if ((errorMessage == KSketch_LoginView.LOGIN_LOSTCONN || errorMessage == KSketch_LoginView.LOGIN_JANRAINFAIL) && !_failedLogin) { + _displayFailedMessage = DISPLAY_FAILED_LOGIN; + _startDisplayFailedNotification(1000); + + _hasBeenNotified = true; + _failedLogin = true; + _anonymousUser = true; + } } - - private function _setupSketchSave():void - { - + else { + _failedLogin = true; + + if (_cacheControl.user == null) { + _anonymousUser = true; + } } - - private function _setupSketchDelete():void - { - + + //create userdata object based on anonymous and login states + if (_anonymousUser) { + _cacheControl.newUser(); + var object:Object = _cacheControl.user; + userData.userObject = object; + userData.listSketches = ""; + userData.resolveConflict = 0; + userData.loginView = null; + + loginButton.label = "Login"; + refreshButton.visible = false; } - - private function _setupSketchListView():void - { - _startProgressBar(); - - listSketches_unavailable.visible = true; - - sortedArr.clear(); - - _cacheControl.retrieveWebSketchList(); + else if (!_anonymousUser && _failedLogin) { + userData.userObject = _cacheControl.user; + userData.listSketches = ""; + userData.resolveConflict = 0; + userData.loginView = null; + + loginButton.label = "Logout, " + userData.userObject.u_realname; + refreshButton.label = "Refresh"; } - - public function displaySketchList(sortedArr:SortedList):void - { - if(sortedArr) - { - if(sortedArr.size > 0) - { - for(var i:int=0; i= 1) - progressBar.value = 0; + + + if (_displayFailedMessage != DISPLAY_FAILED_DEFAULT) { + _canvasNotice.open(this, true); + PopUpManager.centerPopUp(_canvasNotice); + + _displayFailedMessage = DISPLAY_FAILED_DEFAULT; } - - private function createSketch():void - { - userData.kSketchDocument = null; - _createNewSketch = true; - navigateToScreen('CANVAS'); + + _canvasTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, _displayFailedNotification); + } + + private function _setupSketchLoad(sketchName:String, sketchId:String, sketchVersion:String):void { + _startProgressBar(); + _cacheControl.retrieveSketchData(sketchName, sketchId, sketchVersion); + } + + private function _setupSketchLog():void { + + } + + private function _setupSketchSave():void { + + } + + private function _setupSketchDelete():void { + + } + + private function _setupSketchListView():void { + _startProgressBar(); + + listSketches_unavailable.visible = true; + + sortedArr.clear(); + + _cacheControl.retrieveWebSketchList(); + } + + public function displaySketchList(sortedArr:SortedList):void { + if (sortedArr) { + if (sortedArr.size > 0) { + for (var i:int = 0; i < sortedArr.size; i++) { + arrDG.addItem(sortedArr.itemAt(i)); + } + + listSketches_unavailable.visible = false; + } } - - private function loadSketch():void - { - + + _stopProgressBar(); + } + + public function displaySketchData(sketchData:KSketch_DataListItem, selectedSketch:Array) { + if (sketchData) { + userData.sketchData = sketchData; + navigateToScreen("CANVAS"); } - - public function refresh():void - { - + + _stopProgressBar(); + } + + private function _startProgressBar():void { + progressBar.visible = true; + + _progressTimer = new Timer(1); + _progressTimer.addEventListener(TimerEvent.TIMER, _progressBarHandler); + _progressTimer.start(); + } + + private function _stopProgressBar():void { + _progressTimer.stop(); + _progressTimer.removeEventListener(TimerEvent.TIMER, _progressBarHandler); + progressBar.visible = false; + } + + private function _progressBarHandler(event:TimerEvent):void { + progressBar.value += .008; + + if (progressBar.value >= 1) + progressBar.value = 0; + } + + private function createSketch():void { + userData.kSketchDocument = null; + _createNewSketch = true; + navigateToScreen('CANVAS'); + } + + private function loadSketch():void { + + } + + public function refresh():void { + + } + + public function logout():void { + if (_loginView) { + _loginView.isLoggedOut = true; } - - public function logout():void + + //KSketch_SaveOptions.saveCounter = 0; + data = null; + arrDG.removeAll(); + loginButton.label = "Login"; + + _cacheControl.reset(); + _setupUser(); + } + + public function navigateToScreen(screenName:String):void { + if (screenName.indexOf("CANVAS") == -1) //if screen name is Login { - if(_loginView) - { - _loginView.isLoggedOut = true; + KSketch_LoginView.userData = new Object(); + + //if this is a logout button, then reset view & delete cache + if (loginButton.label.indexOf("Login") == -1) { + logout(); + /*if(!_fileControl.unsavedSketchExist(_mobileControl.informationArr[1])) + { + logout(); + } + else + { + _logoffNotice.open(this,true); + PopUpManager.centerPopUp(_logoffNotice); + }*/ } - - //KSketch_SaveOptions.saveCounter = 0; - data = null; - arrDG.removeAll(); - loginButton.label = "Login"; - - _cacheControl.reset(); - _setupUser(); - } - - public function navigateToScreen(screenName:String):void - { - if(screenName.indexOf("CANVAS") == -1) //if screen name is Login - { - KSketch_LoginView.userData = new Object(); - - //if this is a logout button, then reset view & delete cache - if(loginButton.label.indexOf("Login") == -1) - { - logout(); - /*if(!_fileControl.unsavedSketchExist(_mobileControl.informationArr[1])) - { - logout(); - } - else - { - _logoffNotice.open(this,true); - PopUpManager.centerPopUp(_logoffNotice); - }*/ - } - else - { - navigator.pushView(KSketch_LoginView); - } - } - else - { - Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; - navigator.pushView(KSketch_CanvasView, userData); + else { + navigator.pushView(KSketch_LoginView); } - } - - protected function listSketches_deleteSketchHandler(event:KSwipeEvent):void - { - _deleteSketchFlag = true; } - - protected function listSketches_logSketchHandler(event:KSwipeEvent):void - { - _logSketchFlag = true; + else { + Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; + navigator.pushView(KSketch_CanvasView, userData); } - - protected function listSketches_saveSketchHandler(event:KSwipeEvent):void - { - _saveSketchFlag = true; - listSketches_changeSelectedHandler(event); - } - - protected function listSketches_mouseDownHandler(event:MouseEvent):void - { - if(!_oldEvent) - _oldEvent = event; - else - { - var currentSelectedSketchName:String; - if(event.target) - { - if(event.target as KSketch_HomeView_IconItemRenderer) - { - if((_oldEvent.target is KSketch_HomeView_IconItemRenderer) - && (event.target is KSketch_HomeView_IconItemRenderer) + } + + protected function listSketches_deleteSketchHandler(event:KSwipeEvent):void { + _deleteSketchFlag = true; + } + + protected function listSketches_logSketchHandler(event:KSwipeEvent):void { + _logSketchFlag = true; + } + + protected function listSketches_saveSketchHandler(event:KSwipeEvent):void { + _saveSketchFlag = true; + listSketches_changeSelectedHandler(event); + } + + protected function listSketches_mouseDownHandler(event:MouseEvent):void { + if (!_oldEvent) + _oldEvent = event; + else { + var currentSelectedSketchName:String; + if (event.target) { + if (event.target as KSketch_HomeView_IconItemRenderer) { + if ((_oldEvent.target is KSketch_HomeView_IconItemRenderer) + && (event.target is KSketch_HomeView_IconItemRenderer) && ((_oldEvent.target as KSketch_HomeView_IconItemRenderer) != (event.target as KSketch_HomeView_IconItemRenderer) - )) - { - currentSelectedSketchName = (event.target as KSketch_HomeView_IconItemRenderer).sketchName.text; - - if((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar) - if((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar.stage) - { - KSketch_HomeView_IconItemRenderer.openActionBar = false; - (_oldEvent.target as KSketch_HomeView_IconItemRenderer).removeElement((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar); - } - - _oldEvent = event; - } + )) { + currentSelectedSketchName = (event.target as KSketch_HomeView_IconItemRenderer).sketchName.text; + + if ((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar) + if ((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar.stage) { + KSketch_HomeView_IconItemRenderer.openActionBar = false; + (_oldEvent.target as KSketch_HomeView_IconItemRenderer).removeElement((_oldEvent.target as KSketch_HomeView_IconItemRenderer).actBar); + } + + _oldEvent = event; } - } - } - } - - protected function listSketches_changeSelectedHandler(event:Event):void - { - var sketchName:String = KSketch_HomeView_IconItemRenderer.selectedSketchName; - var sketchId:String = KSketch_HomeView_IconItemRenderer.selectedSketchId; - var sketchVersion:String = KSketch_HomeView_IconItemRenderer.selectedVersion; - - if(_isSwipe) - { - listSketches.selectedIndex = -1; - stage.dispatchEvent(new KSwipeEvent(KSwipeEvent.TAP_ACTION)); + } } - - //if action bar is displayed, reset selection to -1 - if(KSketch_HomeView_IconItemRenderer.openActionBar) - listSketches.selectedIndex = -1; - - //if action bar is not displayed and there is no additional flag - if(!KSketch_HomeView_IconItemRenderer.openActionBar && !_deleteSketchFlag && !_isSwipe && !_logSketchFlag && !_saveSketchFlag) - _setupSketchLoad(sketchName, sketchId, sketchVersion); //_isXML = true; - - //if action bar is displayed and there is a log sketch flag - if(KSketch_HomeView_IconItemRenderer.openActionBar && _logSketchFlag) - _setupSketchLog(); //_isXML = true; - - //if action bar is displayed and there is a save sketch flag - if(KSketch_HomeView_IconItemRenderer.openActionBar && _saveSketchFlag) - _setupSketchSave(); //_isXML = true; - - //if action bar is displayed and there is a delete sketch flag - if(KSketch_HomeView_IconItemRenderer.openActionBar && _deleteSketchFlag) - _setupSketchDelete(); //_isXML = true; - - _isSwipe = false; - } - - public function set createNewSketch(value:Boolean) - { - _createNewSketch = value; } - - public function get createNewSketch():Boolean - { - return _createNewSketch; + } + + protected function listSketches_changeSelectedHandler(event:Event):void { + var sketchName:String = KSketch_HomeView_IconItemRenderer.selectedSketchName; + var sketchId:String = KSketch_HomeView_IconItemRenderer.selectedSketchId; + var sketchVersion:String = KSketch_HomeView_IconItemRenderer.selectedVersion; + + if (_isSwipe) { + listSketches.selectedIndex = -1; + stage.dispatchEvent(new KSwipeEvent(KSwipeEvent.TAP_ACTION)); } + + //if action bar is displayed, reset selection to -1 + if (KSketch_HomeView_IconItemRenderer.openActionBar) + listSketches.selectedIndex = -1; + + //if action bar is not displayed and there is no additional flag + if (!KSketch_HomeView_IconItemRenderer.openActionBar && !_deleteSketchFlag && !_isSwipe && !_logSketchFlag && !_saveSketchFlag) + _setupSketchLoad(sketchName, sketchId, sketchVersion); //_isXML = true; + + //if action bar is displayed and there is a log sketch flag + if (KSketch_HomeView_IconItemRenderer.openActionBar && _logSketchFlag) + _setupSketchLog(); //_isXML = true; + + //if action bar is displayed and there is a save sketch flag + if (KSketch_HomeView_IconItemRenderer.openActionBar && _saveSketchFlag) + _setupSketchSave(); //_isXML = true; + + //if action bar is displayed and there is a delete sketch flag + if (KSketch_HomeView_IconItemRenderer.openActionBar && _deleteSketchFlag) + _setupSketchDelete(); //_isXML = true; + + _isSwipe = false; + } + + public function set createNewSketch(value:Boolean) { + _createNewSketch = value; + } + + public function get createNewSketch():Boolean { + return _createNewSketch; + } + + public function kSketchItemRendererFuntion(item:*):IFactory { + return itemRender; + } ]]> @@ -604,7 +553,7 @@ diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as index 30db83ce..74557215 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as @@ -9,7 +9,7 @@ package sg.edu.smu.ksketch2.canvas.controls { import com.adobe.serialization.json.JSON; - + import flash.net.SharedObject; import mx.rpc.events.FaultEvent; @@ -52,7 +52,7 @@ package sg.edu.smu.ksketch2.canvas.controls { informationArr[0] = _mySO.data.user; } - + if(_mySO.data.cachedSketchList) { informationArr[1] = _mySO.data.cachedSketchList; @@ -68,12 +68,12 @@ package sg.edu.smu.ksketch2.canvas.controls public function get user():Object { - return informationArr[0]; + return com.adobe.serialization.json.JSON.decode(String(informationArr[0]),true); } public function set user(userObject:Object):void { - informationArr[0] = userObject; + informationArr[0] = com.adobe.serialization.json.JSON.encode(userObject); } /** set user as anonymous **/ @@ -153,7 +153,7 @@ package sg.edu.smu.ksketch2.canvas.controls if(user.id != "n.a" && (user.status.indexOf("success") >= 0)) { //make web request to pull list of sketches - var parameter:String = "{\"sketchID\":[],\"userid\":" + user.id + "}"; + var parameter:String = "{\"sketchID\":[],\"userid\":" + user.id + ",\"token\":\""+user.token +"\"}"; _httpService.removeEventListener(ResultEvent.RESULT, dataResultHandler); _httpService.addEventListener(FaultEvent.FAULT, faultHandler); From f28dcfe5c48cb24ab13b29e1f56c1bce2bf087a0 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Mon, 20 Jul 2015 20:58:29 +0800 Subject: [PATCH 18/37] Sync functionality after unit testing --- KSKInterface/src/data/KSketch_ListItem.as | 8 ++ .../components/view/KSketch_HomeView.mxml | 11 ++- .../canvas/controls/KSketch_CacheControl.as | 82 ++++++++++++------- 3 files changed, 68 insertions(+), 33 deletions(-) diff --git a/KSKInterface/src/data/KSketch_ListItem.as b/KSKInterface/src/data/KSketch_ListItem.as index 2dabc712..b3fc0c0f 100644 --- a/KSKInterface/src/data/KSketch_ListItem.as +++ b/KSKInterface/src/data/KSketch_ListItem.as @@ -36,6 +36,14 @@ public class KSketch_ListItem implements IComparator{ this._isSaved = true; } + public function fromCache(cacheData:Object):void { + this._sketchId = cacheData.sketchId; + this._fileName = cacheData.fileName; + this._thumbnailData = cacheData.thumbnailData; + this._created = cacheData.created; + this._version = cacheData.version; + this._isSaved = cacheData.isSaved; + } public function compare(item1:*, item2:*):int { if(item1._sketchId < item2._sketchId) return -1; diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index 0c537f08..6ced50aa 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -23,12 +23,15 @@ = webList.size) { - if(!cacheList.itemAt(x).isSaved) { + var x:int = 0, y:int = 0; + while ((x < cacheList.size) || (y < webList.size)) { + if (y >= webList.size) { + if (!cacheList.itemAt(x).isSaved) { updateList.add(cacheList.itemAt(x)); allList.add(cacheList.itemAt(x)); } x += 1; } else if (x >= cacheList.size) { allList.add(webList.itemAt(y)); - y+=1; - } else if (cacheList.itemAt(x).compare(webList.itemAt(y)) == -1) { - if(!cacheList.itemAt(x).isSaved) { + y += 1; + } else if (comparator.compare(cacheList.itemAt(x),webList.itemAt(y)) == -1) { + if (!cacheList.itemAt(x).isSaved) { updateList.add(cacheList.itemAt(x)); } x += 1; - } else if (cacheList.itemAt(x).compare(webList.itemAt(y)) == 1) { + } else if (comparator.compare(cacheList.itemAt(x),webList.itemAt(y)) == 1) { allList.add(webList.itemAt(y)); y += 1; } else { @@ -202,7 +229,7 @@ package sg.edu.smu.ksketch2.canvas.controls //TODO: RAM check for negative cases var rawData:String = String(event.result); var resultObj:Object = com.adobe.serialization.json.JSON.decode(rawData,true); - + _webList.clear(); var tempArr:Array = (resultObj.entities as Array); for each(var tempObj:Object in tempArr) { @@ -238,10 +265,7 @@ package sg.edu.smu.ksketch2.canvas.controls public function reset():void { - informationArr[0] = null; - informationArr[1] = null; - informationArr[2] = null; - informationArr[3] = null; + _mySO.clear(); } } } \ No newline at end of file From 16e5c1aa0b5048eecc55607b285ced225ddb38a0 Mon Sep 17 00:00:00 2001 From: camellia Date: Mon, 27 Jul 2015 13:56:09 +0800 Subject: [PATCH 19/37] Resolution update --- KSKApp_Air/src/OverrideRuntimeDPIProvider.as | 14 +- .../previewer/KTouchDocumentPreviewer.mxml | 3 +- .../previewer/KTouchPreviewerButtonSkin.mxml | 7 +- .../sg/edu/smu/ksketch2/KSketchStyleSheet.as | 302 -------------- .../src/sg/edu/smu/ksketch2/KSketchStyles.as | 370 ++++++------------ .../buttons/KSketch_Canvas_Button_Skin.mxml | 26 +- .../buttons/KSketch_Dialog_Button_Skin.mxml | 6 +- .../buttons/KSketch_OnOff_Toggle.mxml | 36 +- .../buttons/KSketch_Play_Button.mxml | 2 +- .../buttons/KSketch_Toggle_Button.mxml | 8 +- .../popup/KSketch_CanvasNotice.mxml | 26 +- .../popup/KSketch_Feedback_Message.mxml | 6 +- .../canvas/components/popup/KSketch_Help.mxml | 32 +- .../popup/KSketch_ImageImport_Control.mxml | 17 +- .../popup/KSketch_LogoutNotice.mxml | 30 +- .../components/popup/KSketch_Options.mxml | 36 +- .../popup/KSketch_OverwriteSaveOptions.mxml | 30 +- .../components/popup/KSketch_PopUp_Menu.mxml | 105 +++-- .../components/popup/KSketch_SaveOptions.mxml | 40 +- .../popup/KSketch_SharingOptions.mxml | 50 +-- .../components/popup/KSketch_SyncOptions.mxml | 28 +- .../popup/KSketch_Timebar_Context_Double.mxml | 36 +- .../popup/KSketch_Timebar_Context_Single.mxml | 16 +- .../popup/KSketch_Timebar_Magnifier.mxml | 38 +- .../popup/KSketch_Widget_ContextMenu.mxml | 34 +- .../timebar/KSketch_TickMark_Control.as | 14 +- .../components/timebar/KSketch_TimeControl.as | 23 +- .../components/timebar/KSketch_TimeLabel.mxml | 4 +- .../timebar/KSketch_TimeSlider.mxml | 20 +- .../KSketch_Widget_Component.mxml | 12 +- .../components/view/KSketch_CanvasView.mxml | 67 ++-- .../components/view/KSketch_HomeView.mxml | 53 ++- .../KSketch_HomeView_IconItemRenderer.mxml | 12 +- .../view/KSketch_HomeView_ListActions.mxml | 8 +- .../components/view/KSketch_LogView.mxml | 4 +- .../widgetstates/KBasicTransitionMode.as | 16 +- .../widgetstates/KMoveCenterMode.as | 14 +- 37 files changed, 570 insertions(+), 975 deletions(-) delete mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyleSheet.as diff --git a/KSKApp_Air/src/OverrideRuntimeDPIProvider.as b/KSKApp_Air/src/OverrideRuntimeDPIProvider.as index 8c07312a..8cb5e760 100644 --- a/KSKApp_Air/src/OverrideRuntimeDPIProvider.as +++ b/KSKApp_Air/src/OverrideRuntimeDPIProvider.as @@ -3,7 +3,7 @@ package import flash.system.Capabilities; import mx.core.RuntimeDPIProvider; - import sg.edu.smu.ksketch2.KSketchStyleSheet; + import sg.edu.smu.ksketch2.KSketchStyles; public class OverrideRuntimeDPIProvider extends RuntimeDPIProvider { @@ -14,15 +14,15 @@ package if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY > 1500) { - KSketchStyleSheet.scaleHome(2); - KSketchStyleSheet.scaleCanvas(1.8); - KSketchStyleSheet.scaleFont(2); + //KSketchStyles.scaleHome(2); + //KSketchStyles.scaleCanvas(1.8); + //KSketchStyles.scaleFont(2); } else if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY < 1500) { - KSketchStyleSheet.scaleHome(2); - KSketchStyleSheet.scaleCanvas(1.4); - KSketchStyleSheet.scaleFont(2); + //KSketchStyles.scaleHome(2); + //KSketchStyles.scaleCanvas(1.4); + //KSketchStyles.scaleFont(2); } return super.runtimeDPI; diff --git a/KSKApp_Air/src/document/previewer/KTouchDocumentPreviewer.mxml b/KSKApp_Air/src/document/previewer/KTouchDocumentPreviewer.mxml index bf0c7bf3..bb2a9d6e 100755 --- a/KSKApp_Air/src/document/previewer/KTouchDocumentPreviewer.mxml +++ b/KSKApp_Air/src/document/previewer/KTouchDocumentPreviewer.mxml @@ -5,6 +5,7 @@ - + diff --git a/KSKApp_Air/src/document/previewer/KTouchPreviewerButtonSkin.mxml b/KSKApp_Air/src/document/previewer/KTouchPreviewerButtonSkin.mxml index 77e5824a..a33867b0 100755 --- a/KSKApp_Air/src/document/previewer/KTouchPreviewerButtonSkin.mxml +++ b/KSKApp_Air/src/document/previewer/KTouchPreviewerButtonSkin.mxml @@ -7,6 +7,11 @@ [HostComponent("spark.components.Button")] + + + @@ -32,7 +37,7 @@ - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyleSheet.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyleSheet.as deleted file mode 100755 index 31c6b480..00000000 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyleSheet.as +++ /dev/null @@ -1,302 +0,0 @@ -/** - * Copyright 2010-2012 Singapore Management University - * Developed under a grant from the Singapore-MIT GAMBIT Game Lab - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was - * not distributed with this file, You can obtain one at - * http://mozilla.org/MPL/2.0/. - */ -package sg.edu.smu.ksketch2 -{ - public class KSketchStyleSheet - { - //==========HOME VIEW variables========== - //Logo - public static var LOGO_BUTTON_WIDTH:Number = 150; - public static var LOGO_BUTTON_HEIGHT:Number = 150; - public static var LOGO_PADDING_LEFT:Number = 80; - public static var LOGO_PADDING_TOP:Number = 40; - public static var LOGO_PADDING_BUTTON:Number = 10; - - //Main buttons - public static var HOME_BUTTON_SIZE:int = 15; - public static var HOME_BUTTON_FONTSIZE:int = 14; - - //List of sketches - public static const LIST_SKETCH_GAP:int = 0; - public static var LIST_SKETCH_FONT:int = 20; - public static var LIST_SKETCH_LINE:int = 1000; - public static var LIST_SKETCH_WIDTH:Number = 74; - public static var LIST_SKETCH_HEIGHT:Number = 120; - public static var LIST_SKETCH_IMAGE_WIDTH:Number = 160; - public static var LIST_SKETCH_IMAGE_HEIGHT:Number = 90; - - //==========CANVAS VIEW variables========== - //COLORS, FONTS - //Application - public static const APP_BACKGROUND_COLOR:uint = 0xD0D2D3; - public static const APP_FONT_FAMILY:String = "Arial, Helvetica"; - - //Pop up menu - public static const BLACK_PEN:uint = 0x000000; - public static const BLUE_PEN:uint = 0x0000FF; - public static const GREEN_PEN:uint = 0x00FF00; - public static const RED_PEN:uint = 0xFF0000; - public static const GREY_HIGHLIGHT:uint = 0xd3d3d3; - public static const WHITE_HIDE:uint = 0xFFFFFF; - public static const MENU_BACKGROUND_COLOR:uint = 0xA6A8AB; - public static const CONTEXTMENU_BACKGROUND_COLOR:uint = 0x000000; - - //Canvas - public static const CANVAS_BUTTON_NORMAL:uint = 0xC8CCCE; - public static const CANVAS_BUTTON_ACTIVATED:uint = 0x505050; - public static const CANVAS_BUTTON_PLAY_ACTIVATED:uint = 0xDD1F26; - public static const CANVAS_BUTTON_SHADOW_COLOR:uint = 0x000000; - public static const CANVAS_BUTTON_SHADOW_STRENGTH:Number = 0.5; - public static const CANVAS_BUTTON_SHADOW_ALPHA:Number = 0.6; - public static const CANVAS_BUTTON_SHADOW_DISTANCE:Number = 3; - public static const CANVAS_BUTTON_SHADOW_ANGLE:Number = 50; - public static const CANVAS_BACKGROUND_COLOR:uint = 0xA6A8AB; - public static const CANVAS_PAPER_COLOR:uint = 0xFFFFFF; - public static const CANVAS_PAPER_REGION:uint = 0xC43F2D; - public static const CANVAS_BORDER_COLOR:uint = 0x000000; - public static const CANVAS_SHADOW_COLOR:uint = 0x000000; - public static const CANVAS_SHADOW_ALPHA:Number = 0.4; - public static const CANVAS_SHADOW_X_DISTANCE:Number = 12; - public static const CANVAS_SHADOW_Y_DISTANCE:Number = 12; - public static const CANVAS_SHADOW_ANGLE:Number = 45; - public static const CANVAS_SHADOW_STRENGTH:Number = 2; - - //Timebar - public static const TIMEBAR_BACKGROUND_COLOR:uint = 0xA6A8AB; - public static const TIMEBAR_SHADOW_COLOR:uint = 0x000000; - public static const TIMEBAR_SHADOW_ALPHA:Number = 0.35; - public static const TIMEBAR_SHADOW_DISTANCE:Number = 8; - public static const TIMEBAR_SHADOW_ANGLE:Number = 90; - public static const TIMEBAR_SHADOW_STRENGTH:Number = 2; - public static const TIME_CONTROL_BACKGROUND_COLOR:uint = 0xFFFFFF; - public static const TIME_CONTROL_FILL_COLOR:uint = 0xDD1F26; - public static const TIME_INDICATOR_COLOR:uint = 0x000000; - public static const TIME_LABEL_FONT_COLOR:Number = 0x404041; - public static const TIME_TICK_KEYFRAME:uint = 0x6B0000; //for keyframes (passthrough = false) - public static const TIME_TICK_CONTROLPOINT:uint = 0x6B0000; //for controlpoints (passthroug = true) - public static const TIME_TICK_SELECTED_ALPHA:Number = 1; - public static const TIME_TICK_UNSELECTED_ALPHA:Number = 0.5; - public static const ACTIVITY_COLOR:uint = 0xFF0000; - public static const ACTIVITY_OTHER_COLOR:uint = 0xC2C2C2; - public static const ACTIVITY_ALPHA:Number = 1.0; - - //Magnifier/Toggle Button - public static const MAGNIFIER_BACKGROUND_COLOR:uint = 0x000000; - public static const MAGNIFIER_FONT_COLOR:uint = 0xFFFFFF; - public static const MAGNIFIER_CURRENTTIMELABEL_COLOR_MULTIPLIER:Number = 100; - public static const TOGGLEBUTTON_ON_COLOR:uint = 0xFFFFFF; - public static const TOGGLEBUTTON_OFF_COLOR:uint = 0x000000; - - //Widget - public static const WIDGET_ENABLED_ALPHA:Number = 1; - public static const WIDGET_DISABLED_ALPHA:Number = 0.2; - public static const WIDGET_INTERPOLATE_COLOR:uint = 0x6E6F71; - public static const WIDGET_PERFORM_COLOR:uint = 0x971C24; - - //Feedback - public static const FEEDBACK_BACKGROUND_ALPHA:Number = 0; - - //Scale - public static var SCALE:int = 1; - public static var CANVAS_SCALE:Number = 0.8; - - //Login - public static var LOGIN_CONNECTION_FONT_SIZE:Number = 23; - - //Canvas - public static var CANVAS_BUTTON_CORNER_RADIUS:Number = 5; - public static var CANVAS_BORDER_WEIGHT:Number = 1; - - //Timebar - public static var TIMEBAR_LAYOUT_GAP:Number = 4; - public static var TIMEBAR_LAYOUT_PADDING_HORIZONTAL:Number = 5; - public static var TIMEBAR_LAYOUT_PADDING_VERTICAL:Number = 5; - public static var TIMEBAR_GAP_CONTEXTMENU_DOUBLE:int = 15; - public static var TIMEBAR_GAP_CONTEXTMENU_SINGLE:int = 100; - public static var TIMEBAR_X_LIMIT_DOUBLE:int = 875; - public static var TIMEBAR_X_LIMIT_SINGLE:int = 960; - public static var TIMEBAR_X_LIMIT_DOUBLE_ANDROID:int = 1100; - public static var TIMEBAR_X_LIMIT_SINGLE_ANDROID:int = 1200; - public static var TIMEBAR_PLAY_BUTTON_WIDTH:Number = 60; - public static var TIMEBAR_PLAY_BUTTON_HEIGHT:Number = 60; - public static var TIMEBAR_BUTTON_WIDTH:Number = 50; - public static var TIMEBAR_BUTTON_HEIGHT:Number = 50; - public static var TIME_CONTROL_HEIGHT:Number = 80; - public static var TIME_LABEL_FONT_SIZE:Number = 10; - public static var TIME_PARTITION_FONT_SIZE:Number = 10.5; - public static var TIME_TICK_THICKNESS:Number = 4; - public static var TIME_TICK_THICKNESS_A:Number = 3; - public static var TIME_TICK_THICKNESS_B:Number = 7; - public static var MAGNIFIER_IMAGE_UNSCALED_WIDTH:Number = 50; - public static var MAGNIFIER_SCALE:Number = 2; - public static var MAGNIFIER_PADDING:Number = 7.5; - public static var MAGNIFIER_FONT_SIZE:Number = 11; - public static var MAGNIFIER_ARROW_PROPORTION:Number = 0.4; - public static var MAGNIFIER_INDICATOR_THICKNESS:Number = 3; - public static var MAGNIFIER_CIRCLE_1:int = 18; - public static var MAGNIFIER_CIRCLE_2:int = 14; - public static var MAGNIFIER_CIRCLE_POS:int = 23; - public static var MAGNIFIER_CURRENTTIMELABEL_THICKNESS:Number = 1; - public static var TOGGLEBUTTON_PADDING:Number = 2; - public static var TOGGLEBUTTON_FONT_SIZE:Number = 9; - public static var TOGGLEBUTTON_CORNERS:Number = 2; - - //Dialog button skins - public static var DIALOGBUTTON_PADDING:Number = 10; - - //Feedback Message - public static var FEEDBACK_FONT_SIZE:Number = 60; - public static var FEEDBACK_FADE_TIME:Number = 250; - - //Menu - public static var MENU_GAP:Number = 10; - public static var MENU_CORNER_RADIUS:Number = 5; - public static var MENU_PADDING:Number = 5; - public static var MENU_BUTTON_GAP:Number = 10; - public static var MENU_BUTTON_WIDTH:Number = 35; - public static var MENU_BUTTON_HEIGHT:Number = 35; - public static var POPUP_SEPARATOR_LINE:int = 60; - public static var POPUP_SEPARATOR_GAP:int = 5; - public static var CONTEXTMENU_PADDING:Number = 7.5; - public static var CONTEXTMENU_BUTTON_PADDING:Number = 5; - public static var CONTEXTMENU_CORNERS:Number = 5; - - //Widget - public static var WIDGET_CENTROID_SIZE:Number = 10; //PIVOT - - //General Button - public static var BUTTON_SIZE:int = 15; - public static var DIALOG_PADDING_20:int = 20; - public static var DIALOG_PADDING_15:int = 15; - public static var DIALOG_PADDING_10:int = 10; - public static var DIALOG_PADDING_5:int = 5; - public static var DIALOG_MEASUREMENT_25:int = 50; - public static var DIALOG_MEASUREMENT_50:int = 50; - public static var DIALOG_MEASUREMENT_100:int = 100; - public static var DIALOG_MEASUREMENT_300:int = 300; - - //Help screen - public static var X_POS_BUTTON:int = 600; - public static var Y_POS_BUTTON:int = 450; - public static var IMAGE_HELP_WIDTH:int = 750; - public static var IMAGE_HELP_HEIGHT:int = 512; - - - public static var FONT_LARGE:int = 26; - public static var FONT_MEDIUM:int = 18; - public static var FONT_STANDARD:int = 14; - public static var FONT_SMALL:Number = 12; - public static var FONT_XSMALL:int = 10; - - - public static function scaleHome(scaleFactor:Number):void - { - LOGO_BUTTON_WIDTH = 150 * scaleFactor; - LOGO_BUTTON_HEIGHT = 150 * scaleFactor; - LOGO_PADDING_LEFT = 80 * scaleFactor; - LOGO_PADDING_TOP = 40 * scaleFactor; - LOGO_PADDING_BUTTON = 10 * scaleFactor; - - HOME_BUTTON_SIZE = 15 * scaleFactor; - HOME_BUTTON_FONTSIZE = 14 * scaleFactor; - - LIST_SKETCH_FONT = 20 * scaleFactor; - LIST_SKETCH_LINE = 1000 * scaleFactor; - LIST_SKETCH_WIDTH = 74 * scaleFactor; - LIST_SKETCH_HEIGHT = 120 * scaleFactor; - LIST_SKETCH_IMAGE_WIDTH = 160 * scaleFactor; - LIST_SKETCH_IMAGE_HEIGHT = 90 * scaleFactor; - } - - public static function scaleCanvas(scaleFactor:Number):void - { - SCALE = 1.9; - CANVAS_SCALE = 1.2 / scaleFactor; - LOGIN_CONNECTION_FONT_SIZE = 23 * scaleFactor; - - CANVAS_BUTTON_CORNER_RADIUS = 5 * scaleFactor; - CANVAS_BORDER_WEIGHT = 1 * scaleFactor; - - TIMEBAR_LAYOUT_GAP = 4 * scaleFactor; - TIMEBAR_LAYOUT_PADDING_HORIZONTAL = 5 * scaleFactor; - TIMEBAR_LAYOUT_PADDING_VERTICAL = 5 * scaleFactor; - TIMEBAR_GAP_CONTEXTMENU_DOUBLE = 15 * scaleFactor; - TIMEBAR_GAP_CONTEXTMENU_SINGLE = 100 * scaleFactor; - TIMEBAR_X_LIMIT_DOUBLE = 875 * scaleFactor; - TIMEBAR_X_LIMIT_SINGLE = 960 * scaleFactor; - TIMEBAR_X_LIMIT_DOUBLE_ANDROID = 1100 * scaleFactor; - TIMEBAR_X_LIMIT_SINGLE_ANDROID = 1200 * scaleFactor; - TIMEBAR_PLAY_BUTTON_WIDTH = 60 * scaleFactor; - TIMEBAR_PLAY_BUTTON_HEIGHT = 60 * scaleFactor; - TIMEBAR_BUTTON_WIDTH = 50 * scaleFactor; - TIMEBAR_BUTTON_HEIGHT = 50 * scaleFactor; - TIME_CONTROL_HEIGHT = 80 * scaleFactor; - TIME_LABEL_FONT_SIZE = 10 * scaleFactor; - TIME_PARTITION_FONT_SIZE = 10.5 * scaleFactor; - TIME_TICK_THICKNESS = 4 * scaleFactor; - TIME_TICK_THICKNESS_A = 3 * scaleFactor; - TIME_TICK_THICKNESS_B = 7 * scaleFactor; - MAGNIFIER_IMAGE_UNSCALED_WIDTH = 50 * scaleFactor; - MAGNIFIER_SCALE = 2 * scaleFactor; - MAGNIFIER_PADDING = 7.5 * scaleFactor; - MAGNIFIER_FONT_SIZE = 11 * scaleFactor; - MAGNIFIER_ARROW_PROPORTION = 0.4 * scaleFactor; - MAGNIFIER_INDICATOR_THICKNESS = 3 * scaleFactor; - MAGNIFIER_CIRCLE_1 = 18 * scaleFactor; - MAGNIFIER_CIRCLE_2 = 14 * scaleFactor; - MAGNIFIER_CIRCLE_POS = 23 * scaleFactor; - MAGNIFIER_CURRENTTIMELABEL_THICKNESS = 1 * scaleFactor; - TOGGLEBUTTON_PADDING = 2 * scaleFactor; - TOGGLEBUTTON_FONT_SIZE = 9 * scaleFactor; - TOGGLEBUTTON_CORNERS = 2 * scaleFactor; - DIALOGBUTTON_PADDING = 10 * scaleFactor; - - FEEDBACK_FONT_SIZE = 60 * scaleFactor; - FEEDBACK_FADE_TIME = 250 * scaleFactor; - - MENU_GAP = 10 * scaleFactor; - MENU_CORNER_RADIUS = 5 * scaleFactor; - MENU_PADDING = 5 * scaleFactor; - MENU_BUTTON_GAP = 10 * scaleFactor; - MENU_BUTTON_WIDTH = 35 * scaleFactor; - MENU_BUTTON_HEIGHT = 35 * scaleFactor; - POPUP_SEPARATOR_LINE = 60 * scaleFactor; - POPUP_SEPARATOR_GAP = 5 * scaleFactor; - CONTEXTMENU_PADDING = 7.5 * scaleFactor; - CONTEXTMENU_BUTTON_PADDING = 5 * scaleFactor; - CONTEXTMENU_CORNERS = 5 * scaleFactor; - - WIDGET_CENTROID_SIZE = 10 * scaleFactor; - - BUTTON_SIZE = 15 * scaleFactor; - DIALOG_PADDING_20 = 20 * scaleFactor; - DIALOG_PADDING_15 = 15 * scaleFactor; - DIALOG_PADDING_10 = 10 * scaleFactor; - DIALOG_PADDING_5 = 5 * scaleFactor; - DIALOG_MEASUREMENT_25 = 50 * scaleFactor; - DIALOG_MEASUREMENT_50 = 50 * scaleFactor; - DIALOG_MEASUREMENT_100 = 100 * scaleFactor; - DIALOG_MEASUREMENT_300 = 300 * scaleFactor; - - X_POS_BUTTON = 600 * scaleFactor; - Y_POS_BUTTON = 450 * scaleFactor; - IMAGE_HELP_WIDTH = 750 * scaleFactor; - IMAGE_HELP_HEIGHT = 512 * scaleFactor; - } - - public static function scaleFont(scaleFactor:Number):void - { - FONT_LARGE = 26 * scaleFactor; - FONT_MEDIUM = 18 * scaleFactor; - FONT_STANDARD = 14 * scaleFactor - FONT_SMALL = 12 * scaleFactor; - FONT_XSMALL = 10 * scaleFactor; - } - } -} \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as index 41bbc000..453ceef4 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as @@ -8,261 +8,125 @@ */ package sg.edu.smu.ksketch2 { + public class KSketchStyles { - //scale - public static var SCALE:int = 1; - - //Application - public static const APP_BACKGROUND_COLOR:uint = 0xD0D2D3; - public static const APP_FONT_FAMILY:String = "Arial, Helvetica"; - - public static const BLACK_PEN:uint = 0x000000; - public static const BLUE_PEN:uint = 0x0000FF; - public static const GREEN_PEN:uint = 0x00FF00; - public static const RED_PEN:uint = 0xFF0000; - - //Login - public static var LOGIN_CONNECTION_FONT_SIZE:Number = 23; - //Canvas - public static const CANVAS_BUTTON_NORMAL:uint = 0xC8CCCE; - public static const CANVAS_BUTTON_ACTIVATED:uint = 0x505050; - public static const CANVAS_BUTTON_PLAY_ACTIVATED:uint = 0xDD1F26; - public static const CANVAS_BUTTON_SHADOW_COLOR:uint = 0x000000; - public static const CANVAS_BUTTON_SHADOW_STRENGTH:Number = 0.5; - public static const CANVAS_BUTTON_SHADOW_ALPHA:Number = 0.6; - public static const CANVAS_BUTTON_SHADOW_DISTANCE:Number = 3; - public static const CANVAS_BUTTON_SHADOW_ANGLE:Number = 50; - public static var CANVAS_BUTTON_CORNER_RADIUS:Number = 5; - - //Timebar Stuff - public static var TIMEBAR_LAYOUT_GAP:Number = 4; - public static var TIMEBAR_LAYOUT_PADDING_HORIZONTAL:Number = 5; - public static var TIMEBAR_LAYOUT_PADDING_VERTICAL:Number = 5; - public static const TIMEBAR_BACKGROUND_COLOR:uint = 0xA6A8AB; - public static var TIMEBAR_GAP_CONTEXTMENU_DOUBLE:int = 15; - public static var TIMEBAR_GAP_CONTEXTMENU_SINGLE:int = 100; - public static var TIMEBAR_X_LIMIT_DOUBLE:int = 875; - public static var TIMEBAR_X_LIMIT_SINGLE:int = 960; - public static var TIMEBAR_X_LIMIT_DOUBLE_ANDROID:int = 1100; - public static var TIMEBAR_X_LIMIT_SINGLE_ANDROID:int = 1200; - - public static const TIMEBAR_SHADOW_COLOR:uint = 0x000000; - public static const TIMEBAR_SHADOW_ALPHA:Number = 0.35; - public static const TIMEBAR_SHADOW_DISTANCE:Number = 8; - public static const TIMEBAR_SHADOW_ANGLE:Number = 90; - public static const TIMEBAR_SHADOW_STRENGTH:Number = 2; - - public static var TIMEBAR_PLAY_BUTTON_WIDTH:Number = 60; - public static var TIMEBAR_PLAY_BUTTON_HEIGHT:Number = 60; - public static var TIMEBAR_BUTTON_WIDTH:Number = 50; - public static var TIMEBAR_BUTTON_HEIGHT:Number = 50; - - public static var TIME_CONTROL_HEIGHT:Number = 80; - public static const TIME_CONTROL_BACKGROUND_COLOR:uint = 0xFFFFFF; - public static const TIME_CONTROL_FILL_COLOR:uint = 0xDD1F26; - public static const TIME_INDICATOR_COLOR:uint = 0x000000; - - public static var TIME_LABEL_FONT_SIZE:Number = 10; - public static const TIME_LABEL_FONT_COLOR:Number = 0x404041; - public static var TIME_PARTITION_FONT_SIZE:Number = 10.5; - - public static const TIME_TICK_KEYFRAME:uint = 0x6B0000; //for keyframes (passthrough = false) - public static const TIME_TICK_CONTROLPOINT:uint = 0x6B0000; //for controlpoints (passthroug = true) - public static var TIME_TICK_THICKNESS:Number = 4; - public static var TIME_TICK_THICKNESS_A:Number = 3; - public static var TIME_TICK_THICKNESS_B:Number = 7; - public static const TIME_TICK_SELECTED_ALPHA:Number = 1; - public static const TIME_TICK_UNSELECTED_ALPHA:Number = 0.5; - public static const ACTIVITY_COLOR:uint = 0xFF0000; - public static const ACTIVITY_OTHER_COLOR:uint = 0xC2C2C2; - public static const ACTIVITY_ALPHA:Number = 1.0; - - public static const MAGNIFIER_BACKGROUND_COLOR:uint = 0x000000; - public static var MAGNIFIER_IMAGE_UNSCALED_WIDTH:Number = 50; - public static var MAGNIFIER_SCALE:Number = 2; - public static var MAGNIFIER_PADDING:Number = 7.5; - public static var MAGNIFIER_FONT_SIZE:Number = 11; - public static const MAGNIFIER_FONT_COLOR:uint = 0xFFFFFF; - public static var MAGNIFIER_ARROW_PROPORTION:Number = 0.4; - public static var MAGNIFIER_INDICATOR_THICKNESS:Number = 3; - public static var MAGNIFIER_CIRCLE_1:int = 18; - public static var MAGNIFIER_CIRCLE_2:int = 14; - public static var MAGNIFIER_CIRCLE_POS:int = 23; - public static var MAGNIFIER_CURRENTTIMELABEL_THICKNESS:Number = 1; - public static const MAGNIFIER_CURRENTTIMELABEL_COLOR_MULTIPLIER:Number = 100; - - public static const TOGGLEBUTTON_ON_COLOR:uint = 0xFFFFFF; - public static const TOGGLEBUTTON_OFF_COLOR:uint = 0x000000; - public static var TOGGLEBUTTON_PADDING:Number = 2; - public static var TOGGLEBUTTON_FONT_SIZE:Number = 9; - public static var TOGGLEBUTTON_CORNERS:Number = 2; - - //Context menu - public static var CONTEXTMENU_PADDING:Number = 7.5; - public static var CONTEXTMENU_BUTTON_PADDING:Number = 5; - public static var CONTEXTMENU_CORNERS:Number = 5; - public static const CONTEXTMENU_BACKGROUND_COLOR:uint = 0x000000; - - //Canvas - public static const CANVAS_BACKGROUND_COLOR:uint = 0xA6A8AB; - public static const CANVAS_PAPER_COLOR:uint = 0xFFFFFF; - public static const CANVAS_BORDER_COLOR:uint = 0x000000; - public static var CANVAS_BORDER_WEIGHT:Number = 1; - public static const CANVAS_SHADOW_COLOR:uint = 0x000000; - public static const CANVAS_SHADOW_ALPHA:Number = 0.4; - public static const CANVAS_SHADOW_X_DISTANCE:Number = 12; - public static const CANVAS_SHADOW_Y_DISTANCE:Number = 12; - public static const CANVAS_SHADOW_ANGLE:Number = 45; - public static const CANVAS_SHADOW_STRENGTH:Number = 2; - - //Dialog button skins - public static var DIALOGBUTTON_PADDING:Number = 10; - public static var DIALOGBUTTON_FONT_SIZE:Number = 12; - - //Feedback Message - public static var FEEDBACK_FONT_SIZE:Number = 60; - public static var FEEDBACK_FADE_TIME:Number = 250; - public static const FEEDBACK_BACKGROUND_ALPHA:Number = 0; - - //Menu - public static var MENU_GAP:Number = 10; - public static var MENU_CORNER_RADIUS:Number = 5; - public static const MENU_BACKGROUND_COLOR:uint = 0xA6A8AB; - public static var MENU_PADDING:Number = 5; - public static var MENU_BUTTON_GAP:Number = 10; - public static var MENU_BUTTON_WIDTH:Number = 35; - public static var MENU_BUTTON_HEIGHT:Number = 35; - - //Widget - public static const WIDGET_ENABLED_ALPHA:Number = 1; - public static const WIDGET_DISABLED_ALPHA:Number = 0.2; - public static const WIDGET_INTERPOLATE_COLOR:uint = 0x6E6F71; - public static const WIDGET_PERFORM_COLOR:uint = 0x971C24; - public static var WIDGET_CENTROID_SIZE:Number = 10; //PIVOT - - //Logo - public static var LOGO_BUTTON_WIDTH:Number = 150; - public static var LOGO_BUTTON_HEIGHT:Number = 150; - public static var LOGO_PADDING_LEFT:Number = 80; - public static var LOGO_PADDING_TOP:Number = 40; - public static var LOGO_PADDING_BUTTON:Number = 10; - - //List of sketches - public static const LIST_SKETCH_GAP:int = 0; - public static var LIST_SKETCH_FONT:int = 20; - public static var LIST_SKETCH_LINE:int = 1000; - public static var LIST_SKETCH_WIDTH:Number = 74; - public static var LIST_SKETCH_HEIGHT:Number = 120; - public static var LIST_SKETCH_IMAGE_WIDTH:Number = 160; - public static var LIST_SKETCH_IMAGE_HEIGHT:Number = 90; - - //Pop up menu separator - public static var POPUP_SEPARATOR_LINE:int = 50; - public static var POPUP_SEPARATOR_GAP:int = 5; - - //General Button - public static var BUTTON_SIZE:int = 15; - public static var DIALOG_BUTTON_SIZE:int = 14; - public static var DIALOG_BUTTON_HEADER:int = 26; - public static var DIALOG_BUTTON_NORMAL_FONT:int = 18; - public static var DIALOG_BUTTON_SMALL_FONT:int = 10; - public static var DIALOG_PADDING_20:int = 20; - public static var DIALOG_PADDING_15:int = 15; - public static var DIALOG_PADDING_10:int = 10; - public static var DIALOG_PADDING_5:int = 5; - public static var DIALOG_MEASUREMENT_25:int = 50; - public static var DIALOG_MEASUREMENT_50:int = 50; - public static var DIALOG_MEASUREMENT_300:int = 300; - - //Help screen - public static var X_POS_BUTTON:int = 600; - public static var Y_POS_BUTTON:int = 450; - public static var IMAGE_HELP_WIDTH:int = 750; - public static var IMAGE_HELP_HEIGHT:int = 512; - - public static function scaleUp(scaleFactor:Number):void - { - SCALE = scaleFactor; - LOGIN_CONNECTION_FONT_SIZE = 23 * scaleFactor; - CANVAS_BUTTON_CORNER_RADIUS = 5 * scaleFactor; - TIMEBAR_LAYOUT_GAP = 4 * scaleFactor; - TIMEBAR_LAYOUT_PADDING_HORIZONTAL = 5 * scaleFactor; - TIMEBAR_LAYOUT_PADDING_VERTICAL = 5 * scaleFactor; - TIMEBAR_GAP_CONTEXTMENU_DOUBLE = 15 * (scaleFactor * 2); - TIMEBAR_GAP_CONTEXTMENU_SINGLE = 100 * scaleFactor; - TIMEBAR_X_LIMIT_DOUBLE = 875 * scaleFactor; - TIMEBAR_X_LIMIT_SINGLE = 960 * scaleFactor; - TIMEBAR_X_LIMIT_DOUBLE_ANDROID = 1100 * scaleFactor; - TIMEBAR_X_LIMIT_SINGLE_ANDROID = 1200 * scaleFactor; - TIMEBAR_PLAY_BUTTON_WIDTH = 60 * scaleFactor; - TIMEBAR_PLAY_BUTTON_HEIGHT = 60 * scaleFactor; - TIMEBAR_BUTTON_WIDTH = 50 * scaleFactor; - TIMEBAR_BUTTON_HEIGHT = 50 * scaleFactor; - TIME_CONTROL_HEIGHT = 80 * scaleFactor; - TIME_LABEL_FONT_SIZE = 10 * scaleFactor; - TIME_PARTITION_FONT_SIZE = 10.5 * scaleFactor; - TIME_TICK_THICKNESS = 4 * scaleFactor; - TIME_TICK_THICKNESS_A = 3 * scaleFactor; - TIME_TICK_THICKNESS_B = 7 * scaleFactor; - MAGNIFIER_IMAGE_UNSCALED_WIDTH = 50 * (scaleFactor); - MAGNIFIER_SCALE = 2 * (scaleFactor-0.8); - MAGNIFIER_PADDING = 7.5 * scaleFactor; - MAGNIFIER_FONT_SIZE = 11 * scaleFactor; - MAGNIFIER_ARROW_PROPORTION = 0.4 * (scaleFactor-0.5); - MAGNIFIER_INDICATOR_THICKNESS = 3 * scaleFactor; - MAGNIFIER_CURRENTTIMELABEL_THICKNESS = 1 * scaleFactor; - MAGNIFIER_CIRCLE_1 = 18 * (scaleFactor - 0.2); - MAGNIFIER_CIRCLE_2 = 14 * (scaleFactor - 0.2); - MAGNIFIER_CIRCLE_POS = 23 * (scaleFactor); - TOGGLEBUTTON_PADDING = 2 * scaleFactor; - TOGGLEBUTTON_FONT_SIZE = 9 * scaleFactor; - TOGGLEBUTTON_CORNERS = 2 * scaleFactor; - CONTEXTMENU_PADDING = 7.5 * scaleFactor; - CONTEXTMENU_BUTTON_PADDING = 5 * scaleFactor; - CONTEXTMENU_CORNERS = 5 * scaleFactor; - CANVAS_BORDER_WEIGHT = 1 * scaleFactor; - DIALOGBUTTON_PADDING = 10 * scaleFactor; - DIALOGBUTTON_FONT_SIZE = 12 * scaleFactor; - FEEDBACK_FONT_SIZE = 60 * scaleFactor; - FEEDBACK_FADE_TIME = 250 * scaleFactor; - MENU_GAP = 10 * scaleFactor; - MENU_CORNER_RADIUS = 5 * scaleFactor; - MENU_PADDING = 5 * scaleFactor; - MENU_BUTTON_GAP = 10 * scaleFactor; - MENU_BUTTON_WIDTH = 35 * scaleFactor; - MENU_BUTTON_HEIGHT = 35 * scaleFactor; - WIDGET_CENTROID_SIZE = 10 * (scaleFactor - 0.7); - LOGO_BUTTON_WIDTH = 150 * scaleFactor; - LOGO_BUTTON_HEIGHT = 150 * scaleFactor; - LOGO_PADDING_LEFT = 80 * scaleFactor; - LOGO_PADDING_TOP = 40 * scaleFactor; - LOGO_PADDING_BUTTON = 10 * scaleFactor; - BUTTON_SIZE = 12 * scaleFactor; - LIST_SKETCH_FONT = 20 * (scaleFactor - 0.5); - LIST_SKETCH_LINE = 1000 * (scaleFactor - 0.5); - LIST_SKETCH_IMAGE_WIDTH = 160 * (scaleFactor - 0.5); - LIST_SKETCH_IMAGE_HEIGHT = 90 * (scaleFactor - 0.5); - LIST_SKETCH_WIDTH = 74 * (scaleFactor - 0.5); - LIST_SKETCH_HEIGHT = 120 * (scaleFactor - 0.5); - POPUP_SEPARATOR_LINE = 50 * scaleFactor; - POPUP_SEPARATOR_GAP = 5 * scaleFactor; - BUTTON_SIZE = 15 * (scaleFactor - 0.5); - DIALOG_BUTTON_SIZE = 14 * scaleFactor; - DIALOG_BUTTON_HEADER = 26 * scaleFactor; - DIALOG_BUTTON_NORMAL_FONT = 18 * scaleFactor; - DIALOG_BUTTON_SMALL_FONT = 10 * scaleFactor; - DIALOG_PADDING_20 = 20 * scaleFactor; - DIALOG_PADDING_15 = 15 * scaleFactor; - DIALOG_PADDING_10 = 10 * scaleFactor; - DIALOG_PADDING_5 = 5 * scaleFactor; - DIALOG_MEASUREMENT_25 = 25 * (scaleFactor * 2); - DIALOG_MEASUREMENT_50 = 50 * scaleFactor; - DIALOG_MEASUREMENT_300 = 300 * scaleFactor; - X_POS_BUTTON = 600 * scaleFactor; - Y_POS_BUTTON = 450 * scaleFactor; - IMAGE_HELP_WIDTH = 750 * scaleFactor; - IMAGE_HELP_HEIGHT = 512 * scaleFactor; + //ANGLE VALUES + public static const ANGLE_50:Number = 50; + + //SHADOW DISTANCE MEASUREMENTS + public static const SHADOW_DIST_03:Number = 3; + public static const SHADOW_DIST_12:Number = 12; + + //ALPHA VALUES + public static const ALPHA_00:Number = 0; + public static const ALPHA_02:Number = 0.2; + public static const ALPHA_04:Number = 0.4; + public static const ALPHA_05:Number = 0.5; + public static const ALPHA_06:Number = 0.6; + public static const ALPHA_1:Number = 1; + + //COLOR VALUES + public static const COLOR_WHITE:uint = 0xFFFFFF; + public static const COLOR_BLACK:uint = 0x000000; + public static const COLOR_RED_LIGHT:uint = 0xDD1F26; + public static const COLOR_RED:uint = 0xFF0000; + public static const COLOR_RED_DARK:uint = 0x6B0000; + public static const COLOR_GREY_VERYLIGHT:uint = 0xD0D2D3; + public static const COLOR_GREY_LIGHT:uint = 0xC8CCCE; + public static const COLOR_GREY_MEDIUM:uint = 0xA6A8AB; + public static const COLOR_GREY_DARK:uint = 0x505050; + public static const COLOR_BLUE:uint = 0x0000FF; + public static const COLOR_GREEN:uint = 0x00FF00; + + //FONT VALUES + public static const FONT_FAMILY:String = "Arial, Helvetica"; + public static var FONT_SIZE_14:Number = 14; + public static var FONT_SIZE_18:Number = 18; + public static var FONT_SIZE_26:Number = 26; + public static var FONT_SIZE_60:Number = 60; + + //SCALE FACTOR + public static var SCALE:Number = 1; + + //MEASUREMENTS + public static var NUMBER_01:Number = 1; + public static var NUMBER_02:Number = 2; + public static var NUMBER_03:Number = 3; + public static var NUMBER_04:Number = 4; + public static var NUMBER_05:Number = 5; + public static var NUMBER_07:Number = 7; + public static var NUMBER_075:Number = 7.5; + public static var NUMBER_10:Number = 10; + public static var NUMBER_0105:Number = 10.5; + public static var NUMBER_12:Number = 12; + public static var NUMBER_14:Number = 14; + public static var NUMBER_15:Number = 15; + public static var NUMBER_18:Number = 18; + public static var NUMBER_20:Number = 20; + public static var NUMBER_23:Number = 23; + public static var NUMBER_25:Number = 25; + public static var NUMBER_40:Number = 40; + public static var NUMBER_50:Number = 50; + public static var NUMBER_60:Number = 60; + public static var NUMBER_74:Number = 74; + public static var NUMBER_80:Number = 80; + public static var NUMBER_90:Number = 90; + public static var NUMBER_100:Number = 100; + public static var NUMBER_120:Number = 120; + public static var NUMBER_150:Number = 150; + public static var NUMBER_160:Number = 160; + public static var NUMBER_250:Number = 250; + public static var NUMBER_300:Number = 300; + public static var NUMBER_875:Number = 875; + public static var NUMBER_960:Number = 960; + public static var NUMBER_1000:Number = 1000; + public static var NUMBER_1100:Number = 1100; + public static var NUMBER_1200:Number = 1200; + + public static function scale(scale:int):void + { + trace("Scaling by " + scale); + FONT_SIZE_14 = 14 * scale; + FONT_SIZE_18 = 18 * scale; + FONT_SIZE_26 = 26 * scale; + FONT_SIZE_60 = 60 * scale; + + SCALE = 1 * scale; + + NUMBER_01 = 1 * scale; + NUMBER_02 = 2 * scale; + NUMBER_03 = 3 * scale; + NUMBER_04 = 4 * scale; + NUMBER_05 = 5 * scale; + NUMBER_07 = 7 * scale; + NUMBER_075 = 7.5 * scale; + NUMBER_10 = 10 * scale; + NUMBER_0105 = 10.5 * scale; + NUMBER_12 = 12 * scale; + NUMBER_14 = 14 * scale; + NUMBER_15 = 15 * scale; + NUMBER_18 = 18 * scale; + NUMBER_20 = 20 * scale; + NUMBER_23 = 23 * scale; + NUMBER_25 = 25 * scale; + NUMBER_40 = 40 * scale; + NUMBER_50 = 50 * scale; + NUMBER_60 = 60 * scale; + NUMBER_74 = 74 * scale; + NUMBER_80 = 80 * scale; + NUMBER_90 = 90 * scale; + NUMBER_100 = 100 * scale; + NUMBER_120 = 120 * scale; + NUMBER_150 = 150 * scale; + NUMBER_160 = 160 * scale; + NUMBER_250 = 250 * scale; + NUMBER_300 = 300 * scale; + NUMBER_875 = 875 * scale; + NUMBER_960 = 960 * scale; + NUMBER_1000 = 1000 * scale; + NUMBER_1100 = 1100 * scale; + NUMBER_1200 = 1200 * scale; } } } \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Canvas_Button_Skin.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Canvas_Button_Skin.mxml index 62ab32ff..db2b92dd 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Canvas_Button_Skin.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Canvas_Button_Skin.mxml @@ -46,7 +46,7 @@ import sg.edu.smu.ksketch2.KSketchStyles; [Bindable] - public var upColor:uint = KSketchStyles.CANVAS_BUTTON_NORMAL; + public var upColor:uint = KSketchStyles.COLOR_GREY_LIGHT; ]]> @@ -60,25 +60,25 @@ - + + color.over="{KSketchStyles.COLOR_GREY_DARK}" + color.down="{KSketchStyles.COLOR_GREY_DARK}" + color.disabled="{KSketchStyles.COLOR_GREY_LIGHT}"/> @@ -86,7 +86,7 @@ - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Dialog_Button_Skin.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Dialog_Button_Skin.mxml index b95867a2..dd17d396 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Dialog_Button_Skin.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Dialog_Button_Skin.mxml @@ -81,10 +81,10 @@ + paddingLeft="{KSketchStyles.NUMBER_10}" paddingRight="{KSketchStyles.NUMBER_10}" + paddingTop="{KSketchStyles.NUMBER_10}" paddingBottom="{KSketchStyles.NUMBER_10}"/> - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_OnOff_Toggle.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_OnOff_Toggle.mxml index 473d07e2..d018ba32 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_OnOff_Toggle.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_OnOff_Toggle.mxml @@ -22,16 +22,16 @@ if(_on) { - onLabel.setStyle("color", KSketchStyles.TOGGLEBUTTON_ON_COLOR); + onLabel.setStyle("color", KSketchStyles.COLOR_WHITE); onStroke.alpha = 1; - offLabel.setStyle("color",KSketchStyles.TOGGLEBUTTON_OFF_COLOR); + offLabel.setStyle("color",KSketchStyles.COLOR_BLACK); offStroke.alpha = 0; } else { - onLabel.setStyle("color", KSketchStyles.TOGGLEBUTTON_OFF_COLOR); + onLabel.setStyle("color", KSketchStyles.COLOR_BLACK); onStroke.alpha = 0; - offLabel.setStyle("color",KSketchStyles.TOGGLEBUTTON_ON_COLOR); + offLabel.setStyle("color",KSketchStyles.COLOR_WHITE); offStroke.alpha = 1; } @@ -55,32 +55,32 @@ + radiusX="{KSketchStyles.NUMBER_02}" + radiusY="{KSketchStyles.NUMBER_02}"> - + - + radiusX="{KSketchStyles.NUMBER_02}" + radiusY="{KSketchStyles.NUMBER_02}"> - + - diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Play_Button.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Play_Button.mxml index c63bd5a8..1943b742 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Play_Button.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Play_Button.mxml @@ -138,7 +138,7 @@ else textureControl.source = KSketchAssets.texture_pause; - (skin as KSketch_Canvas_Button_Skin).upColor = KSketchStyles.CANVAS_BUTTON_PLAY_ACTIVATED; + (skin as KSketch_Canvas_Button_Skin).upColor = KSketchStyles.COLOR_RED; } ]]> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Toggle_Button.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Toggle_Button.mxml index 373278cd..57afc14c 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Toggle_Button.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Toggle_Button.mxml @@ -33,14 +33,14 @@ var textureControl:Image = (skin as KSketch_Canvas_Button_Skin).texture; textureControl.source = _up; - (skin as KSketch_Canvas_Button_Skin).backgroundFill.color = KSketchStyles.CANVAS_BUTTON_NORMAL; - (skin as KSketch_Canvas_Button_Skin).upColor = KSketchStyles.CANVAS_BUTTON_NORMAL; + (skin as KSketch_Canvas_Button_Skin).backgroundFill.color = KSketchStyles.COLOR_GREY_LIGHT; + (skin as KSketch_Canvas_Button_Skin).upColor = KSketchStyles.COLOR_GREY_LIGHT; if(_selected) { textureControl.source = _down; - (skin as KSketch_Canvas_Button_Skin).backgroundFill.color = KSketchStyles.CANVAS_BUTTON_ACTIVATED; - (skin as KSketch_Canvas_Button_Skin).upColor = KSketchStyles.CANVAS_BUTTON_ACTIVATED; + (skin as KSketch_Canvas_Button_Skin).backgroundFill.color = KSketchStyles.COLOR_GREY_DARK; + (skin as KSketch_Canvas_Button_Skin).upColor = KSketchStyles.COLOR_GREY_DARK; } } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml index c0d354a7..7e69006f 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml @@ -47,8 +47,8 @@ _homeView.navigateToScreen('RELOGIN'); } private function init():void { - notificationLabel.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_NORMAL_FONT); - okButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); + notificationLabel.setStyle("fontSize", KSketchStyles.FONT_SIZE_18); + okButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); this.removeEventListener(FlexEvent.INITIALIZE, init); okButton.label = "Ok"; @@ -70,28 +70,28 @@ + color="{KSketchStyles.COLOR_BLACK}" angle="{KSketchStyles.ANGLE_50}" + alpha="{KSketchStyles.ALPHA_06}" + strength="{KSketchStyles.NUMBER_02}" + blurX="{KSketchStyles.NUMBER_10}" + blurY="{KSketchStyles.NUMBER_10}"/> - + - + - + - + - - + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Feedback_Message.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Feedback_Message.mxml index 5b646fcb..36ae3689 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Feedback_Message.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Feedback_Message.mxml @@ -9,7 +9,7 @@ *http://mozilla.org/MPL/2.0/. --> + xmlns:s="library://ns.adobe.com/flex/spark" backgroundAlpha="0"> - \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Help.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Help.mxml index de8247e3..40ff7a88 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Help.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Help.mxml @@ -30,9 +30,9 @@ private function initStyle():void { this.removeEventListener(FlexEvent.INITIALIZE, initStyle); - header.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_HEADER); - moreButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); - closeButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); + header.setStyle("fontSize", KSketchStyles.FONT_SIZE_26); + moreButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + closeButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); } public function init(canvasView:KSketch_CanvasView, menu:KSketch_PopUp_Menu):void @@ -62,32 +62,32 @@ + color="{KSketchStyles.COLOR_BLACK}" angle="{KSketchStyles.ANGLE_50}" + alpha="{KSketchStyles.ALPHA_06}" + strength="{KSketchStyles.NUMBER_02}" + blurX="{KSketchStyles.NUMBER_10}" + blurY="{KSketchStyles.NUMBER_10}"/> - + - + - + - + - + - + - - + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_ImageImport_Control.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_ImageImport_Control.mxml index 6cab6bc0..ec65e027 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_ImageImport_Control.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_ImageImport_Control.mxml @@ -25,6 +25,7 @@ import sg.edu.smu.ksketch2.KSketch2; import sg.edu.smu.ksketch2.KSketchAssets; import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchStyles; import sg.edu.smu.ksketch2.KSketch_ImageEditingView; import sg.edu.smu.ksketch2.canvas.components.buttons.KSketch_Dialog_Button_Skin; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_CanvasView; @@ -502,15 +503,15 @@ + color="{sg.edu.smu.ksketch2.KSketchStyles.COLOR_BLACK}" angle="{sg.edu.smu.ksketch2.KSketchStyles.ANGLE_50}" + alpha="{sg.edu.smu.ksketch2.KSketchStyles.ALPHA_06}" + strength="{sg.edu.smu.ksketch2.KSketchStyles.NUMBER_02}" + blurX="{sg.edu.smu.ksketch2.KSketchStyles.NUMBER_10}" + blurY="{sg.edu.smu.ksketch2.KSketchStyles.NUMBER_10}"/> - + - + @@ -521,7 +522,7 @@ paddingLeft="{IMAGE_EDIT_EXTERNALPADDING}" paddingRight="{IMAGE_EDIT_EXTERNALPADDING}" paddingTop="{IMAGE_EDIT_EXTERNALPADDING}" paddingBottom="{IMAGE_EDIT_EXTERNALPADDING}"/> - diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml index 211c7251..d416439c 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml @@ -25,10 +25,10 @@ private function initStyle():void { this.removeEventListener(FlexEvent.INITIALIZE, initStyle); - label_1.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_NORMAL_FONT); - label_2.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_NORMAL_FONT); - cancelButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); - logoutButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); + label_1.setStyle("fontSize", KSketchStyles.FONT_SIZE_18); + label_2.setStyle("fontSize", KSketchStyles.FONT_SIZE_18); + cancelButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + logoutButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); } override public function open(owner:DisplayObjectContainer, modal:Boolean=false):void @@ -54,30 +54,30 @@ + color="{KSketchStyles.COLOR_BLACK}" angle="{KSketchStyles.ANGLE_50}" + alpha="{KSketchStyles.ALPHA_06}" + strength="{KSketchStyles.NUMBER_02}" + blurX="{KSketchStyles.NUMBER_10}" + blurY="{KSketchStyles.NUMBER_10}"/> - + - + - + - + - - + + \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Options.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Options.mxml index 459c34e0..46fd6e5f 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Options.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Options.mxml @@ -31,11 +31,11 @@ private function initStyle():void { this.removeEventListener(FlexEvent.INITIALIZE, initStyle); - header.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_HEADER); - autoInsertKey.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_NORMAL_FONT); - doubleTap.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_NORMAL_FONT); - autoLog.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_NORMAL_FONT); - closeButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); + header.setStyle("fontSize", KSketchStyles.FONT_SIZE_26); + autoInsertKey.setStyle("fontSize", KSketchStyles.FONT_SIZE_18); + doubleTap.setStyle("fontSize", KSketchStyles.FONT_SIZE_18); + autoLog.setStyle("fontSize", KSketchStyles.FONT_SIZE_18); + closeButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); } public function init(canvasView:KSketch_CanvasView, menu:KSketch_PopUp_Menu):void @@ -279,20 +279,20 @@ + color="{KSketchStyles.COLOR_BLACK}" angle="{KSketchStyles.ANGLE_50}" + alpha="{KSketchStyles.ALPHA_06}" + strength="{KSketchStyles.NUMBER_02}" + blurX="{KSketchStyles.NUMBER_10}" + blurY="{KSketchStyles.NUMBER_10}"/> - + - + - + @@ -366,30 +366,30 @@ --> - + - + - + - + - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml index f4bb73a8..01b922e4 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml @@ -33,9 +33,9 @@ private function initStyle():void { this.removeEventListener(FlexEvent.INITIALIZE, initStyle); - label.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_NORMAL_FONT); - cancelButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); - saveButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); + label.setStyle("fontSize", KSketchStyles.FONT_SIZE_18); + cancelButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + saveButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); } public function init(canvasView:KSketch_CanvasView, saveOptions:KSketch_SaveOptions):void @@ -72,34 +72,34 @@ + color="{KSketchStyles.COLOR_BLACK}" angle="{KSketchStyles.ANGLE_50}" + alpha="{KSketchStyles.ALPHA_06}" + strength="{KSketchStyles.NUMBER_02}" + blurX="{KSketchStyles.NUMBER_10}" + blurY="{KSketchStyles.NUMBER_10}"/> - + - + - + - + - + - - + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml index 651a30e7..6c493ba8 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml @@ -26,7 +26,6 @@ import sg.edu.smu.ksketch2.KSketchAssets; import sg.edu.smu.ksketch2.KSketchStyles; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_CanvasView; - import sg.edu.smu.ksketch2.canvas.controls.KFileControl; import sg.edu.smu.ksketch2.canvas.controls.KInteractionControl; import sg.edu.smu.ksketch2.canvas.controls.interactors.KCanvasInteractorManager; import sg.edu.smu.ksketch2.canvas.controls.interactors.KMultiTouchDrawInteractor; @@ -170,18 +169,18 @@ case UP: default: x = _canvasOrigin.x + (_referenceComponent.width/2) - (width/2); - y = _canvasOrigin.y + KSketchStyles.MENU_GAP; + y = _canvasOrigin.y + KSketchStyles.NUMBER_10; break; case DOWN: x = _canvasOrigin.x + (_referenceComponent.width/2) - (width/2); - y = _canvasOrigin.y + _referenceComponent.height - height - KSketchStyles.MENU_GAP; + y = _canvasOrigin.y + _referenceComponent.height - height - KSketchStyles.NUMBER_10; break; case LEFT: - x = _canvasOrigin.x + KSketchStyles.MENU_GAP; + x = _canvasOrigin.x + KSketchStyles.NUMBER_10; y = _canvasOrigin.y + (_referenceComponent.height/2) - (height/2); break; case RIGHT: - x = _canvasOrigin.x + _referenceComponent.width - width - KSketchStyles.MENU_GAP; + x = _canvasOrigin.x + _referenceComponent.width - width - KSketchStyles.NUMBER_10; y = _canvasOrigin.y + (_referenceComponent.height/2) - (height/2); break; } @@ -208,25 +207,25 @@ case blackToggle: KMultiTouchDrawInteractor.eraser = false; _canvasControl.lasso = false; - KDrawInteractor.penColor = KSketchStyles.BLACK_PEN; + KDrawInteractor.penColor = KSketchStyles.COLOR_BLACK; selectedTool = "Black Pen"; break; case blueToggle: KMultiTouchDrawInteractor.eraser = false; _canvasControl.lasso = false; - KDrawInteractor.penColor = KSketchStyles.BLUE_PEN; + KDrawInteractor.penColor = KSketchStyles.COLOR_BLUE; selectedTool = "Blue Pen"; break; case redToggle: KMultiTouchDrawInteractor.eraser = false; _canvasControl.lasso = false; - KDrawInteractor.penColor = KSketchStyles.RED_PEN; + KDrawInteractor.penColor = KSketchStyles.COLOR_RED; selectedTool = "Red Pen"; break; case greenToggle: KMultiTouchDrawInteractor.eraser = false; _canvasControl.lasso = false; - KDrawInteractor.penColor = KSketchStyles.GREEN_PEN; + KDrawInteractor.penColor = KSketchStyles.COLOR_GREEN; selectedTool = "Green Pen"; break; case lassoToggle: @@ -458,141 +457,141 @@ + color="{KSketchStyles.COLOR_BLACK}" angle="{KSketchStyles.ANGLE_50}" + alpha="{KSketchStyles.ALPHA_06}" + strength="{KSketchStyles.NUMBER_02}" + blurX="{KSketchStyles.NUMBER_10}" + blurY="{KSketchStyles.NUMBER_10}"/> - + - + + horizontalGap="{KSketchStyles.NUMBER_10}" verticalGap="{KSketchStyles.NUMBER_10}" + paddingLeft="{KSketchStyles.NUMBER_05}" paddingRight="{KSketchStyles.NUMBER_05}" + paddingBottom="{KSketchStyles.NUMBER_05}" paddingTop="{KSketchStyles.NUMBER_05}"/> - + - + - + - + - + - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml index fb787bb6..4336b188 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml @@ -65,12 +65,12 @@ private function initStyle():void { this.removeEventListener(FlexEvent.INITIALIZE, initStyle); - header.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_HEADER); - title.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_NORMAL_FONT); - saveAsWarning.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SMALL_FONT); - saveButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); - discardButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); - cancelButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); + header.setStyle("fontSize", KSketchStyles.FONT_SIZE_26); + title.setStyle("fontSize", KSketchStyles.FONT_SIZE_18); + saveAsWarning.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + saveButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + discardButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + cancelButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); } override public function open(owner:DisplayObjectContainer, modal:Boolean=false):void @@ -409,39 +409,39 @@ + color="{KSketchStyles.COLOR_BLACK}" angle="{KSketchStyles.ANGLE_50}" + alpha="{KSketchStyles.ALPHA_06}" + strength="{KSketchStyles.NUMBER_02}" + blurX="{KSketchStyles.NUMBER_10}" + blurY="{KSketchStyles.NUMBER_10}"/> - + - + - + - + - + - + - - - + + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SharingOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SharingOptions.mxml index 679c3c95..9994ded3 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SharingOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SharingOptions.mxml @@ -30,11 +30,11 @@ private function initStyle():void { this.removeEventListener(FlexEvent.INITIALIZE, initStyle); - header.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_HEADER); - mailLabel.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); - facebookLabel.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); - twitterLabel.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); - closeButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); + header.setStyle("fontSize", KSketchStyles.FONT_SIZE_26); + mailLabel.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + facebookLabel.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + twitterLabel.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + closeButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); } private function _initButtons():void @@ -85,63 +85,63 @@ + color="{KSketchStyles.COLOR_BLACK}" angle="{KSketchStyles.ANGLE_50}" + alpha="{KSketchStyles.ALPHA_06}" + strength="{KSketchStyles.NUMBER_02}" + blurX="{KSketchStyles.NUMBER_10}" + blurY="{KSketchStyles.NUMBER_10}"/> - + - + - + - + - + - + - + @@ -150,9 +150,9 @@ - + - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml index dbfb7b73..cf2a8f99 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml @@ -94,9 +94,9 @@ { this.removeEventListener(FlexEvent.INITIALIZE, init); - syncLabel.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_NORMAL_FONT); - syncWeb.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); - discardAll.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); + syncLabel.setStyle("fontSize", KSketchStyles.FONT_SIZE_18); + syncWeb.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + discardAll.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); resultArr = new Array(syncSketchArr.length); statusArr = new Array(syncSketchArr.length); @@ -319,30 +319,30 @@ + color="{KSketchStyles.COLOR_BLACK}" angle="{KSketchStyles.ANGLE_50}" + alpha="{KSketchStyles.ALPHA_06}" + strength="{KSketchStyles.NUMBER_02}" + blurX="{KSketchStyles.NUMBER_10}" + blurY="{KSketchStyles.NUMBER_10}"/> - + - + - + - + - - + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Double.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Double.mxml index 5951090a..338169d9 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Double.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Double.mxml @@ -423,17 +423,17 @@ - + + radiusX="{KSketchStyles.NUMBER_05}" + radiusY="{KSketchStyles.NUMBER_05}"> - + @@ -443,42 +443,42 @@ - + + paddingTop="{KSketchStyles.NUMBER_075}" paddingBottom="{KSketchStyles.NUMBER_075}" + paddingLeft="{KSketchStyles.NUMBER_075}" paddingRight="{KSketchStyles.NUMBER_075}"/> @@ -488,7 +488,7 @@ - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Single.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Single.mxml index e323a5ca..321a5f32 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Single.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Single.mxml @@ -135,27 +135,27 @@ - + - + + paddingTop="{KSketchStyles.NUMBER_075}" paddingBottom="{KSketchStyles.NUMBER_075}" + paddingLeft="{KSketchStyles.NUMBER_075}" paddingRight="{KSketchStyles.NUMBER_075}"/> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Magnifier.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Magnifier.mxml index 84e09119..9765d402 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Magnifier.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Magnifier.mxml @@ -44,8 +44,8 @@ //Display for the magnified timeline _magnifiedImage = new Image(); - _magnifiedImage.scaleX = KSketchStyles.MAGNIFIER_SCALE; - _magnifiedImage.scaleY = KSketchStyles.MAGNIFIER_SCALE; + _magnifiedImage.scaleX = KSketchStyles.NUMBER_02; + _magnifiedImage.scaleY = KSketchStyles.NUMBER_02; _sourceRect = new Rectangle(); @@ -72,14 +72,14 @@ if(_timeControl.position == KSketch_TimeControl.BAR_TOP) { //Place this popup at top, below the time bar - y = topLimit + KSketchStyles.MENU_GAP; + y = topLimit + KSketchStyles.NUMBER_10; appBounds = magContents.getBounds(FlexGlobals.topLevelApplication as Application); indicator.graphics.clear(); indicatorTouch.graphics.clear(); - indicator.graphics.lineStyle(KSketchStyles.MAGNIFIER_INDICATOR_THICKNESS,KSketchStyles.MAGNIFIER_BACKGROUND_COLOR); - indicatorTouch.graphics.beginFill(KSketchStyles.MAGNIFIER_BACKGROUND_COLOR); + indicator.graphics.lineStyle(KSketchStyles.NUMBER_02,KSketchStyles.COLOR_BLACK); + indicatorTouch.graphics.beginFill(KSketchStyles.COLOR_BLACK); indicatorTouch.graphics.drawCircle(0, -25, 14); indicatorTouch.graphics.endFill(); indicatorTouch.graphics.beginFill(0xffffff); @@ -95,7 +95,7 @@ else { //Place this popup above the timebar at the bottom of the canvas - y = bottomLimit - height - KSketchStyles.MENU_BUTTON_GAP; + y = bottomLimit - height - KSketchStyles.NUMBER_10; //Compute and draw the indicator var maxY:Number = (FlexGlobals.topLevelApplication as Application).height - y; @@ -103,12 +103,12 @@ indicator.graphics.clear(); indicatorTouch.graphics.clear(); - indicator.graphics.lineStyle(KSketchStyles.MAGNIFIER_INDICATOR_THICKNESS,KSketchStyles.MAGNIFIER_BACKGROUND_COLOR); - indicatorTouch.graphics.beginFill(KSketchStyles.MAGNIFIER_BACKGROUND_COLOR); - indicatorTouch.graphics.drawCircle(0, maxY-KSketchStyles.MAGNIFIER_CIRCLE_POS, KSketchStyles.MAGNIFIER_CIRCLE_1); + indicator.graphics.lineStyle(KSketchStyles.NUMBER_02,KSketchStyles.COLOR_BLACK); + indicatorTouch.graphics.beginFill(KSketchStyles.COLOR_BLACK); + indicatorTouch.graphics.drawCircle(0, maxY-KSketchStyles.NUMBER_23, KSketchStyles.NUMBER_18); indicatorTouch.graphics.endFill(); indicatorTouch.graphics.beginFill(0xffffff); - indicatorTouch.graphics.drawCircle(0, maxY-KSketchStyles.MAGNIFIER_CIRCLE_POS, KSketchStyles.MAGNIFIER_CIRCLE_2); + indicatorTouch.graphics.drawCircle(0, maxY-KSketchStyles.NUMBER_23, KSketchStyles.NUMBER_14); indicatorTouch.graphics.endFill(); var finalHeight_1:Number = height; @@ -128,7 +128,7 @@ indicator.graphics.lineTo(0, finalHeight_2); } - _sourceRect.width = KSketchStyles.MAGNIFIER_IMAGE_UNSCALED_WIDTH; + _sourceRect.width = KSketchStyles.NUMBER_50; _sourceRect.height = _timeControl.contentGroup.height/2.5; _sourceRect.y = 0; _magnifiedData = new BitmapData(_sourceRect.width, _sourceRect.height); @@ -169,9 +169,9 @@ //Copy out the pixels from the source _sourceRect.x = xPos-(_sourceRect.width*0.5); - _magnifiedData = new BitmapData(_magnifiedData.width, _magnifiedData.height ,true, KSketchStyles.MAGNIFIER_BACKGROUND_COLOR); + _magnifiedData = new BitmapData(_magnifiedData.width, _magnifiedData.height ,true, KSketchStyles.COLOR_BLACK); _magnifiedData.copyPixels(bd, _sourceRect, ORIGIN); - _magnifiedData.merge(bitmapdata, bd.rect, new Point(KSketchStyles.MAGNIFIER_IMAGE_UNSCALED_WIDTH/2,0), + _magnifiedData.merge(bitmapdata, bd.rect, new Point(KSketchStyles.NUMBER_50/2,0), KSketchStyles.MAGNIFIER_CURRENTTIMELABEL_COLOR_MULTIPLIER, KSketchStyles.MAGNIFIER_CURRENTTIMELABEL_COLOR_MULTIPLIER, KSketchStyles.MAGNIFIER_CURRENTTIMELABEL_COLOR_MULTIPLIER, @@ -203,9 +203,9 @@ -magContents.width*0.5 causes the objects to be centered at 0 --> - + - + @@ -213,16 +213,16 @@ + paddingTop="{KSketchStyles.NUMBER_075}" paddingBottom="{KSketchStyles.NUMBER_075}" + paddingLeft="{KSketchStyles.NUMBER_075}" paddingRight="{KSketchStyles.NUMBER_075}"/> - + - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Widget_ContextMenu.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Widget_ContextMenu.mxml index 9f250fef..e7d12b75 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Widget_ContextMenu.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Widget_ContextMenu.mxml @@ -205,49 +205,49 @@ - + - + - + - + + paddingLeft="{KSketchStyles.NUMBER_05}" + paddingRight="{KSketchStyles.NUMBER_05}" + paddingTop="{KSketchStyles.NUMBER_05}" + paddingBottom="{KSketchStyles.NUMBER_05}"/> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TickMark_Control.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TickMark_Control.as index 54a9041e..e16fa813 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TickMark_Control.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TickMark_Control.as @@ -230,7 +230,7 @@ package sg.edu.smu.ksketch2.canvas.components.timebar //Rigth now it is drawing if and only if there is only 1 object selected if(_interactionControl.selection && _interactionControl.selection.objects.length() == 1) { - _timeControl.unselectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.TIME_TICK_THICKNESS, KSketchStyles.ACTIVITY_OTHER_COLOR); + _timeControl.unselectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.NUMBER_04, KSketchStyles.COLOR_GREY_LIGHT); drawTarget = _timeControl.activityDisplay; @@ -254,12 +254,12 @@ package sg.edu.smu.ksketch2.canvas.components.timebar if(firstFrame) { if(firstFrame.passthrough) - _timeControl.selectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.TIME_TICK_THICKNESS_A, KSketchStyles.TIME_TICK_CONTROLPOINT); + _timeControl.selectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.NUMBER_03, KSketchStyles.COLOR_RED_DARK); else - _timeControl.selectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.TIME_TICK_THICKNESS_B, KSketchStyles.TIME_TICK_KEYFRAME); + _timeControl.selectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.NUMBER_07, KSketchStyles.COLOR_BLACK); } else - _timeControl.selectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.TIME_TICK_THICKNESS_A, KSketchStyles.TIME_TICK_CONTROLPOINT); + _timeControl.selectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.NUMBER_03, KSketchStyles.COLOR_RED_DARK); if(drawTarget.x <= currentX) { @@ -273,7 +273,7 @@ package sg.edu.smu.ksketch2.canvas.components.timebar { if((currentMarker.key as ISpatialKeyFrame).hasActivityAtTime()) { - drawTarget.graphics.beginFill(KSketchStyles.ACTIVITY_COLOR, 0.6); + drawTarget.graphics.beginFill(KSketchStyles.COLOR_RED, KSketchStyles.ALPHA_06); drawTarget.graphics.drawRect(currentMarker.prev.x, 0, currentMarker.x - currentMarker.prev.x, drawTarget.height); drawTarget.graphics.endFill(); } @@ -285,8 +285,8 @@ package sg.edu.smu.ksketch2.canvas.components.timebar } else { - _timeControl.unselectedTickMarkDisplay.alpha = KSketchStyles.TIME_TICK_SELECTED_ALPHA; - _timeControl.unselectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.TIME_TICK_THICKNESS_A, KSketchStyles.ACTIVITY_OTHER_COLOR); + _timeControl.unselectedTickMarkDisplay.alpha = KSketchStyles.ALPHA_1; + _timeControl.unselectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.NUMBER_03, KSketchStyles.COLOR_GREY_LIGHT); } //Draw unselected markers diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeControl.as index 26288e0b..a8c01139 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeControl.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeControl.as @@ -251,17 +251,17 @@ package sg.edu.smu.ksketch2.canvas.components.timebar if(Capabilities.version.indexOf('IOS') > -1) { - if(_contextDouble.x >= KSketchStyles.TIMEBAR_X_LIMIT_DOUBLE) - _contextDouble.x = KSketchStyles.TIMEBAR_X_LIMIT_DOUBLE; + if(_contextDouble.x >= KSketchStyles.NUMBER_875) + _contextDouble.x = KSketchStyles.NUMBER_875; } else { - if(_contextDouble.x >= KSketchStyles.TIMEBAR_X_LIMIT_DOUBLE_ANDROID) - _contextDouble.x = KSketchStyles.TIMEBAR_X_LIMIT_DOUBLE_ANDROID; + if(_contextDouble.x >= KSketchStyles.NUMBER_1100) + _contextDouble.x = KSketchStyles.NUMBER_1100; } _contextDouble.position = position; - _contextDouble.y = contentGroup.localToGlobal(new Point()).y + contentGroup.y - KSketchStyles.TIMEBAR_GAP_CONTEXTMENU_DOUBLE; + _contextDouble.y = contentGroup.localToGlobal(new Point()).y + contentGroup.y - KSketchStyles.NUMBER_15; clearTimeout(mouseTimeout); mouseTimeout = "undefined"; @@ -284,18 +284,17 @@ package sg.edu.smu.ksketch2.canvas.components.timebar _contextSingle.open(contentGroup,true); _contextSingle.x = _magnifier.x; - if(Capabilities.version.indexOf('IOS') > -1) + if(_contextSingle.x >= KSketchStyles.NUMBER_960) { - if(_contextSingle.x >= KSketchStyles.TIMEBAR_X_LIMIT_SINGLE) - _contextSingle.x = KSketchStyles.TIMEBAR_X_LIMIT_SINGLE; + _contextSingle.x = KSketchStyles.NUMBER_960; } else { - if(_contextSingle.x >= KSketchStyles.TIMEBAR_X_LIMIT_SINGLE_ANDROID) - _contextSingle.x = KSketchStyles.TIMEBAR_X_LIMIT_SINGLE_ANDROID; - } + if(_contextSingle.x >= KSketchStyles.NUMBER_1200) + _contextSingle.x = KSketchStyles.NUMBER_1200; + } - _contextSingle.y = contentGroup.localToGlobal(new Point()).y + contentGroup.y - KSketchStyles.TIMEBAR_GAP_CONTEXTMENU_SINGLE;//190;//95; + _contextSingle.y = contentGroup.localToGlobal(new Point()).y + contentGroup.y - KSketchStyles.NUMBER_100; } mouseTimeout = "undefined"; diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeLabel.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeLabel.mxml index 1353fc92..f1e32f92 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeLabel.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeLabel.mxml @@ -20,7 +20,7 @@ - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeSlider.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeSlider.mxml index eacc9a6c..4b170cd4 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeSlider.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeSlider.mxml @@ -20,10 +20,10 @@ - + - + @@ -32,7 +32,7 @@ - + @@ -41,12 +41,12 @@ - + - + @@ -55,20 +55,20 @@ - + - + - + - + - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/transformWidget/KSketch_Widget_Component.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/transformWidget/KSketch_Widget_Component.mxml index ae66c0be..543c5dde 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/transformWidget/KSketch_Widget_Component.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/transformWidget/KSketch_Widget_Component.mxml @@ -36,7 +36,7 @@ c0.069-0.069,18.315-18.173,18.315-18.173l9.649,9.787l4.025-53.302l-53.163,4.027l10.062,10.062c0,0-14.939,14.902-17.855,17.817 C71.592-77.417,79.03-69.173,87.319-56.954z"> - + @@ -46,7 +46,7 @@ c0.069,0.07,17.616,17.689,17.616,17.689l-9.786,9.648l53.301,4.025l-4.026-53.162l-10.062,10.062 c0,0-15.068-14.859-17.983-17.773C80.682,67.002,72.691,76.514,58.274,86.744z"> - + @@ -56,7 +56,7 @@ c-0.07-0.07-17.891-17.751-17.891-17.751l-9.648,9.787l-4.025-53.302l53.162,4.025l-10.063,10.063 c0,0,15.151,15.086,18.065,18.001C-72.049-78.626-79.717-70.228-87.84-58.724z"> - + @@ -66,7 +66,7 @@ c-0.069,0.068-17.988,18.09-17.988,18.09l9.787,9.648l-53.3,4.025l4.024-53.162l10.063,10.062c0,0,14.729-14.674,17.644-17.588 C-79.598,70.086-71.646,79.25-57.689,88.227z"> - + @@ -78,7 +78,7 @@ - + @@ -89,7 +89,7 @@ 75.8592 44.9341 74.2361 52.041 55.49 64.377 46.1961 76.3911 41.0076 108.239 27.2137 133.848 44.0476 143.75 67.3992 155.5 94.9788 148.481 122.629 117.042 136.028 91.4399 146.963 58.0962 135.766 47.9932 108.018 39.5068 111.492 23.6279 118.401 14.9028 122.153 31.7559 161.608 87.0298 186.739 130.6 168.127Z"> - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml index 18a274d9..623abf27 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml @@ -141,6 +141,9 @@ //Starts up the canvas in the following order public function _initCanvas(isView:Boolean):void { + trace("init canvas"); + scaleView(); + this.removeEventListener(FlexEvent.INITIALIZE, _initCanvas); userData = data; @@ -525,6 +528,18 @@ return _cacheControl; } + private function scaleView():void + { + if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY > 1500) + { + KSketchStyles.scale(2); + } + else if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY < 1500) + { + KSketchStyles.scale(2); + } + } + ]]> @@ -535,26 +550,26 @@ - + - + + gap="{KSketchStyles.NUMBER_04}" + paddingLeft="{KSketchStyles.NUMBER_05}" + paddingRight="{KSketchStyles.NUMBER_05}" + paddingTop="{KSketchStyles.NUMBER_05}" + paddingBottom="{KSketchStyles.NUMBER_05}"/> @@ -567,7 +582,7 @@ + width="{KSketchStyles.NUMBER_50}" height="{KSketchStyles.NUMBER_50}"/> @@ -576,20 +591,20 @@ click="playButton.playToggle()" doubleClick="playButton.doubleClick()" id="playButton" - width="{KSketchStyles.TIMEBAR_PLAY_BUTTON_WIDTH}" height="{KSketchStyles.TIMEBAR_PLAY_BUTTON_HEIGHT}"/> + width="{KSketchStyles.NUMBER_60}" height="{KSketchStyles.NUMBER_60}"/> + width="{KSketchStyles.NUMBER_50}" height="{KSketchStyles.NUMBER_50}"/> @@ -604,7 +619,7 @@ - + @@ -616,19 +631,19 @@ width="{drawing_stage.height/10*16}"> - + - + + color="{KSketchStyles.COLOR_BLACK}" angle="{KSketchStyles.ANGLE_50}" + alpha="{KSketchStyles.ALPHA_06}" + strength="{KSketchStyles.NUMBER_02}" + blurX="{KSketchStyles.NUMBER_10}" + blurY="{KSketchStyles.NUMBER_10}"/> @@ -642,9 +657,9 @@ - + - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index 6ced50aa..d8ca7e81 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -16,6 +16,7 @@ xmlns:buttons="sg.edu.smu.ksketch2.canvas.components.buttons.*" xmlns:popup="sg.edu.smu.ksketch2.canvas.components.popup.*" initialize="init(true)" + addedToStage="scaleView()" destructionPolicy="auto" > @@ -39,7 +40,7 @@ import org.as3commons.collections.SortedList; import sg.edu.smu.ksketch2.KSketchAssets; - import sg.edu.smu.ksketch2.KSketchStyleSheet; + import sg.edu.smu.ksketch2.KSketchStyles; import sg.edu.smu.ksketch2.canvas.KSketch_CanvasView_Preferences; import sg.edu.smu.ksketch2.canvas.KSketch_LoginView; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_CanvasNotice; @@ -230,10 +231,10 @@ //init the fonts for buttons createButton.label = "Create a Sketch"; loadButton.label = "Load Sketch from File"; //DESKTOP ENABLE - createButton.setStyle("fontSize", KSketchStyleSheet.HOME_BUTTON_SIZE); - loadButton.setStyle("fontSize", KSketchStyleSheet.HOME_BUTTON_SIZE); //DESKTOP ENABLE - loginButton.setStyle("fontSize", KSketchStyleSheet.HOME_BUTTON_SIZE); - refreshButton.setStyle("fontSize", KSketchStyleSheet.HOME_BUTTON_SIZE); + createButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + loadButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); //DESKTOP ENABLE + loginButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + refreshButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); _setupSketchListView(); } @@ -473,6 +474,18 @@ public function kSketchItemRendererFuntion(item:*):IFactory { return itemRender; } + + private function scaleView():void + { + if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY > 1500) + { + KSketchStyles.scale(2); + } + else if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY < 1500) + { + KSketchStyles.scale(2); + } + } ]]> @@ -480,46 +493,46 @@ - + - + - + - + + width="{KSketchStyles.NUMBER_150}" + height="{KSketchStyles.NUMBER_150}"/> - + - + - + - + @@ -534,18 +547,18 @@ - + - + - + - + @@ -576,7 +589,7 @@ - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml index 55922f36..eb272ae2 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml @@ -11,8 +11,8 @@ - - + + @@ -55,16 +55,16 @@ //set name and date properties sketchName.text = value.fileName; - sketchName.setStyle("fontSize",KSketchStyles.LIST_SKETCH_FONT); + sketchName.setStyle("fontSize",KSketchStyles.NUMBER_20); sketchDate.text = value.created; sketchId.text = value.sketchId; sketchVersion.text = value.version; //drawing border for each row - border.graphics.lineStyle(2, 0x990000, .75); - border.graphics.beginFill(0x00FF00); + border.graphics.lineStyle(2, KSketchStyles.COLOR_RED_LIGHT, .75); + border.graphics.beginFill(KSketchStyles.COLOR_GREEN); border.graphics.moveTo(0, 0); - border.graphics.lineTo(KSketchStyles.LIST_SKETCH_LINE, 0); + border.graphics.lineTo(KSketchStyles.NUMBER_1000, 0); //decode for Image var decoder:Base64Decoder = new Base64Decoder(); diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_ListActions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_ListActions.mxml index af839a61..ed9459f2 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_ListActions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_ListActions.mxml @@ -40,9 +40,9 @@ } ]]> - - - - + + + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LogView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LogView.mxml index 4cd93669..1b531c8c 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LogView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LogView.mxml @@ -29,8 +29,8 @@ { this.removeEventListener(FlexEvent.INITIALIZE, _init); - header.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_HEADER); - exit_button.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); + header.setStyle("fontSize", KSketchStyles.FONT_SIZE_26); + exit_button.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); userData = data; sketchTitle += userData.kSketchDocument.name; diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/interactors/widgetstates/KBasicTransitionMode.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/interactors/widgetstates/KBasicTransitionMode.as index a2b93d98..d4c697ba 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/interactors/widgetstates/KBasicTransitionMode.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/interactors/widgetstates/KBasicTransitionMode.as @@ -69,9 +69,9 @@ package sg.edu.smu.ksketch2.canvas.controls.interactors.widgetstates override public function set enabled(value:Boolean):void { if(value) - _widget.alpha = KSketchStyles.WIDGET_ENABLED_ALPHA; + _widget.alpha = KSketchStyles.ALPHA_1; else - _widget.alpha = KSketchStyles.WIDGET_DISABLED_ALPHA; + _widget.alpha = KSketchStyles.ALPHA_02; } override public function set demonstrationMode(value:Boolean):void @@ -79,16 +79,16 @@ package sg.edu.smu.ksketch2.canvas.controls.interactors.widgetstates _widget.reset(); if(!value) { - _widget.strokeColor = KSketchStyles.WIDGET_INTERPOLATE_COLOR; - _widget.centroid.graphics.beginFill(KSketchStyles.WIDGET_PERFORM_COLOR); - _widget.centroid.graphics.drawCircle(0,0,KSketchStyles.WIDGET_CENTROID_SIZE); + _widget.strokeColor = KSketchStyles.COLOR_GREY_MEDIUM; + _widget.centroid.graphics.beginFill(KSketchStyles.COLOR_RED_DARK); + _widget.centroid.graphics.drawCircle(0,0,KSketchStyles.NUMBER_10); _widget.centroid.graphics.endFill(); } else { - _widget.strokeColor = KSketchStyles.WIDGET_PERFORM_COLOR; - _widget.centroid.graphics.beginFill(KSketchStyles.WIDGET_PERFORM_COLOR); - _widget.centroid.graphics.drawCircle(0,0,KSketchStyles.WIDGET_CENTROID_SIZE); + _widget.strokeColor = KSketchStyles.COLOR_RED_DARK; + _widget.centroid.graphics.beginFill(KSketchStyles.COLOR_RED_DARK); + _widget.centroid.graphics.drawCircle(0,0,KSketchStyles.NUMBER_10); _widget.centroid.graphics.endFill(); } } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/interactors/widgetstates/KMoveCenterMode.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/interactors/widgetstates/KMoveCenterMode.as index 23c79070..da1a4377 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/interactors/widgetstates/KMoveCenterMode.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/interactors/widgetstates/KMoveCenterMode.as @@ -57,23 +57,23 @@ package sg.edu.smu.ksketch2.canvas.controls.interactors.widgetstates override public function set enabled(value:Boolean):void { // set the widget's alpha value to the enabled color - _widget.alpha = KSketchStyles.WIDGET_ENABLED_ALPHA; + _widget.alpha = KSketchStyles.ALPHA_1; // case: the widget is enabled // set the the trigger disabled alpha values if(value) { - _widget.baseTrigger.alpha = KSketchStyles.WIDGET_DISABLED_ALPHA; - _widget.middleTrigger.alpha = KSketchStyles.WIDGET_DISABLED_ALPHA; - _widget.topTrigger.alpha = KSketchStyles.WIDGET_DISABLED_ALPHA; + _widget.baseTrigger.alpha = KSketchStyles.ALPHA_02; + _widget.middleTrigger.alpha = KSketchStyles.ALPHA_02; + _widget.topTrigger.alpha = KSketchStyles.ALPHA_02; } // case: the widget is disabled // set the trigger enabled alpha values else { - _widget.baseTrigger.alpha = KSketchStyles.WIDGET_ENABLED_ALPHA; - _widget.middleTrigger.alpha = KSketchStyles.WIDGET_ENABLED_ALPHA; - _widget.topTrigger.alpha = KSketchStyles.WIDGET_ENABLED_ALPHA; + _widget.baseTrigger.alpha = KSketchStyles.ALPHA_1; + _widget.middleTrigger.alpha = KSketchStyles.ALPHA_1; + _widget.topTrigger.alpha = KSketchStyles.ALPHA_1; } } } From 7c17e7b8ea0325f230b3f8be4e0d4ce1f038164a Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Mon, 27 Jul 2015 13:57:17 +0800 Subject: [PATCH 20/37] Delete and sync --- KSKInterface/src/data/KSketch_DataListItem.as | 12 +- KSKInterface/src/data/KSketch_ListItem.as | 30 +- .../sg/edu/smu/ksketch2/KSketchWebLinks.as | 2 +- .../ksketch2/canvas/KSketch_LoginView.mxml | 5 +- .../components/popup/KSketch_PopUp_Menu.mxml | 2 +- .../components/popup/KSketch_SaveOptions.mxml | 676 +++++++++--------- .../components/popup/KSketch_SyncOptions.mxml | 9 +- .../components/view/KSketch_CanvasView.mxml | 9 +- .../components/view/KSketch_HomeView.mxml | 30 +- .../KSketch_HomeView_IconItemRenderer.mxml | 259 ++++--- .../canvas/controls/KSketch_CacheControl.as | 205 +++++- .../src/sg/edu/smu/ksketch2/utils/KWebData.as | 16 +- 12 files changed, 717 insertions(+), 538 deletions(-) diff --git a/KSKInterface/src/data/KSketch_DataListItem.as b/KSKInterface/src/data/KSketch_DataListItem.as index 7a867fb6..5503036a 100644 --- a/KSKInterface/src/data/KSketch_DataListItem.as +++ b/KSKInterface/src/data/KSketch_DataListItem.as @@ -20,7 +20,7 @@ package data { private var _originalSketchId:int; private var _version:int; private var _newVersion:int; - + private var _lowerFileName:String; public function KSketch_DataListItem(fileData:String, fileName:String, originalName:String, id:String, modified:String, changeDescription:String, sketchId:int, version:int) { @@ -63,6 +63,7 @@ package data { { _newVersion = _version; } + _lowerFileName = fileName.toLowerCase(); } public function set fileData(value:XML):void @@ -164,6 +165,13 @@ package data { { return _newVersion; } - + + public function get lowerFileName():String { + return _lowerFileName; + } + + public function set lowerFileName(value:String):void { + _lowerFileName = value; + } } } diff --git a/KSKInterface/src/data/KSketch_ListItem.as b/KSKInterface/src/data/KSketch_ListItem.as index b3fc0c0f..c674096a 100644 --- a/KSKInterface/src/data/KSketch_ListItem.as +++ b/KSKInterface/src/data/KSketch_ListItem.as @@ -17,14 +17,17 @@ public class KSketch_ListItem implements IComparator{ private var _created:String; private var _version:int; private var _isSaved:Boolean; + private var _uniqueId:String; + private var _lowerFileName:String; public function KSketch_ListItem() { - this._sketchId = 0; + this._sketchId = -1; this._fileName = ""; this._thumbnailData = ""; this._created = ""; this._version = 0; this._isSaved = true; + this._lowerFileName = ""; } public function fromWebData(webData:Object):void { @@ -34,15 +37,22 @@ public class KSketch_ListItem implements IComparator{ this._created = webData.data.created; this._version = webData.data.version; this._isSaved = true; + this._lowerFileName = this._fileName.toLowerCase(); } public function fromCache(cacheData:Object):void { - this._sketchId = cacheData.sketchId; + if(cacheData.sketchId == ""){ + this._sketchId = -1; + }else { + this._sketchId = int(cacheData.sketchId); + } this._fileName = cacheData.fileName; this._thumbnailData = cacheData.thumbnailData; this._created = cacheData.created; this._version = cacheData.version; this._isSaved = cacheData.isSaved; + this._uniqueId = cacheData.uniqueId; + this._lowerFileName = this._fileName.toLowerCase(); } public function compare(item1:*, item2:*):int { if(item1._sketchId < item2._sketchId) @@ -99,5 +109,21 @@ public class KSketch_ListItem implements IComparator{ public function set isSaved(value:Boolean):void { _isSaved = value; } + + public function get uniqueId():String { + return _uniqueId; + } + + public function set uniqueId(value:String):void { + _uniqueId = value; + } + + public function get lowerFileName():String { + return _lowerFileName; + } + + public function set lowerFileName(value:String):void { + _lowerFileName = value; + } } } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as index ffe6e9b5..0ac4f348 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as @@ -14,7 +14,7 @@ package sg.edu.smu.ksketch2 public static const url:String = KSketch_Config.host_name+"/app/login.html"; //Page displayed on stagewebview public static const jsonurlUser:String = KSketch_Config.host_name+"/user/getuser"; //To retrieve user information after login public static const jsonurlUserMobile:String = KSketch_Config.host_name+"/user/getusermobile"; //To retrieve user information after login using ID - public static const urlUser:String = KSketch_Config.host_name+"/user/urlUser"; //To retrieve user id through URL + public static const urlUser:String = KSketch_Config.host_name+"/user/urlUserV2"; //To retrieve user id through URL public static const login_success:String = KSketch_Config.host_name+"/app/login_successful"; public static const redirecturl_login:String = KSketch_Config.host_name+"/app/profile.html"; //Indicates successful login diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml index 832a7272..145fa091 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml @@ -48,7 +48,7 @@ private var _monitorTimer:Timer; private var _webView:StageWebView = new StageWebView(); private var _isLoggedOut:Boolean = false; - + private var _token:String = ""; protected function viewActivateHandler(event:ViewNavigatorEvent):void { // TODO Auto-generated method stub @@ -171,6 +171,7 @@ //get json url GetUser.url = KSketchWebLinks.jsonurlUserMobile + "?id=" + vars.id; + _token = vars.token; GetUser.send(); GetUser.addEventListener(FaultEvent.FAULT, faultHandler); startProgressBar(); @@ -195,7 +196,7 @@ userData.loginView = this; userData.listSketches = ""; userData.resolveConflict = 1; - + userData.token = _token; navigator.pushView(KSketch_HomeView, userData); } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml index 651a30e7..1aa42ec8 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml @@ -303,7 +303,7 @@ var finalFileName:String = newFile.name; - var objDoc:Object = KWebData.prepareSketchDocument(userData, finalFileName); + var objDoc:Object = KWebData.prepareSketchDocument(userData, finalFileName,null); objDoc.save = -1; objDoc.deleteFlag = 0; objDoc.version = 1; diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml index fb787bb6..ac4c2272 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml @@ -22,389 +22,357 @@ = 0) - { - var tempFilename:String = sketchName.text; - var trimFilename:String = tempFilename.replace("My Sketch", ""); - var isANumber:Boolean = !isNaN(Number(trimFilename)); - - if(isANumber) - { - var tempNo:int = int(trimFilename); - saveCounter = tempNo; - saveCounter ++; - } - - //CAM: - /* - if(saveCounter <= KSketch_HomeView.autoSaveCounter) - { - saveCounter = KSketch_HomeView.autoSaveCounter; - saveCounter ++; - }*/ - - + } + + private function cancel():void { + close(); + KSketch_CanvasView.createNewSketch = false; + } + + public function incrementSaveCounter():void { + //if the filename is set to default - "My Sketch n", increment saveCounter + if (sketchName.text.indexOf("My Sketch") >= 0) { + var tempFilename:String = sketchName.text; + var trimFilename:String = tempFilename.replace("My Sketch", ""); + var isANumber:Boolean = !isNaN(Number(trimFilename)); + + if (isANumber) { + var tempNo:int = int(trimFilename); + saveCounter = tempNo; + saveCounter++; } + + //CAM: + /* + if(saveCounter <= KSketch_HomeView.autoSaveCounter) + { + saveCounter = KSketch_HomeView.autoSaveCounter; + saveCounter ++; + }*/ + + } + } ]]> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml index dbfb7b73..b5d17049 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml @@ -24,25 +24,18 @@ 0) { - var recentThumbnail:int = thumbnailLength - 1; - //userData.thumbnailData = sketchData.fileData.child("thumbnail")[recentThumbnail].@data.toString(); - }else + var recentThumbnail:XML = sketchData.fileData.child("thumbnail")[thumbnailLength - 1]; + userData.thumbnailData = recentThumbnail.@data.toString(); + } + else { userData.thumbnailData = sketchData.fileData.child("thumbnail").@data.toString(); } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index 6ced50aa..0b539269 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -26,6 +26,8 @@ import data.KSketch_ListItem; import mx.collections.ArrayCollection; + import mx.collections.Sort; + import mx.collections.SortField; import mx.events.FlexEvent; import mx.managers.PopUpManager; import mx.utils.ObjectProxy; @@ -169,7 +171,7 @@ else { _failedLogin = true; - if (_cacheControl.user == null) { + if (_cacheControl.user == null || _cacheControl.user.id == "n.a") { _anonymousUser = true; } } @@ -206,6 +208,7 @@ _loginView = dataProxy.loginView; if (userData.userObject.id != "n.a") { + dataProxy.userObject.token = dataProxy.token; _cacheControl.user = dataProxy.userObject; loginButton.label = "Logout, " + userData.userObject.u_realname; refreshButton.label = "Refresh"; @@ -222,6 +225,7 @@ } _failedLogin = false; + refresh(); } userData.homeView = this; userData.cacheControl = _cacheControl; @@ -292,11 +296,16 @@ public function displaySketchList(sortedArr:SortedList):void { if (sortedArr) { + //var arr:ArrayCollection = new ArrayCollection(); if (sortedArr.size > 0) { for (var i:int = 0; i < sortedArr.size; i++) { arrDG.addItem(sortedArr.itemAt(i)); } - +// var sort:Sort = new Sort(); +// sort.fields = [new SortField("fileName",true)]; +// arr.sort = sort; +// arr.refresh(); +// arrDG = arr; listSketches_unavailable.visible = false; } } @@ -309,7 +318,6 @@ userData.sketchData = sketchData; navigateToScreen("CANVAS"); } - _stopProgressBar(); } @@ -370,15 +378,15 @@ //if this is a logout button, then reset view & delete cache if (loginButton.label.indexOf("Login") == -1) { logout(); - /*if(!_fileControl.unsavedSketchExist(_mobileControl.informationArr[1])) + if(!_cacheControl.unsavedSketchExist()) { - logout(); + logout(); } else { - _logoffNotice.open(this,true); - PopUpManager.centerPopUp(_logoffNotice); - }*/ + _logoffNotice.open(this,true); + PopUpManager.centerPopUp(_logoffNotice); + } } else { navigator.pushView(KSketch_LoginView); @@ -392,6 +400,10 @@ protected function listSketches_deleteSketchHandler(event:KSwipeEvent):void { _deleteSketchFlag = true; + var sketchName:String = KSketch_HomeView_IconItemRenderer.selectedSketchName; + var sketchId:String = KSketch_HomeView_IconItemRenderer.selectedSketchId; + var sketchVersion:String = KSketch_HomeView_IconItemRenderer.selectedVersion; + _cacheControl.deleteSketch(sketchId,int(sketchVersion),sketchName); } protected function listSketches_logSketchHandler(event:KSwipeEvent):void { @@ -457,7 +469,7 @@ //if action bar is displayed and there is a delete sketch flag if (KSketch_HomeView_IconItemRenderer.openActionBar && _deleteSketchFlag) - _setupSketchDelete(); //_isXML = true; + _cacheControl.deleteSketch(sketchId,int(sketchVersion),sketchName); _isSwipe = false; } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml index 55922f36..870603a8 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml @@ -26,151 +26,138 @@ diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as index dc198254..2fc0e4f8 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as @@ -10,7 +10,9 @@ package sg.edu.smu.ksketch2.canvas.controls { import com.adobe.serialization.json.JSON; - import flash.net.SharedObject; +import flash.events.HTTPStatusEvent; + +import flash.net.SharedObject; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; @@ -20,10 +22,10 @@ package sg.edu.smu.ksketch2.canvas.controls import data.KSketch_ListItem; import org.as3commons.collections.SortedList; -import org.as3commons.collections.framework.IComparator; -import org.as3commons.collections.framework.IIterator; + import org.as3commons.collections.framework.IComparator; + import org.as3commons.collections.framework.IIterator; -import sg.edu.smu.ksketch2.KSketchWebLinks; + import sg.edu.smu.ksketch2.KSketchWebLinks; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_HomeView; public class KSketch_CacheControl @@ -33,6 +35,7 @@ import sg.edu.smu.ksketch2.KSketchWebLinks; private var _homeView:KSketch_HomeView; private var _mySO:SharedObject = SharedObject.getLocal("mydata"); private var _httpService:HTTPService = new HTTPService(); + private var _deleteService:HTTPService = new HTTPService(); private var _webList:SortedList = new SortedList(new KSketch_ListItem() as IComparator); private var _isData:Boolean = false; @@ -65,6 +68,7 @@ import sg.edu.smu.ksketch2.KSketchWebLinks; } */ _httpService.resultFormat = "text"; + _deleteService.resultFormat = "text"; } public function get user():Object @@ -80,6 +84,20 @@ import sg.edu.smu.ksketch2.KSketchWebLinks; { _mySO.data.user = com.adobe.serialization.json.JSON.encode(userObject); } + + public function get deletedSketches():Array + { + if(_mySO.data.deletedSketches){ + return com.adobe.serialization.json.JSON.decode(String(_mySO.data.deletedSketches), true); + } else { + return new Array(); + } + } + + public function set deletedSketches(delArr:Array):void + { + _mySO.data.deletedSketches = com.adobe.serialization.json.JSON.encode(delArr); + } /** set user as anonymous **/ public function newUser():void @@ -126,6 +144,19 @@ import sg.edu.smu.ksketch2.KSketchWebLinks; } _mySO.data.cachedList = com.adobe.serialization.json.JSON.encode(arr); } + + public function get cachedDocuments():Array { + if(_mySO.data.cachedDocuments == null){ + return null + } else { + return com.adobe.serialization.json.JSON.decode(_mySO.data.cachedDocuments, true) as Array; + } + } + + public function set cachedDocuments(list:Array){ + _mySO.data.cachedDocuments = com.adobe.serialization.json.JSON.encode(list); + } + public function retrieveAllSketchList():SortedList { _isData = false; @@ -162,7 +193,11 @@ import sg.edu.smu.ksketch2.KSketchWebLinks; } x += 1; } else if (comparator.compare(cacheList.itemAt(x),webList.itemAt(y)) == 1) { - allList.add(webList.itemAt(y)); + if(isDeletedSketch(webList.itemAt(y).sketchId)) { + deleteSketchOnWeb(isDeletedSketch(webList.itemAt(y).sketchId)); + }else { + allList.add(webList.itemAt(y)); + } y += 1; } else { allList.add(webList.itemAt(y)); @@ -191,7 +226,7 @@ import sg.edu.smu.ksketch2.KSketchWebLinks; } else { - _homeView.displaySketchList(null); + _homeView.displaySketchList(cachedList); } } @@ -210,7 +245,7 @@ import sg.edu.smu.ksketch2.KSketchWebLinks; } _httpService.removeEventListener(ResultEvent.RESULT, listResultHandler); - _httpService.addEventListener(FaultEvent.FAULT, faultHandler); + _httpService.addEventListener(FaultEvent.FAULT, dataFaultHandler); _httpService.addEventListener(ResultEvent.RESULT, dataResultHandler); _httpService.url = KSketchWebLinks.jsonurlSketchXML + "/" + sketchId + "/" + version + "/" + user.id; @@ -218,9 +253,21 @@ import sg.edu.smu.ksketch2.KSketchWebLinks; } else { - //loop through cachedSketchList for the object - //then retrieve object from same index location in the cachedSketchData - //_sketchData = ""; + var sketchData:KSketch_DataListItem = null; + if(_selectedSketch[1] == "" || _selectedSketch[1]== -1){ + var arr:Array = cachedDocuments; + if(arr !=null){ + for(var i:int=0;i Date: Mon, 27 Jul 2015 15:30:57 +0800 Subject: [PATCH 21/37] - Do not pull list of sketches from web after a sketch is deleted - Handle expired session tokens --- .../components/view/KSketch_HomeView.mxml | 19 +++++-- .../canvas/controls/KSketch_CacheControl.as | 55 +++++++++++-------- 2 files changed, 47 insertions(+), 27 deletions(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index dbf43008..3cde0c62 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -285,14 +285,14 @@ } - private function _setupSketchListView():void { + private function _setupSketchListView(fromWeb:Boolean = true):void { _startProgressBar(); listSketches_unavailable.visible = true; arrDG.removeAll(); - _cacheControl.retrieveWebSketchList(); + _cacheControl.retrieveWebSketchList(fromWeb); } public function displaySketchList(sortedArr:SortedList):void { @@ -353,8 +353,8 @@ } - public function refresh():void { - _setupSketchListView(); + public function refresh(fromWeb:Boolean = true):void { + _setupSketchListView(fromWeb); } public function logout():void { @@ -372,7 +372,10 @@ } public function navigateToScreen(screenName:String):void { - if (screenName.indexOf("CANVAS") == -1) //if screen name is Login + if (screenName.indexOf("RELOGIN") != -1) { + navigator.pushView(KSketch_LoginView); + } + else if (screenName.indexOf("CANVAS") == -1) //if screen name is Login { KSketch_LoginView.userData = new Object(); @@ -498,6 +501,12 @@ KSketchStyles.scale(2); } } + + public function handleExpiredSession(){ + _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_EXPIRED_SESSION; + _canvasNotice.open(this, true); + PopUpManager.centerPopUp(_canvasNotice); + } ]]> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as index 2fc0e4f8..2b8546f7 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as @@ -157,11 +157,11 @@ import flash.net.SharedObject; _mySO.data.cachedDocuments = com.adobe.serialization.json.JSON.encode(list); } - public function retrieveAllSketchList():SortedList + public function retrieveAllSketchList(fromWeb:Boolean=true):SortedList { _isData = false; var result:Object; - result = syncList(cachedList,_webList); + result = syncList(cachedList,_webList,fromWeb); cachedList = result.syncedList; //TODO: Handle toBeSavedList here //result.toBeSavedList @@ -170,7 +170,7 @@ import flash.net.SharedObject; } // Probably the most efficient way of syncing the sketch list in the cache and // sketch list from the web - private function syncList(cacheList:SortedList,webList:SortedList): Object { + private function syncList(cacheList:SortedList,webList:SortedList,fromWeb:Boolean=true): Object { var comparator:IComparator = new KSketch_ListItem(); var allList:SortedList = new SortedList(comparator); var updateList:SortedList = new SortedList(comparator); @@ -194,7 +194,9 @@ import flash.net.SharedObject; x += 1; } else if (comparator.compare(cacheList.itemAt(x),webList.itemAt(y)) == 1) { if(isDeletedSketch(webList.itemAt(y).sketchId)) { - deleteSketchOnWeb(isDeletedSketch(webList.itemAt(y).sketchId)); + if(fromWeb) { + deleteSketchOnWeb(isDeletedSketch(webList.itemAt(y).sketchId)); + } }else { allList.add(webList.itemAt(y)); } @@ -210,19 +212,23 @@ import flash.net.SharedObject; return ret; } - public function retrieveWebSketchList():void + public function retrieveWebSketchList(fromWeb:Boolean = true):void { if(user.id != "n.a" && (user.status.indexOf("success") >= 0)) { - //make web request to pull list of sketches - var parameter:String = "{\"sketchID\":[],\"userid\":" + user.id + ",\"token\":\""+user.token +"\"}"; - - _httpService.removeEventListener(ResultEvent.RESULT, dataResultHandler); - _httpService.addEventListener(FaultEvent.FAULT, faultHandler); - _httpService.addEventListener(ResultEvent.RESULT, listResultHandler); - - _httpService.url = KSketchWebLinks.jsonurlSketch + "/" + parameter; - _httpService.send(); + if(fromWeb) { + //make web request to pull list of sketches + var parameter:String = "{\"sketchID\":[],\"userid\":" + user.id + ",\"token\":\"" + user.token + "\"}"; + + _httpService.removeEventListener(ResultEvent.RESULT, dataResultHandler); + _httpService.addEventListener(FaultEvent.FAULT, faultHandler); + _httpService.addEventListener(ResultEvent.RESULT, listResultHandler); + + _httpService.url = KSketchWebLinks.jsonurlSketch + "/" + parameter; + _httpService.send(); + } else { + _homeView.displaySketchList(retrieveAllSketchList(fromWeb)); + } } else { @@ -273,18 +279,23 @@ import flash.net.SharedObject; private function listResultHandler(event:ResultEvent):void { - //TODO: RAM check for negative cases var rawData:String = String(event.result); var resultObj:Object = com.adobe.serialization.json.JSON.decode(rawData,true); _webList.clear(); var tempArr:Array = (resultObj.entities as Array); - for each(var tempObj:Object in tempArr) - { - var _ksketchListItem:KSketch_ListItem = new KSketch_ListItem(); - _ksketchListItem.fromWebData(tempObj); - _webList.add(_ksketchListItem); + if(resultObj) { + if (resultObj.hasOwnProperty("status")) { + if (resultObj.status == "session_expired") { + _homeView.handleExpiredSession(); + } + }else { + for each(var tempObj:Object in tempArr) { + var _ksketchListItem:KSketch_ListItem = new KSketch_ListItem(); + _ksketchListItem.fromWebData(tempObj); + _webList.add(_ksketchListItem); + } + } } - _homeView.displaySketchList(retrieveAllSketchList()); } @@ -446,7 +457,7 @@ import flash.net.SharedObject; deleteSketchOnWeb(Number(sketchID)); this.deleteFromCache(sketchID,fileName); } - _homeView.refresh(); + _homeView.refresh(false); } } } \ No newline at end of file From 20ece293d5b595a9630d6b61d87daa1acbd73736 Mon Sep 17 00:00:00 2001 From: camellia Date: Mon, 27 Jul 2015 17:47:41 +0800 Subject: [PATCH 22/37] Resolution clean up --- KSKApp_Air/src/KSketch_Portable.mxml | 2 +- KSKApp_Air/src/OverrideRuntimeDPIProvider.as | 31 -------------- .../src/sg/edu/smu/ksketch2/KSketchStyles.as | 13 +++++- .../sg/edu/smu/ksketch2/KSketchWebLinks.as | 2 +- .../popup/KSketch_CanvasNotice.mxml | 6 +-- .../canvas/components/popup/KSketch_Help.mxml | 6 +-- .../popup/KSketch_LogoutNotice.mxml | 6 +-- .../components/popup/KSketch_Options.mxml | 8 ++-- .../popup/KSketch_OverwriteSaveOptions.mxml | 10 ++--- .../components/popup/KSketch_PopUp_Menu.mxml | 6 +-- .../components/popup/KSketch_SaveOptions.mxml | 40 +++++++++---------- .../popup/KSketch_SharingOptions.mxml | 8 ++-- .../components/popup/KSketch_SyncOptions.mxml | 10 ++--- .../components/view/KSketch_CanvasView.mxml | 26 ++++++------ .../components/view/KSketch_HomeView.mxml | 16 ++------ .../KSketch_HomeView_IconItemRenderer.mxml | 8 ++-- 16 files changed, 84 insertions(+), 114 deletions(-) delete mode 100644 KSKApp_Air/src/OverrideRuntimeDPIProvider.as diff --git a/KSKApp_Air/src/KSketch_Portable.mxml b/KSKApp_Air/src/KSketch_Portable.mxml index 2331c184..51ad96c3 100755 --- a/KSKApp_Air/src/KSketch_Portable.mxml +++ b/KSKApp_Air/src/KSketch_Portable.mxml @@ -11,6 +11,6 @@ + firstView="sg.edu.smu.ksketch2.canvas.components.view.KSketch_SplashView"> diff --git a/KSKApp_Air/src/OverrideRuntimeDPIProvider.as b/KSKApp_Air/src/OverrideRuntimeDPIProvider.as deleted file mode 100644 index 8cb5e760..00000000 --- a/KSKApp_Air/src/OverrideRuntimeDPIProvider.as +++ /dev/null @@ -1,31 +0,0 @@ -package -{ - import flash.system.Capabilities; - - import mx.core.RuntimeDPIProvider; - import sg.edu.smu.ksketch2.KSketchStyles; - - public class OverrideRuntimeDPIProvider extends RuntimeDPIProvider - { - override public function get runtimeDPI():Number - { - trace("Screen X: " + Capabilities.screenResolutionX); - trace("Screen Y: " + Capabilities.screenResolutionY); - - if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY > 1500) - { - //KSketchStyles.scaleHome(2); - //KSketchStyles.scaleCanvas(1.8); - //KSketchStyles.scaleFont(2); - } - else if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY < 1500) - { - //KSketchStyles.scaleHome(2); - //KSketchStyles.scaleCanvas(1.4); - //KSketchStyles.scaleFont(2); - } - - return super.runtimeDPI; - } - } -} \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as index 453ceef4..76f52a94 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as @@ -8,6 +8,7 @@ */ package sg.edu.smu.ksketch2 { + import flash.system.Capabilities; public class KSketchStyles { @@ -84,9 +85,19 @@ package sg.edu.smu.ksketch2 public static var NUMBER_1100:Number = 1100; public static var NUMBER_1200:Number = 1200; + public static function setView():void + { + //trace("Screen X: " + Capabilities.screenResolutionX); + //trace("Screen Y: " + Capabilities.screenResolutionY); + + if(Capabilities.screenResolutionX > 1024 && Capabilities.screenResolutionY > 768) + { + KSketchStyles.scale(2); + } + } + public static function scale(scale:int):void { - trace("Scaling by " + scale); FONT_SIZE_14 = 14 * scale; FONT_SIZE_18 = 18 * scale; FONT_SIZE_26 = 26 * scale; diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as index 0ac4f348..bee68357 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as @@ -14,7 +14,7 @@ package sg.edu.smu.ksketch2 public static const url:String = KSketch_Config.host_name+"/app/login.html"; //Page displayed on stagewebview public static const jsonurlUser:String = KSketch_Config.host_name+"/user/getuser"; //To retrieve user information after login public static const jsonurlUserMobile:String = KSketch_Config.host_name+"/user/getusermobile"; //To retrieve user information after login using ID - public static const urlUser:String = KSketch_Config.host_name+"/user/urlUserV2"; //To retrieve user id through URL + public static const urlUser:String = KSketch_Config.host_name+"/user/urlUser"; //To retrieve user id through URL public static const login_success:String = KSketch_Config.host_name+"/app/login_successful"; public static const redirecturl_login:String = KSketch_Config.host_name+"/app/profile.html"; //Indicates successful login diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml index 7e69006f..287f0a15 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml @@ -72,9 +72,9 @@ + strength="{KSketchStyles.NUMBER_01}" + blurX="{KSketchStyles.NUMBER_12}" + blurY="{KSketchStyles.NUMBER_12}"/> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Help.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Help.mxml index 40ff7a88..a400e4b5 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Help.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Help.mxml @@ -64,9 +64,9 @@ + strength="{KSketchStyles.NUMBER_01}" + blurX="{KSketchStyles.NUMBER_12}" + blurY="{KSketchStyles.NUMBER_12}"/> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml index d416439c..b38db714 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml @@ -56,9 +56,9 @@ + strength="{KSketchStyles.NUMBER_01}" + blurX="{KSketchStyles.NUMBER_12}" + blurY="{KSketchStyles.NUMBER_12}"/> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Options.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Options.mxml index 46fd6e5f..89012d6c 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Options.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Options.mxml @@ -281,9 +281,9 @@ + strength="{KSketchStyles.NUMBER_01}" + blurX="{KSketchStyles.NUMBER_12}" + blurY="{KSketchStyles.NUMBER_12}"/> @@ -389,7 +389,7 @@ - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml index 01b922e4..37f0ca73 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml @@ -74,9 +74,9 @@ + strength="{KSketchStyles.NUMBER_01}" + blurX="{KSketchStyles.NUMBER_12}" + blurY="{KSketchStyles.NUMBER_12}"/> @@ -98,8 +98,8 @@ - - + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml index 9ac955dd..a9043e36 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml @@ -459,9 +459,9 @@ + strength="{KSketchStyles.NUMBER_01}" + blurX="{KSketchStyles.NUMBER_12}" + blurY="{KSketchStyles.NUMBER_12}"/> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml index ac4c2272..a13accdc 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml @@ -64,12 +64,12 @@ private function initStyle():void { this.removeEventListener(FlexEvent.INITIALIZE, initStyle); - header.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_HEADER); - title.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_NORMAL_FONT); - saveAsWarning.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SMALL_FONT); - saveButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); - discardButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); - cancelButton.setStyle("fontSize", KSketchStyles.DIALOG_BUTTON_SIZE); + header.setStyle("fontSize", KSketchStyles.FONT_SIZE_26); + title.setStyle("fontSize", KSketchStyles.FONT_SIZE_18); + saveAsWarning.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + saveButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + discardButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + cancelButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); } override public function open(owner:DisplayObjectContainer, modal:Boolean = false):void { @@ -377,39 +377,39 @@ + color="{KSketchStyles.COLOR_BLACK}" angle="{KSketchStyles.ANGLE_50}" + alpha="{KSketchStyles.ALPHA_06}" + strength="{KSketchStyles.NUMBER_01}" + blurX="{KSketchStyles.NUMBER_12}" + blurY="{KSketchStyles.NUMBER_12}"/> - + - + - + - + - + - + - - - + + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SharingOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SharingOptions.mxml index 9994ded3..ef3a6754 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SharingOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SharingOptions.mxml @@ -87,9 +87,9 @@ + strength="{KSketchStyles.NUMBER_01}" + blurX="{KSketchStyles.NUMBER_12}" + blurY="{KSketchStyles.NUMBER_12}"/> @@ -152,7 +152,7 @@ - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml index 7af6ee6e..fdbd983b 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml @@ -314,9 +314,9 @@ + strength="{KSketchStyles.NUMBER_01}" + blurX="{KSketchStyles.NUMBER_12}" + blurY="{KSketchStyles.NUMBER_12}"/> @@ -334,8 +334,8 @@ - - + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml index a649e94d..0bb16642 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml @@ -531,13 +531,13 @@ private function scaleView():void { - if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY > 1500) - { - KSketchStyles.scale(2); - } - else if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY < 1500) + KSketchStyles.setView(); + + if(Capabilities.screenResolutionX > 1024) { - KSketchStyles.scale(2); + trace("init drawing stage"); + drawing_stage.percentHeight = 80; + drawing_stage.width = drawing_stage.height/9*16; } } @@ -553,9 +553,9 @@ + strength="{KSketchStyles.NUMBER_01}" + blurX="{KSketchStyles.NUMBER_12}" + blurY="{KSketchStyles.NUMBER_12}"/> @@ -629,7 +629,7 @@ + width="{drawing_stage.height/9*16}"> @@ -642,9 +642,9 @@ + strength="{KSketchStyles.NUMBER_01}" + blurX="{KSketchStyles.NUMBER_12}" + blurY="{KSketchStyles.NUMBER_12}"/> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index dbf43008..0184c2ca 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -16,7 +16,6 @@ xmlns:buttons="sg.edu.smu.ksketch2.canvas.components.buttons.*" xmlns:popup="sg.edu.smu.ksketch2.canvas.components.popup.*" initialize="init(true)" - addedToStage="scaleView()" destructionPolicy="auto" > @@ -93,6 +92,9 @@ private var itemRender:IFactory = new ClassFactory(KSketch_HomeView_IconItemRenderer); private function init(isMobile:Boolean):void { + + KSketchStyles.setView(); + //Check for mobile version. Set false to export for Desktop version if (isMobile) { mainButtons.removeElementAt(2); @@ -486,18 +488,6 @@ public function kSketchItemRendererFuntion(item:*):IFactory { return itemRender; } - - private function scaleView():void - { - if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY > 1500) - { - KSketchStyles.scale(2); - } - else if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY < 1500) - { - KSketchStyles.scale(2); - } - } ]]> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml index 870603a8..3340b77f 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml @@ -11,8 +11,8 @@ - - + + @@ -52,7 +52,7 @@ //set name and date properties sketchName.text = value.fileName; - sketchName.setStyle("fontSize", KSketchStyles.LIST_SKETCH_FONT); + sketchName.setStyle("fontSize", KSketchStyles.NUMBER_20); sketchDate.text = value.created; sketchId.text = value.sketchId; sketchVersion.text = value.version; @@ -61,7 +61,7 @@ border.graphics.lineStyle(2, 0x990000, .75); border.graphics.beginFill(0x00FF00); border.graphics.moveTo(0, 0); - border.graphics.lineTo(KSketchStyles.LIST_SKETCH_LINE, 0); + border.graphics.lineTo(KSketchStyles.NUMBER_1000, 0); //decode for Image var decoder:Base64Decoder = new Base64Decoder(); From 465292172d5d00336739d118206fde3dbcfa3af4 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Mon, 27 Jul 2015 18:42:12 +0800 Subject: [PATCH 23/37] Sort by fileName --- .../components/view/KSketch_HomeView.mxml | 19 +- .../ksketch2/canvas/controls/KFileControl.as | 487 ------------------ .../canvas/controls/KMobileControl.as | 149 ------ .../ksketch2/canvas/controls/KWebControl.as | 108 ---- 4 files changed, 9 insertions(+), 754 deletions(-) delete mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KFileControl.as delete mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KMobileControl.as delete mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KWebControl.as diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index 3cde0c62..bd2ab177 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -224,7 +224,6 @@ loginButton.label = "Login"; refreshButton.visible = false; } - _failedLogin = false; refresh(); } @@ -297,16 +296,16 @@ public function displaySketchList(sortedArr:SortedList):void { if (sortedArr) { - //var arr:ArrayCollection = new ArrayCollection(); + var arr:ArrayCollection = new ArrayCollection(); if (sortedArr.size > 0) { for (var i:int = 0; i < sortedArr.size; i++) { - arrDG.addItem(sortedArr.itemAt(i)); + arr.addItem(sortedArr.itemAt(i)); } -// var sort:Sort = new Sort(); -// sort.fields = [new SortField("fileName",true)]; -// arr.sort = sort; -// arr.refresh(); -// arrDG = arr; + var sort:Sort = new Sort(); + sort.fields = [new SortField("fileName",true)]; + arr.sort = sort; + arr.refresh(); + arrDG = arr; listSketches_unavailable.visible = false; } } @@ -489,12 +488,12 @@ public function kSketchItemRendererFuntion(item:*):IFactory { return itemRender; } - + private function scaleView():void { if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY > 1500) { - KSketchStyles.scale(2); + KSketchStyles.scale(2); } else if(Capabilities.screenResolutionX > 1280 && Capabilities.screenResolutionY < 1500) { diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KFileControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KFileControl.as deleted file mode 100644 index 9b30fb6b..00000000 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KFileControl.as +++ /dev/null @@ -1,487 +0,0 @@ -package sg.edu.smu.ksketch2.canvas.controls -{ - import com.adobe.serialization.json.JSON; - - import mx.collections.ArrayCollection; - - public class KFileControl - { - public static const DELETE_CACHE:String = "deleteFromCache"; - public static const DELETE_WEB:String = "deleteFromWeb"; - - public static const ADD_SAVE_CACHE:String = "save"; - public static const ADD_SAVE_WEB:String = "saveCurrentFromWeb"; - public static const ADD_SYNC:String = "sync"; - - //main variable to store information - //[0] = user information - //[1] = list of sketches - //[3] = sketch documents - private var informationArr:Array; - private var sync_sketchArr:ArrayCollection = new ArrayCollection(); - private var sync_sketchDocArr:ArrayCollection = new ArrayCollection(); - - public function addNewSketchDocument(record:String, obj:Object, type:String):ArrayCollection - { - var arr:ArrayCollection; - if(record) - { - var tempObj:Object = com.adobe.serialization.json.JSON.decode(record, true); - var tempArr:Array = (tempObj.sketches as Array); - - if(tempArr) - arr = new ArrayCollection(tempArr); - } - - //overwrite existing document with the new objDoc - if(!arr) - arr = new ArrayCollection(); - - if(!sketchExist(arr, obj.fileName, obj.sketchId)) - arr.addItem(obj); - else - { - for(var i:int=0; i= dateCache.time ) - overwrite = true; - else if((dateCache.hours == dateWeb.hours) && ((dateCache.minutes == dateWeb.minutes) || ((dateCache.minutes - dateWeb.minutes) <= 1))) - overwrite = true; - } - - //if both are same versions and cached sketch doesn't contain any fileData, overwrite - if(obj.version == arrObj.version) - { - if(arrObj.fileData == null) - overwrite = true; - - if(obj.save == -1) - overwrite = true; - - if(obj.save == 0) - { - if(obj.revert == 0) - overwrite = true; - } - } - - //if a save has been made, overwrite - if(obj.save == 0) - overwrite = true; - } - - - if(overwrite) - { - arr.removeItemAt(i); - arr.addItem(obj); - } - } - } - } - - return arr; - } - - public function deleteSketchDocument(record:String, obj:Object, type:String):ArrayCollection - { - var tempObj:Object = com.adobe.serialization.json.JSON.decode(record, true); - var tempArr:Array = (tempObj.sketches as Array); - - var arr:ArrayCollection = new ArrayCollection(tempArr); - - for(var i:int=0; i 0) - index = sketchExistIndex(cacheArr_sketch, webObj.fileName, webObj.sketchId); - - if(index != -1) - { - var overwrite:Boolean = false; - - var cacheObj:Object = cacheArr_sketch.getItemAt(index); - - var dateCache:Date = new Date(); - dateCache.setTime(Date.parse(cacheObj.date)); - if(dateCache.hours == 24) - dateCache.hours = 0; - - var dateWeb:Date = new Date(); - dateWeb.setTime(Date.parse(webObj.date)); - if(dateWeb.hours == 24) - dateCache.hours = 0; - - if((dateCache.date < dateWeb.date) && (dateCache.month < dateWeb.month) && (dateCache.fullYear < dateWeb.fullYear)) - overwrite = true; - else if((dateCache.date == dateWeb.date) && (dateCache.month == dateWeb.month) && (dateCache.fullYear == dateWeb.fullYear)) - { - if(dateWeb.time >= dateCache.time ) - overwrite = true; - else if(cacheObj.version > webObj.version) - overwrite = true; - } - - if(overwrite) - { - if(cacheObj.fileData != null && webObj.fileData == null) - webObj.fileData = cacheObj.fileData; - - cacheArr_sketch.removeItemAt(index); - webObj.save = 0; - cacheArr_sketch.addItem(webObj); - } - } - else - { - webObj.save = 0; - cacheArr_sketch.addItem(webObj); - } - - var docObj:Object = new Object(); - if(cacheArr_sketch) - docObj.sketches = cacheArr_sketch.source; - else - docObj.sketches = null; - - newInformationArr = com.adobe.serialization.json.JSON.encode(docObj); - - if(cacheArr_sketch) - cacheArr_sketch.removeAll(); - - return newInformationArr; - } - - /*public function solveDiscrepancy(cacheStr:String, webStr:String):String - { - var newInformationArr:String; - - //get sketches from cache - var cacheArr_sketch:ArrayCollection; - cacheArr_sketch = convertStringToArrayCollection(cacheStr); - - if(!cacheArr_sketch) - cacheArr_sketch = new ArrayCollection(); - - //get sketches from the web - var webArr_sketch:ArrayCollection; - webArr_sketch = convertStringToArrayCollection(webStr); - - //compare web and mobile objects - //if mobile is out of date, then replace with web object - if(webArr_sketch) - { - for(var i:int=0; i= dateCache.time ) - overwrite = true; - else if((dateCache.hours == dateWeb.hours) && ((dateCache.minutes == dateWeb.minutes) || ((dateCache.minutes - dateWeb.minutes) <= 1))) - overwrite = true; - } - - if(overwrite) - { - if(cacheObj.fileData != null && obj.fileData == null) - obj.fileData = cacheObj.fileData; - - cacheArr_sketch.removeItemAt(index); - obj.save = 0; - cacheArr_sketch.addItem(obj); - } - } - else - { - obj.save = 0; - cacheArr_sketch.addItem(obj); - } - - } - } - - var docObj:Object = new Object(); - if(cacheArr_sketch) - docObj.sketches = cacheArr_sketch.source; - else - docObj.sketches = null; - - newInformationArr = com.adobe.serialization.json.JSON.encode(docObj); - - if(cacheArr_sketch) - cacheArr_sketch.removeAll(); - - if(webArr_sketch) - webArr_sketch.removeAll(); - - return newInformationArr; - }*/ - - public function getUserObject(userStr:String):Object - { - var obj:Object; - - if(userStr) - obj = com.adobe.serialization.json.JSON.decode(userStr, true); - - return obj; - } - - public function getSketchArr(sketchString:String):ArrayCollection - { - var sketchArr:ArrayCollection; - - if(sketchString) - { - var sketchObj:Object = com.adobe.serialization.json.JSON.decode(sketchString, true); - var tempArr:Array = (sketchObj.sketches as Array); - - if(tempArr) - { - tempArr.sortOn("lowerFileName"); - sketchArr = new ArrayCollection(tempArr); - } - } - - return sketchArr; - } - - public function getSyncSketchObjects(cacheStr:String):Object - { - var result:Object = new Object(); - var syncArr:ArrayCollection = new ArrayCollection(); - var delArr:ArrayCollection = new ArrayCollection(); - - //get sketches from cache - var cacheArr_sketch:ArrayCollection; - cacheArr_sketch = convertStringToArrayCollection(cacheStr); - - //if there are new objects in cache that don't exist in the web, add them to sync_sketchArr - if(cacheArr_sketch) - { - var selectedDoc:Object; - for each(var obj:Object in cacheArr_sketch) - { - if(obj.deleteFlag == 1) - { - if(!delArr.contains(obj)) - delArr.addItem(obj); - } - - if(obj.save == -1) - { - if(!syncArr.contains(obj)) - syncArr.addItem(obj); - } - } - } - - result.syncArr = syncArr; - result.delArr = delArr; - syncArr = null; - delArr = null; - cacheArr_sketch = null; - - return result; - } - - public function convertArrayToArrayCollection(arr:Array):ArrayCollection - { - var arrColl:ArrayCollection = new ArrayCollection(); - - for(var i:int=0; i= 0) - informationArr[0] = com.adobe.serialization.json.JSON.encode(userObj); - else - informationArr[0] = null; - } - - public function addSketchToList(sketchObj:Object, type:String):void - { - var sketchArr:ArrayCollection; - sketchArr = _fileControl.addNewSketchDocument(informationArr[1], sketchObj, type); - - sketchObj = new Object(); - if(sketchArr) - sketchObj.sketches = sketchArr.source; - else - sketchObj.sketches = null; - - informationArr[1] = com.adobe.serialization.json.JSON.encode(sketchObj); //stringify the JSON objects to store in informationArr[2] - sketchArr.removeAll(); //empty array used - } - - public function deleteSketchFromList(sketchObj:Object, type:String):void - { - var sketchArr:ArrayCollection = _fileControl.deleteSketchDocument(informationArr[1], sketchObj, type); - - sketchObj = new Object(); - if(sketchArr) - sketchObj.sketches = sketchArr.source; - else - sketchObj.sketches = null; - - informationArr[1] = com.adobe.serialization.json.JSON.encode(sketchObj); //stringify the JSON objects to store in informationArr[2] - - writeToCache(informationArr); - - sketchArr = null; - sketchObj = null; - } - - public function get sketchList():ArrayCollection - { - var arr:ArrayCollection; - arr = _fileControl.getSketchArr(informationArr[1]); - return arr; - } - - public function get user():Object - { - var obj:Object; - obj = _fileControl.getUserObject(informationArr[0]); - return obj; - } - - public function set user(userObj:Object):void - { - informationArr[0] = com.adobe.serialization.json.JSON.encode(userObj); - } - - public function get userSketch():Object - { - var obj:Object; - obj = _fileControl.getUserObject(informationArr[1]); - return obj; - } - - public function discardSavedSketches():void - { - //get sketches from cache - var cacheArr_sketch:ArrayCollection; - cacheArr_sketch = _fileControl.convertStringToArrayCollection(informationArr[1]); - - var newArr:ArrayCollection = new ArrayCollection(); - - for(var i:int=0; i= 0) - informationArr[0] = com.adobe.serialization.json.JSON.encode(userObj); - else - informationArr[0] = null; - } - - public function initSketchList(sketchObj:Object):void - { - //add in list of sketches to informationArr[1] - var newArr:ArrayCollection = new ArrayCollection(); - var tempArr:Array = (sketchObj.entities as Array); - if(tempArr.length > 0) - { - var newTempArr:ArrayCollection = new ArrayCollection(tempArr); - for each(var tempObj:Object in newTempArr) - { - tempObj = KWebData.convertWebObjForMobile(tempObj); - newArr.addItem(tempObj); - } - } - - sketchObj = new Object(); - if(tempArr.length > 0) - sketchObj.sketches = newArr.source; - else - sketchObj.sketches = null; - - //stringify the JSON objects to store in informationArr[1] - informationArr[1] = com.adobe.serialization.json.JSON.encode(sketchObj); - } - - public function addSketchToList(docObj:Object, type:String):void - { - var fileControl:KFileControl = new KFileControl(); - var sketchDocsArr:ArrayCollection; - sketchDocsArr = fileControl.addNewSketchDocument(informationArr[1], docObj, type); - - docObj = new Object(); - if(sketchDocsArr) - docObj.sketches = sketchDocsArr.source; - else - docObj.sketches = null; - - informationArr[1] = com.adobe.serialization.json.JSON.encode(docObj); //stringify the JSON objects to store in informationArr[2] - sketchDocsArr.removeAll(); //empty array used - } - - public function get sketchList():ArrayCollection - { - var arr:ArrayCollection; - arr = _fileControl.getSketchArr(informationArr[1]); - return arr; - } - - public function reset():void - { - informationArr[0] = null; - informationArr[1] = null; - } - } -} \ No newline at end of file From 49830d443cbe1388666586081ce39a01476ff660 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Tue, 28 Jul 2015 00:36:22 +0800 Subject: [PATCH 24/37] Save issue fixed --- .../components/popup/KSketch_SaveOptions.mxml | 1 - .../components/view/KSketch_HomeView.mxml | 34 +++++++++---------- .../canvas/controls/KSketch_CacheControl.as | 11 ++++++ 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml index a13accdc..4b7c24f2 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml @@ -37,7 +37,6 @@ import sg.edu.smu.ksketch2.canvas.KSketch_LoginView; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_CanvasView; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_HomeView; - import sg.edu.smu.ksketch2.canvas.controls.KFileControl; import sg.edu.smu.ksketch2.canvas.controls.KSketch_CacheControl; import sg.edu.smu.ksketch2.utils.KWebData; diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index b18f07af..112aec9e 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -92,9 +92,9 @@ private var itemRender:IFactory = new ClassFactory(KSketch_HomeView_IconItemRenderer); private function init(isMobile:Boolean):void { - + KSketchStyles.setView(); - + //Check for mobile version. Set false to export for Desktop version if (isMobile) { mainButtons.removeElementAt(2); @@ -211,7 +211,9 @@ _loginView = dataProxy.loginView; if (userData.userObject.id != "n.a") { - dataProxy.userObject.token = dataProxy.token; + if (dataProxy.token) { + dataProxy.userObject.token = dataProxy.token; + } _cacheControl.user = dataProxy.userObject; loginButton.label = "Logout, " + userData.userObject.u_realname; refreshButton.label = "Refresh"; @@ -227,7 +229,7 @@ refreshButton.visible = false; } _failedLogin = false; - refresh(); + //refresh(); } userData.homeView = this; userData.cacheControl = _cacheControl; @@ -304,7 +306,7 @@ arr.addItem(sortedArr.itemAt(i)); } var sort:Sort = new Sort(); - sort.fields = [new SortField("fileName",true)]; + sort.fields = [new SortField("fileName", true)]; arr.sort = sort; arr.refresh(); arrDG = arr; @@ -383,15 +385,13 @@ //if this is a logout button, then reset view & delete cache if (loginButton.label.indexOf("Login") == -1) { logout(); - if(!_cacheControl.unsavedSketchExist()) - { - logout(); - } - else - { - _logoffNotice.open(this,true); - PopUpManager.centerPopUp(_logoffNotice); - } + if (!_cacheControl.unsavedSketchExist()) { + logout(); + } + else { + _logoffNotice.open(this, true); + PopUpManager.centerPopUp(_logoffNotice); + } } else { navigator.pushView(KSketch_LoginView); @@ -408,7 +408,7 @@ var sketchName:String = KSketch_HomeView_IconItemRenderer.selectedSketchName; var sketchId:String = KSketch_HomeView_IconItemRenderer.selectedSketchId; var sketchVersion:String = KSketch_HomeView_IconItemRenderer.selectedVersion; - _cacheControl.deleteSketch(sketchId,int(sketchVersion),sketchName); + _cacheControl.deleteSketch(sketchId, int(sketchVersion), sketchName); } protected function listSketches_logSketchHandler(event:KSwipeEvent):void { @@ -474,7 +474,7 @@ //if action bar is displayed and there is a delete sketch flag if (KSketch_HomeView_IconItemRenderer.openActionBar && _deleteSketchFlag) - _cacheControl.deleteSketch(sketchId,int(sketchVersion),sketchName); + _cacheControl.deleteSketch(sketchId, int(sketchVersion), sketchName); _isSwipe = false; } @@ -491,7 +491,7 @@ return itemRender; } - public function handleExpiredSession(){ + public function handleExpiredSession() { _canvasNotice._parent = KSketch_CanvasNotice.CANVASNOTICE_EXPIRED_SESSION; _canvasNotice.open(this, true); PopUpManager.centerPopUp(_canvasNotice); diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as index 2b8546f7..9ff8d192 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as @@ -355,6 +355,8 @@ import flash.net.SharedObject; var list:SortedList = cachedList; var obj:KSketch_ListItem = new KSketch_ListItem(); obj.fromCache(sketchObj); + obj.isSaved = false; + obj.uniqueId = sketchObj.uniqueId; list.add(obj); cachedList = list; } @@ -368,6 +370,15 @@ import flash.net.SharedObject; } } cachedDocuments = arr; + var list:SortedList = cachedList; + for(var i:int=0;i Date: Tue, 28 Jul 2015 18:40:13 +0800 Subject: [PATCH 25/37] Code cleanup --- .../popup/KSketch_LogoutNotice.mxml | 2 - .../popup/KSketch_OverwriteSaveOptions.mxml | 1 - .../components/popup/KSketch_PopUp_Menu.mxml | 3 +- .../components/popup/KSketch_SaveOptions.mxml | 855 ++++++++++-------- .../components/popup/KSketch_SyncOptions.mxml | 12 +- .../components/view/KSketch_CanvasView.mxml | 5 - .../components/view/KSketch_HomeView.mxml | 13 - .../canvas/controls/KSketch_CacheControl.as | 77 +- .../src/sg/edu/smu/ksketch2/utils/KWebData.as | 2 +- 9 files changed, 485 insertions(+), 485 deletions(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml index b38db714..79a7c42a 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml @@ -39,7 +39,6 @@ private function forceLogout():void { - //CAM: _homeView._mobileControl.informationArr[1] = null; _homeView.navigateToScreen("LOGIN"); close(); } @@ -48,7 +47,6 @@ { super.close(commit, data); (FlexGlobals.topLevelApplication as Application).setFocus(); - //CAM: _homeView.startMonitorConnection(); } ]]> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml index 37f0ca73..2c73eaa8 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml @@ -63,7 +63,6 @@ private function cancel():void { - //CAM: _saveOptions.mobileControl.reset(); _saveOptions.overwriteSave = false; close(); } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml index a9043e36..798311d6 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml @@ -308,7 +308,7 @@ objDoc.version = 1; objDoc.originalVersion = 0; objDoc.originalSketch = -1; - objDoc.sketchId = ""; + objDoc.sketchId = -1; var str:String = com.adobe.serialization.json.JSON.encode(objDoc); @@ -318,7 +318,6 @@ stream.writeUTFBytes(str); stream.close(); - //CAM:save to cache _exit(); } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml index 4b7c24f2..4878409b 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml @@ -8,408 +8,459 @@ *not distributed with this file, You can obtain one at *http://mozilla.org/MPL/2.0/. --> - - - - - - - - + + + + + + + + = 0) { - var tempFilename:String = sketchName.text; - var trimFilename:String = tempFilename.replace("My Sketch", ""); - var isANumber:Boolean = !isNaN(Number(trimFilename)); - - if (isANumber) { - var tempNo:int = int(trimFilename); - saveCounter = tempNo; - saveCounter++; - } - - //CAM: - /* - if(saveCounter <= KSketch_HomeView.autoSaveCounter) - { - saveCounter = KSketch_HomeView.autoSaveCounter; - saveCounter ++; - }*/ - - - } - } - ]]> + import com.adobe.serialization.json.JSON; + + import mx.events.FlexEvent; + import mx.formatters.DateFormatter; + import mx.managers.PopUpManager; + import mx.rpc.events.FaultEvent; + import mx.rpc.events.ResultEvent; + + import air.net.URLMonitor; + + import org.as3commons.collections.SortedList; + + import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchWebLinks; + import sg.edu.smu.ksketch2.canvas.KSketch_LoginView; + import sg.edu.smu.ksketch2.canvas.components.view.KSketch_CanvasView; + import sg.edu.smu.ksketch2.canvas.components.view.KSketch_HomeView; + import sg.edu.smu.ksketch2.canvas.controls.KSketch_CacheControl; + import sg.edu.smu.ksketch2.utils.KWebData; + + public static var saveCounter:int = 0; + + private var _canvasView:KSketch_CanvasView; + private var _overwriteSaveOptions:KSketch_OverwriteSaveOptions; + private var _menu:KSketch_PopUp_Menu; + + private var _monitor:URLMonitor; + private var _monitorTimer:Timer; + private var _isConnected:Boolean; + private var _success:Boolean; + + public var objDoc:Object; + + public var result:Object; + public var userData:Object = new Object(); + private var _cacheControl:KSketch_CacheControl; + + public var returnToHome:Boolean = false; + public var overwriteSave:Boolean = false; + public var canvasDirty:Boolean = false; + + private function initStyle():void { + this.removeEventListener(FlexEvent.INITIALIZE, initStyle); + header.setStyle("fontSize", KSketchStyles.FONT_SIZE_26); + title.setStyle("fontSize", KSketchStyles.FONT_SIZE_18); + saveAsWarning.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + saveButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + discardButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + cancelButton.setStyle("fontSize", KSketchStyles.FONT_SIZE_14); + } + + override public function open(owner:DisplayObjectContainer, modal:Boolean = false):void { + //check for network connection + _monitor = new URLMonitor(new URLRequest(KSketchWebLinks.pingurl)); + _monitor.addEventListener(StatusEvent.STATUS, isConnected); + _monitor.start(); + + _monitorTimer = new Timer(5000); + _monitorTimer.addEventListener(TimerEvent.TIMER, endMonitor); + _monitorTimer.start(); + + var confirmSave:Boolean = false; + userData = _canvasView.saveSketch(confirmSave); + _cacheControl = _canvasView.cacheControl; + + if (saveCounter == 0) { + saveCounter++; + } + + super.open(owner, modal); + saveAsWarning.visible = false; + setSketchName(); + } + + override public function close(commit:Boolean = false, data:* = null):void { + KSketch_CanvasView.createNewSketch = true; + super.close(commit, data); + + if (overwriteSave) { + _overwriteSaveOptions.open(_canvasView, true); + PopUpManager.centerPopUp(_overwriteSaveOptions); + overwriteSave = false; + } + + if (_success) { + if (!returnToHome) { + canvasDirty = true; + _canvasView._interactionControl.reset(); + incrementSaveCounter(); + } + else { + _menu._exit(); + canvasDirty = false; + } + + _success = false; + } + + } + + public function setSketchName():void { + //if this is an attempt to save a new sketch, + //then show the textarea to enter sketch name + var defaultName:String = "My Sketch " + saveCounter; + sketchName.text = defaultName; + + if (!KSketch_CanvasView.createNewSketch) { + if (!canvasDirty) { + if (userData.sketchData.originalName == "") { + sketchName.text = userData.sketchData.fileName; + userData.sketchData.originalName = userData.sketchData.fileName; + } + else + sketchName.text = userData.sketchData.originalName; + + saveAsWarning.visible = true; + } + } + + if (sketchName.text == "") { + sketchName.text = defaultName; + saveAsWarning.visible = false; + } + } + + public function init(canvasView:KSketch_CanvasView, menu:KSketch_PopUp_Menu, overwriteSave:KSketch_OverwriteSaveOptions):void { + _canvasView = canvasView; + _overwriteSaveOptions = overwriteSave; + _menu = menu; + } + + private function isConnected(event:StatusEvent):void { + if (_monitor.available) + _isConnected = true; + else + _isConnected = false; + + _monitor.stop(); + _monitorTimer.stop(); + + _monitor.removeEventListener(StatusEvent.STATUS, isConnected); + _monitorTimer.removeEventListener(TimerEvent.TIMER, endMonitor); + } + + private function endMonitor(event:TimerEvent):void { + _isConnected = false; + + _monitor.stop(); + _monitorTimer.stop(); + + _monitor.removeEventListener(StatusEvent.STATUS, isConnected); + _monitorTimer.removeEventListener(TimerEvent.TIMER, endMonitor); + } + + public function save():void { + var confirmSave:Boolean = true; + userData = _canvasView.saveSketch(confirmSave); + + var finalFileName:String = sketchName.text; + + objDoc = KWebData.prepareSketchDocument(userData, finalFileName, _cacheControl.user); + + objDoc.save = -1; + objDoc.deleteFlag = 0; + + if (objDoc.sketchId == -1) { + objDoc.version = 1; + //objDoc.sketchId = ""; + objDoc.originalVersion = 0; //changed + objDoc.originalSketch = -1; + } + + //save to cache + if (!overwriteSave) { + _cacheControl.addToCache(objDoc); + } else { + _cacheControl.updateCache(objDoc); + } + if (_canvasView._isNewSketch) { + if (_cacheControl.isLoggedIn()) //logged in + { + if (_isConnected) //connected + saveToWeb(); //save to web + else //disconnected + navigateBack(); //navigate back + } + else //anonymous + navigateBack(); //navigate back + } + else //existing sketch + { + if (_cacheControl.isLoggedIn()) //logged in + { + if (_isConnected) //connected + saveToWeb(); //save to web + else //disconnected + overwriteCache(); //overwrite in cache + } + else //anonymous + overwriteCache(); //overwrite in cache + } + } + + private function saveToWeb():void { + //save to web + var objSaveToWeb:Object = new Object(); + objSaveToWeb["fileData"] = com.adobe.serialization.json.JSON.encode(objDoc); + objSaveToWeb["userid"] = _cacheControl.user.id; + + if (!overwriteSave) + httpService.url = KSketchWebLinks.jsonurlGetXML; + else + httpService.url = KSketchWebLinks.jsonurlOverwriteGetXML; + + httpService.send(objSaveToWeb); + httpService.addEventListener(ResultEvent.RESULT, resultHandler); + httpService.addEventListener(FaultEvent.FAULT, faultHandler); + } + + public function saveUnsavedSketches(unsavedList:SortedList) { + var arr:Array = _cacheControl.cachedDocuments; + for (var i:int = 0; i < unsavedList.size; i++) { + var fileData:Object = null; + if ((unsavedList.itemAt(i).sketchId == -1) || (unsavedList.itemAt(i) == null)) { + for (var j:int = 0; j < arr.length; j++) { + if (unsavedList.itemAt(i).uniqueId == arr[j].uniqueId) { + fileData = arr[j]; + break; + } + } + } + else { + for (var j:int = 0; j < arr.length; j++) { + if (unsavedList.itemAt(i).sketchId == arr[j].sketchId) { + fileData = arr[j]; + break; + } + } + } + if (fileData == null) { + continue; + } + var obj:Object = KWebData.prepareSketchDocument(fileData, unsavedList.itemAt(i).fileName, _cacheControl.user); + var objSaveToWeb:Object = new Object(); + objSaveToWeb["fileData"] = com.adobe.serialization.json.JSON.encode(obj); + objSaveToWeb["userid"] = _cacheControl.user.id; + if ((unsavedList.itemAt(i).sketchId == -1) || (unsavedList.itemAt(i) == null)) { + httpService.url = KSketchWebLinks.jsonurlGetXML; + } else { + httpService.url = KSketchWebLinks.jsonurlOverwriteGetXML; + } + httpService.addEventListener(ResultEvent.RESULT, unsavedResultHandler); + httpService.addEventListener(FaultEvent.FAULT, unsavedFaultHandler); + httpService.send(objSaveToWeb); + } + } + + private function formatObjectForSave():Object { + var data:Object = new Object(); + data.group_permissions = []; + data.thumbnailData = userData.thumbnailData; + data.p_edit = true; + data.changeDescription = ""; + data.date = generateTimestamp(null); + + data.fileName = sketchName; + //data.lowerFileName = sketchName.toLowerCase(); + + if (userData.sketchData.originalName != "" && (sketchName == userData.sketchData.originalName)) { + data.sketchId = userData.sketchData.sketchId; + data.originalVersion = userData.sketchData.originalVersion; + data.originalSketch = userData.sketchData.originalSketch; + data.originalName = userData.sketchData.originalName; + } + else { + data.sketchId = ""; + data.originalVersion = 1; + data.originalSketch = -1; + data.originalName = sketchName; + } + + data.appver = 1.0; + data.version = userData.kSketchDocument.version; + data.p_view = 1; + data.fileData = userData.kSketchDocument.xml.toXMLString(); + data.p_comment = true; + data.owner = _cacheControl.user.u_realname; + data.owner_id = _cacheControl.user.id; + return data; + } + + private function generateTimestamp(timestamp:Date):String { + if (timestamp == null) { + timestamp = new Date(); + var offsetMilliseconds:Number = timestamp.getTimezoneOffset() * 60 * 1000; + timestamp.setTime(timestamp.getTime() + offsetMilliseconds); + } + + var dateFormatter:DateFormatter = new DateFormatter(); + dateFormatter.formatString = "DD MMM YYYY, HH:NN:SS"; + return dateFormatter.format(timestamp); + } + + private function resultHandler(event:ResultEvent):void { + var resultRaw:Object = event.result; + result = com.adobe.serialization.json.JSON.decode(resultRaw.toString()); + + if (result.status == "success") { + //save to cache + objDoc.save = 0; + if (!overwriteSave) { + _cacheControl.updateSketchDocument(result.uniqueId, result.sketchId); + } + overwriteSave = false; + _success = true; + } + else if (result.status == "errorDiscrepancy") { + overwriteSave = true; + _success = false; + } + + close(); + } + + private function unsavedResultHandler(event:ResultEvent):void { + var resultRaw:Object = event.result; + result = com.adobe.serialization.json.JSON.decode(resultRaw.toString()); + + if (result.status == "success") { + //save to cache + objDoc.save = 0; + if (!overwriteSave) { + _cacheControl.updateSketchDocument(result.uniqueId, result.sketchId); + } + overwriteSave = false; + _success = true; + } + else if (result.status == "errorDiscrepancy") { + overwriteSave = true; + _success = false; + } + } + + private function navigateBack():void { + overwriteSave = false; + _success = true; + + close(); + } + + private function overwriteCache():void { + objDoc.save = -1 //flag save to web for existing sketch + + navigateBack(); + } + + private function faultHandler(event:FaultEvent):void { + overwriteCache(); + } + + private function unsavedFaultHandler(event:FaultEvent):void { + + } + + private function discardSketch():void { + close(); + + if (!returnToHome) { + canvasDirty = true; + _canvasView._interactionControl.reset(); + } + + else { + canvasDirty = true; + _menu._exit(); + } + } + + private function cancel():void { + close(); + KSketch_CanvasView.createNewSketch = false; + } + + public function incrementSaveCounter():void { + //if the filename is set to default - "My Sketch n", increment saveCounter + if (sketchName.text.indexOf("My Sketch") >= 0) { + var tempFilename:String = sketchName.text; + var trimFilename:String = tempFilename.replace("My Sketch", ""); + var isANumber:Boolean = !isNaN(Number(trimFilename)); + + if (isANumber) { + var tempNo:int = int(trimFilename); + saveCounter = tempNo; + saveCounter++; + } + } + } + ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml index fdbd983b..1df605ae 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml @@ -69,8 +69,6 @@ override public function close(commit:Boolean=false, data:*=null):void { - //CAM: _homeView._mobileControl.writeToCache(_homeView._mobileControl.informationArr); - resetSyncArrays(); super.close(commit, data); @@ -78,9 +76,7 @@ if(_homeView && _success) _homeView.refresh(); - //CAM: else if(_homeView) - //CAM: _homeView.displaySketchData(); - + } private function init():void @@ -235,8 +231,6 @@ if(_counterSave == syncSketchArr.length) writeAllToCache(); } - //CAM: else - //CAM: _homeView.deleteSketchDocument(obj, KFileControl.DELETE_CACHE); }; } @@ -287,7 +281,6 @@ for(i=0; i = webList.size) { @@ -188,8 +156,11 @@ import flash.net.SharedObject; allList.add(webList.itemAt(y)); y += 1; } else if (comparator.compare(cacheList.itemAt(x),webList.itemAt(y)) == -1) { - if (!cacheList.itemAt(x).isSaved) { + if (!cacheList.itemAt(x).isSaved) { // cache[present, ?deleted, !isSaved] web[?present] updateList.add(cacheList.itemAt(x)); + allList.add(cacheList.itemAt(x)); + } else { // CASE:cache[present, ?deleted, isSaved] web[!present + deleteFromCache(String(cacheList.itemAt(x).sketchId),cacheList.itemAt(x).fileName); } x += 1; } else if (comparator.compare(cacheList.itemAt(x),webList.itemAt(y)) == 1) { @@ -201,15 +172,16 @@ import flash.net.SharedObject; allList.add(webList.itemAt(y)); } y += 1; - } else { + } else { // CASE:cache[present, ?deleted, isSaved] web[present] allList.add(webList.itemAt(y)); x += 1; y += 1; } } - ret.syncedList = allList; - ret.toBeSavedList = updateList; - return ret; + if(updateList.size > 0) { + _saveOptions.saveUnsavedSketches(updateList); + } + return allList; } public function retrieveWebSketchList(fromWeb:Boolean = true):void @@ -361,6 +333,12 @@ import flash.net.SharedObject; cachedList = list; } + public function updateCache(sketchObj: Object):void + { + this.deleteFromCache(sketchObj.sketchId,sketchObj.fileName); + this.addToCache(sketchObj); + } + public function updateSketchDocument(uniqueId:String, sketchId:Number){ var arr:Array = cachedDocuments; for(var i:int=0;i Date: Tue, 28 Jul 2015 20:43:52 +0800 Subject: [PATCH 26/37] Bug fix #98346666 --- KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as | 2 +- .../src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml | 8 ++++++-- .../view/KSketch_HomeView_IconItemRenderer.mxml | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as index 0ac4f348..287f733a 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchWebLinks.as @@ -28,6 +28,6 @@ package sg.edu.smu.ksketch2 public static const jsonurlOverwriteGetXML:String = KSketch_Config.host_name+"/get/overwritesketchxml"; //To save a sketch from an older version to Datastore public static const jsonurlDeleteSketch:String = KSketch_Config.host_name+"/get/deletesketch"; //To delete a sketch from Datastore - public static const urlApproval:String = KSketch_Config.host_name+"/app/approval.html"; + public static const urlApproval:String = KSketch_Config.host_name+"/app/register_complete.html"; } } \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml index 145fa091..b067d13e 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_LoginView.mxml @@ -138,7 +138,7 @@ var currentURL:String = event.location.toString(); //if successful login - if(currentURL.indexOf(KSketchWebLinks.redirecturl_login) >= 0) + if((currentURL.indexOf(KSketchWebLinks.redirecturl_login) >= 0) || (currentURL.indexOf(KSketchWebLinks.urlApproval) >= 0)) { //retrieve id from HTML page _webView.loadURL(KSketchWebLinks.urlUser); @@ -146,6 +146,8 @@ else if((currentURL.indexOf(KSketchWebLinks.redirecturl_skip) >= 0) || (currentURL.indexOf(KSketchWebLinks.redirecturl_index) >= 0)) { skipConnection(LOGIN_CANCEL); + } else { + // _webView.loadURL(currentURL); } } @@ -154,7 +156,7 @@ { var currentURL:String = event.location.toString(); - if(currentURL.indexOf(KSketchWebLinks.redirecturl_login) >= 0) + if((currentURL.indexOf(KSketchWebLinks.redirecturl_login) >= 0) || (currentURL.indexOf(KSketchWebLinks.urlApproval) >= 0)) { //retrieve id from HTML page _webView.loadURL(KSketchWebLinks.urlUser); @@ -179,6 +181,8 @@ else if((currentURL.indexOf(KSketchWebLinks.redirecturl_skip) >= 0) || (currentURL.indexOf(KSketchWebLinks.redirecturl_index) >= 0)) { skipConnection(LOGIN_CANCEL); + } else { + // _webView.loadURL(currentURL); } } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml index 3340b77f..15ca02d3 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml @@ -47,7 +47,7 @@ } override public function set data(value:Object):void { - if (value.thumbnailData) { + if ((value!=null) &&(value.thumbnailData)) { super.data = value; //set name and date properties From 4ad39f06b630f943638443ed965c8e036dd0fbfc Mon Sep 17 00:00:00 2001 From: camellia Date: Tue, 28 Jul 2015 21:09:38 +0800 Subject: [PATCH 27/37] resolution update --- KSKInterface/.flexLibProperties | 1 - .../src/sg/edu/smu/ksketch2/KSketchStyles.as | 25 ++++++++++++++++--- .../src/sg/edu/smu/ksketch2/KSketch_Config.as | 2 +- .../components/view/KSketch_CanvasView.mxml | 8 ++++-- .../components/view/KSketch_HomeView.mxml | 21 ++++++++++------ .../KSketch_HomeView_IconItemRenderer.mxml | 2 +- 6 files changed, 43 insertions(+), 16 deletions(-) diff --git a/KSKInterface/.flexLibProperties b/KSKInterface/.flexLibProperties index 11008d41..ffbe90e6 100755 --- a/KSKInterface/.flexLibProperties +++ b/KSKInterface/.flexLibProperties @@ -19,7 +19,6 @@ - diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as index 76f52a94..cba4403c 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as @@ -85,12 +85,31 @@ package sg.edu.smu.ksketch2 public static var NUMBER_1100:Number = 1100; public static var NUMBER_1200:Number = 1200; + public static var width:int = 0; + public static var height:int = 0; + public static var aspectRatio:Number = 0; + + public static function setResolution():void + { + if(Capabilities.screenResolutionX > Capabilities.screenResolutionY) + { + width = Capabilities.screenResolutionX; + height = Capabilities.screenResolutionY; + } + else + { + width = Capabilities.screenResolutionY; + height = Capabilities.screenResolutionX; + } + + aspectRatio = int((width/height)*100)/100; + } + public static function setView():void { - //trace("Screen X: " + Capabilities.screenResolutionX); - //trace("Screen Y: " + Capabilities.screenResolutionY); + setResolution(); - if(Capabilities.screenResolutionX > 1024 && Capabilities.screenResolutionY > 768) + if(width > 1280 && height > 960) { KSketchStyles.scale(2); } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as index 7d36d105..0a6b2c3e 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as @@ -3,7 +3,7 @@ */ package sg.edu.smu.ksketch2 { public class KSketch_Config { - public static const host_name = "http://ksketch.smu.edu.sg" + public static const host_name = "http://ed92f17c.ngrok.io" public static const email = "ksketch@smu.edu.sg" public static var isMobile:Boolean = false; } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml index e633e33f..429e4c93 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml @@ -528,9 +528,13 @@ { KSketchStyles.setView(); - if(Capabilities.screenResolutionX > 1024) + if(KSketchStyles.aspectRatio != 1.33) + { + drawing_stage.percentHeight = 82; + drawing_stage.width = drawing_stage.height/9*16; + } + else if(KSketchStyles.width > 1280 && KSketchStyles.aspectRatio == 1.33) { - trace("init drawing stage"); drawing_stage.percentHeight = 80; drawing_stage.width = drawing_stage.height/9*16; } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index 7f30ca30..f63faa6d 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -16,6 +16,7 @@ xmlns:buttons="sg.edu.smu.ksketch2.canvas.components.buttons.*" xmlns:popup="sg.edu.smu.ksketch2.canvas.components.popup.*" initialize="init(true)" + addedToStage="KSketchStyles.setView();" destructionPolicy="auto" > @@ -83,9 +84,6 @@ private var itemRender:IFactory = new ClassFactory(KSketch_HomeView_IconItemRenderer); private function init(isMobile:Boolean):void { - - KSketchStyles.setView(); - //Check for mobile version. Set false to export for Desktop version if (isMobile) { mainButtons.removeElementAt(2); @@ -483,6 +481,13 @@ _canvasNotice.open(this, true); PopUpManager.centerPopUp(_canvasNotice); } + + protected function view_addedToStageHandler(event:Event):void + { + // TODO Auto-generated method stub + + } + ]]> @@ -513,24 +518,24 @@ - + - + - + - + @@ -559,7 +564,7 @@ - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml index 3340b77f..4d0684b3 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml @@ -47,7 +47,7 @@ } override public function set data(value:Object):void { - if (value.thumbnailData) { + if (value != null && value.thumbnailData) { super.data = value; //set name and date properties From 284be49884d03b03ff6d183ede03ae4156aa3c53 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Tue, 28 Jul 2015 23:43:27 +0800 Subject: [PATCH 28/37] sketchId = -1 for unsaved sketches --- .../components/popup/KSketch_SaveOptions.mxml | 16 +++++++++++----- .../canvas/controls/KSketch_CacheControl.as | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml index 4878409b..55c99c3e 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml @@ -241,7 +241,11 @@ httpService.addEventListener(FaultEvent.FAULT, faultHandler); } - public function saveUnsavedSketches(unsavedList:SortedList) { + public function saveUnsavedSketches(unsavedList:SortedList, cacheCtr:KSketch_CacheControl) { + if(_cacheControl == null) + { + _cacheControl = cacheCtr; + } var arr:Array = _cacheControl.cachedDocuments; for (var i:int = 0; i < unsavedList.size; i++) { var fileData:Object = null; @@ -264,9 +268,11 @@ if (fileData == null) { continue; } - var obj:Object = KWebData.prepareSketchDocument(fileData, unsavedList.itemAt(i).fileName, _cacheControl.user); + //var obj:Object = KWebData.prepareSketchDocument(fileData, unsavedList.itemAt(i).fileName, _cacheControl.user); var objSaveToWeb:Object = new Object(); - objSaveToWeb["fileData"] = com.adobe.serialization.json.JSON.encode(obj); + fileData.owner_id = _cacheControl.user.id; + objSaveToWeb["fileData"] = com.adobe.serialization.json.JSON.encode(fileData); + objSaveToWeb["userid"] = _cacheControl.user.id; if ((unsavedList.itemAt(i).sketchId == -1) || (unsavedList.itemAt(i) == null)) { httpService.url = KSketchWebLinks.jsonurlGetXML; @@ -331,7 +337,7 @@ if (result.status == "success") { //save to cache - objDoc.save = 0; + //objDoc.save = 0; if (!overwriteSave) { _cacheControl.updateSketchDocument(result.uniqueId, result.sketchId); } @@ -352,7 +358,7 @@ if (result.status == "success") { //save to cache - objDoc.save = 0; + //objDoc.save = 0; if (!overwriteSave) { _cacheControl.updateSketchDocument(result.uniqueId, result.sketchId); } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as index 3c2760d0..991705ee 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as @@ -179,7 +179,7 @@ import sg.edu.smu.ksketch2.canvas.components.view.KSketch_HomeView; } } if(updateList.size > 0) { - _saveOptions.saveUnsavedSketches(updateList); + _saveOptions.saveUnsavedSketches(updateList,this); } return allList; } From c717094b4ffb003d3bd2bc485778d57d40359cf5 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Tue, 28 Jul 2015 23:54:26 +0800 Subject: [PATCH 29/37] Reset KSketch_Config --- KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as index 0a6b2c3e..7d36d105 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as @@ -3,7 +3,7 @@ */ package sg.edu.smu.ksketch2 { public class KSketch_Config { - public static const host_name = "http://ed92f17c.ngrok.io" + public static const host_name = "http://ksketch.smu.edu.sg" public static const email = "ksketch@smu.edu.sg" public static var isMobile:Boolean = false; } From 99f454d4d0b9204785e54e3b482b475a0af1bb29 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Sun, 2 Aug 2015 12:35:44 +0800 Subject: [PATCH 30/37] fix updatesketchList --- .../ksketch2/canvas/controls/KSketch_CacheControl.as | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as index 991705ee..a0ec1f92 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as @@ -10,9 +10,7 @@ package sg.edu.smu.ksketch2.canvas.controls { import com.adobe.serialization.json.JSON; import flash.net.SharedObject; - -import mx.collections.Sort; -import mx.rpc.events.FaultEvent; + import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; import data.KSketch_DataListItem; @@ -21,15 +19,15 @@ import mx.rpc.events.FaultEvent; import org.as3commons.collections.framework.IComparator; import org.as3commons.collections.framework.IIterator; import sg.edu.smu.ksketch2.KSketchWebLinks; -import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_SaveOptions; -import sg.edu.smu.ksketch2.canvas.components.view.KSketch_HomeView; + import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_SaveOptions; + import sg.edu.smu.ksketch2.canvas.components.view.KSketch_HomeView; public class KSketch_CacheControl { //class variables private var _selectedSketch:Array; private var _homeView:KSketch_HomeView; - private var _mySO:SharedObject = SharedObject.getLocal("mydata"); + private var _mySO:SharedObject = SharedObject.getLocal("mydata_v2"); private var _httpService:HTTPService = new HTTPService(); private var _deleteService:HTTPService = new HTTPService(); private var _webList:SortedList = new SortedList(new KSketch_ListItem() as IComparator); @@ -356,7 +354,7 @@ import sg.edu.smu.ksketch2.canvas.components.view.KSketch_HomeView; break; } } - cachedDocuments = arr; + cachedList = list; } public function isLoggedIn():Boolean From b813febff159d7fbd069758a364078d444f95512 Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Sun, 2 Aug 2015 15:04:23 +0800 Subject: [PATCH 31/37] Migrate old cache to new structure --- .../components/view/KSketch_SplashView.mxml | 4 +++ .../ksketch2/utils/KSketch_MigrateCache.as | 32 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/utils/KSketch_MigrateCache.as diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_SplashView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_SplashView.mxml index ea48083f..f3d35a88 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_SplashView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_SplashView.mxml @@ -20,6 +20,7 @@ Date: Tue, 4 Aug 2015 19:07:39 +0800 Subject: [PATCH 32/37] fixed "Null" exception in delete event handler --- .../canvas/components/view/KSketch_HomeView.mxml | 12 ++++++------ .../ksketch2/canvas/controls/KSketch_CacheControl.as | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index f63faa6d..6400586c 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -458,8 +458,8 @@ _setupSketchSave(); //_isXML = true; //if action bar is displayed and there is a delete sketch flag - if (KSketch_HomeView_IconItemRenderer.openActionBar && _deleteSketchFlag) - _cacheControl.deleteSketch(sketchId, int(sketchVersion), sketchName); + //if (KSketch_HomeView_IconItemRenderer.openActionBar && _deleteSketchFlag) + // _cacheControl.deleteSketch(sketchId, int(sketchVersion), sketchName); _isSwipe = false; } @@ -482,10 +482,10 @@ PopUpManager.centerPopUp(_canvasNotice); } - protected function view_addedToStageHandler(event:Event):void - { - // TODO Auto-generated method stub - + protected function view_addedToStageHandler(event:Event):void + { + // TODO Auto-generated method stub + } ]]> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as index a0ec1f92..31992786 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KSketch_CacheControl.as @@ -164,7 +164,7 @@ package sg.edu.smu.ksketch2.canvas.controls } else if (comparator.compare(cacheList.itemAt(x),webList.itemAt(y)) == 1) { if(isDeletedSketch(webList.itemAt(y).sketchId)) { if(fromWeb) { - deleteSketchOnWeb(isDeletedSketch(webList.itemAt(y).sketchId)); + deleteSketchOnWeb(webList.itemAt(y).sketchId); } }else { allList.add(webList.itemAt(y)); @@ -197,7 +197,7 @@ package sg.edu.smu.ksketch2.canvas.controls _httpService.url = KSketchWebLinks.jsonurlSketch + "/" + parameter; _httpService.send(); } else { - _homeView.displaySketchList(retrieveAllSketchList(fromWeb)); + _homeView.displaySketchList(cachedList); } } else From 4f587bf6218037ddca473d92ce23b7df0d3a9192 Mon Sep 17 00:00:00 2001 From: "Richard C. Davis" Date: Wed, 5 Aug 2015 12:29:06 +0800 Subject: [PATCH 33/37] Added draft of asset licence files. --- KSKInterface/src/assets/.gitignore | 1 + KSKInterface/src/assets/license-glyphish.txt | 31 + KSKInterface/src/assets/license.html | 1280 ++++++++++++++++++ 3 files changed, 1312 insertions(+) create mode 100644 KSKInterface/src/assets/.gitignore create mode 100644 KSKInterface/src/assets/license-glyphish.txt create mode 100644 KSKInterface/src/assets/license.html diff --git a/KSKInterface/src/assets/.gitignore b/KSKInterface/src/assets/.gitignore new file mode 100644 index 00000000..1e33d3ab --- /dev/null +++ b/KSKInterface/src/assets/.gitignore @@ -0,0 +1 @@ +!*.html \ No newline at end of file diff --git a/KSKInterface/src/assets/license-glyphish.txt b/KSKInterface/src/assets/license-glyphish.txt new file mode 100644 index 00000000..8863864d --- /dev/null +++ b/KSKInterface/src/assets/license-glyphish.txt @@ -0,0 +1,31 @@ +FREE ICONS FROM GLYPHISH +Created by Joseph Wain, 2014 +Web: http://glyphish.com or http://penandthink.com +Twitter: @glyphish or @jpwain + +Using these free icons requires attribution -- see below. It's easy and fun! + +Created by Joseph Wain and downloaded from http://glyphish.com + +This work is licensed under the Creative Commons Attribution 3.0 United States License. To view a copy, visit http://creativecommons.org/licenses/by/3.0/us/ + +You are free to share and to remix it remix under the following conditions: + + * You must attribute the work in the manner specified by the author (SEE BELOW). + + * For any reuse or distribution, you must make clear to others the license terms of this work. + + * The above conditions can be waived if you get permission from the copyright holder + (send me an email to discuss). + +You're free to use these icons for commercial and non-commercial purposes, for yourself, your company and your clients, and to edit, remix and otherwise modify them, as long as clear attribution is provided. You may not sell or redistribute the icons themselves as icons. + +Additionally, you may not use them in a way that encourages downstream distribution -- no templates or skins or theme kits or similar uses, no app-building tools or similar. (The person using the theme or template might not know where the icons came from and thus wouldn't be following the license.) This specifically prohibits the use in any kind of "app builder" tool or platform, especially where the icons are provided as choices to people using the tool to create apps. + +ATTRIBUTION -- A note on your app's website, like "Icons from Glyphish" or similar, plus a link back to glyphish.com, is the preferred form of attribution. For questions about attribution, contact me via the Glyphish website. + +USE WITHOUT ATTRIBUTION -- If attribution is difficult, unworkable or undesireable for your application, get in touch to discuss other options. Or, get the full Glyphish sets, which do not require attribution. + +Enjoy! + +-Joseph \ No newline at end of file diff --git a/KSKInterface/src/assets/license.html b/KSKInterface/src/assets/license.html new file mode 100644 index 00000000..d9508f25 --- /dev/null +++ b/KSKInterface/src/assets/license.html @@ -0,0 +1,1280 @@ + + + + Licenses for K-Sketch 2 Assets + + + + + + +

Licenses for K-Sketch 2 Assets

+ +
    +
  1. + + + +
    +
    +
    Name
    Button_ActionList_Delete.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  2. + +
  3. + + + +
    +
    +
    Name
    Button_ActionList_Log.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  4. + +
  5. + + + +
    +
    +
    Name
    Button_ActionList_Save.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  6. + +
  7. + + + +
    +
    +
    Name
    Button_Texture_Back_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  8. + +
  9. + + + +
    +
    +
    Name
    Button_Texture_Back.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  10. + +
  11. + + + +
    +
    +
    Name
    Button_Texture_BlackPen_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  12. + +
  13. + + + +
    +
    +
    Name
    Button_Texture_BlackPen.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  14. + +
  15. + + + +
    +
    +
    Name
    Button_Texture_BluePen_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  16. + +
  17. + + + +
    +
    +
    Name
    Button_Texture_BluePen.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  18. + +
  19. + + + +
    +
    +
    Name
    Button_Texture_Camera_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  20. + +
  21. + + + +
    +
    +
    Name
    Button_Texture_Camera.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  22. + +
  23. + + + +
    +
    +
    Name
    Button_Texture_Cancel_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  24. + +
  25. + + + +
    +
    +
    Name
    Button_Texture_Cancel.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  26. + +
  27. + + + +
    +
    +
    Name
    Button_Texture_Center_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  28. + +
  29. + + + +
    +
    +
    Name
    Button_Texture_Center.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  30. + +
  31. + + + +
    +
    +
    Name
    Button_Texture_Clear_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  32. + +
  33. + + + +
    +
    +
    Name
    Button_Texture_Clear.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  34. + +
  35. + + + +
    +
    +
    Name
    Button_Texture_Crop_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  36. + +
  37. + + + +
    +
    +
    Name
    Button_Texture_Crop.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  38. + +
  39. + + + +
    +
    +
    Name
    Button_Texture_Debug_Down.png
    +
    Source
    Unknown. Need to Remove
    +
    License
    Unknown. Need to Remove
    +
    +
    +
  40. + +
  41. + + + +
    +
    +
    Name
    Button_Texture_Debug.png
    +
    Source
    Unknown. Need to Remove
    +
    License
    Unknown. Need to Remove
    +
    +
    +
  42. + +
  43. + + + +
    +
    +
    Name
    Button_Texture_DocumentScreen_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  44. + +
  45. + + + +
    +
    +
    Name
    Button_Texture_DocumentScreen.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  46. + +
  47. + + + +
    +
    +
    Name
    Button_Texture_Eraser_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  48. + +
  49. + + + +
    +
    +
    Name
    Button_Texture_Eraser.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  50. + +
  51. + + + +
    +
    +
    Name
    Button_Texture_Extend_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  52. + +
  53. + + + +
    +
    +
    Name
    Button_Texture_Extend.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  54. + +
  55. + + + +
    +
    +
    Name
    Button_Texture_Forward_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  56. + +
  57. + + + +
    +
    +
    Name
    Button_Texture_Forward.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  58. + +
  59. + + + +
    +
    +
    Name
    Button_Texture_Frame_Next_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  60. + +
  61. + + + +
    +
    +
    Name
    Button_Texture_Frame_Next.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  62. + +
  63. + + + +
    +
    +
    Name
    Button_Texture_Frame_Prev_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  64. + +
  65. + + + +
    +
    +
    Name
    Button_Texture_Frame_Prev.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  66. + +
  67. + + + +
    +
    +
    Name
    Button_Texture_GreenPen_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  68. + +
  69. + + + +
    +
    +
    Name
    Button_Texture_GreenPen.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  70. + +
  71. + + + +
    +
    +
    Name
    Button_Texture_Group_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  72. + +
  73. + + + +
    +
    +
    Name
    Button_Texture_Group.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  74. + +
  75. + + + +
    +
    +
    Name
    Button_Texture_Help_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  76. + +
  77. + + + +
    +
    +
    Name
    Button_Texture_Help.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  78. + +
  79. + + + +
    +
    +
    Name
    Button_Texture_Image_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  80. + +
  81. + + + +
    +
    +
    Name
    Button_Texture_Image.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  82. + +
  83. + + + +
    +
    +
    Name
    Button_Texture_Insert_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  84. + +
  85. + + + +
    +
    +
    Name
    Button_Texture_Insert.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  86. + +
  87. + + + +
    +
    +
    Name
    Button_Texture_Lasso_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  88. + +
  89. + + + +
    +
    +
    Name
    Button_Texture_Lasso.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  90. + +
  91. + + + +
    +
    +
    Name
    Button_Texture_Menu_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  92. + +
  93. + + + +
    +
    +
    Name
    Button_Texture_Menu.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  94. + +
  95. + + + +
    +
    +
    Name
    Button_Texture_New_Doc_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  96. + +
  97. + + + +
    +
    +
    Name
    Button_Texture_New_Doc.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  98. + +
  99. + + + +
    +
    +
    Name
    Button_Texture_Next_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  100. + +
  101. + + + +
    +
    +
    Name
    Button_Texture_Next.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  102. + +
  103. + + + +
    +
    +
    Name
    Button_Texture_OK_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  104. + +
  105. + + + +
    +
    +
    Name
    Button_Texture_OK.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  106. + +
  107. + + + +
    +
    +
    Name
    Button_Texture_Options_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  108. + +
  109. + + + +
    +
    +
    Name
    Button_Texture_Options.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  110. + +
  111. + + + +
    +
    +
    Name
    Button_Texture_Pause.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  112. + +
  113. + + + +
    +
    +
    Name
    Button_Texture_Photos_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  114. + +
  115. + + + +
    +
    +
    Name
    Button_Texture_Photos.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  116. + +
  117. + + + +
    +
    +
    Name
    Button_Texture_Play.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  118. + +
  119. + + + +
    +
    +
    Name
    Button_Texture_Prev_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  120. + +
  121. + + + +
    +
    +
    Name
    Button_Texture_Prev.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  122. + +
  123. + + + +
    +
    +
    Name
    Button_Texture_PrevScreen_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  124. + +
  125. + + + +
    +
    +
    Name
    Button_Texture_PrevScreen.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  126. + +
  127. + + + +
    +
    +
    Name
    Button_Texture_Redo_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  128. + +
  129. + + + +
    +
    +
    Name
    Button_Texture_Redo.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  130. + +
  131. + + + +
    +
    +
    Name
    Button_Texture_RedPen_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  132. + +
  133. + + + +
    +
    +
    Name
    Button_Texture_RedPen.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  134. + +
  135. + + + +
    +
    +
    Name
    Button_Texture_Remove_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  136. + +
  137. + + + +
    +
    +
    Name
    Button_Texture_Remove.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  138. + +
  139. + + + +
    +
    +
    Name
    Button_Texture_Save_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  140. + +
  141. + + + +
    +
    +
    Name
    Button_Texture_Save.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  142. + +
  143. + + + +
    +
    +
    Name
    Button_Texture_Share_Android_Down.png
    +
    Source
    Android
    +
    License
    Check License
    +
    +
    +
  144. + +
  145. + + + +
    +
    +
    Name
    Button_Texture_Share_Android.png
    +
    Source
    Android
    +
    License
    Check License
    +
    +
    +
  146. + +
  147. + + + +
    +
    +
    Name
    Button_Texture_Share_Facebook_Down.png
    +
    Source
    Facebook
    +
    License
    Check License
    +
    +
    +
  148. + +
  149. + + + +
    +
    +
    Name
    Button_Texture_Share_Facebook.png
    +
    Source
    Facebook
    +
    License
    Check License
    +
    +
    +
  150. + +
  151. + + + +
    +
    +
    Name
    Button_Texture_Share_IOS_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  152. + +
  153. + + + +
    +
    +
    Name
    Button_Texture_Share_IOS.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  154. + +
  155. + + + +
    +
    +
    Name
    Button_Texture_Share_Mail_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  156. + +
  157. + + + +
    +
    +
    Name
    Button_Texture_Share_Mail.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  158. + +
  159. + + + +
    +
    +
    Name
    Button_Texture_Share_Twitter_Down.png
    +
    Source
    Twitter
    +
    License
    Check License
    +
    +
    +
  160. + +
  161. + + + +
    +
    +
    Name
    Button_Texture_Share_Twitter.png
    +
    Source
    Twitter
    +
    License
    Check License
    +
    +
    +
  162. + +
  163. + + + +
    +
    +
    Name
    Button_Texture_Time_Next_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  164. + +
  165. + + + +
    +
    +
    Name
    Button_Texture_Time_Next.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  166. + +
  167. + + + +
    +
    +
    Name
    Button_Texture_Time_Prev_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  168. + +
  169. + + + +
    +
    +
    Name
    Button_Texture_Time_Prev.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  170. + +
  171. + + + +
    +
    +
    Name
    Button_Texture_Trash_Down.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  172. + +
  173. + + + +
    +
    +
    Name
    Button_Texture_Trash.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  174. + +
  175. + + + +
    +
    +
    Name
    Button_Texture_Undo_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  176. + +
  177. + + + +
    +
    +
    Name
    Button_Texture_Undo.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  178. + +
  179. + + + +
    +
    +
    Name
    Button_Texture_Ungroup_Down.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  180. + +
  181. + + + +
    +
    +
    Name
    Button_Texture_Ungroup.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  182. + +
  183. + + + +
    +
    +
    Name
    Help_KSketch.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  184. + +
  185. + + + +
    +
    +
    Name
    Home_KSketch_Error.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  186. + +
  187. + + + +
    +
    +
    Name
    Home_KSketch_New.png
    +
    Source
    Glyphish (remixed)
    +
    License
    Creative Commons Attribution 3.0 US
    +
    +
    +
  188. + +
  189. + + + +
    +
    +
    Name
    Logo_KSketch.png
    +
    Source
    K-Sketch
    +
    License
    MPL 2.0 License
    +
    +
    +
  190. + +
  191. + + + +
    +
    +
    Name
    Splash_KSketch.png
    +
    Source
    SMU and GAMBIT
    +
    License
    Unknown
    +
    +
    +
  192. + +
+ + + + + From 59c8069bc647c85b885190edb52b516a08aaa347 Mon Sep 17 00:00:00 2001 From: camellia Date: Wed, 12 Aug 2015 07:06:34 +0800 Subject: [PATCH 34/37] Replaced all icons with high-resolution images --- .../src/assets/Button_ActionList_Delete.png | Bin 666 -> 644 bytes .../src/assets/Button_ActionList_Log.png | Bin 473 -> 478 bytes .../src/assets/Button_ActionList_Save.png | Bin 3820 -> 757 bytes .../src/assets/Button_Texture_Back.png | Bin 3891 -> 4096 bytes .../src/assets/Button_Texture_Back_Down.png | Bin 3730 -> 4055 bytes .../src/assets/Button_Texture_BlackPen.png | Bin 3828 -> 7004 bytes .../assets/Button_Texture_BlackPen_Down.png | Bin 3768 -> 6961 bytes .../src/assets/Button_Texture_BluePen.png | Bin 3770 -> 7030 bytes .../assets/Button_Texture_BluePen_Down.png | Bin 3885 -> 7425 bytes .../src/assets/Button_Texture_Camera.png | Bin 3281 -> 4704 bytes .../src/assets/Button_Texture_Camera_Down.png | Bin 3270 -> 4676 bytes .../src/assets/Button_Texture_Cancel.png | Bin 3246 -> 4667 bytes .../src/assets/Button_Texture_Cancel_Down.png | Bin 3159 -> 4208 bytes .../src/assets/Button_Texture_Center.png | Bin 3411 -> 4894 bytes .../src/assets/Button_Texture_Center_Down.png | Bin 3210 -> 4390 bytes .../src/assets/Button_Texture_Clear.png | Bin 3258 -> 4692 bytes .../src/assets/Button_Texture_Clear_Down.png | Bin 3237 -> 4360 bytes .../src/assets/Button_Texture_Connect.png | Bin 0 -> 5754 bytes .../assets/Button_Texture_Connect_Down.png | Bin 0 -> 6272 bytes .../src/assets/Button_Texture_Crop.png | Bin 3345 -> 5415 bytes .../src/assets/Button_Texture_Crop_Down.png | Bin 3331 -> 5412 bytes .../src/assets/Button_Texture_Debug.png | Bin 3439 -> 4019 bytes .../src/assets/Button_Texture_Debug_Down.png | Bin 6057 -> 4020 bytes .../assets/Button_Texture_DocumentScreen.png | Bin 3233 -> 3928 bytes .../Button_Texture_DocumentScreen_Down.png | Bin 3233 -> 3924 bytes .../src/assets/Button_Texture_Eraser.png | Bin 8599 -> 3839 bytes .../src/assets/Button_Texture_Eraser_Down.png | Bin 7991 -> 5249 bytes .../src/assets/Button_Texture_Extend.png | Bin 3592 -> 3972 bytes .../src/assets/Button_Texture_Extend_Down.png | Bin 3481 -> 3922 bytes .../src/assets/Button_Texture_Forward.png | Bin 3890 -> 4095 bytes .../assets/Button_Texture_Forward_Down.png | Bin 3763 -> 4073 bytes .../src/assets/Button_Texture_Frame_Next.png | Bin 1649 -> 3440 bytes .../assets/Button_Texture_Frame_Next_Down.png | Bin 1560 -> 3256 bytes .../src/assets/Button_Texture_Frame_Prev.png | Bin 1799 -> 3446 bytes .../assets/Button_Texture_Frame_Prev_Down.png | Bin 1606 -> 3266 bytes .../src/assets/Button_Texture_GreenPen.png | Bin 3834 -> 7135 bytes .../assets/Button_Texture_GreenPen_Down.png | Bin 3879 -> 7432 bytes .../src/assets/Button_Texture_Group.png | Bin 3015 -> 3999 bytes .../src/assets/Button_Texture_Group_Down.png | Bin 2866 -> 4043 bytes .../src/assets/Button_Texture_Help.png | Bin 996 -> 4437 bytes .../src/assets/Button_Texture_Help_Down.png | Bin 1198 -> 4470 bytes .../src/assets/Button_Texture_Image.png | Bin 3146 -> 4042 bytes .../src/assets/Button_Texture_Image_Down.png | Bin 3353 -> 4330 bytes .../src/assets/Button_Texture_Insert.png | Bin 3174 -> 4001 bytes .../src/assets/Button_Texture_Insert_Down.png | Bin 3142 -> 3989 bytes .../assets/Button_Texture_Instructions_1.png | Bin 0 -> 4507 bytes .../assets/Button_Texture_Instructions_2.png | Bin 0 -> 4020 bytes .../Button_Texture_Instructions_Next.png | Bin 0 -> 4035 bytes .../Button_Texture_Instructions_Prev.png | Bin 0 -> 4033 bytes .../src/assets/Button_Texture_Lasso.png | Bin 4278 -> 8617 bytes .../src/assets/Button_Texture_Lasso_Down.png | Bin 3073 -> 7932 bytes .../src/assets/Button_Texture_Menu.png | Bin 3081 -> 3663 bytes .../src/assets/Button_Texture_Menu_Down.png | Bin 3088 -> 3559 bytes .../src/assets/Button_Texture_New_Doc.png | Bin 3244 -> 4439 bytes .../assets/Button_Texture_New_Doc_Down.png | Bin 3246 -> 4453 bytes .../src/assets/Button_Texture_Next.png | Bin 3012 -> 3643 bytes .../src/assets/Button_Texture_Next_Down.png | Bin 2966 -> 3616 bytes KSKInterface/src/assets/Button_Texture_OK.png | Bin 3226 -> 4576 bytes .../src/assets/Button_Texture_OK_Down.png | Bin 3185 -> 4644 bytes .../src/assets/Button_Texture_Options.png | Bin 3373 -> 5107 bytes .../assets/Button_Texture_Options_Down.png | Bin 3331 -> 4980 bytes .../src/assets/Button_Texture_Pause.png | Bin 2894 -> 3367 bytes .../src/assets/Button_Texture_Photos.png | Bin 3080 -> 3388 bytes .../src/assets/Button_Texture_Photos_Down.png | Bin 3070 -> 3315 bytes .../src/assets/Button_Texture_Play.png | Bin 3102 -> 3750 bytes .../src/assets/Button_Texture_Prev.png | Bin 3123 -> 4157 bytes .../src/assets/Button_Texture_PrevScreen.png | Bin 3133 -> 3688 bytes .../assets/Button_Texture_PrevScreen_Down.png | Bin 3084 -> 3664 bytes .../src/assets/Button_Texture_Prev_Down.png | Bin 3151 -> 3605 bytes .../src/assets/Button_Texture_RedPen.png | Bin 3979 -> 6641 bytes .../src/assets/Button_Texture_RedPen_Down.png | Bin 3896 -> 6412 bytes .../src/assets/Button_Texture_Redo.png | Bin 1199 -> 4589 bytes .../src/assets/Button_Texture_Redo_Down.png | Bin 1025 -> 4573 bytes .../src/assets/Button_Texture_Remove.png | Bin 3201 -> 4795 bytes .../src/assets/Button_Texture_Remove_Down.png | Bin 3166 -> 4230 bytes .../src/assets/Button_Texture_Save.png | Bin 1136 -> 4448 bytes .../src/assets/Button_Texture_Save_Down.png | Bin 1070 -> 4399 bytes .../assets/Button_Texture_Share_Android.png | Bin 846 -> 4042 bytes .../Button_Texture_Share_Android_Down.png | Bin 893 -> 4174 bytes .../assets/Button_Texture_Share_Facebook.png | Bin 910 -> 4435 bytes .../Button_Texture_Share_Facebook_Down.png | Bin 635 -> 3513 bytes .../src/assets/Button_Texture_Share_IOS.png | Bin 1040 -> 4126 bytes .../assets/Button_Texture_Share_IOS_Down.png | Bin 914 -> 4117 bytes .../src/assets/Button_Texture_Share_Mail.png | Bin 763 -> 3896 bytes .../assets/Button_Texture_Share_Mail_Down.png | Bin 1078 -> 4035 bytes .../assets/Button_Texture_Share_Twitter.png | Bin 1175 -> 4586 bytes .../Button_Texture_Share_Twitter_Down.png | Bin 1459 -> 4692 bytes .../src/assets/Button_Texture_Time_Next.png | Bin 665 -> 3775 bytes .../assets/Button_Texture_Time_Next_Down.png | Bin 623 -> 3768 bytes .../src/assets/Button_Texture_Time_Prev.png | Bin 1530 -> 3974 bytes .../assets/Button_Texture_Time_Prev_Down.png | Bin 1425 -> 3846 bytes .../src/assets/Button_Texture_Trash.png | Bin 3204 -> 3905 bytes .../src/assets/Button_Texture_Trash_Down.png | Bin 3203 -> 3882 bytes .../src/assets/Button_Texture_Undo.png | Bin 1338 -> 5206 bytes .../src/assets/Button_Texture_Undo_Down.png | Bin 1025 -> 4566 bytes .../src/assets/Button_Texture_Ungroup.png | Bin 1890 -> 3463 bytes .../assets/Button_Texture_Ungroup_Down.png | Bin 1840 -> 3182 bytes ...tch_Buttons.pngButton_Texture_Ungroup_Down | Bin 0 -> 3537 bytes 98 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Back.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Back_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_BlackPen.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_BlackPen_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_BluePen.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_BluePen_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Camera.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Camera_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Cancel.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Cancel_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Center.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Center_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Clear.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Clear_Down.png create mode 100644 KSKInterface/src/assets/Button_Texture_Connect.png create mode 100644 KSKInterface/src/assets/Button_Texture_Connect_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Crop.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Crop_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Eraser_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Extend.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Extend_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Forward.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Forward_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_GreenPen.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_GreenPen_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Group.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Group_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Image.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Image_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Insert.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Insert_Down.png create mode 100644 KSKInterface/src/assets/Button_Texture_Instructions_1.png create mode 100644 KSKInterface/src/assets/Button_Texture_Instructions_2.png create mode 100644 KSKInterface/src/assets/Button_Texture_Instructions_Next.png create mode 100644 KSKInterface/src/assets/Button_Texture_Instructions_Prev.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Menu.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Menu_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_New_Doc.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_New_Doc_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Next.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Next_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_OK.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_OK_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Options.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Options_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Pause.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Photos.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Photos_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Play.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Prev.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Prev_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Remove.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Remove_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Trash.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Trash_Down.png mode change 100755 => 100644 KSKInterface/src/assets/Button_Texture_Ungroup.png create mode 100644 KSKInterface/src/assets/KSketch_Buttons.pngButton_Texture_Ungroup_Down diff --git a/KSKInterface/src/assets/Button_ActionList_Delete.png b/KSKInterface/src/assets/Button_ActionList_Delete.png index a3e0623e03204c2557bbe33bc83ab405bdc155c9..bf768004b2ae52d8f66e88bbf02a63330a24afd3 100644 GIT binary patch delta 582 zcmbQm+QK@)vtG^9#WAGf)|=b={X`rY*dIKcufQo@t-o;NMfLzLE+3B8*4B*+HYkXx ziAit?bN3pyu`B%G5)lDXYGz_Dm|t+uQRR$tQ0myQ`Pmt{JB30sT+h9~o|E@()ArwY z&%8NzF6R8N7hA&}t(K`b-#UK5axaHNBNHo^hz28w2v|_>zzHOQVyYklNdh76H}7Bl zLj}F_ww%r1-?!d-b#>bN{}sE1wuy@!UVrO)vGuXy|J}zwoPM78;-Sy+^KY-ePE7t& zw(sxzS#fI|>zk+iUo_P#>~q@g&2C@s?wDu3+Bw}-(!aH)nXAbJsr>XQOs&-XvYpZDbxx1JO7zs}dtT<+)rOtY+PU^kb&y`H z51%OizuR+n|CEX4+OYS0{3p}E!vC7d6WdnHfdgGAV1Ye2)TcCngFb)>948KqKnWD_ dpfimO%nYCTdRH7|E&9m-1fH&bF6*2UngDy?2Uh?9 delta 604 zcmZo+oy9uAv);zj#WAGf)|=b*-cErM$3MDX_VRAO#v~o{igik|^G~Kl3l%+X3AZm; zSio^>>4F1}TvAetwqMBF+aMJsl~W?t}qRQ*bzW!zo?3>>G{ITWn;`f%j zJ}oTpaY<|4(tErjN2*^{4tDXVG2MRKR`9OjLs)o@O zriS6`?}~qi+a-GSy6t!BznhtP`uqLO+ki<_3slheKbTT5ig9LwqTL9b3! z1~h*0+*-7^qfT?*k!>GkCWt576#HDi{BcRR$FrXNqpLFd8l`&IeaW}kn0P_{MCBA& z-J4VSTk~7$8@|;ay7?;nRNspuTQ=-FsLFG_s$}o6J#n$8)8Fm<74_WanO^Y8dsp={ zv!)wAE6Pt(?ZrIh3u=B^fJsc&RSc+dn!h+a|fqZdZgd=vDg0l-m|~i&OCkgH@K=Nbm!cSwM%bI?=aU< zxiRz6xxCuaV}-Hn=UBczIn9Z66ZcB>fLmWnX6~M1wQl{(QsXMWyZoU`*Pgr>+aGTW tw+<=Xp-~gS0*Wdm7eSTCOwDIxV+gHm`@8dGS2_a_c)I$ztaD0e0sxC44)6c~ diff --git a/KSKInterface/src/assets/Button_ActionList_Log.png b/KSKInterface/src/assets/Button_ActionList_Log.png index a8aeb71f5bda761213192128cfc01fa952ad41e1..8e77312114dd74e85a889ced523f01b445c2f305 100644 GIT binary patch delta 415 zcmcb~e2;m8XMKaGi(^Q|tv9#qy$?Icusyh3^3mT)qv_I7*Ms>F%`f)9R#?~Mmz3MR zk?)%7(FV`OjB->KOAnI?z#&VC-aK5$Quv*p}%)**J% z8w@|2&2(uEvJF`9@124E=}q$#-v_S$7#RARKeQ)4-TUhq4aU^;y!3hXCF%dP1I`w& z3^~6n#Q!TM+SmO&5a{e*+iy2tS+BlL>eXw<^v`ds1TNr@A)78&qol`;+ E0Iwpn0RR91 delta 410 zcmcb|e3N;CXMMG&i(^Q|tv9zedL4FPV0#d36y~wbDsujUBkCV~zqpFdcPP}G)YY1j zZN{8tP^jUz)am?^hrb^#2=?Ar@c(I%ZFNP>E`CLwrZ>KqdUxmDS#)E5G0OsnMkZFS zDGfkEL?d7U3y5%N6ao?G;`LyOdVitE-ua(WJua7A;QoCh=TO#Hv$z#1o@E|Kf7J>s zd3`i=$DH%Wc}opvzqJ!TT4k`}U)xKKRK8QI$~`u%yK`CRomRxO(2QBnwk)h#vM(Wd z*}ZFl3w>+@7A%W?b~au3)vmr@(($>~zXDQ2|MCR;yK@5F^XBWDuWDPa*Z&q@@z3{p zK)!XUh(_wVGgEgOT@PF^Wv5a2vr{oMxitcWD{M}%{i}YoV&S&^d{&=pEN`@Kb+;4f zHTs$~pG*D=L)8=J>l(rDe?ASJ8T}QXPtigkE9IwH0>eq+yh3@ez`4g5fWXt$&t;uc GLK6TxCA7H! diff --git a/KSKInterface/src/assets/Button_ActionList_Save.png b/KSKInterface/src/assets/Button_ActionList_Save.png index aedd0ee7408ec2f4d11d56e0e767bd7fef0a2bbd..dbfa8bfa4ba0d47ce0d58b8afa71792514aa7909 100644 GIT binary patch delta 733 zcmaDO`;~QqO1)%>YeY$Kep*R+Vo@rCV@iHfs)A>3VtQ&&YGO)d;mK4R1_q|-o-U3d z6}R5p^7WSr6gl=WT0y|~wKS8fxT%^{>p-tk>Ae!cw1+$+ag_Fw~l1!b& z9wyt%8_!gvKWq4}KC_iO_0Qen^K-0!J$rrfrFin0KE>eRuKIQ7FP8Eg{UV~kz@@RE zfr(3lNhH95krhY?g1HMClptK77$a240uH#6N6V*Nz#R%->zNuZ>{=j&DB}%+ng+9ma!?%uiv@*^TU^~ zd$)#O))PBhVRMc9>AGk0_y1R`ReqZjw%Y&pUI|50>C)oAn->?qKFND3YuD8&u5~3= z=f17?edn$^WzC}6;vmn=Jj?AxPdAC5&1KYD@Z?yE=>O={{-yI*tdc6N4cPSb(<-&y ztKR+EzuYdOsJ&=*#kH$nW_-I^s3Q>ZL_?zrhfY4)a$m`#d(44igUkgJ@2)*C$3oTu6pwLwS#A(SBjW^-m&4; ztjc@GxvQ=$a?G56=BrHNl=)w;$aLMTI$|FZC;WNy;_mi;U$nHcp1eH&DrfJSg*E@2 zk2pE2+8$eSZ!z1K6+YT?<))fmsTI&MnX-L5dr{9t3-7PL!fIm!jBeCg|2}tZu{-V< l$4C@RT@1i9;`LeK0K;FGb9-4Wz9lmNfv2mV%Q~loCIE$8RPO)) literal 3820 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 diff --git a/KSKInterface/src/assets/Button_Texture_Back.png b/KSKInterface/src/assets/Button_Texture_Back.png old mode 100755 new mode 100644 index 891b0ed3aa552fa44089c9c84a7da88631e6255f..0fd736fc568ea1edf0e5efbe7f14d00ac357daa6 GIT binary patch literal 4096 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 diff --git a/KSKInterface/src/assets/Button_Texture_Back_Down.png b/KSKInterface/src/assets/Button_Texture_Back_Down.png old mode 100755 new mode 100644 index acf801392f0b4f9a8880b49e55e5f6c09a4000c8..aac718079b8353c4066947957b90d65d84ed8d22 GIT binary patch literal 4055 zcmY+GWmwY<7l;3o?vQW-$|zyPXry7IJBEysW+0OC2vTlRQ+VhcA*g_~f|Lvx-Kpd# zNf7}h1f^czZ}0ozKKFG#o$LHQoa;O{Gtp(By-5oI0E51smc?JY{TFJ=ztw*=1Nm1p z{(3f#0D$iLe*ppbyc+;OYwCqSn3;L{1^GSl^z-M{M<96p1N}U_9=ZcS$b7yf8fm%B zp?b1(1UJNC(hdDA*r|Cf;PDu?6d@>thS>lIDVk$9?_kl^Cgz1t zS(nhj(hB$k%+z&mkVhB%AmB7oMMad4NYw^_LO#(^14QFoq9k|R71K9(jy(ty4I&1m z+%=@eumKvOiSQCYLkEP(&la)-3dsSdAy=0*z)T!)y7P4N6M)G-%?SemcIgmyP+Vd-TdFw;}|7N3Il-xWwx3RuHYtRk1a~`yg zxI}k460I*D{*F{RKRI4$TNS`cJ79ImPggpJkBo}B$5LscT^2Tzbk7^K{gx7B5_GcvVhIpEy`HBeZJ_*(~8vR{UGm{CE* z)e`_XXz}a#EKE&?@r?R17JRj@exX|^2w*()Qv(3tzLtOlaID0&!6QpF_l!;RXO!r) zYGPFNXZqtzUC<#+z|xRw_ETSXhRowYE-z60iPW4qF{h9YJ#yA~0p0-|n>n9hikzO5 z#S0{_l^)N5YTz}+ID4IsDa!qT^t1C=g056Lw$@zrGkrax`K`juXq{Jd<8DDx_#}?P z-0{E z-p#v~N-65&LK$387_zLqqt&HY#W`$LGzS)i?mnFJP z`E6V|`mG;Q{Y|9J#dAuVE~73}#2fR%_l|3XUS2v^a9xNP#G9ca_8+WVx6u2Mx$wu( zmh20jmUz|jvLZ! zwM4mhF;`KGR&cv->0Wk0+kH%dkzeW3lh&<2+!3$~hkyj(rIdZwGQZv$9xm&q2xyy}Cwjs7+4R0Ho-1TeMZA)zS z8VJ5Iwu&~zC@WisI-RQgD#7WNs+Llg(q@x1lZt|Abl1C|4Fe5jjo^11vy`Oj2A_rq zXS53^y0NFaYcH)eE#hOuzZa@h3~_Ue6+E^)k&iwEvMJqDTEdU!?Wsrf9A$39(5Nxy zv00h5hU-Hj-Cp^Yxu0~=oap99QHQwr=Z4RQB(l^ba=CgJ`&-uyf{p_mzJyL5=jYbt zcJ96<)$GaddF{n5yd0K&DNpv0Hqi~ z5Sr{cRugM??d&u(9MYbsu0(SGRXew-0F4^QLorS0w$Nn7A10SoK7I9O~wTRF+)u!~){cveqB1Os%C{w3Ml0jktjv zRIOa%fy%tXN7;|+y%HWa!&9hyl>S3QZbb=bwY=}cw&nBP!?@M_Rl2n>&TLq}ga4DF z(axioQjRhSRxzba4I`Y%-Si)t%+R+S34#aLg9Q_5pLFtcqWNGG@)NjOggx|@$$=i! zI5hQp3PJ9PK#xqZ*hX{oow8(t5rffUu2KO9{xPqQw5n38R8(q8asa#>Vw~21{)XQ4 zcsx|;9#ebS;~U=yyOlvT;9ZwoNns;S+W;^5inJA;fl}3?-K{;^N1hKVW>yr4j_eNC z4U&=-^7da|?Xq^Veo1X8jy1Fv=Rs|@Rz6UyRS9@PqFrOB5RJV@S*gUo zomCy#Dimt$jlJJ7_^hKItKq4*(}#P|B21#Qe%JqqMD7wnZ^Ee zR(K&~gDcK&usvrX{XpY2ZrT)A9jy_X_H`C zBf_MXs0Kvy>vokUf_v$}=!mj9@(uC``3EV#H@R5vJag(hvBwog_$B*&ieyJPxlkKu zBUyp0jHf)N+|TsS>Q2&g1|3C;4!Ee56e#|dGTU#LFae$0dBfjxlZ5AZs< zmiRL}7rT$9!)g=L-VX&A=cR}-w=tmt&dXPqL)Dxdu*lP?ote>z?1`eRgRHc6pYY;~Z^RvN4XL-Y z_g33Lh>XaVu};2%i<_~rxvO4$Iw>6hx*qXPgG*YveCks3NkC0Eq}e}L^J7N>wI zTiGw{#5s$^?D@3D9|n7y$7^IwA@MbFk75_i^I98s7xotx_o=!hy8PS2HWjw=_VdE_ z6)9LcaB;69D1^EtA^#5!Hz_OjDcp(1j3Sc!a#->)sEHOuX%FJ2OdN58oPct%$^hsW z03&-1?rEo(C9eeV7|>HS{-S6$OdnSFqQ<`(76NJlxIt|cq1blm%n6EzAX_0q*o0bKo|pfvD_nmn=BF~@NQc`bl<>x8I@HN( z5E`!hLuHbBKz=7Ld!i>Lefri6r8~;!`G&9iqSgb+Ysi#_>wFr^Tk* zb_fdL4I>=|NkfsyxP2L01f|GErHAJL>PuZ2MG+bMBfd599*=Tm2Oo?dou0>T+ zI%Ij3KqG(j8FAJw%q09CjL=bLF}J7$w_v!~EJ?e>i}xGnf`Z@{><&9sgtAL|(L~vD zg_x`Juyid)po}lA1EP1CDAyz!v8!ct&v=?|1+gL#BTefs{)5}MGdTyUg^{`%S|}4B zTX4vz0Zx+1;PN(GSmoA)mW-inI&hJ9e+JR@tHa|F!5(6tJUFGaHI_yS@;?~iXr%s! z99FA^!(AN#xCHPLcuAV!j!PC=;T@;pHWPDYKV6D$YEj)>nI8E@9%;sQptMJ+xbs<6 z*I$&3#|*lrzam&T7M*ZN_YQQo+HBMVR!n!=`?u%uU94I&*x(_bUde>WLJA^b?pkHT z2r0vfn>T)unOSwo3sLz`{O(ky#g65#oMgk|1YrZ4svOq75Y;!CtXI|9 ztTmL3Imv(0LwNiR0)8}23`s!>#xR`NPX<5RyGJ4z@W}z80cU;*(4PG+)mCLUcyAd1 zTPcv6abohtyU+feJBL}4`_p=VFqx(->wpkwOtTceu`6F_YpnQswzQIAZer_aTjdK= z{XVw3n&YAe1{RPye>%{cViBib_4-nRm)8_dhxOpQ$^%<)W7IFf;kHY?@NNy#Cc|vQlPez*K{kFY;m_}4)8-&o z{qWn5sDqEI;0;`czK2g?OQ_m=@uQT9?WC-e)qe%Ow*yymk7)TiW#M5vQ`$xWJ5$?2 vny*Fz18ez0x_m}tdVTlrTFkoce$&rD9sfHOB28QbA|7nG4gTLD2Pgl$# zF};T=Hk7@OhG7j9-G0{L*Y){sD7)Z_MH53>i#9$NW0(JIplmqt8&mteQs2k24K3Yb zsgQUpDzz$5xB^?!S}*atD6*hzqndZX*Pm|gH2iEVjzrs~EiUtY{^eBr-&Wg}oVgLZp+Y02D4ox++{3#ynEgb4F)SrN{A!qoU0hba zE~TEaBq5ma?L69(k-N1=v&2KMMhy`6Svs{#4e-o3Vaf5AC$c!w)R>$H9c~eQj||$7 zBs@i^lQkGXDTp`qC3b{p$7D(_VDVgf+b_Y!^JN}C9Y7|eWLrvZPjs2%0x8$42(5>N z1;yRc4{b+oY7hhjndm&P^*-4+jk4#Sp<5hoXRAKb-wm;8Hz0FvN$b9I9b<<&KJdue zmA87A%Qodg{!tEbdidX}Wuo)OF%vIgNvOpxs`k1y3#^sbG*)juc%s0>g8J0MS1q^ep zzjiWu5$T?R3X_FM(oLmVe{B_B$(H~UU^{#$n-2Cv`nVgm1kvr5 zd8`0s<7^j5)}6xjMr2*4nQC5zDF_bS133fdsGD2>|0^id(Dwo4nfue2j*k0&tt+1MyVhDc2#MDtsP`1j^VcB~h8v2>@=SKHHho*akcV-1P>F0-dOlJG--xJa3Q>+=ZHKei=b>-9D zA&?J`Z22CwiIdcws2m{WOzLJ_C~7L|5S~pPazn@N=lu%!GC&_?K#zIuJI^giva8=< zu}>;Wz!Z2O!582+gOdtppyzRFKy1^LafYyfkt895*g`Q^;j_GI*##D)H$A#Q404l5140`rlOpvYA_CbatKf` z)j*P9ssVof>lJRWKkhoy2mYV-rGLNT|KGW&@&j(5M_wI`rAgP%hjA>6eIkHfd^nP% zVF>gB56tcGu?8&YsE0f+4Dcb)w{cywcf_G2kRD5X>v9Aj;fp(c(v*3(S(*LjGcgqM zI#8h?X*j)qAC zAg4Uq>yR3TAie8`>ak`Oz{holzCK!SoCj9J zIWcZqO{-1pwBY7E^MXXvFyzonL-~dD&IB4l$@%KKb%4BmJMHt)}bKcm%xdj@5{F=&IIKLKn-*VpjCb-4+Mb0 zAuz`$aEwm-2Vuy+w|;3yX`2W-5cB9aJ-Efb0Kxf%FZsnHBl4+Eohjy^@TZwWSb5k_ zGl$qtd7)x%&drhIE^bgsA`=~z86kZID2-f&W_b*PtP8?H|u%SL|Yt-*AxZI*)<#A2k6Li|g6BaZg2MkFal(}F*qAxK4KVh8m$ zp_RIBQtv#Fi!JwShi{ej>fGSQAMWbeC@@~m5jEO5Rvg}R?^+xtexhXaQQwTB%NreQ z8$XPZrrxvP4;p|FpXv)Gph;jC)~g(3`Gm-7aR;6v3+zZ zv|PSNv7&U#wf^2EStF)miRZa-qG^8v>g}C*d0xvt?`IQy5@dGs-(JDT>|8P=Byi}s zA9;f;wQ6Ip{)b~B$2u6EJyleEVD_-s#$){#9C}o0jeS;gc7kkUl}$z5Q9jq6*gO1; zL9b}=U;#=|rw>fXBQytU#gek2rO6_B(|#}b=ei(p3CcX?fSYvznr<||-+}(@c9IC* u1ZQ==KWKh)dgFhy;t%`l4+Dxt{xAmlV$9o#lHiBL{Q4GJ0x0000DNk~Le0001F0001F2nGNE0C3`!Q~&?~32;bR za{vGf6951U69E94oEWh-i3)!ZheRE=q=ATniP15e zs;yEs`(fupVlt`O%$CwOyx;}KIGbd4KF!uxt5utzXhsFOWoojM7^Bf7&P>!8jU&mZ z2sYiErn}LYc-;iADA3*K)@MJQZWa?%E`7QW*v}U&imvKDKc4sbJGX*fZT(0*QnM@@vrxO~j_JO~w(dlvN;zcZ3Que~} z=H@>Rw*(BQs8<5m9BO_Z)yQF7%ub8VR>C-)ptZVTy-1_eFL3>YuC`--3^vyGu>|Y zzQrc<0)}Bm4P!8rt5>hW`v3No5{br;0I(Lon-k5xZr^{p1+&?V%*;$=Wo0G&`t@J` z{y%>6n+0yS8#GOi3C2)L{I}!BcLPX^RHyz5fQ=Ik3Qf}hV9@CFuhcg+<=?$~=l0AQ zg$M?Nh}6E3ti+d4YBD`{_{fo+9LN14QlpbKp_(#b3cVyrn$WWRuK-wkyTg?+CH+QG z(F_QJh{%6!=1I7H>lVKM?)zs%QT)e90SWgh6GDk;n$Fg0wbcM#k|aqWNmAlCo!;LbV)s~Quus)JN!b&{eo5$?)-+c2yAQ1RfUVh#b zQ51Pek|dHONnaqq+S{Gp^vRQN%$hZGOv{%fNzi}m^=PPXyk)alYyb`d=!-OvFqEos zT2r#zZug$0%a{Mt@h`tZK|#Uvf`a@kDRk9oilTgeKYOO#;hmC}eq%=A^icr`27}OO zXf!o8^jNKC6M#dJu&f6u@hc(w(v2e+nI5lqZ>ib5fazf1^Z9Yc-cB2HbBptGrwu@% zD2jg!1X!-M?TjZYGvnstj~76aq+x^MIUZWA22Bl(cPwV}A^?XY(T5CIiC2sp7#`2Q zMT<)pbauL-(P}}{6#V`GTHD&ly!^akV{T4HFepj@K$0ZM3xd$n+UCxlnsu|FARiJQ z4uxk~BpDLXSl@8VVlgiU@Oh*<_2EWMC|iHj9MilW&)&r*(*l>vbFbJrr1sf2Mlf3%+wh7t&{Xlt{Rxw+Gd3#S)M9&71 zch;1Qn?*BcKooy$UpyN?QgRY%YHPb~R_l@nEmP3|0svb8{JYvRgJGDRW~=p~Q(KZG z;q&=nZ+B8T**QfsW)x=gybOgT34-HzzRlk5Nl#C|IcruCgh5bvo=0M$0Xu5zZiHYQ z8c8u$OzlJF^((cgt;^-wWwn)+FvEYG+ENsW-riocJ3FYHoa~u}h0~`Bf*=hju|L4t z+a0nJ7t2Z<3+9Qo-_-<#xMwo2}N84(G^5=rm2Ex3?Ge zb|*b8C#U%Fg8ZytFeocAO;LWopA9vSHwp`<%Qn^6&@)p4wv~+%FryCmG=tt-jMZ)h3;B=dv%*)T4Wz5aV3kl^Nq$VK@cEGlAa)l zvjBc8@WP3)cG%I5?NNYY?Ck8^wYbzYpXqRh$Lf*keg`S>)a1&;Lq*Z|-{ zBt{;wh~Fz%=%+CZv(sd;mM|U8G4J%kaz^2;wTd-27exr3q@v0foo5msUV*cOQb z-WgKcaMPz046Rm+riO+di^XgLaQN=syOGPj821PIP^OHvrewN3p1mfsWz=droZxu@ z8jS``jSY7!mIqI5$18sj0ML$6i8JMc&+?#fENc5e7%U4zf=47)l#ZNW~dQJSc!*gUq-jv{lVf=d1@PpKI48cl9Q9e zQ`@r9j6=pVkgyUzY)YKVFwD+Uvqdqrm1_ovM1ujfJ9bKWaQ~JZJ5eNzS%-8*t zIEQh$-j9ab>Jt)BU*B-cX0_U)0VCGh`>;YkloDrmc6RQzSZxcGgds^%XlmQoV=>EW z8_mB)wMJNp*T^R}G#Os6_d}D#q9_bO5I}2aG&MB#Sj^_d(S)Jq3>nB2j^k?5)6?|~ z!~A?@Ma6uVs}p}3oigY0c$S61kcftchC87H35TQofmIEpzrP<(KKUe`e_>(u>dH#E z7?;9on}V9!9oH=uOIa*nsCvoj?d`?fxpPszdKI?T)WTtJ2T78O!AMR{K~2q$ZkyF& z!wB}k9|<6ReSP@Jym?qsz6>=x>TvqhNzhuYGHT0lFc^OfsI9HNZnIgIM$4wg&5{)e z1TcH{Y%DEbj@r5%IPuk2iWP8C6p;{8TdUPl7R$^~B@jUnP*_-q@>MIbb^CU-oII(h z+Uj&#G&MBd4o_{>a1B%gL=;6BjYd?gS%Xbmw!q%js%U2DbUHN2HdU$?7^`uh4X zZ{9pCT~Uthb#-VxbxJw4Wmy=Kl2BVyd);QWE>(XkjF=U5zu%8JbLL=4`Eu0M)#0Sl zYMYpdy1KfXq5X_QP;o>Zh#&}UC(UZ@6u-m@R6~jFz^t4!05Yo?+$>tapMNAUAs1-*Jos8L>Gw9=Rxl2t zz4X6VqXUE>h=Hl?((-b=wQVcf?d=bJ_}70}U}R05igoMOfoXT()4%+c(rUFk2!fy> zpK4Jo!Vt##ho-3Z2K;`^erh&;{%^m))|wi$wzPm&Ff*oPWZ-w}*1_Gu;Ny?>L8H-x zGh;i{b0=5qY6#15c;Uqtq1Efra`FT~kcw@)rcRoK^&2+8<#6Dmz5Afo>wma^QVoCk z*6poo2BKJoh@yz}^fUx~KK%3i`FQoU*FkGE5F>ObdGJzUFeIX?stWC=Te1J+Plkd4 z$TtmDsXbE^%Md{jkd>8%{QP{JKX(qRSCm7Nf~c!+fGCO)+5HReXKb#n#_7MGz|kW| zpnY(+uY-KVND3`uk4A<_k_3vPkduF%gUpO62m}H+=k;QBc{wUquLea?W6l(w<&cz= zge{w^(en2bICkt9NQxTHlBfgl7UW~A#G?Tu7=*!KK=G_%@Ei|t zZfKhtO>Blr9s{C?Wu>O3qOh>=zJ;5jDENFne0%7fv>x|P_c3aBq@la zM~|YSvJy_a9fuDc0;Qp&0po{COhkM6iYO3*ATZ~tr$E#6h&yqDAV5(Ry02bE#mbd< z_St7~_~0S@b^m_ZrihrF$Jic%vVGhE5d;C#rsW_lEp3E73k83zRs(>*<;$1Rb@nW} zzwbuB&xe+lmPo4YXk$xgY2P}ofUqowxpRL4gTe4Xy9#FmP1B%h3f2{;L zyBjxe-ol+bJ)mhCdc8i{%hZFE_!5AR#|4mJFbJJahr;R8q1Wrdvh0rl4E}##UmrT% z9&~hc;PU0m@cV!L=~N zq19;M^ZU`)*M}=tuAqZ)fngZh s^q)}jcHwx$`;a)0c*KEB==i?@0N-u=r5FKT8zrU>+P?Fcx#B)1v1{nS?V4YoE@B003>@uQJ zvh=K@tt~BE0XsRvwLmYB`=GFsJw45}uhxESnigu7&Ihfnbsz59b!3V)1sn%_Kp#+W zKcLaEF&egQTUTG-urGfSiJ)p4k|d#K>9n@AY}vhg&(TyhtVm>f&(PDSPrq~M;K7d~ z(a3pkZf-0dj{^|1EIeMXSi1D-b2BwfInV>-WeV%=KC#p9_kZg4c*+z-wGpDD3Nt=ntd1+#xF6IXUNot+)^&s9|&aXOvc4-lY22yxQsbj~|>?#ISWFK^msm?mm6 z%ru$nbP@;#8lPRY>hMf~)J$kX2wd6O&kSA~95}pT!z0nCF%9PNaS*t zrDg(C6ovT<7Vy*0=N}D)LU-C|nz&rq1lrrTr-P-nbP9i#m!HqYp&=$GC#S*Y&UMn+ z(b2GG&6-1*xFyd9Qx%2WygUXkUnUd^p(wWx{+MM^SXemT+uK{8DGWeL+=rh7JMP#3 zTpka@SFTKl*)|@xizSN}4;IYNuP{s_nhES!dwc2{#$qu_OBXUPKcD`AU(j^N?K!h; zJUKZ$QCfe>pMMNLIrQ7$S)e*`0i;z*pk-P3d_G>^`Wl8|(%s#KraOqmY;tm3l=*yI z9~l9_;czSix`CH~iF>Z05CUD-DK9T49G>Lu9dA)nQ-fth@p?U!`5x!`$O!Rx97&R< zK3kPIk>=fVhPG`}TvSAHQ4yA9p=laBo0`zGbbfyyy2Oo<5#mB5!;+yr>FiZg)o;;L zi|~5AjE;^nJUq<6g$w+3^(qrL|3*M6*p!wfGJSC-d#3?)UB~Tm@%1;~(%;|DwQJX~ zZ5vI~P!t6zeP65u0>DP#R$8De%N+aeIEG=OX)2ng-7)MLYHh;aX_=;M8d;W^Gsl6d zsysb_RwkhCRKTo<^n1Dj_&)g(pGx5(a25~`0qOwW1oi;7B!uAq)IS3NHqDeJn5Nd% P00000NkvXXu0mjfy`~|& diff --git a/KSKInterface/src/assets/Button_Texture_BlackPen_Down.png b/KSKInterface/src/assets/Button_Texture_BlackPen_Down.png old mode 100755 new mode 100644 index 28e685ba4018788c0f8be4dacd02096420f973b4..1bd439d95f2cd83046f0fbf5033c01e459dc8a2d GIT binary patch delta 4307 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 B3y}Z- delta 1089 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 An*aa+ delta 1206 zcmV;n1WEgWI;|cyiBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAlmGw#32;bR za{vG?BLDy{BLR4&KX$P;i3)!NSV=@dRCwCF)?G|nWf%wW|J$CnKEQGplP{f%L&tUESN0QF`urBYdAv)KZ4%?bnpw7$Onv|KKKOth$i@*Kqa z#vHcp*wxLTN~N;(i=Ka;;~5zbO^l9?u8K({5=f;oxkx0EF{@rL&q1tj*u@fZ#od2m zAEg+N2UDq3rmu&FzMS`X!U+koA0{WKf&lV08V!QM5L#PX&R8s#Ls4%hT;QfdhYSXDt>>`_lfXoV=)V!@*arGnsV8v zjyee;>i_F3y}^HOw|^cD^ZNrZnM|L!T&}~>a&FjRD9?e>H|8p8JFfu9N>59x8yFZk zr_<>qk(eJXEzKWWt=1RT%g4lX3kAOi!QzIT9f9fZt#3ZhmXwxC*Y4qYKbo73ANBY5 zzZ5Iih9Dt;H%y?qeGQkoUfroH$U`K?!)P>qXtUW4ZLj;-bUtoE;645a~ zT3T98$AiWEhD(@=yAJD-N)#0rN9^&X)DxZF_%T~Sfw z$-Ex4b)N9p?DkW4(*mP{0ue#xn?<`O2yJ0uL_Fl<@Z8(yaG7~LnSJsVD*>|Z2@HfO z9!*QY!@GYgaN%Mf1R=Z}3;H-5eD6FiOlN?V%fOVI3KfP92LZA-4bq?=6)HJ)s0)C^ zY6{WsDe?X5`@h5g?YNfRR!pf&vJw_{qfTz4MS%v=u0TCG?M& zmqvB~L6Av8qLhJ@2oT|J=T-`Vp9fRkmd_eGoCHusoREkaLZnF`APZe)O9oy6%oB$S zSeg7=cmG=kN`)KCVCc@&?Z8h1oDd4Qw{{#Rl*k`UljS~gh97f14S*x}d({7L0K>`I UIfw3x!2kdN07*qoM6N<$g4s?x2mk;8 diff --git a/KSKInterface/src/assets/Button_Texture_Camera.png b/KSKInterface/src/assets/Button_Texture_Camera.png old mode 100755 new mode 100644 index 599097ec97f8c74cd37de55f0a170c8bdce9f91c..0ab41ff28c4b6fe06ca77848ef674dcb9ae6cb9c GIT binary patch delta 2032 zcmV%~iBL{Q4GJ0x0000DNk~Le0001F0001F2nGNE0C3`!Q~&?~32;bR za{vGf6951U69E94oEWh-i3)!Qi%CR5RCwC#oqKE)RTRd5+ZQb_TR=e`@)ER)Ac9Dc zhl*&Th*2I!qsADeiqZH^gn&eisEHUP7(fA^e~Drch(ZF0A_*Fe6{!jef<+K0RfN*V zvi@;T)3xs2nVp^KZgPNgQ2eg!ql# zz)&S5z7mRu;XucLuJ!WPD4LS?L*k$m=qoa|7zoEvMZ?7R2m%uvBy&0 zp(Aj<8$v2Y350>umIluTdI4S3ww`^ILN|o$0geJE9Y#S8&;yh27^?R5goqnL@?Cn{ z5gAP%iZ?nAO$mP|jbscM0@}#`8-a2)XY$DNsf{{d8zw4S(t_7t1MH9+;tSwcO!_w( z128G%5x_OF=H>g)_i5l~U_0=Kyw+9v8R*rve&y5)WbLVJAwu>89|NyQ2*Rca{{*%I zugP^z0;U6(;yuUG0DJ;`-E1w`D|Q$J+$jCE*pwAZH5`9*P-e-Z5?Ba~#H5LLlUM|} z4p=E8)iU<&Z1&+XO%&tmfS6)rzhA)m`}utOcNGu4Cyf#-qy z6TFKP#TtJh#fGlh@?n9`prhx1A> z5z|@XZ!{nA6U8|7qOKN+zhqNp?_dfl%Hq6#4sd^-NZwcrdqk9GA30k6lob)Y6?6x*!_o&?%Dv^`Ip%y_s;`fOY$8sw;z*ZKq3dl5M4NJu3x-{G9` zm=yE41lw*0ya2pRj7Vz~egl?TMpAq6W5#2OKf1`#AGlKFd52Vb>VA%nkHjGHa3Qb^ zli+{xiu>g5ondigmjF)yoh`N-D;|GU)D+q_83Ux-2nk~<-fegIQoL8xN25%nuFU~_ z-$gq`m^4I>WXVWJLcYZmmBqtkO#a0$%*7sid#j}lkZy!*bkOuOeeSOpFxB$@k6ywb znM8;!*mp4|tnD}Ma0soGXEPx-FL?~X#L0h3Wo?Ru1{a=tMiX+#^4_3;`phRr^@rdz za5$R@v0YE6fclJBLMmZQ7(HtVN!7K6EU$OXWJ~Iq928AnDDtD_#Jo-d$MXuwiA*AJnC@HB4BZn z{hYv*6YaK~GZs^YnAL2G2`u0%gzU8r=iUsA&NS~g8H|6%RGfqyNLhx70#C<8iVp*S1AociYD{i?A*OI) zy2CUDrmAEP@dJ*5BAv^C9>gT9);OG31-vdt0Wg@R5}g|0rv&;yLCg6VZF^O1}qOch7a4;1K!+0*eDrsQ-bW&=&FsH?CXA^Cnea+4HeVpCHw z4_YfC4dDkN5m7gzWQ4Q?axs6A*fKeeh<{NozQ|7CEKF%znpfFTx9Q;5a~_(Xz5 zAfSQ-TSYAt3$+z2Ec73+5X)FdKrC#;RtSjrC{)r2zEGoJj788wuuzd*H;=LKM8+_? zo4DD4;(=jy?zywyd3@iQn@f_!LR#Je+rJOE7z!<|S-zb(gcc-tgNuLo_NQRwQt>BX zhONXP+GngU$LYE=4BLR7DD&!jg15msRjSgQ(p=quT|xaZJjn2Wz~j`!svEE)w3&Z|fQM4PSJ;ow*oDor zouz3@DzJ12&#)uqj$_6aWAK07*qoM6N<$g6jSg>;M1& diff --git a/KSKInterface/src/assets/Button_Texture_Camera_Down.png b/KSKInterface/src/assets/Button_Texture_Camera_Down.png old mode 100755 new mode 100644 index ac4a65a11279e2fdc0ddda417a03c670867c2a3f..53e44c0ca641b7885946cad8d97ed2bba7c70109 GIT binary patch delta 2004 zcmV;_2P^o-8N?(uiBL{Q4GJ0x0000DNk~Le0001F0001F2nGNE0C3`!Q~&?~32;bR za{vGf6951U69E94oEWh-i3)!QZ%IT!RCwC#oq22&Wf;bP+l!V<3Mj~Z2wFuDK_m!8 zMKn>wAcxVYF-ECkypKc-N;DBQ5rYH+DB$^*hz5ZuB!DQApwUk;CZ08&(GHaZvu0G6G}*GcnFvWyTi_m&FEV~7um{+Y>K@V+r~vK+E>J%@CF}w|1Qr2@ z{1DO~cn7#zZ5b#wifY`Q3?XeKd{M6U3k92i8-Y_^HuYlQF(rQ^RFsR2i@gvs449@i z3mwy(Tm&aVZpK7r72%=>Fu{xL9VmN#qT}$$ zk$wjHwQW#2^&;7Os?tQr0pN4s4GBTm6yaaMX5cNk&WXTu;0jEj)DIefFM#jQ+6(rI z9R>lnNPlTtvYb@IAs1zqDyo3_z(`D*co)ef_>?22uU$SCiyv;7>T?&7E3cN1{%Ckfiihw&rSv>=^c4>Q# zIGKrXt@PQrPc+C;E3fqjZt^2=GLeufV6MwK<1i`au}QYw26zQ{9fwG39QFZ=EiscUlpKlad02__BEJykL?k&quTMP-RF8Iykr z3bV1t-rh^M0Wyt{^)8xzX2AXR1g2Wv|J6_UBbx}Z1^X_;gtddlT`r-O%3LPI<|U6I zoH$vT>`hK+@Zh;;H6e#B?+ps6&q5rkKLmegfFrp~i0yhhhSX=w5>km`!st0mNON6l z#PWKVTqeYpZLAD&h9tV7G#}`f%YrB(={7*75z>DZ zhZ6lbY{7)jgTQX!MeNC{DY;Ha9`J?RCIg~PbA0hkE(3ZPldxLla^7*^ zZ8?g7!8DcV)BwLF(PwKB4MUpiOJ_16=K`-{5=2`)ex{D5igZ6qbfpb!5Yb@ptsHGwTG6n?!l2L-G;t2bJ0{t-e zbUcYEIbDvqfu>f}RaB0Me7`&yBpooZsi~L;t(B002!fE9sGCtTL(+kKOeD5Kj-%pV zREjUM9XJnD+Sx&7!C+bd3Icy1<3E`hBST!S+|XECJCYU-zl2036cNKDm2Qv`sR)6P zI!rY5v}IOw634AfmV$O_%J2vo4qQp%f`b?)&eJwUrIYK3IH}x3OIBa>xg}wv28Y5x zC!=q`+%%&I7e|4wy%4en`z-;AV6anc?MldD;5Bma$5hgYlVW2}OICjr^PG-Zc)LMf zk-W<=OKcqVLP#U#VIJ_ZUu_r|_S5v+D$df&!_QR=!94VLBIe${dbMj(D8$^vx>ELx zpHlVIcVgP+%5J@Arp;5sYix3M@a6#0(B*$iyqu%%O zV)6ot1H)ZrxZlh<-#7P^Qc7mh8qBc$`+&2m#I|4`<{;rY&f?RQ5L16jMZP$t^e+8w zJr(k6_PoPY=!|9FhSq}m4x=CAljvz2_whLIa7Rk1oa$%gl+wJNp4ezjM)mrblG1I`a^rVwyn7JG_4c#nUrSo?XhRoY(@BF>?go}9Ix}~;%W|fAu8yq!#O9#&)__i{+~<#dcbc3 Z0B_$W?Crp9$p8xg002ovPDHLkV1k=w3fKSu diff --git a/KSKInterface/src/assets/Button_Texture_Cancel.png b/KSKInterface/src/assets/Button_Texture_Cancel.png old mode 100755 new mode 100644 index 198e8c426e4e8e03ac33b8dc857cc47c042514d7..b3712f64cf5d8ecdc70df879cb315670a1f29e2b GIT binary patch delta 1995 zcmV;+2Q>Ju8M`DliBL{Q4GJ0x0000DNk~Le0001F0001F2nGNE0C3`!Q~&?~32;bR za{vGf6951U69E94oEWh-i3)!QW=TXrRCwC#ollDtM;OL`-7_KRWj}yX7IqKWNI(&C z@gjtXhj6u-XoV+HGPY}H6K@7n_2p+eH7 z()M)E^mM;nRXsEBX<(*ns-LI+Ja1L?(?J}^tiqoNR}lCWZS!GceLa8u-4Wnj;5={= z2!K7{Ctx4=dj;RrcpKOP&H-nD7n>1E&^Z8AR~G06)AWX|BozJ z3W}vbu)ZkRPY|*tbH>p*ML}PBRcncfXeCCL_8iw870kD?2>A#&RiZM13}2U*l$4g- z`=H>+l8#e?{RAQJi2^7aJHYl560$A#UN(*k_7jAJ3W?%SCbWNLiEesQE}5K%S%mBX zPZcUTT#|{tuRsQZ`Cb+w_kagVmF+FK9FF83HR6F_KS9W2$-ti}{7ERuQM90BbkJD` zd?uJb&LZR=;6CsjFj7(}0FTVy=Errfgo4arlq>)917sY*x;Tvx1|k;Hw^$L}eKz*vU7UHOa_A*OJ%qS=2@kg=iY`muE7kq2aKD<-q1 z5fA1CrA(%}t0;+wA}a%jWCT(NtqD99jG{8FwCwVM=CX*knp0Olw(tonwroua>q-)9 zOWR82Rh_tYl_jxu&$Io1T`Hc$sY-~E#9A%e2!_ZK86CyBt5;OoYN@PgYT}xZt05Q7 zDse31`dELNh)~M!qAP7xlww=yCPxW**HI|fNa7g1m1jft6~!KSSVr2`Ib@|{Fi#Rx zuskhEY^1Fgcw=oc>LA2`s98y^(=1g_htz$awGmQ>gsrOPDyyHGrE=|rn3mmDZjrr` z;AysG?fnsJgn;fUaZmzWL!y?nHLJF@MZ0D~%-(--s3bFuN;2D^<0%cThu&WPSbBw~ z;&VcXAtg#k;+6s_eE}&8pyYuBt@@W*DD-j2N@vD(NaFNy*gB+bWD6wQ4}C_;>Le|R zwWaM4%ZL5i*pESCxj~DRR)TO%X}e<^92bO;xY40v&!g#NxEQjMp?#V~Gtao@>d##g zGD?5sDL&Xq#ECq^+5UdpF$g0Ww#+_=tNNH#+o9`L;fuA#z(&$FBY7S80EACoCy}Fx zbO(=~WAV*=W`NxjjeTEwhOdMeDQrW1X*{sG6oi28!HK*)`#M@^ceI-Qm;B%gExV(QNr1*quBOlqp!^i77557{kUhPeS5je)dYy&vWQ9{RLRB>X{4lkVXToR&vAVE`oZ7&-k z+6#M;^2F@S8PCNW(x<-1$VQ62ZYT|Qu*f|mQclLw2NJXoPFQ!wvwd>04!ervNyvXO z_1J(|BgMv$Wu6(-dZy2uwaq)0YQ8sMwv_5`Cj3SpwyxvgbCG?LvHT`bN;r)(-ni~O zrS2iiniJcUVXaZlcy$tD)roC}T560lUR{J(cVa65Vk4aK>LA346I+33gfm`P0~t=7 z*b2@;-aF%IsVwJCY;#IxZ=LblN@RaHcVe59Y;T?MsGhSI&QtzDDlq9ipXT0{DGUfsr6TMNby=jEJ1)K#wNAEp-=Ary1 zlaaii2)&ahEy4P%U_U{~N#HZ8y)im1Z6g*hB1K7jTrfYGMaVf4FIrbnCyPi%k`yhq zxFy(65ON0CRFbv>7C*}R2&aEzQ?Q>PWUSB)ojI{Nl*Cm@c?0+K+oG$yDcY$Mo5QGj zn&lZeZ;So`cvzx9FPzvMtFJ1~cn<~p2}1UPJHX313OkgsbhxBsBuNjE{+B3TY^21z20v;5HA61IfeZRe2ahEZC9Tq@geX9 z@J`NeUH~_;q;n9*uRFuW`g;1ikAVxoY2bvA^c(O1xC#8S!hUL;1wIk{Hl;`WA^6<^ zZYO{I^xz=3hnV;gcn+MGOfmrWfP2X?Zxy-mEASWayW|-$@CdjIJjuK0zaFv*KVoHI d=2`qZ0MhaRAupXY{{RaB002ovPDHLkV1i{mr0xI! delta 562 zcmV-20?qxqB(51YiBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAlmGw#32;bR za{vG?BLDy{BLR4&KX$P;i3)!K*-1n}RCwB~)<0_#VH^kWPo9+2g5YIw5(`2XUqIi1 ziGvm_R2_r{adGJ&Zq9DvAH>DY=%RvJ3xa(c6@r8gg0AAA1*^6$PvJQ3a+kY2OUOM( zKKJ`QPrmoG&MYp%Dcr_a+{c00jSVc}A$I3*8aLy_5A5RYjIbW=;3R)qc--zL$z9xv z7Z$LFPZ%}C`go5M@%u750blSdbz{J5tTx0pF`v5j2j2o7;aXP$zpsjnp6DB|g*% z{4iw@XR~qI7|aDHrT(yK_J*336`}vi(2&_6Thjz_4tlw)(hzdrcjw{;>D0ukwD%I` z+ubDDz>}Om^|aX07{ycHT09AgpDWl8IE!RP*rZAqu+;7*$>&)1a?HdVcs_$e@CZ9N zALDO`2kmZ>e8)JV+jyGUZB52FRymHx(VhPT00ydukO@^!1ONa407*qoM6N<$f>-(g ALI3~& diff --git a/KSKInterface/src/assets/Button_Texture_Cancel_Down.png b/KSKInterface/src/assets/Button_Texture_Cancel_Down.png old mode 100755 new mode 100644 index b8ff1b7f0794a4f0d2dd80848b2fcc8edfa52a69..0c9c0991d26f24ccbda84bbbfea758d3ee5db98b GIT binary patch delta 1532 zcmVR*mJU|+tDn=13I zS!(YWz}+Pp(*XLwDv(!Tdq7I|@3Wj{s8N2&oVi+y0XhJ@^D-;74HSNc%{1G{vBOwX`pZqy7wmA5`WS zi(DsthoeB$B5hT8ROU7X4?IMl~Ey*FF+u++U8gFu~K*(^pfiGnkuVSr^%3fa!d|dC7qh-AmA!#5!Rbtnw z?b4cLG#!a$U_~?4V_ABm*$iV*PNGp4V^QCuF{olOaHD^5ImF@uipD7yi<2}Ow{7YmKJSk(N;Jh;KBh`S|gy+8diMfzm48| z@fj=6`Jf*C;(Oe+&xpmJh`lq*_D*-DL1l$8|Y1;Ciz%lSM@H>Vy z>;PY@{5ExeIaT=`0#Ea%MXv*QfQLM4Nj88Z;JL1O|Cr2E@qrqBpQ)W8z$@Sx@EUlZ imk>jZ(xMG>@b3T=V|KNiB0$Fg0000{NheVcY+Ek{?JzzjLBP zu{5w~(pCo6P43M)AOy{g4FdC`LD(>G5W1o+=DBB~U>5qN_Ck_{fLUlzvQQ9pS$$7| zKGpTS=hOn~>Mi3}#OQy$e5*te7iy$3SicBb6x)dIX>j+J?Z)6548^)-ySH%b7e&h? zOGCehp~){uuOOB?DQaC^Dv>NN+E&LLutDgDx?cn4fyqPxZ37o2rnW0!Em4Kz zz$|JbHk-bxTNMt%ZS^HO`&?ZZiAMbfunRl_hd{5QF~1)Dg_s)wPJx@>0RV|djGVpF RS$+Tj002ovPDHLkV1f_j%z^*_ diff --git a/KSKInterface/src/assets/Button_Texture_Center.png b/KSKInterface/src/assets/Button_Texture_Center.png old mode 100755 new mode 100644 index 6f3899d799195785a3d8e4ec5bb5a3ca7ad6fa89..de98f03ea2375146557272826dc8cdac1700f64a GIT binary patch delta 2223 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 delta 729 zcmV;~0w(>QCes==iBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAlmGw#32;bR za{vG?BLDy{BLR4&KX$P;i3)!Len~_@RCwCF)=g-fMHmP0-@LoYCN`4LmX?4*L~_wX zF0~L39*RimNpcZHJ$MjL;@OLOwY?a`N+WGr4{b#;JqkG(PtmL5K@g+C;0H-#++a5Q zF&^I8y4f^lH*xd8ywAMD%>3v1KOZw8#^@-e*z7zyHrCC$XE2KEoi2a)VQFb6U>7ok zxA73Z#E;!9&bkCUm8@FDx44YQ4n%2(@)AD7MgsZ*ui~{{0bWY_MGRvxwVqMhDhCSh zg92tK94amLGo_kz$dUdG{9bD@v#-O`7drtfVIme3u`OB-ajuH77?cD7--m_`abM8l ze^AztK7)b_je=78-%Nk{!In*~WzpTR12Ejr&+P{qz)d{fK5-kByiN77P~xi!ucxv5 zMbHRt;gP*89KbB*@lES7w?vhk+DUv8^IYO#d7j-%Z49s&41LMV|d7#F^hhJW=4SbnvG8|4x>E-mHH}t$=sZ;5^owbjN(s z%23|_wVk&HYsVrF2<5W)QTR7qnn698_TEM5Rn+hbUO>4SG{b_^F;nLnp2HJq%}Sk% zBZAX0RMtcMx_@WTyq^qsW3MQ^ktjXh1e7wonCrE`Qw7ck25Zbm{>ae3J7|Uz*r)rY z#eC~eKpm?g>d$}sTR&;cRRZHNGZ6DlsB9J9@Mk!gvT7HVyyNSsjjk%T!V%sU!6B}hZsZ(Jri88~;HP^Dcrum0 z(d4%GQeyY)P4jW8;~(M}-o!h-1cbRn<-?fn+WANQ^3E9?vHUXtp5L{H2;3j700000 LNkvXXu0mjf+WuYM diff --git a/KSKInterface/src/assets/Button_Texture_Center_Down.png b/KSKInterface/src/assets/Button_Texture_Center_Down.png old mode 100755 new mode 100644 index f12e0984db93063000b13bfa7e91f4674bc07c65..6c091a2e2144d01e554ade7166410e899fab01b6 GIT binary patch delta 1715 zcmV;k22A;i8KxpOiBL{Q4GJ0x0000DNk~Le0001F0001F2nGNE0C3`!Q~&?~32;bR za{vGf6951U69E94oEWh-i3)!PQAtEWRCwC#omp%ZRT#&Amr~oZ2-YnKr3kXfgQ5aa z5lNH>BQZq4ghY|Jp=gw)DPnk1W1zJD^gcjnH_nKQq8zO&5t%}GhZ)N$0sZh?ORF&Pj8V!FhE zOax{Ez4JXIT{{7cvA`1G3ScNO+kmt$jQ4?Zzdj2P@FH;DOjdXpt0FMcnhm@T6d90k zx*K>8xW0wo=K!w(g$5+|x(j$080gnG0@XkRZ~!>zw^#U*k}@EoZBpb}5teqZ+kT zQYyyzTDy#p^o^vmy14d9st9mBNE#{WXe8|=*`6!g3+UGb#zslk2FUnSNr%;XotLy; zQjZ*8SCOP=C7p?+T@?yQ(~_}CQfUAfw@Es!?6fRE=`DYdG)q#APqV>WjV`$a(ofRP zNJcjYg3(LTUS+RZNsk3GUr{J&^Hr1!AZ3!aM-uuv5DX;ElXOAxv`12LKqyi3wWzgF zvW4-bq@IB?my)zY@pW9%{ei9-Ni!v#jHJI%QrAq!b!}zSb}i18AK*J&`0)kc@|exV z0^oRteTIJl0}^PO_6F_&zRIv)v0vge-vzA1#m+Clg+Nr`;#B4V^(`Hk2}n7x4i}>l z?TD=aE=%Ah6#%<&5wrhYq>W#aP=BF3!|xB_;!iG1pg&dTJKhD6ZF7Ntfj6@SGNK6# zfSVHTRE@;N4z>g&$tc=XhCjyxz7*wB55@tq3pjt+#AN*DDJKyF-W~WhLytPiCukQt zS2|$yI$t8|Vy0E^P2X^!m)};43)LoDAbS?w;EN=NPDV*O5NR>&kkmg=Yo&{%T?w?ZY9vh#*vgvI zq=kPsDd~R5Xi57ciR_d#Fi_@ZCjewufFYFhQV~h_n4~GW>Zy-v0_A&2g9Bu+r=;C6 zflLhqqcW1_iME!?Y!bY+8S@na%2-L&S;ANzXe7E)Qk_rpbX!VB+|k}!nt?JTK!ztu zI@LxPD+8ITN=fG;_0=Q=9DYxil!K9szY>4QB#e->MN)kR5PwOUA*m$5HI0k>QEIb= z(b}Ptmb3?$?1xpZ#Kn_`&|YAIZ%$4F#?$z|lX~Aw{uEdb91V0$$8hef<-iQ!llFRq z3(ym|8uzZMOIdwJQ8sDjy%JG??O)bayT8(KVjK#QlatGih zbul0@wGPGN!@UBx{~(AP4IQEU$2QYXKTH=O4k|FagNs*klb^s4EJ8D z@h$v*+}ArB@-1We+EYL5%~Ep_vnTQuM!pZ79P&`MMYdJvGmLyTSxwE?%eeQ7to5D8 zyj5p#lsf|agp1<(HQzI10XtTQm<)&kF&Pj8Vlp5G#1vZp4*=ky^=+ed-;V$Q002ov JPDHLkV1k2n5<36@ delta 526 zcmV+p0`dK(B8nL{iBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAlmGw#32;bR za{vG?BLDy{BLR4&KX$P;i3)!KwMj%lRCwCd*3XMhaTEsd&+FHW{EBHX8w*WpkYY@Y z1=-n1DK=JPYcC5~NW@CRQeiX8`2$8|VPU6ag`!bPq}eD;ZyuZP)Z5FQxBHHF8c*GB z_ug~9PxqYjoO2pU)IdLeqLx!DR@Jm`6tZC)?20i-oojWH;Uuq<%q4$0TGL;nW=KbI z1G6Q(gSd@Hy$b0luHq@)-~tZS%1O;XT#xTKkKMS^>!MjQmYr}-mwvOD@5Zs49RB#% z!rz9Ci%GY9-_qgib=cmCa2KX9RB=cX7x5PFaTk3Rwrg<@$E!NcP?DJ>Cl~1yXY(g6 zEn+{C`;ts2ndsEK z58x9%SIom^vFXQ)B9p&i6ZYfziqm1o5sERKTFzcNf+NdGm~KwPy5h&v8SE<>Yho)V zdP(>Zcgk8ZPAg)l6*^Yy4PFV!cH?*#@Nh%Ie7!4cK`qY diff --git a/KSKInterface/src/assets/Button_Texture_Clear.png b/KSKInterface/src/assets/Button_Texture_Clear.png old mode 100755 new mode 100644 index c007ff1ca9780d3d2686358183d80cc2e4c22e62..e5fc65eed17d629d2fa3cdc5163ba024e3a15aa6 GIT binary patch delta 2020 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 delta 553 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 sB6M;M1& literal 0 HcmV?d00001 diff --git a/KSKInterface/src/assets/Button_Texture_Connect_Down.png b/KSKInterface/src/assets/Button_Texture_Connect_Down.png new file mode 100644 index 0000000000000000000000000000000000000000..ff4fb20a61c3c912e82c08cee42a68e7196c70a4 GIT binary patch literal 6272 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 diff --git a/KSKInterface/src/assets/Button_Texture_Crop_Down.png b/KSKInterface/src/assets/Button_Texture_Crop_Down.png old mode 100755 new mode 100644 index 1b8da74aab60756d1c75b876e2709166fa851365..5492fc7178b848569f049339597202ac237f8fe6 GIT binary patch delta 2745 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 literal 3439 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 RYybcN002ovPDHLkV1mmeWv2iD diff --git a/KSKInterface/src/assets/Button_Texture_Debug_Down.png b/KSKInterface/src/assets/Button_Texture_Debug_Down.png index a76da86e7b861079e8f70b4e2fce4943ab892182..019e1fa8a0686112525053dbb8d29607a765fa6c 100644 GIT binary patch delta 1321 zcmV+^1=jkhFSH*aiBL{Q4GJ0x0000DNk~Le0000o0000o2nGNE03JVxv9TeZ3V#IO zNklTX%uEZ*tk`8sGI~ISJ?TM|MNi#ov7#3Wm03z)R=7z8 znPnt|l!4`z8U|KoD3M|krj==6OAl%zvZtVHdiU<`?T`CCFb;Db_uRR$$$nwknRCw0 zneWW+@%_!&T&Yyza6q2J1Or6+8-E6cjh;fm_t=Ahi-GY#53m#1thPS_L2xJ$&lnB7 z2wX2h0Nua}U;AxrK&A=}a&)o;Sp!OJGYNb1JiqXCx#*|iMAYtNs;B8=N#Qn1(+Np^Y zEYoq}Vc>KRCO!dpAmZK-qurH-$i4(3dEgR{{(4o6uZGy2g~)eC`y^{+kSUDvNTdO% zx2_#2zXwkU`IN*^;uOmsG2ApX0zs*AAbIA&TK-t*DftW~>1;06T z*fl_%+W!FCvJly+pAfe>%xi;3A|E(>W3tizH0zG^0!xhk8Nh?qGcN;MJ&@P{EVZsZ z1T-1_*Q=2z%Yh$^ej9L|(cddc@;;EIX6{omZIS7OxD|NB=&et`DahUSi==o zF9I%;1ab+&XB-PyHGdI+m!w3aP*fQG8TeC@qG+ht22FUZqEZku)?>1Snv}ZRQb_JG zRyNLxU9~K%hGdvfDPu$nGM%DmHOEO-hta0a_+6AeSAv7U9Wtp`j4Yi7H>zf_3FV{! zRs$X3BAGri4VViY>oHp|S582I;Bt>+{{+k)6a;VCrqyUkW`7@8S0gzSR+y){OzTx` z<3!1moWs@wON}Ps_cY2iLLPO>oL%$C0jo?2WfJKCrc2`tb`0JF93}DAm~uir5fx_= zcIZf{=m7b?rSV)``Fz&m>B~OyCMBi1pSy7sZ)%J|@}Bx9oeC4j{JZ+A?6V zM`|GzI3bU?NInltu?`+w z6==IPzos-qnhkxkH)gd>bOF;us3T&0b9c7Oac62*lkkxd$?9|hnMlMGg@08TX5RtM zq5S!6yM7f$OR6xZP(FQMTVb{MYs4HQwN_xQba#c0yH7_&?Ure62F{D|g*fcz&`%1f zd}O1slJ8a#i3--Fiy29TyZNy(?xr*cbUDi3_(oFxl-x!CzzE9UPa=a;okuOa-2Db13sj600000NkvXXu0mjfNj_oL delta 3375 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 delta 528 zcmV+r0`L9U9-$c_iBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAl(8Y63V#92 zNklrnnK& z37>EQ@9}O-!X#{c4NslI^%V0xId^}`g=Q`Z>8+e9TP4L>T=47=2m0k@DO@-RjWj}k za{%EtTt>Ce`YfK}WQL7ahp-y8Za!o4QY3K}UJoGLMk7HDjRD3MhH%%x0qYy6r9%>) z4Fzj`*7xDu5QOy<&5XP07G?P$9S2R+k_ebe4k^(4+F7{z}xo-}c~g(wtNfzTzPG?Z=>P(c)kL@Plb+c(62hWHEM0SU1P z-q@inP_?8;Wob&;(iVrwE4w=Uc{h(lliwgxBY_ zt-u`cG_VC22I2wluLeXw2z(B_4}UDJ^p7qZB>FMp0K0)_fl;6iBm>@`BSsS7Ch%ca zAPz7F%m4@Vf5Skh1R$}La~YTb{sz+30CB{?Bf7>)R?Q|o?gbtL7FPn(3&S9GMn5byvnE=G0%F9E*;U#6nF>t%RW$V1wGCH4_n&& z4R{my6*wcg?G%ut047p-;78ya;4NUEfB;NMF<%3XUO=XRlfWTs(Rs0PONQI3MV$f) zWKEx$Xm6JU=(Iet2{-_}EPvB~+Y87(>2Q~2@OhokBJjPWW`J}GVx$FJ2X5=IzLTV; zfQNwRfX{jXsSC(qA&*snKGg!dC8=R)xaiho0yqu?z!w7Ws(d>OJgNh27$A;7%!sye zoyv9KZJ|CPAT`U3gXlO80zU!o%HYpS-kX8P_4-AiVSwz^W{+rrC4XhAb29s8$*pF2 zBh}yQT|XQF>F9A$62Aa^3~WMdEL)M2BT}RAe z-Ikn}CG-7C$(2pHt{BimA2Jo}$oGUQL zfz(q@p0#R&X&8@5YJY7p6O_<2nk2N%s%sP0VNS@~w>-*>TJYon(79j(ATmC8$zt77+0NwQgMbmXCBS7!E0nEuv_kv8CaLeyGA zku!@0Rzg@!jd7JF>oT&Nlaasx@dc!vbD>zB=tsa+C5(PR%ztZvy6ib6m(d(xIwGL$ zNm|QVIBUczl%D`^0Ka5>|D-nmpn9p19CM2g_^tr7b21XDCtJ{AWQ~>z??TQIIx_or zyBJAx`eRAiFKaY(`8n%U+j!hC;_F1R4oWq((qmTT%@RYveY$En6%iPZ7_<8VGL-RF z&7?Z#2JnZ~4S(Fr?5O#h>l&@Is39G?VbL&l@Vd-%m4ClXsSDWu5lCH! nJZ}TpFdn}SayH5j&+ZHW7y_2hT~n&G00000NkvXXu0mjf;1DvX delta 528 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 QqY93TXRXf^o4FDG7yglcN&o-= diff --git a/KSKInterface/src/assets/Button_Texture_Eraser_Down.png b/KSKInterface/src/assets/Button_Texture_Eraser_Down.png old mode 100755 new mode 100644 index a62a6b4c5f394ba1ea4bdc1949426a6716b65f28..b233207af1f2501844a1676b5730d536313d6c35 GIT binary patch literal 5249 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 Hu0mjf7Mahy literal 7991 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 literal 3890 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 diff --git a/KSKInterface/src/assets/Button_Texture_Forward_Down.png b/KSKInterface/src/assets/Button_Texture_Forward_Down.png old mode 100755 new mode 100644 index 86247731dd23fd6c3993797f74dfa5f9bca22234..1c07dba4e2e89913a90d3cb9590d327881f903d5 GIT binary patch literal 4073 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 btNL#M=SAFWqY#2D00000NkvXXu0mjfIunuw literal 3763 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 A>i_@% diff --git a/KSKInterface/src/assets/Button_Texture_Frame_Next.png b/KSKInterface/src/assets/Button_Texture_Frame_Next.png index 0212761701ed64ea9d77af372b8cbe3566b8fd1e..4e162472313ec00a7e988f130764eda92981f531 100644 GIT binary patch literal 3440 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 S2{;a_96Vk9T-G@yGywoJ5T-`} diff --git a/KSKInterface/src/assets/Button_Texture_Frame_Next_Down.png b/KSKInterface/src/assets/Button_Texture_Frame_Next_Down.png index b6ea3af78dab44e8dc85dc7b97a98389f8414ea9..f28869b87af72f1d45d79b4d8acadacd3891223c 100644 GIT binary patch literal 3256 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 KelF{r5}E)gjA`ir diff --git a/KSKInterface/src/assets/Button_Texture_Frame_Prev.png b/KSKInterface/src/assets/Button_Texture_Frame_Prev.png index 1243811f18fd9217403ec6a2a9cb60af047fd059..0efd092cd9e28d45ebfbdd0ebcc4624b379d37a8 100644 GIT binary patch literal 3446 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 literal 1799 zcmZuy4K!P47`|2Y6F+Uk+D);Wpj(wBLa7L%La$bsEK}|Jlc*>vE=ek(4XNWNUA01c zy3o?qhDAvyjAGHMRMJx&RYjCqr>)M0wNv(^?1t|5^qzC?_rC9apXYs_@B8j|Pka!z z-2!EU0sz1w1ftTBk*mK=jF4x+NR9{@3=aj+0sx?{z-*qi3h}{%5S<19=^Ft+oDBfK zBO&oK060PbfC(l5kYoU`KKVjR1Q`HU+>U2N@uO&=q=PUA$BKcY**GC589@L5Sx7=m z4x7&cg`C7B9!cnnUCJOKwmyuaHa2_}U)(-`OAekEzOQKVQ zU&9g47aPatCzJ4afk1#0xZ_~%A-tQnw>O?Z#1o0GNQNsfEs4((x+d`)mP!8Np|W`g zx$(*TcsL2v^RlAhBYa;hR$u7vYq?K;eC$7!l6bFWAp-IGH+VN30skf#BKGh8{(};- zl9xeCs+Nn9^;D#AZaf=lSKpMM8+nQTKe2zBBO~mjKrWlbhq(+GPV@`V&ovmrVI5-A z*{ql}GXDP=ufb%zUhco-FVF2#6q#H<6oUL~q5M!vhm7aQj%W>`1~7yxCP!%JhJvkE zedin^QMzM%n5Lz64T2u~*t4@P^@E!ws;sRY`9IkW?mu449`Yf)6Wi&iDKBKm2gHRr zHrXZXzL`^e+y3lY^;DJfR*xH<%xwk`U<$5q6dOtbH090C6k1Z)@f;0ZXw5H*xv=rX ztzV9%e&aqCs&bT8hF|Hu^at90;Xz09fXcefSv|WuN>y{5H_&qXf{euyrRQDe$~Y<7^f0 zhvGlh$T^Jho5vQ$Fq1#EzTD>N2H{@JV<0@e9s?n9-=HG%7#O!IZX-htm_Po_w_ zrlp=ZMe0X!1D>#G{Ggz8PRik|^%}S3sAl0tJ6Ivm<}pgsp9G%Hd{&p|;Mbs@)zoJt zj@FD#>+DiIeKI(W-6q<}(8hlL_F>Zf&uf9lWpUmh-3n-4S!9LC_7&{5?HP>3V}Q-P_@J}ddslI~pY4Be6>fE5na;y&^F_H?uIIBn~deZ#K`zMhPmvy0f0%hhIejwF`in?vOPrdL5Ny3tZWm$bxaLIRZ#^ir z6PBmFs|~(s%$W}J;*WOMiR#_o&Zs!*q#5ZVF zx^<7kz-L2lK{F5&HBpEdFSVqn>AO4XAt>wffl&C4nT4b;xK7%4HRzmbAZwEi-KtUu zxyqcuEzIiUXHUyfbYdk5lFOViPSMplXLIE?baZ7pv`Hp*yhXUHNqf|Gd)IBJj70-w zwCBZ4(T28H^KHsc?zn)58BI+(v(qwhO+YVpdnm<|!c`kS_LUA3Rv^2=Y9lyD;kFyb zm_e4Z8ZcZ`pz*$Te$uXYead+2soJK}0*>za>{O~krV4y0qTQ9xjdap`_)N&z7cC}BC1V!8MubC`e@&)A?B=imbzeQ=xBHuJ1AoQEsLVe z8#ss7VVE&Gl2^82VR|gYR(BDuPo$4#Oguq8rJE^4&;Gq0_bc+dE)%<}Xb--cGPi>6 zRqgtrM`XHsaq`jdkA9b1Cd@_aHZ|3#n|CJIz54Q=x5`{gvvm!8^NI1Vv!q9QeX%j@ V6Rua+beaAi6cQ9hRcvEs{Rzb!_oe^< diff --git a/KSKInterface/src/assets/Button_Texture_Frame_Prev_Down.png b/KSKInterface/src/assets/Button_Texture_Frame_Prev_Down.png index 791febab2cbca950566a5794cd6d3d6e58aaa948..ed5993139b9c3e5184ffc901005d110f91bd63f4 100644 GIT binary patch literal 3266 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 A#sB~S literal 1606 zcmeAS@N?(olHy`uVBq!ia0vp^MIg+<1|<9Mw$=hEmUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fHRz`%GqGbExU!q>+tIX_n~ zF(p4KRj(qq0H}k3!KT6r$jnVGNmQuF&B-gas<2f8tFQvHLBje<3ScEA*|tg%z5xo( z`9-M;rg|oN21<5Z3JMA~MJZ`kK`w4k?LeNbQbtKhft9{~d3m{Bxv^e;QM$gNrKP35 zfswwEkuFe$ZgFK^Nn(X=Ua>O75STeGsl~}fnFS@8`FRQ;a}$&DOG|8(lt3220mPjp znP~`{@`|C}0(wv%B%^PrXP}Qw8_=_G_o3*jNGyP80{aSLnGMJ&EB~U*RG@P~j&~z*3qSVBa{GyQj{2V(+P*^K?<|d}62BjvZRNCmHtAJ{@(Fb`K$@`G7 z1&aa$*NzLQ6Bbc+T$_~ZJ~A*c|MGNk45?szd$+OhmV*Fmz+^5BN7WrHml$6;|r zx`ggAM&+$rX5<*G5_;u(Rp8ZOt(|Lvj?b9seA>I`cgpLRo{j6gxfx7NUlz?zpM5E7 zUxsbQ=Gr{d|BVS@;<_nEP6l{S4*ZpPBzQ`##;pBkITqwkS6Wvfa{Y^_#QEuK4HsFN z?CP9dd;Hs*aEq+mdx7iU?2-`-|F%$m(|4WZx6ulm5hN=3Qx2rLC$;RP%;-=7z^WV;}+Hc%tZS?1tPm-JXRI3vK z|L3pZ|2{iPv3}?DZl(ZE$+)=g>Xt9*_XVxeC_qjINg*Vvib8boOWI=zn%Z8 zQ;ihi#W-c_eu;`FB@&WHy&C`=lS=+WoQcsqEz=vXx9v03%<|5a^IG{`t8~F*)nm1* zKF{09{Ot8=5#vWoR;+xv^1Dgw5$zKlVxRe3x0||kZ#?XwtE(p6qxHV$@_SKm4p_Fn z5A2``%c1RTP@W1qAn6Uc8V%vKU-&L1AHX)P=f!VX*EXzN}1@DbC T+D-l*02Se$u6{1-oD!M<5x|0} diff --git a/KSKInterface/src/assets/Button_Texture_GreenPen.png b/KSKInterface/src/assets/Button_Texture_GreenPen.png old mode 100755 new mode 100644 index fa6fc29708cfa05945bd680a0a57a7a7375ea132..5f1b869257fd4256f10f2114040d1012b017cb83 GIT binary patch delta 4482 zcmV-|5q<9Z9p5)LiBL{Q4GJ0x0000DNk~Le0001F0001F2nGNE0C3`!Q~&?~32;bR za{vGf6951U69E94oEWh-i3)!a3Q0skRCwC#oqKRpWtxYdbL)GO?j(?KXGI1=5&?DG zDaqE1&g|BJT3e;1Bc)p7K{om!>VQ5++;B&36*AS$4^RjWI@j=DOoyD}mo zNp~j%MCs;c%&o&EN%!eKXaDF97X{3vJL!aetEeK7>dSfhec#{v`@VnkwV>-d=}4Ur z)0ZF(BpufX`P=_6Zr8mj^#XgMA$~b?5zpN6AVx_^$%}aI+_{zA-Q6YQ$B%ymIF-(j zk&Vf|M&FW6n>H^D27^COc!s27Krzwd_3r-VuO9rN&(py1AF0B7w{Rehiq>*ZiuH-_+FfMrm330*}Xw zVl*L15|S*lW5*8bL(5mV2Mgs&Knejjuqu7suL9%Hq1P9el`Zf!HlipOg@z!CNRq^k zmtQtLv|`1Ut}|zrCIW~G=)g0;%JlWWET$Z4YI^;F($W%7g9m>}lCJnmf*`Pc+jh&E zhksKY3tSl4Jb+*0m#|!~|Yoi-dc2HXSJJlJRk5HiGx`f7R`_)!Sq4F1+l$+>bX~8msjk9evAmRs!O#e-k3*@x zq|c0rh(sa;gF!S+16?O4H#fhzxp_}%S@{Bw*E?_+mxO;LNeF_#j+bAy0q!j|)q>e< z-kylTP>N^B^0Af*4Gr}a-*gjsd3ogJ=bP*5>UKQ%>xUM2JRTH988nPb8~p`IynMx$ zuC6o75;>_?jkP&N5QO+lAy_5Fuzc;>wUg0xH77S0RaF!EJlnT#H?LT^vf3XA{7Tcb zX^FB`vd;NMMZOl zT)uQ&$7C|$u61`TUAm+KcnfGtB#=ub@o2SK@*5i)Ut7Ln<&RICI%Uqu$(d=fm@S&7 zYl0vMk|c@8{DH6i{=nhl!Z~Vob~e#ybihxdX&QUSUelpNdrHg87t|j-h^j_t@91zi>{$gCv&pRMmp};|KkfJX4;L2|s&>15Kv2}M ziou|;)m_)+EH8fmcxNb+`asIpXp+QvO-)U2Jg~TQfzQ{7VlW_zBH^$~Yg>oi;jkB& zO&6iak|ci>IDXpiKXw61Bog_47@-h0tA&5MT6c%jS-u!}cc|9MU?g#>m#@i(nws`3 zE-PE$^?EOJZ3RIvwcE2DSp^oe*&K~(Q2<4jWq;trY5%bp6i0S8>NTLKpD@tND)Qc^{MpbonONGm|^jc+VIDh~=2dqi8 z%*ww`XO{$+TK6(MzBl3mpGC5b!q_7sl1sB~VmV#bU8i zQ@y1v4&&{9%kLz<`94XUD#PPMuh)OO(^avg#M4jLRuBY2p)ltKW}(e$u|~C6 z`I1CQJmx>q5(orh!(&_$Uy!zLcSl8q%hjJUHC#aYBylRtDfx|!jl0WTu9AlOfm!IH zDA3y*qP?Rt%Wlsquv#n@P1EA)OBBEI2U`3Ae{)e`tfz>g$n$k|!T$D)D}8^8hr^Dj zB<2oRjgYi`qqMyIc29l7pj=x~6bXgHw6%BGb91r_(DkOC-rgQT5X877{#w&Cp}4SM z&gxZb&fIt3y^H(XGln}u`a+2}`W3^S8HWxXdSh{E>FqvWBZ_hG7J6S#X>Dt_JM8uX zv-vVftoZ%@&eqnp_iwxHwtIgE3u8EejD#ef+&5=1MWQ3aRh9oxn$sUjAl`^NR#M4keq?NvFLFs?)?xCkQl=ax7 zkJ@g%^@mSHRrSk6Nz;)C3HU?Y_u7wR@Nq^-$prnc7IQQ>k` z39LeJFrMcM-i30 zrpBh%%bd;y$;^L@NF;)+$ZU1j1)b&PgLZAlA`k$Fszr8Wnr-)cd=0xx%gb)}dVMHH zQ_`fZ#bo4px4SF8A>p0je#0q!Tl6`#hq)7GWzXo!dTrUNe_iBr_u=fkgBuGjpc0()2T`SO1>Be)dUHrLECuV5_^X)9EZP8>ya=vOuD` z#~+l)*bwY9ZvE~j&Gs=*j> zAZNqf%$q!$Ro1_!YW0&GICvnr(l#@b>X>Ug;2nR3W4?!+RlB))S^*C!cTl_LY4&}# zFL}~76vAq=QC(HtTH$gnOH~*n2Baq%V&0@#Jfz%#`{8wboNQ@pv9M*!miG91#@nQD z3_B22k1{)VIxCDnrDiy!t;xvNT6d?@S?)~b%oq_MQC(wt)&$mM{G5%e*7Dhb{mIP? zlZk(=weDb4efi;%sHVLmB%4+kfc~< zgu`JpZD8=vINutk3=!Z=xSN|N&t|#tPO4Tt$>#?@AM(xj*Mc!2XFR{Fe3E^0y4dr@ zU-Aq{yA??;2mUK*?^6R^(*RHeIkqn|73YvhB*Ne36|hYE5w&a9vG2e>WP_447~_BK zx%{s3Nj@t+%kIPPV?ag}L_4v4UyB$8ku)GtQOD2=%giNscYVai`#(l97)eIyh(sdT zGweLR;VJeNo?+*q_b`hJ;>G^tAhvPh?&}r^f`GYQ`_c2L4TK9h+>6R6x+N%2i{6MEE9 zG#bTdFz{^620pl(HGgocC*}lePxIMVo#JAS~fF^XQGKwOnC-2Rd1xI zurMJ<9jW0kHnW9it2gk$^wYd|@>3*)OUu-?p!8=m-ql~!`2~b8DNnktqga0wGA3K8+*HZU^KTgtl#9~#U)f)Lj@OU8kAl>nGWC6# zvS`c#(RIiO3QRQF$)7kLE%M!CjC4iEG2PA|Hax>EH{aSXD3M46M`kvUZ+MDNi_fyN z>D{=R8nTS;+e>`c7%f>kd94z&=FN`(^qv1k6hxwuietK+b?cvD{=9!{moHt{v6(IW ze)BWzoz=-}hyOc1XC&<9=cJ1IN;nWP0^{3d3W{f=s*$T+U;%-M7$Iwljmk~Wansy+ zS5#k`reQP~_(RQlKAiD2Z+-Q@7)dCMzQ~QwDR+$-Ai4-ytuT39K6XbI*K}C>RFMHp z`LRY{R8(}?oT7$RtR{aml{GPG`_75|NP?J%GL^EDIN?CDPif4ZSJeMwuXQk34am7N zn`<^vTvUV_>O~FpGA_%`y3Lh*ctZ>CoZOEvI5jmG^)-}x9#aH}07?jQx@2yg`8NXt zsp*(AO&IeOs%ke=Ja;bRvT}H0!_(|7=;Tjj-9_DCgaQA;a4mlELzego-1ftwH zZ6>x%+rT~*l8B-xSgdAR&bRRNKd+)Ue87&tbl5Jj$1+PHEk@aP;U` z9GA}$uy@lrIYQJXp_vqPNkG;>(NfA{$^l*kmJvIRI<-HONCMAMVbAFOS_beGrk&q%FMj30-mnp79XUdQ>M2bM?WQk9N^PI_r zh{=o;jb(!vW-Lda%~Fv_C_|dm1s$Rav`vEGL=k@^5hWbY2%YO8a=7*}AR}O%=&>x3 zB3!n|^*V}NzI_ZxN_bh2WA|Wnu8c5>R*N|M|G?3)YDR-uUq*nR*BQQ4& zBz0nXywT4~14*5j8<)g$(?C)S%66c5us}p&-}jM@#6sB(%>TY$yposI3$(-=la{`g z35!DU#J&-ADR62aK>TqnJ%LnSE*gCy#Q%)H77!s>w+p8uJs75eq$3Sv%*X!^0CG0q UrsnAl<^TWy07*qoM6N<$g5$oDOaK4? delta 1155 zcmV-}1bqA7H~JkmiBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAlmGw#32;bR za{vG?BLDy{BLR4&KX$P;i3)!NB}qgFbOZ@zj5w!Qg9#2c71%VyU^Gz@O_YEHl`Nnr7+;7{QM2N8K0DS)y7KuhTgq{p-GfWe!V&nOaj`m&ef3RaDFbT{7;(-5lKv%9_ z<+-(MA8&1Idso+U$g+Qo#bUv#*l1tB?uE|I&YgwUZ~+hlyyFEPKX!cmhr4&bVi?9R zUY}2xrU`&y%+r5#J%uoTtE!rz9f-$Q z)z=62ma;8sfNr3C)PO{yFRfg;a+{`U$clm_NhFg=yTu~SOAZXA*R-`Z1OkE23vG+h zv>+d(rTJjpR8Md3hEOQ!5;nDVCG0o3AT?SkOh;?_r z_{548+qK+qn67_mcsy=;x??SYK;Vl)#Y+9t)Coky=`M30J9wl$6bfxuH62+V4)c0E zL?e-B0)fD%qZKL%C=j^3?)nQy&Yo^+Ztl!x)mxmoTxEp2!p{bS!9B%l$)&)oWj3ar zF*voQYv#2~3S}rvRq^_~M7koa!QjG=$Eqin0-Juypl^TcAyR63I84*<`~4yoi?!6& z)_hh(>DzLMl$yaR%fr$*)juhf=!vf?6;|A#O=j{>X?}m_1Su_pRkr>M z({#!`Ugo^fcyY6cf2|+xDhU=_{8nM0E}6_#CsOvqd45eNQS6Rk&ipiItpfYg5oq;I>WdQRs-`Chhuw3$G#4qeUWVL8g(UMgRGh>O(*Qrf_2wJ&m7ZBeJy z=5ShV6nhE+g#=F3!u%<-nNZL%bVsk1I5}oI#yuHdDM6 zT>k3{KVCk~$^LWv@zi9l$VtfL3c+q@QT{w_7;R1Ek?nMAG7e4f=Fxqeyw=BMIfdb{ zpkPJTEr2vu*MdM4cmxjJPC_!ej$>GYO0G%Nxf zG802AHe?}PpTzBHX+B7{LO{nYPVbDC0Ed8yBU}1CV82UuVh8Xru;C`%002ovPDHLkV1m{yDkA^@ diff --git a/KSKInterface/src/assets/Button_Texture_GreenPen_Down.png b/KSKInterface/src/assets/Button_Texture_GreenPen_Down.png old mode 100755 new mode 100644 index 807b81c896cc90795472cf911090844c1b14096b..f85b5ef758385c12818a50aaff99e8e5e1f614d4 GIT binary patch delta 4781 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 diff --git a/KSKInterface/src/assets/Button_Texture_Group_Down.png b/KSKInterface/src/assets/Button_Texture_Group_Down.png old mode 100755 new mode 100644 index df1a3e735d70f73898d215522982451de08e3a4f..4ae76fbd5ce990b6f877cd245fb795edee9fe9fc GIT binary patch literal 4043 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 IM6N<$f_X1Q4FCWD literal 1198 zcmV;f1X25mP)j!jkZw$D6#H)X2Ieo-Al-zzVGOUuqKU8YUMP?& z=NxF49Vfs07%xWwAXdx}t+R1!9S+xs|H!<5;r{+7IRwYKWG&8(#tDDU7_nLPjk4I! zxzBSc*9Nj?ihGWU>NjJ$(Q0kIkpp5uT+f0DCaYuTbByE|D<;&b8t!`6&QYP%SVM2j z81C?jxz1za`YtqpoDnxlA4Kc{lQ@wL3^&a^!t4Y7iwqshFacu1+T5`yw zqm0ZHVnH%g{A%c&$6%<2$h#7u_SNOlylo;Wz>U zgPojEb6|j^)kC1~EdY|v>uUo(HC0B|7QsMLn8dq)H~UY*YwZ%r8o1Wig&L=9a+t)3 z6la4BSx}yZa&p`w0f@D}YnVRke09M3)>!>G4fC^i`8;4frwq$(Q+1P9*HFh+L>3{( z5+;b9`iO)}d@89^HX?$^z6cKafw)EM`hz&z^QlA&%k)llda4lv=5Z^vd;|>5gQL6 zIrjos0HPm=oU0f$T3EhGtZn0@t^pP6(iohSTb7I{whGnYRsc(IbzGBKEnI3{eY63Oz~x z0RVZ>8X)DXm3De7Kq~ExT0jo%P0s)shc@VuIzT=S93NF2U#~&~RzId_y|_U3Nq=0S z<>H08MM|R%n3>Dn*`5HX(wwG>q2|fkqkcEi6MOb_b{zbI-qP=_ZS4#2 zT$U0P&wi}Mx;>p8ot1>FheJl`Q^hT~w9+|bYV=v@jKTa$h3t*~DxH1kj8#@FdxM&n zy%h|#oq44Y9G-TJC|iHX&$tkOMt>iX)mT@LkTo>=x}5%vIV2|aAcTaFpq|U#A{m~4 zhaq_x-PP<_f`Jgyf>Uu3=3)j$VHdu~+xQaOLrD3I$E~;n6MOmp`B;T-aUb5o?wCW$ zVG5qb{e8$dkePTDk78Vmkm8w!r=-)z{%~8KSMF?qy>L>RUxB?TU*f`LTcj|d{R(bABT|I>B46Pw6j~Pg^iF^0Po_18ryhC zlVpGEA!NIhQ2c+R%IiPHBYCuikb?M7O1b~l&+ERz%{9mjA%|fjZpb0564v8-{G^Gf z_uBqFd?S_NFUI*&W#9h1XW5R=u_?cHf1Tf)lN@|=(zc^rh#a;yVzYFDc;N5Qf#0#G zjuMt&DW+rOA#Z};@H(DRr@P1oa`(F{e+^WqUV?jYW)^?Z8`Gs@{N&c?DL4kp6S5bie(1CA7U(I_nQ16*3AhVopizpD5Lf zg^&sujt75nb;&-kE*8W?}yR4_?Fj`Fm$Se$Kr) z#ZgaAlhQEj2TRDhIPZ?v9Y)5XlkqaVgg2yzw6uR8;hO1qUdm0i)>+61>0XyX5wccc z4JK51{X!|ZcRRk$VeQu(*8a_#w57OQDx@1IX6MQMhej203?9RcYA=*)&zrhgQd+)K zO4IMlZI5k`Ouz+22q`0Ewc!aVf!9`W+pQR#_W&m~h>V_ooKr-97A<5n9?x;V*_bQc zJK29QLR#|rzZqqaGQg7>Nyv&OmeDiU&1e)MS4ej`jnLf8tzd~>x{&G8k?0t~95voG zT*R_>vQ!AYxyfY=l`3jF23p8RQiXf7KVhy#s?Oh6Zz0_de!4=Jpf9@WA!K-7Z@1@n zMbI~6>mg)9-ihxPk9Rs;6ltkuUs8>bcBy|RHz2Z5OIdn>A@EiU&Z2I_w9nuNd%Dl|&jy^0bOzprs(#Ia{t@I<0dX~gf zq~u{x9NVO$-VUfpND#~3AcTaFAcTaFAcTaFAcTaFAcO=VB!mPZB!mPZB!mQI@!u5y X3s%%!{6u?f00000NkvXXu0mjfJTi~} delta 462 zcmV;<0Wto{AIcauiBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAlmGw#32;bR za{vG?BLDy{BLR4&KX$P;i3)!KbxA})RCwC#);&vHK@`UE-^TSF8-pT>v5076A*o^t zC5>&sKu{6XCN^3qh?Nk?he#k@5X35i+KLgofQ_9Wz%FHcMK{f?T!vj&clU1P1H*7; zhWnp+ICJJ^a=DyZ>V+Ds=D;j8G&T3*Gg?q>k2AQ%#`WdJpKKT$!5n`YQ##l!&TtQW zi;k4t9J#j?*P-9Umnws1u%2gRqshNGtupZJp)9S7;#c^A-{Iu-m_#>raaaxz z?(nO`n)hK-`NFY^S^R%YqjmJPuGGp?E&YgZiQS(E z>kiP4wG#FB0~SN!E(u%+wj|Yp`OqGt9=wUOItE^a4^M?8YFLLxxtW zdW;nUHiZ6DXlbZ12|U1f0-VN+zYm$`-^6F&Q}urUj#ENG7BvpBE&u=k07*qoM6N<$ Ef?M>;VE_OC diff --git a/KSKInterface/src/assets/Button_Texture_Image_Down.png b/KSKInterface/src/assets/Button_Texture_Image_Down.png old mode 100755 new mode 100644 index 1f5d62e2ad2b2cb19ebf0d22a116971cab9861c7..a1be82bb9115defceb3ba1d3031c5aa3f8c1cb68 GIT binary patch delta 1655 zcmV--28j8Y8tNf7iBL{Q4GJ0x0000DNk~Le0001F0001F2nGNE0C3`!Q~&?~32;bR za{vGf6951U69E94oEWh-i3)!P6-h)vRCwC#ompsHWfaGMcQTVS>7=&SHnCc@TDy?c zs*Sd|pcrafD+MVowCanZP+XxRSkZ#@sfwr%T2$~&DhNIZH7)_6xU~<86x=8(5{23{ zcFZ!(EIynwc1$wKow@hBGo3kqxD1or`_0_%_bum~?|gT>d_Iq4v42XH^{+t(6AbHbu zgi=8A>a?@~mrdosm@0;m0)8r0r=@_*2JX{iuGM3x$^%~myMQB;h?NMxzY076G+X^S zQ$O$+@SUGYeVf5>u5N$eR=-x3Szpl@RCD}RyhVAVnM*9%YmT8QbjNU_P5}GWo;IMR zha(T@0d8;&WC(Z-7^v|2Mgp=U3Lu4{E@nMsMj)QeAvUR-42W4-PR7_$4roPVuK}qX zLW#^zL5#tPtJpp^z#7H|n9uS3lyU`@cX?gcJ2Ai8eI>7+nI%>b$Wir1Fvm#8g*6JYXCc4Y9`=kN|1|{sMju zsl4xLfRt93K;pnJz@d=J>oXw1%gzFy0mnk<9Y<`)3a;6}LEycB-u`ajxcMRBl5x+ij29JZLs*1Sgx{NWa(@B|rEKweT?%*w$;8j8w{CwxLQozF3=RN~0G|W5Az}4W z=YIse102xz&A5$YjcIS3Xj-=*E1R);0#c~t7GOkMd>@k4w+v|4itw~2{Qw+RfJxjw z1ZPx1tOHgfp`Kz(?hx>mp4VDWKnhAAJF9^151JV z`nkoQcT9gx_m_bWwNZKX1f-x@MHMq%bd$|`)2>wbyyd_i9X8vhh%gkiP>+4U+rVD! zEs1&q5|x!#tc<>HL-zM|lyPkmct{)4bJ~;RXL^NHQyJ|YJJfRPsIZ*-fu|Hk)__z# zOl6T};AcZ9??K?Mq8?{J%2XP76nG}YGM`3r%Cdh3#J@Zw(e81bGs4t7;7J!2SFDa< zoYbLZr=$Da2y7G*zD05@v{;*9e{(pq8XsI%2R;s5{Wm_Mkmtz~|{JQ9%XR?oUCf_rKQ?f~BB^ftDd z22y{#uD%q>t-21l9yoi#xkJc8)L|s^{aX!PBz=6(ytdLVWbI^igbi&Ca4qm9<)_L< z3dBS9dNc#~AlZj&r#XKv669NlJcZ~3BnWvxdrg~`6`SxGX`M4R0M7%fA|8f2f%V8X zikb#8tRC?$;7-bWm`y8iJF<4t4}6M*?T>#V5#hMP7(<@twOxmf#Z|KCdXW6Hk)UR*`{!~?f@uWDY$m2#_FVuczkdK{Z3|3D{Bxe-I!EBB&qYA@Qa^jm3XT1To1g0g^)^vnlL} za#JZ?IsWUf~atwzl z5sfs3s!36hQlS%*4Ou1wVn9p=#DJI#NFC|l0RS)yKk|`K97F&B002ovPDHLkV1hvW B_`m=F delta 670 zcmV;P0%85?A(`6$#?d5z5%7Np_#J!bg8;y2 z0>I2s=_XETY!!ghz)nL-zwdf6!^{?K*ZO9b?C~>@@5g2~itwy{+dy9t?}ZsKrS~&F zrOuXsdlHbpDAOjoH7VT$ZUgsS5P85Y;3u$OAM`ap1FQiDG)@BnH-L42B42wgQP5E& zmw~syN8lB3T;FwSJpX@S#3egRfy2N{;Ix;6Bfx^9ZcwfD^#eI+Xh28G3)k@Aug?;JRq<<<>n= zN%cb`G*NX4xT5iA;Hz?#0M~#QB|c){7Vtg<(4@pWz@l>Lj<8Rn_>dgVRabmq%QEZfluxPv&xwk61>M9QHECd{F;PEX z1n72Lhq5MT;|N}GMKVsu&=m#JnYXSmh;&Vy(akOTkJrQvU@P|8SRCLeYIroYgfRk4 z1L$3J+cuL;wH)07*qoM6N<$ Ef?0ecj{pDw diff --git a/KSKInterface/src/assets/Button_Texture_Insert.png b/KSKInterface/src/assets/Button_Texture_Insert.png old mode 100755 new mode 100644 index 9c73fa2d128073d624310fbe240d8682353b26e6..4196d521e9f49ae8e1022582d12b9edc2df6e73d GIT binary patch delta 1323 zcmV+`1=RZH7@;3FiBL{Q4GJ0x0000DNk~Le0001F0001F2nGNE0C3`!Q~&?~32;bR za{vGf6951U69E94oEWh-i3)!N%t=H+RCwC#-OY~_MI6TQ&&Uc3Di~kTh;JZ>M8Nlm zC;>6X7-KZXm?(&F(z`LfoxGSRn&>~^feQxTi3bk&au8U22^V9++ag3T@q!4ru!*}K zx<(g4*qPaxscwExGTGUrYO1QgU0uJbe!99gJUlFvkIsoh5I{l!q&$D>sec*YJF)C- znT&TMCESk-F%CmGh%fOveknskYV|0q#64shKE#64 zr1=hyV_)t)r0iqJ1z39q7;r~QHzfx3_Uc6}8fDsrcqM?ePZLJbGybauX}}L4ZP097 z)x>x+CxEm^y%^tMo^yXOF@Us3Luhm%ZaC!&AfW&fKtcf|fP?}_00{+oO4!V=1Pl z6ZVk8AN)D?R~^U_h41#xQ}otnumR7bzXNr-7H{K0Cp%M?V-6f@ggml^mBk2$qX=$v%YtjFRi0=YQ#j7vw6b{;-yBb4jX@6R7a+DUi~msAbN zLfqRx`nl<#%^Kr+%*4l|gi+UG++8IgJq^Mb3FRYWX9c}p@fgGWCh{&-xF9P5q}D<> zIS(J;niPFC^9XK6!}9x1 z#lqdDOkwn;`fcw-VY%E7*@YDuLg`EO+TN)GbGkv*uUO{Zlo5>OsRuh7fxypLmcc;3 zHPvHxrwh*Up88%q*+nRQsr>$K6rQWeVPCp-Z|(w&71-0QhUe@$sfWa!8dK__?appC zI(Hk;&JKS;*__JR(d`D8!I!lwow=LZ*fX+#Q5GQe%h%IwfU>0iXd>@s#beKZwn>Zf@DXzI&v} z;d0!fu=n?B(-w9uYFKd#c5ajT=U}aTOb%<~6~>a)ihUf9jRdj`k0|_ERn-}*MbC?OCPB3OtbDU90N zSyMnQAlQkhy@`#L8Y31W3Kk+7{|H;FkVJ$OQ7gg54-$PgcVSs3iM!!FL~>za z=FGiw=FZGLJ6X5e)lb`{&z23e2e&)NUOdEEOyf?k2`}MZwAXP0i@kr`($P{o$Nqon z40i~32zySL#nrFl-)c%YjHgl5SO3C)AD&|gSDFw`;sTCh2DbvQs{cB6;|0!#|7{#m zb9;VN`q%IUYZd$eUg1m$TPytPXlagTvFgHp;$yM;$Zi#fE3qBSH4*O|k1i40S=yn+Aw g?7x2q_nq+10OJ-+;mr(gz5oCK07*qoM6N<$f&gXOW&i*H diff --git a/KSKInterface/src/assets/Button_Texture_Insert_Down.png b/KSKInterface/src/assets/Button_Texture_Insert_Down.png old mode 100755 new mode 100644 index 41a8e896af2d2fc86c22975faae2e88167b2c663..2164ee8144070f1a9aa8d816f699a485bc96dde6 GIT binary patch delta 1311 zcmV+)1>pL|7?mG3iBL{Q4GJ0x0000DNk~Le0001F0001F2nGNE0C3`!Q~&?~32;bR za{vGf6951U69E94oEWh-i3)!Nz)3_wRCwC#on3DgRTPGwQ!13A)kH<5C{T*TXbV~r zD<1(tL!vPnqehWbywZQ5aK{Z7cq4znXf>1uSnKVsi&&;0Z?6ub3v(`+>%#gxSi*A8{NCJP7AGH>!FCD;2 zpbuyRE&)e@GB7G2>8cZW6L=iB1(*R`0saKO26h0y=bHJO`W> zkYsfe@CC4@j(y9(6QP^0ygT(b>V$#!FWVGlC8t@_n5oIs?;XB?B%r0h-7);leFBn< z+JKo6+uQ)m7La6g1&Dtdk(h5MAd-Lxh$J8aA_<6qNCF}Wh=51}A|R502#6#g0wM{B zBp?DZt!DWxlxs;nLnVY%(s{s>z-r)T+%xY#fNy}$fQu!0Fy3(bFQznNW_q}{lgRm^Nd z()T1wlhqIG0UnvcbhZJ{0G|Ne313SW@G0;tlcx!_01x{SyS9iv+XEa( z5XxeI{N6hDZ3ngkw-pV@O5o85`#<1s+L9(;M>p_soiHY}7FbmzAgvK$)I!-$^HM?Y z#g#Gi#%Q}9mj!=W2q2{f!pR+X zwqw9@-@doOQC=#_JY*agX+nh7Mf7CrPGBc+M}y}d@%?DN`N*h(YB{bTGp|cGeZa9I znXF%cw{r?(7w~gp4mQIY!@Gb%;ISOR_!iilnm9-5& z32Xtr4;;op;1%FR;&XyP%A&i0caxj}H=v6D(Hu`@k`_>%dYAVps{(^D01TxzYYyzi z0Skc-0)bNT4*X=Q%NPN^$zcKTA#MROO9#FQsHT155GQ7*fR{3izAFCw)htdP>P-2x zx83CoU<`i%!&!AaAAuLMjHZe(LTcwJ zn;Qs;5Bc`PA$BgWPwc8OqpwOx4!lS}CPLy@aj$=Ytrx}?Qd+gW9)Z+Cd1spa2K~r5 z9(spL1^GI{jlc%nf?y9WZ|V~6+4pYXE8u({I#Mdo=PF9T9KW^T${NP}mYYtN^!*U| z5J^A;M2e}_N&fHff8|`#84%}i8Tr=$Sp#eYULbl_xfDM#YzMXiM}SkcK-S?th_XcY zDRqCX@FV44Kn8Kovd{ZTRj4NGA6&XnoMM}^xFwWOYT;Y`{oVuon&)}Q0PYE5RP6(v zSCl0Qh=51}A|R502#6#gl7I+^Bp?DJ35bA50wN%ifJg!&AW|KweWrdV@E|U|zm0_6 zDcA&E##QC^#b`SMd`AW^*`Go)afu~w`DW?xD=o>|20|dz&*fHZx*B!T!wcIKLLLMmsKC4C`%F$0g>YB>HuH| VH@z7OMtuMP002ovPDHLkV1h#DM2`Rf delta 458 zcmV;*0X6=WAI2CqiBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAlmGw#32;bR za{vG?BLDy{BLR4&KX$P;i3)!KaY;l$RCwC#mQ70=Q5c1vDXGoEolwO}5lRf*6^W8U z1y}t|-T9A%LIu}a3KqI61VoLlOsJx?3r(ec+}zO1Fq4nTkVVOX3wK`5JLeuQbKXf* zrimv^8D$98fp5Su&>YHECtV-?hp)rUD68I(B&1)DuU?5A|*Qjv~{cu3n5F)>Rwn{-PskO+6hTcBMA6 zdMBBKuX04Y>SkWwq{Dx=uAZfwH3s#RG4X5azIr&wS$`$!9Pk>b0!9hc1=`V6Uj_a~ zk@W}o4%}yavoC?=6#qBSLj90)@julU;bg5G&Q6Alg>a9V{0h(kZo_H%4lBS#lp<|l zB_v7z#8u!j!(A`%t5L!vz*FEdnf(ZtjmH51kMzpm!G5rd000UA07*qoM6N<$f?|@& A_y7O^ diff --git a/KSKInterface/src/assets/Button_Texture_Instructions_1.png b/KSKInterface/src/assets/Button_Texture_Instructions_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9d70e857b553798b44926524653262b18fb1224a GIT binary patch literal 4507 zcmV;M5oGR(P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000KYNklSc*48a{}KMB^48npTiB*^p2qQgyBKJU+bdscN>XJNx#WdC!^uw|39W zyz~Cfe`cQZ%#64@jZ$Z4=h0@i*4;Ol832_^g-WG@nNfch5y9R6^M4&39RRpH?!M_W z0JU0eQ@Luj3P8R7`seEP)!S6nP5<6p1GPEO=jv_NpQ$J*4V1g@4(vfv96-#h8|W30 z!_%ve00^)VI0;w^oSI&L^MM%fH!xaN7mCPf2|;s#0C+yx?kge-L}XGU7ZwS~AQF+i z-F=?B_aqb%0LeAd-Jb%k1v(OtI8<@>xxgHtGXaT5vw(Ymy%LakbUpAC(3OBhB6mM0 zhjKsy5|7Rhk>w(CYyuLAL}avxECEKhORS=?KcI*lrm8DMq&oqL2g?3twiq}w0f|RD zo7v02rGO+LacGpgKLgB6K;qII;9g+I1SAf1xcf|C9xyTiiAPg%D0?R$@o18&E~iC) zYH0-^h{*A(`YLcx0umRLcgS+~2}mS5%*=X$lM|3)^_{!F0sIzF_P`v&4{hNv#!NnmmUQjA9AAm#z*13v}Su?z4Ra7O|%e0dJVfIgrn5X#Q(J{x!ls3su8 zrSfkM?A@v;vyb5$DAjRny;0E9kvSSWI)jq&{vRu6;AVbtZXZ?V`@@4H6z^?(- z?n!olXjZ;NPC$k^bk+47a7|zUxdU)#4y7{z83K&|*)aD4Fcs(zsJ;WZOGNIciD}_d z&LJW)*x%kz)r&;r+rYYKh{$6!>8F-f%ZJoo>Id$Aw!42C7^_TG)z^T16Oe6m$Y3tX zhquqnY`nXF64=IAGwW+Kl$LbJX6iSyalrDx@?*?w8E{MjQh-ZxeFIzw^aeI{JXs3h z!~`UK3B08?0Mmizfj%q|0J$sxmc z$Hiv$N+68CfH`K?Q#6crb;zY;8OEJLMk(MnvTd&0Mb$QPM`eyX4R6w>NOE}iu7XwEJHZeE9vi8Sj^|5qA)*wL60-h!O z{Ktd9Y~YV(_ODbxRCQ~^)oijGf_4q4_II)!kG;)?(F&7#2U+&-Ho`7p{tdWtdq>|b z31onwY82TuO)~=L!f%1A$j&d4fDBI~RrPTZnG{&QUsWfV*@w{$%Vl$ih;)g_bD=QY z{bLci0QfM*zE;Zw1L$)1#i}|c5XMJlHbF$z24)zOLpIZBcVFu6p)mUL{Q26LJ6SD> zJH`O>-TmOesut!G`1;ttbul}no*q3JSOA2;*eD`T0Mp6+6<3(gu+56H8I~P}&*;rszD}1@i?vS_0PDOp+DnoBs z9pWPL64|YzEd!&>Kpp}vA?#k01f)RKMCA570D5OtWQj;W+06(^TYE=oGL1|B3;;d2ZfD85x)=Ze002ovPDHLkV1gEpY(W43 literal 0 HcmV?d00001 diff --git a/KSKInterface/src/assets/Button_Texture_Instructions_2.png b/KSKInterface/src/assets/Button_Texture_Instructions_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5678232f6d35b9e30fcf56dfbbe25cd465e3a7aa GIT binary patch literal 4020 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 literal 0 HcmV?d00001 diff --git a/KSKInterface/src/assets/Button_Texture_Instructions_Prev.png b/KSKInterface/src/assets/Button_Texture_Instructions_Prev.png new file mode 100644 index 0000000000000000000000000000000000000000..a4369462ad15e81efe5de8dda95f5c17d7468cbb GIT binary patch literal 4033 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 literal 0 HcmV?d00001 diff --git a/KSKInterface/src/assets/Button_Texture_Lasso.png b/KSKInterface/src/assets/Button_Texture_Lasso.png index 20d202079517d4d0829de28a8e03521a219ff148..747ef0a0e4b8be07bc0cdcbe635375fc3c4f12c7 100644 GIT binary patch literal 8617 zcmV;aAy(drP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000)$Nkl$QOmjRiqaA|fDy0i+X_DzKET`Q!Y~oik_7?9T4a0MU6qpZ&nT z^X^;D(|%7o6RE7MBuje^MYBt=XHlec`wr>8W=r5g;A9{dSPlFM_ylm(@c`gD;2<5J z4vYgML}*INcW2z=q)*9zj{I)7hX>s{b+V6%5_ z9&i?LF3<#654-}r2$Vb5>#OS(0wus3z>`36O%^XV15EA@oT(Si(F=Y9eC8}-Jzyws z63|Wy)(-fwQIG2=L(A+Sa7^_m34UhjMfPh(xLfu3`5CK%Eg=m#987q|&n5;$)N@Q5VIQZca5 zkp(sW=Wt+zXTo@qyJy~rJWVtx$SiBK<{`t@SS(87cgGh zY$+f3%F&JvI_FsLZ`T4_YbwpvF{CMQ8*qwVq#^JGupw}6Pv8$8Gs=KFWnwH{5n#qj zE$Uq7zM})o_z<{SQfjF;aI41*fDyoBf#)0^V8#MzL6P_F4|&W$W^lCr-w^ok05hfm zmwL}xXNEKbo)Wi&GYYnXFy1Al3=(r#S@&11zcQOCzDnhxPLwQ;=VGoCBR3( z-(BCCj3KQ95?UfB=|B8WfMdMl>m}uu8p+PL^3Hq5lg^GZeLjr_R(Z!R2afcPEf-)Q zpdF(F#~%h}c*jl#PVvHiCDTslHoJ$E)R*^0krVW`$%}+MN8eq5TC}{7xUm_5z3aOt@`JTBuA87BL^CED+^ZQw1ns3s^ z03SQo9Si)-J7=lP;Wkg&#_3;|9+kQ9ec?^ONbh*DuDjY3t_Ojmy>q_-ZgxP#?*f2h zgYL7=vod1@iF;P#Qx4Z!<|JdtcHs3S@kqq6i9X!BPjZuziqX9~a^dku&#w;eY^I8|(m?w!qn*AkWdU4+HlerGHbQ zi-2ZTrB0d&in@~cM@d$N7O%aWb*^4?ju*5=luGEL0BW1Axg_B5_L3=TE`RZ*%vvZm z+FvP`3ShR(PsowxXra3bk{9Xz{|cO&r--|o{${?+?q=_tmcSu8XRWSRlmswc3*4^% zS2`NEQNq*46Y~A4%VnJiyyZB5mmyh7Ay+7Y?kXWzq%fdTKT)6)@ISy$flfJv1qH37 z)?WoKxJ*)UoPK{IfJ(AdHEmSvvRY`ZOh4uNcdh(xQ($UNVL`!gImwM;N~vd`XUH_Y zBOg(gUE_?l ze@OviQpzbTC^*oAuT8|wlfI=+s8DeR=%u|`t4fcfjn5<_u4yip&*H2T$c6r|CEkX=IHtl^( z>rQLgy3fUsY-e5FXocYKSD3ur{?2F3Eko)jF-0pe6|Fo>zW?*=dZvvQDEqMpQ)p`p zERS?<-(eu8Lt-fLbqAO7$@HB1{tmHF6TD0P^8M+h1hM=|X>u4x(}h&CKk zK*>_wD92gH0!(AY(@LK-NI1E$prC@pT6R+fD~Ay)tYoQnR3TI4*3}Qd^pv$z{I|+w z$YMq4T>}^EB*tvYBCI;mR{3f-brO-lpCZ3K%`&7^@T(2bBXF^NarhHV7f7b535m_r z&Gmc@s6_+w9zaX=4#x&QYli6ss}Fo=8YRBS2mDw)e=ZP5c? zqO`(svbDC=ay_QS=nzb&%ZCmispkmIo=PQ{a`@YrPMiaXPc%l8rA~IpJUu1J++Q#J zwL<<(F{B*R46qW@qZP#@;$}#57hzJ>EyS==X*HN)+RJi|i`cUZYHReYb1(&~HV$K& zL>01!Y}+bD?;|lCdCLQ~y)M*NX36hpoJf2-XkR(KQpHJ@+Bre&Y=M&JF%4(`3CQbJ zS%Djr-vU?{mDIf@6cD0^WYhnaMqlxJ;5q#~C<(Xpofg*8;nIpq;s=E)Jm66xO}-e@ z+`T7JM`c5Ns>HP2o`cDzkB?#+v>Ic2Q12#j=myMa!OS#i#j}{s@xIc`UrL2X$xM}5 z2q@~N=Yu3O6*6JAy|V?Tpk`?prZKzqZe+;0n3C=9lcc7mVcJ_Ch!X4cZi?xTeN9Lw z6C=|jwZMKWOk+%AvK>X3No?q)P`(Ue!!ka(&b*$7Vme`_fS)IEo?}-~J%tkm62!ML z!=^sX0=7g+?7`}R855Wy=bBD>MdBp^NzIwej!se8mB|vHd|jH z=bEf_{%I{*T~hG%6_w^=>MlEo?<|jMkt$Pwt<5nLx(hJ9v3YWe9i>$Roru0WrnpvL zjJZUDmM;liO!7KVx~Pi)O!p+8e;{ACz{Vl7#l`Lf5Eo=jn>K!T0rPjlj$WkNM;blzKH?E4uGD%Xkey-1wS zvM8({FwqSR7htMZ5lmxTVIY#OO-+3-0fn<1X15ajJx$DcQ4FsOEhg64vCz5Rb;QQm zKE^bb+u-&D`Ks;2rnxdjixfw-Rj}=Yrq;k#|KM67p>u%05Z@S=L*j6LDs%yf^WK}Z zXzyS~!B(W{rDp>75Wk(pQBHhwuNU0f4EJRuwmoHnzEGHPk&|U`X>hKC-Pe0BcDYc| z7%gaVEh6=(>?fF^`)8Cg*rWwoNqAR?bdrr>ZYO^1td|pWH52NaunU+{CLcCQ=y9Y{ zD4?#B3j__P5VUI8R=Rk^s_^nm&w+m987QR&0Zev z4otU4M8ffBsu>li0~PA0*m>7tOa^!&W|XcgFf-D*eTQchC4MUi_Dmpw*hJ2^xP}j6 z=Mc9MKZlnipK^(EIdd``nAP);)UongZJbQR8Qy#EBL<}-QF$R|*N3Yy+3S!NKLxxT zb=0M!!u!`TqrrKeLocqygH&P$Jd2#1(=l@L&tX!~nchULGyrS+JIvUi#d4W(s+g3H zbW23&ubbX`IEhUTTjg8EM@ejzKTWpw9^$*|(vehrOc{WI(vnStCv7uLZu7>&#C9P< z0&@?h?s7z$G}Oj-jWC0=HksShkLaUHDu#l%;c`5`s3p2`si&?r#5?|M8WC1a=p$+G zLd8awPA7h5BOS3x35jFay`(LVV#YvXw!E;QV4+l~SCWW$knHG`S~}kXVShKVw;D4H zG}cLbB)j$r@-+ubFqU~Kh(Z##i>i)RNJt)&W3|k9l-O|67R(kQ8`Hp)GMOY_un*Sp zd;y=boWg>FN;#SmF(ofx1CLRzX+bR>rW2<0+Cpe%9A?w6=d_?V$$74;0-@M#H%^wC zTeQ~}GY{ECXfRcQ*`WoPuJ`UN&1mZ-I^Rf>Mt-Yz9}vi)RYU?IWDYm`za5@*JH-NVP#kYZVD!D=n+Q z?58+^*#22>fVEx#2MFLAW+ zX~Gr1nj+3;lIsE6i|x?St$v(u=ymV4f;5cZ;5PmbHVUK zrAfbXgkYkF+jFFSjht*l7w4S5N*eZ00TwUPyZu_e&6b0Yk=YtTc7#d562BApUunxSU8t^24qfFt_H~XuA(%Z@=4hECxmP*R+iiTqcKtAkB2yUe-!acz{Pn3E*HybH6b*}y8U`(sQQ z0A1g&?f(PQa&?zw$hCxb0!=qrM|QQ~ZYUj7q3F5HL0u7<&|!M`_FD9}9JsvDL4-#- z@3K@HSRh1qNEOd_l;R#s?`xqROLBfw`MpMj_xQ!}Z@CWB#|4nqEa1DS7GN)#iVuW# z&QogGHp)F9r#eYKrM5IdG08*KoHv>H-YiSA6-b>gY`?~dv~wMs?!N5nvj01@;IEQ= zlBu~ES1PF=is=$@HKM5}JeJza2Q^P3WECFcLz`%lD>eUAf!A@$gl>~_i%5gq2(!1) z&-j3y9432MpvC*E7hK)yXhj3z|0@(AeyvFP4N3HMTJ%MdcB?VV1VgR=dqn1>dy<8E z&C$*^a`v|iRxkJ7VZ9vu9hl--rI${6Tl>E9CrrL*Ip#{7cU^O_*E|yv0Jq~=ojIdaB!Zp44^>jKyPgY19E zX^sjUf5?-xBQZ^Fd2+xtWr(%!pEyqR98ZImB>B58$`XWXAup4-jrmHMNEaw{6Z0#a zd|qK7@LpUMLoC)Gsuw5_=jS<+>(gZ_zROQ3&29so#e>& zM;-0?)LEFjgp__x&1(FwD+BN+kC~msjJ*Z<7YZE})sW$lz&cb)+s9xgZ7muckC{Z< zT%8X|mGYzoCkAZkn1FWFlWFtIx2u&M*x;Sp%gdu#Shz*^{;3#c1FPK6;9r7n{rj-^&UH^ra!ti^^E~? z{O;c_SJLc@B>AgbJe09orsGZT+%gBnR0wF;MeOMOzo&D(%LO1tdGS-OmtwDU7Vu1^ zU3xeR_od?xn&~~C*KwP78>&Fm{Q`nRojlf3B^$qWwA#+PY$Anb_1b92Vm(w>Ny}WJ zq`67XUnZyBL-$*SDbR$zbfrvEIYee)t(UflI9l3J3q1uhQ!+|_Z&NA9D{nQ4*f>CQ z<HMvjHqm<}@z*F&z1U+$u{33b^FG6b5*G(R%Uqr7n%TGXlNPG$ zAWkMmq|0UVR|&l|Pzt7=7h~)Qn4{L1g3`yzjja&Ex<>$_qZWFO(A#tcy4I9jqom@= zn8MLCna2h)vo8?-!Wi}xhGdeSbTj}j=d;0qn%~G-=Iec$Iv}Ii@jpGpn1{8vZhOz+ zihX|OXo`i&Po-!HzV{4q9kLDRCP{i-leN{+kV82Y)SRZeQcWlqFNopS{omSh>S3(VD>n0(geJ?-IshzzM|MKH^dOhbK4 z@#$ze^2K7%63lRBAtw2_Ez6M1Q!AOPLBu*k$}oLgMVK=2WWudVS%zf5cZ?*lt1ws0 zX@SWs-_CCQYK~-IdGvjx#+b76=a~G}4k0c(9W@_QQMA3qyT_jXKvE|miaN1JD!bTa zO;(zyHKui_KBkH|6O&}D2x!pOEJHF+`(e8CZENa6Oc83fg2Q}FKkp<=;&Jyvz#oXo zIs?|YR>EsM>LIfjeuz(aP>y+d}`F0#Uw#lw!=i-z5z(Xcx-r*f*3O1Y}l zvL)M@QN5=(8M!5O*LPJ{cN_DyUb;w@-*leLex8LJN*S4_l3b~V{g zEgayy>b9i)41eeCzt66|(*FrEA%6zm*Hsv0BD@OvdAe!;OD809+XZ&Oe)Lq47Ok@Y z-RzmUXWKq)i=ed~3T+J{wFhjvW?G=_nDymKX$uIxQq)&lXup&QLeyzb_zA|^5!!X-`&??wqTC-jm@6gkZfkgv`mZodi4EwJW678U`5$-7i>rzDEz!nabx)j=K?_DZ^zt%o381GIMiJxd84JA&I zvD&_5*UTa5ns$tQRO^ky_)_>@P-CZpQ4R!2Uj@yAnkmxOs+&M)-_cZ<@{JS`-7SF7 zG4?BE{qgQUKHD_K;leA|ni1_m(9>s}!;u45h|#>-s@rbTo~Yyy5gL0YNt(n~rzMVc zCg6L?n4-m);ONK`G52|dtf4$08ZU7q=p*Y40UY` zL^%)5eA?Bpdt$C^B%7|8YB@!GASff9R73dygj_J=X}z{-jh?+q+JeNgu@50U|mb+?i`p; z4q9CE*(96U>0r?5;*bT3d<_)?I-64mEe0TblpYOy5OgopmgLop%xX064En~M>uwq{ z19GHf6(&ZXkF2vgyH&9Z53_grhTr}4IZd+b`VT?y5smD3tjP_usnJ|LWO)8>cKto0 z#gUQcSPjxAa7|-@jy^FSr3f`tZZoft7Mk5`9(js*%RJBZz1_4Lx`tBJEzn}XCG-vc z7-k}zIz&9l#QWFm&)+j5{!*iJuj&>|-%Uo3&)I+fjH)$0BGPu|JAYTh&Kw=%G1m#s zP#GZk&7Njc=N$1g~vqQc57#7r|MNIdNV}bzF3CW zK(FY`=mp7C-PTF--GOU`77%!b)g8}qWEPkF2jfJDOMXxuhIr*q5X0<&JDbo);eMF) zyO~|#*OoTS#`7;2mvQG=?bvUnr1_P3xo)1r>8?~P#<&Zn;-6L~vugCzu+`9CiHZf= zILa}7-G&gG03lsD)}1*%=yIPDwckXQ5|KEnL;5xQ+N%68=M6ZRI+|THl!sGXUk?P0 z_dJl5qs4BI7_q5Zec`6V>MU>^aFy0;C1!$47|s-WG#fM>q`csa8Qx?M1DTtb6$}9@ zs*W9T*pfI0SFc<;W28ri(IIVM(Es4_NO4sXaKyBVx>o1|#z*#&+-~kgP^N= zSIOCFS&7&|YVHzkSghDyAl5_)l0!1UZ5*;|`yD|G>6L2 zDa?hQ5I39JwYEht+J+AKJtCg#ro@~xEpP~`SIV-1=2A6BLqHsl8AqsYOP5aWI6RK^z4zb$*9O?y<)VERsyP(9}<2ORW zBybISDO9)m+a46RO1LuG#{@gl<21+qtGQO1 z+bfL=Q5su=;qs39iS*F+%}p^gwwnD&1v}8X7HWvaQbWm^k9@UVikUdZTSCo@z=&)W=QlJ|lwyw?Z8nMlos$0bw%G3irR zk;JOP5z#Y6;hIRZAq{l(T_Fa%U{RKI61^@Vp?^RdGTDjjYqqU5;9(*#VA8@Yqs_l$edzqJIx_tTv1hFKZhOzI+HAO6YToF=2{hNb>r+rB=wB z%z*vRBdM-ctJEqB=4O2=DZscXq7IRr9WjqH5MTI;B$VPMW3;B=`SqkYu^`fUW!|Z< zo%N(7t+ke2Gmq&@%@$v{HiMXB06eT9Zr{sK76~|)Xrr^a6a~OBz6O*H)_Z&`~L0kcDhIYw7wCA;t)&q1g%1}yUA#&+& zKMIn;rKDW~12z>;JoRAQi3h&lGtYFS5VKF~TEjB4Hw6ip8jt<$TqTdl0DXLywN=-W z`W2j>n0c}jkGS((U^1WWZ2}hK7IBQ6rJBb=_GW;C`^dOFBv)d#Jb{!TdtM+j(l_fz zS5RV(?O=gRv%kAWKQ2k~dSg_XkQMT&7*v4i9@RF#$7;~L-Yo`Ih=&?g?`{U;OT14r!Ynw~n}mNOeHMsiJO zr8(YN&*%qUx||}{X{Spi5pY>X4wEtCz(Wmk30$BAN~yWIqJbnyYbthHql43Heac=S zciPPc;oco)TvA7>&HKPk@|^eStL&WNKr7+gFb%dQjUEMHBZnPbI>vox{K_ofd3f0} zA*r`#^4A?02RGAnTe6`vrk>v@11>bXOx3?#+(RTI78vj@r@%V#>{DC8=hT~!1-ZFp z^b^MWj^{L0ES<9)GVV{UG~#>SE2_9C%#D16ZyRIFC)b}ldRsy)q~|zp#;$KRO6Wx4 z6TQ(f8aRS}4%{YAnFO`Xc3Z67VuGV1c%x17{r44V1nzVVh%ijiFL5%?@s`p!QVeyR zlQ-4YVvZHN$G>r-xaBjN`2ZsLNU7FW;hg7?jJrpq_@+RXOPZCLGOdu9oReZpBVIynB;JTISLO9x7sCUW|?bVU6%aR$3W zKYA#^3nP?#;`bt=GEd5?z}r|Nt!Haz+Y6-30HIIyGCp;zpl-AFQ$#|zVV5CAI3`SX ziIOz7_B`k08-DCxfW(~S#N9k0aAYcgt(_fAS1mVqE-6xsOeRso4J*|GrqVxZxiO2BaxTrw55ve ze9{)?am}LlG4!<0`nG1*xV5>543E~zPAZ)m{$%c5z`W06>8o& z?k~=d)kqEr53in(%zmcSeioc(eW!#$Y!(kU2yKNwia0s|{@(MNu_;g$&R5O605TIkfQ zR$rONGL_go&pXC7ArF^`blX!GoE;J&Yp-=(5`Bm`JtQImys63e3~z_M?W{+4-te>Rt<{YC@JnM5q*}``CbYdTrSDo%ZO6L$i%FA^kj68+xoJ zr4P+htqHkV*dd-WP`iQK(pf-R&6pFt=xu9N3A)KG&z{9k|p Y0ObTL3w{y(s{jB107*qoM6N<$f-d4V@&Et; diff --git a/KSKInterface/src/assets/Button_Texture_Lasso_Down.png b/KSKInterface/src/assets/Button_Texture_Lasso_Down.png index e2043e6be3e10fbd5f5a3a5cf283c5e7cc99d196..5ab66485c03450f7c9500cd14d7184bb9618aee8 100644 GIT binary patch literal 7932 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 P00000NkvXXu0mjfwV%r! diff --git a/KSKInterface/src/assets/Button_Texture_Menu.png b/KSKInterface/src/assets/Button_Texture_Menu.png old mode 100755 new mode 100644 index 1ea0a22933bc7dca5b12b5d29730fa32c5790a6a..75dff78b4155019acd826d19964a04f0d3d6ce43 GIT binary patch delta 983 zcmeB_I4@(?8Q|y6%O%Cdz`(%k>ERLtq*FkcgAGU)JenE;q&N#aB8wRqxP?KOkzv*x ziH&BRT=mRVo-U3d6}R5Z*_|yCDB*rSZL(?L;?~YvD-}4(>^59*`YWBYW%Jgp0@4Tf zA9NDn&J}ghWx06hnA3$r>`sf0xhr;@KXN^qiA5wegEdn z>iW-jcW+hkobbP0&U=ACV26{7B9~yRhKtA|AVj|gJv;Qx@Xm7xi!`#+5 zbJF)K4dw?p0+?mB*$r;0*C)TSd`=I)WXPvvu1yG3I8+dFj6t?pH5f zX}y2SmW%cmX4n3fZd_tFbH4TT0QPG$uV}Ai40c$4H_J~fRx$YI>+4K4H%wj@OBDu$ zgZ&5eUcG?NryPcDY4xj%PFP<$=Cz`=n&G$7LhdA)A3nG0E$67G$QN{N5sy1+`5@E5YMebn-=Ne^!-=@1NQ_MZYn@ zLhz&G+yj*=dl~E|MbEi$*HA_&)^FFuS7Ps?4`o-Ui$~u+q`O@F2Uktj_F2iUPC6Hb zF6NoaUYVQP2{O7qutVpS%?|5E^G#o7gs>bw`9^e-ZHB>`l(MIfuH?kM7Td&b!S;r$ zWncDzpAH+hGfd}L&lva8$*qC?z*8l~*$sb}ti7WZCr}q=>alBa_^O*8c_(wfOBlJ{ zX*(Bo#PHs#M?a?S|7*R%`m_)z);IaIeo0yQA)h(*rcCsqkZlF=^~~W7=~K#oy*jYB zx9Rd?ygd6cD@Ko4+*M0X&;@YPCGXDh+JYCMMNd4sV>Z++%!;-sM=R{%^JySL& zdu&>u$@dDDpdyoYE#KR`WWU-jwGaFB541ZRd%?af`jLX~1NN6v_bZ+FnA02fHcpOV z@eA1dvY7qDjVg9Y*7`h#<=uIavJcXiTouS`?|aO?lW$FONAoUF;+&AGb;NhR_heRY z>o(a-twoooyf<7Ue4Ta9$+&lhI?MG}e@~e?VSVI`?2wdRyF>P8SzdPS`K@zCe~w=G zFVEXg^PlHw{}fwiv7#Fii6A2dT9NZWWRCbh9)>j^4s)ko;rIv4qzs;}elF{r5}E+= CWvIje delta 396 zcmV;70dxM(9ElhoP~o;5KbaUra8-eaNeES;hW9! zJlD diff --git a/KSKInterface/src/assets/Button_Texture_Menu_Down.png b/KSKInterface/src/assets/Button_Texture_Menu_Down.png old mode 100755 new mode 100644 index fe442e1e77a7cf4ecad144b50240a997d284f802..5e5609fae80bba83d83a3c41c57248cd5e2d5ba6 GIT binary patch delta 878 zcmbOr@m$)hGr-TCmrII^fq{Y7)59eQNT+}>2OE$qcr-NxNO2Z;L>4nJa0`PlBg3pY z5*y7rx$2pPJY5_^DsH`*1OhvpToi$v4kr;MuE35znYViPzh}67px*C^?d$_KAB>B9xOXthY&{Zq ztWoztrpJlByE=AHoVO}uq|9?GH_zx){px-| z^Fg)CgP{X1rhJ@To)vwC;|JYsd7TLAp?DjR4Q^c;WS9-0e z_-KJ1(A8ignLUgp&I#r}6bsS4!5seA4E*;gj}1eS8oZ*A#l-UV`s05CN9G7Kcs zru{hOx?6MQKTO58W-x>S`}XrEh$=;GK>)DC$mdaGc~U z+L?G>EKlyD*gKnoSs(0Fbss2yd^>wZd_Bh;#l8BcG>n}eEj)kn*D6h6$z*Hg?jM^y zXDwQnY_H-XbHx=D@xWA2#E{8$__XBDMCl(6HQF}~AIOA0uMc?irE&X0nN99hslT}j zrhYNo$bEqI_1q;g`+`mLBk%SIubI5v_f6Z@bBkU}Kw}|=rR7P<&s#H}=SAPsIhO4D zI&kg#zk-50Jnt1ZN0)YNNtSpf;QYGkyYQz;t6FdO*1Q()%s*@5F`v6s>}B+Kh2tx( tc?o;Hf*7U;3rJwHL?qQG>px{PBu!YBH|?%=8ZhrLc)I$ztaD0e0sztNeO3Sf delta 403 zcmV;E0c`%~8;}?_iBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAlmGw#32;bR za{vG?BLDy{BLR4&KX$P;i3)!KJ4r-ARCwC#mAy&>Q4oc{4U340zl{(u7U?W3ZS1Xl z4_`nFE8jpnoAiR6M6|QhN-abS!9r{-M3W$*$O^~8*)U4%h7CkdbJ=0wyJvRpOd^RQ zRia=GJ}|X&6Q}^EK*M5dKplwq$qDcRtRe|XEq!U%zL9jISUpPWmUMs2&JlO3N^mvD zeM#4WGH~e-rD^&$+79et9swH`+Xm(XSsh?G2QC@B?GhG) zfth!B4omP1LB(Wd zn1yK{&KW6Yx~sbCPWRAN=YQ+&s$13d-E+^m%ej@xWHOiz9QCqCU_gIN2E>4v42S_S z84v?vG9U)TWI#;0l=gn;)3+k%_%dJ^a0W067!71%R5=@gdSD&!1@JG>=1}HX;5MKy z@DcDburu3%Eqj^(NO=br1ArV2%m5|3?<^i9$0O<={0n~p0M<%cp`5u@Fd>-PQ5x^V3$yt7D(DLfC0SWRUgMlT$QwfCu za1!u7a4V3?iN6|_#@;sQr;#joyFNq(Duzw zt-vel=za!z$Dsd_)+S`0cIY+(7XZKdIPfQduYpDS-S5DAz^pv4+o*k#?YV%AR}%`- zof;*?ZOO_SV6A`lx$1mi3p8>&1U+}0j$#B=>bbyceo@x(z+nLeeFnS`Lm1wU z+Z-K2$)+@nBp4WFC^yr}(^U7qG|mHMV(z(5Ux_WDsb1;e;oqpzT`tnt97 zz=fT@Z&C}{0Q?nXh9-X)bAbCpoHGg;wqFOF@9l->+b){?VLTAw+;R>{|Y)+fs{ooV=r)X6c`4iYdBwn%xOez zIWoWv+6%{kxHVI=HMGUSGG@8JFdwo{)xg7!Wz>ds;ASDYVbnSJ43K&BJCLC#1LB}d z6h^s&&v;y&c(+9rN!4Uz(9Z=%ZFj;*GLXr@(?EZJhcXr+t41&&ZkmG3_6>3Z2}m{YJhE0fsum(+T&;z=$#jBX)H%YaMaHMv3wfhS z05ZuDMh18SxTP338+WH(r9&Amma!DLsaQ80XCUK{jHMwCWvoWh5HKL_maziK`iiQz zkc@w^CIjN8F=`pEFs>*3I$d+>opc(qG;_E^8Sens0e|+yA4tax#_NtS-UY5^-@2-z zD=tme*lvPxRZqf*3y>-#{n)jc>Twux0MZfKy1-ZsToVCC+JF=$w2k7xE0Kw*lmQV9 zN9H43V7#d?c7{B!0$J%kjRIr=lp>J+NXmb9m7@cn5y3JlkXgoR^C9~*6j}NoRo@|_ zwo#g?&{S;&t|fQ6S}qMhrhKPal+{&ZBA)jnvcJez5iDad*)yjS z-%}reBw0p<@ny*K`XR&b(~I>7OAW|CBugnQjLVUH^02|f(qdUgsR9{+OHcjDQc)$c z7l~KxNbdJ8;0I*qw-1s15=&C01Z1K{S$l!s)LC!T$mwIEZB%JM9Ml_G0=hx_5?k;| zz&9X;*GgpNVXRe3PQ8%?$Wq!2h{=C|7!Xr2fwU*&*|Z)AKzb28ai2;EkdXnuw-p0O zQyw+rTx282IBPg?Y``(wiUFja;Ppupkjb97T1pv`)H$ptfOPJuuLaHl&I~y35oF`X zxNW3dh3v?X&mxNTg}9NxC}Oz}w`v@qB-hRY!r= z0cQ()o00V227B&VwF_B=(poGa052iSB~4vbgG>(>y<<4npmfoKLO&C~`H+8*UDm+f zw$lPU3OrP(4q-kP(g9^Ak^s3Qfgm#4-b)Bkwgk600000NkvXX Hu0mjf0skfA delta 560 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 A7ytkO diff --git a/KSKInterface/src/assets/Button_Texture_Next.png b/KSKInterface/src/assets/Button_Texture_Next.png old mode 100755 new mode 100644 index 264e17123d25f1adcaa58cbad245509e46ea4a1a..5d93b18a1e643756d20eb655a601b1e8b3a97889 GIT binary patch literal 3643 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 literal 3012 zcmcgudpwl+8h?je#<)y54U&xQw&BI0En!`|Xf16dmoba^7$aveA|sbD%%mI@!fw(u zMb5I=$uv!qyV2THn35VI3ORBum0PsGF}9pNqd(3c`}sWYXXg7p&-;A8zxVzAp7%ZV zoy$HIrFBXW1gY$I-0ccMh$rGhQ68L0jxpH|evlMLuLuY-+9*B{(S}Pocj(#wc&30=s226 zll*V;0kR^<%x-8^ZeH(o#4Qy+8ecmFxo*psGm%Aenbk#_NcWJWb0nK5HOzp*2RCx3 zJKox~hF?r>4s?T{q4xwu$d-%%0kP$lLV$rJfyO}~BaG;^#3quXd_k+V0{D}K<0?dLX$KCUe?)#EQ$0($|YtcASLXdBavXj;ooR&Y9 zTDJEZk{YWT5{b#_acF9$Ak1*`HYHU^HD7fb=gQRJmlZxQ<3nA^?Gus17CfhoHcj!PrdC$QTjA>SbA;F}zqU`N!s$AY#Zu|44Z^L2o^^PS);^hS zncHx2V^3!NzE$fH&Yc?KE4=151#-7PH@*6pz%bz4VjnmSk2F54OaGc4 z^{_%%-Lco z<_3PP8glSM!t-XPsNQAok2ThHqb+&dR$0$>R8dwVCh9(Ye2r4*LZGa-M+J^er&^9S z4gamHl61pE)_b60_GwEhT-m{KD0in!9`Ys$Ftd9o^sNdSZ|4Q8acG|h#bJKoJB002 zeJ}E}W`0b?TO2cw=pWp@8W)Yv9e-0Xao6za&o_bsCevW$fpq)LJX%|3M4m6%j&g*S zmVyQ?)@Z98AHZiAa6|-nl|3j3Nmg8HD;0>lf!2~T5zJ!%7RU8nCb#jL@@O2k)Sym|EhmL`nFd>m-6ui4 z8|(757q9enpg1)^1XRH>10I%}*egRo(NL){Rw__55@!-cG;x_2oMRtX921x%ie!c^ zrWCI65$j)~LH{oR`d4WPFp|s?Xfo%ep}X815I}-i8Hqu2~d1uS*c>h5&My4#R^IPPZS?z0xro~R;>67 zmztOm5u%93C8n_EXZq&qO|V?ZUThCI6;2d>Apw!yVfJYvnSx0;B`Q=C6i2dP6f{0;h2C$T#JKe3I^;e&CVk~v|DQ_0W${yGqZq~(B9GkF!QI303)ii zFf0_44%usyI8I_yOXz`@|4@$QNC#N%V#boc8g#_w52HKj{^0qE6`{Ss(-6x@!GOW? zS&*a?uP(kmBxrG0E5b`{CG65cD*Um`GDf@}tbb60=~v2Fu5G=L;We7YTGa88T7X%m zLkjp$`7uu;I*{t9(P@4aucc&5*24$oGGrtj?1I2f`=i4$z^Gl=0`9@4DU<$e>P}O( z9IFsXNEXqAnWEs@;f0gU#@vZZe#hLmaZ0scPnVNVu<6yhhUE@HDc?0*Cd3uno|3(=eTZG^el!mye3 zQ>-&Tmsld$be$`f`rMnn+Et##vuFD}qVE1 pT1BZIv^4epvaxw|>Lw%$-5%@FZ#KQ=48Fjj{d-(?m)ZN#eg}pUd42!@ diff --git a/KSKInterface/src/assets/Button_Texture_Next_Down.png b/KSKInterface/src/assets/Button_Texture_Next_Down.png old mode 100755 new mode 100644 index 2a7a01192d87a71310960bbaec2e4c8c777c78c3..88708778ac4af401412b11fe567678f1239a13b1 GIT binary patch literal 3616 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 FV1h{ZY5M>G delta 501 zcmV2l^g+h2%{;nZ-#o{exqld# zbI&>V$GLaTz0*)hs2SiU@D}(6fST%=@V~Y?i2Ad4YkoDaW1OvWzm%h zjn!z9m7Jue+6v+h)&4TTN%eOGecdJLRTT5+GJD_cx1b$O_$=^`ME<>OKT88qr_{d@ z^l|3fyy!M4+ZNNF*P417*ze1IR}d$pJ2vJuo$j1igr0Kh=ShK-A>` r_^`_P+gI=kdJYI21M5}pvVQ{rc1jhI_ZqA>00000NkvXXu0mjfc)Z_e diff --git a/KSKInterface/src/assets/Button_Texture_Options.png b/KSKInterface/src/assets/Button_Texture_Options.png old mode 100755 new mode 100644 index 541acbdd9e69d855eed64caf5b75960d9b6b558f..db8d2b792dd0b55abdc4c9b285cf18336915af92 GIT binary patch delta 2438 zcmV;133>Ld8uKSMiBL{Q4GJ0x0000DNk~Le0001F0001F2nGNE0C3`!Q~&?~32;bR za{vGf6951U69E94oEWh-i3)!S9!W$&RCwC#oqKRxRUOAayW6H|o20Ek9iDc~U=St@ zML-cL6bhjQ%d-?^Kwy-Shf*C!2BhUtP)2cJK;@wnD8s`U0YQlZ7Od3rl9aInfY|fJ1tabwl6? zad3oG55|>#P**=O?a#b3Fdt|J2FrXW2lN2#z^iHQ%(j94(FsX8>VYeO6M;q`U*>xm zC2KZtF0ip`S4hfnE^tW&-`^GZ6>!QZtI6#l0Z|8>8Q{KoD&E|t9sx1|@7v80k}eb+ zAr3V`NWl@3zGH6?NOsC5?Bokm>wfb&F>*iCt2WP;5wjT#OF@|7XWVsY~Xm2La23&szG#O05<-jsv4Pxu^ ziz|SoW&Up&@LixgZG#AhuL|JlJcldmXT-#mH^-L+16buuKSWC zBm;a4_z^Ivg8P5gs|Z^K4C{(GDBvl|0vmLK{6R&}7xX%$!giJ^Dg8+ivQTG6(Aiv^ zO_N9m22`XqglJ{;b_@OGfq=68CKOq*?;Tj|48N>=~(r@cyZ#(e+8X{vT%!w)vLN-w) z0cl3q0=#b7ptZ-a0dHSO6nF#it#s;4&8XOD0$PE6V|a#oV3#x#aul#rgahy<@G$T! z;>YMh98G`2N=P0tbnXG{4zvJg0J9<_WFBHrG=a6p@F`$U1RY-o+=RGsH&nQRPDjl8 zixH=nH8vo@-yK12wlpr5q74adu--K9)q%VPcssyprc+Ns^MP*z?;Ahk?uZ*ARhxPS zi7?;Uu%q2NfL{atW3&O^q9W!M!{^KZ#{x6bM965poQ6!D#(R9MuC69u77lxh8)%YA=Vxp-oH!Ax*#uhJ$q(@aq_ktnVuER(s0v z!2W3<-&v0< zWBlN&fq#-5HX%WB*2tE*P5|!o(p|g=X-0ptU2`!G$jS&b=t}pmRmAJd`8;sCA42vq z+N3MNOKK)b5}i~QnQyUr8vPKmjd)YQ`hfRH9-W9aIW82uR%99i<+`aLI5|S}C@F~| z4TSuc@ab+=`^bM;mJe zbg;b%DubAa?f@RgBdBn!FrXaXHm!dwVx3(Ie9q_)uogI+fC=~^aXoOUQCnR|C5vB{ z(Q67LiLlPXZ9?q+RxaF&fM3K+Ml+JH-e^R|0>oJA3)XR2JxD0N)qZm=Qa~V1+-O7w zNIjI5VH&X5175){C}A2>MYJgjO9IBS2);dGVt zR=A(hYq-Q}I(Y(k(Xex80YAsiUtfyzb2xk!;_+eeN%HNS;U=51alLT z7g7K|LA*g~Uf6;ZU)z6%m}90>xdUr6l8O6f5-SA6g}kIDP%)dRUwPDm
Lql*Iw{mV=RM(ep!+@hWH<<3QgQHd$P?j0*B zaieG0O0d`N#dhqC69wR30q@&VEuE}3|3%Q}%{W3F93hU7_>l>CPu3A)k33R_qf%_f zIGD{5A{YXGLS+SF`j7yOo~jW65h;dI;$S56X@)AFc@IVrHK0e`JCP!nsYTSbthg`* z$wi#Oj%ffnKCXS$OUmD8GA1DoZVz#Agg8PReB#3a07yzK%w{qwH2?qr07*qoM6N<$ Ef?M829{>OV delta 690 zcmV;j0!{t%C#@PbiBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAlmGw#32;bR za{vG?BLDy{BLR4&KX$P;i3)!LSV=@dRCwCF*2}9;Q4|O8&(C$7bIEgLbWMmzNl9ej zStgV+k_e^bStdd;@G4S_h>?NBK>h)gl$4?*BBa}O^NPIhz3w)!yPZzw+~4`tFROO@ z?C;rot-aU&uC-Sqgy4V5NEnrMwz6h3Rw3X%PSjo4_v@!d2%!~&Bk+F=Q{(sxrr~{E zgCmCd-%;U_QH60*bM4TM%VafPVN(vvunk=~Yz+2bTn<}_m)KFJxXh(%a3!9kALnAf z4wEZ3_!-ym4!bZm;(Kwr*&W`*k~Wd@6=tAsxI5g3Pi-*PA5YlV><;haKoeyFgH7g~ z!S%YN8CQWnjYOImUA2D}_bTR&uS=Q)52Mn&+=#^aQE{4G1?&@Mp|>gyM5sV=|=R#cCtj_WqfOLXBSGaol$3R+|<8ZiUn0Zk8-aDD<4$g z6JkFvf5K)@Mn}y&TYJ*2c=T@kDVevhhOYS);nNc{(48VnM`C{fTXDXy@D1kT<1ik$ zTVnKhjOh*x6j?eD`-?Fw^3sK?m{?*giEE0+-o-o`a=M2|lb1nU!khxWG;ZWo_ zKHD+7M9(#RD1GruWS|1?!l@Q=X)R{0z_B(Y@7=K+X`0$@VR4(Dr`MR??0Gthukrgk z4&z`<+*Q&Yi>Y$Gx%y@hM~csr5P~GlifvhvW>1ndTbsigNt$g*(kv9(p(M?c+`L6e znmta^Y(r6R2%+VwEx~h4$$4NJ-nOG^t77l(!nnWXLbwG9IE3Z#`%zh}4JVENUF!cG Y05l7-ese)9RsaA107*qoM6N<$g6L&MumAu6 diff --git a/KSKInterface/src/assets/Button_Texture_Options_Down.png b/KSKInterface/src/assets/Button_Texture_Options_Down.png old mode 100755 new mode 100644 index 9ba2e0d404cbdc535ad16948e91bc619f043b4c0..37ca0795070d084e5c7625eb37097d7f5cbd7817 GIT binary patch delta 2310 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 delta 648 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 D5_&9~ literal 2894 zcmd5;cUV(d7JtY9VjwY`#f`xeOwkVHOiKA1*!o-fxcdh= z{p1FmboFs|lQ+gYVcjgc@KY1p&@68~Ku-6EP7zt2b&*FUzSn`zZ z7=!%%M@PzzF`<``NY%nlo(DB;S2}sl=rGtn*IvJ&v{;rjIG$ckZAxam`DfYuT*O$H zHw_BZEUq|701=EG901PHkBEf>n~(LbJ*AJ<3`fdWFj@Ny{k>R;O z$giJ&N;r64pewvm9Ph-{(w3#ARv7+e1N?o{c(E!@+t_?Ut0Cakw8rbw7oL=hNuVYiQUo?Prj%=K%_r1dYL z>}?FaMD1!>w-=OY!ZIQG{YPn$CfMMXRB1gJvE5}l!^hWEJ>TEAe#}SrDFM>xiJg(I$HAPAGsYwyXORW($pg*Cj_=%UP zrfQ}f`reQ$GTUI*9Ys&Qj$0DHIKF#kMm<0w<#*#I`LZZUXOoy+N3<`rkWZD)O*>d8 zwoHmsDSHry?Ym@6A?F9@j%eSUJUgfWq9kck(RcO7*ARAj7!izg;`+OXZM<)*A`Z<( zCWY(+ZP`+udZXl2{;P>y6jyp`cf9H&W2d}e70Zx#wF=459~8k@^LNTw`6kUBb+3XZ z_Y)bT!<|Bua8Fb1mxO*Zm84jB-Pm{as8x+9#@n*fS6pOaSdhQgC}LwXOqS0jB8)En z;&?&a;xTU#OeRE6mE#6UtrS{>EQIQK@o)f8`96X!4salX`H0QsPmHUGS-!CdhGl|v zt;_u88_|9v-?m8oi=^b5E*jpL*JVxFvQ)mwq67W|7p;;$Pw1~D(x&z88GU@;I#1{hlQhy&D%e7=8 z0D5XgK6K-sd7Vw{k%2tlQuuxQvWKa{X4=lsPA4UhyIi@&?W-;3Ka&3wHKFPP9|?eS zP8@B7xlZy>DF|34uq8zQ8v`A$ebE6tE>%ZbQ18oh8A|ON|AA`YyF2Gh z{$*2Q+iOXO1WEUWB@G6IhU+dDl|N$m+`+6!`b2ZO%wO4=E69>56R1{B+fe$i%%6Je z%88>*VdqX5dhJJtYx<|zz|0EV9R$>lJt27i7L3ge9xqVsh-6qkFtfu~p#>UFG^ooz zGSBO!+(%6fAla|(*RPZFS8<$dCSm_yX6ZE_6Vv+b}U_}9( z^{g*B5HB!(V5nSLxTa?U@Ji{(Cy;tj)lucWo+x{M=yW3ILf6IicIDc7KJ+K9 zwd23_hgu5#|7zb_vbg2LHjK|pR;JjRm?I#xV8Qxcu(^$M7Y2+C(E1N`9V7n$Pk?)^ diff --git a/KSKInterface/src/assets/Button_Texture_Photos.png b/KSKInterface/src/assets/Button_Texture_Photos.png old mode 100755 new mode 100644 index 24aa6307b0f56c36e137aea6abe02aa8c2ad85dd..e7b4f9d6292081521e59f7ea1e70de4700de751d GIT binary patch delta 706 zcmeB>*dt}u8Q|y6%O%Cdz`(%k>ERLtq*FkcgAGU)JenE;q&N#aB8wRqxP?KOkzv*x ziH&BRT=h)po-U3d6}R5pHS`w_WH|8AKEhjD>L-KGu|^9+0dcli8QD8BPq;U1-uO{+ zj;ut2l8d^}oZimGlljzU2?!rf>bl@$*!UFK_4Q0q`AI~x`GZ^hl0c5LsMzc)BKAAiMmf!VCS@$c)nlMjAm)CeR&){QwNvj#erEc~m&5p1>W=60M)8gLo0c6~%6B&Alg9qYFJcQ?W8X-B zu;cmnf$13I2k!|dztyu^3*W17y}x34#PcqT;1L!>M;60+Aci8KkC2fJ z6O_B=ki!0--?hr57w@^(x549=U4Pw7Nv?F^lQ+D&is6{lhdEys?@3i1hBwKP-mb7QPEAq?UN^*>2v_5dRr}^*Ag}P!X^O?@)W!mvWjE7sYk*jgXYrDsa zJ)SZPesR8G+l7A>mxy*CX>whpXYhs^X5cx94k`g z?n|XQv4J{D_{}cHv5%YHkImPY&p@nT2hjkGoF#!@90per+PFZgPk4VD%b3d)X^)<< ziKiUScCm^^KR`V-tfP{#rV-9@iYnH^e`Va`E)Cd04JSWElu?J+P6H-&i?#&p(O3QV0RR&dIcsFP+id^<002ovPDHLkV1n>wrLzD4 diff --git a/KSKInterface/src/assets/Button_Texture_Photos_Down.png b/KSKInterface/src/assets/Button_Texture_Photos_Down.png old mode 100755 new mode 100644 index cddefb8a304360f8c8bb7f815db3937ee66f1f61..27112227a8e8f93b5d067fa7dbe661c0fe10e16c GIT binary patch delta 632 zcmew-{#nwjGr-TCmrII^fq{Y7)59eQNT+}>2OE$qcr-NxNO2Z;L>4nJa0`PlBg3pY z5*y7rx$2qZJY5_^DsH{GyIYSXkfGsW{TgqNmI_AJ&Zy^_nfMe(hZK&8qZWjq-V$OF1GyqzmqA@;{Lfamb+&fd(K)GQ7Ki(!D8qLM2|AI z96s;YaP`CP^RxO+vlOtrVSKyDF|E-uezgy?r=(wGZvBCyo@Heorx}vsuJ{T#uDKt1 zEq-f5@Pl>z`*ow=9|)Tf8YcFH)q+8YdkKzb$yIQFYT^$7K!S4=yF@@TIU> zsO-*6os^T^^@RCwC#ma$3$K@f(&jR^-4f*}@S`U9;*d=g(G zg(5aqRyG>QBZRz#&tNB7C4yilNtYsp7D>it4vy&NF2iOke^>_QZs)syZ<$>uBE(cx z;{|XQpx!%hzxE9gK|~%UjGncgcVrH~G=2aRgR>@Z1kB4Wsngg6`UZbs3JiePvcOC= zjfcR&2EZlI0V=?0F8>V-*8wwK12=&-QCbGL)Hv0#sS=hwX@b`0!m?hUvCZUZdsNNfLcIP{$S(K?O91}1^(@0LCBpMbpp fz_D-BMAOdz*m{_Ly>J`q00000NkvXXu0mjfgEE>9 diff --git a/KSKInterface/src/assets/Button_Texture_Play.png b/KSKInterface/src/assets/Button_Texture_Play.png old mode 100755 new mode 100644 index eb64f7fb8f5fa81a92f3f1177ae8e022fc0de0ce..45eede4b0e6f4c184a83d7a565c10b9528a96771 GIT binary patch literal 3750 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 Q0000007*qoM6N<$g6XvdRR910 literal 3102 zcmbVO2~<;88h(icBS9t{H32M|ic_o_L{=4Kcj1)AJqQ8Cm;fVT5hMsIgtb^jaI`wL zD8&shECyo$(<(4=0|lxAAuI+LprVY1L+eJJ|GpO-@SK^RGw0lp%lq&5{onuHd;gdH zYdNc?8d(@&7&g^+wa|YKO+9Y%#AwcZ+l?W`wdcvgf3fJVR3<;XG-59c3$=FVH{J%Qn?jY1L@o4lBe(RpZih)Bf1WEA~SF)$cJ`2Si#5d1HW|F+^&5d?=i_L>EW z7xEzZacj!p<%hw?r5~y`2V?0Yp*2A#$cvs{REBoPzt7nEu0*LBIx%x5OYzd7s5@Ra zJNe<=`7LFpWIpYKC?$T`^0x&Qajn7kA2IB0u^!g-ukyolPxZ$4h}#RK?VZkC4^eMZ zsWN#_U%P9-$*8~NFxA{Bt4m)xW)-AYr0|BK7F4aAx}>90%K2x-wf5lI{zYM!HBa1B z-L-sc_tD{@9S1FADuu`WoZt7i_ScumCUF$czg?HGFR{?Qa|#ne)_z-FHjC>iDu!%E zPzbX+$8Y^;<^Bqu?o#zR<0T!s`H}aTUoYt;^BbiOJ(UGTh6#NY6gp4kG?@EHY{ydk zH0KO^w8qWI=Av&8YsEdqhsR0&t~V+9qMaAw5o^|Go$s`P&6Bg)8EgY4otG89`juu{ zkcY_p^l0knPieGlHq{2qNlNQ9c_}c-W*awjwodVnA;~Cp05@QQ0sHG9BXx3>qoIfB z^G02whsbj*K498avKZsj0%m_3TrE+18RX03q8@RNHR#^8$(fC9b4%iH8X+>v=eO*RN{%T<%d zfq4bJfp@=wfFxIgM5xeN^MxnZVDej%4 zz;+&Mwo+h7BO><5)#8lkpvox70vUy{08C9XsA6-6KUZMuaO6i!vlgn%Nbj^jVuf#9 z`7~B_HoJCkO4N2^pyYN>cW^RPF<22>_RgisDA^hw1;nrhik0VYNYrG(-766Sw6JOP z7>mx6{FvlYvlw3=Y5-5$Qnes6apdG}w>`*&7c*v4yhNl&7FMvgl_p4M%#{@)l3_*i zkQnhu?z2IG0_=6?KAh)hhg0!^N}>j$bg=-j_Nb|ls?-~iz`duK$q$8)mHXY3bTWgCJ0B~`im z9>B$;!o(T}JZO3AhcLQwB?I4)eCF(7*znVZkq03I9i@&b&w$jovcw{^RZeoZN9k}D z0mYI-%?p0#?L~2Frs7oiq8u^;!Nmy&lD03rpyVfNEv(P*#x)^`qy-L5>B%X;khdY> z9#KlB0&P4FD};-=St`}Jo`GW13N4vZ9k_s=W-wF?ZCy?an7K6G`h`z8ocy5h!ToI< z(D@O&TQElsLOI>ON?UXSn3^_Z;}}863qKH-nt$a;+XYu>9cCKTUq~OrWkY924niVo zmN=-i0q!-*ifWQfuJS^c1&)O6K#Rs#KgV6jbwHsf4^GPQ<{4XvH#EWt@Ug8a6G(1l zL6LfI3ZcDkem58F@M!uD8Pd^m=)k5#y*pm0eQUYMM5N2mGSKC3`gsNe`t0GA`Vz!Z zs59Bf%NE1-6Y5xsT1^eX=!6;%(#w)VID$E*aT;pjvADB%KXifnXYNVT3VmBiY-efm*3GgNh2S<^AubcLuuh?fC z&G+avSknRp6Pk#E{Sm3a+rM|>f9X6Xi$x{@J`i$0pPNM5UWb?4aEOP`lF*R@wf=+0kfa-q*Wzu4GXV&8kA ztL*kPFs38%Qta=pBTG-tco&|^?su~LfqQM!h2-CU8!+cw8d1EeUrn;+y;ep`j|_CA zydRB^+}f>)n_|7>#g8eD>&sGowpXL`SuNjzOC$_w(d6W80 REc~{|d{=OM%DqC;{tex&#LfT! diff --git a/KSKInterface/src/assets/Button_Texture_Prev.png b/KSKInterface/src/assets/Button_Texture_Prev.png old mode 100755 new mode 100644 index 9fbe8d81e9c75d3cfb8e8f71f8166c7ab2a777a1..c82605778f6cbc4166cb34b8cbbe8217ee449489 GIT binary patch literal 4157 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 WKiI}0#Pa|E002ovPDHLkU;%>3aKcLf diff --git a/KSKInterface/src/assets/Button_Texture_PrevScreen_Down.png b/KSKInterface/src/assets/Button_Texture_PrevScreen_Down.png index 5e69ae4cf1957505c050b0c6ae04dbe05efeccb2..b03e589c19b878b538af8a51544acf719deb1365 100755 GIT binary patch delta 963 zcmV;!13dhU7|o{j zhl|9PfGh!70`flr()Ay`XBDrTCfeCz%vlw3tKrX@U z*n#_TBTnI3^kTSOKsx@#x*iPTDLjJfGIkkm3c#!C?jxPpgzdNwt1IKDFowxG1GzjW zu^roRO^Z4E@h*O>Gmt?%gL^Pg8Jor^-oooRSw|p!SdT|TrH517OaV2H~qBGCi1!P&6aVUNYBaQU6UdV&HaKk(=n9bEu zlge@opXPq30CG4F1{PU`TLhZEt`hebqn)cd`=0#Xja%ng)C{#6HGiSjPuN!lvb*s9 zM6fk2LURMZ;|qKlXYbCub~<}k1o>MWr~-Mvq!T@OAmwV+X0rHY9LfB4hu?xyC(2@6 z-Sq=WJEl?rt}bazp*I^-`MnWMsbyd53_i)u7rIjRndP`MseRGv8B1kYyIiY@&*BrE zIfedEuCRVQo3WjBIDeV>fHZM1>3K6gvp)9?tjI~N$mzWjx=q#zNSS8)N)c;0uCJ_F ziRY3w44dmNE{HWQ;M3cs<~oQw@G#bea%DS&SCbWg6}_ol%{~#I>B`j^FlAed=R>{Y z5v$q(DePeMV>assLboEC^`})di#H>hwFGjyaxz1bVn6pe?O?Dn>bXf~q$zQuak* lOMe(x0q*VX_002ovPDHLkV1jcL$YuZl delta 378 zcmV-=0fqk19E=ztiBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAl(8Y63V#7N zNklcyDC4J;&$iwZf0lZHjzY;Dp9azKv!$PDX27AZaBe!mQ0b1AlvxR11M+0b2(45Cirb(5CS*G>uunT?6Y&T8;&i zMB>cS7SMF+=>=E?Zh*PKejfwRz&CIUI519cz zF#3v65o`=}-IM}!fQADc0(GDtA*~}|kTz+KOqE_ss>H0)w8gf8-b-4{6HkbwV*|a5 z)sI=57TS|k%@c^E69c^sO|OrW9psmJ|A04vw(~q6(jUn`?xpKM4LAdOMF3~_QZIcD Y0A`h85cr`YZ2$lO07*qoM6N<$f_ojD)&Kwi diff --git a/KSKInterface/src/assets/Button_Texture_Prev_Down.png b/KSKInterface/src/assets/Button_Texture_Prev_Down.png old mode 100755 new mode 100644 index 8539f475a1a36e4715c8fd0a13502350f22ecea0..f7a03720d5979e8f113ab5f45a352db3bf0180c1 GIT binary patch literal 3605 zcmZ9OWmJ?4*M^^wZlsZLkj|lzj-gYSLAqm5Bt>Z)K$=5J4j_VbsKmesC^>XW40jIRF4udb*lsf9U#eNQwVU-}Nl`ACUR# zT0I8<3i^Ko0`d!30D#=&2^9M1k%v!!&vOqSU$7n&3ikE)aewm64FG}`3tc?}vTVOQpx~ru{$Tm8Ef#?Y7V#Q+W+a7#?}8NE=d7KN1TIF;0OoJ!WABS*JTr`D$X_ z!FjBbkA+ zzd>|6bXr_L`yHWlg+KfLWt}Hd(k@bm@ceuC$f;o&`*;S~Yv-jOsXA9J6t`C#-yZbp zIb$q^7&c7l{8BXYlTRee9wcaF2=?(#-MX%?id+(?tjYi%pQ?aD(?u)oTnK&{@Y7lb zbgtt8;JD4FYg&Mm0O=9EHXe9;qrqwv4J54=eGkvMW zy3Jdum3?V0oJfnh1ll9X2-OEj>7BS1<3Y}emfR_%%y}{ATwS_^bV)qm!FUGK2L|af zx)NrIaIm>9$FZ{i9r-w0?a%3o1At`IRcyPC#GA+lQ{`#OW+WHme(}y7780r6XX0Ym9*s{AMaVK;hCe;1rL4i;`}nw) zpe^CdW&BehAzh?aCz&i^pa$59Q(f26(9(Ebw-U_GBYk&~Opc7;wP`p1gUm{UCce*i zfA_LDOG?C9>WXmB(xuWvXhY+ny>dKs2~bIXOxhj2Pw(MVbW_?>-e%mpB2_49-Fw`b zgNv@74J7h!M8LuWF`I>(J)2USY@1xiHspoQYJTs}Ve0~BLr?Wtw`jMdw}{)$j1=-4_4KWgK zww~45IoXyqx;3UXI{O{6^#>J&izosw){GX)G?yMZP)^Axq`fc$w*n@ ztX{0zvyAOsn`Yow?~23RqA&KyB14~wmEex;3-)lxHT>G^qT)=4(vrB5l7|>aImV*Y zC*$X%!~yBY{WOKz^{7G1oU)v9)?TM$CY4HOwExnkNq&O0-Qd~q!g^s#`H1qa~xWc`_(vi8;w_)HZ4kwc6rn9b_$nu0*%G={0Oxms=g8 z+r49~<*mvr&8_Vkwd)G&cxT({+A8i=V2m@3Yl>zOJs*Ff2hmk6tRJ`LiE;I4FLbyQ z!kHP-(pTSenAwpT{yF@wYh@CuxCQDO4r`8x=S}_$3Xc_5^2Z7eRm1yEvv(l~%W>NA zd8rLF{jgx~lR_Bkn+}2*fq5Q%5}%Y{5H&28qauc4!!8eWZ0ZM``Pr?7Oq~^?8d2Q` zmADUwvWHI&1G;XywG4Dwtbv6nhvkos+NbgjN`ApO@(o5J;n>H-wMwmtXd$l|lbQpI zocf3kz7QkNNc*m#sIF#^=RSow`BqH${?gomorxvHYPH$vBDRoCg)t$qo&m?4!}w}m zU@2&eEzW1?Yu?hErmC7=jO)1jl>6?F711Ia>g?*AA342E7&%df}S zdSVVkI+{b>@w;qAa%0P<9l<}DZf9qTrn&CSyM(bB7@oq@$ClS?{y;+W|1oAk3(8Yod}Ug~fxRqTGzLlt@X zbyffC-Kz@dxa&Ay5%W#S&2T+46C~n%W`AyMGI#P_&T&rWSFf%Go>)(<#rHFu|=PH#$jsT`Yrp})rW0G)cx@)uY~O#c(t)yYz1{e^leh& zwFDa+OX)EF%yE&GLpJRiFzz3$FOnae+5a%5?c##S`c7V7P57=+v;B1FOtTlqrdj*U zT>j)b*M8Y!acdx$nx=VLc=v>BUx2!47V&m>S37{v1pTn&0LSTnmwL^y6u}ZgBpKaf zIpKRjIORIJBRufn7bw9I+I2w1ZM1@PW-U^a{CetK5OyuL0b?>cw>kh}#3_PA!7sM_ z!r0S7j+qa8NI+Hm6`z=oh~5_!boYd>!mQgkkNJPCl_IBOjvXB+!fPxjO{gfY`9W1R z6GxMFJLI}r0yL*p6R8B7&ikR|`m9_-_U-r6#2nVPW$L9SM(1UR@*8}zLWh#Q^*h|v zRr(R0wg^3Z)1K*%_lH9pQ{=M}FO^DA5}jlfEy1Hmf}Bmm^pd(u{`7$^UGMc6H4CZ+Ukz-h#n{lD`9i Y-^zoT8Z?ha|J)s*r)8{Jui+T=AA>!zLI3~& literal 3151 zcmc&%eK?bQAHS(ZTi8xnQZy;OXsi;7VnivVw^3u+*g@U%9!84cm{R0KCs9_1uJdT# z+SWvfd5OvnM>bn{((B2~sXUaD=f0bwo_4P1dj5H?>w90jKlk_h`@a3Yzt8Vliks_J z4Wup-000fAZCiE&fQk%$)Mr6o5~2xa(9i7PZTrIjz{C)KRHE{2BA|~8!W}%q_XPbI z9!U+Q14Q2-8Xf1vp!(5w)2Y79kUMm106@u|wh;G5b@e|SXLdOPHPqh`!A6AhK%{E> z?0$_@3*17Z$9SG9(vP5g%1h&h&%o=^1Z z)CSU9Z9x@<0HugY5n%y^pveFv$}LF$m$kh(N2+sM>$6g1-^y{%UzUil-qkhtYlUxbRXk$lTX|9|)4rLFR}0VT7T(v5t~|ougbJtsDQ%}C2MB#WU|V$x z|AiySY`M_!Mn~}0da!Wdd|rsP6yJ~2H~%OR`)t}P`?<&#luDhVuVnKVNzRclkpXNI z)09GK;ZKX-oFilv=$FzvJ8E3w&&000X%VqtVk}R`KIZpYpT;Yu=OR>SEot4qJ~HTf zV;Iw&)-eLQ^}GztAZ7JoFV($oj=aI^UA`xH-o>4RmNvD|HoFFukmlLRBK(bu?XQ8% zJ4?C#$$FBkmxp51F&svVPlsGOh7)Y%UG|Dt%3~Sx@`G0_D9vx@#EyhLvGU~nD?UyC zRW76ash$QSvpa5Q|D*dA#spsLVqYTo?qw^zL9e@tlj&f(c{N3QOfJf5*pTXZahJ}) z=rXR!S{#piYgFpO=34xt@FG~a<2iF&@Wks0(vQvE$4K*dh~#$aKoI&c@EREN;@VZtDWiyLF-x+NKvNB+ajvQZ^T=7wSHp;58CuXzS;8;Q?K7BoJM>{}6J=Pcy?~RkFLK&dc z@i;*ol;yX8ji07Dnzj&gw(gX=q|r&Ikl^Z4Uns<=kOVdNIbKLS8=r2$^Vy>U`(krf z0vv=0i#`D7rc#Pf3X%dZpcG5z7pRD^P4l~q;nd)uINr3}CV?WIuYj1bj)S-io%bI( zbD-8GoMyC|rS7CWsE=0nq3M>CO~$qbiBpMuAE3$T19{p-r#v+~9Zh6QQ+q0%t?Kw^ zO3RXJbCOC48gUZ4DzQnOPBv2c`Y#&T84Tj9f(==rLJTp?wbld0C@zOPmcD^Uf~vE7 zDn9LkP*lnit4^9+(;_>@?cB=C^3GVvZ#RcI3+f%XIzHhxlY0ze@O zb(|zy6=u`FBUFX@f3o<7v%lj*nT1l`|KdZbh4PyL3)OjZsB0e75#~L_d^FkLNOklks4)-e5U9Z&BbDan3IOE#_@; zOVJHE8!#p}fw|rO76qzka+BXOVVs23t4c$$P|ys17pR+j(XjEA%Y^6PQENK9pn)F% z-J-9vQB!*8&`tqplqZ2I3pEV{%^u_i0MkyZ=GM{XmI_O)j*$l`-gJ~6L8I?_092o% zP-qLLs-6aHgCX)$Xe^Bs2iE97VhB~YER5kRB7yaSM(DKtw8mVUwjQvrg)ue~+L$7hu-7=M%$ zkZJVE55${rnSbYWG8`Pi?NG4aC$c-N5BCu+7NSaMDxi|S115`A^aKX+tc3Scvp9*q z)eY+_;q97;(K~}%!1n=kB-(SL8%=(FU^Gg$xc?aBt$sN}cDk1(iKuB47(%H&KKO9l zKmaGf#77J7jb^U1M|7%LZwz$nN7gppSc#YW6^d7aB(KA_4+ysd_k1lJ4pNqhb|Rsr36?^a#RwH|yf zV6-8-sn*7F^AEZWcL#4bXFcm6x)-0b#&l8G#F*8?39CJ%uRHehH~q1(Uu^DmRaTX z|7D|1*)u)&AKIHoea~X#qx-6dN*s3N;Eq^7igf;Y_|69%*PIirugtm4Nm)S$>qhaL zKHd`3=q-oc)vudvx8f}_w9@J;2>k(Rdb0RT!Nlq&hrMX>NW{B){_843I!dJaiLw$>lEJO}!u-fZg#!k(

I0ay|2@)`<(lK{Uoq3^}jZaiy@_^<&tq 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 Vt>Qm9#7F=D002ovPDHLkV1nuzdoBO~ delta 1280 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 LMNUMnLIPldDP1-i diff --git a/KSKInterface/src/assets/Button_Texture_Redo.png b/KSKInterface/src/assets/Button_Texture_Redo.png index cf376a37cea3ca447ceb1825037372ef4392a658..51c5c872c2f0f7e26b15ca622ce608699c975c68 100644 GIT binary patch literal 4589 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 diff --git a/KSKInterface/src/assets/Button_Texture_Redo_Down.png b/KSKInterface/src/assets/Button_Texture_Redo_Down.png index e6f534ec86cc1ecc7711c6da7ed1adb50279f536..6efef84bd49400e9a590efe71eb78964c78cc1e2 100644 GIT binary patch literal 4573 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 Hu0mjf3Iyo= diff --git a/KSKInterface/src/assets/Button_Texture_Remove_Down.png b/KSKInterface/src/assets/Button_Texture_Remove_Down.png old mode 100755 new mode 100644 index e0fb89eb0b3f72e72fc2321070d24d51f8d6e434..22611b61422a5d8a928f4d0a0c66fb0e3b7da6f4 GIT binary patch delta 1554 zcmV+t2JQLY7=|G>iBL{Q4GJ0x0000DNk~Le0001F0001F2nGNE0C3`!Q~&?~32;bR za{vGf6951U69E94oEWh-i3)!Ou}MThRCwC#ooi?uRTRg6**sbji3KZE(u777u_#m; zsBMf*ec~HLM6AzBRRqD;2L-`z3iYFcpwie#+O(!1wBieEi}=8*QE8=8rA?bCXl+dM z+Qwv$AMRb;Y?HV%JC8e)^M|1{yK{GDesj;g=ghfhDnta8JId%KP#}LQ1(F<9rRZGh zfi=KNU?FfC_!jsA7*Zh7ssVTwxE5FhR026*5ZD8}2=pi6L@H7+%W436fXnCjPA~8X zuwQ}14>Hyn34%`RqRUqDbMh~zmgtq&Edt8})WfIae!h(^9 z-Q~*cE0X{i?}P}$xhb*BK$`5Bu`0sfi+%Q$akyt}4R`=AbxOP$Sf_*fberB?hMy6H zjsXt@1a>%Pre-_NNT$SbnyhAE3(!V#^b2qY@I%^qNIkGAVK4wL0A2vj zPFoLYk7JG>psoQvNlOo@1a1zXogeX@Niq03; zLq3)fYrdWYPR{W8q>U=v3jCbb&`Dm^nCA~SU;=qlz#-r>%!8uY4zL9i2W$55TYbP? zz*n$*9 zDg~lIR0@AYfv6OS0#PXtl>$*9Dg~lIR0>3as1%3-Nv0|y+DCzus9{W^n-`4}eoE22 z1#$>D>T#cAm~ayqYbOhVv;o%xcM{?nI@K97!&=}u;2WT?5J)@bg(w&5 zb&6aqwx>)3(uoPajaaA36_b?%&I493y;#76y{k@8+S0rn=2b{5fW<|h9mOowj(Uk- zmA!x7J20i6Ktz(T)r-hSA~GlW3-vkhlgDj-hw0!PHz_Vq;IQ z;V!@s*2IjLIXkMhCNPJIvWfyxsbi=>R0>3ar~*}zVp)Gn zfgA0#_XzMl{%XkA09OGk?QCr?@STQEylu-xq*p{v+i=IEeWdF(bW$xMn?z(nL~^#B zJ`vgA;v?K8z-5@V77Gcf*t`!-6@)wrlN@rG$GE>!dXht(4Y{0C^x1JtapmfW&#eZN zSn@LFv2?cZMAiehk(~EJWeDz#pp8;?i%Ub+bbe3>**`PIJz05w$8{M{BhVE_OC07*qoM6N<$ Eg5v(aLI3~& delta 482 zcmV<80UiE^A>J4^iBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAlmGw#32;bR za{vG?BLDy{BLR4&KX$P;i3)!KiAh93RCwC#mN82lK^TUgy_}~p64Atfot&hw^B3f| z2o|f(1hKFN@dsM`5F|{>|;eO+0 Y01TleO86*Ej{pDw07*qoM6N<$f(!@Rq5uE@ diff --git a/KSKInterface/src/assets/Button_Texture_Save.png b/KSKInterface/src/assets/Button_Texture_Save.png index 0079af11a5adc28ce03e235a194eff74c4dfd676..5f276379bdbbfe760fbbcadcc23b0a0b16a67007 100644 GIT binary patch literal 4448 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 literal 1070 zcmV+}1kwA6P)jV#HqmP09=8`6<}8ocYvtC>cFA`s{?XM&J!C;uy;DpO1wA2_z#k9zE8V*w>se@ z0RR910001xV`7|SyWOtrpA1Ek8a>p*kwl~Ns5HW8lun1Q>Wp;fn4YO`MO`D@)xVYS9IYO4ya)ZRZ|T1lLGubNr!o=$~h;tTcNNeD$rF9#$h=16N|? zhaA4Uc7jg^E&}Etr9JNAnC+xx&9ShD7Pa!)J0e}<_E6oc9)Nz?O{;Z-g%1&FYG(D% zg6vn#fG@>0(m5}gyxdb8qt(iL!B?kEQE3{Clr(l5w-LUl zdjj&)81vBO0NjQrZLdUJyx(f0-N+|9*zXz!VrBWQDKd9AaE%TX(T;g!EMdzJZFRC_ zEa66ielm<4D0M~_$TAEgH^?#!BSAmwz8N`VEa4HEDH`8g!>)EWhI!wN)I=rVYVUgv z$2YOM_A1f!Ytf(9wBtlSm5|R?&^+m;X|6G)<`N@I#fE}3wHjmCZO-xox~h>)zahX| zS&FIq4T6!hm_k2OD=+gLR$a!-Pi>`{pgAR%#^l$w*%2=|O!Y oBKt*-kpKVy0000Gi$4Mk027Yy^YZp%YybcN07*qoM6N<$g7drcR{#J2 diff --git a/KSKInterface/src/assets/Button_Texture_Share_Android.png b/KSKInterface/src/assets/Button_Texture_Share_Android.png index 476ddb7f1df587af6390d70948ef163fd5caf30d..d45849ea1793329aaf760050938887e28f3a5f98 100644 GIT binary patch literal 4042 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 literal 846 zcmV-U1F`&xP)&2oNH(xHus3ieL;?gfwRAGclP=!}@F6c&z#r6+Jl;tJ00000 z00000000000KkR~E_j+yXy8`m#lZx!y0hn9%Fv2LzpO&qgpmoR~2c6v85Ua^jphC<#oqw)o<9&%Xu z?}PDcwYQpx^byjUJwn>!(TUk2Bp~EOE(nQ`Q+Y>7goFv%YUNOR+^Hk&GRQ(c`k)>n zo^iQ8o&vH1Vn8nA;~EzBhU;}W1PZ7rHd|Oq-I_X3z2BOQc1IsDHTWV092BU)G^X$U|F zwCEBclQ>Ot1T~-(wy~0djpamO)FUwp(H*|p3By;>=%a~oNF!ogPJa;H0p&xNTun`K z7*Jj~xqRUx11Tn0g>Z-`IYBvAmspa;LDz%?)hJnV;pq7yc&22@h07ooDJa*oeBqLX z3zHU3Xvv~sv<(+jgL0{0LM02=e6B!HkBx8@7*KvJq&0jl0wED{NkR%j0zyvYO_?XDiYdzeciHfMZLB#cqgtlvQ!#w~1000000000000026cK!-5 Y0H>o<1#s;|_y7O^07*qoM6N<$f*i(br2qf` diff --git a/KSKInterface/src/assets/Button_Texture_Share_Android_Down.png b/KSKInterface/src/assets/Button_Texture_Share_Android_Down.png index e9128e11df42d36549d8161464b47c2ebb97a782..634b22f5cc6a6978192bbde793e003868315532e 100644 GIT binary patch literal 4174 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 Y0IN7q^(hDsRsaA107*qoM6N<$f@c56lmGw# literal 893 zcmV-@1A_dCP)cn6605aP-kZ_n4?O!K&`K+@+W`Oo00000 z000000002Qp&$h7n5OAq{#346I@7L2QM?hI^yQsQYo_lROsh?+h*)|8_onreKUQc- z1k>q-Yq0+Sdm_1Qi8n@MK2G9slBMS{t1q#1y-1px=<13*Pw`+htJoW3a+dtPzfd;I zaZA@nGA`!WiH$);5?o0%n+*)F6dZHai z;K8(Z(&I$bWd-h)1%6f!5P3O)Rpd$W?>J&$y}&X+;J^}AS^}Rv*B8&O=azxBI#E|V zexk%DPl4^%^+G4J2^47W{e%gCu2H#$djqp^W_k0H)1MX2f`Qw*sHSQ^Z zK&4!8AfMZIDlxi&Pd3$Tg>t~{LaKcS*#O>F;4h}Vo7NRY(fJBAfBu-})2m)gdo}mE z(gnf>9sROIDpkt&GuuP&9ji0U$VN#bsYFDHrGh|Gi5VoT=rnfX+S4*FXp1XSBWI&G zDu~p8{r8!OgiJ(InXMqQQ~13MbQDBt^p=wJg9!of5Xlr>Mlv5VX^v2Nkrm5W`N)(! zzm0|E2g{_?BO{qHimz7hgW~h1ML;@^e!b4oup>G@|+uX5_Hx z-}ck|}ja;^+<^h7HT?k(iFm(7h}* zkJEH}XS1LRpw=3l7HC;5^|1Rt!G06gxn!TCWB>pF0000000000001BhJ_Hy5v7rSA TtWm|F00000NkvXXu0mjf*<_V% diff --git a/KSKInterface/src/assets/Button_Texture_Share_Facebook.png b/KSKInterface/src/assets/Button_Texture_Share_Facebook.png index bb46b8a91d5160b3022c69f04c29815c3dcd5ec4..cf5d5f6b22f9dd3fd16f384743e3006524a079f6 100644 GIT binary patch literal 4435 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 Tdm6#lzZRgQX`oRFe){@9<*G*a literal 910 zcmeAS@N?(olHy`uVBq!ia0vp^g+N@y!3HE#UfIDSr z1<%~X^wgl##FWaylc_cg49o_eE{-7;x8BUzpDz?Bb0EHRv2RSjXZxj_mkzGA*v>Qe z&&HV&vE8Y;7MHdzStB+1n}5clb4SlI-dgu+fpCwhWmzqMzng!T%=fDA`;I@KT*K`9 zU`L&O&Hneca_vAzO%N(CdGo^J`p3y0wm$d%UN{^hQ8``ZQs)ky+9QuTj#x^%Z|3^q zIqh=c5Bo;ZNh(TOmsRFXQV=Y(65A#sSP_2QT;KukEIZKzN zzWdFqW;W?&zL`;NtxD92Lyr6Vk9@hEd2`W`yl4OUr_Pw5;?1nGOKGFMgOY;agbo*E zYKHxhJg)xr)915)_BF45p7=al&a=$}L7DrGK}mn=Vq7+s5~-Zr#tsGU2jwi>Ll< zUA86o7>X-V-HeAf$?K1wm&?cGNk{l91&^LAom%0P=W;=^{G4ZU(&RrK3oLV!iWe?+ z>zlLe@AC`cGd?Xa+gUW}amGa7=%g9!dHv}Q503bJiImuQtut*>v3`w`@%1-q23s#2 z{i?VuJn9O?d1(6JKFiLT{o(2{@m%y=a9trL-hcI4ZrNN+$YY)zzoLV>FVdQ I&MBb@06!_6$p8QV diff --git a/KSKInterface/src/assets/Button_Texture_Share_Facebook_Down.png b/KSKInterface/src/assets/Button_Texture_Share_Facebook_Down.png index 932e7fb7cfa242716e8dff38037fd681ff70dbfb..3cbe4c1b55067e82dd656bfccc735f8df6dd363e 100644 GIT binary patch literal 3513 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 literal 635 zcmeAS@N?(olHy`uVBq!ia0vp^MIg+<1|<9Mw$=hE$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@OtPLXjv*Dd-rRZUd)q;xAyL}U!R-WFYD)>z3zl5-gqA#^ z84ZGy{4V4KlrtS-dH4L3(Arb{7v`Rw`*+VJ%}4BkZ`|h#tNYDzo223iL0aps=~YD6 z-p_xWCjQ!a&FYBTg?pD3uelswU%s*KZ)3*oe1+x5Zyz~3Jz~E5o^6al>vYz<4?4w#Uv^a4r&zGD=*Vp$0pBN1%PzVsvp3J1 zzR5P*ZcChgX7Vjj|0l_w&wE$4UpqZjDei2`jo$1}*M5oJ4N?DpJmUM|T%HK?=WJ_5 zjlOr!c{usMe`9%$$?Jt*C;WVTWN!G{ujS!~RGNI=-+Oudw`|nrSmoeTuEA}JNpk`d=Ow)ex6n96gSwZ?THa^n7}c)0voucXQW%%zn>~k{*j{Bj z+_T(rEq;0xyMm)uxTW4)mYofmESy1-){QZ4{tCV-Cz`C9O(rUETeX`^TqgKr(L8y_ zef9Spxl$Zui|+=m-LF{ScZYL#Pygd7KmJ$7{ashcV^nvs^vBn}e!jIp7bvg>DX;?F z#07NL7H$y5r2=wYBMZ=VAO`}agA^PQ;xLB?P5m0(z{qgx_OzJ(@E$#2YGUwo^>bP0 Hl+XkK$nX>s diff --git a/KSKInterface/src/assets/Button_Texture_Share_IOS.png b/KSKInterface/src/assets/Button_Texture_Share_IOS.png index 9146e7518ea662cf024a9ec1ae888dcc93cb7e6b..1ea2ddb220f016f9550fd6b354aedc87ed913ecf 100644 GIT binary patch literal 4126 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 Z7$n43e2x}>s0hsB44$rjF6*2UngA67&H(@b diff --git a/KSKInterface/src/assets/Button_Texture_Share_IOS_Down.png b/KSKInterface/src/assets/Button_Texture_Share_IOS_Down.png index c32a650cea4d96c480c85f3601a17a920199cb2f..8a09c2e833cabeef9aa8dcf413ab282f0db902f9 100644 GIT binary patch literal 4117 zcmV+w5bE!VP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000F*NklCIX z5K&OcR74O&4_cnK&_#RHJJ@bHJUn3GjooshxHAdbeyyIK5MUi zIo}`F%h`LMz4rH8Ykl9k?7a%c7*y#|G2{6!09ON>fWLvSfoFkvS$&|Ej00H!ECDV8 z<^rw22=EQC4;al{3CnPkH6PdjEIPsQ2Z84lh#$2BeZbOb&KU!40p3&}5qK(FG2JQzc0nY8i&WTh*_UP9p1tlpUZ4pc2HsD&| z7vSUo=N|%A0Z(Pcrxg=|5ha@1CI&i8@Tun(sYy>tiV_l+^9*E`zzF-0{ZgCuMZE6> z&3%VM^&HzJQTtPXXmYk91c+``+@6$Ju&5_D$VCJz|nx$ zjN}c-@4#TdXzDsSKTcIbIQkJ_XC9q;uk;P-g|>kd&CR{yIYLq(BsiN`YiZaXIyw*pbpGA?UCIajT1g z+knfk)2%^O0QLeeNbEoE$p!`BbV)};Ub|oNoLV4PVW&+?5wBkWTq?ciUQaM?mefVC zY2n&y2Z1-Fui|Fh%^2ec1KxrfW< zx`Z9COFZm74f~R%OHIV=*k?Ho`_BX}PfI_T_LQFourrut>~f!` z12PEQDNRLjiZs)(*JEVC$4>(6`Qk#!4Iabai5F@ptil-^jfX;oZBshNEn8B{e z$|aC2$OQbYX`FgfOMxg5l>$*9s%8UH%xhuF>O&0yKP!;*Xb3as1%3-Q7I4wqEa9#1)@My3PgdZ6o>**DG&vs zQXne8|3bNT>}SMB3Aal^k{Sgr$t#d~*bP!t+GHsZl>$*9wJNAN(*xuO{BJXnHdVw9 zsQ@wre2T|y9a5+**ey32Yi1m7a9;pk2X1IW7=Hpc0ow_-N3WNDhym`w?j5xZyQ|rZ zoP#(3e23j!Y_pS6?XZSS>I|tRi?QE;H#r9KE3gT8-&r#g0}z$=LllTACjB=6HJ)o_ T$53vb00000NkvXXu0mjfcv^v6 literal 914 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 ehK7GXR1YvDWh)y79Z!`9$$Gl_xvX7huK&;*5m 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 VJ5Tgo?vG0XhPq}t^-$+${{g?IaGwAG literal 1078 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 diff --git a/KSKInterface/src/assets/Button_Texture_Share_Twitter_Down.png b/KSKInterface/src/assets/Button_Texture_Share_Twitter_Down.png index 000523fd003c8e80ce2659d26dfc0ba2853aafcf..9a21d44db081099522daf108d97328dcd2619d98 100644 GIT binary patch literal 4692 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 W(_b~)Z{7(20000^BSN3CuXug=Oy#rPU*<(V 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 diff --git a/KSKInterface/src/assets/Button_Texture_Time_Next_Down.png b/KSKInterface/src/assets/Button_Texture_Time_Next_Down.png index 42d924278ec7af8b48a3ff4aba66607fb3db1342..7ad39a73e9f9b99d372686771cfc42eccd9d6b14 100644 GIT binary patch literal 3768 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 literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^MIg+<1|<9Mw$=hE$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@OoE;+jv*Dd-rTtxc*sGbHF1;Zl9nkB>`CmG9M`z4Q7Ky> z>!RHtbcwNKgBo9ty)s9|=eL&cttU(BZT`JMQb^5uwjcsrbPv5EeA-g~n|%AKRctG` zvRT#~PoBH~dcXVOH&a+|KD~dtE^?`e%*K=T*NuWdD!%_z*(fPfH1&M`xt`i-Tz22( ze0Wbt`S5xev??4FX<`ZHxFl!X*?U~fn6vMska1_AWIO7u!o?Jf~!HJ z2$*x?@(kGtQoipOl{jQwnbyF$ghOqD(hP^VzMV`#i`zSXOEOfds!gz(euK?pVzrNg z=`O~g#Zn%<&m4p%G~QxZd6Cbf_g=%57px~fRd;QZG?;Mx>xuPYj7K`6iUcN7sN>v(ppJDDiaPoxOzOy+(5$sc_({w55Z98%J8#1uxm8Z!bWw0*5dsoh8n(EE zG;eVYY1-lz(zwMvq=6-nLC6JY-{NV-^R~^iTR!b(7w^r670owg8SnHRZ<5qv-z3-n zmH&v{qqOZ4S1~oqh20nUIJZ^_0l04MW?*L6IGt;C@$~)uz!b#b>FVdQ&MBb@0OM}@ A(*OVf diff --git a/KSKInterface/src/assets/Button_Texture_Time_Prev.png b/KSKInterface/src/assets/Button_Texture_Time_Prev.png index bb37201094761b6e90a42afab2afabd841e82901..6b1e6c07594eedbb62fa97027b103ad31ef8c0c2 100644 GIT binary patch literal 3974 zcmV;14|(v3P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000EBNkl1v3Zlku^qS#Os>c&>ZO$i1;T?qvRb)`_y23w0I)S@Dy z1_e>n6!8yvR)oOxZGTe+4rO-k>*bI$o5 znAJ^4?mY8-GjrzWm?WHZ2wnv)#Bm`m#Bm`m#AyS|I{gRDESWFgXf%-2V`gj3tUty$ z3mgg|Or4$%WLZ{iA&GGf@EkBGDVP~%HYw?T;73ncosHB!;1e_3(OM6Z)&WD3R!ZvW z`2W@EnR>fYRtW!ZTj%&*eP%XpX6xtsP!ci5n}A;>&3MW>&;FpbLR*DMYHbKt10%rt zg&Iu=;YQ#J;Ghd>Z=W#=+_s2_TLql(KBRs00`CKNE#`+~j2mK%8(c_xxEvS*?p(s} zEC*J&kPFWxz{^XN0T7$TgDfF}TRA>HL7U>ERs*|I=Yg$$N0 zGAi4LNZKap^)kw+VuWm!w71L+tx7_+#u!J-8X1*JS!Q-`jPbp)%cz79Gus$K*b6kO z(74K;vNnbg_5*9Gl6T7-A$Noj#;PPEsR(H_8vm_XoVlJc4>z0HKH#dV4cn6u(p=9z z+uWk{v+IC8z_nGJ(UvV`tph#=`YZZ`p;SVy2R;IBp~93!$ZB9;)n$}L$Yo|W0^CXs zNL|QEU^lRdnvk-PRlvKz05u{c92xJ_O-8Ch0`MsC5H%z2w?=c6sPkovh~;i#V+(Wn{y7Q%Mo%VFhp@g zz)3*J?UL?s1>GNI^-%0c-<;Bk+}a8;v*o~QNq2korx77HP;5+C;nkl;AJW?_P6`nc zW9$QZz5hsfrtWkxLP7`=z#6|=Fr7|)+9NY9A%}q(;4dF(CD4aR`diX8@VQri8lCzn zU=G;t{YYA)tgp@NGgpv~kQrbYm~stW6q4t8YdIKWd=i*-6^Tp?C5^`zcLIO9jzs1I zlEx^m!N}?^B&7p8!%aD_dW57SWtW)^xsY^_nY~tLDJecviWIxvKXf7KFb6zFaV?(< zNrYL7UGQTrB&|r<0gStlbofKkPT(6Ck`BKCTY&FeNIDz=9;~{QvMr@f0uKP+yO4Iz z2%8tq%va9%{HUZs;3pT-M)Eu-%QCVoBhPbUj0=??@;u)n>9`9?hp%Fc1HdmXBpnXK z7&imQT}V28&w&`@b|7~l=}7rBgzyL;7m^Migb=pTg;z|tkOice*>;M(UoIpC%xu)m zo+@kls_LfaJ;2*#OkY(MauRq3c&luquPPr4I7M+?#~WozUsXS+@elBVq}?tg9Zmqx z179w6d_Wi8wosRoOutiH7q}EDC!58Ew25ipVc?5JRZIv+LI{UlNPC%TN;&5Xhb8?i z=~&0-QU3bwd1Z9%_1%?;kTVyt7FvOnG$Cmd@aTaJXz8Na9?vs z99v{e0>frDXJ#FLCRUl0bv`s24J7rL*;+H}k1@^yhe8Nbr|TulvT6%)JY~5M$A!2M g$A!2Mr}O+f0Fpx5o-i>g1poj507*qoM6N<$g5?NC@Bjb+ literal 1530 zcmeAS@N?(olHy`uVBq!ia0vp^MIg+<1|<9Mw$=hE#^NA%Cx&(BWL^Tz9|8>y;bpKhp88yV>WRp=I1=9MH?=;jqGLkxkLnOgw2D6bgmE1>`MD-sLz4fPE4v1uyFOhY&iMHfg0q7CdTh-Egwps{i;N=+=u zFAB-e&#`j^g`I+DZen_BP-R`L3snV@L(#+q;25vjarf9x!|Dn7Qx6i^a9C z7hA7*x8R*ac+l=iyPCIYcf>a89h5cEpX=zFXKCotHJv3r!}j}}`7>1t5>M>>&#p3w zrPDxxQKf-p0)vnPlLrGQ4$f*8p(h)x8K2)tbS*jI9hO>ov|mEWtATOz9o@8@pU-dq zX&M;l@%q@jElo?VY<_=d0U@s%>^5(Q=OOD{) z75y{+eQjIBb4g7pU!_aot&&#LmfjUCLLFQRjVC&6T>eOL9#KEE{I`c<;|vQ`K2)Y;0$>`2Z@wD_J8?~|NbB4>L{eT zY~LXZ)y)PcGcs+mhx!7|8>*o zY$4X2yKW^pP2a|`?B!Ywk9R@A7p7U++(UYAWcc6R+eWKE^$F7Dh9`syV`RMZ7*K^k#{rNh|43ba!2v z5%Y1_lw!OkyGN7XNJO^V=e4txFodd$?P mQ;$dm3ggXTki56S?*ad1x2S8TqKZpErL?E3pUXO@geCw2U|8z_ diff --git a/KSKInterface/src/assets/Button_Texture_Time_Prev_Down.png b/KSKInterface/src/assets/Button_Texture_Time_Prev_Down.png index a1a32c03d688e1ec57d8cc3549523b5e78af0d3a..199d1e7a046772bbeeb5e04e412e8da2674f2c65 100644 GIT binary patch literal 3846 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 diff --git a/KSKInterface/src/assets/Button_Texture_Trash.png b/KSKInterface/src/assets/Button_Texture_Trash.png old mode 100755 new mode 100644 index d22778a7083df0b004c798f67ef547649fe6bb34..0dfeb21e5591b399e1634291a9d16414c3b4ecb1 GIT binary patch delta 1227 zcmV;+1T_1E8NnVliBL{Q4GJ0x0000DNk~Le0001F0001F2nGNE0C3`!Q~&?~32;bR za{vGf6951U69E94oEWh-i3)!NY)M2xRCwC#on44jWf;eQ<4&_qA1E#WzJ&ilOYIWzB5X|-C2a9E}gghhWf?F(zm>qQ>t zt-uyw4{$$F2a+!B3eW(ifG>fcfU8BFz|3?bTOkFq9C!|R2-pFv1BO!yX#%6b?ZEfI zg#9mADrs{_L08CAzyaV13vf5IfD^!bz-PKb+V4uoO~y!8A3hVi1K13_1I(2+hva-r zZvcmSbbKp;w}2tw?a+UugxF=h2pr2{1h@da4!j>ymlc|j`+!McRZj9R0XuawxL5IwG4)~ z-3*CmIu!EjqRHp+qI1YL;4rYuX48YrRp2||P2hA9Ib;m@!mfXeL6?EWV2{OQEbkmL z27G|KrzEatoyCT@E-cF{WUI|`CBskMVzjl_LTWay?lp;2BHcA|1Od zW<$LYayPJ73B2t@zt>`yxsWGucS%KiY_`~CE@Zb&`b2wdu-IiTWSDY1VGNC`#V+%C z$XCE0w)1(#IrV=)s0o}+`-adT;r0z>z5PD$NJxMQr&C@AUQh@lISl-ew~z;crxp81 zJ}jcknpWJs%oQO-D5*<`kPrzGeKHS8ViGvQjW^a7fSZ9=fbE|5E&!k6zA$jhl5I1< zoxp4OpIrWFZC~KVCwBkg9vVF#^MO1Cd<#Eo5fUOHqRc`n3SU@4{!;k7tSLgs--^4Ji$w_e zH(`6+a@!4(i^9ytY@5a{l<8xE_@&Ti6WX4)W9;PI(!|C~H;Z7N!qp@9mD?V{RgYd; zGOmSN1an2g{@3CbyR1e8dzARXmUUp0{aqFj%(Z_BZLh#py}lBWE9dRpd|a~Fbe5RA zsIW5(90m5r9N6z3AywcmU}a2`7pz;nDIy^C1St(`yAjd;EN};IsaYSFEl19Igp9^~ z5I+H4Wl1^kysAY%4xCWRxQ^YxH%tGSSIMK3bWnh|k2!8JDQsfc#1-K^Cl{QvSTu{C zsh@uV4q3lDs9d%foC)RD$pr8cFg1WOrtI7&ve;SHbqqHG2Z3jS)qO7FAK-J~T~ZW| z%xjbtH_~_v*k<#A)pSvpDG;hA;b-79@NGLI%(Oy!RUP3Zu4Kf+xGDmpxH1!Ere<@S p$wlXvIjOG@kq>$v5*Ysv056d6kH=wOv;YeL002ovPDHLkV1n+-9%cXl delta 520 zcmV+j0{8vF9)uY-iBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAlmGw#32;bR za{vG?BLDy{BLR4&KX$P;i3)!KuSrBfRCwC#);((!Q4|K?XI+gOH%TEPV&lgT5UmAm zY{bTYV55W-7O4a~Dt4wtaD9V4w8 z4;Rpi{XAB2w8G9uoWy#f`;NTq;Z}r8xQzV?;jSc%RoK90B7ebs+^!4hBJTM+bmJ?q z7q^0ArOLw(IAF3^@AtBORUR&(hv9_CcA(SrXqItsLWG~OQuk=uc#XpoBK(9S{a%*U z<>8N5SMe6dA_w0`g3o{9e1z)>zTq?u;T2v)gw79J=Qr zKMwg?5y5c?iz=|Y6pgu3DinDNGqLWedqw{gQ^G0XlyFM;e+Y|$JBl?gt)t}MrhgiX z_bBNEvr&Z8;@#b%cy~+1yPFj60e&`h{42N-y(~)%45Ih7V?aoPuVHW@E|$f)PE2{% zakXhoY~wC2CO01!Lp+Gyx!E*%52Jy;i7r0w!^-gv4@+|@_%#3}TYU2HVFaZB0000< KMNUMnLSTaKr|A0t diff --git a/KSKInterface/src/assets/Button_Texture_Trash_Down.png b/KSKInterface/src/assets/Button_Texture_Trash_Down.png old mode 100755 new mode 100644 index 04e651d2b10b0bc3bba2cc2ac58c43dac70bd2b7..3f216a58936354c916f53364a6c39e6cace4d0dd GIT binary patch delta 1203 zcmZpcTqS4L8Q|y6%O%Cdz`(%k>ERLtq*FkcgAGU)JenE;q&N#aB8wRqxP?KOkzv*x ziH&BRT=guWo-U3d6}R5pjqVUjl{xx1n~Bm+I*&ci$$pO}P7g&->r+ zUjOO>V}0S3#Dbps%ZAL?A9BUCOjOg~HundQ z{A2Yu-4i-Db9fh){``JOtmVzIObd4D4~%WUf2L^H-f5R<-@TFPd09ez{li$B{`E>r zO#Kde@8F%v_x^XfO;4%dr9X2wvTZNf*jKxQJ>T8qG2b84J6D@`ZF{_|E_>gv+#A)| z{V4}x)*MQBH$m!n)7knROOAiN*YP#D@P_qfnK->83{i%)0^-RZRgOHkSv1f1g4@lx zKLq!Gxh!iWT|P~C`_a_k3#%ps@{}gJT+O-r`?k(+_nYFijpiR-rf{vClKb!Sjsb7!UVx+B4N#Xc#V^IJ1}UXae=Ie8p2+cuvnGu(1*(Vf1?xnf4b z(;pr>vg4^(2B%m_)Cq-W>FX|veJ;pc-g@Tn%Ff*AIT3MZe9LXl`c>=;-D7`awuJdv zg>4T{$DO(2Jl$%pfMVjJS`X7OtvIz_mHM8?NmcA+UxPeYuTSe|clvs6&vM^u8vp$6 zTyA&q=$OF4DJZndfPdw2gKLkRAI}%y*S3?b5>mgav7ddtmfhz$hH1Csj;gz#etl)X z(XO;=gy; z-E810p9xw6l(VY|SC@MNR zwZNPN+Qp{Z-EG^>s{5Z-p(tb?P+j+}QYHXBSJibEx09lCR=x=C6y$ zDeC?xd9F+|jBV|4P7D8yGoIZjzSH{ z9ed`NFyF<1#a$4}OVpGdgR;Wbh6r^lJX9em#(ZTEXqyykKxPyT_$ z5m~R6|MzKd%!oiaD2iP20%+&8uUs)2^(pb({C?o8*6924|T^Ong$j_P_#& N!PC{xWt~$(69B1}F>e3> delta 519 zcmV+i0{H!^9)lS+iBL{Q4GJ0x0000DNk~Le0000S0000S2nGNE0CElAlmGw#32;bR za{vG?BLDy{BLR4&KX$P;i3)!Ku1Q2eRCwC#mc2`(K@i4&iQjLchgt~=7FJhSSqYLt z#PWKv)XK)nPO%gV(e}8?Kfp#18!NF>8$|@U0}Js3v53JK(L6R27+>?oH(b;v1IzNv zF7xcp?95I=5>?1JFbV{Q?}05~H?{>yaYshdsou+>q`|m$5)n5{0_}eecLE1MSH!u` zfDz!abPpg~ZeuyZIbaItcDiOD{eiQxz_TN~2G)SzQ7-L~w4mC{w0Ef|T$EJ!1j2uw zu+d$16F9P$SJl(4APw+_qihW4fsPsxUIHtX2-6nqphkq}K)+WshSSnq8UQ=M1uz8s z1pWehzz^UT@B(ZAd0>AG=mGYD6JP)s267)IeoE4n1v_K9CBuIV_ZiMhN}F!mbTfu0 z3?GLRKUu*Yfy+UFCg=8&w1+&^YI9qZ(Ij6ib;3Gfov=>$J%kCHi|z;UbJ6WBMywU1 z?1vQv8>Ql%3Kj2^4gY_pLd839#rq*nU%G5xOIFg2qzA)~hVMsQzjAB3C&M|zIm5GI z`{f8*B&|z&`H#k_AZb-nGHxT>2TTIJE~c@YdFu|=f!pxn>j2Kwn38(vNHqWe002ov JPDHLkV1km0-U0vs diff --git a/KSKInterface/src/assets/Button_Texture_Undo.png b/KSKInterface/src/assets/Button_Texture_Undo.png index 4a3e66b45eaaac433526c0afee4384c0ac7e941b..2eabed5c23bfd691dc329a874dd46e390a8055da 100644 GIT binary patch literal 5206 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 Q-~a#s07*qoM6N<$f+J?nrT_o{ literal 1338 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 A2mk;8 literal 1025 zcmV+c1pfPpP)lP}RQr}X4YtOh@npnQoHOg{pUs9)AP4ST%J29fe58g{g6f}7Jba!ORb z#DWr)FOg{n5&?-wL?RNAh(tgl5|M~RBq9-z2uMUC5|Ic<1SBF6iAV$_0uqskL?pud zWPKzmHxCaR7Fm`(+V{=%OK!h!-n;31qj~uFR0We|n^Z-94nU%jkegG-X9BzabJbrO zp$DCQ+pl+8@`)OGJBjyXXQjTF*Vx2niAcPJk-F09SxY^nCelb8Mc6W#+WKUro}w0M zk8iIdA2S$<&pQ2*R!iF)tNWh7;Lmg&6P?U;FKbD653~_ERB2JQKvINq^Hn>c!x%*F z5UR{7);z>ZnA(VZp>kH#edtv3^kbV~U)eMleGFlQ+qRE zW;{ZX=_!uFVH`CxWcrCCzrmo0KGS0?W5=}e<^)*0dAiE4bm+%S|3yx%NJ;%_sR_;|yxR5D$VSRMX-w<*1+#c-trn(>LJ9y52 zeNd?jKU8e=sF}+E^4_&p9;2y|4r=BqfV|gt__Sppc8kk#&0GhT?{w#s9~4T{IgM>- zbFq$ROZF;e&W^?%FKp5lf#!Ld?2=uJ<*-rc0ryz8n<@xS=HB({6jzw}q08tsM`U<( zxkc<1k>RoF@H;z-EzEv$CS}ndnx{_JJftP>-kwBdt{Wa&zDi<7aRwoDr2g)5)FV@~ vF1yOIY(eP&0000000000002Om{1IRP2nD){C4;fd00000NkvXXu0mjfnh4Bw diff --git a/KSKInterface/src/assets/Button_Texture_Ungroup.png b/KSKInterface/src/assets/Button_Texture_Ungroup.png old mode 100755 new mode 100644 index 1cd8e7ca2a8c3e6ea2ec27557d77560f05bf2d74..bce534cee8a42e52013f35532672ac1027c6ff2f GIT binary patch literal 3463 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 literal 1890 zcmeAS@N?(olHy`uVBq!ia0y~yV7v{&9Be?5<|+ddAjMhW5n0T@pr;JNj1^1m%YcHC zC9V-A!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$Z5SBX-g~+@hE&{obN8$-Q=mv& zV*gAgjYhr=%nO9QHZW^83cWe9klAYkiK7JF zPrr6|rqo06IAvx?*yBvMu&BXI*=so&P@;x}P=UuEY2k+Ad#oV~QbFw`l5sns>9os{ zdtAPeR+oRymGoIAIn(lZKwoLJb={0@RdubRv#PemNl!_h`*PXwTv8*+@Or)6|ETMS zK9)ZXxc=(Y`5UtY1#U~9JTrOmdvBLH`5$&m=yKj^zJ7v~{D~T+*-SX{5~jUiQ^SozwR>kW>|kF%5w-Audk1U!YjAT(i)wuNe}Zz{t8E)t zd~WTWRU#A(P2)fpp`<>z2|x#4`K4W|JEqu=Il-Y?%Q Q2iA`ap00i_>zopr0FPQ20{{R3 diff --git a/KSKInterface/src/assets/Button_Texture_Ungroup_Down.png b/KSKInterface/src/assets/Button_Texture_Ungroup_Down.png index 02e71e098c595dab44f12d69eb5416a5ea1ae7da..e6b0e4a85b7eccac1121a12d2edcaa99e720e85f 100755 GIT binary patch literal 3182 zcmV-!43YDRP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0004*NklV^5JW^IQ6!Zi0l~!Ft%Y+45_ebGIn4S0!7>9o{D<#Lgqxy3}Qt3({3II7;C7{E+(;F(SKtgeeL3~;gOiY zU$h3f*jpKAOR8}0dlV`%562CHquUm zF@LG}(3At@J>E9_US7ETI8@{YIl`uk(~cZdw&&u2Zu_678SyVlfCNZ@{8u_30GZxL US27A9v;Y7A07*qoM6N<$g4Mp`pa1{> literal 1840 zcmeAS@N?(olHy`uVBq!ia0y~yV7v{&9Be?5<|+ddAjMhW5n0T@pr;JNj1^1m%YcHC zC9V-A!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$Z5SBX_IkQFhE&{obN68GAp?fC zi%U*1ZreW3dy=hMxBAxv{V#^c_!v$+ zKgzb?7nx5k#6S6%YgPnSo0Mx+9RyaBw?(%nFdPvBA%SQpa>!wXAcl>sAOw*nM+MXXJZ9ijf$j)QGjOWF>XC*` zylM-I+DppPR-BUhE_&w1l=mh3j)=%`o{6|SxABJAySprBXZkQac_JxEO6t@&a;@%sS=rOGl9zAl z|B+5NX0rTh=%yX;TYSaiOaGaT4=H&&7x}7hv6+ybf+MlRV+d<10>{27Bl)?F38lD# zhYY;L!dI4%6}pg&4=ES1hd-txfa*Z*NR{?sh&5nT*f!yM3X_65sRh=bdAeJ7FEO6Y zxT-AsFY`A;x9dC%k|bs@)RIXUTJYlxB%B_E`w^!Kd^N|DFUkiP-bbi1h}}P953KDN NJYD@<);T3K0RTV&8chHI diff --git a/KSKInterface/src/assets/KSketch_Buttons.pngButton_Texture_Ungroup_Down b/KSKInterface/src/assets/KSketch_Buttons.pngButton_Texture_Ungroup_Down new file mode 100644 index 0000000000000000000000000000000000000000..2105dd6093e3979501f580ddbb4901fff80fe1cc GIT binary patch literal 3537 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 Date: Wed, 12 Aug 2015 07:22:01 +0800 Subject: [PATCH 35/37] Skin issues --- .../previewer/KTouchDocumentPreviewer.mxml | 4 +- .../previewer/KTouchPreviewerButtonSkin.mxml | 4 +- KSKInterface/.flexLibProperties | 1 - KSKInterface/src/assets/Help_KSketch.png | Bin 124568 -> 86946 bytes .../src/sg/edu/smu/ksketch2/KSketchGlobals.as | 97 +++++ .../src/sg/edu/smu/ksketch2/KSketchStyles.as | 162 --------- ..._Button.mxml => KSketch_CanvasButton.mxml} | 8 +- .../buttons/KSketch_Canvas_Button_Skin.mxml | 37 +- .../buttons/KSketch_DialogButton.mxml | 41 +++ .../buttons/KSketch_Dialog_Button_Skin.mxml | 39 +- .../buttons/KSketch_ListButton.mxml | 2 +- ...kin.mxml => KSketch_List_Button_Skin.mxml} | 0 .../buttons/KSketch_OnOff_Toggle.mxml | 87 ----- .../buttons/KSketch_Play_Button.mxml | 18 +- ...Single.mxml => KSketch_TimebarButton.mxml} | 1 + .../KSketch_Timebar_Button_Double.mxml | 83 ----- .../buttons/KSketch_Toggle_Button.mxml | 18 +- .../popup/KSketch_CanvasNotice.mxml | 98 ------ .../popup/KSketch_DialogBox_Help.as | 89 +++++ .../popup/KSketch_DialogBox_Logout.as | 93 +++++ .../popup/KSketch_DialogBox_Notifications.as | 121 +++++++ .../popup/KSketch_DialogBox_Result.as | 116 ++++++ .../popup/KSketch_DialogBox_Share.as | 100 ++++++ .../popup/KSketch_DialogBox_Skin.mxml | 128 +++++++ .../canvas/components/popup/KSketch_Help.mxml | 96 ----- .../popup/KSketch_ImageImport_Control.mxml | 65 ++-- .../popup/KSketch_LogoutNotice.mxml | 81 ----- .../popup/KSketch_OverwriteSaveOptions.mxml | 48 ++- .../components/popup/KSketch_PopUp_Menu.mxml | 182 ++++------ .../components/popup/KSketch_SaveOptions.mxml | 103 +++--- .../popup/KSketch_SharingOptions.mxml | 158 --------- .../components/popup/KSketch_SyncOptions.mxml | 332 ------------------ .../popup/KSketch_Timebar_Context_Double.mxml | 46 +-- .../popup/KSketch_Timebar_Context_Single.mxml | 25 +- .../popup/KSketch_Timebar_Magnifier.mxml | 64 ++-- .../popup/KSketch_Widget_ContextMenu.mxml | 39 +- .../timebar/KSketch_TickMark_Control.as | 19 +- .../components/timebar/KSketch_TimeControl.as | 57 ++- .../components/timebar/KSketch_TimeLabel.mxml | 6 +- .../timebar/KSketch_TimeLabelBar.mxml | 15 - .../timebar/KSketch_TimeSkip_Button.mxml | 15 +- .../timebar/KSketch_TimeSlider.mxml | 27 +- .../KSketch_Widget_Component.mxml | 24 +- .../components/view/KSketch_HomeView.mxml | 167 +++++---- .../KSketch_HomeView_IconItemRenderer.mxml | 18 +- .../view/KSketch_HomeView_ListActions.mxml | 17 +- .../view/KSketch_LicenseAggrement.mxml | 32 +- .../components/view/KSketch_LogView.mxml | 6 +- .../widgetstates/KBasicTransitionMode.as | 22 +- .../widgetstates/KMoveCenterMode.as | 16 +- 50 files changed, 1388 insertions(+), 1639 deletions(-) create mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/KSketchGlobals.as delete mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as rename KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/{KSketch_Button.mxml => KSketch_CanvasButton.mxml} (86%) create mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_DialogButton.mxml rename KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/{KSketch_Transparent_Button_Skin.mxml => KSketch_List_Button_Skin.mxml} (100%) delete mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_OnOff_Toggle.mxml rename KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/{KSketch_Timebar_Button_Single.mxml => KSketch_TimebarButton.mxml} (99%) delete mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Timebar_Button_Double.mxml delete mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Help.as create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Logout.as create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Notifications.as create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Result.as create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Share.as create mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Skin.mxml delete mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Help.mxml delete mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml delete mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SharingOptions.mxml delete mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml diff --git a/KSKApp_Air/src/document/previewer/KTouchDocumentPreviewer.mxml b/KSKApp_Air/src/document/previewer/KTouchDocumentPreviewer.mxml index bb2a9d6e..6c88a84f 100755 --- a/KSKApp_Air/src/document/previewer/KTouchDocumentPreviewer.mxml +++ b/KSKApp_Air/src/document/previewer/KTouchDocumentPreviewer.mxml @@ -5,7 +5,7 @@ - + diff --git a/KSKApp_Air/src/document/previewer/KTouchPreviewerButtonSkin.mxml b/KSKApp_Air/src/document/previewer/KTouchPreviewerButtonSkin.mxml index a33867b0..f35d8b7f 100755 --- a/KSKApp_Air/src/document/previewer/KTouchPreviewerButtonSkin.mxml +++ b/KSKApp_Air/src/document/previewer/KTouchPreviewerButtonSkin.mxml @@ -9,7 +9,7 @@ @@ -37,7 +37,7 @@ - + diff --git a/KSKInterface/.flexLibProperties b/KSKInterface/.flexLibProperties index ffbe90e6..5b24b706 100755 --- a/KSKInterface/.flexLibProperties +++ b/KSKInterface/.flexLibProperties @@ -11,7 +11,6 @@ - diff --git a/KSKInterface/src/assets/Help_KSketch.png b/KSKInterface/src/assets/Help_KSketch.png index 05c8d6e796db232dac128874aca37f968a8e47b9..512ddd67f813c6a6080cac33f2c912455b3e80ec 100644 GIT binary patch delta 81294 zcmb5V2UL??*Crf#Z_+zr0THE03B8L2!3rq7C`d<;4mZ6@Q6B-NgNTYWks2U$P^luF z00E>(385trlFZ?Gzi+9SPnA$-3n_H|*YHed)cAmN^?I~!t zsKH*v>2&6lTE}&&Z%-Rpe!Dk1?A=uTr9iQeQg=osZA(I$D762dF8jZ`6Vm^`yH5ZAIJUq`G;!hQe>Oh%H|gDV zn``M22L=A5xf8XElP8O{4b~t!I7W(hGE!BMf{F%~k+SSDf@|ey`Pxrf}W%%#p ze9Pc8;s0eC2AKGNK09>Tl-jSKyl)^VDxOy-;TJtpHE=UN*RBtH4gKfZOqiI>mE6OP z3l{_iAc=qPvZoApcHG~8;)ZJER#a51G?#|ao?^Ukp|rfQh%{FA_~R#)`M*OI(A`gI zuUpo2jyJmF%%%#l%Z+DZ>W`1sNZg5NZQBd`|_ft2K zAW15zH!i=&Z{NGOcwqkMk$^N0Q?1)%Zm8^xDP6rP9mpYtKAX2^|Gp5edU{o}ulCa-aIf zz@~M~klIEbf`#_KQ|#DEF^Nu0WOSSQ_Ox^SwvDIAsqoZn?fO$mU6FC3q|W+uSE2e{ z45_a8Fa7^Cy6!`1o{$C34yxyGZp3{1rjUB>Xi&>0vdrS=)sTUgEqSkAEmSo%x6Hn{ zmDLi^1v$0_u&|aFBQ?JLvVFgq(Xw&@Z*ueIF5VKh{nJKMYk3@ZynC)gBzU!edF!A5 zY0;)j7Pa;LPw8k)Ih?^<4>r|qTUaD*PWv-6`Nd_7+ORIyxlPJTZ&#F+b+v>NszM2@ z3W|zsS&+@WdsoWm1Hast;;!|aLmxrY62`w-3DYM#Wm>7}$Zma1zRvyrr~BpDv|0z} z@5t{8q#LpS{KGYFMgI0pt>NCO6GH-DRH%Bt91x|k+jk{kqpIH{wYaz#U7TSpa)8LC zJSelMV`X|*2VP)$J^${f?S&*6)>7I4(&36k6XQI%%#WbfKxi``v=F&Ay5mL8UpB?Pmgc zuDUkz6rpaJTpteLOTCzZv5@Au|KNe$&vd7%C;cw!$J-L+NBbF!SGz*||o{->D7q|h!fH^N= zxbZ0XC|J*Cq=xSj9JklpR?+<7!xQsYCyOmo8_L=2cKTlrJlQ$u*a4k7b7}k^nLJTQ z&Q?S~!O6+9X~9R6e7t*x_B+_w8RMn*Ki@H9;gbQLwvs1<#W$B(pfWD@_4d|(ZVhw3 z8~tAkCbpvrM&UM-xp^>AJ*cTB?Ogu(vw+f|Rq_t8DGENHe#Z6<-&CR(~Y_G2LGZ@>&8~3J`lXyDGN8g#(PtwXRTA`rP@C0FoZVrb>gr~4hr`?P? zcmDHm^!E1hnfA;2&VV=~ z_vM-0>R*cg>=uYRtN-#dK4&Qq2-$9~6nwzBcOYG6R)w>7iY_%r8KVOx&>tjb?2 z^6)iiPy)qo2Exq>;%+32@1qc3$clBD@g6?7h-e9J0f{K~C}_9%NfaBpAWptp!T3Kp zZS+BNTIR>AkEU`w64DCZu;|TEnP5h)B{2N=#Qx&~@lCLj{{|KRTL1z5$JYA)TNuD; z&~`fiQwO(1!pYORjpy0fIblmS6j~#cCsXZ|g`~}X7}1}6Ssa1vKx@r^(@RvqwPs`HD%WMwD{ay>tkGU-Mp`=iqOeD`il%h)D-?R zeoUuMEug3%9llcsR~WPxdmg}?+czu9pKP0)T;?MjD?Ag6cQ(=_teGrS=aJ6RMaIVmwD7%0l+f|qBxv_(Niwtw{X1xVeF)Nu z`!`sw3heJ4P}XxDBgCO6u+^zb2C-XSjPpPKL8EVfDx`oF*x6~;gf=&8z`|=ynHmv| zV)T*ga{=B$a8@BYvOr#fP+V+mHQXCI=7Z%|VGB(**%(GXP{3aCUhe+#u==oJ9viXP z>OFtBAl1{RSZvBgp%X5d$W9$`36{VR-pZKQ9LjlhE;e(*ytA_#zp)$>bAgVeW|8or z`>KMnqTb~Uz4Nbi&I<P(Qf?tw-mLAEL-ZiM|sMv?5zIIYJlGrL6`A zX;RsQ=u)T#dB@?bcel0Rr{@V(R3m)jR3$LWI_aN>M?bY_fBuXB8o2v2n{nO3__B}eqcN@a4GNwp4>_>n4Ju|cM*^QmH%mcRFLcVXy7QW6w@S#6Wyyx4#<_lTx z&M5vn60bKs_wPg(m$8hsXu`BzZ!%evdbBE?a31DmrcKqZ5~RaAWFZ2<1me%Jd#Ol? zi%F|TodbEc89zNHZ~n*v?FGNx3~7;SAEc%)^O%=~1`x`Wt2XDzS55qtKjSbxb9EjD z7OqUVIM}ge@1JMXbQkjLW1;zILX_wxn>>Fc7h`WlfsY1`E=5l)wPWZ>Y`HrR|Akvh zrm&%Z!g`5*)B3j3?neJvo=#EaNAI$*zvjp(qpsr%-8HV>2YXNN9}^zWggFVA7Q5I6 ztex}q^PMl>$IVA+V9+&*?(xYXZ7KeqDKS*n57s!rLLYH)q&6O*i_>3hpT(j zZsuQo-x6L~QYf%e!VoCdl97n~`LuA9Xd?nKG(AF9A}M}ZGh&5FRK>=!AB)*WcfgJ-cu7~9uP4^IxKqz%bRzPXV%CsHz!kVjsPtM?+QKSSB}@M8o2ShHk6xGz^|h z9qxZ1{S~?Q7{1}xKP z!kx@xz~P4w2KC9cYuB_bECd0FrHj!;E1qjy5fl*Xb&O9)&iO`bYkWuF##6=*15L$r z(6NcZ&+^&X*=4Hu@I*GhUo*GJqoNF7WuJWihB~Q`zQHo~FOlH=cj-EHT(m7w1EU7?qADTB((K?e%i_LVkYY3JP4ir#N3Wd2uW(EKvG2wlAHffKg;*3CeS{ zQisoNZR?w{PPnaZ{f!+}t<>DmPrJxP&%zRO_meM^$cCR9SjTxUcs{ckcu=22j~gb} zAB(Udo-!@vzIaa|VBtIF3PX5=8oyQ_Bp_ju9e(#yr}B>P&`jmjN@_8bBb>udO>z2k zK|pbnP=E5RiM`Q^!kQZH3gi*vvV_E$P?YNNV7e}hvL!7mY5Bu>uzo#XRD8CvhMLJA zl6bK@TI7W2rz6|FE1Ge@lD328R_382w=y#_209?{sSnym$i zT)K1#29T^yURZcKp?or_VXlDoh^KfGpY zJT#X3a-!1GhSoJ%ms!=^SUG%(xH9=Qu|2BTUz)>S2h6q51HSEnEfm-lARtrn$UIE! zy*@!#(fyrt)fXNlCvh#NtDstp*O4=80h&I|;iVMiYw+Q}b(Uc|clDyRfvn z@mJT$5TdiUx6g#tcMrbi!c#32bHk#4(g{C-0Y-uGca(!+Fx|mcsOS?Pji5#Zx~cn@ z>{~H0RaJpq-m_;EA4Glp=sX@{VP+;VJ6%nO($Fxk3Zdb-WWC|T^5meItQq#uk~$8> z3WM8z?tZBkS9zm|0Z)87xMlT`xOxUgWfhYY1|3{c$1dTji7Z}agsShq(fCnEix8O%B7Gf2ZLFBeaY2X%^8nW_@Z|FKWoYAb7 z6D+-}2+~ZXQ9 zp`AbVx3XeMnipB`o0$Yswt7?-)zr{vSXq_p&+60Kvc^%N(P%(HNXUB5sz*mtJA8k2 zPEuN0Uq^>xAX{aTo42LCA<3CAuSXx3BK|ka2DnA`(D>uc>IFylOJU~b@#$kc^zt5~ z1~5tifq{j$B~bV!Es~taqu?urg@weenc=aq*yEDCtNU>Tx&cuQ)C6fP3p)9W{y{8y zIm^@FooUjv2ZF`UuI2e6NNxoc6>Pva?CfsT-4I8hQgUal&C8VHji2VK&R4RXrQP&H zSk#4O^~dIJdC<%ApCpA3Hx{N|!!oF#@z1b6m@FvvPPh_c@SLHUlf?3;*Oj(*U+1zz zHvQCCg+8`rc{V{20?&qq7D+>JGu)O zHWo6u)pe*}lzb+6uEJR3UWfOJv%7C7^IUlu-_FVCD)I9+_qjs7lMM+1(JqZ*0 zgKQN}p5udq1Mv$NP8cNFCj;3D^YZ}mhUe#tb@ucu3eMqat-}r%rl-om&@SNcv5<-{U$aItJC_bj zf5MFz&{EHr8gevJA52t@jx)3z_ohF^y~?}!5&G+@7f{WS`q3j?70$|tp2E?A1!Kcu zI&PAWc;CHy1d|ZE*Gu;!-C&*#NxbwZ%c7Dr8{9K-<~s2du!g>^J+B^@7b*J&;7!ylb@Cs)3Bt{%$=nyDL>;D2@8H)PlICrKH#ecw*HsMjgq@s9vU2 zx$_j3E46JBDknte$JlBoyD6k71`|jZIu@4g>Ks1e(et;)m1s|JaW%0WRKwU~2$-Tz zRUDu&NxSKPSbm<#Yt8nrFW|o?AIInxXgiyKTpzG=wGcEO%hm6ATMeV#^4&W)0I8@; z;uMT(t49Lqud*3I@Ye~Ga2Oy#>bu#>v0 zF#swm^+O*AW*%UAwsIbPR35)>CY7n-FJemgt|X%Jj0^C|&aUoymLcltmuzC4AM`0+ zQlVy+zA`d7oRFDmJ`*roAmm%lbVHik73Yp6#AF5)YZQLM|w) zp|Lrd8ZX)KoO?#t#Bc7NgFDNklR!9|dcIyh7^u&6nv>eMwhkeJe3uI|F5v{BI*I3! z?u{FaVA@d!2Y%Ta!90bMy2W>O3U0T$)GV|{P&vD~?Img(M$^Yh>U#LtMsz_DMVJl4 zEF;=G1+9BDOx-!m-f$r>qs3<2tihYAQ~S$7on1ZRl9KfO{gkSWjbf@B^o%TBWp#6` zw_K#`7n@f+Dn=+mexq9tMofFDDHu<4T@f$8%m9jn6d_G&uoSF9a9E5k#RDU0Rq4&u zngdcz1xe3C$>j-@|2K2S!s z-BK>=3dPN(Vl)oVZkVV?2&>gDj+$9_4WEfK3`v=+UJ2M&I>6x|hm*L_eLsq6Wl)bR z2R=2DJga#zGAhdUsk?!L50l%NCL1DyigzH-(C6Njfo!ES=aodBH84w<Gry?*`Ti0a4?zF-_2%oviuEeSDFNG1@TtjJkZgXKf9-j~}FJ z3On=-X{$!&2B;w`?W3v9uDZ<~uHjjah!He^?C{T}rT;=a4JTFw0hWW%ZHj?BtvH(R z-^~$zm(nj;ERQbkkr0@L@pA?qZAdZt0I@TidBpasVb1FKc3x#2F6yTJIdc6uiW^~A zAN2!#-OI))tZce3CU}bqW@xH6pL0 z?PN%oZ7dNP8OhGWqqOW0^LtxHU7fO_q2adF8?cM?{Y}{Vo?L;|Z;{5w#}@}7(iJd7 zt*2JFida3^mqN~)j|g7JD57&E?u@h)<4Y{ofz>F-SRyDm$ZN`yj+l4Dd%5pvXE)T< zhQ59Jyb_P`u!`6CxJOT94AaZkuaoqjzcM?&cgx)`el@D&f_;=K*AKC-%!@9?`E{TM zhsf)5UaQ+W)HE~>V_zOp5#ESJRgW?RBe{RX^Es|8>H2iA#K*tbY4l#L^GC~AiMB~i zVIKy<7b4qx)P=RVaw;E{IeWNu=8+)0VWvr5tkl&QPz)R8X$r%J-2BCQ*R(`qz>i1@(*eAFHzKfa_3KgJQ7CdYGf@ZA`fduq2N|Fsroen1qB5THz?sktbG6z znW$sk``%s=eAXZYzK1_sq6Zjp_}4E=fEiO#SdX{-k&xgR{)g-3Rf-8Q`!Ea9%Uf!Z z?{clb9QB=vzY#Aw;u}7jD?=Rcehc|4Ude_Jl3a zU{9^DhePy*oIm2d)DOz~&Fcf?{z1=Xh4@beZ{NUO*h?h#nxZ1t+FpVgoxl(+KOu|U zOZtm3SK*xz4+0z`nE_>aMoEdM;51djOLY`k&&^WZQFDgFn#oezRNjRTNjewv?01T8PO{-!RXBOGhDgfmnRExyY9&82jCiBWPUe+x! z$xGSC%`)|~loCq`c%3Z`Nc#^pcfQ!%|rBoZZ$CI`JL zKXk9xp+oeja`9uz*r{5^-aq$(Rf7rr%G*Q2GJmG9^Zl>a=M@p8cwYBa_Q41Lc;rm(nyhBZz&9A<%J*-ZD#c7;a)3?*$- zODX!ZPZz8T7o!Z@LAJQ&U+;yo5!0rysl;8YgNvj@F^C@Sl}`&1ck{gGwON9K8qw?# zvn`qmb>B{4##oDp^utCj0O_wwKdfcuc*$Xn(6SVu--8EXO)(FTZF)4bS6!p~RgTOj zj>;x>w-5p7RAkTL?uwoN#A$om2k~QLrj|_sBB9M1<_*udHL=?ga_-$mfXBga1eR1( z@PdZr{_l@~EC$So_OQ<&n)Bh?3DR;F{+L%YwH_Y;Yo)Rd!-;~%NDg2$5E$#Y$3N3k z*ZiqyzzGpKi)scrEhh@)VR-Et{fGX{ zh?=^Y*x!n-?0K^NGUGwK2CZvcD5&whbrSH!5Ij0;W1@vhQIXCTgNc(=J#E&@!NU^^ zim=YEuG0#?gAurt-<#wJuzQ`9mjQ@j&1%_s0OR|`H>7MzhyS6BjL|w?Hp5#yBkxz+L1BIGs4(7EcV<4~jd7a+N&j}ei;d)%?%13r} zadwA^Z|aFDYE_O9_S7eq-0{?y{^iaBR*9wkW_EoJ4}Arm=7S_*hg%<6m}0nryEi zH)gnOS4V{ZTp%wwaR0%^91h*8c4?E%m<}+AfYrHn3%cGV>_40Eru1%;I)!}WhY#mN zFluw%hCQh^qZohx=XO0Q!sh;i8qV&nfJm3!YQ|{J(MNJ6-b_x@fYPIMb>%Ld7AZBW zXv=P(x>yFN>JxB5&^l&kVR0HBU;K2s5cbw`U_KAt_{6NGsYzjxOQHy~-ccuQ zuiGpN1_nC2x^@&A+>{Mne&J2rd?3IQ2JIjXJ_4?~i8v-W`vz9e_0I2`f9skM{RZG| ztlF9tR-l88$%#rkDvu^?x82X@35E0^djPi*QV(Ev8q77&kH-A-Rh35DOSQ7TfzHr> z)8I9V_3hn+=s+Ke%*w7&BGic=Xs8qDA_p*IzKKj^`0&@yA!G7)p71FWu->_S3yI zot+Z%wQ5_P{mOHZ&UqHrqYNd@OwhVIMaimuJ$qzBTUFZ6rE-8k4i-BNd$2n{$?Yv{ z2LNOO@~xamVa%b^rgIH?BrA%W31(CHq^ylDe(=m;f2y>i5Pf{;8kExDv$8PM7R4^i zI+Ok(<_7oTm2rcT!R)IJ_jW5W2Br7Sn*!uK5JW#|>#tl4SS%>1Bl4t{2{OMg0_8gw-6zZmQBAe z2;A&?%SKuSD8~&uCadx5dE^&o4A~F@$FSB!?w{V|Se7A|npxrF)S*piU?%XkBv$|y zhxBqHfbwq4$d#PhPIWv_#b9)f?0YAOJ5AC0*QtWCTg-YT5X=-5`l$C|WY&8h2 z&f%@g`kF`Q%sit>VHf+Jmu$ZlC9(q#YAseHUuIR){pW_XWfR}r;nr)=SlM0U4l#0P z-BSy)<249z8UC|aV02#3FjzS;F}I`boq(@DPFv~YU0p7N_(H1BAI;UV_{Ec^2?m-u z#IL>mBVPO;> z2D8^jBCK3pF9HrSIeW%3WVt%8t2{>yJ4YtbiH2-bbY3)i%kMI|^H}!nX9^fwQ1Gsn zcYfioHQ#)!{h1VDwZ!fu-kGrTlF(T`P&9To<4~!4h%Es>BD-i_cnlM-E_YF+7!2d@ zS5&g{j4fiURw*0qO<7``tGm-4Q|=(cNdfBTVeW6=zU900u!d}tf}K5F1Sagb8P6JJ z#Re;@!}|X!T3dbCx^>bkIiB!#yEIZ%zQwh15b-+r+BHc9<@XB(FPNPng-^4g*dufp z5M61f`3pD=W{Y6`_4M@Qf(I;TycUy(KFq~r*4KvzVzRQ{+0Il66SVL!km78s_fyw# z#iJCtQj+>7JFdq4%9H-?-9aK{QpV-3apjfMMk>bvX=$=7G34EQZqVYbld`9WG{*^l z{+S0ii)?$ayu}XX#3v-Qy;c=A{?YTxSo>mwm(viNHl0u{UZQF11TAly4JaMjUQ zK|g*w<|}zPdzB;NNONyGr{1Kjb8lM=5Mk7hA6s}Y4RM&45yLIF1nA;A7(lm;`)9^! z30#tSy>nI1;M+m(19Z*ol}g3U))fcOZnuYAE(cKj9FbI4A5g_#$VoLKYDtI^)?rlf zXo8+z5+VLDv-ClQj;YyutiIKM30z#kN3VVY5XY?K?LGa8w{ks@9=@xU;p! zWk0M~wAi1s4*bJC(;TKTHXD*O?%@x#0RTS@gKo72q~*6cb>gdWim(?+NgbE!W+~l+ zjy@{0d9)nze5^G>4+oX(9K{wR$;|KgYR_4PY!<|LjcusN=BWb9XzE^b zrsra$fx@t_MHdq!kXkOM=3fqm@|0cb$75V83V}edgfVY_*1Ts++pvx%)Z5#LE)}hWmK|J-eIM0dj-=n1*ADD56MD(vXO5$pFX$oy$LjbIe z?wxn#Gno`26-F4lV-yHlT#PDP^;cN_HF~|X9QE5iC(N=4+zVzBhC{46Lv{79D3HYc z3T)3DnWAnkkWS=yqG$V1CWHbIro7v;!I*;MIdV54_&}RWLz(MASGPS-V|q;pN53?Ly6WLUh|ZEn(9~*sU$Alicftp<;s;7W0nZ+uS=vF+al9Z#5=-$pCCBaSG+A(a?T-)q3(t;C@=8_3q(?IWvf?aM|o;E<;{ zVF2ChP>F=CIaoi-CofgvV`0oqZf4{8`%a>Mke84K-CS(L6B$)iHL-h=VxkHwHeABy z4fZNq0RGPemhhlCUXrc=t-vq?Ups8B$d5Lj@#+Db{_Ni+} z7Wt4(e^{lUt=~4``tHm0+!TUHz)(rguuDz5rCFSr&17t7Fs@;_geE519t~s%>s!yw z>qsJblevbP1eM>p5In-iX^@p|VPR1YLW_U2w`b>4@G@WD+|u#!;WQo_3$mOWU-Ml+ zR=DZi+KDY>UI8SJYk9%$!23rWG zh-#(y-JGtRd-%=qf(WV4so5i#O!#r}Bgsp&C2iM0{df&BVIzbscjUFAqv)^;n6NlQ zB=*+X^XHQBmY{hL3m>-$r2#+0C#4#$iIT%*mcoV?|B6HS{fd{ep#t)nSlO^g-=;3& z;v$wkSfek#skiGF2ss=!ta3a2Y8TNwvZn9vuMCJn(m@>(pxRv$$MMY-dI?yJ&}PB2 z`%(swTZL9kED$|jXiQJ_wSI@HxGz=Zg|-jDCIMp9c<1#zG^9i?->Wb9+p5Idxo2+J z8lonKYTTBLv|JQZ)$jd7*?z_$E$4L-h)BeRmaRYBGVi$r zZ6rBuUaT)$gURObuUVDXuzemY$!4;a1=0e%|g~U}6ATOzu%lJ!2N0S`X1P1=>Y0V=;bGh(% zAluJYu}WnU`TG7>*M=it1k?v|RTg*Kpc6p7C~DJ+bub)uZ4UYM5O@T1qNJ~z2`V*l zzvt#A)Pjq0+O8HQdQF5tj|1RJ8b{pvL7Ck^UvZ+*5t4noJtkODR9DioNmv=k?PAL# zfv!P+Pvuxow_~NU4OxbCT*9jnc2&Hn5cKH?pyRFsu#w2k02xboswnRgTX4wtuYd5+ z95L5ycJh1B67(9dzNt(PWidR@89uAB#8zgbrDvMRpkhA^N#M{q!cd(RVQ4)Fj`i@-scz&G-+dYS?KfTTUJ!1a!U6?2{#l=Fb9EBqh zle@nI7N+OA7tYbWd&|%C+G1PqG?kCU0ZPl{Ev%OsLE8o=Exwu|D{+Y43=9H`B zW(lcNi{>8PzULs|vyJgX{qdSdp%B|+7RvU2=r7uS*;y#Ik7HzGi@Wp)*DT}C-o*1ko!*v(DsZMkmEQQrp{v^!bRY*u_*(_0IdA;gZ_)r zu-KU^Oh8LS&%^|H96c*5VZauL&st*!jd~=`&a0UaZOv710Jj}~loibp7VZc$yqw`M znfM03w}K3RH3tGs{{TPFJm3Y6KjWdQ#WLm49Sz8RTFEUG8)Mf7nM3A$N}+#BB@Z_- z*zFRnD1)2nDFVkg`;}0UWK0MzhxHUT7}bm`nD5bQOMFmTS^8rY+f07w%>bLXfe3=N zq&0($fJGL41A~PUtq`7)^>yseLb7nZcDcx^t%gZX{Lqjr5M=7$P#9bP2XA_i#GxLo zl#?LS%guOP`yT2n?Ka>t*xTPfeOXgv9n;J^Y13z5Z!g~7-X7ab=1HPa^WW+ORgM3i z)g$h9ndN{a@pXVHfG z`0Fb>Hy7Ezz@~&U8*oCZbLx>>W2_Sf9FfO6r1{Ee4sMZ%=WA;Ldp}d{kNO_cvoc`U zyaQU^JI=I`ZGBb-+Nz2S<1|_h(k-f-hsEa_TC&yHzJrPiaI126k|iH}>lqBv>rhcp zu6gn47xb;6n1+R=BkSCcrDu|7+U5MW)cdkB;%S&($@$M(S}(mev!#Ir<`nBL)a5f@aJ<&(2aTrT}oqmK!UXh_@qM!9Vq8(2s}v=AR7P8L(SjT7(NX$RswH zwvik2P76`^c+DT#)5Wy%(r?@f7T%26Y`c}AYKbIoA>tEL+6Qmm*j|QgaG&RGxC}tc zePQdl|6*HeC^KNquJ%G{u$wC#QzbprxC^Zj-D>Q*>3AXAxqGPt_mV5sP*KqEY2AX` zwnv|7%s*KrJ^1uVGY>Y2Yoo)jPE@%fE?a!%dgF-%2Oa(@DlZsnk*ZA2G4oz}6b)#i z_JheVAj1U2p2z+Be6hDwG{TPgjB`F4B%Xi#d$CY5@gvaxwMEgzhI$_Dt(}07fcZ8$ z4grBgXnx+7tlE9T32|PylS55GDVDf8JDdy@mu9@X`SZ4CWz6IMT(|&yi67s|6JfT5x30qb=PjEF6&22$2e?LMu&GNw9f-B>?CLJ8Ddq+(<)n1!h?>E~^z0q^k{T*Aw*+5TF#)H1GqgXLr=c4-Y{ZTO;(5^%BU!b4>V?0eSDO%1L&-VK*2C=T21h=^0hNpxZv0UZ`B$Q^|IAjc^;vfqIJ7+6#0T zzr0B85x!HEIX#_P8|!ns|J|C+`g11Mv$Z*q`$K-dW2OKY2!3sAL(=yyQT}s>;aWZV zvLr7mS|pJASmHjv^Aa6`IZ5+x^kXyODc8ZaEic{MmXHUGK_dTlFS~}PYWoOJfzwlk zfhp-s;V+R!+o;c(NHWoLe2*~VG@$?OModQ>8$#sfu=DooJQ5cuK{XY5baZse8MOgt zthUv}8J8+_)yJpWg2oQf6{!K_dPaE`$l1kLBS4*Sq6_i&+iY(*{qr1c47J0+j7t4_ zIRcXPS!Om%WjR6ESAnc1R$g7mFOCXP`T|I4B0%rr<~>dlVd^41o0<4>cNV({$3UCF zLVFAo{L06;wn&;?Z%il--9k{Vm){3^IlLF>FAydCuNQWSm9pX1lkov_U%hUK6rgkp3fl5J+F0oWoD2gyDfvm+x>TE|D@_^_}Rv%GI* zW17cUWuy)SAuYC%-XrH{eCCK|$3!4Ky@QV`8Je1sm&QYlUQCf8wq*-~V>3W?x~%M_ zO83tHvF5Stsn@?HLtJbTVYl(p9`)F(C(pV%I_?{8yapm%l`m_cQUz zbRWjjzAv6jE;3|uSOFJxXL)v?Bwfd~yBndH(5C8YMw8_ghk>Ss6VR5&U84Jm*%07s z%^3p4xAn2W>)BV>Tfsq6?X29C_lLV0N+n+(m7Tc033PN%NHc)FIW!c6#O`Anru^HI zA)0t@eMmy+w9aZaXH+f!omHecTbl>n5@X%j2=TM@yY`Ef7d%*bay+6A+XeCSeNW$q z5=-e>Sr1arhBIIDI}mGY5|j`~DMEl%9f*_s+d!A@O2-ry%?a(53AlT@Xew|W-3Zr(OCTSQ3ngL`D1t9Kx#4ul`Y<*&3kA_8KeM3W^%FAnj8HbSEa&mIl zkOYsjGM4e&7fpfg?|Ye11wgh|R#q7TcHct}bd`aqVNNE5M=P+l)%|&R<2}G2J27FG zt`td7z~<2=p#o)PWwH?KUyqQDUb~IY3gV%}pbFH%c&)o$bHl)96$_h&!iV{P3zIu` zq{?|{_*L;qUOY$u&3ljLML!_4o9|m28G1h(zSNbpeR3Ee$VXTy%$sw$FDs7fgUiO3 zFP-lGGYP*(UAH^yS`sk4TtJ9FyRUx5X|TI*vKqTYhDPj&L|hT*b$Vm5_(`_9{IX)2 z)DY4xjMkKX^6-GwjPmOF*A6MX{cFDP9B>Ls``Heqd2q1z#_An-j`7*^=NrR50APYa zk~K+t3rX;xRoM+CHQmTayXu3*-{0?LY6L6&gT9fsMK$lGie_fIx+JdH@^y>H$Rs`r zU3LS?Oc9PVDi2558P?xT_?-z?Kcyjj-Mu;Op>U>ChECwb3xD#q;g{Y3`l@Oto2tZa z1f6d5jpfcC6YMklpJe8f+4(_#C;_N`dbt>Z?4Xw-+9WS2b9CL?J4|3Is&IH}m<=8- z76aSdVDF4M#1|KiB-l!N6}hl(9bHwmPJqg^M^kb@ADz;Xkp`r#Nba`yN9t5R2xj?8 zD$KXx6s|I}waQ}eA4`ZNSSLT!G-ud`$oL*bt&@!h6!dlgs)G|mv3XiJp?_|WpFU9z z9&yen&?sp0{k8Sgm>p*%}#1KN)=Y zN9*RNlO%la9FSUJK{q^jy$tB$36JHo%PZo5YIyRB)Anqxznwqa+o_S~#^ZXEj7<|R zAZ~m1fbqkvyp)fP-ws0PL}W0!J@B~R zD>@dkp4x;!|3sYL)w6lDCa9w!mi8D|V-U~5Lsre;tdwq*`V&@g(5*F86bXq&TE_lRmKqK~i$`*wj<=Q*+_6|G3VX{) z-=_UEdR1GZ(QdU|?;mL{|5%yM$RX-pnmM?WlCpB3Wvyou*m*BN%O3Fla=90!bfayg z8B~C9yUk@2l#4igC;&6>1Z3<9pdl-RTdphu(hJkl(UlL^PpEb4({guMpkcY8`7eVm z1|ZKK9Ua+%^FH8s6`%;sTU@w7>z*hNqNBsnnfxIZ{ z)#En&uW@8x7w%gLgqW5<5L4e2mvOVH{}b^XhhoxUADWs0$7jbEmMuID0KW-n@>8SN zD{<3at@o1$QdrdqQ6<|ON-g0z&j}ev-GKNQTr}Y?~c{XbVqfGD1q3YRGF0k>< zM<4`!@>@{_!{&?hy3YQhZeJs)%3vqrgfJhOlqQ5IPXncVj1YrMP3n0Hp?J1*2OZ0^ z?c(Cl%V&$i>@*a{hFS+3GZc3|>8`%Au(R-0dnEpZ;+L;DMdhS{&{sIS-xMRiW7<#Z zK6+f&ZYe$dab^j9&vE8cdRCV1ABq>zTn6w>){Pl!nw4)}^XX@^O>!ursVY@2=Y<&1 z9c^04`sTr+BL;_$=L32l&*o7Ftl7x4DLE%jK%-VrZ>96FeG_?>fS+3s*S9+TcFVPm zjCJV20{k(*{j!7eXa<~iv+p?&&eRO01!U}%*C*=P;nCZJd8wd&fD8L=eEzHpFdq;O z0AWE7lDuyM%6n;xs#73OlB%Ldi`RMLGX#T^A9qpd@L3ev;_n@j632_mSfP_O9aWxH z_=}MMxfGnrVF{j{+zi?PglC7<`dIJ-`%e`Wo)akY-t%>U72jm>Yy~>infMVzO92gK zKbiQ`^?^y2993$_flqnG135YT!M!;{6B9Pwj`nspy}Ve315Bc?WJn4H+@u) z%ai&dYdpWAiY3X!O55Itt)1|t@;lu*Z5W)Um4V}@j4!kpFiL>C*N7{uJH*E)?3b;< z#M#foWexeGRpf@frZ(vrS!0%CEee?L6{3D6cGsV)hZC-TGZ=i%M4}_)cd^DzFx_FV z3M&tnjS>1EjJ*dq*8lrAe7S7dl#!KeCE3|4*()m{O0trfjC@FiO7_ks*@WyBkv$^H z3}t1PmAKE3e*gdfxu560kK;LxzQ^(H>bgGT{XWO*e4XRn5JTgNRV1QTGKkN87Bun0 zU-L}M+o9V;dQUSZzCQoT+5E;Z2&0GDC&WJr6xq4HKGHjjEVzxX2iud~Jo!!cfeUpS zG%}67Gc?=U>Q;LNCYZ-@e~>FIblo?hqK_nVfXFSG;j_i^V{STN&_BFf87sZ{T^*1+ zOd7}+z1v1QUVmso^oSI8F!VXtH>b)>2)dw+aA0gAG|8!cZ? zeHln)vFH05_sWWj^wM0H={2G_BiZmjhczQ9MubrC1Fcm1@qS2)5`z=5KcuYDo++>e z7GMGpl+) z1qByv9Z}paZ?`$nnw@7eCoibrQ!T8lwk>|jNjJ(5I)7$icy`)dQC8+ux|&;>F5iHA zDe+y8I|Ck@BKta`)2n4Yy6-%cY~0?9b#i^dquRRevE4M#+aQy|5l(4@YqtM zqMB2hCkY}7WvAA7pL0g?98+O3v&5&*!C_x}XLbKvdR6BsX|J@8sovUz63<^>YuDBL zj%yl2YROy_tBkktpepqP;!s@wtap3c!LP{Y^VA89AKd}2KU>rpE|n+K{gm=t^3I)< z)TbWJ%{>9&uXx?zG~?;h0~5odGj4!B*{w{mGc?ptU}z83YsQ}9%0alz3eCD7+T>R+ zh-af>vF!G($e&N_6f}_%0B!ZqXR00ON{M805sNyas~(~-$s*Hvnb~vq!**|?C?Ry= zwB%mRafax4;pi9lo0~;{t=Sb@zm$=^k@6rRxlC!(oA9J+)a3Ew{VPu;0b%zYthbNu z&zykDq9@y{9`RCdh`-vN;^0;))PA(5?EdNZ=K@tK*Kp+L=*GqlZ=bI$!)$+bdTTU)RupD0;a zR{u5^6G_kt{R+_@?Y{Hv;LeHtr9P#)QG_79{)E+p(Z{>mAAj}+By!`N72x2(d4fm_&)?mhkMP{ko5zp8%PcXwpi*y(AKi-t zyofWv6aRWg$vtCYAdp$+4wb-IkPmy@8D5UbWp6AIwtvz_K~?olJAub7^24=yiW{T5 z_`CUF_Qzej3Za6T9X1_W|5Ww4zZH3SDlwdTdSd>P~$o&I)wr5Zq$ysi8^nLNLp*VpfPaAN!e+FU2Iinbq*jUbidet&iamR6_y zeO9NM0z1M_G{d`P6<-gN0U{@?@ekRY>!pUx(0ey~v>YDZJUu7GASos3e6Z^RCBY`= zpwZjNxFTri=e+{YO?-^=vxU_K<>lS#duKarCaXabj=MrQ7;x;$Q-`&HQo6c zZpT%aW-|ay<0{X^`XH)(_rB?hc044%mVD08C>JCMSlU!ka46z2Ffz%E4!aTbh)KO1tHCrA zd{mYf2;`>``5fT<)rzWCchZCU%p)whLCL$c{=U2Jyo?_^tRLa%?NR@nEWa1N9&RM z!}F9IR{6{%2`AZ=$Hn+bUD7R5@WQ*Csm&!qUIs98n27b`(~Xo+JlA&rib&~BKE!GV z6NQm9|4gGV{$r-BqB286fl#MD*o~6#p5s9oR7Ye>%YDZ^Y~P2q>tj=8CIBcYjSX{oBdQ!}R6|b5JI%=!F$6gN?Jl`y;jZ6H5 zLwbL>SdnsCc=%Q;9)gL`QG+>Oe0(J8+0?P`!~ifq=Io07)3c3_k8jnJ2u0d&p!#C6 zrFx5OVR7Zjg1g0-=vzoY1QWf9iVRQm#)YPFU!THdwb5b{DGjaVHY z?R$kV!6f_@X|>tvaB~1#91hI`RT>}5b(IJuOiG0&B+3v>;P7odAHzIbiFuiEg-zzvbkz_(x%S_o*UxKTe#Ed-J6uhe!Q9dM|a$(UiMrlzjD zspXu*PQ-jh!B)4^^21zMpc$>z%EIHH(|SW~?N+N_E8=4$)@lf`3a)JIssy)7+&T|` ze2}H8?KP#MIoHyOheK>NBA39#P0^k)O+R|kW0n$OCz5bjZdyD%rQFpLk+vSnX?UkE zA@EA$=1Jeht{W=#UtVxr(DJ@<56a5=?LP@3&Az|fJH=}IV^au;D63!awX!=te+Pp>qafpOKk2R_W8h0(9JXha$usit=bu?zB+qNDF4_5= zo`X~{lWPt*xMD-J346OvQZkDb(+9Qk;5((9x#>4FM8Kh)L!^LVvUn@kP4@D``A5MY zw(YKNi(l4ztmMwFNff{%`ON_s%fO=nEazp)*kY5A@BButf@l>21eZ}Ww`EvWs99OV z9&95`8N=e3{Ng?zvA*YRXGG87i_VmQF2F~c z7(6S@o_&Kn`o=L<0wA#Z@c+$e*}HkOmkx$0h8u7F#@$k8MoKOn&$QWf_w;~LmJjo7 zX_Jm^&?w9n)paJW1M2*ov#o##gPP8*+P{z^4oE%0!io+-Nx8ta?yCTDwTE{@Mo{M$ zPSWvgnHR}yM39^!)lQKJXqc2Oo;plfWq~?2ob5Gq5Jv!1Z{pz-DhL?MQx^GlCL^K_ zPyv*%EdEEypqwNkBI18$>0E4{Kar9D0Y)ixsuKQq_t^*_30=BXx@#m@7 zYSEQ`L#F?{!f1!J5D%?_EfjL?xy?hTQJ~*-(0fAI_WBhGLiz9xN@}JTz>Yv}>5PN~ z9?6rNnx4ozXeocjbrSB3B3vVfRGn1{1%+mGSWCIOhaug&12c5E5c{Vd2ux|mHqU6&26mO%tWo5EiOX9*_C%WF)`3Y2N#{FF@8FJKG`fTJ)UBtGtq zitm9)>J%$r7&$s=S@gPy^bND`dyhiU*2TJ`G}+F8PCAP2D3^e~<2gM7f5zkvJwD7w zcYO!^-|*|e^%vn7^dV2Xd(ZEFw8kyIq)PQTP2(0@R7aKEx?A({k6?Jz$R4{0hqc+r zSJ>))4~g&&!Mmo?jHi?S&NNA1quV_m{$u4!_skWk9{1QdP0K`@^T}(mcG7r=*Ua9U zGp_4QR7aaA!T9k`ACDb6fk6WhN5}5qF*Vq9uh68=1#S69UM&>l-BE7;dEBDI3~iYE zBoOzfE!gb#6^GU1sZOZmZC&oni_ztw&l}+Qc~30Kd`?g^CLsOPWrPYQu|Tim%$@2O>&GIB>w^5(l%bRhPb0g&o4j);K6TyUMd650N#Of)eYfP)!VNz}){*1kWwwsQ7=pj3 zwwO^j(cD-w(?EY9!hql$sfJyok_U~{;lO#yQer|Te|)L$92i^#gu-{9t!+9Ly`Swt z2nJ2l5sIJ>#m-*CUWAqRYqk}6Zz z7C#jY>jPc8XG68e>-RZi!TT0IX75Q}9v>|&LW{u&2@6NSG@|Zq%{RkK{-;ko|9}l_ z_6IhS3gJ3`p3JmRY`RUQcqFr+fK(-O;CH-H{^k4k#avxotLkxFU#V(noZcAKH8UeE zGVK9Kxz`&p?564}SdB|QAy;Vd66(vsbhnoua_DgRNPYE2D z&c-%Pje*|Q{^j4g`NJQ(x&qa+T{$&e-Q4sH4WA4S>N^#u4lKG0CTL=&_stgECEpnE zg{87$a1taqGMWs`%wE8h(CFCM&Cx5gY_R$VPvIH$^r)bZSI^iu2rghN!np9;J1ZyW zEHp`Y*H0F=%k$mq?dU)h02(Rl{o1|Izv{H~+Z(=QZDW&BR78IH^5u_xeOKTrOG``P zQBkw|3{J&JM{h67R$rb0-`w0>+M74Qga+&+M1!F;1V_fQ#p-I-Q5}!7vN&My#L$od zJt+Y>C8W08>vME5R)-1FEyJB78wPgdpiH?pI>}OEU9H{bEf(w)XX^0kN zTznriwk!vuYJYjx=a1j;KF5pj5+@`i6r`NV@E5AmD`>W)FMTCL=|hOq!oQSNob8tH z&Jx2Xh^kp4dq_w~kq{Eqfd}#A!h$VkeVHcqi=)c5YYAhwObbr|UKV5wJ?rF?#(72T z-Xv+gMHs9Rgotqa8qp6?iSO@D)+LNB&o?99-jbSJG$6s_2sOsE@Uurw&fB+lBEz>iZGfJ+7ucs zn;v$jcFtwLt>55->`@g>Lx(k^OG=7qp^BGR^^FNCit-ia=QA@mL2&23fA=~!9Nlok zz+f(M?2;j(ohrLxO5;0O=jAt5{Fp~~qipp$=*qL_&-Dxp@IqArVPimchK7f6s>}kQ zwfJ;HL3K5QdiJKPJRcFu5e}B{Icn={4{%&zUL!OgpF5=?PtYLZoBAd%&-LNT+Aw9n zyZTHu9i5;7TjlH5$AUd~@fG|*L7+S&5W%vORQ1)k2VKt}et)wR&sQ`$=X*?7S64(r z!lJ2@vAtMV=S8rj$D+kjKt>RlPa-dAd&kCx{rve*T-xa@drGGZUXu4Isqkk?b#gvc zpC{vg#!gCrOLF3b9?T^!nWuv7T3WIP&4R{*vuDq?7|O(fxq+FsphJk@E;lMji6V59 zmV#A`rKp}%n8Ik{2ab<_^l`h2T{_DsaP}-N2sNnft=!k{8~i;h9PA{I9iGC{fM|kT zrWX`+doX7Y*g^q%cuWl3Zpq)=PBmNKOZtxLhzU4BN^`>7w{P?C@Hn6E${4oCeb;g+ z=@nTwf|y=SpN^^0>4aamEec<~VglKPl8W@#uL&3!7>a%b4;q{aRcU!H$xcE) z=%HX|#|x5UX1#;}olX+JN4_gH7C4g6?3)pr*r2A>t5Soz z)R%RVJ?lB6-HnJJQv286^Yp*-JeQ@fy@&`4R*f5~QAK zPQHCB6sF}tcq2&2OB0>roSuH$F5qjcieyCC(1PHF3lx&c^wXzL z=>xX978a}T8ew6qZ{MyqUvT#MD@CkpYWfVU;E0Q&q!G;cCaX`0HoDIEN|PIPF&|Hq zg!GKI@lYeHNtfjW_q)Qv1bu(cpws22YC0Zy|@=nu?)sD|s{e3{cESt5w@rLYmCH~T|UIntP* z$;H9Rc}7Nt8SDxwH=%0!`qZG7#a+vZ7jF^3T)Ch>tF>W-?irYk4jsSEnnr>c_3w#_ zu_-C5lJ{C$TiL|LM}Gg6H^-5e)FE(v|LP#jvh2%c@)iRIdV4)u$QZ$_9X3Q(Hl;-f zCo3wJ=NU^Q0R~{>u>Hgj^*?8IuAU*_Cc>6>B!G>xx99T@5NZGyZM@^TNKS}p%%vm- ztFl%FF9eQH5ftwwO`viAn}UKmr%$+9Bp4D>Isr52A(ADsWF!8ylwa(si~ab5K^X0s zD)y4$it4y~(!U%j7tu~GHwjNnT&hWEWx>#79vhdz6~>8Aa`Mxb7jc^KVD_jWi=*og z*;C-6S;}??>mDFAXIX5=q)veVe)#aA2!kxRy#MDLE?v5WGjTfLbuZBK5%KXv80hw6 zSz2Dc#G`DX3?L#a3y&*`m@me@b&Jaw#}dId#g!0Z_VC3@H@dI(-zzl%6~-35(#anN zC)|5?Ra~&2qM3E)x%}8$y?AraE(Ycr@DoJbPW44tklhxoTQQMzId{M!ci=0&&uRX3f`{ZyydOYb^@lYprzrDOu$73f)5uyl5I zqOS+jWsDWOEd|puGO*tDvTVj3Y#B|Qg>DyqKZ#g{^5I)wLJZ#Ds z78e%*l)Wh`y6;g-NYKg9)!AvLp-AxcgU0RK+4*&b>KN3}v~f}XdkD^uYzKlxf@kis z(JzAn%oG-Q(`9!P`6!c?P}0#onT&kq9}vX7-(#VJWSvOd+}!jhdZ3}M4qGqH^$4aW zt7~XPBqlxs)9SB*Q60NsYT9Wi6wEWNhSTuH@hMNF~1_KIc!kB`A{YDcB zW>XCYLcnenQCC10rq$N8%tjpb8vn(l9v*&vx7(}y{QOoz36??$SXc7Yp@SY<5dwn} zx`m0=^QXFk$u1VV`&v~Y0jtF z>XO?p&)i@ib-W+ZB4|kP)D%+Nm#LtZCO9l?zQhcl_sw^lkz{}p0HOfSgHXN%KTIF0 z5n@fQ5gk3JPKh^oDD+@4C1Uqeq%72|gIOX7v@+?CtDT^s8nEPwvTI$m0*g0n zDG^>=n01kU9IxL|EG(Xh4dFsZEplPFB&vANopWdQHROxoXP|t;&4X#d9;V;WAiM@B z8lH4j73a~!YDlnc)^hHzU%&W`G{EzEz2c(e0W5p{9_ONOVsdg%lCCCZmkHuBSv64q zH*bi*g@NX%Xls+dP&o_o93CBwm#j?}PIir;&v5Ip8#0Wgshyx`4A;=nVRa9{0ptwM ziQt#%h%#+_yAnu5%|*6k?#`|*^Q-d!JFt?wacyaD-%@Ar)EpWb83`T3ry{~om05KH zRqhM0_z-!3=Sqj+DweTQQL&2*c9$6KF0mr_4poe8#FDH8>9J0=Zf0h|2cdlS?wwe4T$~b^=aLdi zKnSW@TEG9$n1B$&(?JyY0))YMMk(jh8JNXK5Qqad)i1SF41jrT6xksi4NV}}Nx*`Q zqfT}==`^>t zK8k68t3_M^`tzTAlEmG-F1X%0hPL>b0}EnD10(OyW`8h1;JAuTh~<`Eh29hhmtk|$ zjPlL1Qv#l933XhTEgrmc)xIDWbj0-CCwO+*O6eN|)~D;blglN$r?)!#k?&7%zisgr zdc)7G#FE;h52iOuXIr@ZN9g!5AMdHUC4yZZHzF9V^D4{FI!~!>W^BKHr_{vEGhxA1 zsRLv!Iwoe%+VY%eU34sWr1hOUEw&=;5F^@@U7B9gRi(QFYBzg$L5phUGLzQ*rrZA= zR~l!SF5S6>z~8~r13m*7@6u$e{~hA$W2eRfeK%k+lps)bmrPzB$9Z9P>3i4+USKgU z{b-cjO$yBBURq;S)#&g#gdGYXkacxTkY574O7=#+GAqk^Xs-(d5NuD8zAYo$%Gm~s z83~a+;i~8|m?=BmMU#EPBpJ~bFBnMu;&@-QgS0%CN~9udwwQKYBIeE$gB9;D0 zZp+r$(}RzxtUd%k3XTPY6kMqpK3fxnJ|#1=`j&_x=oEyhpt02~I$ByD%oSv}G&Xz7Tm^dg)UT)B_NeH#Pkl9D@n`bME*U5SSxxIZdt(`qxz^@CDta zfh2du3%tBg8IA+4G->FCJjvmKhaAbTtkM4GrXZMs&C^E2S9Nv$!Q&w;8n%OWB8*_a zQOpA2`u>ornxq|rF_*m^AAFPvn*lE^eQ2KXY0+#1KhXHwlMHoXJIOE^HM-*vkX;C6)R>?203!}{|fU63#(~4|3^ck*eYrhh?XE$WIKPpXXRn+>U;J4rx4#;ZT;vW ztqbO{BweM7PDr?Pvyqo z0&3cdXc+X;SXnWo`6=J-1ipS0ZF#dqeq`Aj;eD3 zKwyo`&6CIKzQ2F3IO6>Yyb{E8$^h(MsLYmF<3z}Hc6UEk&sKyX@yi)TIiGO+$KJ*d z-chS*5&h+(Ory4>mi}qc#6xioH`N$`{LH+eWR4>cUxAlp17$EDFM#g_u{GXVZO%4f z3`Gb)xgpL_R8u1c6nbD&`(^Hht^0pe+1@^HxfG&i<1ep=CcYfg%z(9{`K|l2gy>0O z=LP9Wi|lE2sz@*czribn18G##8%^B>0s`9wMi2Zd$WPIs(BORBJT+=DsMUb-rqck{ z4>RqVjofu~RS}Vdg$A4aABqT;+Cw^A_5@r3ehyCFW=~FwxM*5&?lcN+4WrNI>dJHG^Za_WdcdeBYX?EW1yxQVrMUwe z|M@6s764^9#w7Pd81?k^XG&`fG6yWd+|;GisQ2{rKvFsmS6^X$mx5BlL=zqVe5M&eXl-Su;^R7tNGLRCQCN;?>+BIpE@kRAYVPeA72{y;l|{wnLapSN=mO3=M_ ztz%YHtMky<$VhB;>cnG*+-5M?=)xG~13MT3)c%M$(6Ns}-a(@N(bjL-0jfiw0*H~F zolzTDH1NwJS_jmU>BgAjvBbdD& z94Q%@WCjyRsN`O>fe|XpHy|2cs~U`kBX%&(US40*)d2(fy$pV>{qUiTf9ZwOJD@9U=Akkoi zQ0~fBWSkwfi1P9C>zSK}f_}gf z1B$IF+|d+afKSm)09M&p$NwLsMlnUc#DGU+Y%BrBDPJvAB~SYH2l74YBCKF`6-krz zMS4?K&1Ha=E6G>n@!I|jgV8JY9y?zapa9T|b zqkTnUpty<|{_)=0D$<@hl>v?c^yw^1$*_IJ4c4?C8({z&YfMyLg6`F#VceG$rX#hL zm2tX(6#@R8cn*jt2y@&Cbhz% zfYyd5B`qgPa!r_BOwa_^1c;00!i76K$mXR2OuRn)ckUl;^|8BK8O~qW4)$!qO~{o2hbg4pcim35KR6@WK0=gE) zWg<~MTZm=j>^A9Ci$bF(xE-2=>gsYc%wL3vsaW$Y`*A3Y;)r->eS8cJCI!?PAV}3~ zwe?3)*aQP!;qpCGaQaSve1- zN4p#ll|KSaGJ5xV*q&j5l1l50-BL(S>#_+WoHz$LESeB4OveRqT)=OEnO^w4Pt`S6 zR#x`6rp_2*HJ~3m|5liuhg?v2Y;0TP@d0TW7;e;$N31#%<^fp;5(PhoWDGmd`2ZY1 z*a-%Z<=;g%j=%{1bL}WmKu^lV2F7FaI;vnOaBDNifJKJ9Ar5fjXx8%7shZf!(UE5h z2-4&^wV>%l6Rx3uXB*8{9a}db-dg@(8)H1^JNr$P)u^Z`Tt^wInbhwuT$F>YF&Y-w+? z7OFnv*P>9>)ST;8#K{4?j4^Aj|5Z^QTc(nUgBgkRSEfnEtViQv{NbiyVX&IYXhtH` zGV6Cek}WkE@U~%Rdi6-3EfYdF8Jq_SYVLbwSPU!?X4*bQO(de+^nC3B&G9{H9-c`B zjs^VX=B8_9?caYQ`LU-5Z20yvrmCc*--DZ1SeWL^moFgSbG|n0q#OjHDrbSY2AmBz z5UjVk=OG%^QNt-(h_dpb3Y-V3siBjA=Hvf2hXo8aop(J8fB_a2 zKb3{Y0-g6H%}@aS)xUbxe5(j24T2>Q=%QP}Dwzt9V3L!AY<5)E|0`qVKwX0MKX~M> zAcqW2JX|E7nm&Obt($%s5y0d^IDy(|I2Z)YzT8s!9|V7#2S;g48~u>l4r^EQehRS% z0={f0P0>RMH95_e@{j`q978{?E6|ft|L{hVZhyoc5ob!Z$7h`2}wb z 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�MF) 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 Capabilities.screenResolutionY) + { + WIDTH = Capabilities.screenResolutionX; + HEIGHT = Capabilities.screenResolutionY; + } + else + { + WIDTH = Capabilities.screenResolutionY; + HEIGHT = Capabilities.screenResolutionX; + } + + ASPECTRATIO = int((WIDTH/HEIGHT)*100)/100; + + if(WIDTH > 1280 && HEIGHT > 960) + SCALE = 2; + + FONT_SIZE_10 = 10 * SCALE; + FONT_SIZE_10_5 = 10.5 * SCALE; + FONT_SIZE_14 = 14 * SCALE; + FONT_SIZE_18 = 18 * SCALE; + FONT_SIZE_20 = 20 * SCALE; + FONT_SIZE_26 = 26 * SCALE; + FONT_SIZE_60 = 60 * SCALE; + FONT_SIZE_300 = 300 * SCALE; + + RECT_STRENGTH = 1 * SCALE; + RECT_BLURX = 12 * SCALE; + RECT_BLURY = 12 * SCALE; + RECT_RADIUSX = 5 * SCALE; + RECT_RADIUSY = 5 * SCALE; + } + } +} \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as deleted file mode 100755 index cba4403c..00000000 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchStyles.as +++ /dev/null @@ -1,162 +0,0 @@ -/** - * Copyright 2010-2012 Singapore Management University - * Developed under a grant from the Singapore-MIT GAMBIT Game Lab - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was - * not distributed with this file, You can obtain one at - * http://mozilla.org/MPL/2.0/. - */ -package sg.edu.smu.ksketch2 -{ - import flash.system.Capabilities; - - public class KSketchStyles - { - //ANGLE VALUES - public static const ANGLE_50:Number = 50; - - //SHADOW DISTANCE MEASUREMENTS - public static const SHADOW_DIST_03:Number = 3; - public static const SHADOW_DIST_12:Number = 12; - - //ALPHA VALUES - public static const ALPHA_00:Number = 0; - public static const ALPHA_02:Number = 0.2; - public static const ALPHA_04:Number = 0.4; - public static const ALPHA_05:Number = 0.5; - public static const ALPHA_06:Number = 0.6; - public static const ALPHA_1:Number = 1; - - //COLOR VALUES - public static const COLOR_WHITE:uint = 0xFFFFFF; - public static const COLOR_BLACK:uint = 0x000000; - public static const COLOR_RED_LIGHT:uint = 0xDD1F26; - public static const COLOR_RED:uint = 0xFF0000; - public static const COLOR_RED_DARK:uint = 0x6B0000; - public static const COLOR_GREY_VERYLIGHT:uint = 0xD0D2D3; - public static const COLOR_GREY_LIGHT:uint = 0xC8CCCE; - public static const COLOR_GREY_MEDIUM:uint = 0xA6A8AB; - public static const COLOR_GREY_DARK:uint = 0x505050; - public static const COLOR_BLUE:uint = 0x0000FF; - public static const COLOR_GREEN:uint = 0x00FF00; - - //FONT VALUES - public static const FONT_FAMILY:String = "Arial, Helvetica"; - public static var FONT_SIZE_14:Number = 14; - public static var FONT_SIZE_18:Number = 18; - public static var FONT_SIZE_26:Number = 26; - public static var FONT_SIZE_60:Number = 60; - - //SCALE FACTOR - public static var SCALE:Number = 1; - - //MEASUREMENTS - public static var NUMBER_01:Number = 1; - public static var NUMBER_02:Number = 2; - public static var NUMBER_03:Number = 3; - public static var NUMBER_04:Number = 4; - public static var NUMBER_05:Number = 5; - public static var NUMBER_07:Number = 7; - public static var NUMBER_075:Number = 7.5; - public static var NUMBER_10:Number = 10; - public static var NUMBER_0105:Number = 10.5; - public static var NUMBER_12:Number = 12; - public static var NUMBER_14:Number = 14; - public static var NUMBER_15:Number = 15; - public static var NUMBER_18:Number = 18; - public static var NUMBER_20:Number = 20; - public static var NUMBER_23:Number = 23; - public static var NUMBER_25:Number = 25; - public static var NUMBER_40:Number = 40; - public static var NUMBER_50:Number = 50; - public static var NUMBER_60:Number = 60; - public static var NUMBER_74:Number = 74; - public static var NUMBER_80:Number = 80; - public static var NUMBER_90:Number = 90; - public static var NUMBER_100:Number = 100; - public static var NUMBER_120:Number = 120; - public static var NUMBER_150:Number = 150; - public static var NUMBER_160:Number = 160; - public static var NUMBER_250:Number = 250; - public static var NUMBER_300:Number = 300; - public static var NUMBER_875:Number = 875; - public static var NUMBER_960:Number = 960; - public static var NUMBER_1000:Number = 1000; - public static var NUMBER_1100:Number = 1100; - public static var NUMBER_1200:Number = 1200; - - public static var width:int = 0; - public static var height:int = 0; - public static var aspectRatio:Number = 0; - - public static function setResolution():void - { - if(Capabilities.screenResolutionX > Capabilities.screenResolutionY) - { - width = Capabilities.screenResolutionX; - height = Capabilities.screenResolutionY; - } - else - { - width = Capabilities.screenResolutionY; - height = Capabilities.screenResolutionX; - } - - aspectRatio = int((width/height)*100)/100; - } - - public static function setView():void - { - setResolution(); - - if(width > 1280 && height > 960) - { - KSketchStyles.scale(2); - } - } - - public static function scale(scale:int):void - { - FONT_SIZE_14 = 14 * scale; - FONT_SIZE_18 = 18 * scale; - FONT_SIZE_26 = 26 * scale; - FONT_SIZE_60 = 60 * scale; - - SCALE = 1 * scale; - - NUMBER_01 = 1 * scale; - NUMBER_02 = 2 * scale; - NUMBER_03 = 3 * scale; - NUMBER_04 = 4 * scale; - NUMBER_05 = 5 * scale; - NUMBER_07 = 7 * scale; - NUMBER_075 = 7.5 * scale; - NUMBER_10 = 10 * scale; - NUMBER_0105 = 10.5 * scale; - NUMBER_12 = 12 * scale; - NUMBER_14 = 14 * scale; - NUMBER_15 = 15 * scale; - NUMBER_18 = 18 * scale; - NUMBER_20 = 20 * scale; - NUMBER_23 = 23 * scale; - NUMBER_25 = 25 * scale; - NUMBER_40 = 40 * scale; - NUMBER_50 = 50 * scale; - NUMBER_60 = 60 * scale; - NUMBER_74 = 74 * scale; - NUMBER_80 = 80 * scale; - NUMBER_90 = 90 * scale; - NUMBER_100 = 100 * scale; - NUMBER_120 = 120 * scale; - NUMBER_150 = 150 * scale; - NUMBER_160 = 160 * scale; - NUMBER_250 = 250 * scale; - NUMBER_300 = 300 * scale; - NUMBER_875 = 875 * scale; - NUMBER_960 = 960 * scale; - NUMBER_1000 = 1000 * scale; - NUMBER_1100 = 1100 * scale; - NUMBER_1200 = 1200 * scale; - } - } -} \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Button.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_CanvasButton.mxml similarity index 86% rename from KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Button.mxml rename to KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_CanvasButton.mxml index 86520073..020a4ac0 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Button.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_CanvasButton.mxml @@ -9,7 +9,7 @@ *http://mozilla.org/MPL/2.0/. --> + xmlns:ksketch2="sg.edu.smu.ksketch2.*"> @@ -60,37 +64,36 @@ - + + color.over="{KSketchGlobals.COLOR_GREY_DARK}" + color.down="{KSketchGlobals.COLOR_GREY_DARK}" + color.disabled="{KSketchGlobals.COLOR_GREY_LIGHT}"/> - + - + - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_DialogButton.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_DialogButton.mxml new file mode 100755 index 00000000..6dd18d2d --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_DialogButton.mxml @@ -0,0 +1,41 @@ + + + + + + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Dialog_Button_Skin.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Dialog_Button_Skin.mxml index dd17d396..ee75b29f 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Dialog_Button_Skin.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Dialog_Button_Skin.mxml @@ -31,7 +31,6 @@ @@ -44,8 +43,9 @@ @@ -59,32 +59,21 @@ - - - - - - - + + + + + + + - + + paddingLeft="20" paddingRight="20" + paddingTop="10" paddingBottom="10" /> - - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_ListButton.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_ListButton.mxml index fbe3340c..5e6b3b27 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_ListButton.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_ListButton.mxml @@ -10,7 +10,7 @@ --> + skinClass="sg.edu.smu.ksketch2.canvas.components.buttons.KSketch_List_Button_Skin"> - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Play_Button.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Play_Button.mxml index 1943b742..a825f8cb 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Play_Button.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Play_Button.mxml @@ -23,7 +23,7 @@ import sg.edu.smu.ksketch2.KSketch2; import sg.edu.smu.ksketch2.KSketchAssets; - import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchGlobals; import sg.edu.smu.ksketch2.canvas.components.timebar.KSketch_TimeControl; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_CanvasView; import sg.edu.smu.ksketch2.canvas.controls.KInteractionControl; @@ -41,11 +41,13 @@ private const SHOW_PLAY:int = 0; private const SHOW_PAUSE:int = 1; - private var _doubleClickTimer:Timer; private var _doubleClickTrigger:Boolean; - public function init(timeControl:KSketch_TimeControl, interactionControl:KInteractionControl, + //KSKETCH-SYNPHNE + private var _canvasView:KSketch_CanvasView; + + public function init(timeControl:KSketch_TimeControl, canvas:KSketch_CanvasView, interactionControl:KInteractionControl, KSketchInstance:KSketch2, menu:SkinnablePopUpContainer):void { _KSketch = KSketchInstance; @@ -53,11 +55,14 @@ _timeControl = timeControl; _menu = menu; + //KSKETCH-SYNPHNE + _canvasView = canvas; + timeControl.addEventListener(KSketch_TimeControl.PLAY_START, _handlePlayPause); timeControl.addEventListener(KSketch_TimeControl.PLAY_STOP, _handlePlayPause); } - public function playToggle():void + public function playToggle(activity:Boolean):void { _doubleClickTrigger = false; @@ -68,8 +73,9 @@ _doubleClickTimer.start(); } else + { _timeControl.stop(); - + } } private function triggerPlay(event:TimerEvent):void @@ -138,7 +144,7 @@ else textureControl.source = KSketchAssets.texture_pause; - (skin as KSketch_Canvas_Button_Skin).upColor = KSketchStyles.COLOR_RED; + (skin as KSketch_Canvas_Button_Skin).upColor = KSketchGlobals.COLOR_RED; } ]]> diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Timebar_Button_Single.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_TimebarButton.mxml similarity index 99% rename from KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Timebar_Button_Single.mxml rename to KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_TimebarButton.mxml index 1111fd82..6a142607 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Timebar_Button_Single.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_TimebarButton.mxml @@ -43,6 +43,7 @@ private function _initSkin():void { var textureControl:Image = (skin as KSketch_Canvas_Button_Skin).texture; + skin.addEventListener(StateChangeEvent.CURRENT_STATE_CHANGE, _onStateChange); if(_type == LEFT) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Timebar_Button_Double.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Timebar_Button_Double.mxml deleted file mode 100755 index 0c3c12f3..00000000 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Timebar_Button_Double.mxml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Toggle_Button.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Toggle_Button.mxml index 57afc14c..19f0b64f 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Toggle_Button.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/buttons/KSketch_Toggle_Button.mxml @@ -8,13 +8,14 @@ *not distributed with this file, You can obtain one at *http://mozilla.org/MPL/2.0/. --> - + - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml deleted file mode 100755 index 287f0a15..00000000 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_CanvasNotice.mxml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Help.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Help.as new file mode 100644 index 00000000..2527a1eb --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Help.as @@ -0,0 +1,89 @@ +package sg.edu.smu.ksketch2.canvas.components.popup +{ + import flash.events.MouseEvent; + import flash.net.URLRequest; + import flash.net.navigateToURL; + + import spark.components.Image; + import spark.layouts.HorizontalLayout; + + import sg.edu.smu.ksketch2.KSketchAssets; + import sg.edu.smu.ksketch2.KSketchGlobals; + import sg.edu.smu.ksketch2.KSketch_Config; + import sg.edu.smu.ksketch2.canvas.components.buttons.KSketch_DialogButton; + + public class KSketch_DialogBox_Help + { + private var PADDINGLEFT:Number = 10 * KSketchGlobals.SCALE; + + private var _dialogPopUp:KSketch_DialogBox_Skin; + private var _image:Image; + private var _moreButton:KSketch_DialogButton; + private var _closeButton:KSketch_DialogButton; + + public function KSketch_DialogBox_Help(dialogPopUp:KSketch_DialogBox_Skin) + { + _dialogPopUp = dialogPopUp; + _dialogPopUp.header.text = "Help"; + _dialogPopUp.header.setStyle("fontSize", KSketchGlobals.FONT_SIZE_26); + + _initContentComponent(); + _initButtonComponent(); + } + + private function _initContentComponent():void + { + var horizontalLayout:HorizontalLayout = new HorizontalLayout(); + horizontalLayout.verticalAlign = "middle"; + _dialogPopUp.contentComponent.layout = horizontalLayout; + + _image = new Image(); + _image.source = KSketchAssets.image_help; + + if(KSketchGlobals.SCALE == 1) + { + _image.width = 600; + _image.height = 410; + } + + _dialogPopUp.contentComponent.addElement(_image); + } + + private function _initButtonComponent():void + { + _dialogPopUp.buttonComponent.percentWidth = 100; + var horizontalLayout:HorizontalLayout = new HorizontalLayout(); + horizontalLayout.horizontalAlign = "right"; + horizontalLayout.paddingLeft = PADDINGLEFT; + _dialogPopUp.buttonComponent.layout = horizontalLayout; + + _moreButton = new KSketch_DialogButton(); + _moreButton.init("More"); + _moreButton.initSkin(); + _moreButton.addEventListener(MouseEvent.CLICK, _more); + + _closeButton = new KSketch_DialogButton(); + _closeButton.init("Close"); + _closeButton.initSkin(); + _closeButton.addEventListener(MouseEvent.CLICK, _close); + + _dialogPopUp.buttonComponent.addElement(_moreButton); + _dialogPopUp.buttonComponent.addElement(_closeButton); + } + + private function _more(event:MouseEvent):void + { + _moreButton.removeEventListener(MouseEvent.CLICK, _more); + navigateToURL(new URLRequest(KSketch_Config.host_name+"/app/help.html"),"_blank"); + + _closeButton.removeEventListener(MouseEvent.CLICK, _close); + _dialogPopUp.close(); + } + + private function _close(event:MouseEvent):void + { + _closeButton.removeEventListener(MouseEvent.CLICK, _close); + _dialogPopUp.close(); + } + } +} \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Logout.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Logout.as new file mode 100644 index 00000000..a361a7d0 --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Logout.as @@ -0,0 +1,93 @@ +package sg.edu.smu.ksketch2.canvas.components.popup +{ + import flash.events.MouseEvent; + + import spark.components.Label; + import spark.layouts.HorizontalLayout; + import spark.layouts.VerticalLayout; + + import sg.edu.smu.ksketch2.KSketchGlobals; + import sg.edu.smu.ksketch2.canvas.components.buttons.KSketch_DialogButton; + import sg.edu.smu.ksketch2.canvas.components.view.KSketch_HomeView; + + public class KSketch_DialogBox_Logout + { + private var GAP:Number = 10 * KSketchGlobals.SCALE; + private var PADDING:Number = 5 * KSketchGlobals.SCALE; + + private var _homeView:KSketch_HomeView; + private var _dialogPopUp:KSketch_DialogBox_Skin; + private var _label1:Label; + private var _label2:Label; + private var _cancelButton:KSketch_DialogButton; + private var _logoutButton:KSketch_DialogButton; + + public function KSketch_DialogBox_Logout(dialogPopUp:KSketch_DialogBox_Skin, homeView:KSketch_HomeView) + { + _dialogPopUp = dialogPopUp; + + _homeView = homeView; + + _initContentComponent(); + _initButtonComponent(); + } + + private function _initContentComponent():void + { + var verticalLayout:VerticalLayout = new VerticalLayout(); + verticalLayout.horizontalAlign = "right"; + verticalLayout.gap = GAP; + verticalLayout.paddingLeft = PADDING; + verticalLayout.paddingRight = PADDING; + verticalLayout.paddingTop = PADDING; + verticalLayout.paddingBottom = PADDING; + _dialogPopUp.contentComponent.layout = verticalLayout; + + _label1 = new Label(); + _label1.text = "You are currently disconnected."; + + _label2 = new Label(); + _label2.text = "Logging out will discard all unsaved changes."; + + _dialogPopUp.contentComponent.addElement(_label1); + _dialogPopUp.contentComponent.addElement(_label2); + } + + private function _initButtonComponent():void + { + _dialogPopUp.buttonComponent.percentWidth = 100; + var horizontalLayout:HorizontalLayout = new HorizontalLayout(); + horizontalLayout.horizontalAlign = "right"; + horizontalLayout.paddingLeft = GAP; + _dialogPopUp.buttonComponent.layout = horizontalLayout; + + _cancelButton = new KSketch_DialogButton(); + _cancelButton.init("Cancel"); + _cancelButton.initSkin(); + _cancelButton.addEventListener(MouseEvent.CLICK, _cancel); + + _logoutButton = new KSketch_DialogButton(); + _logoutButton.init("Logout"); + _logoutButton.initSkin(); + _logoutButton.addEventListener(MouseEvent.CLICK, _logout); + + _dialogPopUp.buttonComponent.addElement(_cancelButton); + _dialogPopUp.buttonComponent.addElement(_logoutButton); + } + + private function _cancel(event:MouseEvent):void + { + _cancelButton.removeEventListener(MouseEvent.CLICK, _cancel); + _dialogPopUp.close(); + } + + private function _logout(event:MouseEvent):void + { + _logoutButton.removeEventListener(MouseEvent.CLICK, _logout); + _homeView.navigateToScreen("LOGIN"); + + _cancelButton.removeEventListener(MouseEvent.CLICK, _cancel); + _dialogPopUp.close(); + } + } +} \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Notifications.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Notifications.as new file mode 100644 index 00000000..61d04385 --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Notifications.as @@ -0,0 +1,121 @@ +package sg.edu.smu.ksketch2.canvas.components.popup +{ + import flash.events.MouseEvent; + + import spark.components.Label; + import spark.layouts.HorizontalLayout; + + import sg.edu.smu.ksketch2.KSketchGlobals; + import sg.edu.smu.ksketch2.KSketch_Config; + import sg.edu.smu.ksketch2.canvas.components.buttons.KSketch_DialogButton; + import sg.edu.smu.ksketch2.canvas.components.view.KSketch_HomeView; + + public class KSketch_DialogBox_Notifications + { + public static const CANVASNOTICE_FAILED_SKETCH:String = "FAILEDSKETCH"; + public static const CANVASNOTICE_FAILED_LOGIN:String = "FAILEDLOGIN"; + public static const CANVASNOTICE_EXPIRED_SESSION:String = "EXPIREDSESSION"; + + private var PADDINGLEFT:Number = 10 * KSketchGlobals.SCALE; + + private var _homeView:KSketch_HomeView; + private var _dialogPopUp:KSketch_DialogBox_Skin; + private var _failedMessage:String; + private var _label:Label; + private var _yesButton:KSketch_DialogButton; + private var _okButton:KSketch_DialogButton; + + public function KSketch_DialogBox_Notifications(dialogPopUp:KSketch_DialogBox_Skin, homeView:KSketch_HomeView, message:String) + { + _dialogPopUp = dialogPopUp; + _dialogPopUp.header.setStyle("fontSize", KSketchGlobals.FONT_SIZE_26); + + _homeView = homeView; + + _failedMessage = message; + if(_failedMessage == CANVASNOTICE_FAILED_SKETCH) + { + _failedMessage = "Unable to display sketch. Check your network connection or\ncontact the K-Sketch team at " + KSketch_Config.email; + _dialogPopUp.header.text = "Network Error"; + } + else if(_failedMessage == CANVASNOTICE_FAILED_LOGIN) + { + _failedMessage = "Unable to login. Check your network connection or\ncontact the K-Sketch team at " + KSketch_Config.email; + _dialogPopUp.header.text = "Login Error"; + } + else if(_failedMessage == CANVASNOTICE_EXPIRED_SESSION) + { + _failedMessage = "Your K-Sketch session has expired. Please login to retrieve your sketches. Do you want to login now?"; + _dialogPopUp.header.text = "Session Expired"; + + } + + _initContentComponent(); + _initButtonComponent(); + } + + private function _initContentComponent():void + { + var horizontalLayout:HorizontalLayout = new HorizontalLayout(); + horizontalLayout.verticalAlign = "middle"; + _dialogPopUp.contentComponent.layout = horizontalLayout; + + _label = new Label(); + + if(_failedMessage == CANVASNOTICE_FAILED_SKETCH) + _label.text = "Unable to display sketch. Check your network connection or\ncontact the K-Sketch team at " + KSketch_Config.email; + else if(_failedMessage == CANVASNOTICE_FAILED_LOGIN) + _label.text = "Unable to login. Check your network connection or\ncontact the K-Sketch team at " + KSketch_Config.email; + else if(_failedMessage == CANVASNOTICE_EXPIRED_SESSION) + _label.text = "Your K-Sketch session has expired. Please login to retrieve your sketches. Do you want to login now?"; + + _dialogPopUp.contentComponent.addElement(_label); + } + + private function _initButtonComponent():void + { + _dialogPopUp.buttonComponent.percentWidth = 100; + var horizontalLayout:HorizontalLayout = new HorizontalLayout(); + horizontalLayout.horizontalAlign = "right"; + horizontalLayout.paddingLeft = PADDINGLEFT; + _dialogPopUp.buttonComponent.layout = horizontalLayout; + + _yesButton = new KSketch_DialogButton(); + _yesButton.init("Yes"); + _yesButton.initSkin(); + _yesButton.addEventListener(MouseEvent.CLICK, _login); + + _okButton = new KSketch_DialogButton(); + if(_failedMessage == CANVASNOTICE_EXPIRED_SESSION) + { + _okButton.init("NO"); + _yesButton.setVisible(true); + } + else + { + _okButton.init("OK"); + _yesButton.setVisible(false); + } + _okButton.initSkin(); + _okButton.addEventListener(MouseEvent.CLICK, _close); + + _dialogPopUp.buttonComponent.addElement(_yesButton); + _dialogPopUp.buttonComponent.addElement(_okButton); + } + + private function _login(event:MouseEvent):void + { + _yesButton.removeEventListener(MouseEvent.CLICK, _login); + _homeView.navigateToScreen('RELOGIN'); + + _okButton.removeEventListener(MouseEvent.CLICK, _close); + _dialogPopUp.close(); + } + + private function _close(event:MouseEvent):void + { + _okButton.removeEventListener(MouseEvent.CLICK, _close); + _dialogPopUp.close(); + } + } +} \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Result.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Result.as new file mode 100644 index 00000000..b535799c --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Result.as @@ -0,0 +1,116 @@ +package sg.edu.smu.ksketch2.canvas.components.popup +{ + import flash.events.MouseEvent; + + import spark.components.Image; + import spark.layouts.HorizontalLayout; + + import sg.edu.smu.ksketch2.KSketchAssets; + import sg.edu.smu.ksketch2.KSketchGlobals; + import sg.edu.smu.ksketch2.canvas.components.buttons.KSketch_DialogButton; + import sg.edu.smu.ksketch2.canvas.controls.KActivityControl; + + public class KSketch_DialogBox_Result + { + private var PADDINGLEFT:Number = 10 * KSketchGlobals.SCALE; + + private var _activityControl:KActivityControl; + private var _dialogPopUp:KSketch_DialogBox_Skin; + private var _retryButton:KSketch_DialogButton; + private var _closeButton:KSketch_DialogButton; + private var _image1:Image; + private var _image2:Image; + private var _image3:Image; + + public function KSketch_DialogBox_Result(dialogPopUp:KSketch_DialogBox_Skin, activityControl:KActivityControl) + { + PADDINGLEFT = PADDINGLEFT; + + _dialogPopUp = dialogPopUp; + _dialogPopUp.header.text = "Results"; + _dialogPopUp.header.setStyle("fontSize", KSketchGlobals.FONT_SIZE_26); + + _activityControl = activityControl; + + _initContentComponent(); + _initButtonComponent(); + } + + private function _initContentComponent():void + { + _dialogPopUp.contentComponent.percentWidth = 100; + var horizontalLayout:HorizontalLayout = new HorizontalLayout(); + _dialogPopUp.contentComponent.layout = horizontalLayout; + + _image1 = new Image(); + _image1.id = "star1"; + _image1.source = KSketchAssets.star_empty; + + _image2 = new Image(); + _image2.id = "star2"; + _image2.source = KSketchAssets.star_empty; + + _image3 = new Image(); + _image3.id = "star3"; + _image3.source = KSketchAssets.star_empty; + + _dialogPopUp.contentComponent.addElement(_image1); + _dialogPopUp.contentComponent.addElement(_image2); + _dialogPopUp.contentComponent.addElement(_image3); + } + + private function _initButtonComponent():void + { + _dialogPopUp.buttonComponent.percentWidth = 100; + var horizontalLayout:HorizontalLayout = new HorizontalLayout(); + horizontalLayout.horizontalAlign = "center"; + horizontalLayout.paddingLeft = PADDINGLEFT; + _dialogPopUp.buttonComponent.layout = horizontalLayout; + + _retryButton = new KSketch_DialogButton(); + _retryButton.init("Retry"); + _retryButton.initSkin(); + _retryButton.addEventListener(MouseEvent.CLICK, _retry); + + _closeButton = new KSketch_DialogButton(); + _closeButton.init("Continue"); + _closeButton.initSkin(); + _closeButton.addEventListener(MouseEvent.CLICK, _continue); + + _dialogPopUp.buttonComponent.addElement(_closeButton); + } + + private function _retry(event:MouseEvent):void + { + _activityControl.retryActivity(); + _dialogPopUp.close(); + _retryButton.removeEventListener(MouseEvent.CLICK, _retry); + } + + private function _continue(event:MouseEvent):void + { + _activityControl.continueActivity(); + _dialogPopUp.close(); + _closeButton.removeEventListener(MouseEvent.CLICK, _continue); + } + + public function initStars(stars:int):void + { + if(stars == 1) + { + _image1.source = KSketchAssets.star_fill; + } + else if(stars == 2) + { + _image1.source = KSketchAssets.star_fill; + _image2.source = KSketchAssets.star_fill; + } + else if(stars == 3) + { + _image1.source = KSketchAssets.star_fill; + _image2.source = KSketchAssets.star_fill; + _image3.source = KSketchAssets.star_fill; + } + } + } +} \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Share.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Share.as new file mode 100644 index 00000000..39b34346 --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Share.as @@ -0,0 +1,100 @@ +package sg.edu.smu.ksketch2.canvas.components.popup +{ + import flash.events.MouseEvent; + + import spark.layouts.HorizontalLayout; + import spark.layouts.VerticalLayout; + + import sg.edu.smu.ksketch2.KSketchAssets; + import sg.edu.smu.ksketch2.KSketchGlobals; + import sg.edu.smu.ksketch2.canvas.components.buttons.KSketch_CanvasButton; + import sg.edu.smu.ksketch2.canvas.components.buttons.KSketch_DialogButton; + + public class KSketch_DialogBox_Share + { + private var PADDING:Number = 20 * KSketchGlobals.SCALE; + + private var _dialogPopUp:KSketch_DialogBox_Skin; + private var mailButton:KSketch_CanvasButton; + private var facebookButton:KSketch_CanvasButton; + private var twitterButton:KSketch_CanvasButton; + private var closeButton:KSketch_DialogButton; + + public function KSketch_DialogBox_Share(dialogPopUp:KSketch_DialogBox_Skin) + { + _dialogPopUp = dialogPopUp; + _dialogPopUp.header.text = "Sharing Options"; + _dialogPopUp.header.setStyle("fontSize", KSketchGlobals.FONT_SIZE_26); + + _initContentComponent(); + _initButtonComponent(); + } + + private function _initContentComponent():void + { + var horizontalLayout:HorizontalLayout = new HorizontalLayout(); + horizontalLayout.verticalAlign = "middle"; + horizontalLayout.horizontalAlign = "center"; + horizontalLayout.gap = PADDING; + horizontalLayout.paddingLeft = PADDING; + horizontalLayout.paddingRight = PADDING; + _dialogPopUp.contentComponent.layout = horizontalLayout; + + mailButton = new KSketch_CanvasButton(); + facebookButton = new KSketch_CanvasButton(); + twitterButton = new KSketch_CanvasButton(); + + mailButton.init(KSketchAssets.texture_share_mail, KSketchAssets.texture_share_mail_down, false); + mailButton.initSkin(); + mailButton.addEventListener(MouseEvent.CLICK, _shareMail); + + facebookButton.init(KSketchAssets.texture_share_facebook, KSketchAssets.texture_share_facebook_down, false); + facebookButton.initSkin(); + facebookButton.addEventListener(MouseEvent.CLICK, _shareFacebook); + + twitterButton.init(KSketchAssets.texture_share_twitter, KSketchAssets.texture_share_twitter_down, false); + twitterButton.initSkin(); + twitterButton.addEventListener(MouseEvent.CLICK, _shareTwitter); + + _dialogPopUp.contentComponent.addElement(mailButton); + _dialogPopUp.contentComponent.addElement(facebookButton); + _dialogPopUp.contentComponent.addElement(twitterButton); + } + + private function _initButtonComponent():void + { + _dialogPopUp.buttonComponent.percentWidth = 100; + var verticalLayout:VerticalLayout = new VerticalLayout(); + verticalLayout.horizontalAlign = "right"; + _dialogPopUp.buttonComponent.layout = verticalLayout; + + closeButton = new KSketch_DialogButton(); + closeButton.init("Close"); + closeButton.initSkin(); + closeButton.addEventListener(MouseEvent.CLICK, _close); + + _dialogPopUp.buttonComponent.addElement(closeButton); + } + + private function _shareMail(event:MouseEvent):void + { + trace("Implement share through mail"); + } + + private function _shareFacebook(event:MouseEvent):void + { + trace("Implement share through facebook"); + } + + private function _shareTwitter(event:MouseEvent):void + { + trace("Implement share through twitter"); + } + + private function _close(event:MouseEvent):void + { + closeButton.removeEventListener(MouseEvent.CLICK, _close); + _dialogPopUp.close(); + } + } +} \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Skin.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Skin.mxml new file mode 100755 index 00000000..dbba17d5 --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_DialogBox_Skin.mxml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Help.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Help.mxml deleted file mode 100755 index a400e4b5..00000000 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Help.mxml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_ImageImport_Control.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_ImageImport_Control.mxml index ec65e027..2009fb89 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_ImageImport_Control.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_ImageImport_Control.mxml @@ -9,8 +9,12 @@ *http://mozilla.org/MPL/2.0/. --> + xmlns:s="library://ns.adobe.com/flex/spark" + backgroundColor="{KSketchGlobals.COLOR_WHITE}" + backgroundAlpha="{KSketchGlobals.ALPHA_06}" + creationComplete="_onCreateHandler()" + initialize="_initStyle()" + xmlns:buttons="sg.edu.smu.ksketch2.canvas.components.buttons.*"> ; private var pointCommand:Vector.; private var touchPoint:Point = new Point(); @@ -77,6 +79,15 @@ _canvasView = canvas; } + public function _initStyle():void + { + okButton.init("OK"); + okButton.initSkin(); + + exitButton.init("Cancel"); + exitButton.initSkin(); + } + private function _onCreateHandler():void { this.removeEventListener(FlexEvent.CREATION_COMPLETE, _onCreateHandler); @@ -503,15 +514,15 @@ + color="{KSketchGlobals.COLOR_BLACK}" angle="{KSketchGlobals.ANGLE_50}" + alpha="{KSketchGlobals.ALPHA_06}" + strength="{KSketchGlobals.RECT_STRENGTH}" + blurX="{KSketchGlobals.RECT_BLURX}" + blurY="{KSketchGlobals.RECT_BLURY}"/> - + - + @@ -519,30 +530,30 @@ + paddingLeft="{EXTERNALPADDING}" paddingRight="{EXTERNALPADDING}" + paddingTop="{EXTERNALPADDING}" paddingBottom="{EXTERNALPADDING}"/> - - - - + width="{BUTTON_DIMENSIONS}" height="{BUTTON_DIMENSIONS}" + click="closeImageInsertion()"/> @@ -580,8 +591,8 @@ - - + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml deleted file mode 100755 index 79a7c42a..00000000 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_LogoutNotice.mxml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml index 2c73eaa8..f7d2f751 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_OverwriteSaveOptions.mxml @@ -9,7 +9,9 @@ *http://mozilla.org/MPL/2.0/. --> + xmlns:s="library://ns.adobe.com/flex/spark" + xmlns:buttons="sg.edu.smu.ksketch2.canvas.components.buttons.*" + backgroundAlpha="0" initialize="initStyle()"> + color="{KSketchGlobals.COLOR_BLACK}" angle="{KSketchGlobals.ANGLE_50}" + alpha="{KSketchGlobals.ALPHA_06}" + strength="{KSketchGlobals.RECT_STRENGTH}" + blurX="{KSketchGlobals.RECT_BLURX}" + blurY="{KSketchGlobals.RECT_BLURY}"/> - + - + - + - + - + - - + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml index 798311d6..f2ce9263 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_PopUp_Menu.mxml @@ -24,7 +24,7 @@ import sg.edu.smu.ksketch2.KSketch2; import sg.edu.smu.ksketch2.KSketchAssets; - import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchGlobals; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_CanvasView; import sg.edu.smu.ksketch2.canvas.controls.KInteractionControl; import sg.edu.smu.ksketch2.canvas.controls.interactors.KCanvasInteractorManager; @@ -38,6 +38,12 @@ public static const UP:int = 2; public static const DOWN:int = 3; + private var OFFSET:Number = 10 * KSketchGlobals.SCALE; + private var GAP:Number = 10 * KSketchGlobals.SCALE; + private var PADDING:Number = 5 * KSketchGlobals.SCALE; + private var LINE_GAP:Number = 5 * KSketchGlobals.SCALE; + private var LINE_STROKE:Number = 2 * KSketchGlobals.SCALE; + //Positioning variables private var _referenceComponent:UIComponent; private var _canvasOrigin:Point = new Point(); @@ -50,8 +56,7 @@ private var _canvasView:KSketch_CanvasView; private var _options:KSketch_Options; - private var _sharingOptions:KSketch_SharingOptions; - private var _help:KSketch_Help; + private var _dialogPopUp:KSketch_DialogBox_Skin; private var _saveOptions:KSketch_SaveOptions; private var _feedback:KSketch_Feedback_Message; @@ -66,9 +71,8 @@ * @ksketchInstance: The canvas's ksketch instance */ public function init(referenceComponent:UIComponent, canvasView:KSketch_CanvasView, optionsPanel:KSketch_Options, - sharingOptionsPanel:KSketch_SharingOptions, helpPanel:KSketch_Help,savePanel:KSketch_SaveOptions, - KSketchInstance:KSketch2, interactionControl:KInteractionControl, canvasControl:KCanvasInteractorManager, - feedback:KSketch_Feedback_Message):void + savePanel:KSketch_SaveOptions, KSketchInstance:KSketch2, interactionControl:KInteractionControl, + canvasControl:KCanvasInteractorManager, feedback:KSketch_Feedback_Message):void { _referenceComponent = referenceComponent; _canvasOrigin = referenceComponent.localToGlobal(_canvasOrigin); @@ -79,8 +83,6 @@ _interactionControl = interactionControl; _canvasControl = canvasControl; _options = optionsPanel; - _sharingOptions = sharingOptionsPanel; - _help = helpPanel; _feedback = feedback; if(savePanel) @@ -96,6 +98,8 @@ redoButton.initSkin(); optionButton.init(KSketchAssets.texture_options, KSketchAssets.texture_options_down, false); optionButton.initSkin(); + optSynphneButton.init(KSketchAssets.texture_options, KSketchAssets.texture_options_down, false); + optSynphneButton.initSkin(); helpButton.init(KSketchAssets.texture_help, KSketchAssets.texture_help_down, false); helpButton.initSkin(); @@ -105,10 +109,6 @@ shareButton.init(KSketchAssets.texture_share_android, KSketchAssets.texture_share_android_down, false); shareButton.initSkin(); - //debugButton.init(KSketchAssets.texture_debug, KSketchAssets.texture_debug_down); //DEBUG ENABLE - //debugButton.initSkin(); //DEBUG ENABLE - - if(_saveOptions) { newButton.visible = true; @@ -134,6 +134,18 @@ lassoToggle.initSkin(); _setPen(blackToggle, true); + + //KSKETCH-SYNPHNE + if(KSketch_CanvasView.isSynphne) + { + buttonContainer.removeElementAt(13); + buttonContainer.removeElementAt(12); + buttonContainer.removeElementAt(10); + buttonContainer.removeElementAt(4); + buttonContainer.removeElementAt(1); + } + else + buttonContainer.removeElementAt(11); } public function set position(value:int):void @@ -169,18 +181,18 @@ case UP: default: x = _canvasOrigin.x + (_referenceComponent.width/2) - (width/2); - y = _canvasOrigin.y + KSketchStyles.NUMBER_10; + y = _canvasOrigin.y + OFFSET; break; case DOWN: x = _canvasOrigin.x + (_referenceComponent.width/2) - (width/2); - y = _canvasOrigin.y + _referenceComponent.height - height - KSketchStyles.NUMBER_10; + y = _canvasOrigin.y + _referenceComponent.height - height - OFFSET; break; case LEFT: - x = _canvasOrigin.x + KSketchStyles.NUMBER_10; + x = _canvasOrigin.x + OFFSET; y = _canvasOrigin.y + (_referenceComponent.height/2) - (height/2); break; case RIGHT: - x = _canvasOrigin.x + _referenceComponent.width - width - KSketchStyles.NUMBER_10; + x = _canvasOrigin.x + _referenceComponent.width - width - OFFSET; y = _canvasOrigin.y + (_referenceComponent.height/2) - (height/2); break; } @@ -207,25 +219,25 @@ case blackToggle: KMultiTouchDrawInteractor.eraser = false; _canvasControl.lasso = false; - KDrawInteractor.penColor = KSketchStyles.COLOR_BLACK; + KDrawInteractor.penColor = KSketchGlobals.COLOR_BLACK; selectedTool = "Black Pen"; break; case blueToggle: KMultiTouchDrawInteractor.eraser = false; _canvasControl.lasso = false; - KDrawInteractor.penColor = KSketchStyles.COLOR_BLUE; + KDrawInteractor.penColor = KSketchGlobals.COLOR_BLUE; selectedTool = "Blue Pen"; break; case redToggle: KMultiTouchDrawInteractor.eraser = false; _canvasControl.lasso = false; - KDrawInteractor.penColor = KSketchStyles.COLOR_RED; + KDrawInteractor.penColor = KSketchGlobals.COLOR_RED; selectedTool = "Red Pen"; break; case greenToggle: KMultiTouchDrawInteractor.eraser = false; _canvasControl.lasso = false; - KDrawInteractor.penColor = KSketchStyles.COLOR_GREEN; + KDrawInteractor.penColor = KSketchGlobals.COLOR_GREEN; selectedTool = "Green Pen"; break; case lassoToggle: @@ -391,18 +403,10 @@ */ private function _openSharingOptions():void { - //LOG - _KSketch.logCounter ++; - var log:XML = ; - var date:Date = new Date(); - log.@category = "Pop Up Menu"; - log.@type = "Open Sharing Option Box"; - //trace("ACTION " + _KSketch.logCounter + ": Open option box"); - KSketch2.log.appendChild(log); - - KSketch_CanvasView.tracker.trackPageview( "/popupmenu/openOptions" ); - _sharingOptions.open(_canvasView,true); - PopUpManager.centerPopUp(_sharingOptions); + _dialogPopUp = new KSketch_DialogBox_Skin(); + _dialogPopUp.init(null, _canvasView, this, null, "Share"); + _dialogPopUp.open(_canvasView,true); + PopUpManager.centerPopUp(_dialogPopUp); } /** @@ -410,18 +414,10 @@ */ private function _openHelp():void { - //LOG - _KSketch.logCounter ++; - var log:XML = ; - var date:Date = new Date(); - log.@category = "Pop Up Menu"; - log.@type = "Open Help"; - //trace("ACTION " + _KSketch.logCounter + ": Open help"); - KSketch2.log.appendChild(log); - - KSketch_CanvasView.tracker.trackPageview( "/popupmenu/openOptions" ); - _help.open(_canvasView,true); - PopUpManager.centerPopUp(_help); + _dialogPopUp = new KSketch_DialogBox_Skin(); + _dialogPopUp.init(null, _canvasView, this, null, "Help"); + _dialogPopUp.open(_canvasView,true); + PopUpManager.centerPopUp(_dialogPopUp); } /** @@ -446,151 +442,117 @@ PopUpManager.centerPopUp(newImageWindow); } - private function _viewLog():void - { - - trace(_KSketch.sceneXML.toString()); - } ]]> + color="{KSketchGlobals.COLOR_BLACK}" angle="{KSketchGlobals.ANGLE_50}" + alpha="{KSketchGlobals.ALPHA_06}" + strength="{KSketchGlobals.RECT_STRENGTH}" + blurX="{KSketchGlobals.RECT_BLURX}" + blurY="{KSketchGlobals.RECT_BLURY}"/> - + - + + horizontalGap="{GAP}" verticalGap="{GAP}" + paddingLeft="{PADDING}" paddingRight="{PADDING}" + paddingBottom="{PADDING}" paddingTop="{PADDING}"/> - - - - - + - + - + - + - + - + - + - - + + - - - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml index 55c99c3e..fd741860 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SaveOptions.mxml @@ -9,7 +9,9 @@ *http://mozilla.org/MPL/2.0/. --> + xmlns:s="library://ns.adobe.com/flex/spark" + xmlns:buttons="sg.edu.smu.ksketch2.canvas.components.buttons.*" + backgroundAlpha="0" initialize="_initStyle()"> + color="{KSketchGlobals.COLOR_BLACK}" angle="{KSketchGlobals.ANGLE_50}" + alpha="{KSketchGlobals.ALPHA_06}" + strength="{KSketchGlobals.RECT_STRENGTH}" + blurX="{KSketchGlobals.RECT_BLURX}" + blurY="{KSketchGlobals.RECT_BLURY}"/> - + - + - + - + - + - + - - - + + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SharingOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SharingOptions.mxml deleted file mode 100755 index ef3a6754..00000000 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SharingOptions.mxml +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml deleted file mode 100755 index 1df605ae..00000000 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_SyncOptions.mxml +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - - - - - 1) - sketchNo = syncSketchArr.length + " sketches on this device that have"; - else - sketchNo = "1 sketch on this device that has"; - - var accName:String = currentUser.u_realname; - syncLabel.text = "You have " + sketchNo + " not been saved\nto your '" + accName + "' account. Do you want to save them now?" ; - - _counterSave = 0; - } - - public function save():void - { - _homeView.userData.resolveConflict = 1; - - for(var i:int=0; i - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Double.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Double.mxml index 338169d9..989d0fae 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Double.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Double.mxml @@ -24,7 +24,7 @@ import sg.edu.smu.ksketch2.KSketch2; import sg.edu.smu.ksketch2.KSketchAssets; - import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchGlobals; import sg.edu.smu.ksketch2.canvas.components.timebar.KSketch_TickMark_Control; import sg.edu.smu.ksketch2.canvas.components.timebar.KSketch_TimeControl; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_CanvasView; @@ -37,9 +37,11 @@ import sg.edu.smu.ksketch2.utils.KSelection; public static const CONTROLPOINT:int = 0; - public static const KEYFRAME:int = 1; + public static const KEYFRAME:int = 1; public static var mode: int = KEYFRAME; + private var PADDING:Number = 7.5 * KSketchGlobals.SCALE; + private var _KSketch:KSketch2; private var _interactionControl:KInteractionControl; private var _timeControl:KSketch_TimeControl; @@ -150,12 +152,12 @@ clearButton.init(KSketchAssets.texture_clear , KSketchAssets.texture_clear_down, false); clearButton.initSkin(); - leftFrame.init(_KSketch, _interactionControl, _timeControl, KSketch_Timebar_Button_Double.LEFT); + leftFrame.init(_KSketch, _timeControl, KSketch_TimebarButton.LEFT); leftFrame.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDownHandler_prev); leftFrame.addEventListener(MouseEvent.ROLL_OUT, _mouseUpHandler); leftFrame.addEventListener(MouseEvent.MOUSE_UP, _mouseUpHandler); - rightFrame.init(_KSketch, _interactionControl, _timeControl, KSketch_Timebar_Button_Double.RIGHT); + rightFrame.init(_KSketch, _timeControl, KSketch_TimebarButton.RIGHT); rightFrame.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDownHandler_next); rightFrame.addEventListener(MouseEvent.ROLL_OUT, _mouseUpHandler); rightFrame.addEventListener(MouseEvent.MOUSE_UP, _mouseUpHandler); @@ -423,17 +425,17 @@ - + + radiusX="{KSketchGlobals.RECT_RADIUSX}" + radiusY="{KSketchGlobals.RECT_RADIUSY}"> - + @@ -443,42 +445,32 @@ - + + paddingTop="{PADDING}" paddingBottom="{PADDING}" + paddingLeft="{PADDING}" paddingRight="{PADDING}"/> - - - - - @@ -488,7 +480,7 @@ - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Single.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Single.mxml index 321a5f32..f9fb00ba 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Single.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Context_Single.mxml @@ -23,11 +23,13 @@ import spark.components.Application; import sg.edu.smu.ksketch2.KSketch2; - import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchGlobals; import sg.edu.smu.ksketch2.canvas.components.timebar.KSketch_TimeControl; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_CanvasView; import sg.edu.smu.ksketch2.canvas.controls.KInteractionControl; + private var PADDING:Number = 7.5 * KSketchGlobals.SCALE; + private var _KSketch:KSketch2; private var _interactionControl:KInteractionControl; private var _timeControl:KSketch_TimeControl; @@ -46,8 +48,9 @@ private function _initButtons():void { this.removeEventListener(FlexEvent.INITIALIZE, _initButtons); - leftFrame.init(_KSketch, _timeControl, KSketch_Timebar_Button_Single.LEFT); - rightFrame.init(_KSketch, _timeControl, KSketch_Timebar_Button_Single.RIGHT); + + leftFrame.init(_KSketch, _timeControl, KSketch_TimebarButton.LEFT); + rightFrame.init(_KSketch, _timeControl, KSketch_TimebarButton.RIGHT); leftFrame.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDownHandler_prev); leftFrame.addEventListener(MouseEvent.ROLL_OUT, _mouseUpHandler); @@ -135,27 +138,23 @@ - + - + + paddingTop="{PADDING}" paddingBottom="{PADDING}" + paddingLeft="{PADDING}" paddingRight="{PADDING}"/> - - diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Magnifier.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Magnifier.mxml index 9765d402..e0762ba4 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Magnifier.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Timebar_Magnifier.mxml @@ -9,7 +9,8 @@ *http://mozilla.org/MPL/2.0/. --> + xmlns:s="library://ns.adobe.com/flex/spark" + backgroundAlpha="0"> - + - + @@ -213,16 +225,16 @@ + paddingTop="{CONTENT_PADDING}" paddingBottom="{CONTENT_PADDING}" + paddingLeft="{CONTENT_PADDING}" paddingRight="{CONTENT_PADDING}"/> - + - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Widget_ContextMenu.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Widget_ContextMenu.mxml index e7d12b75..b77c3541 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Widget_ContextMenu.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Widget_ContextMenu.mxml @@ -24,7 +24,7 @@ import sg.edu.smu.ksketch2.KSketch2; import sg.edu.smu.ksketch2.KSketchAssets; - import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchGlobals; import sg.edu.smu.ksketch2.canvas.controls.KInteractionControl; import sg.edu.smu.ksketch2.canvas.controls.interactors.widgetstates.KWidgetInteractorManager; import sg.edu.smu.ksketch2.model.data_structures.KModelObjectList; @@ -32,6 +32,9 @@ import sg.edu.smu.ksketch2.operators.operations.KCompositeOperation; import sg.edu.smu.ksketch2.utils.KSelection; + private var PADDING_SMALL:Number = 5 * KSketchGlobals.SCALE; + private var PADDING_LARGE:Number = 7.5 * KSketchGlobals.SCALE; + private var _KSketch:KSketch2; private var _widgetManager:KWidgetInteractorManager; private var _interactionControl:KInteractionControl; @@ -205,49 +208,43 @@ - + - + - + - + + paddingLeft="{PADDING_SMALL}" + paddingRight="{PADDING_SMALL}" + paddingTop="{PADDING_SMALL}" + paddingBottom="{PADDING_SMALL}"/> - - - diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TickMark_Control.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TickMark_Control.as index e16fa813..93fb6b7e 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TickMark_Control.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TickMark_Control.as @@ -13,7 +13,7 @@ package sg.edu.smu.ksketch2.canvas.components.timebar import spark.components.Group; import sg.edu.smu.ksketch2.KSketch2; - import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchGlobals; import sg.edu.smu.ksketch2.canvas.controls.KInteractionControl; import sg.edu.smu.ksketch2.events.KSketchEvent; import sg.edu.smu.ksketch2.events.KTimeChangedEvent; @@ -36,6 +36,9 @@ package sg.edu.smu.ksketch2.canvas.components.timebar public class KSketch_TickMark_Control { public static const GRAB_THRESHOLD:Number = 10; + private static const CONTROLPOINT:Number = 3; + private static const KEYFRAME:Number = 7; + public var moveLeft:Boolean = false; private var _KSketch:KSketch2; @@ -230,7 +233,7 @@ package sg.edu.smu.ksketch2.canvas.components.timebar //Rigth now it is drawing if and only if there is only 1 object selected if(_interactionControl.selection && _interactionControl.selection.objects.length() == 1) { - _timeControl.unselectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.NUMBER_04, KSketchStyles.COLOR_GREY_LIGHT); + _timeControl.unselectedTickMarkDisplay.graphics.lineStyle(CONTROLPOINT, KSketchGlobals.COLOR_GREY_LIGHT); drawTarget = _timeControl.activityDisplay; @@ -254,12 +257,12 @@ package sg.edu.smu.ksketch2.canvas.components.timebar if(firstFrame) { if(firstFrame.passthrough) - _timeControl.selectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.NUMBER_03, KSketchStyles.COLOR_RED_DARK); + _timeControl.selectedTickMarkDisplay.graphics.lineStyle(CONTROLPOINT, KSketchGlobals.COLOR_RED_DARK); else - _timeControl.selectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.NUMBER_07, KSketchStyles.COLOR_BLACK); + _timeControl.selectedTickMarkDisplay.graphics.lineStyle(KEYFRAME, KSketchGlobals.COLOR_BLACK); } else - _timeControl.selectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.NUMBER_03, KSketchStyles.COLOR_RED_DARK); + _timeControl.selectedTickMarkDisplay.graphics.lineStyle(CONTROLPOINT, KSketchGlobals.COLOR_RED_DARK); if(drawTarget.x <= currentX) { @@ -273,7 +276,7 @@ package sg.edu.smu.ksketch2.canvas.components.timebar { if((currentMarker.key as ISpatialKeyFrame).hasActivityAtTime()) { - drawTarget.graphics.beginFill(KSketchStyles.COLOR_RED, KSketchStyles.ALPHA_06); + drawTarget.graphics.beginFill(KSketchGlobals.COLOR_RED, KSketchGlobals.ALPHA_06); drawTarget.graphics.drawRect(currentMarker.prev.x, 0, currentMarker.x - currentMarker.prev.x, drawTarget.height); drawTarget.graphics.endFill(); } @@ -285,8 +288,8 @@ package sg.edu.smu.ksketch2.canvas.components.timebar } else { - _timeControl.unselectedTickMarkDisplay.alpha = KSketchStyles.ALPHA_1; - _timeControl.unselectedTickMarkDisplay.graphics.lineStyle(KSketchStyles.NUMBER_03, KSketchStyles.COLOR_GREY_LIGHT); + _timeControl.unselectedTickMarkDisplay.alpha = KSketchGlobals.ALPHA_1; + _timeControl.unselectedTickMarkDisplay.graphics.lineStyle(CONTROLPOINT, KSketchGlobals.COLOR_GREY_LIGHT); } //Draw unselected markers diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeControl.as index a8c01139..1a10e81c 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeControl.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeControl.as @@ -21,7 +21,7 @@ package sg.edu.smu.ksketch2.canvas.components.timebar import mx.events.FlexEvent; import sg.edu.smu.ksketch2.KSketch2; - import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchGlobals; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_Timebar_Context_Double; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_Timebar_Context_Single; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_Timebar_Magnifier; @@ -49,6 +49,12 @@ package sg.edu.smu.ksketch2.canvas.components.timebar private const CLICK_TIME:int = 300; private const DOUBLE_CLICK_SPEED:int = 300; + private var PADDING:Number = 15 * KSketchGlobals.SCALE; + private var SCREENLIMIT_DOUBLETAP_IOS_X:Number = 875 * KSketchGlobals.SCALE; + private var SCREENLIMIT_DOUBLETAP_AND_X:Number = 1100 * KSketchGlobals.SCALE; + private var SCREENLIMIT_SINGLETAP_LOWER_X:Number = 960 * KSketchGlobals.SCALE; + private var SCREENLIMIT_SINGLETAP_UPPER_X:Number = 1200 * KSketchGlobals.SCALE; + protected var _KSketch:KSketch2; protected var _tickmarkControl:KSketch_TickMark_Control; protected var _transitionHelper:KWidgetInteractorManager; @@ -84,6 +90,9 @@ package sg.edu.smu.ksketch2.canvas.components.timebar private var _xPrev:Number = -1; private var _xCurr:Number = -1; + //KSKETCH-SYNPHNE + private var _playRepeat:Boolean = false; + public function KSketch_TimeControl() { super(); @@ -251,17 +260,17 @@ package sg.edu.smu.ksketch2.canvas.components.timebar if(Capabilities.version.indexOf('IOS') > -1) { - if(_contextDouble.x >= KSketchStyles.NUMBER_875) - _contextDouble.x = KSketchStyles.NUMBER_875; + if(_contextDouble.x >= SCREENLIMIT_DOUBLETAP_IOS_X) + _contextDouble.x = SCREENLIMIT_DOUBLETAP_IOS_X; } else { - if(_contextDouble.x >= KSketchStyles.NUMBER_1100) - _contextDouble.x = KSketchStyles.NUMBER_1100; + if(_contextDouble.x >= SCREENLIMIT_DOUBLETAP_AND_X) + _contextDouble.x = SCREENLIMIT_DOUBLETAP_AND_X; } _contextDouble.position = position; - _contextDouble.y = contentGroup.localToGlobal(new Point()).y + contentGroup.y - KSketchStyles.NUMBER_15; + _contextDouble.y = contentGroup.localToGlobal(new Point()).y + contentGroup.y - PADDING; clearTimeout(mouseTimeout); mouseTimeout = "undefined"; @@ -284,17 +293,12 @@ package sg.edu.smu.ksketch2.canvas.components.timebar _contextSingle.open(contentGroup,true); _contextSingle.x = _magnifier.x; - if(_contextSingle.x >= KSketchStyles.NUMBER_960) - { - _contextSingle.x = KSketchStyles.NUMBER_960; - } - else - { - if(_contextSingle.x >= KSketchStyles.NUMBER_1200) - _contextSingle.x = KSketchStyles.NUMBER_1200; - } + if(_contextSingle.x >= SCREENLIMIT_SINGLETAP_LOWER_X && _contextSingle.x <= SCREENLIMIT_SINGLETAP_UPPER_X) + _contextSingle.x = SCREENLIMIT_SINGLETAP_LOWER_X; + else if(_contextSingle.x >= SCREENLIMIT_SINGLETAP_UPPER_X) + _contextSingle.x = SCREENLIMIT_SINGLETAP_UPPER_X; - _contextSingle.y = contentGroup.localToGlobal(new Point()).y + contentGroup.y - KSketchStyles.NUMBER_100; + _contextSingle.y = contentGroup.localToGlobal(new Point()).y + contentGroup.y - 100; } mouseTimeout = "undefined"; @@ -553,6 +557,16 @@ package sg.edu.smu.ksketch2.canvas.components.timebar this.dispatchEvent(new Event(KSketch_TimeControl.PLAY_STOP)); _KSketch.removeEventListener(KTimeChangedEvent.EVENT_TIME_CHANGED, _transitionHelper.updateMovingWidget); _KSketch.addEventListener(KTimeChangedEvent.EVENT_TIME_CHANGED, _transitionHelper.updateWidget); + + trace("play repeat says... " + _playRepeat); + //KSKETCH-SYNPHNE + if(_playRepeat) + { + play(true); + trace("playing..."); + } + + } /** @@ -643,5 +657,16 @@ package sg.edu.smu.ksketch2.canvas.components.timebar var newValue:int = Math.floor(value/10) * 10; return newValue; } + + //KSKETCH-SYNPHNE + public function set playRepeat(value:Boolean):void + { + _playRepeat = value; + } + + public function get playRepeat():Boolean + { + return _playRepeat; + } } } \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeLabel.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeLabel.mxml index f1e32f92..3a1205d8 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeLabel.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeLabel.mxml @@ -12,7 +12,7 @@ xmlns:s="library://ns.adobe.com/flex/spark" width="100%"> @@ -20,7 +20,7 @@ - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeLabelBar.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeLabelBar.mxml index f3ed20d0..a01d7949 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeLabelBar.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeLabelBar.mxml @@ -36,13 +36,6 @@ } } - /* - disable on/off function for release - private function _toggleLabelVisibility():void - { - labels.visible = onButton.on; - }*/ - private function _updateLabels(event:Event):void { var maxTime:Number = _timeControl.maximum/1000; @@ -86,14 +79,6 @@ ]]> - diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeSkip_Button.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeSkip_Button.mxml index 56693112..9f00f83c 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeSkip_Button.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeSkip_Button.mxml @@ -24,6 +24,7 @@ import sg.edu.smu.ksketch2.KSketch2; import sg.edu.smu.ksketch2.KSketchAssets; + import sg.edu.smu.ksketch2.KSketchGlobals; import sg.edu.smu.ksketch2.canvas.components.buttons.KSketch_Canvas_Button_Skin; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_CanvasView; @@ -35,12 +36,16 @@ private var _timeControl:KSketch_TimeControl; private var _tapGesture:TapGesture; + + //KSKETCH-SYNPHNE + private var _canvasView:KSketch_CanvasView; - public function init(KSketchInstance:KSketch2, timeControl:KSketch_TimeControl, type:int):void + public function init(KSketchInstance:KSketch2, canvas:KSketch_CanvasView, timeControl:KSketch_TimeControl, type:int):void { _KSketch = KSketchInstance; _timeControl = timeControl; _type = type; + _canvasView = canvas; _tapGesture = new TapGesture(this); _tapGesture.maxTapDuration = 200; @@ -56,7 +61,14 @@ return; if(KSketch_TimeControl.isPlaying) + { + //KSKETCH-SYNPHNE + _timeControl.playRepeat = false; + _canvasView.setAnimationPlaying(false); + _timeControl.stop(); + } + var i:int; var length:int = _timeControl.timings.length; @@ -139,6 +151,7 @@ this.removeEventListener(FlexEvent.INITIALIZE, _initSkin); var textureControl:Image = (skin as KSketch_Canvas_Button_Skin).texture; + skin.addEventListener(StateChangeEvent.CURRENT_STATE_CHANGE, _onStateChange); if(_type == LEFT) diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeSlider.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeSlider.mxml index 4b170cd4..0b49a73a 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeSlider.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/timebar/KSketch_TimeSlider.mxml @@ -11,19 +11,22 @@ - + - + @@ -32,7 +35,7 @@ - + @@ -41,12 +44,12 @@ - + - + @@ -55,20 +58,20 @@ - + - + - + - + - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/transformWidget/KSketch_Widget_Component.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/transformWidget/KSketch_Widget_Component.mxml index 543c5dde..f23bf3d2 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/transformWidget/KSketch_Widget_Component.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/transformWidget/KSketch_Widget_Component.mxml @@ -14,7 +14,7 @@ - + - + @@ -46,7 +46,7 @@ c0.069,0.07,17.616,17.689,17.616,17.689l-9.786,9.648l53.301,4.025l-4.026-53.162l-10.062,10.062 c0,0-15.068-14.859-17.983-17.773C80.682,67.002,72.691,76.514,58.274,86.744z"> - + @@ -56,7 +56,7 @@ c-0.07-0.07-17.891-17.751-17.891-17.751l-9.648,9.787l-4.025-53.302l53.162,4.025l-10.063,10.063 c0,0,15.151,15.086,18.065,18.001C-72.049-78.626-79.717-70.228-87.84-58.724z"> - + @@ -66,35 +66,35 @@ c-0.069,0.068-17.988,18.09-17.988,18.09l9.787,9.648l-53.3,4.025l4.024-53.162l10.063,10.062c0,0,14.729-14.674,17.644-17.588 C-79.598,70.086-71.646,79.25-57.689,88.227z"> - + - + - + - + - + - + - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index 6400586c..25e71b97 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -15,8 +15,8 @@ xmlns:view="sg.edu.smu.ksketch2.canvas.components.view.*" xmlns:buttons="sg.edu.smu.ksketch2.canvas.components.buttons.*" xmlns:popup="sg.edu.smu.ksketch2.canvas.components.popup.*" - initialize="init(true)" - addedToStage="KSketchStyles.setView();" + initialize="_init(true)" + addedToStage="_scale()" destructionPolicy="auto" > @@ -24,28 +24,35 @@ @@ -495,47 +507,50 @@ - + - + - + - + + width="{HOME_LOGO_WIDTH}" + height="{HOME_LOGO_HEIGHT}"/> - - + + - - + + - - + + - - + + @@ -549,22 +564,24 @@ - + - + - + - + - + @@ -591,7 +608,7 @@ - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml index 4d0684b3..dd28d250 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_IconItemRenderer.mxml @@ -11,8 +11,8 @@ - - + + @@ -29,10 +29,16 @@ import mx.events.FlexEvent; import mx.utils.Base64Decoder; - import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchGlobals; import sg.edu.smu.ksketch2.canvas.KSketch_CanvasView_Preferences; import sg.edu.smu.ksketch2.utils.KSwipeEvent; + private var RENDERER_LIST_HEIGHT:Number = 120 * KSketchGlobals.SCALE; + private var RENDERER_LIST_PADDING:Number = 15 * KSketchGlobals.SCALE; + private var RENDERER_IMAGE_WIDTH:Number = 160 * KSketchGlobals.SCALE; + private var RENDERER_IMAGE_HEIGHT:Number = 90 * KSketchGlobals.SCALE; + private var RENDERER_LINE:Number = 1000 * KSketchGlobals.SCALE; + private var _myIcon:Bitmap; private var _oldSelection:String; private var _loader:Loader @@ -41,7 +47,7 @@ public static var selectedSketchId:String; public static var selectedVersion:String; public static var openActionBar:Boolean = false; - + protected function state1_enterStateHandler(event:FlexEvent):void { bc.setStyle("backgroundColor", 0xff0018); } @@ -52,7 +58,7 @@ //set name and date properties sketchName.text = value.fileName; - sketchName.setStyle("fontSize", KSketchStyles.NUMBER_20); + sketchName.setStyle("fontSize", KSketchGlobals.FONT_SIZE_20); sketchDate.text = value.created; sketchId.text = value.sketchId; sketchVersion.text = value.version; @@ -61,7 +67,7 @@ border.graphics.lineStyle(2, 0x990000, .75); border.graphics.beginFill(0x00FF00); border.graphics.moveTo(0, 0); - border.graphics.lineTo(KSketchStyles.NUMBER_1000, 0); + border.graphics.lineTo(RENDERER_LINE, 0); //decode for Image var decoder:Base64Decoder = new Base64Decoder(); diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_ListActions.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_ListActions.mxml index ed9459f2..12d9df22 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_ListActions.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView_ListActions.mxml @@ -1,7 +1,7 @@ @@ -9,12 +9,15 @@ import mx.events.FlexEvent; import sg.edu.smu.ksketch2.KSketchAssets; - import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchGlobals; import sg.edu.smu.ksketch2.utils.KSwipeEvent; - private function initStyle():void + private var HOME_LISTBUTTON_WIDTH:Number = 74 * KSketchGlobals.SCALE; + private var HOME_LISTBUTTON_HEIGHT:Number = 120 * KSketchGlobals.SCALE; + + private function _initStyle():void { - this.removeEventListener(FlexEvent.INITIALIZE, initStyle); + this.removeEventListener(FlexEvent.INITIALIZE, _initStyle); logButton.init(KSketchAssets.actionList_log , KSketchAssets.actionList_log); saveButton.init(KSketchAssets.actionList_save , KSketchAssets.actionList_save); @@ -41,8 +44,8 @@ ]]> - - - + + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LicenseAggrement.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LicenseAggrement.mxml index 27f14ced..735ad061 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LicenseAggrement.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LicenseAggrement.mxml @@ -11,27 +11,36 @@ + initialize="_init()"> - + @@ -70,8 +80,8 @@ - - + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LogView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LogView.mxml index 1b531c8c..ddbe2190 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LogView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_LogView.mxml @@ -18,7 +18,7 @@ Date: Wed, 12 Aug 2015 07:22:21 +0800 Subject: [PATCH 36/37] Integrate Synphne features --- .../src/assets/Star_Empty_KSketch.png | Bin 0 -> 1659 bytes KSKInterface/src/assets/Star_Fill_KSketch.png | Bin 0 -> 1763 bytes .../src/sg/edu/smu/ksketch2/KSketchAssets.as | 25 + .../canvas/KSketch_CanvasView_Preferences.as | 42 ++ .../components/popup/KSketch_Alert.mxml | 60 +++ .../popup/KSketch_Feedback_Message.mxml | 6 +- .../popup/KSketch_InstructionsBox.mxml | 328 ++++++++++++ .../components/popup/KSketch_Options.mxml | 388 ++++++++++---- .../components/view/KSketch_CanvasView.mxml | 409 ++++++++++++--- .../canvas/controls/KActivityControl.as | 476 ++++++++++++++++++ .../canvas/controls/KActivityResultControl.as | 320 ++++++++++++ .../interactors/KCanvasInteractorManager.as | 124 ++++- .../ksketch2/model/objects/KInstructions.as | 83 +++ .../edu/smu/ksketch2/model/objects/KResult.as | 100 ++++ 14 files changed, 2177 insertions(+), 184 deletions(-) create mode 100644 KSKInterface/src/assets/Star_Empty_KSketch.png create mode 100644 KSKInterface/src/assets/Star_Fill_KSketch.png create mode 100755 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Alert.mxml create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_InstructionsBox.mxml create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KActivityControl.as create mode 100644 KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KActivityResultControl.as create mode 100644 KSKLibrary/src/sg/edu/smu/ksketch2/model/objects/KInstructions.as create mode 100644 KSKLibrary/src/sg/edu/smu/ksketch2/model/objects/KResult.as diff --git a/KSKInterface/src/assets/Star_Empty_KSketch.png b/KSKInterface/src/assets/Star_Empty_KSketch.png new file mode 100644 index 0000000000000000000000000000000000000000..3c9e9e20ccb8a1a3865deb5fffbcfc3570544e38 GIT binary patch literal 1659 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 FV1jB*NFD$H literal 0 HcmV?d00001 diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchAssets.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchAssets.as index 1dde4ff4..7a7b3575 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchAssets.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchAssets.as @@ -383,5 +383,30 @@ package sg.edu.smu.ksketch2 [Embed("/assets/Button_ActionList_Save.png")] [Bindable] public static var actionList_save:Class; + + //KSKETCH-SYNPHNE + [Embed("assets/Button_Texture_Instructions_1.png")] + [Bindable] + public static var texture_instructions_1:Class; + + [Embed("assets/Button_Texture_Instructions_2.png")] + [Bindable] + public static var texture_instructions_2:Class; + + [Embed("assets/Button_Texture_Instructions_Next.png")] + [Bindable] + public static var texture_instructions_next:Class; + + [Embed("assets/Button_Texture_Instructions_Prev.png")] + [Bindable] + public static var texture_instructions_prev:Class; + + [Embed("assets/Star_Empty_KSketch.png")] + [Bindable] + public static var star_empty:Class; + + [Embed("assets/Star_Fill_KSketch.png")] + [Bindable] + public static var star_fill:Class; } } \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_CanvasView_Preferences.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_CanvasView_Preferences.as index b920d697..4b8615ab 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_CanvasView_Preferences.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/KSketch_CanvasView_Preferences.as @@ -91,6 +91,15 @@ package sg.edu.smu.ksketch2.canvas */ public static const MOBILE_OFF:String = "MOBILE_OFF"; + //KSKETCH-SYNPHNE + public static const DEFAULT_DURATION:int = 120; + public static const DEFAULT_ACCURACY:int = 100; + public static const TAPANYWHERE_ON:String = "TAPANYWHERE_ON"; + public static const TAPANYWHERE_OFF:String = "TAPANYWHERE_OFF"; + public static const DIFFICULTY_EASY:String = "DIFFICULTY_EASY"; + public static const DIFFICULTY_MEDIUM:String = "DIFFICULTY_MEDIUM"; + public static const DIFFICULTY_HARD:String = "DIFFICULTY_HARD"; + /** * Gets the shared object. * @@ -284,5 +293,38 @@ package sg.edu.smu.ksketch2.canvas prefs.data.mobileEnabled = value; prefs.flush(); } + + //KSKETCH-SYNPHNE + public static function get tapAnywhere():String + { + var prefs:SharedObject = SharedObject.getLocal(SHARED_OBJECT_ID); + if(prefs.data.tapAnywhere) + return prefs.data.tapAnywhere; + else + return TAPANYWHERE_ON; + } + + public static function set tapAnywhere(value:String):void + { + var prefs:SharedObject = SharedObject.getLocal(SHARED_OBJECT_ID); + prefs.data.tapAnywhere = value; + prefs.flush(); + } + + public static function get duration():int + { + var prefs:SharedObject = SharedObject.getLocal(SHARED_OBJECT_ID); + if(prefs.data.duration_time) + return prefs.data.duration_time; + else + return DEFAULT_DURATION; + } + + public static function set duration(value:int):void + { + var prefs:SharedObject = SharedObject.getLocal(SHARED_OBJECT_ID); + prefs.data.duration_time = value; + prefs.flush(); + } } } \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Alert.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Alert.mxml new file mode 100755 index 00000000..e6bb8b12 --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Alert.mxml @@ -0,0 +1,60 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Feedback_Message.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Feedback_Message.mxml index 36ae3689..26e99a26 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Feedback_Message.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Feedback_Message.mxml @@ -14,7 +14,7 @@ - \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_InstructionsBox.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_InstructionsBox.mxml new file mode 100644 index 00000000..4ebb3521 --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_InstructionsBox.mxml @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Options.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Options.mxml index 89012d6c..9bc94d6b 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Options.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/popup/KSketch_Options.mxml @@ -9,33 +9,75 @@ *http://mozilla.org/MPL/2.0/. --> + xmlns:s="library://ns.adobe.com/flex/spark" + xmlns:buttons="sg.edu.smu.ksketch2.canvas.components.buttons.*" + backgroundAlpha="0" + initialize="_initStyle()" + creationComplete="_initContent()"> + color="{KSketchGlobals.COLOR_BLACK}" angle="{KSketchGlobals.ANGLE_50}" + alpha="{KSketchGlobals.ALPHA_06}" + strength="{KSketchGlobals.RECT_STRENGTH}" + blurX="{KSketchGlobals.RECT_BLURX}" + blurY="{KSketchGlobals.RECT_BLURY}"/> - + - + - + - + - - - - - - - - - - - - - - - - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml index 429e4c93..b72150c8 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml @@ -16,7 +16,7 @@ xmlns:transformWidget2="sg.edu.smu.ksketch2.canvas.components.transformWidget.*" xmlns:timebar="sg.edu.smu.ksketch2.canvas.components.timebar.*" addedToStage="initializeTrackerForWeb()" - initialize="_initCanvas(false)" + initialize="_initCanvas(false, true)" add="_checkForImageData()" creationPolicy="all" destructionPolicy="auto" @@ -27,11 +27,14 @@ import com.google.analytics.AnalyticsTracker; import com.google.analytics.GATracker; + import flash.utils.getTimer; + import mx.collections.ArrayCollection; import mx.collections.Sort; import mx.collections.SortField; import mx.events.FlexEvent; import mx.graphics.codec.JPEGEncoder; + import mx.managers.PopUpManager; import mx.utils.Base64Encoder; import spark.events.ViewNavigatorEvent; @@ -40,20 +43,26 @@ import data.KSketch_DataListItem; import sg.edu.smu.ksketch2.KSketch2; - import sg.edu.smu.ksketch2.KSketchStyles; + import sg.edu.smu.ksketch2.KSketchAssets; + import sg.edu.smu.ksketch2.KSketchGlobals; + import sg.edu.smu.ksketch2.canvas.KSketch_CanvasView_Preferences; + import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_Alert; + import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_DialogBox_Skin; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_Feedback_Message; - import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_Help; + import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_InstructionsBox; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_Options; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_OverwriteSaveOptions; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_PopUp_Menu; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_SaveOptions; - import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_SharingOptions; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_Timebar_Context_Double; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_Timebar_Context_Single; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_Timebar_Magnifier; import sg.edu.smu.ksketch2.canvas.components.timebar.KSketch_TickMark_Control; import sg.edu.smu.ksketch2.canvas.components.timebar.KSketch_TimeSkip_Button; import sg.edu.smu.ksketch2.canvas.components.transformWidget.KSketch_Widget_Component; + import sg.edu.smu.ksketch2.canvas.components.view.objects.IObjectView; + import sg.edu.smu.ksketch2.canvas.controls.KActivityControl; + import sg.edu.smu.ksketch2.canvas.controls.KActivityResultControl; import sg.edu.smu.ksketch2.canvas.controls.KInteractionControl; import sg.edu.smu.ksketch2.canvas.controls.KSketch_CacheControl; import sg.edu.smu.ksketch2.canvas.controls.interactors.KCanvasInteractorManager; @@ -61,12 +70,23 @@ import sg.edu.smu.ksketch2.events.KSketchEvent; import sg.edu.smu.ksketch2.model.data_structures.KModelObjectList; import sg.edu.smu.ksketch2.model.objects.KGroup; + import sg.edu.smu.ksketch2.model.objects.KInstructions; import sg.edu.smu.ksketch2.model.objects.KObject; import sg.edu.smu.ksketch2.operators.operations.KCompositeOperation; import sg.edu.smu.ksketch2.utils.KIOEvent; public static const PLUG_IN:String = "PlugIn"; + private var DRAWINGSTAGE_BORDER:Number = 1 * KSketchGlobals.SCALE; + private var TIMEBAR_GAP:Number = 4 * KSketchGlobals.SCALE; + private var TIMEBAR_PADDING:Number = 5 * KSketchGlobals.SCALE; + private var SYNPHNE_PADDINGTOP:Number = 10 * KSketchGlobals.SCALE; + private var SYNPHNE_PADDINGRIGHT:Number = 5 * KSketchGlobals.SCALE; + private var SYNPHNE_TIMERLABEL_WIDTH:Number = 100 * KSketchGlobals.SCALE; + private var SYNPHNE_TIMERLABEL_HEIGHT:Number = 50 * KSketchGlobals.SCALE; + private var SYNPHNE_INSTRUCTIONS_WIDTH:Number = 50 * KSketchGlobals.SCALE; + private var SYNPHNE_INSTRUCTIONS_HEIGHT:Number = 50 * KSketchGlobals.SCALE; + [Bindable] public static var isPlayer:Boolean = false; @@ -96,11 +116,10 @@ public var _isNewSketch:Boolean = true; //Pop Ups + private var _dialogPopUp:KSketch_DialogBox_Skin; private var _feedbackPopUp:KSketch_Feedback_Message; private var _menuPopUp:KSketch_PopUp_Menu; private var _options:KSketch_Options; - private var _shareOptions:KSketch_SharingOptions; - private var _help:KSketch_Help; private var _saveOptions:KSketch_SaveOptions; private var _overwriteSaveOptions:KSketch_OverwriteSaveOptions; private var _magnifier:KSketch_Timebar_Magnifier; @@ -111,6 +130,21 @@ protected var persistanceManager:PersistenceManager = new PersistenceManager(); + //KSKETCH-SYNPHNE + private const TIMER_INTERVAL:int = 10; + public static var isSynphne:Boolean = false; + private var _t:Timer; + private var _timeTaken:int; + private var _baseTimer:int; + private var _timeDuration:int; + private var _isTiming:Boolean = false; + private var _kAlertBox:KSketch_Alert; + private var _instructionsBox:KSketch_InstructionsBox; + private var _resultControl:KActivityResultControl; + private var _activityControl:KActivityControl; + private var _kInstructions:KInstructions; + + //Starting up is hopefully done in the following stages //Should not depend on the events beingfired in the correct sequence all the time //addedToStage: _initCanvas (if needed) @@ -139,10 +173,9 @@ } //Starts up the canvas in the following order - public function _initCanvas(isView:Boolean):void + public function _initCanvas(isView:Boolean, isSyn:Boolean):void { - trace("init canvas"); - scaleView(); + _scale(); this.removeEventListener(FlexEvent.INITIALIZE, _initCanvas); @@ -192,8 +225,6 @@ _feedbackPopUp = new KSketch_Feedback_Message(); _feedbackPopUp.init(this); _options = new KSketch_Options(); - _shareOptions = new KSketch_SharingOptions; - _help = new KSketch_Help(); _contextDouble = new KSketch_Timebar_Context_Double(); _contextSingle = new KSketch_Timebar_Context_Single(); _saveOptions = new KSketch_SaveOptions(); @@ -201,15 +232,28 @@ _menuPopUp = new KSketch_PopUp_Menu(); _magnifier = new KSketch_Timebar_Magnifier(); _magnifier.init(canvas_component, timeControl); - _help.init(this, _menuPopUp); _options.init(this, _menuPopUp); - _shareOptions.init(this, _menuPopUp); + + //KSKETCH-SYNPHNE + isSynphne = isSyn; + if(isSynphne) + { + _instructionsBox = new KSketch_InstructionsBox(); + _activityControl = new KActivityControl(_instructionsBox, this, _KSketch, _interactionControl); + _resultControl = new KActivityResultControl(_instructionsBox, this, _KSketch, _interactionControl, _activityControl); + _kAlertBox = new KSketch_Alert(); + } //Initiate the controls if(!isPlayer) { _transitionHelper = new KWidgetInteractorManager(_KSketch, _interactionControl, widget, modelDisplay); - _selectionHelper = new KCanvasInteractorManager(_KSketch, _interactionControl, canvas_region, modelDisplay, motionDisplay, _feedbackPopUp); + + //KSKETCH-SYNPHNE + if(!isSynphne) + _selectionHelper = new KCanvasInteractorManager(_KSketch, _interactionControl, null, canvas_region, modelDisplay, motionDisplay, _feedbackPopUp); + else + _selectionHelper = new KCanvasInteractorManager(_KSketch, _interactionControl, _activityControl, canvas_region, modelDisplay, motionDisplay, _feedbackPopUp); } if(!isWeb) @@ -217,25 +261,30 @@ _saveOptions.init(this, _menuPopUp, _overwriteSaveOptions); _overwriteSaveOptions.init(this, _saveOptions); - _menuPopUp.init(canvas_component, this, _options, _shareOptions, _help, _saveOptions, _KSketch, _interactionControl, _selectionHelper, _feedbackPopUp); + _menuPopUp.init(canvas_component, this, _options, _saveOptions, _KSketch, _interactionControl, _selectionHelper, _feedbackPopUp); _saveOptions.createDeferredContent(); } else - _menuPopUp.init(canvas_component, this, _options, _shareOptions, _help, null, _KSketch, _interactionControl, _selectionHelper, _feedbackPopUp); + _menuPopUp.init(canvas_component, this, _options, null, _KSketch, _interactionControl, _selectionHelper, _feedbackPopUp); _options.createDeferredContent(); - _shareOptions.createDeferredContent(); - _help.createDeferredContent(); _menuPopUp.createDeferredContent(); + //KSKETCH-SYNPHNE + if(isSynphne) + { + _instructionsBox.createDeferredContent(); + _kAlertBox.createDeferredContent(); + } + if(isWebViewer) _menuPopUp.alpha = 0; var timeTickControl:KSketch_TickMark_Control = new KSketch_TickMark_Control(_KSketch, timeControl,_interactionControl); timeControl.init(_KSketch, timeTickControl, _transitionHelper, _magnifier, _contextDouble, _contextSingle); - leftTimeJumper.init(_KSketch, timeControl, KSketch_TimeSkip_Button.LEFT); - rightTimeJumper.init(_KSketch, timeControl, KSketch_TimeSkip_Button.RIGHT); + leftTimeJumper.init(_KSketch, this, timeControl, KSketch_TimeSkip_Button.LEFT); + rightTimeJumper.init(_KSketch, this, timeControl, KSketch_TimeSkip_Button.RIGHT); _contextDouble.init(_KSketch, _interactionControl, timeTickControl, timeControl); _contextDouble.createDeferredContent(); @@ -247,7 +296,7 @@ motionDisplay.init(_KSketch, _interactionControl); //This is the layer that blocks interaction whenever the app is playing - playButton.init(timeControl, _interactionControl,_KSketch, _menuPopUp); + playButton.init(timeControl, this, _interactionControl,_KSketch, _menuPopUp); _interactionControl.reset(); @@ -257,6 +306,12 @@ //Fail safe measure if(_needToProcessData) _enterView_ProcessData(); + + //KSKETCH-SYNPHNE + if(isSynphne) + _setSynphneComponent(); + else + synphne_component.visible = false; } private function _checkForImageData():void @@ -308,8 +363,24 @@ if(_currentDocument.fileData.scene.children().length() > 0) _KSketch.generateSceneFromXML(new XML(_currentDocument.fileData.scene)); + + if(isSynphne) + { + //KSKETCH-SYNPHNE + _kInstructions = new KInstructions(new XML(_currentDocument.fileData.activities)); + _instructionsBox.init(this, _kInstructions, _kAlertBox, _activityControl, _resultControl); + } } } + else + { + if(isSynphne) + { + //KSKETCH-SYNPHNE + _activityControl.isNewSketch = true; + instructionsButton.visible = false; + } + } data = null; } @@ -414,7 +485,6 @@ { //comment out these two lines to get toolbar stay when it is reactivated. _options.close(); - _help.close(); _menuPopUp.close(); _feedbackPopUp.close(); _magnifier.close(); @@ -524,52 +594,195 @@ return _cacheControl; } - private function scaleView():void + private function _scale():void { - KSketchStyles.setView(); + KSketchGlobals.setView(); - if(KSketchStyles.aspectRatio != 1.33) + if(KSketchGlobals.ASPECTRATIO != 1.33) { drawing_stage.percentHeight = 82; drawing_stage.width = drawing_stage.height/9*16; } - else if(KSketchStyles.width > 1280 && KSketchStyles.aspectRatio == 1.33) + else if(KSketchGlobals.WIDTH > 1280 && KSketchGlobals.ASPECTRATIO == 1.33) { drawing_stage.percentHeight = 80; drawing_stage.width = drawing_stage.height/9*16; } } + //KSKETCH-SYNPHNE + private function _setSynphneComponent():void + { + instructionsButton.init(KSketchAssets.texture_instructions_1, KSketchAssets.texture_instructions_1); + instructionsButton.initSkin(); + _isTiming = false; + timerLabel.text = "Time: 00:00"; + } + + public function actionInstructions():void + { + if(_instructionsBox.isOpen) + closeInstructions(); + else + openInstructions(); + } + + public function openInstructions():void + { + _instructionsBox.open(this,false); + PopUpManager.centerPopUp(_instructionsBox); + _instructionsBox.x = instructionsButton.x; + _instructionsBox.y = instructionsButton.y + instructionsButton.height; + + //change skin to down_arrow + instructionsButton.init(KSketchAssets.texture_instructions_2, KSketchAssets.texture_instructions_2); + instructionsButton.initSkin(); + } + + public function closeInstructions():void + { + _instructionsBox.close(); + + //change skin to side_arrow + instructionsButton.init(KSketchAssets.texture_instructions_1, KSketchAssets.texture_instructions_1); + instructionsButton.initSkin(); + } + + public function startTimer():void + { + _timeTaken = 0; + _isTiming = true; + _t = new Timer(TIMER_INTERVAL); + _t.addEventListener(TimerEvent.TIMER, updateTimer); + _timeDuration = KSketch_CanvasView_Preferences.duration; + _baseTimer = getTimer(); + _t.start(); + } + + private function updateTimer(evt:TimerEvent):void { + + var timeInMilli:int = _timeDuration*1000 - (getTimer() - _baseTimer) + var timeInSec:int = int(timeInMilli/1000) + if(timeInSec >= 0) { + timerLabel.text = "Time: " + int(timeInSec/60) + ":" +int(timeInSec%60); + }else { + timerLabel.text = "Time: -" + int(-1*timeInSec/60) + ":" +int(-1*timeInSec %60); + } + + _timeTaken = getTimer() - _baseTimer; + } + + public function stopTimer():void + { + _isTiming = false; + _t.stop(); + _t.removeEventListener(TimerEvent.TIMER, updateTimer); + } + + public function resetTimeControl():void + { + _KSketch.time = 0; + //_magnifier.setToTime(_KSketch.time); + } + + public function autoPlayAnimation():void + { + playButton.playToggle(true); + _activityControl.autoSelectObjectToAnimate(); + } + + public function get activityType():String + { + var activityType:String = "SKETCH"; + if(_activityControl) + activityType = _activityControl.activityType; + return activityType; + } + + public function setAnimationPlaying(value:Boolean):void + { + _activityControl.isAnimationPlaying = value; + } + + public function get isTiming():Boolean + { + if(_isTiming != null) + return _isTiming; + else + return false; + } + + public function setRegionVisibility(visible:Boolean):void + { + region_1.visible = visible; + region_2.visible = visible; + region_3.visible = visible; + region_4.visible = visible; + region_5.visible = visible; + region_6.visible = visible; + } + + public function get regions():Array + { + var regionsArr:Array = new Array(6); + regionsArr[0] = region_1; + regionsArr[1] = region_2; + regionsArr[2] = region_3; + regionsArr[3] = region_4; + regionsArr[4] = region_5; + regionsArr[5] = region_6; + + return regionsArr; + } + + + public function getCurrentTemplateObjectView():IObjectView + { + var currentId:int = _instructionsBox.currentObjectID(); + for(var i:int=0; i<_KSketch.root.children.length(); i++) + { + var currObj:KObject = _KSketch.root.children.getObjectAt(i) as KObject; + /*if(currObj is KStroke && currObj.id == currentId) + { + return modelDisplay.viewsTable[currObj]; + }*/ + } + return null; + } + + //END OF KSKETCH-SYNPHNE + ]]> - + + - + - + + gap="{TIMEBAR_GAP}" + paddingLeft="{TIMEBAR_PADDING}" + paddingRight="{TIMEBAR_PADDING}" + paddingTop="{TIMEBAR_PADDING}" + paddingBottom="{TIMEBAR_PADDING}"/> @@ -581,30 +794,20 @@ + id="leftTimeJumper"/> - - + id="playButton"/> + id="rightTimeJumper"/> @@ -619,33 +822,95 @@ - + - + + - + - + + color="{KSketchGlobals.COLOR_BLACK}" angle="{KSketchGlobals.ANGLE_50}" + alpha="{KSketchGlobals.ALPHA_06}" + strength="{KSketchGlobals.RECT_STRENGTH}" + blurX="{KSketchGlobals.RECT_BLURX}" + blurY="{KSketchGlobals.RECT_BLURY}"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -657,13 +922,29 @@ - + - + + + + + + + + + + + + + + + diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KActivityControl.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KActivityControl.as new file mode 100644 index 00000000..8a899228 --- /dev/null +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/KActivityControl.as @@ -0,0 +1,476 @@ +package sg.edu.smu.ksketch2.canvas.controls +{ + import flash.display.DisplayObject; + + import sg.edu.smu.ksketch2.KSketch2; + import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_InstructionsBox; + import sg.edu.smu.ksketch2.canvas.components.view.KModelDisplay; + import sg.edu.smu.ksketch2.canvas.components.view.KSketch_CanvasView; + import sg.edu.smu.ksketch2.canvas.components.view.objects.IObjectView; + import sg.edu.smu.ksketch2.canvas.components.view.objects.KStrokeView; + import sg.edu.smu.ksketch2.events.KSketchEvent; + import sg.edu.smu.ksketch2.model.data_structures.KModelObjectList; + import sg.edu.smu.ksketch2.model.objects.KObject; + import sg.edu.smu.ksketch2.model.objects.KStroke; + import sg.edu.smu.ksketch2.operators.operations.KCompositeOperation; + import sg.edu.smu.ksketch2.utils.KSelection; + + public class KActivityControl + { + private var _instructionsBox:KSketch_InstructionsBox; + private var _canvasView:KSketch_CanvasView; + private var _KSketch:KSketch2; + private var _interactionControl:KInteractionControl; + + private var _currentObjectID:int; + private var _currentManipulateObject:KObject; + private var _currentTemplateObject:KObject; + private var _activityType:String = "SKETCH"; + private var _isAnimationPlaying:Boolean; + private var _isNewSketch:Boolean; + private var _recallCounter:int; + private var _stars:int; + + public function KActivityControl(instructionsBox:KSketch_InstructionsBox, canvas:KSketch_CanvasView, ksketch:KSketch2, interaction:KInteractionControl) + { + _instructionsBox = instructionsBox; + _canvasView = canvas; + _KSketch = ksketch; + _interactionControl = interaction; + } + + public function startActivity(activity:String):void + { + var currentInstruction:int = _instructionsBox.currentInstruction(); + _currentObjectID = _instructionsBox.currentObjectID(); + //_currentManipulateObject = getCurrentObject(_currentObjectID, false); + //_currentTemplateObject = getCurrentObject(_currentObjectID, true); + //Reset settings + if(currentInstruction == 0) + { + _canvasView.setRegionVisibility(false); + _setObjectProperties(false, false, false); + } + _canvasView.resetTimeControl(); + _interactionControl.selection = null; + + if(activity == "INTRO") + { + trace("trigger INTRO"); + _activityType = "INTRO"; + _hideObjects(true); + startIntroductionAnimation(); + _isAnimationPlaying = true; + } + else if(activity == "RECALL") + { + _activityType = "RECALL"; + _recallCounter = 0; + _setObjectProperties(true, false, false); + _hideObjects(true); + _canvasView.setRegionVisibility(true); + } + else if(activity == "TRACE") + { + //TODO: Implement logic to fix stars based on the maxDistance + _activityType = "TRACE"; + + _discardSketchedObjects(); + _setObjectProperties(false, true, false); + } + else if(activity == "TRACK") + { + _activityType = "TRACK"; + _currentManipulateObject = _getCurrentObjectToTrack(false); + _setObjectProperties(false, false, true); + _hideObjects(true); + processTrack(_currentManipulateObject as KStroke); + } + } + + private function _setObjectProperties(isRecall:Boolean, isTrace:Boolean, isTrack:Boolean):void + { + for(var i:int=0; i<_KSketch.root.children.length(); i++) + { + var currObj:KObject = _KSketch.root.children.getObjectAt(i) as KObject; + if(currObj is KStroke) + { + var view:IObjectView = _canvasView.modelDisplay.viewsTable[currObj]; + /* + //reset + currObj.template = false; + (view as KStrokeView).resetActivityHighlight(_KSketch.time); + (view as DisplayObject).visible = true; + + if(isRecall) + { + (view as DisplayObject).visible = false; + } + else if(isTrace) + { + currObj.template = true; + if(currObj.id == _currentTemplateObject.id) + (view as KStrokeView).changeActivityHighlight(_KSketch.time, false); + else + (view as KStrokeView).changeActivityHighlight(_KSketch.time, true); + } + else if(isTrack) + { + currObj.template = true; + (view as KStrokeView).changeActivityHighlight(_KSketch.time, false); + } + */ + } + } + } + + public function processIntro(successIntro:Boolean):void + { + if(successIntro) + { + _instructionsBox.startStopActivity(); + + //_setObjectProperties(false, false, false); + _canvasView.setRegionVisibility(true); + //_hideObjects(false); + } + } + + public function processRecall(correctRecall:Boolean):void + { + if(correctRecall) + { + //unhide the object view + for(var i:int=0; i<_KSketch.root.children.length(); i++) + { + var currObj:KObject = _KSketch.root.children.getObjectAt(i) as KObject; + if(currObj.id == _currentObjectID) + { + var view:IObjectView = _canvasView.modelDisplay.viewsTable[currObj]; + (view as DisplayObject).visible = true; + } + } + + _instructionsBox.open(_canvasView, false); + _instructionsBox.startStopActivity(); + } + } + + public function incrementRecallCounter():void + { + _recallCounter++; + } + + public function processTrace():void + { + /* + for(var i:int=0; i<_KSketch.root.children.length(); i++) + { + var currObj:KObject = _KSketch.root.children.getObjectAt(i) as KObject; + if(currObj is KStroke && !currObj.template && currObj.id == currObj.originalId) + { + currObj.originalId = _currentObjectID; + } + } + */ + } + + public function processTrack(currObj:KStroke):void + { + if(currObj) //if there is a sketched object + { + /* + //unhide current object and disable it as a template + var tempArr:Array = new Array(_KSketch.root.children.length()); + var view:IObjectView; + + var currOriginalID:int = currObj.originalId; + currObj.template = false; + view = _canvasView.modelDisplay.viewsTable[currObj]; + (view as KStrokeView).resetActivityHighlight(_KSketch.time); + (view as DisplayObject).visible = true; + + //remove the animation if the object is previously animated + _removeAnimationFromObject(currObj); + */ + } + } + + private function _getCurrentObjectToTrack(useTemplate:Boolean):KObject + { + var currObj:KObject = null; + /* + for(var i:int=0; i<_KSketch.root.children.length(); i++) + { + currObj = _KSketch.root.children.getObjectAt(i) as KObject; + + if(!useTemplate) + { + if(currObj is KStroke && currObj.id != currObj.originalId && currObj.originalId == _currentObjectID) + break; + } + else + { + if(currObj is KStroke && currObj.id == currObj.originalId && currObj.originalId == _currentObjectID) + break; + } + } + */ + return currObj; + } + + public function autoSelectObjectToAnimate():void + { + if(_currentManipulateObject) + { + var selectedList:KModelObjectList = new KModelObjectList(); + selectedList.add(_currentManipulateObject); + _interactionControl.selection = new KSelection(selectedList); + } + } + + private function _discardSketchedObjects():void + { + var tempArr:Array = new Array(_KSketch.root.children.length()); + var i:int; + var currObj:KObject; + /* + for(i=0; i<_KSketch.root.children.length(); i++) + { + currObj = _KSketch.root.children.getObjectAt(i) as KObject; + if(currObj is KStroke) + { + if(currObj.id != currObj.originalId && currObj.originalId == _currentObjectID) + { + _removeAnimationFromObject(currObj); + tempArr[i] = currObj; + } + } + } + + for(i=0; i= 0 && ratio <= 50) + stars = 3; + else if(ratio > 50 && ratio <=75) + stars = 2; + else if(ratio > 75 && ratio <= 100) + stars = 1; + + return stars; + */ + } + + public function measureQuadrant():void//(result:KResult):KResult + { + /* + var trials:int = _activityControl.recallCounter - 1; + + var percentage:int = 100; + if(trials != 0) + percentage = Math.floor(100 - ((trials/6)*100)); + + result.percentageQuadrant = percentage; + return result; + */ + } + + public function starQuadrant():void//(result:KResult):int + { + /* + var stars:int = 0; + + if(result.percentageQuadrant >= 83) + stars = 3; + else if(result.percentageQuadrant >=50 && result.percentageQuadrant < 83) + stars = 2; + else if(result.percentageQuadrant >= 16 && result.percentageQuadrant < 50) + stars = 1; + + return stars; + */ + } + + public function maxDistance(object:KStroke):void + { + /* + var _points:Vector. = object.points; + var maxDist:Number = Point.distance(_points[0],_points[1]); + for(var i:int = 0; i<_points.length; i++) + { + for(var j:int = 0; j<_points.length; j++){ + var distance:Number = Point.distance(_points[i],_points[j]); + if(distance > maxDist) { + maxDist = distance; + } + } + } + + var distInCm:Number = maxDist * 2.54 / flash.system.Capabilities.screenDPI; + return distInCm; + */ + } + + public function calculateShapeDistance():void//(result:KResult, obj1:KStroke, obj2:KStroke):KResult + { + /* + var points1:Vector. = obj1.points; + var points2:Vector. = obj2.points; + + var minDistanceTot:Number = 0; + var maxMinDistance:Number = 0; + var dist:Number = 0; + + for(var i:int = 0; i 0) + { + for(var j:int = 1; j 0) + { + result.averageDistance = minDistanceTot/points1.length; + result.maximumDistance = maxMinDistance; + } + + return result; + */ + } + + public function starShapeDistance():void//(result:KResult):int + { + /* + var accuracyThresholdValues:Array = _canvasView.starValueArr; + var stars:int = 0; + + var oneStarAvg:Number = accuracyThresholdValues[0]; + var twoStarAvg:Number = accuracyThresholdValues[1]; + var threeStarAvg:Number = accuracyThresholdValues[2]; + + var oneStarMax:Number = accuracyThresholdValues[3]; + var twoStarMax:Number = accuracyThresholdValues[4]; + var threeStarMax:Number = accuracyThresholdValues[5]; + + var averageDistanceInCM:Number = result.averageDistance * 2.54 / flash.system.Capabilities.screenDPI; + var maximumDistanceInCM:Number = result.maximumDistance * 2.54 / flash.system.Capabilities.screenDPI; + + if (averageDistanceInCM >=0 && averageDistanceInCM <= threeStarAvg) + stars = 3; + if (averageDistanceInCM > threeStarAvg && averageDistanceInCM <= twoStarAvg) + stars = 2; + if (averageDistanceInCM > twoStarAvg && averageDistanceInCM <= oneStarAvg) + stars = 1; + + trace("averageDistance: " + averageDistanceInCM); + trace("average values: " + threeStarAvg + "," + twoStarAvg + "," + oneStarAvg); + trace("stars: " + stars); + + if (maximumDistanceInCM >=0 && maximumDistanceInCM <= threeStarMax) + stars += 3; + if (maximumDistanceInCM > threeStarMax && maximumDistanceInCM <= twoStarMax) + stars += 2; + if (maximumDistanceInCM > twoStarMax && maximumDistanceInCM <= oneStarMax) + stars += 1; + + trace("maximumDistance: " + maximumDistanceInCM); + trace("maximum values: " + threeStarMax + "," + twoStarAvg + "," + oneStarMax); + trace("stars: " + stars); + + stars = stars/2; + return stars; + */ + } + + public function starRegion():void//(objDrawn:KObject, objTemplate:KObject):int + { + /* + var stars:int = 0; + + if(objDrawn.startRegion == objTemplate.startRegion) + stars = 3; + else + { + if(objTemplate.startRegion == 1) + { + if(objDrawn.startRegion == 2 || objDrawn.startRegion == 4 || objDrawn.startRegion == 5) + stars = 2; + else + stars = 1; + } + else if(objTemplate.startRegion == 2) + { + if(objDrawn.startRegion == 1 || objDrawn.startRegion == 3 || objDrawn.startRegion == 5) + stars = 2; + else + stars = 1; + } + else if(objTemplate.startRegion == 3) + { + if(objDrawn.startRegion == 2 || objDrawn.startRegion == 5 || objDrawn.startRegion == 6) + stars = 2; + else + stars = 1; + } + else if(objTemplate.startRegion == 4) + { + if(objDrawn.startRegion == 1 || objDrawn.startRegion == 2 || objDrawn.startRegion == 5) + stars = 2; + else + stars = 1; + } + else if(objTemplate.startRegion == 5) + { + if(objDrawn.startRegion == 2 || objDrawn.startRegion == 4 || objDrawn.startRegion == 6) + stars = 2; + else + stars = 1; + } + else if(objTemplate.startRegion == 6) + { + if(objDrawn.startRegion == 2 || objDrawn.startRegion == 3 || objDrawn.startRegion == 5) + stars = 2; + else + stars = 1; + } + } + + return stars; + */ + } + + public function get resultArr():ArrayList + { + return _resultArr; + } + } +} \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/interactors/KCanvasInteractorManager.as b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/interactors/KCanvasInteractorManager.as index 314d4824..d134a574 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/interactors/KCanvasInteractorManager.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/controls/interactors/KCanvasInteractorManager.as @@ -26,11 +26,14 @@ package sg.edu.smu.ksketch2.canvas.controls.interactors import sg.edu.smu.ksketch2.canvas.components.view.KModelDisplay; import sg.edu.smu.ksketch2.canvas.components.view.KMotionDisplay; import sg.edu.smu.ksketch2.canvas.components.view.KSketch_CanvasView; + import sg.edu.smu.ksketch2.canvas.controls.KActivityControl; import sg.edu.smu.ksketch2.canvas.controls.KInteractionControl; import sg.edu.smu.ksketch2.canvas.controls.interactors.draw.IInteractor; import sg.edu.smu.ksketch2.canvas.controls.interactors.draw.KDrawInteractor; import sg.edu.smu.ksketch2.canvas.controls.interactors.draw.KLoopSelectInteractor; + //KSKETCH-SYNPHNE + import sg.edu.smu.ksketch2.canvas.KSketch_CanvasView_Preferences; /** * The KCanvasInteractorManager class serves as the concrete class for * managing canvas interactions in K-Sketch. Specifically, it serves @@ -72,6 +75,9 @@ package sg.edu.smu.ksketch2.canvas.controls.interactors public var lasso:Boolean; // the lasso boolean flag public var doubleTapOn:Boolean = false; // the double tap feature flag + //KSKETCH-SYNPHNE + private var _activityControl:KActivityControl; + /** * The main constructor for the KCanvasInteractorManager class. * @@ -81,7 +87,7 @@ package sg.edu.smu.ksketch2.canvas.controls.interactors * @param modelDisplay The model display linked to the given ksketch object. * @param feedbackMessage The feedback message. */ - public function KCanvasInteractorManager(KSketchInstance:KSketch2, interactionControl:KInteractionControl, + public function KCanvasInteractorManager(KSketchInstance:KSketch2, interactionControl:KInteractionControl, activity:KActivityControl, inputComponent:UIComponent, modelDisplay:KModelDisplay, motionDisplay:KMotionDisplay, feedbackMessage:KSketch_Feedback_Message) { @@ -95,6 +101,9 @@ package sg.edu.smu.ksketch2.canvas.controls.interactors _feedbackMessage = feedbackMessage; // initialize the feedback display _keyDown = false; // set the key down boolean flag as off + //KSKETCH-SYNPHNE + _activityControl = activity; + /** * set the draw, tap, and loop select interactors * this implementation is inconsistent with the transition module @@ -251,33 +260,43 @@ package sg.edu.smu.ksketch2.canvas.controls.interactors if(_interactionControl.currentInteraction) return; - var prevSelection:Boolean = false; - if(_interactionControl.selection) - prevSelection = true; - - _activeInteractor = _tapSelectInteractor; - selected = _tapSelectInteractor.tap(_modelDisplay.globalToLocal(_tapGesture.location),_KSketch.time, lasso); - - //LOG - _KSketch.logCounter ++; - var log:XML = ; - var date:Date = new Date(); - log.@category = "Multi Touch Tap"; - - if(selected) + //KSKETCH-SYNPHNE + if(!KSketch_CanvasView.isSynphne) { - log.@type = "Tap to select object"; - //trace("ACTION " + _KSketch.logCounter + ": Tap to select Object"); + var prevSelection:Boolean = false; + if(_interactionControl.selection) + prevSelection = true; + + _activeInteractor = _tapSelectInteractor; + selected = _tapSelectInteractor.tap(_modelDisplay.globalToLocal(_tapGesture.location),_KSketch.time, lasso); + + //LOG + _KSketch.logCounter ++; + var log:XML = ; + var date:Date = new Date(); + log.@category = "Multi Touch Tap"; + + if(selected) + { + log.@type = "Tap to select object"; + //trace("ACTION " + _KSketch.logCounter + ": Tap to select Object"); + } + else + { + log.@type = "Tap to deselect object"; + //trace("ACTION " + _KSketch.logCounter + ": Tap to deselect Object"); + } + KSketch2.log.appendChild(log); + + if(!selected && !prevSelection) + _recogniseDraw(event); } else { - log.@type = "Tap to deselect object"; - //trace("ACTION " + _KSketch.logCounter + ": Tap to deselect Object"); + trace("recognise synphne"); + _recogniseTapSynphne(event); } - KSketch2.log.appendChild(log); - if(!selected && !prevSelection) - _recogniseDraw(event); } /** @@ -292,11 +311,12 @@ package sg.edu.smu.ksketch2.canvas.controls.interactors return; // switch interactor based on draw gesture's nTouches - if(lasso)// || _drawGesture.touchesCount == 2) + if(lasso) _activeInteractor = _loopSelectInteractor; else if(_drawGesture.touchesCount <= 1) _activeInteractor = _drawInteractor; + _interactionControl.selection = null; _activeInteractor.activate(); @@ -345,6 +365,62 @@ package sg.edu.smu.ksketch2.canvas.controls.interactors _drawGesture.removeAllEventListeners(); _drawGesture.addEventListener(GestureEvent.GESTURE_BEGAN, _recogniseDraw); _interactionControl.dispatchEvent(new Event(KInteractionControl.EVENT_INTERACTION_END)); - } + } + + //KSKETCH-SYNPHNE + private function _recogniseTapSynphne(event:GestureEvent):void + { + var tapLocation:Point = _modelDisplay.globalToLocal(_tapGesture.location); + + if(_activityControl.activityType == "RECALL") + { + _activityControl.incrementRecallCounter(); + + trace("handle for RECALL"); + } + else + { + lasso = true; + _activeInteractor = _tapSelectInteractor; + _tapSelectInteractor.tap(_modelDisplay.globalToLocal(_tapGesture.location),_KSketch.time, lasso); + lasso = false; + + if(_activityControl.isAnimationPlaying && _activityControl.activityType == "INTRO") + { + trace("handle for INTRO"); + _recogniseTapIntro(); + } + } + } + + private function _recogniseTapIntro():void + { + trace("tap detected " + KSketch_CanvasView_Preferences.tapAnywhere); + if(KSketch_CanvasView_Preferences.tapAnywhere == "TAPANYWHERE_ON") + { + trace("tap ok"); + _activityControl.stopIntroductionAnimation(); + _activityControl.processIntro(true); + } + else if(KSketch_CanvasView_Preferences.tapAnywhere == "TAPANYWHERE_OFF" && _interactionControl.selection) + { + /* + var view:IObjectView = _activityControl.getCurrentTemplateObjectView(); + if(view) { + var selectionArea:Sprite = new Sprite(); + selectionArea.graphics.clear(); + selectionArea.graphics.beginFill(0xFFFF22, 1); + selectionArea.graphics.drawCircle(tapLocation.x, tapLocation.y, 5); + selectionArea.graphics.endFill(); + _modelDisplay.addChild(selectionArea); + if (selectionArea.hitTestObject(view as DisplayObject)) { + _activityControl.processIntro(true); + _activityControl.stopIntroductionAnimation(); + } + _modelDisplay.removeChild(selectionArea); + } + */ + } + } } } \ No newline at end of file diff --git a/KSKLibrary/src/sg/edu/smu/ksketch2/model/objects/KInstructions.as b/KSKLibrary/src/sg/edu/smu/ksketch2/model/objects/KInstructions.as new file mode 100644 index 00000000..68808b16 --- /dev/null +++ b/KSKLibrary/src/sg/edu/smu/ksketch2/model/objects/KInstructions.as @@ -0,0 +1,83 @@ +/** + * Copyright 2010-2012 Singapore Management University + * Developed under a grant from the Singapore-MIT GAMBIT Game Lab + * This Source Code Form is subject to the terms of the + * Mozilla Public License, v. 2.0. If a copy of the MPL was + * not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + */ +package sg.edu.smu.ksketch2.model.objects { + + public class KInstructions { + private var instructions:Array; + private var objectIDs:Array; + public function KInstructions(xml:XML) { + instructions = new Array(); + objectIDs = new Array(); + + var introduction:Array = new Array(); + var introductionIDs:Array = new Array(); + var introductionList:XMLList = xml.introduction.instructions; + var i:int; + for(i=0; i < introductionList.length();i++) { + introduction.push(introductionList[i].*.toString()); + introductionIDs.push(introductionList[i].@id) + } + instructions.push(introduction); + objectIDs.push(introductionIDs); + + var recall:Array = new Array(); + var recallIDs:Array = new Array(); + var recallList:XMLList = xml.recall.instructions; + var i:int; + for(i=0; i < recallList.length();i++) { + recall.push(recallList[i].*.toString()); + recallIDs.push(recallList[i].@id) + } + instructions.push(recall); + objectIDs.push(recallIDs); + + var trace:Array = new Array(); + var traceIDs:Array = new Array(); + var traceList:XMLList = xml.trace.instructions; + for(i=0; i < traceList.length();i++) { + trace.push(traceList[i].*.toString()); + traceIDs.push(traceList[i].@id) + } + instructions.push(trace); + objectIDs.push(traceIDs); + + + var track:Array = new Array(); + var trackIDs:Array = new Array(); + var trackList:XMLList = xml.track.instructions; + for(i=0; i < trackList.length();i++) { + track.push(trackList[i].*.toString()); + trackIDs.push(trackList[i].@id) + } + instructions.push(track); + objectIDs.push(trackIDs); + + var recreate:Array = new Array(); + var recreateIDs:Array = new Array(); + var recreateList:XMLList = xml.recreate.instructions; + for(i=0; i < recreateList.length();i++) { + recreate.push(recreateList[i].*.toString()); + recreateIDs.push(recreateList[i].@id) + } + instructions.push(recreate); + objectIDs.push(recreateIDs); + + } + public function getInstructions():Array + { + return instructions; + } + + public function getObjectIDs():Array + { + return objectIDs; + } + } + +} diff --git a/KSKLibrary/src/sg/edu/smu/ksketch2/model/objects/KResult.as b/KSKLibrary/src/sg/edu/smu/ksketch2/model/objects/KResult.as new file mode 100644 index 00000000..a3f443a7 --- /dev/null +++ b/KSKLibrary/src/sg/edu/smu/ksketch2/model/objects/KResult.as @@ -0,0 +1,100 @@ +/** + * Copyright 2010-2012 Singapore Management University + * Developed under a grant from the Singapore-MIT GAMBIT Game Lab + * This Source Code Form is subject to the terms of the + * Mozilla Public License, v. 2.0. If a copy of the MPL was + * not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + */ +package sg.edu.smu.ksketch2.model.objects +{ + public class KResult + { + private var _activityType:String; + private var _instructionNo:int; + private var _objectID:int; + private var _time_taken:int; + private var _time_given:int; + private var _percentageQuadrant:int; + private var _averageDistance:Number; + private var _maximumDistance:Number; + private var _stars:int; + + public function KResult(activityType:String, instruction:int, id:int) + { + _activityType = activityType; + _instructionNo = instruction; + _objectID = id; + _time_taken = 0; + _time_given = 0; + _percentageQuadrant = 0; + _averageDistance = 0; + _maximumDistance = 0; + _stars = 0; + } + + /** + * Get/Set methods for all attributes + */ + public function get timeTaken():int + { + return _time_taken; + } + + public function set timeTaken(t:int):void + { + _time_taken = t; + } + + public function get timeGiven():int + { + return _time_given; + } + + public function set timeGiven(t:int):void + { + _time_given = t; + } + + + public function get percentageQuadrant():int + { + return _percentageQuadrant; + } + + public function set percentageQuadrant(percentage:int):void + { + _percentageQuadrant = percentage; + } + + public function get averageDistance():Number + { + return _averageDistance; + } + + public function set averageDistance(distance:Number):void + { + _averageDistance = distance; + } + + public function get maximumDistance():Number + { + return _maximumDistance; + } + + public function set maximumDistance(distance:Number):void + { + _maximumDistance = distance; + } + + public function get stars():int + { + return _stars; + } + + public function set stars(stars:int):void + { + _stars = stars; + } + } +} \ No newline at end of file From 51ab0483dedbe7d1f845f88fee50254580bdf66f Mon Sep 17 00:00:00 2001 From: Ram Vibhakar Date: Wed, 12 Aug 2015 14:56:30 +0800 Subject: [PATCH 37/37] Add enableSynphne config Asset path compatible with Intellij --- KSKInterface/KSKInterface.iml | 17 +++++++++++++---- .../src/sg/edu/smu/ksketch2/KSketchAssets.as | 12 ++++++------ .../src/sg/edu/smu/ksketch2/KSketch_Config.as | 3 ++- .../components/view/KSketch_CanvasView.mxml | 6 ++++-- .../components/view/KSketch_HomeView.mxml | 3 ++- 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/KSKInterface/KSKInterface.iml b/KSKInterface/KSKInterface.iml index 537072ed..78b72117 100644 --- a/KSKInterface/KSKInterface.iml +++ b/KSKInterface/KSKInterface.iml @@ -26,6 +26,9 @@ + + + @@ -79,9 +82,15 @@ - - - - + + + + + + + + + + \ No newline at end of file diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchAssets.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchAssets.as index 7a7b3575..d40e6db0 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketchAssets.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketchAssets.as @@ -385,27 +385,27 @@ package sg.edu.smu.ksketch2 public static var actionList_save:Class; //KSKETCH-SYNPHNE - [Embed("assets/Button_Texture_Instructions_1.png")] + [Embed("/assets/Button_Texture_Instructions_1.png")] [Bindable] public static var texture_instructions_1:Class; - [Embed("assets/Button_Texture_Instructions_2.png")] + [Embed("/assets/Button_Texture_Instructions_2.png")] [Bindable] public static var texture_instructions_2:Class; - [Embed("assets/Button_Texture_Instructions_Next.png")] + [Embed("/assets/Button_Texture_Instructions_Next.png")] [Bindable] public static var texture_instructions_next:Class; - [Embed("assets/Button_Texture_Instructions_Prev.png")] + [Embed("/assets/Button_Texture_Instructions_Prev.png")] [Bindable] public static var texture_instructions_prev:Class; - [Embed("assets/Star_Empty_KSketch.png")] + [Embed("/assets/Star_Empty_KSketch.png")] [Bindable] public static var star_empty:Class; - [Embed("assets/Star_Fill_KSketch.png")] + [Embed("/assets/Star_Fill_KSketch.png")] [Bindable] public static var star_fill:Class; } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as index 7d36d105..ec7e904b 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as +++ b/KSKInterface/src/sg/edu/smu/ksketch2/KSketch_Config.as @@ -5,6 +5,7 @@ package sg.edu.smu.ksketch2 { public class KSketch_Config { public static const host_name = "http://ksketch.smu.edu.sg" public static const email = "ksketch@smu.edu.sg" - public static var isMobile:Boolean = false; + public static var isMobile:Boolean = true; + public static var enableSynphne:Boolean = false; } } diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml index b72150c8..a0878440 100755 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_CanvasView.mxml @@ -16,7 +16,7 @@ xmlns:transformWidget2="sg.edu.smu.ksketch2.canvas.components.transformWidget.*" xmlns:timebar="sg.edu.smu.ksketch2.canvas.components.timebar.*" addedToStage="initializeTrackerForWeb()" - initialize="_initCanvas(false, true)" + initialize="_initCanvas(false, KSketch_Config.enableSynphne)" add="_checkForImageData()" creationPolicy="all" destructionPolicy="auto" @@ -36,7 +36,9 @@ import mx.graphics.codec.JPEGEncoder; import mx.managers.PopUpManager; import mx.utils.Base64Encoder; - + + import sg.edu.smu.ksketch2.KSketch_Config; + import spark.events.ViewNavigatorEvent; import spark.managers.PersistenceManager; diff --git a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml index 25e71b97..553ff252 100644 --- a/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml +++ b/KSKInterface/src/sg/edu/smu/ksketch2/canvas/components/view/KSketch_HomeView.mxml @@ -15,7 +15,7 @@ xmlns:view="sg.edu.smu.ksketch2.canvas.components.view.*" xmlns:buttons="sg.edu.smu.ksketch2.canvas.components.buttons.*" xmlns:popup="sg.edu.smu.ksketch2.canvas.components.popup.*" - initialize="_init(true)" + initialize="_init(KSketch_Config.isMobile)" addedToStage="_scale()" destructionPolicy="auto" > @@ -38,6 +38,7 @@ import sg.edu.smu.ksketch2.KSketchAssets; import sg.edu.smu.ksketch2.KSketchGlobals; + import sg.edu.smu.ksketch2.KSketch_Config; import sg.edu.smu.ksketch2.canvas.KSketch_CanvasView_Preferences; import sg.edu.smu.ksketch2.canvas.KSketch_LoginView; import sg.edu.smu.ksketch2.canvas.components.popup.KSketch_DialogBox_Notifications;