From 06e221a7834566b6b2c53c0efb03930a0fcc7bde Mon Sep 17 00:00:00 2001 From: yasirkula Date: Wed, 27 Jul 2022 22:56:37 +0300 Subject: [PATCH] Added CheckWriteAccessToDestinationDirectory property (#66) --- .github/README.md | 2 + .../Resources/SimpleFileBrowserCanvas.prefab | 808 ++++++++++++++++-- .../SimpleFileBrowser/Scripts/FileBrowser.cs | 327 ++++--- .../FileBrowserAccessRestrictedPanel.cs | 58 ++ .../FileBrowserAccessRestrictedPanel.cs.meta | 12 + Plugins/SimpleFileBrowser/Scripts/UISkin.cs | 26 +- .../SimpleFileBrowser/Sprites/ErrorIcon.psd | Bin 0 -> 54471 bytes .../Sprites/ErrorIcon.psd.meta | 92 ++ 8 files changed, 1133 insertions(+), 192 deletions(-) create mode 100644 Plugins/SimpleFileBrowser/Scripts/FileBrowserAccessRestrictedPanel.cs create mode 100644 Plugins/SimpleFileBrowser/Scripts/FileBrowserAccessRestrictedPanel.cs.meta create mode 100644 Plugins/SimpleFileBrowser/Sprites/ErrorIcon.psd create mode 100644 Plugins/SimpleFileBrowser/Sprites/ErrorIcon.psd.meta diff --git a/.github/README.md b/.github/README.md index aa9e4d5..ad3939b 100644 --- a/.github/README.md +++ b/.github/README.md @@ -152,6 +152,8 @@ To open files or directories in the file browser with a single click (instead of File browser refreshes the list of drives at a regular interval to detect the insertion/removal of USB drives. This interval can be changed via **FileBrowser.DrivesRefreshInterval**. If its value is less than 0, list of drives won't be refreshed. By default, this value is 5 seconds on standalone platforms and -1 on mobile platforms. +While saving files/folders or loading folders, file browser can check if the user has write access to the destination folder(s) to ensure that any file operations inside those folder(s) will work without any issues. To do that, file browser attempts to create dummy files inside those folder(s) and if it fails, an error dialog is displayed to the user. This feature is disabled by default because some folders may have write access but not delete access, in which case the created dummy file will remain in the destination folder(s). To enable this feature, you can set **FileBrowser.CheckWriteAccessToDestinationDirectory** to *true*. + File browser comes bundled with two premade skins in the *Skins* directory: *LightSkin* and *DarkSkin*. New **UISkin**s can be created via `Assets-Create-yasirkula-SimpleFileBrowser-UI Skin`. A UISkin can be assigned to the file browser in two ways: - By changing *SimpleFileBrowserCanvas* prefab's *Skin* field diff --git a/Plugins/SimpleFileBrowser/Resources/SimpleFileBrowserCanvas.prefab b/Plugins/SimpleFileBrowser/Resources/SimpleFileBrowserCanvas.prefab index fa71f18..0722dc4 100644 --- a/Plugins/SimpleFileBrowser/Resources/SimpleFileBrowserCanvas.prefab +++ b/Plugins/SimpleFileBrowser/Resources/SimpleFileBrowserCanvas.prefab @@ -1020,7 +1020,23 @@ GameObject: - component: {fileID: 222696871981828198} - component: {fileID: 114537443433290408} m_Layer: 5 - m_Name: Name + m_Name: Message + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1033526871818446 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224952565232057738} + - component: {fileID: 114044192140836546} + m_Layer: 5 + m_Name: Buttons m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1128,10 +1144,10 @@ GameObject: - component: {fileID: 224266136694922796} - component: {fileID: 223713414452530926} - component: {fileID: 114344696691822798} - - component: {fileID: 114966523907925700} + - component: {fileID: 114173655991101396} - component: {fileID: 114206147818356958} m_Layer: 5 - m_Name: DeleteConfirmationPanel + m_Name: AccessRestrictedPanel m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1323,6 +1339,23 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!1 &1231678994093292 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224386294048010138} + - component: {fileID: 222198536846561238} + - component: {fileID: 114077672456264002} + m_Layer: 5 + m_Name: Name + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &1254239407579514 GameObject: m_ObjectHideFlags: 1 @@ -1355,6 +1388,24 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!1 &1338083938196786 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224694555542072776} + - component: {fileID: 222904708390506912} + - component: {fileID: 114512531252220286} + - component: {fileID: 114914453812680770} + m_Layer: 5 + m_Name: RaycastBlocker + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &1344831917772668 GameObject: m_ObjectHideFlags: 1 @@ -1365,8 +1416,9 @@ GameObject: - component: {fileID: 224710151233061090} - component: {fileID: 222754384321455642} - component: {fileID: 114490386416446264} + - component: {fileID: 114656258729894772} m_Layer: 5 - m_Name: Icon + m_Name: ErrorIcon m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1493,7 +1545,7 @@ GameObject: - component: {fileID: 114625667920685068} - component: {fileID: 114698690279555360} m_Layer: 5 - m_Name: YesButton + m_Name: OKButton m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1519,6 +1571,24 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!1 &1494664619077382 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224883121368338124} + - component: {fileID: 222062640238791174} + - component: {fileID: 114486823500348690} + - component: {fileID: 114455833942722318} + m_Layer: 5 + m_Name: Contents + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &1501240792967194 GameObject: m_ObjectHideFlags: 1 @@ -1529,7 +1599,7 @@ GameObject: - component: {fileID: 224528182894209024} - component: {fileID: 222610136704142508} - component: {fileID: 114011919482879176} - - component: {fileID: 114455833942722318} + - component: {fileID: 114123652638802926} m_Layer: 5 m_Name: Contents m_TagString: Untagged @@ -1789,6 +1859,24 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!1 &1809022162416466 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224859091447805236} + - component: {fileID: 222727923495614766} + - component: {fileID: 114398207703756688} + - component: {fileID: 114083312109309574} + m_Layer: 5 + m_Name: YesButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &1810475167515568 GameObject: m_ObjectHideFlags: 1 @@ -1877,6 +1965,25 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!1 &1903863982848606 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224335344313781930} + - component: {fileID: 223274573336467518} + - component: {fileID: 114071091092032348} + - component: {fileID: 114966523907925700} + - component: {fileID: 114626590300014596} + m_Layer: 5 + m_Name: DeleteConfirmationPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 --- !u!1 &1905169721860466 GameObject: m_ObjectHideFlags: 1 @@ -1933,6 +2040,40 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!1 &1956048087500034 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224173451708207988} + - component: {fileID: 222794187976156974} + - component: {fileID: 114295528466655848} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1987061104836434 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224328148281409894} + - component: {fileID: 222039340858200776} + - component: {fileID: 114550207134465310} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &1993517787700380 GameObject: m_ObjectHideFlags: 1 @@ -1960,7 +2101,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 224000013577827562} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &114000010132642896 MonoBehaviour: @@ -3864,6 +4005,7 @@ MonoBehaviour: renameItem: {fileID: 114205106981145908} contextMenu: {fileID: 114581495326313396} deleteConfirmationPanel: {fileID: 114966523907925700} + accessRestrictedPanel: {fileID: 114173655991101396} resizeCursorHandler: {fileID: 114458032168439820} --- !u!114 &114000013797747800 MonoBehaviour: @@ -4335,6 +4477,40 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 +--- !u!114 &114044192140836546 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1033526871818446} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 +--- !u!114 &114071091092032348 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903863982848606} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 --- !u!114 &114071748841153460 MonoBehaviour: m_ObjectHideFlags: 1 @@ -4375,6 +4551,91 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 +--- !u!114 &114077672456264002 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1231678994093292} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Filename +--- !u!114 &114083312109309574 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1809022162416466} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114398207703756688} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114966523907925700} + m_MethodName: YesButtonClicked + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null --- !u!114 &114094015756707196 MonoBehaviour: m_ObjectHideFlags: 1 @@ -4421,6 +4682,28 @@ MonoBehaviour: m_EditorClassIdentifier: m_HorizontalFit: 2 m_VerticalFit: 0 +--- !u!114 &114123652638802926 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1501240792967194} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 20 + m_Right: 20 + m_Top: 20 + m_Bottom: 60 + m_ChildAlignment: 4 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 --- !u!114 &114128867067796106 MonoBehaviour: m_ObjectHideFlags: 1 @@ -4525,6 +4808,19 @@ MonoBehaviour: m_CallState: 2 m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null +--- !u!114 &114173655991101396 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1118279780387764} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 85ea21be7cacb484cb6db0d183d3b2a8, type: 3} + m_Name: + m_EditorClassIdentifier: + messageLabel: {fileID: 114537443433290408} + okButton: {fileID: 114698690279555360} --- !u!114 &114173752668573194 MonoBehaviour: m_ObjectHideFlags: 1 @@ -4764,12 +5060,39 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 ---- !u!114 &114302359538897432 +--- !u!114 &114295528466655848 MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1115395523925442} + m_GameObject: {fileID: 1956048087500034} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114302359538897432 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1115395523925442} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} @@ -4843,7 +5166,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: Yes + m_Text: OK --- !u!114 &114314828806938924 MonoBehaviour: m_ObjectHideFlags: 1 @@ -5283,6 +5606,33 @@ MonoBehaviour: m_ChildForceExpandHeight: 1 m_ChildControlWidth: 1 m_ChildControlHeight: 1 +--- !u!114 &114398207703756688 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1809022162416466} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 2c46fa192de46b04e8281f225bee0230, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 --- !u!114 &114411366083395940 MonoBehaviour: m_ObjectHideFlags: 1 @@ -5493,7 +5843,7 @@ MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1501240792967194} + m_GameObject: {fileID: 1494664619077382} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} @@ -5540,6 +5890,33 @@ MonoBehaviour: m_PreferredHeight: 31 m_FlexibleWidth: -1 m_FlexibleHeight: -1 +--- !u!114 &114486823500348690 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1494664619077382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.955, g: 0.955, b: 0.955, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: b9c5fedc997f125448c4d8be2fc43bcd, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 --- !u!114 &114490386416446264 MonoBehaviour: m_ObjectHideFlags: 1 @@ -5559,7 +5936,7 @@ MonoBehaviour: m_Calls: [] m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 0} + m_Sprite: {fileID: 21300000, guid: 01b10cc2da49f7442ba6525072e1f86a, type: 3} m_Type: 0 m_PreserveAspect: 1 m_FillCenter: 1 @@ -5618,6 +5995,20 @@ MonoBehaviour: m_PreferredHeight: 31 m_FlexibleWidth: -1 m_FlexibleHeight: -1 +--- !u!114 &114512531252220286 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1338083938196786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b4fd8cdb8c068dd4bb48c415877496ba, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 --- !u!114 &114513488977380248 MonoBehaviour: m_ObjectHideFlags: 1 @@ -5777,7 +6168,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: Filename + m_Text: Access to this directory is restricted, please select another destination. --- !u!114 &114545190460066226 MonoBehaviour: m_ObjectHideFlags: 1 @@ -5800,6 +6191,39 @@ MonoBehaviour: m_ChildForceExpandHeight: 1 m_ChildControlWidth: 1 m_ChildControlHeight: 1 +--- !u!114 &114550207134465310 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1987061104836434} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Yes --- !u!114 &114559354246090904 MonoBehaviour: m_ObjectHideFlags: 1 @@ -6034,6 +6458,28 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 +--- !u!114 &114626590300014596 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903863982848606} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 --- !u!114 &114632553065245236 MonoBehaviour: m_ObjectHideFlags: 1 @@ -6124,6 +6570,24 @@ MonoBehaviour: m_PreferredHeight: 25 m_FlexibleWidth: -1 m_FlexibleHeight: -1 +--- !u!114 &114656258729894772 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1344831917772668} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 48 + m_PreferredHeight: 48 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 --- !u!114 &114688142498443454 MonoBehaviour: m_ObjectHideFlags: 1 @@ -6190,8 +6654,8 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 114966523907925700} - m_MethodName: YesButtonClicked + - m_Target: {fileID: 114173655991101396} + m_MethodName: OKButtonClicked m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} @@ -6472,6 +6936,24 @@ MonoBehaviour: m_TypeName: UnityEngine.EventSystems.EventTrigger+TriggerEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null delegates: [] +--- !u!114 &114914453812680770 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1338083938196786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 --- !u!114 &114935999190282984 MonoBehaviour: m_ObjectHideFlags: 1 @@ -6522,7 +7004,7 @@ MonoBehaviour: m_ObjectHideFlags: 1 m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1118279780387764} + m_GameObject: {fileID: 1903863982848606} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e63253265f9892b4f903968d5f58c0f0, type: 3} @@ -6536,20 +7018,20 @@ MonoBehaviour: - {fileID: 1628886504746956} - {fileID: 1828702684466812} deletedItemIcons: - - {fileID: 114490386416446264} + - {fileID: 114295528466655848} - {fileID: 114559354246090904} - {fileID: 114644076772715040} - {fileID: 114688142498443454} - {fileID: 114999919211664452} deletedItemNames: - - {fileID: 114537443433290408} + - {fileID: 114077672456264002} - {fileID: 114329718623174410} - {fileID: 114900374411104580} - {fileID: 114174822176540134} - {fileID: 114339731131638318} deletedItemsRest: {fileID: 1871003747564276} deletedItemsRestLabel: {fileID: 114094015756707196} - yesButtonTransform: {fileID: 224653188807837000} + yesButtonTransform: {fileID: 224859091447805236} noButtonTransform: {fileID: 224366934613293246} narrowScreenWidth: 500 --- !u!114 &114975456595458294 @@ -6936,6 +7418,12 @@ CanvasRenderer: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1743655712281856} +--- !u!222 &222039340858200776 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1987061104836434} --- !u!222 &222045562886155196 CanvasRenderer: m_ObjectHideFlags: 1 @@ -6948,6 +7436,12 @@ CanvasRenderer: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1171342637537398} +--- !u!222 &222062640238791174 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1494664619077382} --- !u!222 &222082483285537386 CanvasRenderer: m_ObjectHideFlags: 1 @@ -6966,6 +7460,12 @@ CanvasRenderer: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1220010475224892} +--- !u!222 &222198536846561238 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1231678994093292} --- !u!222 &222292635105406868 CanvasRenderer: m_ObjectHideFlags: 1 @@ -7080,6 +7580,12 @@ CanvasRenderer: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1032822122238656} +--- !u!222 &222727923495614766 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1809022162416466} --- !u!222 &222746693721564418 CanvasRenderer: m_ObjectHideFlags: 1 @@ -7116,6 +7622,12 @@ CanvasRenderer: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1181530787890102} +--- !u!222 &222794187976156974 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1956048087500034} --- !u!222 &222803269594998364 CanvasRenderer: m_ObjectHideFlags: 1 @@ -7158,6 +7670,12 @@ CanvasRenderer: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1017798384541682} +--- !u!222 &222904708390506912 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1338083938196786} --- !u!222 &222905629628785182 CanvasRenderer: m_ObjectHideFlags: 1 @@ -7190,6 +7708,26 @@ Canvas: m_SortingLayerID: 0 m_SortingOrder: 2016 m_TargetDisplay: 0 +--- !u!223 &223274573336467518 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903863982848606} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 --- !u!223 &223343947268237976 Canvas: m_ObjectHideFlags: 1 @@ -7989,7 +8527,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 300} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 300} m_Pivot: {x: 0, y: 1} --- !u!224 &224000013035464314 @@ -8096,6 +8634,7 @@ RectTransform: m_LocalScale: {x: 0, y: 0, z: 0} m_Children: - {fileID: 224000012589068232} + - {fileID: 224335344313781930} - {fileID: 224266136694922796} - {fileID: 224387572643228028} - {fileID: 4904278185319220} @@ -8407,6 +8946,24 @@ RectTransform: m_AnchoredPosition: {x: 19, y: 0} m_SizeDelta: {x: 30, y: -6} m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224173451708207988 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1956048087500034} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224612077775479484} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 19, y: 0} + m_SizeDelta: {x: 30, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224180484781794126 RectTransform: m_ObjectHideFlags: 1 @@ -8511,7 +9068,7 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 224528182894209024} + m_Father: {fileID: 224883121368338124} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} @@ -8532,7 +9089,7 @@ RectTransform: - {fileID: 224591811834369706} - {fileID: 224528182894209024} m_Father: {fileID: 224000013577827562} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -8551,7 +9108,7 @@ RectTransform: m_Children: - {fileID: 224352439219928090} - {fileID: 224254816764787534} - m_Father: {fileID: 224528182894209024} + m_Father: {fileID: 224883121368338124} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} @@ -8559,6 +9116,44 @@ RectTransform: m_AnchoredPosition: {x: 10, y: -145.21394} m_SizeDelta: {x: 465, y: 30} m_Pivot: {x: 0, y: 1} +--- !u!224 &224328148281409894 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1987061104836434} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224859091447805236} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224335344313781930 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903863982848606} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224694555542072776} + - {fileID: 224883121368338124} + m_Father: {fileID: 224000013577827562} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -100} + m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224339630385967890 RectTransform: m_ObjectHideFlags: 1 @@ -8571,7 +9166,7 @@ RectTransform: m_Children: - {fileID: 224878520749080566} - {fileID: 224579978660468938} - m_Father: {fileID: 224528182894209024} + m_Father: {fileID: 224883121368338124} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} @@ -8628,7 +9223,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 224404137521161490} - m_Father: {fileID: 224778155638663352} + m_Father: {fileID: 224952565232057738} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0} @@ -8679,6 +9274,24 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224386294048010138 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1231678994093292} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224612077775479484} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 19, y: 0} + m_SizeDelta: {x: -38, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224387572643228028 RectTransform: m_ObjectHideFlags: 1 @@ -8696,7 +9309,7 @@ RectTransform: - {fileID: 224180484781794126} - {fileID: 224742478263042688} m_Father: {fileID: 224000013577827562} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -8733,7 +9346,7 @@ RectTransform: m_Children: - {fileID: 224448863046366790} - {fileID: 224238202155165620} - m_Father: {fileID: 224528182894209024} + m_Father: {fileID: 224883121368338124} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} @@ -8805,22 +9418,16 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 224895875343623328} - - {fileID: 224259126733759176} - - {fileID: 224612077775479484} - - {fileID: 224917160840910854} - - {fileID: 224339630385967890} - - {fileID: 224287151320632504} - - {fileID: 224805519747973880} - - {fileID: 224428437787852036} + - {fileID: 224710151233061090} + - {fileID: 224976749748923606} - {fileID: 224778155638663352} m_Father: {fileID: 224266136694922796} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 508.22495, y: -250} - m_SizeDelta: {x: 490.6815, y: 290.21393} + m_AnchoredPosition: {x: 212.29839, y: -250} + m_SizeDelta: {x: 424.59677, y: 128} m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224579978660468938 RectTransform: @@ -8887,9 +9494,9 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 224710151233061090} - - {fileID: 224976749748923606} - m_Father: {fileID: 224528182894209024} + - {fileID: 224173451708207988} + - {fileID: 224386294048010138} + m_Father: {fileID: 224883121368338124} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} @@ -8948,9 +9555,9 @@ RectTransform: m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: -2.5, y: 0} - m_SizeDelta: {x: -5, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224667401959175920 RectTransform: @@ -8988,6 +9595,24 @@ RectTransform: m_AnchoredPosition: {x: 19, y: 0} m_SizeDelta: {x: 30, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224694555542072776 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1338083938196786} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224335344313781930} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10000, y: 10000} + m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224700969652192598 RectTransform: m_ObjectHideFlags: 1 @@ -9012,17 +9637,17 @@ RectTransform: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1344831917772668} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 224612077775479484} + m_Father: {fileID: 224528182894209024} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} + m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 19, y: 0} - m_SizeDelta: {x: 30, y: 0} + m_AnchoredPosition: {x: 38.95146, y: -44} + m_SizeDelta: {x: 37.902912, y: 48} m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224729756021937082 RectTransform: @@ -9090,9 +9715,8 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 224653188807837000} - - {fileID: 224366934613293246} m_Father: {fileID: 224528182894209024} - m_RootOrder: 8 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -9111,7 +9735,7 @@ RectTransform: m_Children: - {fileID: 224671979781234494} - {fileID: 224729756021937082} - m_Father: {fileID: 224528182894209024} + m_Father: {fileID: 224883121368338124} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} @@ -9212,6 +9836,25 @@ RectTransform: m_AnchoredPosition: {x: 20, y: -15} m_SizeDelta: {x: 69.085175, y: 20} m_Pivot: {x: 0, y: 0.5} +--- !u!224 &224859091447805236 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1809022162416466} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224328148281409894} + m_Father: {fileID: 224952565232057738} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: -2.5, y: 0} + m_SizeDelta: {x: -5, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224878520749080566 RectTransform: m_ObjectHideFlags: 1 @@ -9248,6 +9891,33 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: -14, y: 1} m_Pivot: {x: 0.5, y: 0} +--- !u!224 &224883121368338124 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1494664619077382} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224895875343623328} + - {fileID: 224259126733759176} + - {fileID: 224612077775479484} + - {fileID: 224917160840910854} + - {fileID: 224339630385967890} + - {fileID: 224287151320632504} + - {fileID: 224805519747973880} + - {fileID: 224428437787852036} + - {fileID: 224952565232057738} + m_Father: {fileID: 224335344313781930} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 508.2249, y: -250} + m_SizeDelta: {x: 490.6815, y: 290.21393} + m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224895875343623328 RectTransform: m_ObjectHideFlags: 1 @@ -9258,7 +9928,7 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 224528182894209024} + m_Father: {fileID: 224883121368338124} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} @@ -9278,7 +9948,7 @@ RectTransform: m_Children: - {fileID: 224999068213333118} - {fileID: 224700969652192598} - m_Father: {fileID: 224528182894209024} + m_Father: {fileID: 224883121368338124} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} @@ -9306,6 +9976,26 @@ RectTransform: m_AnchoredPosition: {x: 1, y: -16.5} m_SizeDelta: {x: 110.03155, y: 31} m_Pivot: {x: 0, y: 0.5} +--- !u!224 &224952565232057738 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1033526871818446} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224859091447805236} + - {fileID: 224366934613293246} + m_Father: {fileID: 224883121368338124} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 20} + m_SizeDelta: {x: -50, y: 30} + m_Pivot: {x: 0.5, y: 0} --- !u!224 &224968234521661378 RectTransform: m_ObjectHideFlags: 1 @@ -9330,17 +10020,17 @@ RectTransform: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1032822122238656} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 224612077775479484} + m_Father: {fileID: 224528182894209024} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 19, y: 0} - m_SizeDelta: {x: -38, y: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 233.74983, y: -44} + m_SizeDelta: {x: 341.69385, y: 31.10599} m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &224994857637170592 RectTransform: diff --git a/Plugins/SimpleFileBrowser/Scripts/FileBrowser.cs b/Plugins/SimpleFileBrowser/Scripts/FileBrowser.cs index d44010b..df33867 100644 --- a/Plugins/SimpleFileBrowser/Scripts/FileBrowser.cs +++ b/Plugins/SimpleFileBrowser/Scripts/FileBrowser.cs @@ -215,6 +215,13 @@ public static event FileSystemEntryFilter DisplayedEntriesFilter } } + private static bool m_checkWriteAccessToDestinationDirectory = false; + public static bool CheckWriteAccessToDestinationDirectory + { + get { return m_checkWriteAccessToDestinationDirectory; } + set { m_checkWriteAccessToDestinationDirectory = value; } + } + #if UNITY_EDITOR || ( !UNITY_ANDROID && !UNITY_IOS && !UNITY_WSA && !UNITY_WSA_10_0 ) private static float m_drivesRefreshInterval = 5f; #else @@ -503,6 +510,9 @@ private static FileBrowser Instance [SerializeField] private FileBrowserDeleteConfirmationPanel deleteConfirmationPanel; + [SerializeField] + private FileBrowserAccessRestrictedPanel accessRestrictedPanel; + [SerializeField] private FileBrowserCursorHandler resizeCursorHandler; #pragma warning restore 0649 @@ -517,7 +527,8 @@ private static FileBrowser Instance private readonly List selectedFileEntries = new List( 4 ); private readonly List pendingFileEntrySelection = new List(); - private readonly List submittedFilePaths = new List( 4 ); + private readonly List submittedFileEntryPaths = new List( 4 ); + private readonly List submittedFolderPaths = new List( 4 ); // Used to check if all destination folders have write access #pragma warning disable 0414 // Value is assigned but never used on Android & iOS private int multiSelectionPivotFileEntry; @@ -691,7 +702,7 @@ private string SearchString } } - private bool m_acceptNonExistingFilename = false; + private bool m_acceptNonExistingFilename = false; // Is set to true when showing save dialog for Files or FilesAndFolders, false otherwise private bool AcceptNonExistingFilename { get { return m_acceptNonExistingFilename; } @@ -1273,6 +1284,7 @@ private void RefreshSkin() contextMenu.RefreshSkin( m_skin ); deleteConfirmationPanel.RefreshSkin( m_skin ); + accessRestrictedPanel.RefreshSkin( m_skin ); listView.OnSkinRefreshed(); @@ -1362,188 +1374,235 @@ private void ShowContextMenuAt( Vector2 position, bool isMoreOptionsMenu ) public void OnSubmitButtonClicked() { + string[] result = null; string filenameInput = filenameInputField.text.Trim(); + + submittedFileEntryPaths.Clear(); + submittedFolderPaths.Clear(); + if( filenameInput.Length == 0 ) { - if( m_pickerMode != PickMode.Files ) - OnOperationSuccessful( new string[1] { m_currentPath } ); - else + if( m_pickerMode == PickMode.Files ) + { filenameImage.color = m_skin.InputFieldInvalidBackgroundColor; - - return; + return; + } + else + { + result = new string[1] { m_currentPath }; + submittedFolderPaths.Add( m_currentPath ); + } } - if( m_allowMultiSelection && selectedFileEntries.Count > 1 ) + if( result == null ) { - // When multiple files are selected via file browser UI, filenameInputField is not interactable and will show - // only the first FILENAME_INPUT_FIELD_MAX_FILE_COUNT entries for performance reasons. We should iterate over - // selectedFileEntries instead of filenameInputField - - // Beforehand, check if a folder is selected in file selection mode. If so, open that directory - if( m_pickerMode == PickMode.Files ) + if( m_allowMultiSelection && selectedFileEntries.Count > 1 ) { - for( int i = 0; i < selectedFileEntries.Count; i++ ) + // When multiple files are selected via file browser UI, filenameInputField is not interactable and will show + // only the first FILENAME_INPUT_FIELD_MAX_FILE_COUNT entries for performance reasons. We should iterate over + // selectedFileEntries instead of filenameInputField + + // Beforehand, check if a folder is selected in file selection mode. If so, open that directory + if( m_pickerMode == PickMode.Files ) { - if( validFileEntries[selectedFileEntries[i]].IsDirectory ) + for( int i = 0; i < selectedFileEntries.Count; i++ ) { - CurrentPath = validFileEntries[selectedFileEntries[i]].Path; - return; + if( validFileEntries[selectedFileEntries[i]].IsDirectory ) + { + CurrentPath = validFileEntries[selectedFileEntries[i]].Path; + return; + } } } - } - - string[] result = new string[selectedFileEntries.Count]; - for( int i = 0; i < selectedFileEntries.Count; i++ ) - result[i] = validFileEntries[selectedFileEntries[i]].Path; - - OnOperationSuccessful( result ); - } - else - { - // When multiple files aren't selected via file browser UI, we must consider the rare case where user manually enters - // multiple filenames to filenameInputField in format "file1" "file2" and so on. So, we must parse filenameInputField - submittedFilePaths.Clear(); + result = new string[selectedFileEntries.Count]; + for( int i = 0; i < selectedFileEntries.Count; i++ ) + { + result[i] = validFileEntries[selectedFileEntries[i]].Path; - for( int startIndex = 0, nextStartIndex = 0; startIndex < filenameInput.Length; startIndex = nextStartIndex ) + if( validFileEntries[selectedFileEntries[i]].IsDirectory ) + submittedFolderPaths.Add( result[i] ); + else if( m_acceptNonExistingFilename && !submittedFolderPaths.Contains( m_currentPath ) ) + submittedFolderPaths.Add( m_currentPath ); + } + } + else { - int filenameLength = ExtractFilenameFromInput( filenameInput, ref startIndex, out nextStartIndex ); - if( filenameLength == 0 ) - continue; + // When multiple files aren't selected via file browser UI, we must consider the rare case where user manually enters + // multiple filenames to filenameInputField in format "file1" "file2" and so on. So, we must parse filenameInputField - string filename = filenameInput.Substring( startIndex, filenameLength ).Trim(); - if( !VerifyFilename( filename ) ) + for( int startIndex = 0, nextStartIndex = 0; startIndex < filenameInput.Length; startIndex = nextStartIndex ) { - // Check if user has entered a full path to input field instead of just a filename. Even if it's the case, don't immediately accept the full path, - // first verify that it doesn't point to a file/folder that is ignored by the file browser - try + int filenameLength = ExtractFilenameFromInput( filenameInput, ref startIndex, out nextStartIndex ); + if( filenameLength == 0 ) + continue; + + string filename = filenameInput.Substring( startIndex, filenameLength ).Trim(); + if( !VerifyFilename( filename ) ) { - if( FileBrowserHelpers.DirectoryExists( filename ) ) + // Check if user has entered a full path to input field instead of just a filename. Even if it's the case, don't immediately accept the full path, + // first verify that it doesn't point to a file/folder that is ignored by the file browser + try { - if( FileSystemEntryMatchesFilters( new FileSystemEntry( filename, FileBrowserHelpers.GetFilename( filename ), "", true ), AllExtensionsHaveSingleSuffix ) ) + if( FileBrowserHelpers.DirectoryExists( filename ) ) { - if( m_pickerMode == PickMode.Files ) + if( FileSystemEntryMatchesFilters( new FileSystemEntry( filename, FileBrowserHelpers.GetFilename( filename ), "", true ), AllExtensionsHaveSingleSuffix ) ) { - CurrentPath = filename; - return; + if( m_pickerMode == PickMode.Files ) + { + CurrentPath = filename; + return; + } + else + { + submittedFileEntryPaths.Add( filename ); + submittedFolderPaths.Add( filename ); + + continue; + } } - else + } + else if( m_pickerMode != PickMode.Folders && FileBrowserHelpers.FileExists( filename ) ) + { + string fullPathFilename = FileBrowserHelpers.GetFilename( filename ); + if( FileSystemEntryMatchesFilters( new FileSystemEntry( filename, fullPathFilename, GetExtensionFromFilename( fullPathFilename, AllExtensionsHaveSingleSuffix ), false ), AllExtensionsHaveSingleSuffix ) ) { - submittedFilePaths.Add( filename ); + submittedFileEntryPaths.Add( filename ); + if( m_acceptNonExistingFilename ) + submittedFolderPaths.Add( FileBrowserHelpers.GetDirectoryName( filename ) ); + continue; } } } - else if( m_pickerMode != PickMode.Folders && FileBrowserHelpers.FileExists( filename ) ) - { - string fullPathFilename = FileBrowserHelpers.GetFilename( filename ); - if( FileSystemEntryMatchesFilters( new FileSystemEntry( filename, fullPathFilename, GetExtensionFromFilename( fullPathFilename, AllExtensionsHaveSingleSuffix ), false ), AllExtensionsHaveSingleSuffix ) ) - { - submittedFilePaths.Add( filename ); - continue; - } - } - } - catch { } + catch { } - // Filename contains invalid characters or is completely whitespace - filenameImage.color = m_skin.InputFieldInvalidBackgroundColor; - return; - } + // Filename contains invalid characters or is completely whitespace + filenameImage.color = m_skin.InputFieldInvalidBackgroundColor; + return; + } - try - { - int fileEntryIndex = FilenameToFileEntryIndex( filename ); - if( fileEntryIndex < 0 ) + try { - if( m_pickerMode != PickMode.Folders ) + int fileEntryIndex = FilenameToFileEntryIndex( filename ); + if( fileEntryIndex < 0 ) { - bool isAllFilesFilterActive = filters[filtersDropdown.value].extensions == null; - if( !m_acceptNonExistingFilename || !isAllFilesFilterActive ) + if( m_pickerMode != PickMode.Folders ) { - // File couldn't be found but perhaps filename is missing the extension, check if any of the files match the filename without extension - for( int i = 0; i < validFileEntries.Count; i++ ) + bool isAllFilesFilterActive = filters[filtersDropdown.value].extensions == null; + if( !m_acceptNonExistingFilename || !isAllFilesFilterActive ) { - if( !validFileEntries[i].IsDirectory && validFileEntries[i].Name.Length >= filename.Length + 2 && validFileEntries[i].Name[filename.Length] == '.' ) + // File couldn't be found but perhaps filename is missing the extension, check if any of the files match the filename without extension + for( int i = 0; i < validFileEntries.Count; i++ ) { - if( validFileEntries[i].Name.StartsWith( filename ) ) // Case-sensitive filename query - { - fileEntryIndex = i; - break; - } - else if( textComparer.IsPrefix( validFileEntries[i].Name, filename, textCompareOptions ) ) // Case-insensitive filename query + if( !validFileEntries[i].IsDirectory && validFileEntries[i].Name.Length >= filename.Length + 2 && validFileEntries[i].Name[filename.Length] == '.' ) { - // Don't exit the loop immediately because case-sensitive query takes precedence, we need to check all files to see if there's a case-sensitive match - fileEntryIndex = i; + if( validFileEntries[i].Name.StartsWith( filename ) ) // Case-sensitive filename query + { + fileEntryIndex = i; + break; + } + else if( textComparer.IsPrefix( validFileEntries[i].Name, filename, textCompareOptions ) ) // Case-insensitive filename query + { + // Don't exit the loop immediately because case-sensitive query takes precedence, we need to check all files to see if there's a case-sensitive match + fileEntryIndex = i; + } } } } - } - if( m_acceptNonExistingFilename && fileEntryIndex < 0 && !isAllFilesFilterActive ) - { - // In file saving mode, make sure that nonexisting files' extensions match one of the required extensions - string fileExtension = GetExtensionFromFilename( filename, AllExtensionsHaveSingleSuffix ); - if( string.IsNullOrEmpty( fileExtension ) || !filters[filtersDropdown.value].MatchesExtension( fileExtension, !AllExtensionsHaveSingleSuffix ) ) + if( m_acceptNonExistingFilename && fileEntryIndex < 0 && !isAllFilesFilterActive ) { - filename = Path.ChangeExtension( filename, filters[filtersDropdown.value].defaultExtension ); - fileEntryIndex = FilenameToFileEntryIndex( filename ); + // In file saving mode, make sure that nonexisting files' extensions match one of the required extensions + string fileExtension = GetExtensionFromFilename( filename, AllExtensionsHaveSingleSuffix ); + if( string.IsNullOrEmpty( fileExtension ) || !filters[filtersDropdown.value].MatchesExtension( fileExtension, !AllExtensionsHaveSingleSuffix ) ) + { + filename = Path.ChangeExtension( filename, filters[filtersDropdown.value].defaultExtension ); + fileEntryIndex = FilenameToFileEntryIndex( filename ); + } } } } - } - if( fileEntryIndex >= 0 ) // This is an existing file/folder - { - if( validFileEntries[fileEntryIndex].IsDirectory && m_pickerMode == PickMode.Files ) + if( fileEntryIndex >= 0 ) // This is an existing file/folder { - // Selected a directory in file selection mode, open that directory - CurrentPath = validFileEntries[fileEntryIndex].Path; - return; - } - else - submittedFilePaths.Add( validFileEntries[fileEntryIndex].Path ); - } - else // File/folder doesn't exist - { - if( !m_acceptNonExistingFilename ) - { - filenameImage.color = m_skin.InputFieldInvalidBackgroundColor; - return; + if( validFileEntries[fileEntryIndex].IsDirectory && m_pickerMode == PickMode.Files ) + { + // Selected a directory in file selection mode, open that directory + CurrentPath = validFileEntries[fileEntryIndex].Path; + return; + } + else + { + submittedFileEntryPaths.Add( validFileEntries[fileEntryIndex].Path ); + + if( validFileEntries[fileEntryIndex].IsDirectory ) + submittedFolderPaths.Add( validFileEntries[fileEntryIndex].Path ); + else if( m_acceptNonExistingFilename && !submittedFolderPaths.Contains( m_currentPath ) ) + submittedFolderPaths.Add( m_currentPath ); + } } - else + else // File/folder doesn't exist { -#if !UNITY_EDITOR && UNITY_ANDROID - if( FileBrowserHelpers.ShouldUseSAFForPath( m_currentPath ) ) + if( !m_acceptNonExistingFilename ) { - if( m_pickerMode == PickMode.Folders ) - submittedFilePaths.Add( FileBrowserHelpers.CreateFolderInDirectory( m_currentPath, filename ) ); - else - submittedFilePaths.Add( FileBrowserHelpers.CreateFileInDirectory( m_currentPath, filename ) ); + filenameImage.color = m_skin.InputFieldInvalidBackgroundColor; + return; } else -#endif { - submittedFilePaths.Add( Path.Combine( m_currentPath, filename ) ); +#if !UNITY_EDITOR && UNITY_ANDROID + if( FileBrowserHelpers.ShouldUseSAFForPath( m_currentPath ) ) + { + if( m_pickerMode == PickMode.Folders ) + submittedFileEntryPaths.Add( FileBrowserHelpers.CreateFolderInDirectory( m_currentPath, filename ) ); + else + submittedFileEntryPaths.Add( FileBrowserHelpers.CreateFileInDirectory( m_currentPath, filename ) ); + } + else +#endif + { + submittedFileEntryPaths.Add( Path.Combine( m_currentPath, filename ) ); + + if( !submittedFolderPaths.Contains( m_currentPath ) ) + submittedFolderPaths.Add( m_currentPath ); + } } } } + catch( ArgumentException e ) + { + filenameImage.color = m_skin.InputFieldInvalidBackgroundColor; + Debug.LogException( e ); + return; + } } - catch( ArgumentException e ) + + if( submittedFileEntryPaths.Count == 0 ) { filenameImage.color = m_skin.InputFieldInvalidBackgroundColor; - Debug.LogException( e ); return; } + + result = submittedFileEntryPaths.ToArray(); } + } - if( submittedFilePaths.Count == 0 ) + if( result != null ) + { + if( m_checkWriteAccessToDestinationDirectory ) { - filenameImage.color = m_skin.InputFieldInvalidBackgroundColor; - return; + for( int i = 0; i < submittedFolderPaths.Count; i++ ) + { + if( !string.IsNullOrEmpty( submittedFolderPaths[i] ) && !CheckDirectoryWriteAccess( submittedFolderPaths[i] ) ) + { + accessRestrictedPanel.Show(); + return; + } + } } - OnOperationSuccessful( submittedFilePaths.ToArray() ); + OnOperationSuccessful( result ); } } @@ -2718,6 +2777,34 @@ private bool CheckDirectoryExistsWithTimeout( string path, int timeout = 750 ) return directoryExists; } #endif + + private bool CheckDirectoryWriteAccess( string path ) + { +#if !UNITY_EDITOR && UNITY_ANDROID + if( FileBrowserHelpers.ShouldUseSAFForPath( path ) ) + return true; +#endif + string tempFilePath = Path.Combine( path, "__fsWrite.tmp" ); + try + { + File.Create( tempFilePath ).Close(); + File.Delete( tempFilePath ); + + return true; + } + catch + { + return false; + } + finally + { + try + { + File.Delete( tempFilePath ); + } + catch { } + } + } #endregion #region File Browser Functions (static) diff --git a/Plugins/SimpleFileBrowser/Scripts/FileBrowserAccessRestrictedPanel.cs b/Plugins/SimpleFileBrowser/Scripts/FileBrowserAccessRestrictedPanel.cs new file mode 100644 index 0000000..ccc0c3b --- /dev/null +++ b/Plugins/SimpleFileBrowser/Scripts/FileBrowserAccessRestrictedPanel.cs @@ -0,0 +1,58 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif + +namespace SimpleFileBrowser +{ + public class FileBrowserAccessRestrictedPanel : MonoBehaviour + { +#pragma warning disable 0649 + [SerializeField] + private Text messageLabel; + + [SerializeField] + private Button okButton; +#pragma warning restore 0649 + + internal void Show() + { + gameObject.SetActive( true ); + } + +#if UNITY_EDITOR || UNITY_STANDALONE || UNITY_WSA || UNITY_WSA_10_0 + private void LateUpdate() + { +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + if( Keyboard.current != null ) +#endif + { + // Handle keyboard shortcuts +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + if( Keyboard.current[Key.Enter].wasPressedThisFrame || Keyboard.current[Key.NumpadEnter].wasPressedThisFrame || Keyboard.current[Key.Escape].wasPressedThisFrame ) +#else + if( Input.GetKeyDown( KeyCode.Return ) || Input.GetKeyDown( KeyCode.KeypadEnter ) || Input.GetKeyDown( KeyCode.Escape ) ) +#endif + OKButtonClicked(); + } + } +#endif + + internal void RefreshSkin( UISkin skin ) + { + Image background = GetComponentInChildren(); + background.color = skin.DeletePanelBackgroundColor; + background.sprite = skin.DeletePanelBackground; + + skin.ApplyTo( okButton ); + skin.ApplyTo( messageLabel, skin.DeletePanelTextColor ); + } + + public void OKButtonClicked() + { + gameObject.SetActive( false ); + } + } +} \ No newline at end of file diff --git a/Plugins/SimpleFileBrowser/Scripts/FileBrowserAccessRestrictedPanel.cs.meta b/Plugins/SimpleFileBrowser/Scripts/FileBrowserAccessRestrictedPanel.cs.meta new file mode 100644 index 0000000..4b5b172 --- /dev/null +++ b/Plugins/SimpleFileBrowser/Scripts/FileBrowserAccessRestrictedPanel.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 85ea21be7cacb484cb6db0d183d3b2a8 +timeCreated: 1603800894 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/SimpleFileBrowser/Scripts/UISkin.cs b/Plugins/SimpleFileBrowser/Scripts/UISkin.cs index 022d48f..334fef2 100644 --- a/Plugins/SimpleFileBrowser/Scripts/UISkin.cs +++ b/Plugins/SimpleFileBrowser/Scripts/UISkin.cs @@ -509,29 +509,29 @@ public Color ContextMenuSeparatorColor set { if( m_contextMenuSeparatorColor != value ) { m_contextMenuSeparatorColor = value; m_version++; } } } - [Header( "Delete Confirmation Panel" )] - [SerializeField] - private Color m_deletePanelBackgroundColor = Color.grey; + [Header( "Popup Panels" )] + [SerializeField, UnityEngine.Serialization.FormerlySerializedAs( "m_deletePanelBackgroundColor" )] + private Color m_popupPanelsBackgroundColor = Color.grey; public Color DeletePanelBackgroundColor { - get { return m_deletePanelBackgroundColor; } - set { if( m_deletePanelBackgroundColor != value ) { m_deletePanelBackgroundColor = value; m_version++; } } + get { return m_popupPanelsBackgroundColor; } + set { if( m_popupPanelsBackgroundColor != value ) { m_popupPanelsBackgroundColor = value; m_version++; } } } - [SerializeField] - private Color m_deletePanelTextColor = Color.black; + [SerializeField, UnityEngine.Serialization.FormerlySerializedAs( "m_deletePanelTextColor" )] + private Color m_popupPanelsTextColor = Color.black; public Color DeletePanelTextColor { - get { return m_deletePanelTextColor; } - set { if( m_deletePanelTextColor != value ) { m_deletePanelTextColor = value; m_version++; } } + get { return m_popupPanelsTextColor; } + set { if( m_popupPanelsTextColor != value ) { m_popupPanelsTextColor = value; m_version++; } } } - [SerializeField] - private Sprite m_deletePanelBackground; + [SerializeField, UnityEngine.Serialization.FormerlySerializedAs( "m_deletePanelBackground" )] + private Sprite m_popupPanelsBackground; public Sprite DeletePanelBackground { - get { return m_deletePanelBackground; } - set { if( m_deletePanelBackground != value ) { m_deletePanelBackground = value; m_version++; } } + get { return m_popupPanelsBackground; } + set { if( m_popupPanelsBackground != value ) { m_popupPanelsBackground = value; m_version++; } } } #pragma warning restore 0649 diff --git a/Plugins/SimpleFileBrowser/Sprites/ErrorIcon.psd b/Plugins/SimpleFileBrowser/Sprites/ErrorIcon.psd new file mode 100644 index 0000000000000000000000000000000000000000..c96c48f1d7b6eed7972836511e4fab696d210f72 GIT binary patch literal 54471 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 X1#6o-6r+NG7I24RT;}uwwd4N*x7ew9 literal 0 HcmV?d00001 diff --git a/Plugins/SimpleFileBrowser/Sprites/ErrorIcon.psd.meta b/Plugins/SimpleFileBrowser/Sprites/ErrorIcon.psd.meta new file mode 100644 index 0000000..15ea6ff --- /dev/null +++ b/Plugins/SimpleFileBrowser/Sprites/ErrorIcon.psd.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 01b10cc2da49f7442ba6525072e1f86a +timeCreated: 1465923851 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 64 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 64 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 64 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Windows Store Apps + maxTextureSize: 64 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: SimpleFileBrowserUI + userData: + assetBundleName: + assetBundleVariant: