public void LoadProfiles(string fileName){

			__profiles=Resources.Load<DeviceProfiles> ("DeviceProfiles");

		}
				void Awake ()
				{
						__profiles = (DeviceProfiles)target;
				}
		public void SetProfiles(DeviceProfiles profiles){

			__profiles = profiles;
		}
				/// <summary>
				/// onGUI
				/// </summary>
				/////////////////    onGUI   ////////////
				void OnGUI ()
				{



						///////////////      DEVICES      ///////////////
						if (_profiles != null) {
								List<IDevice> devicesList = InputManager.GetDevices<IDevice> ();

                               

								if (devicesList.Count > 0) {
										_displayOptions = devicesList.Select (item => item.Name).ToArray ();

										_deviceDisplayIndex = EditorGUILayout.Popup ("Devices:", _deviceDisplayIndex, _displayOptions);

										_deviceSelected = devicesList [_deviceDisplayIndex];


                                        if (!String.IsNullOrEmpty(_profileNameSelected))
                                        {

                                            EditorGUILayout.BeginHorizontal();
                                            if (GUILayout.Button("Assign Profile"))
                                            {

                                                string pidVidKey = _deviceSelected.VID.ToString("X4") + "#" + _deviceSelected.PID.ToString("X4");
                                                _profiles.vidpidProfileNameDict[pidVidKey] = _profileNameSelected;

                                                EditorUtility.SetDirty(_profiles);
                                                AssetDatabase.SaveAssets();
                                            }

                                            if (GUILayout.Button("Remove From Profile"))
                                            {

                                                string pidVidKey = _deviceSelected.VID.ToString("X4") + "#" + _deviceSelected.PID.ToString("X4");

                                                _profiles.vidpidProfileNameDict.Remove(pidVidKey);

                                                EditorUtility.SetDirty(_profiles);
                                                AssetDatabase.SaveAssets();

                                            }

                                            EditorGUILayout.EndHorizontal();

                                        }

                                      
								} else {

										EditorGUILayout.LabelField ("Devices: No attached devices");
								}



                                if (_deviceCount != devicesList.Count)
                                    this.Repaint();

                                _deviceCount = devicesList.Count;
						}



                     


//				if(GUILayout.Button("Proifle2DeviceProfile")){
//						char splitChar = '|';
//
//						string fileBase;
//
//						foreach(var kvp in _profiles.runtimePlatformDeviceProfileDict){
//
//						fileBase=kvp.Key;
//
//						DeviceProfile profile;
//
//						profile=kvp.Value[RuntimePlatform.WindowsPlayer]=new DeviceProfile();
//						profile.Name=kvp.Key;
//						
//						using (StreamReader reader = new StreamReader(Path.Combine(Application.streamingAssetsPath, fileBase + "_win.txt")))
//						{
//							
//							if (!reader.EndOfStream)
//								profile.buttonNaming = reader.ReadLine().Split(splitChar);
//							
//							if (!reader.EndOfStream)
//								profile.axisNaming = reader.ReadLine().Split(splitChar);
//							
//							//rest in future
//							
//							
//							
//						}
//
//						profile=kvp.Value[RuntimePlatform.OSXPlayer]=new DeviceProfile();
//						profile.Name=kvp.Key;
//
//						using (StreamReader reader = new StreamReader(Path.Combine(Application.streamingAssetsPath, fileBase + "_osx.txt")))
//						{
//							
//							if (!reader.EndOfStream)
//								profile.buttonNaming = reader.ReadLine().Split(splitChar);
//							
//							if (!reader.EndOfStream)
//								profile.axisNaming = reader.ReadLine().Split(splitChar);
//							
//							//rest in future
//							
//							
//							
//						}
//
//
//					}
//
//					EditorUtility.SetDirty (_profiles);
//					AssetDatabase.SaveAssets ();
//
//				}


//								if (GUILayout.Button ("Profiles.txt2DeviceProfiles.asset")) {
//										string[] deviceNameProfilePair;
//										char splitChar = '|';
//
//										using (StreamReader reader = new StreamReader(Path.Combine(Application.streamingAssetsPath, "profiles.txt"))) {
//					
//					
//												while (!reader.EndOfStream) {
//						
//														deviceNameProfilePair = reader.ReadLine ().Split (splitChar);
//														if (!_profiles.vidpidProfileNameDict.ContainsKey (deviceNameProfilePair [0]))
//																_profiles.vidpidProfileNameDict [deviceNameProfilePair [0]] = deviceNameProfilePair [1];
//
//														if (!_profiles.runtimePlatformDeviceProfileDict.ContainsKey (deviceNameProfilePair [1])) {
//
//																_profiles.runtimePlatformDeviceProfileDict [deviceNameProfilePair [1]] = new Dictionary<RuntimePlatform, DeviceProfile> ();
//														}
//												}
//
//												EditorUtility.SetDirty (_profiles);
//												AssetDatabase.SaveAssets ();
//					
//										}
//								}

							
						
						

						EditorGUILayout.Separator ();



						///////////////  PROFILES /////////////

						_profiles = EditorGUILayout.ObjectField (_profiles, typeof(DeviceProfiles), false) as DeviceProfiles;

						if (_deviceSelected != null && _profiles != null) {
								

								_displayOptions = _profiles.runtimePlatformDeviceProfileDict.Keys.ToArray ();

								if (_displayOptions.Length > 0) {
										_profileIndexSelected = EditorGUILayout.Popup ("Profiles:", _profileIndexSelected, _displayOptions);
										_profileNameSelected = _displayOptions [_profileIndexSelected];
								}

								EditorGUILayout.BeginHorizontal ();

								_profileName = EditorGUILayout.TextField ("Name", _profileName);

								if (GUILayout.Button ("Add profile") && !String.IsNullOrEmpty (_profileName)) {
										

										if (!_profiles.runtimePlatformDeviceProfileDict.ContainsKey (_profileName)) {

											
												_profiles.runtimePlatformDeviceProfileDict [_profileName] = new Dictionary<RuntimePlatform, DeviceProfile> ();
										} else {

												Debug.LogWarning ("Already contain such profile");
										}

										_profileName = String.Empty;

										EditorUtility.SetDirty (_profiles);
										AssetDatabase.SaveAssets ();

								}


								


								EditorGUILayout.EndHorizontal ();

								EditorGUILayout.Separator ();
				

								///////////////// NAMING(buttons,axis..) //////////////
								string actionCodeString = "Click button or Move stick";
								DeviceProfile profile = null;
								JoystickAxis axis = JoystickAxis.None;
								string nameGivenCurrent = "No Name";
			
								if (!String.IsNullOrEmpty (_profileNameSelected)) {
										///// CURRENT ACTION /////
										/// 
										/// 
										EditorGUILayout.BeginHorizontal ();
										EditorGUILayout.LabelField ("GENERIC NAME:");

										

										if (_actionSelected != null) {


												actionCodeString = _actionSelected.codeString;
												//find axis button number
												axis = InputCode.toAxis (_actionSelected.getCode (_deviceSelected));

												_platform = Application.platform == RuntimePlatform.OSXEditor ? RuntimePlatform.OSXPlayer : RuntimePlatform.WindowsPlayer;
											
											
											
											
												if (_profiles.runtimePlatformDeviceProfileDict [_profileNameSelected].ContainsKey (_platform)) {
														profile = _profiles.runtimePlatformDeviceProfileDict [_profileNameSelected] [_platform];
												
												
												
												
														if (axis == JoystickAxis.None) {
																nameGivenCurrent = profile.buttonNaming [InputCode.toData (_actionSelected.getCode (_deviceSelected))];
														} else {
																nameGivenCurrent = profile.axisNaming [(int)axis];
														}
												}
										}

										EditorGUILayout.LabelField (actionCodeString);

										EditorGUILayout.EndHorizontal ();

										EditorGUILayout.Separator ();

										///// GIVE NAME ////			
										EditorGUILayout.BeginHorizontal ();



                                        if (String.IsNullOrEmpty(nameGivenCurrent))
                                        {
                                            nameGivenCurrent = "No Name [Click to Edit]";
                                            _nameGiven = String.Empty;
                                        }
                                        else
                                            _nameGiven = nameGivenCurrent;

										if (_actionSelected != null)
										if (!_nameGiveEdit
												&& GUILayout.Button (nameGivenCurrent))
												_nameGiveEdit = true;


										if (_nameGiveEdit) {
												_nameGiven = EditorGUILayout.TextField ("Name", _nameGiven);
				

									

												if (GUILayout.Button ("Give") || (Event.current.isKey && Event.current.keyCode == KeyCode.Return))
												if (!String.IsNullOrEmpty (_profileNameSelected) && !String.IsNullOrEmpty (_nameGiven)) {


									
							
									
														if (profile == null) {
																profile = new DeviceProfile ();
																profile.Name = _profileNameSelected;
																_profiles.runtimePlatformDeviceProfileDict [_profileNameSelected] [_platform] = profile;
										
														}

														if (axis == JoystickAxis.None) {
																profile.buttonNaming [InputCode.toData (_actionSelected.getCode (_deviceSelected))] = _nameGiven;
														} else {
																profile.axisNaming [(int)axis] = _nameGiven;
														}
											
									
														_actionSelected = null;
														_nameGiven = String.Empty;

														EditorUtility.SetDirty (_profiles);

														AssetDatabase.SaveAssets ();


														_nameGiveEdit = false;

														this.Repaint ();
										
												}



										}


										EditorGUILayout	.EndHorizontal ();
								}
						}
						

						///////////////         CREATE ASSET       ////////////////
						if (GUILayout.Button ("Create Assets/Resources/DeviceProfiles.asset")) {

								if (!Directory.Exists (Path.Combine (Application.dataPath, "Resources")))
										AssetDatabase.CreateFolder ("Assets", "Resources");
								
								if (File.Exists (Path.Combine (Path.Combine (Application.dataPath, "Resources"), "DeviceProfiles.asset"))) {
					
										if (EditorUtility.DisplayDialog ("DeviceProfiles Asset Exists!",
					                            "Are you sure you overwrite?", "Yes", "Cancel")) {
												AssetDatabase.CreateAsset (ScriptableObject.CreateInstance<DeviceProfiles> (), "Assets/Resources/DeviceProfiles.asset");
										}
								} else {
										AssetDatabase.CreateAsset (ScriptableObject.CreateInstance<DeviceProfiles> (), "Assets/Resources/DeviceProfiles.asset");
								}
				
				
						}






						//if event is of key or mouse
						if (Event.current.isKey) {
									
								if (Event.current.keyCode == KeyCode.Escape) {
										_nameGiveEdit = false;
										_instance.Repaint ();
								}		
						}
			
			
				}