private void AddEditedObject(StoredClassDataView view, DbObject dbObject)
        {
            if(!editedObjects.ContainsKey(view))
                editedObjects.Add(view,new List<DbObject>());

            IList<DbObject> dbObjects = editedObjects[view];

            if(!dbObjects.Contains(dbObject))
                dbObjects.Add(dbObject);

            view.IsSaveCancelEnabled = true;
        }
        private StoredClassDataView CreateView()
        {
            var view = new StoredClassDataView();
            view.ReloadFired += new Action<StoredClassDataView>(view_ReloadFired);
            view.ShowSelectedObject += new Action<object>(view_ShowSelectedObject);
            view.ShowSelectedTypeObjects += new Action<StoredClassDataView, object>(view_ShowSelectedTypeObjects);
            view.DeleteFired += new Action<StoredClassDataView>(view_DeleteFired);
            view.EditFired += new Action<StoredClassDataView, DbObject>(view_EditFired);
            view.SaveFired += new Action<StoredClassDataView>(view_SaveFired);
            view.CancelFired += new Action<StoredClassDataView>(view_CancelFired);
            view.AddFired += new Action<StoredClassDataView>(view_AddFired);
            view.EditDbObjectFired += new Action<StoredClassDataView, DbObject, string, DbObject>(view_EditDbObjectFired);
            view.SetToNullFired += new Action<StoredClassDataView, DbObject, string>(view_SetToNullFired);
            view.ShowBinaryViewerFired += new Func<object, string, object, StoredClassDataView, bool>(view_ShowBinaryViewerFired);

            return view;
        }
        private void ReloadData(StoredClassDataView view)
        {
            //			var collection = new ObservableCollection<DbObject>();
            IList data = view.StoredClass.GetData();

            //			foreach (var o in data)
            //			{
            //				collection.Add((DbObject) o);
            //			}
            //
            //			view.DataSource = collection;
            view.DataSource = data;
        }
        bool view_ShowBinaryViewerFired(object arg1, string arg2, object arg3, StoredClassDataView view)
        {
            byte[] data = arg3 as byte[];

            var viewer = new BinaryViewer();
            viewer.DataSource = data;
            viewer.BrowseFired += new Action<BinaryViewer,DbObject,string, StoredClassDataView>(viewer_BrowseFired).Apply(viewer,(DbObject)arg1,arg2, view);

            windowManager.ShowDialog(viewer, "Binary viewer");

            return true;
        }
        void view_ShowSelectedTypeObjects(StoredClassDataView view, object obj)
        {
            DbObject dbObject = obj as DbObject;

            if (dbObject == null)
            {
                windowManager.Error(
                    "You can show detailed info only on objects of your own classes. Selected object is systems or primitive.");
                return;
            }

            StoredClassDataView newView = CreateView();
            newView.StoredClass = dbObject.Clazz;
            newView.DataSource = view.StoredClass.Connection.GetData(newView.StoredClass);
            windowManager.AddMainPane(newView, newView.StoredClass.ToString(), "Images/class.png");
        }
        void view_SaveFired(StoredClassDataView view)
        {
            IList<DbObject> dbObjects = editedObjects[view];
            IStoredClass @class = view.StoredClass;
            @class.Save(dbObjects);

            view.IsSaveCancelEnabled = false;
            ReloadData(view);
        }
 void view_SetToNullFired(StoredClassDataView view, DbObject arg2, string arg3)
 {
     DataGridUtils.SetValueByPath(arg2,arg3,null);
     AddEditedObject(view,arg2);
     view.RefreshData();
 }
 void view_EditFired(StoredClassDataView view, DbObject dbObject)
 {
     AddEditedObject(view, dbObject);
 }
 void view_ReloadFired(StoredClassDataView view)
 {
     //TODO smth like HourGlass or LightBox
     ReloadData(view);
 }
        void view_EditDbObjectFired(StoredClassDataView view, DbObject rowDbObject, string bindingPath, DbObject fieldDbObject)
        {
            var dialogView = new StoredClassDataView();

            IConnection connection = view.StoredClass.Connection;

            if(fieldDbObject!=null)
                dialogView.StoredClass = fieldDbObject.Clazz;
            else
            {
                IList<IStoredClass> classes = connection.Objects;
                var box = new ComboBox();
                box.Height = 18;
                box.Width = 300;
                box.Name = "EditDbObject";

                box.ItemsSource = classes;

                if(!windowManager.ShowDialog(box, "What type of objects you want here?"))
                    return;

                dialogView.StoredClass = box.SelectedValue as IStoredClass;
            }

            dialogView.DataSource = connection.GetData(dialogView.StoredClass);

            if (!windowManager.ShowDialog(dialogView, "Edit"))
                return;

            DbObject newFieldDbObject = dialogView.GetSelectedObject();
            DataGridUtils.SetValueByPath(rowDbObject,bindingPath,newFieldDbObject);

            AddEditedObject(view,rowDbObject);
            view.RefreshData();
        }
        void view_DeleteFired(StoredClassDataView view)
        {
            if (!windowManager.Ask("Are you sure want to delete?", "Delete"))
                return;

            IList objects = view.GetSelectedObjects();
            IStoredClass @class = view.StoredClass;
            @class.Delete(objects);
            ReloadData(view);
        }
        void view_CancelFired(StoredClassDataView view)
        {
            editedObjects.Remove(view);

            view.IsSaveCancelEnabled = false;
            ReloadData(view);
        }
        void view_AddFired(StoredClassDataView view)
        {
            var dbObject = dbObjectFactory.Create(view.StoredClass);
            AddEditedObject(view,dbObject);

            var source = new ArrayList(view.DataSource);
            source.Add(dbObject);
            view.DataSource = source;
        }
        void viewer_BrowseFired(BinaryViewer binaryViewer, DbObject rowDbObject, string bindingPath, StoredClassDataView view)
        {
            BrowseResult browse = browseFileService.Browse(null);
            if (browse.Cancel) return;

            byte[] bytes = File.ReadAllBytes(browse.FilePath);

            binaryViewer.DataSource = bytes;
            binaryViewer.Path = browse.FilePath;

            DataGridUtils.SetValueByPath(rowDbObject,bindingPath,bytes);
            AddEditedObject(view,rowDbObject);
        }