async private void contextItem_ImportFields_Click(object sender, EventArgs e)
        {
            var alterTable = await GetAlterTable();

            if (alterTable == null)
            {
                MessageBox.Show("Change properties is not implemented for this feature...");
                return;
            }

            var tableClass = await _exObject?.GetInstanceAsync() as ITableClass;

            if (tableClass == null)
            {
                return;
            }

            List <ExplorerDialogFilter> filters = new List <ExplorerDialogFilter>();

            filters.Add(new OpenFeatureclassFilter());

            ExplorerDialog dlg = new ExplorerDialog("Open Featureclass", filters, true);

            dlg.MulitSelection = false;

            if (dlg.ShowDialog() == DialogResult.OK &&
                dlg.ExplorerObjects != null &&
                dlg.ExplorerObjects.Count == 1)
            {
                var dlgTableClass = await dlg.ExplorerObjects[0].GetInstanceAsync() as ITableClass;
                if (dlgTableClass != null)
                {
                    ITableClass tcFrom = dlgTableClass;
                    ITableClass tcTo   = tableClass;

                    FormSelectFields selDlg = new FormSelectFields(tcFrom, tcTo);
                    if (selDlg.ShowDialog() == DialogResult.OK)
                    {
                        foreach (IField field in selDlg.SelectedFields)
                        {
                            if (!await alterTable.AlterTable(_exObject.Name, null, new Field(field)))
                            {
                                MessageBox.Show("ERROR :" + ((alterTable is IDatabase) ? ((IDatabase)alterTable).LastErrorMessage : ""));
                                break;
                            }
                        }
                        await this.OnShow();
                    }
                }
            }
        }
예제 #2
0
        async private void btnSelect_Click(object sender, EventArgs e)
        {
            List <ExplorerDialogFilter> filters = new List <ExplorerDialogFilter>();

            filters.Add(new OpenFeatureDatasetFilter());

            ExplorerDialog exDlg = new ExplorerDialog("Target Feature Dataset",
                                                      filters,
                                                      true);

            if (exDlg.ShowDialog() == DialogResult.OK &&
                exDlg.ExplorerObjects.Count == 1)
            {
                IExplorerObject parentObject = exDlg.ExplorerObjects[0];
                var             instance     = await parentObject.GetInstanceAsync();

                if (instance is IFeatureDataset &&
                    ((IDataset)instance).Database is IFeatureUpdater)
                {
                    _dataset = (IFeatureDataset)instance;
                }
                else
                {
                    MessageBox.Show("Can't determine target featureclass!");
                    return;
                }

                txtDatasetName.Text     = _dataset.Database.ToString();
                txtDatasetLocation.Text = parentObject.FullName;
            }
        }
예제 #3
0
        async public override Task <bool> Match(IExplorerObject exObject)
        {
            bool match = await base.Match(exObject);

            // Grouplayer nicht...
            if (exObject is IExplorerParentObject)
            {
                return(false);
            }

            var instance = await exObject?.GetInstanceAsync();

            if (match && instance is ITOCElement && _geomType != geometryType.Unknown)
            {
                ITOCElement tocElement = instance as ITOCElement;
                if (tocElement.Layers != null)
                {
                    foreach (ILayer layer in tocElement.Layers)
                    {
                        if (layer is IFeatureLayer && ((IFeatureLayer)layer).FeatureClass != null)
                        {
                            return(((IFeatureLayer)layer).FeatureClass.GeometryType == _geomType);
                        }
                    }
                }
            }
            //if (match && _geomType != geometryType.Unknown && exObject.Object is IFeatureLayer && ((IFeatureLayer)exObject.Object).FeatureClass != null)
            //{
            //    return ((IFeatureLayer)exObject.Object).FeatureClass.GeometryType == _geomType;
            //}

            return(match);
        }
