コード例 #1
0
        private void _replace <T>(GDbTab tab, Tuple tuple)
        {
            var aDb = tab.DbComponent.To <T>();

            aDb.Table.Commands.Begin();

            try {
                List <DbAttribute> attributes = _boxes.Where(p => p.IsChecked == true).Select(p => (DbAttribute)p.Tag).ToList();
                //List<ITableCommand<T, ReadableTuple<T>>> commands = new List<ITableCommand<T, ReadableTuple<T>>>();

                foreach (ReadableTuple <T> item in tab._listView.SelectedItems)
                {
                    for (int index = 0; index < attributes.Count; index++)
                    {
                        aDb.Table.Commands.Set(item, attributes[index], tuple.GetValue(attributes[index]));
                    }
                }

                //aDb.Table.Commands.StoreAndExecute(new GroupCommand<T, ReadableTuple<T>>(commands));
            }
            catch {
                aDb.Table.Commands.CancelEdit();
            }
            finally {
                aDb.Table.Commands.End();
                tab.Update();
            }
        }
コード例 #2
0
        private void _replace <T>(GDbTab tab, DbAttribute attribute)
        {
            var aDb = tab.DbComponent.To <T>();

            try {
                if (attribute.DataType == typeof(bool) && attribute.DataConverter.GetType() == typeof(DefaultValueConverter))
                {
                    aDb.Table.Commands.Set(tab._listView.SelectedItems.Cast <ReadableTuple <T> >().ToList(), attribute, Boolean.Parse(_tbNewValue.Text));
                }
                else
                {
                    aDb.Table.Commands.Set(tab._listView.SelectedItems.Cast <ReadableTuple <T> >().ToList(), attribute, _tbNewValue.Text);
                }
            }
            finally {
                tab.Update();
            }
        }
コード例 #3
0
        private void _buttonOk_Click(object sender, RoutedEventArgs e)
        {
            try {
                _mobDb.Table.Commands.Begin();

                for (int i = 0; i < 6; i++)
                {
                    _mobDb.Table.Commands.Set(_item, ServerMobAttributes.Str.Index + i, _results[i]);
                }
            }
            catch (Exception err) {
                _mobDb.Table.Commands.CancelEdit();
                ErrorHandler.HandleException(err);
            }
            finally {
                _mobDb.Table.Commands.End();
                //((GDbTabWrapper<int, ReadableTuple<int>>)_tab).SearchEngine.Collection.UpdateAndEnable();
                _tab.Update();
            }
        }
コード例 #4
0
        public string Execute(GDbTab core, string code)
        {
            MemoryStream stream = new MemoryStream();
            string       output = "";

            _core = core;
            Script script = new Script();

            try {
                TableHelper.EnableTupleTrace = true;

                if (_core == null)
                {
                    throw new Exception("No database tab selected.");
                }

                _selected = new ObservableList <Tuple>();

                foreach (var tuple in _core._listView.SelectedItems.OfType <Tuple>().OrderBy(p => p))
                {
                    _selected.Add(tuple);
                }

                _selectionChanged = false;

                _selected.CollectionChanged += delegate { _selectionChanged = true; };

                _mEngine.Runtime.IO.SetOutput(stream, EncodingService.DisplayEncoding);
                _mEngine.Runtime.IO.SetErrorOutput(stream, EncodingService.DisplayEncoding);

                _mScope = _mEngine.CreateScope();

                List <object> dbs = new List <object>();

                foreach (var serverDb in ServerDbs.ListDbs)
                {
                    var db = _core.DbComponent.TryGetDb(serverDb);

                    if (db != null)
                    {
                        if (db.AttributeList.PrimaryAttribute.DataType == typeof(int))
                        {
                            var adb = (AbstractDb <int>)db;
                            dbs.Add(adb);
                            TableHelper.Tables.Add(adb.Table);
                            _mScope.SetVariable(serverDb.Filename.ToLower().Replace(" ", "_"), adb.Table);
                        }
                        else if (db.AttributeList.PrimaryAttribute.DataType == typeof(string))
                        {
                            var adb = (AbstractDb <string>)db;
                            dbs.Add(adb);
                            TableHelper.Tables.Add(adb.Table);
                            _mScope.SetVariable(serverDb.Filename.ToLower().Replace(" ", "_"), adb.Table);
                        }
                    }
                }

                _mScope.SetVariable("item_db_m", _core.DbComponent.GetMeta <int>(ServerDbs.Items));
                _mScope.SetVariable("mob_db_m", _core.DbComponent.GetMeta <int>(ServerDbs.Mobs));
                _mScope.SetVariable("mob_skill_db_m", _core.DbComponent.GetMeta <string>(ServerDbs.MobSkills));
                _mScope.SetVariable("selection", _selected);
                _mScope.SetVariable("database", _core.ProjectDatabase);
                _mScope.SetVariable("script", script);

                //_mScope.SetVariable("ServerDbs", DynamicHelpers.GetPythonTypeFromType(typeof(ServerDbs)));
                _selectedDb = null;

                _to <int>(_core.DbComponent, p => {
                    _selectedDb = p.Table;
                    _mScope.SetVariable("selected_db", p.Table);
                });
                _to <string>(_core.DbComponent, p => {
                    _selectedDb = p.Table;
                    _mScope.SetVariable("selected_db", p.Table);
                });

                string temp = TemporaryFilesManager.GetTemporaryFilePath("python_script_{0:0000}.py");

                byte[]   file     = File.ReadAllBytes(code);
                Encoding encoding = EncodingService.DetectEncoding(file);

                using (StreamWriter writer = new StreamWriter(File.Create(temp), encoding))
                    using (StreamReader reader = new StreamReader(code)) {
                        writer.WriteLine("#!/usr/bin/env python");
                        writer.WriteLine("# -*- coding: {0} -*- ", encoding.CodePage);

                        while (!reader.EndOfStream)
                        {
                            string line = reader.ReadLine();

                            if (line == null)
                            {
                                continue;
                            }

                            writer.WriteLine(EncodingService.FromAnyTo(line, encoding));
                        }
                    }

                ScriptSource source = _mEngine.CreateScriptSourceFromFile(temp);

                foreach (var db in dbs)
                {
                    _to <int>(db, _onBegin);
                    _to <string>(db, _onBegin);
                }

                try {
                    try {
                        source.Execute(_mScope);
                    }
                    catch (OperationCanceledException) {
                    }

                    if (stream.Position > 0)
                    {
                        stream.Seek(0, SeekOrigin.Begin);
                        byte[] data = new byte[stream.Length];
                        stream.Read(data, 0, data.Length);

                        output = EncodingService.DisplayEncoding.GetString(data);
                        Clipboard.SetDataObject(EncodingService.DisplayEncoding.GetString(data));
                    }
                }
                catch {
                    foreach (var db in dbs)
                    {
                        _to <int>(db, p => p.Table.Commands.CancelEdit());
                        _to <string>(db, p => p.Table.Commands.CancelEdit());
                    }

                    throw;
                }
                finally {
                    foreach (var db in dbs)
                    {
                        _to <int>(db, _onEnd);
                        _to <string>(db, _onEnd);
                    }

                    stream.Close();
                    _core.Filter();
                    _core.Update();
                }
            }
            catch (Exception err) {
                ErrorHandler.HandleException(err);
            }
            finally {
                TableHelper.EnableTupleTrace = false;
                TableHelper.Tables.Clear();
            }

            return(output);
        }