public static API_CatNet_GUI createAndSetup(this Control control)
        {
            var catNetGui = new API_CatNet_GUI();

            catNetGui.setup_VsConnect(control.clear());
            catNetGui.set_GUI();
            catNetGui.set_VsConnect();
            return(catNetGui);
        }
        //public static API_CatNet_GUI set_Actions(this API_CatNet_GUI catNetGui)

        public static API_CatNet_GUI openReport(this API_CatNet_GUI catNetGui, string path)
        {
            catNetGui.summaryView.invokeOnThread(
                () => {
                catNetGui.report = Report.Load(path);
                catNetGui.summaryView.LoadReport(catNetGui.report, Path.ChangeExtension(path, ".htm"));
            });
            return(catNetGui);
        }
        public static API_CatNet_GUI scanAssembly(this API_CatNet_GUI catNetGui, string file)
        {
            catNetGui.SolutionLoaded         = "";
            catNetGui.TriggerOnSelectedEvent = false;
            var catNet      = new API_CatNet().loadRules();
            var savedReport = catNet.scan(file).savedReport();

            catNetGui.openReport(savedReport);
            return(catNetGui);
        }
        public static API_CatNet_GUI scanSolution(this API_CatNet_GUI catNetGui, string solutionFile)
        {
            catNetGui.TriggerOnSelectedEvent = true;
            catNetGui.SolutionLoaded         = solutionFile;
            var catNet      = new API_CatNet().loadRules();
            var assemblies  = solutionFile.compileSolution();
            var savedReport = catNet.scan(assemblies).savedReport();

            catNetGui.openReport(savedReport);
            return(catNetGui);
        }
        public static API_CatNet_GUI setup_VsConnect(this API_CatNet_GUI catNetGui, Control topPanel)
        {
            catNetGui.HostControl = topPanel;
            catNetGui.vsConnect   = new VsConnect();
            catNetGui.summaryView = topPanel.clear().add_Control <SummaryView>();
            catNetGui.lvSummary   = (ListView)catNetGui.summaryView.field("_lvSummary");
            catNetGui.detailView  = (DetailView)catNetGui.summaryView.field("_detailView");
            catNetGui.lvDataFlow  = (ListView)catNetGui.detailView.field("_lvDataFlow");
            catNetGui._tsActions  = (ToolStrip)catNetGui.summaryView.field("_tsActions");

            catNetGui.CodeViewer = catNetGui.detailView.insert_Below().add_SourceCodeEditor();
            return(catNetGui);
        }
        public static API_CatNet_GUI handleDrop(this API_CatNet_GUI catNetGui, string file)
        {
            try
            {
                if (file.inValid())
                {
                    //		"There was no file to scan (drop or open a file first)".error();
                    return(catNetGui);
                }
                catNetGui.lvSummary.pink();
                catNetGui.DroppedFile = file;
                if (file.isFile().isFalse())
                {
                    catNetGui.scanScript(file);
                }
                else
                {
                    "File Dropped: {0}".info(file);
                    switch (file.extension())
                    {
                    case ".dll":
                    case ".exe":
                        catNetGui.scanAssembly(file);
                        break;

                    case ".sln":
                        catNetGui.scanSolution(file);
                        break;

                    case ".cs":
                        catNetGui.scanCSharpFile(file);
                        break;

                    case ".xml":
                        catNetGui.openReport(file);
                        break;

                    default:
                        "Provided file extension not supported: {0}".error(file.extension());
                        return(catNetGui);
                    }
                }
                catNetGui.lvSummary.white();
                catNetGui.onScanCompleted.invoke();
            }
            catch (Exception ex)
            {
                ex.log("[catNetGui] in loadFile: {0}".format(file));
            }
            return(catNetGui);
        }
        public static API_CatNet_GUI scanScript(this API_CatNet_GUI catNetGui, string codeSnippet)
        {
            catNetGui.SolutionLoaded         = "";
            catNetGui.TriggerOnSelectedEvent = false;
            //Action<string> compileAndScan =
            //(text)=>{
            if (codeSnippet.notValid() || catNetGui.EngineBusy)
            {
                return(catNetGui);
            }

            catNetGui.EngineBusy = true;
            "compiling and scanning".info();
            var ast = codeSnippet.contains("namespace ") ? codeSnippet.tree()
                                                                                                             : codeSnippet.ast_Script();
            var compilation = ast.compiler("test_Assembly_".add_RandomLetters())
                              .add_Reference("mscorlib")
                              .add_Reference("System")
                              .add_Reference("System.Web")
                              .add_Reference("System.Web.Services")
                              .add_Reference("System.Data");
            var errorDetails = compilation.errors_Details();

            if (errorDetails.valid())
            {
                catNetGui.CompileResults.pink();
                catNetGui.lvSummary.pink();
                catNetGui.CompileResults.set_Text(errorDetails);
                catNetGui.EngineBusy = false;
            }
            else
            {
                catNetGui.CompileResults.set_Text("");
                catNetGui.CompileResults.azure();
                catNetGui.lvSummary.white();
                ".dll".tempFile().info();

                var assembly = compilation.create_Assembly(".dll".tempFile());
                //"assembly: {0}".info(assembly.Location);
                catNetGui.handleDrop(assembly.location());

                catNetGui.EngineBusy = false;
                //catNetGui.script_Me();
                if (catNetGui.lvSummary.items().size() > 0)
                {
                    catNetGui.lvSummary.select(1);
                }
            }
            return(catNetGui);
        }
        public static API_CatNet_GUI scanCSharpFile(this API_CatNet_GUI catNetGui, string file)
        {
            catNetGui.SolutionLoaded         = "";
            catNetGui.TriggerOnSelectedEvent = false;
            var catNet   = new API_CatNet().loadRules();
            var assembly = new CompileEngine().compileSourceFile(file);

            if (assembly.notNull())
            {
                catNetGui.openReport(catNet.scan(assembly).savedReport());
            }
            else
            {
                catNetGui.CodeViewer.open(file);
            }
            return(catNetGui);
        }
        public static API_CatNet_GUI set_VsConnect(this API_CatNet_GUI catNetGui)
        {
            catNetGui.rulesSettings = new RulesSettings();

            catNetGui.vsConnect.invoke("AddDefaultSettingsProvider", new GeneralSettings());
            catNetGui.vsConnect.invoke("AddDefaultSettingsProvider", catNetGui.rulesSettings);
            catNetGui.vsConnect.invoke("AddDefaultSettingsProvider", new TargetsSettings());
            catNetGui.vsConnect.invoke("AddDefaultSettingsProvider", new SuppressionSettings());
            catNetGui.vsConnect.invoke("AddDefaultSettingsProvider", new VectorsSettings());
            var defaultSettings = catNetGui.vsConnect.field("_defaultSettings");

            catNetGui.vsConnect.field("_currentSettings", defaultSettings);

            catNetGui.rulesSettings.Activate();

            catNetGui.summaryView.Controller = catNetGui.vsConnect;
            return(catNetGui);
        }
        public static API_CatNet_GUI createAndSetup(this Control control)
        {
            var catNetGui = new API_CatNet_GUI(); 
			catNetGui.setup_VsConnect(control.clear());
			catNetGui.set_GUI();			 
			catNetGui.set_VsConnect(); 
			return catNetGui;
        }
 public static API_CatNet_GUI loadFile(this API_CatNet_GUI catNetGui, string file)
 {
     return(catNetGui.handleDrop(file));
 }
 public static API_CatNet_GUI viewReportXml(this API_CatNet_GUI catNetGui)
 {
     catNetGui.CodeViewer.set_Text(catNetGui.report.serialize(false), ".xml");
     return(catNetGui);
 }
        public static API_CatNet_GUI set_GUI(this API_CatNet_GUI catNetGui)
        {
            catNetGui._tsActions.clearItems()
            .add_Label("..... loading engine.....");

            catNetGui.lvSummary.remove_Event_SelectedIndexChanged();             // remove this event since it will use a method with DTE dependencies
            catNetGui.lvSummary.add_ContextMenu();                               // also remove (for now) the context menu
            catNetGui.lvDataFlow.showSelection();

            catNetGui.lvDataFlow.afterSelected <DataTransformation>(
                (dataTransformation) => {
                if (catNetGui.onSelectedCodeReference.notNull())
                {
                    catNetGui.onSelectedCodeReference(dataTransformation.SourceFile, dataTransformation.SourceLine);
                    //"Igonoring after select event for: {0}: {1}".debug(dataTransformation.SourceFile, dataTransformation.SourceLine);
                    return;
                }
                if (dataTransformation.SourceFile.fileExists())
                {
                    catNetGui.CodeViewer.open(dataTransformation.SourceFile)
                    .gotoLine(dataTransformation.SourceLine);
                    catNetGui.lvDataFlow.focus();
                }
                else
                {
                    //codeViewer.editor().set_Text("").sPathToFileLoaded = "";
                    catNetGui.CodeViewer.editor().set_Text(dataTransformation.serialize(false), ".xml").sPathToFileLoaded = "";
                }
            });

            catNetGui.lvSummary.afterSelected <ReportItem>(
                (reportItem) => {
                //reportItem.script_Me();
                var ruleName = (string)reportItem.field("_ruleInfo").field("Name");
                catNetGui.onSelectedReportItem.invoke(ruleName);
                catNetGui.detailView.Clear();
                reportItem.DisplayText(catNetGui.detailView);

                var transformations = (ArrayList)reportItem._result.Transformations;
                foreach (DataTransformation dataTransformation in transformations)
                {
                    var fileSnippet = (dataTransformation.SourceFile.fileExists())
                                                                                                                                ?       dataTransformation.SourceFile.fileContents().split_onLines().value(dataTransformation.SourceLine - 1).trim()
                                                                                                                                :       "";
                    catNetGui.lvDataFlow.add_Row(dataTransformation.StatementMethodName ?? "",
                                                 dataTransformation.SourceLine.ToString(),
                                                 dataTransformation.InputVariableString ?? "",
                                                 dataTransformation.OutputVariableString ?? "",
                                                 fileSnippet)
                    .tag(dataTransformation);
                }
                catNetGui.detailView.AutoResizeColumns();
                if (catNetGui.TriggerOnSelectedEvent)
                {
                    catNetGui.lvDataFlow.select(1);
                }
                catNetGui.lvSummary.focus();
            });
            catNetGui._tsActions.clearItems()
            .add_Button("Scan Again", "_btAnalyze", () => catNetGui.handleDrop(catNetGui.DroppedFile))
            .add_Button("View loaded report xml", "_btGeneralSettings", () => catNetGui.viewReportXml());

            catNetGui.summaryView.onDrop((file) => O2Thread.mtaThread(() => catNetGui.handleDrop(file)));

            return(catNetGui);
        }