예제 #4
0
        async public override Task <bool> Match(IExplorerObject exObject)
        {
            bool match = await base.Match(exObject);

            var instatnce = await exObject.GetInstanceAsync();

            if (match && _geomType != geometryType.Unknown && instatnce is IFeatureLayer && ((IFeatureLayer)instatnce).FeatureClass != null)
            {
                return(((IFeatureLayer)instatnce).FeatureClass.GeometryType == _geomType);
            }

            return(match);
        }
        async public Task <bool> OnShow()
        {
            listView1.Items.Clear();

            var instance = await _exObject.GetInstanceAsync();

            if (!(instance is IFeatureClass))
            {
                return(false);
            }

            IFeatureClass fc = (IFeatureClass)instance;

            if (fc.Fields == null)
            {
                return(false);
            }

            foreach (IField field in fc.Fields.ToEnumerable())
            {
                int iIndex = (field is IAutoField) ? 5 : 0;
                switch (field.type)
                {
                case FieldType.ID:
                    iIndex = 4;
                    break;

                case FieldType.Shape:
                    switch (fc.GeometryType)
                    {
                    case geometryType.Point:
                    case geometryType.Multipoint:
                        iIndex = 1;
                        break;

                    case geometryType.Polyline:
                        iIndex = 2;
                        break;

                    case geometryType.Envelope:
                    case geometryType.Polygon:
                        iIndex = 3;
                        break;
                    }
                    break;
                }
                listView1.Items.Add(new FieldListViewItem(new Field(field), iIndex));
            }

            return(true);
        }
예제 #6
0
        async private void btnImport_Click(object sender, EventArgs e)
        {
            List <ExplorerDialogFilter> filters = new List <ExplorerDialogFilter>();

            filters.Add(new OpenDataFilter());
            filters.Add(new OpenSpatialReferenceFilter());

            ExplorerDialog dlg = new ExplorerDialog("Import Spatial Reference", filters, true);

            dlg.MulitSelection = false;

            if (dlg.ShowDialog() == DialogResult.OK && dlg.ExplorerObjects.Count == 1)
            {
                IExplorerObject exObject = dlg.ExplorerObjects[0];

                var instatnce = await exObject?.GetInstanceAsync();

                if (instatnce is IFeatureDataset)
                {
                    _sRef = await((IFeatureDataset)instatnce).GetSpatialReference();
                }
                else if (instatnce is IRasterDataset)
                {
                    _sRef = await((IRasterDataset)instatnce).GetSpatialReference();
                }
                else if (instatnce is IFeatureClass)
                {
                    _sRef = ((IFeatureClass)instatnce).SpatialReference;
                }
                else if (instatnce is IRasterClass)
                {
                    _sRef = ((IRasterClass)instatnce).SpatialReference;
                }
                else if (instatnce is IWebServiceClass)
                {
                    _sRef = ((IWebServiceClass)instatnce).SpatialReference;
                }
                else if (instatnce is ISpatialReference)
                {
                    _sRef = instatnce as ISpatialReference;
                }
                else
                {
                    MessageBox.Show("Can't import spatial reference from data object...");
                    return;
                }

                MakeGUI();
            }
        }
        async private Task RefreshList()
        {
            //if (listView.InvokeRequired)
            //{
            //    RefreshListCallback d = new RefreshListCallback(RefreshList);
            //    this.BeginInvoke(d);
            //}
            //else
            {
                CancelRefreshList();
                listView.Items.Clear();
                _itemCollection.Clear();

                if (_exObject == null)
                {
                    return;
                }

                var instatnce = await _exObject.GetInstanceAsync();

                if (instatnce is SqlFDBImageCatalogClass)
                {
                    SqlFDBImageCatalogClass layer = (SqlFDBImageCatalogClass)instatnce;

                    _cancelWorker = false;
                    _gui_worker.RunWorkerAsync(await layer.ImageList());
                }
                else if (instatnce is IRasterCatalogClass)
                {
                    IRasterCatalogClass layer = (IRasterCatalogClass)instatnce;

                    _cancelWorker = false;
                    //_gui_worker.RunWorkerAsync(layer.ImageList);
                    //
                    // Wirft eine Fehler beim Lesen, wenn List in einem
                    // Workerthread ausgeführt wird...
                    // funzt nur bei SQL Server!!
                    //
                    await worker_DoWork(_gui_worker, new DoWorkEventArgs(await layer.ImageList()));
                }
                else if (instatnce is pgImageCatalogClass)
                {
                    pgImageCatalogClass layer = (pgImageCatalogClass)instatnce;

                    _cancelWorker = false;
                    _gui_worker.RunWorkerAsync(await layer.ImageList());
                }
                else if (instatnce is SQLiteFDBImageCatalogClass)
                {
                    SQLiteFDBImageCatalogClass layer = (SQLiteFDBImageCatalogClass)instatnce;

                    _cancelWorker = false;
                    _gui_worker.RunWorkerAsync(await layer.ImageList());
                }
            }
        }
