ArcGIS4LocalGovernment.RunChangeGeoRulesCommand.RunChangeGeoRules C# (CSharp) Method

RunChangeGeoRules() public method

public RunChangeGeoRules ( ) : void
return void
        public void RunChangeGeoRules()
        {
            ICursor cursor = null; IFeatureCursor fCursor = null;
            bool ran = false;

            try
            {
                //Get list of editable layers
                IEditor editor = _editor;
                IEditLayers eLayers = (IEditLayers)editor;
                long lastOID = -1;
                string lastLay = "";

                if (_editor.EditState != esriEditState.esriStateEditing)
                    return;

                IMap map = editor.Map;
                IActiveView activeView = map as IActiveView;

                long featCount = map.SelectionCount;
                int totalCount = Convert.ToInt32(featCount);

                if (totalCount >= 1)
                {

                    if (MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantAsk_2a") + totalCount + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantAsk_2b"),
                        A4LGSharedFunctions.Localizer.GetString("Confirm"), System.Windows.Forms.MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                    {

                        ESRI.ArcGIS.esriSystem.ITrackCancel trackCancel = new ESRI.ArcGIS.Display.CancelTrackerClass();

                        ESRI.ArcGIS.Framework.IProgressDialogFactory progressDialogFactory = new ESRI.ArcGIS.Framework.ProgressDialogFactoryClass();

                        // Set the properties of the Step Progressor
                        System.Int32 int32_hWnd = ArcMap.Application.hWnd;
                        ESRI.ArcGIS.esriSystem.IStepProgressor stepProgressor = progressDialogFactory.Create(trackCancel, int32_hWnd);
                        stepProgressor.MinRange = 1;
                        stepProgressor.MaxRange = totalCount;

                        stepProgressor.StepValue = 1;
                        stepProgressor.Message = A4LGSharedFunctions.Localizer.GetString("AttributeAssistantMess_2a");

                        // Create the ProgressDialog. This automatically displays the dialog
                        ESRI.ArcGIS.Framework.IProgressDialog2 progressDialog2 = (ESRI.ArcGIS.Framework.IProgressDialog2)stepProgressor; // Explict Cast

                        // Set the properties of the ProgressDialog
                        progressDialog2.CancelEnabled = true;
                        progressDialog2.Description = A4LGSharedFunctions.Localizer.GetString("AttributeAssistantDesc_2a") + totalCount.ToString() + ".";
                        progressDialog2.Title = A4LGSharedFunctions.Localizer.GetString("AttributeAssistantTitle_2a");
                        progressDialog2.Animation = ESRI.ArcGIS.Framework.esriProgressAnimationTypes.esriProgressGlobe;

                        // Step. Do your big process here.
                        System.Boolean boolean_Continue = false;
                        boolean_Continue = true;
                        System.Int32 progressVal = 0;

                        ESRI.ArcGIS.esriSystem.IStatusBar statusBar = ArcMap.Application.StatusBar;

                        ran = true;

                        editor.StartOperation();

                        //bool test = false;

                        //Get list of feature layers
                        UID geoFeatureLayerID = new UIDClass();
                        geoFeatureLayerID.Value = "{E156D7E5-22AF-11D3-9F99-00C04F6BC78E}";
                        IEnumLayer enumLayer = map.get_Layers(((ESRI.ArcGIS.esriSystem.UID)geoFeatureLayerID), true);
                        IFeatureLayer fLayer;
                        IFeatureSelection fSel;
                        ILayer layer;
                        // Step through each geofeature layer in the map
                        enumLayer.Reset();
                        // Create an edit operation enabling undo/redo
                        try
                        {
                            //   AAState.StopChangeMonitor();
                            while ((layer = enumLayer.Next()) != null)
                            {
                                // Verify that this is a valid, visible layer and that this layer is editable
                                fLayer = (IFeatureLayer)layer;
                                bool bIsEditableFabricLayer = (fLayer is ICadastralFabricSubLayer2);
                                if (bIsEditableFabricLayer)
                                {
                                    IDataset pDS = (IDataset)fLayer.FeatureClass;
                                    IWorkspace pFabWS = pDS.Workspace;
                                    bIsEditableFabricLayer = (bIsEditableFabricLayer && pFabWS.Equals(editor.EditWorkspace));
                                }
                                if (fLayer.Valid && (eLayers.IsEditable(fLayer) || bIsEditableFabricLayer))//fLayer.Visible &&
                                {
                                    // Verify that this layer has selected features
                                    IFeatureClass fc = fLayer.FeatureClass;
                                    fSel = (IFeatureSelection)fLayer;

                                    if ((fc != null) && (fSel.SelectionSet.Count > 0))
                                    {

                                        fSel.SelectionSet.Search(null, false, out cursor);
                                        fCursor = cursor as IFeatureCursor;
                                        IFeature feat;
                                        while ((feat = (IFeature)fCursor.NextFeature()) != null)
                                        {

                                            progressVal++;
                                            progressDialog2.Description = A4LGSharedFunctions.Localizer.GetString("AttributeAssistantProc_2a") + progressVal + A4LGSharedFunctions.Localizer.GetString("Of") + totalCount.ToString() + ".";

                                            stepProgressor.Step();

                                            statusBar.set_Message(0, progressVal.ToString());

                                            lastLay = fLayer.Name;

                                            lastOID = feat.OID;
                                            IObject pObj = feat as IObject;

                                            AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantMess_2c"));
                                            AAState._editEvents.OnChangeFeature -= AAState.FeatureChange;

                                            try
                                            {
                                                AAState.FeatureGeoChange(pObj);
                                                feat.Store();
                                            }
                                            catch
                                            {
                                            }

                                            AAState._editEvents.OnChangeFeature += AAState.FeatureChange;
                                            AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantMess_2b"));

                                            //Check if the cancel button was pressed. If so, stop process
                                            boolean_Continue = trackCancel.Continue();
                                            if (!boolean_Continue)
                                            {
                                                break;
                                            }

                                        }
                                        if (feat != null)
                                            Marshal.ReleaseComObject(feat);

                                    }

                                }

                            }

                        }
                        catch (Exception ex)
                        {
                            editor.AbortOperation();
                            ran = false;
                            MessageBox.Show("RunChangeRule\n" + ex.Message + " \n" + lastLay + ": " + lastOID, ex.Source);
                            return;
                        }
                        finally
                        {
                            //  AAState.StartChangeMonitor();
                            try
                            {
                                // Stop the edit operation
                                editor.StopOperation("Run Change Geo Rules - Features");
                            }
                            catch (Exception ex)
                            { }

                        }

                        // Done
                        trackCancel = null;
                        stepProgressor = null;
                        progressDialog2.HideDialog();
                        progressDialog2 = null;

                    }

                }
                else
                {
                    MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantError_2a"));

                }
                activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + " \n" + "RunChangeGeoRules", ex.Source);
                ran = false;

                return;
            }
            finally
            {
                if (ran)
                    //MessageBox.Show("Process has completed successfully");

                    if (cursor != null)
                        Marshal.ReleaseComObject(cursor);
                if (fCursor != null)
                    Marshal.ReleaseComObject(fCursor);

            }
        }