public void AddWidgetTypeBinding(string dialogClassName, string cppFileName, WidgetTypeBinding widgetTypeBinding)
        {
            DialogTypeBindings dialogTypeBindings = null;

            if (this.DialogTypeBindings.ContainsKey(dialogClassName))
            {
                dialogTypeBindings = this.DialogTypeBindings[dialogClassName];
            }
            else
            {
                dialogTypeBindings = new DialogTypeBindings(dialogClassName, cppFileName);
                this.DialogTypeBindings.Add(dialogClassName, dialogTypeBindings);
            }

            if (dialogTypeBindings.WidgetTypeBindingMap.ContainsKey(widgetTypeBinding.ResourceLabel))
            {
                if (dialogTypeBindings.WidgetTypeBindingMap[widgetTypeBinding.ResourceLabel].PenWebWidgetType == widgetTypeBinding.PenWebWidgetType)
                {
                }
                else
                {
                    Console.WriteLine($"Missmatched Binding");
                }
            }
            else
            {
                dialogTypeBindings.WidgetTypeBindingMap.Add(widgetTypeBinding.ResourceLabel, widgetTypeBinding);
            }
        }
        private void RegisterTypeBinding(WidgetTypeBinding widgetTypeBinding)
        {
            if (String.IsNullOrWhiteSpace(widgetTypeBinding.ResourceLabel))
            {
                return;
            }

            if (this.WidgetTypeBindingsMap.ContainsKey(widgetTypeBinding.ResourceLabel))
            {
                WidgetTypeBinding existingBinding = this.WidgetTypeBindingsMap[widgetTypeBinding.ResourceLabel];

                if (widgetTypeBinding.PenWebWidgetType == existingBinding.PenWebWidgetType)
                {
                    return;
                }
                else
                {
                    Console.WriteLine($"Mismatched Binding");
                }
            }
            else
            {
                this.WidgetTypeBindingsMap.Add(widgetTypeBinding.ResourceLabel, widgetTypeBinding);

                CppResultsManager.Self.AddWidgetTypeBinding(this.CppCodeContext.DialogClassName, this.CppCodeContext.FileName, widgetTypeBinding);
            }
        }
        private void CreateWidgetTypeBinding(PenWebCallExpression methodCall, PenWebWidgetType penWebWidgetType)
        {
            string resourceLabel = null;

            ResourceIdContext resourceIdContext = null;

            switch (methodCall.ResourceIdContexts.Count)
            {
            case 0:
                break;

            case 1:
                resourceIdContext = methodCall.ResourceIdContexts[0];
                break;

            default:
                resourceIdContext = methodCall.ResourceIdContexts[0];
                break;
            }

            if (resourceIdContext == null)
            {
                if (methodCall.MacroReferences.Count > 0)
                {
                    resourceLabel = methodCall.MacroReferences[0];
                }
                else
                {
                }
            }

            WidgetTypeBinding widgetTypeBinding = new WidgetTypeBinding();

            widgetTypeBinding.FileName         = this.CppCodeContext.FileName;
            widgetTypeBinding.LineNumber       = methodCall.Location.StartLine;
            widgetTypeBinding.PenWebWidgetType = penWebWidgetType;
            widgetTypeBinding.ResourceLabel    = resourceLabel;

            if (!String.IsNullOrWhiteSpace(resourceLabel))
            {
                this.RegisterTypeBinding(widgetTypeBinding);
            }

            if (resourceIdContext == null)
            {
                IncompleteWidgetTypeBindings.Add(widgetTypeBinding);

                if (!HasIncompleteBindings.ContainsKey(this.CppCodeContext.DialogClassName))
                {
                    HasIncompleteBindings.Add(this.CppCodeContext.DialogClassName, 1);
                    HasIncompleteBinding = true;
                }
                else
                {
                    HasIncompleteBindings[this.CppCodeContext.DialogClassName]++;
                }

                return;
            }

            if (resourceIdContext != null)
            {
                if (!HasBinding)
                {
                    HasBindings.Add(this.CppCodeContext.DialogClassName, 1);
                    HasBinding = true;
                }
                else
                {
                    HasBindings[this.CppCodeContext.DialogClassName]++;
                }

                //widgetTypeBinding.ResourceId = resourceIdContext.ResourceId;

                this.RegisterTypeBinding(widgetTypeBinding);

                //this.WidgetTypeBindings.Add(widgetTypeBinding);
            }
            else
            {
                IncompleteWidgetTypeBindings.Add(widgetTypeBinding);

                if (!HasIncompleteBinding)
                {
                    HasIncompleteBindings.Add(this.CppCodeContext.DialogClassName, 1);
                    HasIncompleteBinding = true;
                }
                else
                {
                    HasIncompleteBindings[this.CppCodeContext.DialogClassName]++;
                }

                IncompleteWidgetTypeBindings.Add(widgetTypeBinding);
            }
        }
        private void CreateWidgetTypeFromDDX(PenWebCallExpression methodCall)
        {
            string typeName = methodCall.ParameterList[1].TypeName;

            string resourceLabel = null;

            int resourceId = -1;

            if (methodCall.MacroReferences.Count == 1)
            {
                resourceLabel = methodCall.MacroReferences[0];

                /*
                 * ResourceIdContext resourceIdContext = CppResourceManager.Self.GetResourceIdContextByLabel(resourceLabel);
                 *
                 * if (resourceIdContext != null)
                 * {
                 *
                 * }
                 * else
                 * {
                 *  Console.WriteLine($"Missing Resource Id Reference {resourceLabel}");
                 *  return;
                 * }
                 */
            }
            else
            {
                Console.WriteLine($"Missing Macro Reference");
                return;
            }

            WidgetTypeBinding widgetTypeBinding = new WidgetTypeBinding();

            widgetTypeBinding.FileName      = this.CppCodeContext.FileName;
            widgetTypeBinding.LineNumber    = methodCall.Location.StartLine;
            widgetTypeBinding.ResourceLabel = resourceLabel;
            //widgetTypeBinding.ResourceId = resourceId;
            widgetTypeBinding.PenWebWidgetType = PenWebWidgetType.UnknownWidget;

            switch (methodCall.Method)
            {
            case "DDX_CBIndex":
            case "DDX_CBString":
            case "DDX_CBStringExact":
            case "DDX_LBIndex":
            case "DDX_LBString":
            case "DDX_LBStringExact":
            case "DDX_Radio":
            case "DDX_Text":
            case "DDX_Check":
                return;

            case "DDX_PenradDate":
                widgetTypeBinding.PenWebWidgetType = PenWebWidgetType.DateTimeWidget;
                break;

            case "DDX_Control":
                switch (typeName)
                {
                case "CDateEdit":
                    widgetTypeBinding.PenWebWidgetType = PenWebWidgetType.DateTimeWidget;
                    break;

                case "CPhoneEdit":
                case "CPhoneExtEdit":
                case "CSsnEdit":
                    widgetTypeBinding.PenWebWidgetType = PenWebWidgetType.FormattedWidget;
                    break;

                case "CExListBox":
                case "CListBox":
                    widgetTypeBinding.PenWebWidgetType = PenWebWidgetType.ListboxWidget;
                    break;

                case "CSliderCtrl":
                    widgetTypeBinding.PenWebWidgetType = PenWebWidgetType.SliderWidget;
                    break;

                case "CAnimateCtrl":
                case "CButton":
                case "CButton[4]":
                case "CCalDayStatic":
                case "CComboBox":
                case "CDibWnd":
                case "CEdit":
                case "CEditWithWheelNotify":
                case "CSpinButtonCtrl":
                case "CStatic":
                case "CStatic[4]":
                    break;
                }

                break;

            case "DDX_ManagedControl":
                switch (typeName)
                {
                case "Microsoft::VisualC::MFC::CWinFormsControl<CDataGridView>":
                    widgetTypeBinding.PenWebWidgetType = PenWebWidgetType.GridWidget;
                    break;

                case "Microsoft::VisualC::MFC::CWinFormsControl<CrystalDecisions::Windows::Forms::CrystalReportViewer>":
                    widgetTypeBinding.PenWebWidgetType = PenWebWidgetType.CrystalViewer;
                    break;

                case "Microsoft::VisualC::MFC::CWinFormsControl<Penrad::PenCsLib::Browser>":
                    widgetTypeBinding.PenWebWidgetType = PenWebWidgetType.HtmlViewer;
                    break;

                case "Microsoft::VisualC::MFC::CWinFormsControl<System::Windows::Forms::ListView>":
                    widgetTypeBinding.PenWebWidgetType = PenWebWidgetType.ListboxWidget;
                    break;

                case "Microsoft::VisualC::MFC::CWinFormsControl<TXTextControl::TextControl>":
                    widgetTypeBinding.PenWebWidgetType = PenWebWidgetType.TxTextControl;
                    break;

                case "Microsoft::VisualC::MFC::CWinFormsControl<Penrad::PenCsLib::ZoomPicBox>":
                case "Microsoft::VisualC::MFC::CWinFormsControl<System::Windows::Forms::Button>":
                case "Microsoft::VisualC::MFC::CWinFormsControl<System::Windows::Forms::ComboBox>":
                case "Microsoft::VisualC::MFC::CWinFormsControl<System::Windows::Forms::Label>":
                case "Microsoft::VisualC::MFC::CWinFormsControl<System::Windows::Forms::PictureBox>":
                case "Microsoft::VisualC::MFC::CWinFormsControl<System::Windows::Forms::TextBox>":
                case "Microsoft::VisualC::MFC::CWinFormsControl<System::Windows::Forms::TrackBar>":
                    break;
                }
                break;

            default:
                break;
            }

            if (widgetTypeBinding.PenWebWidgetType != PenWebWidgetType.UnknownWidget)
            {
                this.RegisterTypeBinding(widgetTypeBinding);
            }
        }