예제 #8
0
        async public Task <IExplorerObject> CreateExplorerObject(IExplorerObject parentExObject)
        {
            if (!CanCreate(parentExObject))
            {
                return(null);
            }

            var instance = await parentExObject.GetInstanceAsync();

            if (!(instance is IFeatureDataset) || !(((IDataset)instance).Database is SQLiteFDB))
            {
                return(null);
            }
            SQLiteFDB fdb = ((IDataset)instance).Database as SQLiteFDB;

            FormNewFeatureclass dlg = await FormNewFeatureclass.Create(instance as IFeatureDataset);

            if (dlg.ShowDialog() != DialogResult.OK)
            {
                return(null);
            }

            IGeometryDef gDef = dlg.GeometryDef;

            int FCID = await fdb.CreateFeatureClass(
                parentExObject.Name,
                dlg.FeatureclassName,
                gDef,
                dlg.Fields);

            if (FCID < 0)
            {
                MessageBox.Show("ERROR: " + fdb.LastErrorMessage);
                return(null);
            }

            ISpatialIndexDef sIndexDef = await fdb.SpatialIndexDef(parentExObject.Name);

            await fdb.SetSpatialIndexBounds(dlg.FeatureclassName, "BinaryTree2", dlg.SpatialIndexExtents, 0.55, 200, dlg.SpatialIndexLevels);

            IDatasetElement element = await((IFeatureDataset)instance).Element(dlg.FeatureclassName);

            return(new SQLiteFDBFeatureClassExplorerObject(
                       parentExObject as SQLiteFDBDatasetExplorerObject,
                       _filename,
                       parentExObject.Name,
                       element));
        }
예제 #9
0
            async public override Task <bool> Match(IExplorerObject exObject)
            {
                if (exObject == null)
                {
                    return(false);
                }

                var instance = await exObject.GetInstanceAsync();

                if (instance is IDataset &&
                    ((IDataset)instance).Database is IFeatureUpdater)
                {
                    return(true);
                }

                return(false);
            }
예제 #10
0
        async public Task <bool> OnShow()
        {
            OnHide();
            if (_exObject == null)
            {
                return(false);
            }

            var instance = await _exObject.GetInstanceAsync();

            if (instance is ITableClass && _table != null)
            {
                _table.TableClass = (ITableClass)instance;
                _table.StartWorkerThread();
            }

            return(true);
        }
        async public Task <bool> ShowWith(IExplorerObject exObject)
        {
            if (exObject == null)
            {
                return(false);
            }

            if (TypeHelper.Match(exObject.ObjectType, typeof(gView.DataSources.Fdb.MSSql.SqlFDBImageCatalogClass)))
            {
                return(true);
            }

            if (TypeHelper.Match(exObject.ObjectType, typeof(gView.DataSources.Fdb.PostgreSql.pgImageCatalogClass)))
            {
                return(true);
            }

            if (TypeHelper.Match(exObject.ObjectType, typeof(gView.DataSources.Fdb.SQLite.SQLiteFDBImageCatalogClass)))
            {
                return(true);
            }

            var instance = await exObject?.GetInstanceAsync();

            if (instance is gView.DataSources.Fdb.MSSql.SqlFDBImageCatalogClass)
            {
                return(true);
            }

            if (instance is gView.DataSources.Fdb.PostgreSql.pgImageCatalogClass)
            {
                return(true);
            }

            if (instance is gView.DataSources.Fdb.SQLite.SQLiteFDBImageCatalogClass)
            {
                return(true);
            }

            return(false);
        }
