示例#1
0
 internal static string DoTextField(EditorGUI.RecycledTextEditor editor, int id, Rect position, string text, GUIStyle style, string allowedletters, out bool changed, bool reset, bool multiline, bool passwordField)
 {
   Event current = Event.current;
   string str1 = text;
   if (text == null)
     text = string.Empty;
   if (EditorGUI.showMixedValue)
     text = string.Empty;
   if (EditorGUI.HasKeyboardFocus(id) && Event.current.type != EventType.Layout)
   {
     if (editor.IsEditingControl(id))
     {
       editor.position = position;
       editor.style = style;
       editor.controlID = id;
       editor.multiline = multiline;
       editor.isPasswordField = passwordField;
       editor.DetectFocusChange();
     }
     else if (EditorGUIUtility.editingTextField)
     {
       editor.BeginEditing(id, text, position, style, multiline, passwordField);
       if ((double) GUI.skin.settings.cursorColor.a > 0.0)
         editor.SelectAll();
     }
   }
   if (editor.controlID == id && GUIUtility.keyboardControl != id)
     editor.controlID = 0;
   bool flag1 = false;
   string text1 = editor.text;
   EventType typeForControl = current.GetTypeForControl(id);
   switch (typeForControl)
   {
     case EventType.MouseDown:
       if (position.Contains(current.mousePosition) && current.button == 0)
       {
         if (editor.IsEditingControl(id))
         {
           if (Event.current.clickCount == 2 && GUI.skin.settings.doubleClickSelectsWord)
           {
             editor.MoveCursorToPosition(Event.current.mousePosition);
             editor.SelectCurrentWord();
             editor.MouseDragSelectsWholeWords(true);
             editor.DblClickSnap(TextEditor.DblClickSnapping.WORDS);
             EditorGUI.s_DragToPosition = false;
           }
           else if (Event.current.clickCount == 3 && GUI.skin.settings.tripleClickSelectsLine)
           {
             editor.MoveCursorToPosition(Event.current.mousePosition);
             editor.SelectCurrentParagraph();
             editor.MouseDragSelectsWholeWords(true);
             editor.DblClickSnap(TextEditor.DblClickSnapping.PARAGRAPHS);
             EditorGUI.s_DragToPosition = false;
           }
           else
           {
             editor.MoveCursorToPosition(Event.current.mousePosition);
             EditorGUI.s_SelectAllOnMouseUp = false;
           }
         }
         else
         {
           GUIUtility.keyboardControl = id;
           editor.BeginEditing(id, text, position, style, multiline, passwordField);
           editor.MoveCursorToPosition(Event.current.mousePosition);
           if ((double) GUI.skin.settings.cursorColor.a > 0.0)
             EditorGUI.s_SelectAllOnMouseUp = true;
         }
         GUIUtility.hotControl = id;
         current.Use();
         break;
       }
       break;
     case EventType.MouseUp:
       if (GUIUtility.hotControl == id)
       {
         if (EditorGUI.s_Dragged && EditorGUI.s_DragToPosition)
         {
           editor.MoveSelectionToAltCursor();
           flag1 = true;
         }
         else if (EditorGUI.s_PostPoneMove)
           editor.MoveCursorToPosition(Event.current.mousePosition);
         else if (EditorGUI.s_SelectAllOnMouseUp)
         {
           if ((double) GUI.skin.settings.cursorColor.a > 0.0)
             editor.SelectAll();
           EditorGUI.s_SelectAllOnMouseUp = false;
         }
         editor.MouseDragSelectsWholeWords(false);
         EditorGUI.s_DragToPosition = true;
         EditorGUI.s_Dragged = false;
         EditorGUI.s_PostPoneMove = false;
         if (current.button == 0)
         {
           GUIUtility.hotControl = 0;
           current.Use();
           break;
         }
         break;
       }
       break;
     case EventType.MouseDrag:
       if (GUIUtility.hotControl == id)
       {
         if (!current.shift && editor.hasSelection && EditorGUI.s_DragToPosition)
         {
           editor.MoveAltCursorToPosition(Event.current.mousePosition);
         }
         else
         {
           if (current.shift)
             editor.MoveCursorToPosition(Event.current.mousePosition);
           else
             editor.SelectToPosition(Event.current.mousePosition);
           EditorGUI.s_DragToPosition = false;
           EditorGUI.s_SelectAllOnMouseUp = !editor.hasSelection;
         }
         EditorGUI.s_Dragged = true;
         current.Use();
         break;
       }
       break;
     case EventType.KeyDown:
       if (GUIUtility.keyboardControl == id)
       {
         char character = current.character;
         if (editor.IsEditingControl(id) && editor.HandleKeyEvent(current))
         {
           current.Use();
           flag1 = true;
           break;
         }
         if (current.keyCode == KeyCode.Escape)
         {
           if (editor.IsEditingControl(id))
           {
             if (style == EditorStyles.toolbarSearchField || style == EditorStyles.searchField)
               EditorGUI.s_OriginalText = string.Empty;
             editor.text = EditorGUI.s_OriginalText;
             editor.EndEditing();
             flag1 = true;
             break;
           }
           break;
         }
         if ((int) character == 10 || (int) character == 3)
         {
           if (!editor.IsEditingControl(id))
           {
             editor.BeginEditing(id, text, position, style, multiline, passwordField);
             editor.SelectAll();
           }
           else if (!multiline || current.alt || (current.shift || current.control))
           {
             editor.EndEditing();
           }
           else
           {
             editor.Insert(character);
             flag1 = true;
             break;
           }
           current.Use();
           break;
         }
         if ((int) character == 9 || current.keyCode == KeyCode.Tab)
         {
           if (multiline && editor.IsEditingControl(id))
           {
             bool flag2 = allowedletters == null || allowedletters.IndexOf(character) != -1;
             if (!current.alt && !current.shift && !current.control && (int) character == 9 && flag2)
             {
               editor.Insert(character);
               flag1 = true;
               break;
             }
             break;
           }
           break;
         }
         if ((int) character != 25 && (int) character != 27 && editor.IsEditingControl(id))
         {
           if ((allowedletters == null || allowedletters.IndexOf(character) != -1) && (int) character != 0)
           {
             editor.Insert(character);
             flag1 = true;
             break;
           }
           if (Input.compositionString != string.Empty)
           {
             editor.ReplaceSelection(string.Empty);
             flag1 = true;
           }
           current.Use();
           break;
         }
         break;
       }
       break;
     case EventType.Repaint:
       string str2 = !editor.IsEditingControl(id) ? (!EditorGUI.showMixedValue ? (!passwordField ? text : string.Empty.PadRight(text.Length, '*')) : EditorGUI.s_MixedValueContent.text) : (!passwordField ? editor.text : string.Empty.PadRight(editor.text.Length, '*'));
       if (!string.IsNullOrEmpty(EditorGUI.s_UnitString) && !passwordField)
         str2 = str2 + " " + EditorGUI.s_UnitString;
       if (GUIUtility.hotControl == 0)
         EditorGUIUtility.AddCursorRect(position, MouseCursor.Text);
       if (!editor.IsEditingControl(id))
       {
         EditorGUI.BeginHandleMixedValueContentColor();
         style.Draw(position, EditorGUIUtility.TempContent(str2), id, false);
         EditorGUI.EndHandleMixedValueContentColor();
         break;
       }
       editor.DrawCursor(str2);
       break;
     default:
       switch (typeForControl - 13)
       {
         case EventType.MouseDown:
           if (GUIUtility.keyboardControl == id)
           {
             string commandName = current.commandName;
             if (commandName != null)
             {
               // ISSUE: reference to a compiler-generated field
               if (EditorGUI.\u003C\u003Ef__switch\u0024map0 == null)
               {
                 // ISSUE: reference to a compiler-generated field
                 EditorGUI.\u003C\u003Ef__switch\u0024map0 = new Dictionary<string, int>(6)
                 {
                   {
                     "Cut",
                     0
                   },
                   {
                     "Copy",
                     0
                   },
                   {
                     "Paste",
                     1
                   },
                   {
                     "SelectAll",
                     2
                   },
                   {
                     "UndoRedoPerformed",
                     3
                   },
                   {
                     "Delete",
                     4
                   }
                 };
               }
               int num;
               // ISSUE: reference to a compiler-generated field
               if (EditorGUI.\u003C\u003Ef__switch\u0024map0.TryGetValue(commandName, out num))
               {
                 switch (num)
                 {
                   case 0:
                     if (editor.hasSelection)
                     {
                       current.Use();
                       break;
                     }
                     break;
                   case 1:
                     if (editor.CanPaste())
                     {
                       current.Use();
                       break;
                     }
                     break;
                   case 2:
                     current.Use();
                     break;
                   case 3:
                     editor.text = text;
                     current.Use();
                     break;
                   case 4:
                     current.Use();
                     break;
                 }
               }
               else
                 break;
             }
             else
               break;
           }
           else
             break;
         case EventType.MouseUp:
           if (GUIUtility.keyboardControl == id)
           {
             string commandName = current.commandName;
             if (commandName != null)
             {
               // ISSUE: reference to a compiler-generated field
               if (EditorGUI.\u003C\u003Ef__switch\u0024map1 == null)
               {
                 // ISSUE: reference to a compiler-generated field
                 EditorGUI.\u003C\u003Ef__switch\u0024map1 = new Dictionary<string, int>(6)
                 {
                   {
                     "OnLostFocus",
                     0
                   },
                   {
                     "Cut",
                     1
                   },
                   {
                     "Copy",
                     2
                   },
                   {
                     "Paste",
                     3
                   },
                   {
                     "SelectAll",
                     4
                   },
                   {
                     "Delete",
                     5
                   }
                 };
               }
               int num;
               // ISSUE: reference to a compiler-generated field
               if (EditorGUI.\u003C\u003Ef__switch\u0024map1.TryGetValue(commandName, out num))
               {
                 switch (num)
                 {
                   case 0:
                     if (EditorGUI.activeEditor != null)
                       EditorGUI.activeEditor.EndEditing();
                     current.Use();
                     break;
                   case 1:
                     editor.BeginEditing(id, text, position, style, multiline, passwordField);
                     editor.Cut();
                     flag1 = true;
                     break;
                   case 2:
                     editor.Copy();
                     current.Use();
                     break;
                   case 3:
                     editor.BeginEditing(id, text, position, style, multiline, passwordField);
                     editor.Paste();
                     flag1 = true;
                     break;
                   case 4:
                     editor.SelectAll();
                     current.Use();
                     break;
                   case 5:
                     editor.BeginEditing(id, text, position, style, multiline, passwordField);
                     if (Application.platform == RuntimePlatform.OSXPlayer || Application.platform == RuntimePlatform.OSXWebPlayer || (Application.platform == RuntimePlatform.OSXDashboardPlayer || Application.platform == RuntimePlatform.OSXEditor) || Application.platform == RuntimePlatform.WebGLPlayer && SystemInfo.operatingSystem.StartsWith("Mac"))
                       editor.Delete();
                     else
                       editor.Cut();
                     flag1 = true;
                     current.Use();
                     break;
                 }
               }
               else
                 break;
             }
             else
               break;
           }
           else
             break;
         case EventType.MouseDrag:
           if (position.Contains(current.mousePosition))
           {
             if (!editor.IsEditingControl(id))
             {
               GUIUtility.keyboardControl = id;
               editor.BeginEditing(id, text, position, style, multiline, passwordField);
               editor.MoveCursorToPosition(Event.current.mousePosition);
             }
             EditorGUI.ShowTextEditorPopupMenu();
             Event.current.Use();
             break;
           }
           break;
       }
   }
   if (GUIUtility.keyboardControl == id)
     GUIUtility.textFieldInput = true;
   editor.UpdateScrollOffsetIfNeeded();
   changed = false;
   if (flag1)
   {
     changed = text1 != editor.text;
     current.Use();
   }
   if (changed)
   {
     GUI.changed = true;
     return editor.text;
   }
   EditorGUI.RecycledTextEditor.s_AllowContextCutOrPaste = true;
   return str1;
 }
