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)) };
        }
Example #2
0
 /// <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("-");
 }
Example #5
0
        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());
        }
Example #10
0
        /// <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));
        }
Example #11
0
        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());
        }
Example #16
0
 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());
        }
Example #21
0
 /// <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);
     }
 }
Example #22
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) };
 }
Example #23
0
 /// <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);
     }
 }
Example #24
0
        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());
        }
Example #26
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) });
        }
Example #27
0
        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));
        }
Example #29
0
        /// <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));
        }
Example #30
0
        /// <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"));
            }
        }
Example #32
0
        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());
        }
Example #34
0
        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));
        }
Example #35
0
        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);
        }
Example #36
0
 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;
     }
 }
Example #41
0
 public bool Match(ConditionItem item, Type type)
 {
     return item.Method == QueryMethod.In;
 }
Example #42
0
	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;
     }
 }