예제 #12
0
        async void _checkinMenuItem_Click(object sender, EventArgs e)
        {
            //if (_contextItem is ExplorerObjectListViewItem && listView.SelectedItems.Count == 1 && _contextItem == listView.SelectedItems[0])
            if (_contextObject != null)
            {
                IExplorerObject exObject = _contextObject; // _contextItem.ExplorerObject;

                var exObjectInstance = await exObject?.GetInstanceAsync();

                if (exObjectInstance is IFeatureClass &&
                    ((IFeatureClass)exObjectInstance).Dataset != null)
                {
                    IFeatureDatabase fdb = ((IFeatureClass)exObjectInstance).Dataset.Database as IFeatureDatabase;
                    if (fdb is IFeatureDatabaseReplication)
                    {
                        ReplicationUI.ShowCheckinDialog((IFeatureClass)exObjectInstance);
                    }
                }
                _contextObject = null;
            }
        }
예제 #13
0
        async private void btnSelect_Click(object sender, EventArgs e)
        {
            List <ExplorerDialogFilter> filters = new List <ExplorerDialogFilter>();

            filters.Add(new OpenFeatureDatasetFilter());

            ExplorerDialog exDlg = new ExplorerDialog("New Target Featureclass",
                                                      SaveFeatureClassFilters.AllFilters,
                                                      false);

            if (exDlg.ShowDialog() == DialogResult.OK &&
                exDlg.ExplorerObjects.Count == 1)
            {
                IExplorerObject parentObject = exDlg.ExplorerObjects[0];
                var             instance     = await parentObject.GetInstanceAsync();

                if (instance is IFeatureDataset &&
                    ((IDataset)instance).Database is IFeatureUpdater)
                {
                    _dataset = (IFeatureDataset)instance;
                }
                else if (exDlg.SelectedExplorerDialogFilter.FilterObject is IFeatureDataset &&
                         ((IDataset)exDlg.SelectedExplorerDialogFilter.FilterObject).Database is IFileFeatureDatabase)
                {
                    IFileFeatureDatabase fileDB = (IFileFeatureDatabase)((IFeatureDataset)exDlg.SelectedExplorerDialogFilter.FilterObject).Database;

                    _dataset = await fileDB.GetDataset(parentObject.FullName);
                }
                else
                {
                    MessageBox.Show("Can't determine target featureclass!");
                    return;
                }

                txtDatasetName.Text     = _dataset.Database.ToString();
                txtDatasetLocation.Text = parentObject.FullName;
                txtTargetClass.Text     = _listViewItem.TargetName = exDlg.TargetName;
            }
            btnNext.Enabled = exDlg.TargetName != String.Empty;
        }
예제 #14
0
        async public override Task <bool> Match(IExplorerObject exObject)
        {
            if (exObject == null)
            {
                return(false);
            }

            var instatnce = await exObject.GetInstanceAsync();

            if (instatnce is IDatasetElement)
            {
                return(_aData.ProcessAble((IDatasetElement)instatnce));
            }

            if (instatnce is IClass)
            {
                DatasetElement element = new DatasetElement((IClass)instatnce);
                return(_aData.ProcessAble(element));
            }

            return(false);
        }
예제 #15
0
        async void _metadataMenuItem_Click(object sender, EventArgs e)
        {
            //if (_contextItem is ExplorerObjectListViewItem)
            if (_contextObject != null)
            {
                IExplorerObject exObject = _contextObject; // ((ExplorerObjectListViewItem)_contextItem).ExplorerObject;
                if (exObject is IMetadata)
                {
                    XmlStream xmlStream = new XmlStream(String.Empty);
                    ((IMetadata)exObject).ReadMetadata(xmlStream);

                    var exObjectInstance = await exObject.GetInstanceAsync();

                    FormMetadata dlg = new FormMetadata(xmlStream, exObjectInstance);
                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        await((IMetadata)exObject).WriteMetadata(await dlg.GetStream());
                    }
                }
                _contextObject = null;
            }
        }
