public IEnumerable<ConditionItem> Transform(ConditionItem item, Type type) { DateTime willTime; if (DateTime.TryParse(item.Value.ToString(), out willTime)) { var method = item.Method; if (method == QueryMethod.LessThan || method == QueryMethod.LessThanOrEqual) { method = QueryMethod.DateTimeLessThanOrEqual; if (willTime.Hour == 0 && willTime.Minute == 0 && willTime.Second == 0) { willTime = willTime.AddDays(1).AddMilliseconds(-1); } } object value = null; if (type == typeof(DateTime)) { value = willTime; } else if (type == typeof(int)) { value = (int)UnixTime.FromDateTime(willTime); }else if (type == typeof(long)) { value = UnixTime.FromDateTime(willTime); } return new[] { new ConditionItem(item.Field, method, value) }; } return new[] { new ConditionItem(item.Field, item.Method, Convert.ChangeType(item.Value,type)) }; }
/// <summary> /// 将一组key=value添加入QueryModel.Items /// </summary> /// <param name="model">QueryModel</param> /// <param name="key">当前项的HtmlName</param> /// <param name="val">当前项的值</param> public static void AddSearchItem(QueryModel model, string key, string val) { string field = "", prefix = "", orGroup = "", method = ""; var keywords = key.Split(']', ')', '}'); //将Html中的name分割为我们想要的几个部分 foreach (var keyword in keywords) { if (Char.IsLetterOrDigit(keyword[0])) field = keyword; var last = keyword.Substring(1); if (keyword[0] == '(') prefix = last; if (keyword[0] == '[') method = last; if (keyword[0] == '{') orGroup = last; } if (string.IsNullOrEmpty(method)) return; if (!string.IsNullOrEmpty(field)) { var item = new ConditionItem { Field = field, Value = val.Trim(), Prefix = prefix, OrGroup = orGroup, Method = (QueryMethod) Enum.Parse(typeof (QueryMethod), method) }; model.Items.Add(item); } }
public IEnumerable<ConditionItem> Transform(ConditionItem item, Type type) { return new[] { new ConditionItem(item.Field, QueryMethod.GreaterThanOrEqual, item.Value), new ConditionItem(item.Field, QueryMethod.LessThan, item.Value) }; }
public bool Match(ConditionItem item, Type type) { var elementType = TypeUtil.GetUnNullableType(type); return ((elementType == typeof (int) && !(item.Value is int)) || (elementType == typeof (long) && !(item.Value is long)) || (elementType == typeof (DateTime) && !(item.Value is DateTime)) ) && item.Value.ToString().Contains("-"); }
public ExpressionPanel GetNewExpressionPanel(ConditionItem item) { ExpressionPanel panel = new ExpressionPanel(); panel.Margin = new Thickness(50, 0, 0, 10); panel.Background = new SolidColorBrush(); panel.DisplayFromLoop(item); panel.Height = 30; initHandlers(panel); return(panel); }
public void InString() { var item = new ConditionItem { Field = "Name", Method = QueryMethod.In, Value = new[] { "attach", "chsword" } }; IQueryable <MyClass> query = _table.AsQueryable(); IQueryable <MyClass> actual = query.Where(GetModel(item)); Assert.AreEqual(2, actual.Count()); }
public void LessThanOrEqual() { var item = new ConditionItem { Field = "Id", Method = QueryMethod.LessThanOrEqual, Value = "2" }; IQueryable <MyClass> query = _table.AsQueryable(); IQueryable <MyClass> actual = query.Where(GetModel(item)); Assert.AreEqual(2, actual.Count()); }
public void InParamIsString() { var item = new ConditionItem { Field = "Id", Method = QueryMethod.In, Value = new[] { "1", "2" } }; IQueryable <MyClass> query = _table.AsQueryable(); IQueryable <MyClass> actual = query.Where(GetModel(item)); Assert.AreEqual(2, actual.Count()); }
public void InStringOnly() { var item = new ConditionItem { Field = "Id", Method = QueryMethod.In, Value = "1,2,3" }; IQueryable <MyClass> query = _table.AsQueryable(); IQueryable <MyClass> actual = query.Where(GetModel(item)); Assert.AreEqual(3, actual.Count()); }
/// <summary> /// 转换SearchItem中的Value的类型,为表达式树 /// </summary> /// <param name="item">查询条件</param> /// <param name="conversionType">目标类型</param> public static Expression ChangeTypeToExpression(ConditionItem item, Type conversionType) { //if (item.Value == null||item.Value.ToString()=="") //{ // if (conversionType.IsPrimitive) return null; // return Expression.Constant(item.Value, conversionType); //} if (item.Value == null) { return(Expression.Constant(item.Value, conversionType)); } #region 数组 if (item.Method == QueryMethod.StdIn || item.Method == QueryMethod.StdNotIn) { Array arr = null; if (item.Value.GetType().IsGenericType) { ////兼容泛型类型 if (item.Value is List <int> ) { arr = ((List <int>)item.Value).ToArray(); } else if (item.Value is List <string> ) { arr = ((List <string>)item.Value).ToArray(); } } else { arr = (item.Value as Array); } var expList = new List <Expression>(); if (arr != null) { for (int i = 0; i < arr.Length; i++) { //构造数组的单元Constant object newValue = ChangeType(arr.GetValue(i), conversionType); expList.Add(Expression.Constant(newValue, conversionType)); } } //构造inType类型的数组表达式树,并为数组赋初值 return(Expression.NewArrayInit(conversionType, expList)); } #endregion 数组 Type elementType = TypeUtil.GetUnNullableType(conversionType); object value = Convert.ChangeType(item.Value, elementType); return(Expression.Constant(value, conversionType)); }
public void DisplayFromLoop(ConditionItem condition) { String result = "Result"; if (condition != null && (!string.IsNullOrEmpty(condition.arg1) && !condition.arg1.Equals(result, StringComparison.OrdinalIgnoreCase)) && string.IsNullOrEmpty(condition.arg2)) { condition.arg2 = condition.arg1; condition.arg1 = result; } Display(condition); }
public IEnumerable <ConditionItem> Transform(ConditionItem item, Type type) { DateTime willTime; DateTime.TryParse(item.Value.ToString(), out willTime); if (willTime.Hour == 0 && willTime.Minute == 0 && willTime.Second == 0) { willTime = willTime.AddDays(1).AddMilliseconds(-1); } return(new[] { new ConditionItem(item.Field, QueryMethod.LessThanOrEqual, willTime) }); }
public void EqualFail() { var item = new ConditionItem { Field = "AddTime", Method = QueryMethod.Equal, Value = "-1111111" }; IQueryable <MyClass> query = _table.AsQueryable(); IQueryable <MyClass> actual = query.Where(GetModel(item)); Assert.AreEqual(0, actual.Count()); }
public void EqualIntAndInt() { var item = new ConditionItem { Field = "Id", Method = QueryMethod.Equal, Value = 1 }; IQueryable <MyClass> query = _table.AsQueryable(); IQueryable <MyClass> actual = query.Where(GetModel(item)); Assert.AreEqual(1, actual.Count()); }
public void EqualInputIsDateTime() { var item = new ConditionItem { Field = "Time", Method = QueryMethod.Equal, Value = "2010-09-01" }; IQueryable <MyClass> query = _table.AsQueryable(); IQueryable <MyClass> actual = query.Where(GetModel(item)); Assert.AreEqual(1, actual.Count()); }
public IEnumerable <ConditionItem> Transform(ConditionItem item, Type type) { if (item == null) { throw new ArgumentNullException("item"); } return(new[] { new ConditionItem(item.Field, QueryMethod.GreaterThanOrEqual, item.Value), new ConditionItem(item.Field, QueryMethod.LessThan, item.Value) }); }
public void Like_One() { var item = new ConditionItem { Field = "Name", Method = QueryMethod.Like, Value = "*lanc*" }; IQueryable <MyClass> query = _table.AsQueryable(); IQueryable <MyClass> actual = query.Where(item); Assert.AreEqual(1, actual.Count()); Assert.AreEqual("blance", actual.FirstOrDefault().Name); }
public void EqualInputIsDateTimeNull() { const int expectResult = 3; var item1 = new ConditionItem("Time1", QueryMethod.GreaterThan, "2010-08-31"); var item2 = new ConditionItem("Time1", QueryMethod.LessThan, "2010-09-30"); IQueryable <MyClass> query = _table.AsQueryable(); IQueryable <MyClass> actual = query.Where(new SearchModel { Items = new[] { item1, item2 }.ToList() }); Assert.AreEqual(expectResult, actual.Count()); }
public ExpressionPanel GetNewExpressionPanel(ConditionItem item) { ExpressionPanel panel = new ExpressionPanel(); panel.Margin = new Thickness(50, 0, 0, 10); panel.Background = new SolidColorBrush(); panel.IsReadOnly = this.IsReadOnly; panel.DisplayFromLoop(item); panel.Height = 30; panel.Arg1TextBox.IsEnabled = false; initHandlers(panel); return(panel); }
public void OrEqual() { var item1 = new ConditionItem { Field = "Id", Method = QueryMethod.Equal, Value = 1, OrGroup = "a" }; var item2 = new ConditionItem { Field = "Id", Method = QueryMethod.Equal, Value = 2, OrGroup = "a" }; IQueryable <MyClass> query = _table.AsQueryable(); IQueryable <MyClass> actual = query.Where(GetModel(item1, item2)); Assert.AreEqual(2, actual.Count()); }
/// <summary> /// 修改元数据 /// </summary> /// <param name="model"></param> /// <returns></returns> public bool Edit(ConditionItem model) { if (model == null || model.ID <= 0) { LogService.WriteInfoLog(logTitle, "试图修改为空的ConditionItem实体!"); throw new KeyNotFoundException(); } using (DbContext db = new CRDatabase()) { db.Entry(ModelToEntity(model)).State = EntityState.Modified; return(db.SaveChanges() > 0); } }
public IEnumerable<ConditionItem> Transform(ConditionItem item, Type type) { var arr = (item.Value as Array); if (arr == null) { var arrStr = item.Value.ToString(); if (!string.IsNullOrEmpty(arrStr)) { arr = arrStr.Split(','); } } return new[] { new ConditionItem(item.Field, QueryMethod.StdIn, arr) }; }
/// <summary> /// 新增元数据 /// </summary> /// <param name="model"></param> /// <returns></returns> public int Add(ConditionItem model) { if (model == null) { return(0); } using (DbContext db = new CRDatabase()) { db.Set <CTMS_CONDITIONITEM>().Add(ModelToEntity(model)); db.SaveChanges(); return(model.ID); } }
private string DrawConditionsWizard(string luaCode) { EditorGUILayout.BeginVertical("button"); EditorGUI.BeginChangeCheck(); // Condition items: ConditionItem itemToDelete = null; foreach (ConditionItem item in conditionItems) { DrawConditionItem(item, ref itemToDelete); } if (itemToDelete != null) { conditionItems.Remove(itemToDelete); } // Logical operator (Any/All) and add new condition button: // Revert and Apply buttons: EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(new GUIContent("+", "Add a new condition."), EditorStyles.miniButton, GUILayout.Width(22))) { conditionItems.Add(new ConditionItem()); } conditionsLogicalOperator = (LogicalOperatorType)EditorGUILayout.EnumPopup(conditionsLogicalOperator, GUILayout.Width(48)); EditorGUILayout.LabelField("must be true.", GUILayout.Width(80)); GUILayout.FlexibleSpace(); append = EditorGUILayout.ToggleLeft("Append", append, GUILayout.Width(60)); if (EditorGUI.EndChangeCheck()) { ApplyConditionsWizard(); } if (GUILayout.Button(new GUIContent("Revert", "Cancel these settings."), EditorStyles.miniButton, GUILayout.Width(48))) { luaCode = CancelConditionsWizard(); } if (GUILayout.Button(new GUIContent("Apply", "Apply these settings"), EditorStyles.miniButton, GUILayout.Width(48))) { luaCode = AcceptConditionsWizard(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); return(luaCode); }
public void DateBetweenDateTime() { var item = new ConditionItem { Field = "Time", Method = QueryMethod.LessThan, Value = "2010-09-04" }; var item2 = new ConditionItem { Field = "Time", Method = QueryMethod.GreaterThan, Value = "2010-09-04" }; IQueryable <MyClass> query = _table.AsQueryable(); IQueryable <MyClass> actual = query.Where(GetModel(item, item2)); Assert.AreEqual(1, actual.Count()); }
public IEnumerable <ConditionItem> Transform(ConditionItem item, Type type) { var arr = (item.Value as Array); if (arr == null) { var arrStr = item.Value.ToString(); if (!string.IsNullOrEmpty(arrStr)) { arr = arrStr.Split(','); } } return(new[] { new ConditionItem(item.Field, QueryMethod.StdIn, arr) }); }
public bool Match(ConditionItem item, Type type) { if (item == null) { throw new ArgumentNullException("item"); } var elementType = TypeUtil.GetUnNullableType(type); return(((elementType == typeof(int) && !(item.Value is int)) || (elementType == typeof(long) && !(item.Value is long)) || (elementType == typeof(DateTime) && !(item.Value is DateTime)) ) && item.Value.ToString().Contains("-")); }
/// <summary> /// 获取查询条件 /// </summary> /// <param name="dicCondition">条件集合</param> /// <returns></returns> public Expression <Func <T, bool> > GetQueryCondition(Dictionary <string, string> dicCondition) { if (dicCondition == null || dicCondition.Count == 0) { return(null); } List <ConditionItem> list = new List <ConditionItem>(); foreach (string fieldName in dicCondition.Keys) { ConditionItem item = new ConditionItem(fieldName, QueryMethod.Equal, dicCondition[fieldName]); list.Add(item); } return(GetQueryCondition(list)); }
/// <summary> /// 获取最小的表达式组合 /// </summary> /// <param name="param">表达式命名</param> /// <param name="item">查询条件</param> /// <returns>最小的表达式组合</returns> private Expression GetExpression(ParameterExpression param, ConditionItem item) { //属性表达式 LambdaExpression exp = GetPropertyLambdaExpression(item, param); if (exp == null) { return(null); } //常量表达式 Expression constant = ChangeTypeToExpression(item, exp.Body.Type); //以判断符或方法连接 return(ExpressionDict[item.Method](exp.Body, constant)); }
/// <summary> /// 删除元数据 /// </summary> /// <param name="model"></param> /// <returns></returns> public bool Delete(int id) { if (id <= 0) { LogService.WriteInfoLog(logTitle, "试图删除为空的ConditionItem实体!"); throw new KeyNotFoundException(); } ConditionItem model = Get(id); if (model != null) { model.IsDeleted = true; return(Edit(model)); } return(false); }
public void PropNotExists() { var item = new ConditionItem { Field = "Id1", Method = QueryMethod.Equal, Value = "1" }; IQueryable <MyClass> query = _table.AsQueryable(); try { IQueryable <MyClass> actual = query.Where(item); } catch (Exception e) { Assert.IsTrue(e.Message.Contains("Id1")); } }
public static Condition ToCondition(this BaseConditionItem baseConditionItem) { var condition = GetBaseConditionInfo(baseConditionItem); if (condition == null) { return(null); } var baseConditionItemTemplateId = baseConditionItem.InnerItem.TemplateID; if (baseConditionItemTemplateId.Equals(new ID(ConditionItem.TemplateId))) { var conditionInputItem = new ConditionItem(baseConditionItem).ConditionInputType.TargetItem; Tokens?conditionInputType = null; if (conditionInputItem != null) { switch (conditionInputItem.ID.ToString()) { case Constants.ConditionInputType_QueryString_ItemId: conditionInputType = Tokens.QUERY_STRING; break; case Constants.ConditionInputType_HttpHost_ItemId: conditionInputType = Tokens.HTTP_HOST; break; case Constants.ConditionInputType_Https_ItemId: conditionInputType = Tokens.HTTPS; break; default: break; } } condition.InputString = string.Format("{{{0}}}", conditionInputType); } else if (baseConditionItemTemplateId.Equals(new ID(ConditionAdvancedItem.TemplateId))) { condition.InputString = new ConditionAdvancedItem(baseConditionItem).ConditionInputString.Value; } return(condition); }
public void OrEqual_Two() { var item1 = new ConditionItem { Field = "Id", Method = QueryMethod.Equal, Value = 1, OrGroup = "a" }; var item2 = new ConditionItem { Field = "Id", Method = QueryMethod.Equal, Value = 2, OrGroup = "a" }; var model = new SearchModel(); model.Items = new[] { item1, item2 }.ToList(); IQueryable <MyClass> query = _table.AsQueryable(); IQueryable <MyClass> actual = query.Where(model); Assert.AreEqual(2, actual.Count()); }
private static FilterDefinition <object> GetEqFilter(ConditionItem condition) { var filters = new List <FilterDefinition <object> >(); filters.Add(Builders <object> .Filter.Eq(condition.Field, condition.Value)); if (bool.TryParse(condition.Value, out var boolean)) { filters.Add(Builders <object> .Filter.Eq(condition.Field, boolean)); } if (double.TryParse(condition.Value, out var number)) { filters.Add(Builders <object> .Filter.Eq(condition.Field, number)); } return(Builders <object> .Filter.Or(filters)); }
private string getItemUuid(ConditionItem ci) { string uuid = ""; if (ci.Index == 0) { uuid = ((SpringBootMonitorItem)ci.Item).Uuid; } else if (ci.Index == 1) { uuid = ((TomcatMonitorItem)ci.Item).Uuid; } else if (ci.Index == 2) { uuid = ((NginxMonitorItem)ci.Item).Uuid; } return(uuid); }
public IEnumerable<ConditionItem> Transform(ConditionItem item, Type type) { var str = item.Value.ToString(); var keyWords = str.Split('*'); if (keyWords.Length == 1) { return new[] { new ConditionItem(item.Field, QueryMethod.Equal, item.Value) }; } var list = new List<ConditionItem>(); if (!string.IsNullOrEmpty(keyWords.First())) list.Add(new ConditionItem(item.Field, QueryMethod.StartsWith, keyWords.First())); if (!string.IsNullOrEmpty(keyWords.Last())) list.Add(new ConditionItem(item.Field, QueryMethod.EndsWith, keyWords.Last())); for (int i = 1; i < keyWords.Length - 1; i++) { if (!string.IsNullOrEmpty(keyWords[i])) list.Add(new ConditionItem(item.Field, QueryMethod.Contains, keyWords[i])); } return list; }
private void DrawConditionItem(Rect position, ConditionItem item, ref ConditionItem itemToDelete) { const float typeWidth = 96; const float equalityWidth = 64; const float questStateWidth = 96; const float deleteButtonWidth = 22; int originalIndentLevel = EditorGUI.indentLevel; EditorGUI.indentLevel = 0; var x = position.x; var rect = new Rect(x, 0, 96, EditorGUIUtility.singleLineHeight); x += rect.width + 2; WizardResourceType newConditionType = (WizardResourceType) EditorGUI.EnumPopup(rect, GUIContent.none, item.conditionType); if (newConditionType != item.conditionType) { item.conditionType = newConditionType; conditionsQuestEntryNames = new string[0]; } if (item.conditionType == WizardResourceType.Quest) { // Quest: var questNameWidth = position.width - (typeWidth + equalityWidth + questStateWidth + deleteButtonWidth + 8); rect = new Rect(x, 0, questNameWidth, EditorGUIUtility.singleLineHeight); x += rect.width + 2; item.questNamesIndex = EditorGUI.Popup(rect, item.questNamesIndex, questNames); rect = new Rect(x, 0, equalityWidth, EditorGUIUtility.singleLineHeight); item.equalityType = (EqualityType) EditorGUI.EnumPopup(rect, item.equalityType); x += rect.width + 2; rect = new Rect(x, 0, questStateWidth, EditorGUIUtility.singleLineHeight); item.questState = (QuestState) EditorGUI.EnumPopup(rect, item.questState); x += rect.width + 2; } else if (item.conditionType == WizardResourceType.QuestEntry) { // Quest Entry: var freeWidth = position.width - (typeWidth + equalityWidth + questStateWidth + deleteButtonWidth + 10); rect = new Rect(x, 0, freeWidth / 2, EditorGUIUtility.singleLineHeight); int newQuestNamesIndex = EditorGUI.Popup(rect, item.questNamesIndex, complexQuestNames); if (newQuestNamesIndex != item.questNamesIndex) { item.questNamesIndex = newQuestNamesIndex; conditionsQuestEntryNames = new string[0]; } if ((conditionsQuestEntryNames.Length == 0) && (item.questNamesIndex < complexQuestNames.Length)) { conditionsQuestEntryNames = GetQuestEntryNames(complexQuestNames[item.questNamesIndex]); } x += rect.width + 2; rect = new Rect(x, 0, freeWidth / 2, EditorGUIUtility.singleLineHeight); item.questEntryIndex = EditorGUI.Popup(rect, item.questEntryIndex, conditionsQuestEntryNames); x += rect.width + 2; rect = new Rect(x, 0, equalityWidth, EditorGUIUtility.singleLineHeight); item.equalityType = (EqualityType) EditorGUI.EnumPopup(rect, item.equalityType); x += rect.width + 2; rect = new Rect(x, 0, questStateWidth, EditorGUIUtility.singleLineHeight); item.questState = (QuestState) EditorGUI.EnumPopup(rect, item.questState); x += rect.width + 2; } else if (item.conditionType == WizardResourceType.Variable) { // Variable: var freeWidth = position.width - (typeWidth + equalityWidth + deleteButtonWidth + 8); rect = new Rect(x, 0, freeWidth / 2, EditorGUIUtility.singleLineHeight); item.variableNamesIndex = EditorGUI.Popup(rect, item.variableNamesIndex, variableNames); x += rect.width + 2; rect = new Rect(x, 0, equalityWidth + 2 + (freeWidth / 2), EditorGUIUtility.singleLineHeight); DrawRightHand(rect, item, GetWizardVariableType(item.variableNamesIndex)); x += rect.width + 2; } else if (item.conditionType == WizardResourceType.Actor) { // Actor: var freeWidth = position.width - (typeWidth + equalityWidth + deleteButtonWidth + 10); rect = new Rect(x, 0, freeWidth / 3, EditorGUIUtility.singleLineHeight); item.actorNamesIndex = EditorGUI.Popup(rect, item.actorNamesIndex, actorNames); x += rect.width + 2; rect = new Rect(x, 0, freeWidth / 3, EditorGUIUtility.singleLineHeight); item.actorFieldIndex = EditorGUI.Popup(rect, item.actorFieldIndex, actorFieldNames); x += rect.width + 2; rect = new Rect(x, 0, equalityWidth + 2 + (freeWidth / 3), EditorGUIUtility.singleLineHeight); DrawRightHand(rect, item, GetWizardActorFieldType(item.actorFieldIndex)); x += rect.width + 2; } else if (item.conditionType == WizardResourceType.Item) { // Item: var freeWidth = position.width - (typeWidth + equalityWidth + deleteButtonWidth + 10); rect = new Rect(x, 0, freeWidth / 3, EditorGUIUtility.singleLineHeight); item.itemNamesIndex = EditorGUI.Popup(rect, item.itemNamesIndex, itemNames); x += rect.width + 2; rect = new Rect(x, 0, freeWidth / 3, EditorGUIUtility.singleLineHeight); item.itemFieldIndex = EditorGUI.Popup(rect, item.itemFieldIndex, itemFieldNames); x += rect.width + 2; rect = new Rect(x, 0, equalityWidth + 2 + (freeWidth / 3), EditorGUIUtility.singleLineHeight); DrawRightHand(rect, item, GetWizardItemFieldType(item.itemFieldIndex)); x += rect.width + 2; } else if (item.conditionType == WizardResourceType.Location) { // Location: var freeWidth = position.width - (typeWidth + equalityWidth + deleteButtonWidth + 10); rect = new Rect(x, 0, freeWidth / 3, EditorGUIUtility.singleLineHeight); item.locationNamesIndex = EditorGUI.Popup(rect, item.locationNamesIndex, locationNames); x += rect.width + 2; rect = new Rect(x, 0, freeWidth / 3, EditorGUIUtility.singleLineHeight); item.locationFieldIndex = EditorGUI.Popup(rect, item.locationFieldIndex, locationFieldNames); x += rect.width + 2; rect = new Rect(x, 0, equalityWidth + 2 + (freeWidth / 3), EditorGUIUtility.singleLineHeight); DrawRightHand(rect, item, GetWizardLocationFieldType(item.locationFieldIndex)); x += rect.width + 2; } // Delete button: rect = new Rect(position.width - deleteButtonWidth, 0, deleteButtonWidth, EditorGUIUtility.singleLineHeight); if (GUI.Button(rect, new GUIContent("-", "Delete this condition."), EditorStyles.miniButton)) { itemToDelete = item; } EditorGUI.indentLevel = originalIndentLevel; }
private void DrawRightHand(Rect position, ConditionItem item, FieldType fieldType) { const float equalityWidth = 64; var rect1 = new Rect(position.x, 0, equalityWidth, EditorGUIUtility.singleLineHeight); var rect2 = new Rect(position.x + 2 + equalityWidth, 0, position.width - (equalityWidth + 2), EditorGUIUtility.singleLineHeight); switch (fieldType) { case FieldType.Boolean: item.equalityType = (EqualityType) EditorGUI.EnumPopup(rect1, item.equalityType); item.booleanValue = (BooleanType) EditorGUI.EnumPopup(rect2, item.booleanValue); break; case FieldType.Number: item.comparisonType = (ComparisonType) EditorGUI.EnumPopup(rect1, item.comparisonType); item.floatValue = EditorGUI.FloatField(rect2, item.floatValue); break; default: item.equalityType = (EqualityType) EditorGUI.EnumPopup(rect1, item.equalityType); item.stringValue = EditorGUI.TextField(rect2, item.stringValue); break; } }
private void DrawConditionItem(ConditionItem item, ref ConditionItem itemToDelete) { EditorGUILayout.BeginHorizontal(); WizardResourceType newConditionType = (WizardResourceType) EditorGUILayout.EnumPopup(item.conditionType, GUILayout.Width(96)); if (newConditionType != item.conditionType) { item.conditionType = newConditionType; conditionsQuestEntryNames = new string[0]; } if (item.conditionType == WizardResourceType.Quest) { // Quest: item.questNamesIndex = EditorGUILayout.Popup(item.questNamesIndex, questNames); item.equalityType = (EqualityType) EditorGUILayout.EnumPopup(item.equalityType, GUILayout.Width(60)); item.questState = (QuestState) EditorGUILayout.EnumPopup(item.questState, GUILayout.Width(96)); } else if (item.conditionType == WizardResourceType.QuestEntry) { // Quest Entry: int newQuestNamesIndex = EditorGUILayout.Popup(item.questNamesIndex, complexQuestNames); if (newQuestNamesIndex != item.questNamesIndex) { item.questNamesIndex = newQuestNamesIndex; conditionsQuestEntryNames = new string[0]; } if ((conditionsQuestEntryNames.Length == 0) && (item.questNamesIndex < complexQuestNames.Length)) { conditionsQuestEntryNames = GetQuestEntryNames(complexQuestNames[item.questNamesIndex]); } item.questEntryIndex = EditorGUILayout.Popup(item.questEntryIndex, conditionsQuestEntryNames); item.equalityType = (EqualityType) EditorGUILayout.EnumPopup(item.equalityType, GUILayout.Width(60)); item.questState = (QuestState) EditorGUILayout.EnumPopup(item.questState, GUILayout.Width(96)); } else if (item.conditionType == WizardResourceType.Variable) { // Variable: item.variableNamesIndex = EditorGUILayout.Popup(item.variableNamesIndex, variableNames); DrawRightHand(item, GetWizardVariableType(item.variableNamesIndex)); } else if (item.conditionType == WizardResourceType.Actor) { // Actor: item.actorNamesIndex = EditorGUILayout.Popup(item.actorNamesIndex, actorNames); item.actorFieldIndex = EditorGUILayout.Popup(item.actorFieldIndex, actorFieldNames); DrawRightHand(item, GetWizardActorFieldType(item.actorFieldIndex)); } else if (item.conditionType == WizardResourceType.Item) { // Item: item.itemNamesIndex = EditorGUILayout.Popup(item.itemNamesIndex, itemNames); item.itemFieldIndex = EditorGUILayout.Popup(item.itemFieldIndex, itemFieldNames); DrawRightHand(item, GetWizardItemFieldType(item.itemFieldIndex)); } else if (item.conditionType == WizardResourceType.Location) { // Location: item.locationNamesIndex = EditorGUILayout.Popup(item.locationNamesIndex, locationNames); item.locationFieldIndex = EditorGUILayout.Popup(item.locationFieldIndex, locationFieldNames); DrawRightHand(item, GetWizardLocationFieldType(item.locationFieldIndex)); } if (GUILayout.Button(new GUIContent("-", "Delete this condition."), EditorStyles.miniButton, GUILayout.Width(22))) { itemToDelete = item; } EditorGUILayout.EndHorizontal(); }
private void AppendFormat(StringBuilder sb, string tableName, string elementName, string fieldName, FieldType fieldType, ConditionItem item) { switch (fieldType) { case FieldType.Boolean: sb.AppendFormat("{0}{1}[\"{2}\"].{3} {4} {5}{6}", openParen, tableName, DialogueLua.StringToTableIndex(elementName), DialogueLua.StringToTableIndex(fieldName), GetWizardEqualityText(item.equalityType), (item.booleanValue == BooleanType.True) ? "true" : "false", closeParen); break; case FieldType.Number: sb.AppendFormat("{0}{1}[\"{2}\"].{3} {4} {5}{6}", openParen, tableName, DialogueLua.StringToTableIndex(elementName), DialogueLua.StringToTableIndex(fieldName), GetWizardComparisonText(item.comparisonType), item.floatValue, closeParen); break; default: sb.AppendFormat("{0}{1}[\"{2}\"].{3} {4} \"{5}\"{6}", openParen, tableName, DialogueLua.StringToTableIndex(elementName), DialogueLua.StringToTableIndex(fieldName), GetWizardEqualityText(item.equalityType), item.stringValue, closeParen); break; } }
public bool Match(ConditionItem item, Type type) { return item.Method == QueryMethod.In; }
protected ConditionItem( ConditionItem _conditionItem) { ItemID = _conditionItem.ItemID; ItemCount = _conditionItem.ItemCount; }
private void DrawRightHand(ConditionItem item, FieldType fieldType) { switch (fieldType) { case FieldType.Boolean: item.equalityType = (EqualityType) EditorGUILayout.EnumPopup(item.equalityType, GUILayout.Width(60)); item.booleanValue = (BooleanType) EditorGUILayout.EnumPopup(item.booleanValue); break; case FieldType.Number: item.comparisonType = (ComparisonType) EditorGUILayout.EnumPopup(item.comparisonType, GUILayout.Width(96)); item.floatValue = EditorGUILayout.FloatField(item.floatValue); break; default: item.equalityType = (EqualityType) EditorGUILayout.EnumPopup(item.equalityType, GUILayout.Width(60)); item.stringValue = EditorGUILayout.TextField(item.stringValue); break; } }