/// <summary> /// Overgrown monster function that does everything. We need some refactoring here. /// </summary> public void ConnectSelection() { if (Properties.Settings.Default.IdiotLight) { if (PartSetup && mrb.IsDirty) { if (System.Windows.Forms.MessageBox.Show(@"Save property changes?", @"Properties changed", MessageBoxButtons.YesNo) == DialogResult.Yes) { Write(); } } if (DrawSetup && drb.IsDirty) { if (System.Windows.Forms.MessageBox.Show(@"Save property changes?", @"Properties changed", MessageBoxButtons.YesNo) == DialogResult.Yes) { Write(); } } } // Since I create objects and just toss them out liberally, I want to force garbage collection. // I think this leaves fewer GDI objects around. (This seems to be a good thing) System.GC.Collect(2, GCCollectionMode.Forced); prop.CutlistID = 0; if (Document != null) { // ignore clicks on the same object if (Document != md_last) { // Blow out the propertyset so we can get new ones. prop.Clear(); Enabled = true; AddHash(); // what sort of doc is open? swDocumentTypes_e docT = swDocumentTypes_e.swDocNONE; swDocumentTypes_e overDocT = swDocumentTypes_e.swDocNONE; GetTypes(ref docT, ref overDocT); switch (overDocT) { case swDocumentTypes_e.swDocASSEMBLY: DisconnectAssemblyEvents(); SetupAssy((ModelDoc2)_swApp.ActiveDoc); // a switch in a switch! switch (docT) { case swDocumentTypes_e.swDocASSEMBLY: regen_ok = true; if (!PartSetup) { SetupPart(); } if (!PartEventsAssigned) { ConnectPartEvents(prop.modeldoc); PartSetup = true; } mrb.Update(ref prop); break; case swDocumentTypes_e.swDocDRAWING: break; case swDocumentTypes_e.swDocNONE: break; case swDocumentTypes_e.swDocPART: regen_ok = true; if (!PartSetup) { // ClearControls(this); // <-- redundant // setup SetupPart(prop.modeldoc); // link mrb.Update(ref prop); } else { DisconnectPartEvents(); ConnectPartEvents(prop.modeldoc); PartSetup = true; // OK, this isn't how I meant to use this. // or just link mrb.Update(ref prop); } break; case swDocumentTypes_e.swDocSDM: break; default: break; } break; case swDocumentTypes_e.swDocDRAWING: regen_ok = false; ClearControls(this); SetupDrawing(); break; case swDocumentTypes_e.swDocNONE: SetupOther(); break; case swDocumentTypes_e.swDocPART: regen_ok = true; if (!PartSetup) { // ClearControls(this); // <-- redundant // setup SetupPart(prop.modeldoc); // link mrb.Update(ref prop); } else { DisconnectPartEvents(); ConnectPartEvents(prop.modeldoc); PartSetup = true; // OK, this isn't how I meant to use this. // or just link mrb.Update(ref prop); } break; case swDocumentTypes_e.swDocSDM: break; default: SetupOther(); break; } } md_last = Document; } else { Enabled = false; } #if EXPERIMENTAL if (Document != null) { Feature f = (Feature)Document.FirstFeature(); string typeName = f.GetTypeName2(); do { f.GetNextSubFeature(); typeName = f.GetTypeName2(); } while (typeName.ToUpper().Contains("FILE")); if (typeName != string.Empty) { int res0 = SwApp.AddMenuPopupItem4( (int)SolidWorks.Interop.swconst.swDocumentTypes_e.swDocASSEMBLY, cookie, typeName, "Uaaaaaaaaaaaaaaaaa.........", "donothing(1)", "enablemethod(1)", "pow", "bip;bop" ); int res1 = SwApp.AddMenuPopupItem4( (int)SolidWorks.Interop.swconst.swDocumentTypes_e.swDocASSEMBLY, cookie, typeName, "Ummmmmmmmmmmmmmm.........", "donothing(2)", "enablemethod(0)", "pow", "bip;bop" ); int res2 = SwApp.AddMenuPopupItem( (int)SolidWorks.Interop.swconst.swDocumentTypes_e.swDocASSEMBLY, (int)SolidWorks.Interop.swconst.swSelectType_e.swSelBODYFEATURES, typeName, "donothing(2)", "bip;bop" ); (SwApp.Frame() as Frame).SetStatusBarText( string.Format("Runtime Command IDs: {0}, {1}, {2} | Feature: {3}", res0, res1, res2, typeName) ); } } #endif }