示例#2
0
		internal static string DoTextField(EditorGUI.RecycledTextEditor editor, int id, Rect position, string text, GUIStyle style, string allowedletters, out bool changed, bool reset, bool multiline, bool passwordField)
		{
			Event current = Event.current;
			string result = text;
			if (text == null)
			{
				text = string.Empty;
			}
			if (EditorGUI.showMixedValue)
			{
				text = string.Empty;
			}
			if (EditorGUI.HasKeyboardFocus(id) && Event.current.type != EventType.Layout)
			{
				if (editor.IsEditingControl(id))
				{
					editor.position = position;
					editor.style = style;
					editor.controlID = id;
					editor.multiline = multiline;
					editor.isPasswordField = passwordField;
					editor.ClampPos();
					editor.UpdateScrollOffsetIfNeeded();
				}
				else
				{
					if (EditorGUIUtility.editingTextField)
					{
						editor.BeginEditing(id, text, position, style, multiline, passwordField);
						if (GUI.skin.settings.cursorColor.a > 0f)
						{
							editor.SelectAll();
						}
					}
				}
			}
			if (editor.controlID == id && GUIUtility.keyboardControl != id)
			{
				editor.controlID = 0;
			}
			bool flag = false;
			string text2 = editor.content.text;
			EventType typeForControl = current.GetTypeForControl(id);
			switch (typeForControl)
			{
			case EventType.MouseDown:
				if (position.Contains(current.mousePosition) && current.button == 0)
				{
					if (editor.IsEditingControl(id))
					{
						if (Event.current.clickCount == 2 && GUI.skin.settings.doubleClickSelectsWord)
						{
							editor.MoveCursorToPosition(Event.current.mousePosition);
							editor.SelectCurrentWord();
							editor.MouseDragSelectsWholeWords(true);
							editor.DblClickSnap(TextEditor.DblClickSnapping.WORDS);
							EditorGUI.s_DragToPosition = false;
						}
						else
						{
							if (Event.current.clickCount == 3 && GUI.skin.settings.tripleClickSelectsLine)
							{
								editor.MoveCursorToPosition(Event.current.mousePosition);
								editor.SelectCurrentParagraph();
								editor.MouseDragSelectsWholeWords(true);
								editor.DblClickSnap(TextEditor.DblClickSnapping.PARAGRAPHS);
								EditorGUI.s_DragToPosition = false;
							}
							else
							{
								editor.MoveCursorToPosition(Event.current.mousePosition);
								EditorGUI.s_SelectAllOnMouseUp = false;
							}
						}
					}
					else
					{
						GUIUtility.keyboardControl = id;
						editor.BeginEditing(id, text, position, style, multiline, passwordField);
						editor.MoveCursorToPosition(Event.current.mousePosition);
						if (GUI.skin.settings.cursorColor.a > 0f)
						{
							EditorGUI.s_SelectAllOnMouseUp = true;
						}
					}
					GUIUtility.hotControl = id;
					current.Use();
				}
				goto IL_967;
			case EventType.MouseUp:
				if (GUIUtility.hotControl == id)
				{
					if (EditorGUI.s_Dragged && EditorGUI.s_DragToPosition)
					{
						editor.MoveSelectionToAltCursor();
						flag = true;
					}
					else
					{
						if (EditorGUI.s_PostPoneMove)
						{
							editor.MoveCursorToPosition(Event.current.mousePosition);
						}
						else
						{
							if (EditorGUI.s_SelectAllOnMouseUp)
							{
								if (GUI.skin.settings.cursorColor.a > 0f)
								{
									editor.SelectAll();
								}
								EditorGUI.s_SelectAllOnMouseUp = false;
							}
						}
					}
					editor.MouseDragSelectsWholeWords(false);
					EditorGUI.s_DragToPosition = true;
					EditorGUI.s_Dragged = false;
					EditorGUI.s_PostPoneMove = false;
					if (current.button == 0)
					{
						GUIUtility.hotControl = 0;
						current.Use();
					}
				}
				goto IL_967;
			case EventType.MouseMove:
			case EventType.KeyUp:
			case EventType.ScrollWheel:
				IL_121:
				switch (typeForControl)
				{
				case EventType.ValidateCommand:
					if (GUIUtility.keyboardControl == id)
					{
						string commandName = current.commandName;
						switch (commandName)
						{
						case "Cut":
						case "Copy":
							if (editor.hasSelection)
							{
								current.Use();
							}
							break;
						case "Paste":
							if (editor.CanPaste())
							{
								current.Use();
							}
							break;
						case "SelectAll":
							current.Use();
							break;
						case "UndoRedoPerformed":
							editor.content.text = text;
							current.Use();
							break;
						}
					}
					goto IL_967;
				case EventType.ExecuteCommand:
					if (GUIUtility.keyboardControl == id)
					{
						string commandName = current.commandName;
						switch (commandName)
						{
						case "OnLostFocus":
							if (EditorGUI.activeEditor != null)
							{
								EditorGUI.activeEditor.EndEditing();
							}
							current.Use();
							break;
						case "Cut":
							editor.BeginEditing(id, text, position, style, multiline, passwordField);
							editor.Cut();
							flag = true;
							break;
						case "Copy":
							editor.Copy();
							current.Use();
							break;
						case "Paste":
							editor.BeginEditing(id, text, position, style, multiline, passwordField);
							editor.Paste();
							flag = true;
							break;
						case "SelectAll":
							editor.SelectAll();
							current.Use();
							break;
						}
					}
					goto IL_967;
				case EventType.DragExited:
					goto IL_967;
				case EventType.ContextClick:
					if (position.Contains(current.mousePosition))
					{
						if (!editor.IsEditingControl(id))
						{
							GUIUtility.keyboardControl = id;
							editor.BeginEditing(id, text, position, style, multiline, passwordField);
							editor.MoveCursorToPosition(Event.current.mousePosition);
						}
						EditorGUI.ShowTextEditorPopupMenu();
						Event.current.Use();
					}
					goto IL_967;
				default:
					goto IL_967;
				}
				break;
			case EventType.MouseDrag:
				if (GUIUtility.hotControl == id)
				{
					if (!current.shift && editor.hasSelection && EditorGUI.s_DragToPosition)
					{
						editor.MoveAltCursorToPosition(Event.current.mousePosition);
					}
					else
					{
						if (current.shift)
						{
							editor.MoveCursorToPosition(Event.current.mousePosition);
						}
						else
						{
							editor.SelectToPosition(Event.current.mousePosition);
						}
						EditorGUI.s_DragToPosition = false;
						EditorGUI.s_SelectAllOnMouseUp = !editor.hasSelection;
					}
					EditorGUI.s_Dragged = true;
					current.Use();
				}
				goto IL_967;
			case EventType.KeyDown:
				if (GUIUtility.keyboardControl == id)
				{
					char character = current.character;
					if (editor.IsEditingControl(id) && editor.HandleKeyEvent(current))
					{
						current.Use();
						flag = true;
					}
					else
					{
						if (current.keyCode == KeyCode.Escape)
						{
							if (editor.IsEditingControl(id))
							{
								if (style == EditorStyles.toolbarSearchField || style == EditorStyles.searchField)
								{
									EditorGUI.s_OriginalText = string.Empty;
								}
								editor.content.text = EditorGUI.s_OriginalText;
								editor.EndEditing();
								flag = true;
							}
						}
						else
						{
							if (character == '\n' || character == '\u0003')
							{
								if (!editor.IsEditingControl(id))
								{
									editor.BeginEditing(id, text, position, style, multiline, passwordField);
									editor.SelectAll();
								}
								else
								{
									if (multiline && !current.alt && !current.shift && !current.control)
									{
										editor.Insert(character);
										flag = true;
										goto IL_967;
									}
									editor.EndEditing();
								}
								current.Use();
							}
							else
							{
								if (character == '\t' || current.keyCode == KeyCode.Tab)
								{
									if (multiline && editor.IsEditingControl(id))
									{
										bool flag2 = allowedletters == null || allowedletters.IndexOf(character) != -1;
										bool flag3 = !current.alt && !current.shift && !current.control && character == '\t';
										if (flag3 && flag2)
										{
											editor.Insert(character);
											flag = true;
										}
									}
								}
								else
								{
									if (character != '\u0019' && character != '\u001b')
									{
										if (editor.IsEditingControl(id))
										{
											bool flag4 = (allowedletters == null || allowedletters.IndexOf(character) != -1) && character != '\0';
											if (flag4)
											{
												editor.Insert(character);
												flag = true;
											}
											else
											{
												if (Input.compositionString != string.Empty)
												{
													editor.ReplaceSelection(string.Empty);
													flag = true;
												}
												current.Use();
											}
										}
									}
								}
							}
						}
					}
				}
				goto IL_967;
			case EventType.Repaint:
			{
				string text3;
				if (editor.IsEditingControl(id))
				{
					text3 = ((!passwordField) ? editor.content.text : string.Empty.PadRight(editor.content.text.Length, '*'));
				}
				else
				{
					if (EditorGUI.showMixedValue)
					{
						text3 = EditorGUI.s_MixedValueContent.text;
					}
					else
					{
						text3 = ((!passwordField) ? text : string.Empty.PadRight(text.Length, '*'));
					}
				}
				if (!string.IsNullOrEmpty(EditorGUI.s_UnitString) && !passwordField)
				{
					text3 = text3 + " " + EditorGUI.s_UnitString;
				}
				if (GUIUtility.hotControl == 0)
				{
					EditorGUIUtility.AddCursorRect(position, MouseCursor.Text);
				}
				if (!editor.IsEditingControl(id))
				{
					EditorGUI.BeginHandleMixedValueContentColor();
					style.Draw(position, EditorGUIUtility.TempContent(text3), id, false);
					EditorGUI.EndHandleMixedValueContentColor();
				}
				else
				{
					editor.DrawCursor(text3);
				}
				goto IL_967;
			}
			}
			goto IL_121;
			IL_967:
			if (GUIUtility.keyboardControl == id)
			{
				GUIUtility.textFieldInput = true;
			}
			changed = false;
			if (flag)
			{
				changed = (text2 != editor.content.text);
				current.Use();
			}
			if (changed)
			{
				GUI.changed = true;
				return editor.content.text;
			}
			EditorGUI.RecycledTextEditor.s_AllowContextCutOrPaste = true;
			return result;
		}