예제 #16
0
        async public Task <bool> OnEvent(object element, object dataset)
        {
            if (!(element is IFeatureLayer))
            {
                MessageBox.Show("Item is not a featurelayer");
                return(true);
            }
            if (((IFeatureLayer)element).FeatureClass == null)
            {
                MessageBox.Show("Item has not a valid featureclass!");
                return(true);
            }

            List <ExplorerDialogFilter> filters = new List <ExplorerDialogFilter>();

            filters.Add(new OpenRendererFilter(((IFeatureLayer)element).FeatureClass.GeometryType));

            ExplorerDialog dlg = new ExplorerDialog("Open Featurelayer...", filters, true);

            dlg.MulitSelection = false;

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                IExplorerObject exObject = dlg.ExplorerObjects[0];

                var instatnce = await exObject?.GetInstanceAsync();

                if (!(instatnce is ITOCElement))
                {
                    return(true);
                }

                IFeatureLayer source = ((ITOCElement)instatnce).Layers[0] as IFeatureLayer;
                if (source == null)
                {
                    return(true);
                }

                IFeatureLayer dest = (IFeatureLayer)element;

                Dialogs.FormImportRenderers dlg2 = new Dialogs.FormImportRenderers();
                if (dlg2.ShowDialog() == DialogResult.OK)
                {
                    if (dlg2.FeatureRenderer)
                    {
                        dest.FeatureRenderer = source.FeatureRenderer;
                    }

                    if (dlg2.LabelRenderer)
                    {
                        dest.LabelRenderer = source.LabelRenderer;
                    }

                    if (dlg2.SelectionRenderer)
                    {
                        dest.SelectionRenderer = source.SelectionRenderer;
                    }

                    if (dlg2.RenderScales)
                    {
                        dest.MinimumScale = source.MinimumScale;
                        dest.MaximumScale = source.MaximumScale;
                        if (dlg2.FeatureRenderer)
                        {
                            dest.MaxRefScaleFactor = source.MaxRefScaleFactor;
                        }
                    }

                    if (dlg2.LabelScales)
                    {
                        dest.MinimumLabelScale = source.MinimumLabelScale;
                        dest.MaximumLabelScale = source.MaximumLabelScale;
                        if (dlg2.LabelRenderer)
                        {
                            dest.MaxLabelRefScaleFactor = source.MaxLabelRefScaleFactor;
                        }
                    }

                    if (dlg2.FilterQuery)
                    {
                        dest.FilterQuery = source.FilterQuery;
                    }
                }
            }
            return(true);
        }
