Example #1
0
        public static void WriteSettingsForProject(CodeOutputProjectSettings settings)
        {
            var fileName   = GetProjectCodeSettingsFile();
            var serialized = JsonConvert.SerializeObject(settings);

            System.IO.File.WriteAllText(fileName.FullPath, serialized);
        }
Example #2
0
        public static CodeOutputProjectSettings CreateOrLoadSettingsForProject()
        {
            CodeOutputProjectSettings toReturn;
            var fileName = GetProjectCodeSettingsFile();

            if (fileName?.Exists() == true)
            {
                var contents = System.IO.File.ReadAllText(fileName.FullPath);

                toReturn = JsonConvert.DeserializeObject <CodeOutputProjectSettings>(contents);
            }
            else
            {
                toReturn = new CodeOutputProjectSettings();
            }

            return(toReturn);
        }
Example #3
0
        public static string GetCodeForElement(ElementSave element, CodeOutputElementSettings elementSettings, CodeOutputProjectSettings projectSettings)
        {
            #region Determine if XamarinForms Control
            VisualApi visualApi;
            var       defaultState = element.DefaultState;
            var       isXamForms   = defaultState.GetValueRecursive($"IsXamarinFormsControl") as bool?;
            if (isXamForms == true)
            {
                visualApi = VisualApi.XamarinForms;
            }
            else
            {
                visualApi = VisualApi.Gum;
            }
            #endregion

            var stringBuilder = new StringBuilder();
            int tabCount      = 0;

            #region Using Statements

            if (!string.IsNullOrWhiteSpace(projectSettings?.CommonUsingStatements))
            {
                stringBuilder.AppendLine(projectSettings.CommonUsingStatements);
            }

            if (!string.IsNullOrEmpty(elementSettings?.UsingStatements))
            {
                stringBuilder.AppendLine(elementSettings.UsingStatements);
            }
            #endregion

            #region Namespace Header/Opening {

            if (!string.IsNullOrEmpty(elementSettings?.Namespace))
            {
                stringBuilder.AppendLine(ToTabs(tabCount) + $"namespace {elementSettings.Namespace}");
                stringBuilder.AppendLine(ToTabs(tabCount) + "{");
                tabCount++;
            }

            #endregion

            #region Class Header/Opening {

            stringBuilder.AppendLine(ToTabs(tabCount) + $"partial class {GetClassNameForType(element.Name, visualApi)}");
            stringBuilder.AppendLine(ToTabs(tabCount) + "{");
            tabCount++;
            #endregion

            FillWithStateEnums(element, stringBuilder, tabCount);

            FillWithCurrentState(element, stringBuilder, tabCount);

            foreach (var instance in element.Instances.Where(item => item.DefinedByBase == false))
            {
                FillWithInstanceDeclaration(instance, element, stringBuilder, tabCount);
            }

            AddAbsoluteLayoutIfNecessary(element, tabCount, stringBuilder);

            stringBuilder.AppendLine();

            FillWithExposedVariables(element, stringBuilder, visualApi, tabCount);
            // -- no need for AppendLine here since FillWithExposedVariables does it after every variable --

            GenerateConstructor(element, visualApi, tabCount, stringBuilder);

            stringBuilder.AppendLine(ToTabs(tabCount) + "partial void CustomInitialize();");

            #region Class Closing }
            tabCount--;
            stringBuilder.AppendLine(ToTabs(tabCount) + "}");
            #endregion

            if (!string.IsNullOrEmpty(elementSettings?.Namespace))
            {
                tabCount--;
                stringBuilder.AppendLine(ToTabs(tabCount) + "}");
            }

            return(stringBuilder.ToString());
        }
Example #4
0
        public static string GetCustomCodeForElement(ElementSave element, CodeOutputElementSettings elementSettings, CodeOutputProjectSettings projectSettings)
        {
            var visualApi = CodeGenerator.GetVisualApiForElement(element);

            var stringBuilder = new StringBuilder();
            int tabCount      = 0;

            #region Using Statements

            if (!string.IsNullOrWhiteSpace(projectSettings?.CommonUsingStatements))
            {
                stringBuilder.AppendLine(projectSettings.CommonUsingStatements);
            }

            if (!string.IsNullOrEmpty(elementSettings?.UsingStatements))
            {
                stringBuilder.AppendLine(elementSettings.UsingStatements);
            }
            #endregion

            #region Namespace Header/Opening {

            string namespaceName = CodeGenerator.GetElementNamespace(element, elementSettings, projectSettings);

            if (!string.IsNullOrEmpty(namespaceName))
            {
                stringBuilder.AppendLine(ToTabs(tabCount) + $"namespace {namespaceName}");
                stringBuilder.AppendLine(ToTabs(tabCount) + "{");
                tabCount++;
            }

            #endregion

            #region Class Header/Opening {

            // todo - this needs work! It's just placeholder so I can finish the rest of this method to get something with the right # of brackets

            string inheritance = null;
            if (element is ScreenSave)
            {
                inheritance = element.BaseType ?? "Xamarin.Forms.BioCheckPage";
            }
            else if (element.BaseType == "XamarinForms/SkiaGumCanvasView")
            {
                inheritance = "SkiaGum.SkiaGumCanvasView";
            }
            else
            {
                inheritance = "BindableGraphicalUiElement";
            }

            stringBuilder.AppendLine(ToTabs(tabCount) + $"partial class {CodeGenerator.GetClassNameForType(element.Name, visualApi)} : {inheritance}");
            stringBuilder.AppendLine(ToTabs(tabCount) + "{");
            tabCount++;
            #endregion

            stringBuilder.AppendLine(ToTabs(tabCount) + "partial void CustomInitialize()");
            stringBuilder.AppendLine(ToTabs(tabCount) + "{");
            stringBuilder.AppendLine(ToTabs(tabCount));
            stringBuilder.AppendLine(ToTabs(tabCount) + "}");

            #region Class Closing }
            tabCount--;
            stringBuilder.AppendLine(ToTabs(tabCount) + "}");
            #endregion

            if (!string.IsNullOrEmpty(namespaceName))
            {
                tabCount--;
                stringBuilder.AppendLine(ToTabs(tabCount) + "}");
            }

            return(stringBuilder.ToString());
        }