예제 #17
0
        async private Task InvokeSetExplorerObject()
        {
            _exObjectInvokeRequired = false;

            mapView1.CancelDrawing(DrawPhase.All);
            foreach (IDatasetElement element in _map.MapElements)
            {
                _map.RemoveLayer(element as ILayer);
            }

            if (_exObject != null)
            {
                var instance = await _exObject.GetInstanceAsync();

                if (instance is IFeatureClass && ((IFeatureClass)instance).Envelope != null)
                {
                    mapView1.Map = _map;
                    _map.AddLayer(LayerFactory.Create(instance as IClass));
                    _map.Display.Limit = ((IFeatureClass)instance).Envelope;
                    _map.Display.ZoomTo(((IFeatureClass)instance).Envelope);
                }
                else if (instance is IRasterClass && ((IRasterClass)instance).Polygon != null)
                {
                    mapView1.Map = _map;
                    _map.AddLayer(LayerFactory.Create(instance as IClass));
                    _map.Display.Limit = ((IRasterClass)instance).Polygon.Envelope;
                    _map.Display.ZoomTo(((IRasterClass)instance).Polygon.Envelope);
                }
                else if (instance is IWebServiceClass && ((IWebServiceClass)instance).Envelope != null)
                {
                    mapView1.Map = _map;
                    _map.AddLayer(LayerFactory.Create(instance as IClass));
                    _map.Display.Limit = ((IWebServiceClass)instance).Envelope;
                    _map.Display.ZoomTo(((IWebServiceClass)instance).Envelope);
                }
                else if (instance is IFeatureDataset)
                {
                    mapView1.Map = _map;
                    IFeatureDataset dataset = (IFeatureDataset)instance;
                    foreach (IDatasetElement element in await dataset.Elements())
                    {
                        ILayer layer = LayerFactory.Create(element.Class) as ILayer;
                        if (layer == null)
                        {
                            continue;
                        }

                        _map.AddLayer(layer);
                    }
                    _map.Display.Limit = await dataset.Envelope();

                    _map.Display.ZoomTo(await dataset.Envelope());
                }
                else if (instance is Map)
                {
                    Map map = (Map)instance;

                    map.NewBitmap        -= InvokeNewBitmapCreated;
                    map.DoRefreshMapView -= InvokeDoRefreshMapView;

                    map.NewBitmap        += InvokeNewBitmapCreated;
                    map.DoRefreshMapView += InvokeDoRefreshMapView;

                    mapView1.Map = (Map)instance;
                }
            }
        }
        async private Task Script(DragEventArgs e)
        {
            try
            {
                if (_exAppl == null)
                {
                    return;
                }

                if (e.Data == null)
                {
                    return;
                }

                string[] data = (string[])e.Data.GetData(DataFormats.FileDrop);
                if (data == null || data.Length == 0)
                {
                    return;
                }

                StringBuilder sb = new StringBuilder();
                foreach (string filename in data)
                {
                    DirectoryInfo di = new DirectoryInfo(filename);

                    var instance = await _exObject?.GetInstanceAsync();

                    if (instance is SqlFDBImageCatalogClass)
                    {
                        SqlFDBImageCatalogClass layer = (SqlFDBImageCatalogClass)instance;
                        if (layer._fdb == null)
                        {
                            return;
                        }

                        if (di.Exists)
                        {
                            sb.Append("\r\nCreateRasterCatalog -connectionstring \"" + layer._fdb.ConnectionString + "\" -ds \"" + layer.Name + "\" -root \"" + filename + "\" -managed");
                        }
                        else
                        {
                            //gView.Raster.File.RasterFileClass rLayer = new gView.Raster.File.RasterFileClass(null, filename);
                            //if (!rLayer.isValid) continue;
                            RasterFileDataset rDataset = new RasterFileDataset();
                            IRasterLayer      rLayer   = rDataset.AddRasterFile(filename);
                            if (rLayer != null)
                            {
                                sb.Append("\r\nCreateRasterCatalog -connectionstring \"" + layer._fdb.ConnectionString + "\" -ds \"" + layer.Name + "\" -append \"" + filename + "\" -managed");
                            }
                        }
                    }
                    else if (instance is IRasterCatalogClass)
                    {
                        IRasterCatalogClass layer = (IRasterCatalogClass)instance;
                        if (layer.Dataset == null)
                        {
                            return;
                        }

                        if (di.Exists)
                        {
                            sb.Append("\r\nCreateRasterCatalog -mdb \"" + ConfigTextStream.ExtractValue(layer.Dataset.ConnectionString, "mdb") + "\" -ds \"" + layer.Name + "\" -root \"" + filename + "\" -managed");
                        }
                        else
                        {
                            //gView.Raster.File.RasterFileClass rLayer = new gView.Raster.File.RasterFileClass(null, filename);
                            //if (!rLayer.isValid) continue;
                            RasterFileDataset rDataset = new RasterFileDataset();
                            IRasterLayer      rLayer   = rDataset.AddRasterFile(filename);
                            if (rLayer != null)
                            {
                                sb.Append("\r\nCreateRasterCatalog -mdb \"" + ConfigTextStream.ExtractValue(layer.Dataset.ConnectionString, "mdb") + "\" -ds \"" + layer.Name + "\" -append \"" + filename + "\" -managed");
                            }
                        }
                    }
                }
                if (sb.ToString() != "")
                {
                    sb.Append(" -recalcspatialindex\r\n");
                    await _exAppl.ExecuteBatch(sb.ToString(), new ExplorerExecuteBatchCallback(this.RefreshList));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
        }
예제 #19
0
        async private Task <ContextMenuStrip> BuildContextMenu(IExplorerObject exObject, List <IExplorerObject> context, bool emptyContentsClick)
        {
            if (_strip != null && _strip.Visible == true)
            {
                _strip.Close();
            }

            _strip = contextStrip;
            for (int i = _strip.Items.Count - 1; i >= _contextItemCount; i--)
            {
                _strip.Items.RemoveAt(i);
            }

            toolStripMenuItemNew.DropDownItems.Clear();
            PlugInManager compMan = new PlugInManager();

            foreach (var compType in compMan.GetPlugins(Plugins.Type.IExplorerObject))
            {
                IExplorerObject ex = compMan.CreateInstance <IExplorerObject>(compType);
                if (ex is IExplorerObjectCreatable)
                {
                    if (!((IExplorerObjectCreatable)ex).CanCreate(_exObject))
                    {
                        continue;
                    }
                    ToolStripItem createNewItem = new CreateNewToolStripItem(ex);
                    createNewItem.Click += new EventHandler(createNewItem_Click);
                    toolStripMenuItemNew.DropDownItems.Add(createNewItem);
                }
            }
            toolStripMenuItemNew.Enabled = (toolStripMenuItemNew.DropDownItems.Count != 0);

            if (_app != null)
            {
                _app.AppendContextMenuItems(_strip, emptyContentsClick ? null : context /*this.SelectedExplorerObjects*/);
            }
            CommandInterpreter.AppendMenuItems(_strip, exObject);

            if (!emptyContentsClick)
            {
                //if (exObject is IExplorerObjectRenamable)
                //{
                //    if (_strip.Items.Count > 0) _strip.Items.Add(new ToolStripSeparator());
                //    _strip.Items.Add(_renameMenuItem);
                //}
                //if (exObject is IExplorerObjectDeletable)
                //{
                //    _strip.Items.Add(_deleteMenuItem);
                //}
            }

            if (exObject is IExplorerObjectContextMenu)
            {
                ToolStripItem[] contextItems = ((IExplorerObjectContextMenu)exObject).ContextMenuItems;
                if (contextItems != null && contextItems.Length > 0)
                {
                    _strip.Items.Add(new ToolStripSeparator());
                    foreach (ToolStripItem contextItem in contextItems)
                    {
                        _strip.Items.Add(contextItem);
                    }
                }
            }
            if (exObject is IExplorerObjectContextMenu2)
            {
                ToolStripItem[] contextItems = ((IExplorerObjectContextMenu2)exObject).ContextMenuItems(RefreshContents);
                if (contextItems != null && contextItems.Length > 0)
                {
                    _strip.Items.Add(new ToolStripSeparator());
                    foreach (ToolStripItem contextItem in contextItems)
                    {
                        _strip.Items.Add(contextItem);
                    }
                }
            }

            var exObjectInstance = await exObject.GetInstanceAsync();

            if (exObject != null && exObjectInstance is IFeatureClass)
            {
                IFeatureClass fc = (IFeatureClass)exObjectInstance;
                if (fc.Dataset != null && fc.Dataset.Database is IFeatureDatabaseReplication)
                {
                    _strip.Items.Add(new ToolStripSeparator());
                    _strip.Items.Add(_replicationMenuItem);

                    _appendReplicationIDMenuItem.Enabled = !await Replication.FeatureClassHasRelicationID(fc);

                    _checkoutMenuItem.Enabled = await Replication.FeatureClassCanReplicate(fc);

                    _checkinMenuItem.Enabled = (await Replication.FeatureClassGeneration(fc) > 0);
                }
            }

            if (exObject is IMetadata)
            {
                _strip.Items.Add(new ToolStripSeparator());
                _strip.Items.Add(_metadataMenuItem);
            }

            _contextObject = exObject;
            return(_strip);
        }