public static void WriteComment(this SolutionProjectLanguage that, SolutionFile File, params XElement[] comments) { foreach (var comment in comments) { that.WriteComment(File, comment); } }
public static void WriteSummary(this SolutionProjectLanguage that, SolutionFile File, string summary) { if (string.IsNullOrEmpty(summary)) return; that.WriteSummary(File, summary, null); }
public static void WriteIndentedComment(this SolutionProjectLanguage that, SolutionFile File, string summary) { foreach (var item in summary.ToLines()) { File.WriteIndent(); that.WriteCommentLine(File, item); } }
/// <summary> /// sadsad /// </summary> /// <param name="that">fsdfsdf</param> /// <param name="File">sdfsf</param> /// <param name="comment">sdg</param> public static void WriteComment(this SolutionProjectLanguage that, SolutionFile File, XElement comment) { var x = comment.ToString(); var r = new StringReader(x); var n = r.ReadLine(); while (n != null) { File.WriteIndent(); that.WriteXMLCommentLine(File, n); n = r.ReadLine(); } }
public void WriteTo(SolutionFile File, SolutionProjectLanguage Language, SolutionBuilder Context) { // X:\jsc.svn\examples\javascript\test\Test4IfNotNullIfFalse\Test4IfNotNullIfFalse\Class1.cs // X:\jsc.svn\core\ScriptCoreLib.Ultra.Library\ScriptCoreLib.Ultra.Library\Ultra\Studio\SolutionFileComment.cs // broken in roslyn? if (this.IsActiveFilter != null) if (!this.IsActiveFilter(Context)) return; if (Comment != null) { File.WriteIndent(); Language.WriteCommentLine(File, Comment); } if (Link != null) { File.WriteIndent(); Language.WriteLinkCommentLine(File, Link); } this.MarginBottom.Times(File.WriteLine); }
public static void WriteSummary(this SolutionProjectLanguage that, SolutionFile File, string summary, SolutionProjectLanguageArgument[] @params) { if (string.IsNullOrEmpty(summary)) return; var c = new List<XElement>(); c.Add(new XElement("summary", "\n" + summary + "\n")); if (@params != null) foreach (var item in @params) { c.Add( new XElement("param", new XAttribute("name", item.Name), item.Summary ) ); } that.WriteComment(File, c.ToArray()); }
public void WriteTo(Action <SolutionFile> AddFile) { var guid = Guid.NewGuid(); var proj_Identifier = "{" + guid.ToString() + "}"; var proj = new jsc.meta.Library.MVSSolutionFile.ProjectElement { ProjectFile = SolutionProjectFileNameRelativeToSolution, Name = Name, Kind = this.Language.Kind, Identifier = proj_Identifier }; var projects = new[] { proj }; AddFile( new SolutionFile { Name = SolutionFileName, Content = projects.ToSolutionFile().ToString(), Context = this } ); #region first project in current solution var proj_Content = default(XElement); Console.WriteLine("Selecting project template by language"); if (this.Language is VisualCSharpLanguage) { Console.WriteLine("Selecting VisualCSharpLanguage"); proj_Content = VisualStudioTemplates.VisualCSharpProject.Clone(); //proj_Content = VisualStudioTemplates.VisualCSharpProjectReferences; } if (this.Language is VisualBasicLanguage) { Console.WriteLine("Selecting VisualBasicLanguage"); proj_Content = VisualStudioTemplates.VisualBasicProject.Clone(); } if (this.Language is VisualFSharpLanguage) { Console.WriteLine("Selecting VisualFSharpLanguage"); proj_Content = VisualStudioTemplates.VisualFSharpProject.Clone(); } Console.WriteLine(proj_Content.ToString()); //<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion> proj_Content.Elements("PropertyGroup").Elements("ProjectGuid").ReplaceContentWith(proj_Identifier); proj_Content.Elements("PropertyGroup").Elements("RootNamespace").ReplaceContentWith(Name); proj_Content.Elements("PropertyGroup").Elements("AssemblyName").ReplaceContentWith(Name); // how many item groups are there that have references? Console.WriteLine("Looking for ItemGroup for Referenes..."); var ItemGroupReferenes = proj_Content.Elements("ItemGroup").Where(k => k.Elements("Reference").Any()).Single(); Console.WriteLine("ItemGroupReferenes..."); UpdateReferences(ItemGroupReferenes); // var ItemGroupForCompile = proj_Content.Elements("ItemGroup").Where(k => k.Elements("Compile").Any()).Single(); ItemGroupForCompile.RemoveAll(); // new operator is the new call opcode? :) var builder = new StockUltraApplicationBuilder(AddFile, this, ItemGroupForCompile, StartupType => { proj_Content.Elements("PropertyGroup").Elements("StartupObject").ReplaceContentWith( StartupType.FullName ); } ); // The default XML namespace of the project must be the MSBuild XML namespace. // If the project is authored in the MSBuild 2003 format, // please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" // to the <Project> element. // If the project has been authored in the old 1.0 or 1.2 format, // please convert it to MSBuild 2003 format. var fproj = new SolutionFile { Name = SolutionProjectFileName, Context = this }; fproj.WriteXElement( XElement.Parse( proj_Content.ToString().Replace( // dirty little hack // http://stackoverflow.com/questions/461251/add-xml-namespace-attribute-to-3rd-party-xml "<Project ToolsVersion=\"3.5\" DefaultTargets=\"Build\">", "<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" >" ) ) ); AddFile(fproj); #endregion }
public StudioView() { Content.style.position = IStyle.PositionEnum.absolute; Content.style.left = "0px"; Content.style.right = "0px"; Content.style.top = "0px"; Content.style.bottom = "0px"; new TwentyTenWorkspace().ToBackground(Content.style, true); var WorkspaceHeader = default(IHTMLSpan); @"jsc-solutions.net studio".ToDocumentTitle().With( title => { WorkspaceHeader = new IHTMLSpan { innerText = title }; WorkspaceHeader.AttachTo(Content); WorkspaceHeader.style.SetLocation(16, 8); WorkspaceHeader.style.color = Color.White; // http://www.quirksmode.org/css/textshadow.html WorkspaceHeader.style.textShadow = "#808080 4px 2px 2px"; } ); // em + px :) var Workspace0 = new IHTMLDiv().With( div => { div.style.position = IStyle.PositionEnum.absolute; div.style.left = "0px"; div.style.right = "0px"; div.style.bottom = "0px"; div.style.top = "3em"; } ).AttachTo(Content); // workspace contains the split views var Workspace = new IHTMLDiv().With( div => { div.style.position = IStyle.PositionEnum.absolute; div.style.left = "6px"; div.style.right = "6px"; div.style.bottom = "6px"; div.style.top = "6px"; } ).AttachTo(Workspace0); Action<HorizontalSplit> ApplyStyle = t => { t.Split.Splitter.style.backgroundColor = Color.None; t.SplitImageContainer.Orphanize(); t.SplitArea.Target.style.borderLeft = "0"; t.SplitArea.Target.style.borderRight = "0"; t.SplitArea.Target.style.width = "6px"; t.SplitArea.Target.style.Opacity = 0.7; // should we obselete JSColor already? t.SelectionColor = JSColor.Black; }; var Split = new HorizontalSplit { Minimum = 0, Maximum = 1, Value = 0.2, }; Split.With(ApplyStyle); Split.Split.Splitter.style.backgroundColor = Color.None; Split.Container.AttachTo(Workspace); var SolutionToolbox = new SolutionDockWindowPage(); SolutionToolbox.HeaderText.innerText = "Toolbox"; SolutionToolbox.Content.style.backgroundColor = Color.White; SolutionToolbox.Content.style.padding = "2px"; SolutionToolbox.Content.style.overflow = IStyle.OverflowEnum.auto; SolutionToolbox.Content.Clear(); var vv = new SolutionToolboxListView(); vv.Container.AttachTo(SolutionToolbox.Content); var items = new StockToolboxTabsForHTMLDocument(); items.WithEach(vv.Add); var Viewer = new SolutionDocumentViewer(); SolutionDocumentViewerTab AboutTab = "About"; Viewer.Add(AboutTab); var CurrentDesigner = new SolutionFileDesigner(); var HTMLDesigner = new SolutionFileDesignerHTMLElementTabs(); CurrentDesigner.Add(HTMLDesigner); #region CodeSource var CodeSourceTab = new SolutionFileDesignerTab { Image = new ScriptCoreLib.Ultra.Components.HTML.Images.FromAssets.ClassViewer(), Text = "XDefaultPage" }; var CodeSourceView = new SolutionFileView(); CodeSourceView.Container.style.position = IStyle.PositionEnum.absolute; CodeSourceView.Container.style.left = "0px"; CodeSourceView.Container.style.right = "0px"; CodeSourceView.Container.style.top = "0px"; CodeSourceView.Container.style.bottom = "0px"; CodeSourceView.Container.style.display = IStyle.DisplayEnum.none; CodeSourceView.Container.AttachTo(CurrentDesigner.Content); CodeSourceTab.Deactivated += delegate { CodeSourceView.Container.style.display = IStyle.DisplayEnum.none; }; CodeSourceTab.Activated += delegate { HTMLDesigner.HTMLDesignerContent.WhenContentReady( body => { var CodeSourceFile = new SolutionFile(); var Type = new SolutionProjectLanguageType { Namespace = "HTML.Pages", Name = "IDefaultPage", IsInterface = true, }; (from n in body.AsXElement().DescendantsAndSelf() let id = n.Attribute("id") where id != null select new { n, id } ).WithEach( k => { Type.Properties.Add( new SolutionProjectLanguageProperty { Name = k.id.Value, GetMethod = new SolutionProjectLanguageMethod(), SetMethod = new SolutionProjectLanguageMethod(), PropertyType = new SolutionProjectLanguageType { Namespace = "ScriptCoreLib.JavaScript.DOM.HTML", Name = "IHTMLElement" } } ); } ); KnownLanguages.VisualCSharp.WriteType(CodeSourceFile, Type, null); CodeSourceView.File = CodeSourceFile; CodeSourceView.Container.style.display = IStyle.DisplayEnum.empty; } ); }; #endregion CurrentDesigner.Add(CodeSourceTab); CurrentDesigner.First().RaiseActivated(); AboutTab.Activated += delegate { Viewer.Content.ReplaceContentWith(CurrentDesigner.Container); }; Viewer.First().Activate(); Split.Split.LeftScrollable = SolutionToolbox.Container; Split.Split.RightScrollable = Viewer.Container; }
public void WriteTo(Action<SolutionFile> AddFile) { var guid = Guid.NewGuid(); var proj_Identifier = "{" + guid.ToString() + "}"; var proj = new jsc.meta.Library.MVSSolutionFile.ProjectElement { ProjectFile = SolutionProjectFileNameRelativeToSolution, Name = Name, Kind = this.Language.Kind, Identifier = proj_Identifier }; var projects = new[] { proj }; AddFile( new SolutionFile { Name = SolutionFileName, Content = projects.ToSolutionFile().ToString(), Context = this } ); #region first project in current solution var proj_Content = default(XElement); Console.WriteLine("Selecting project template by language"); if (this.Language is VisualCSharpLanguage) { Console.WriteLine("Selecting VisualCSharpLanguage"); proj_Content = VisualStudioTemplates.VisualCSharpProject.Clone(); //proj_Content = VisualStudioTemplates.VisualCSharpProjectReferences; } if (this.Language is VisualBasicLanguage) { Console.WriteLine("Selecting VisualBasicLanguage"); proj_Content = VisualStudioTemplates.VisualBasicProject.Clone(); } if (this.Language is VisualFSharpLanguage) { Console.WriteLine("Selecting VisualFSharpLanguage"); proj_Content = VisualStudioTemplates.VisualFSharpProject.Clone(); } Console.WriteLine(proj_Content.ToString()); //<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion> proj_Content.Elements("PropertyGroup").Elements("ProjectGuid").ReplaceContentWith(proj_Identifier); proj_Content.Elements("PropertyGroup").Elements("RootNamespace").ReplaceContentWith(Name); proj_Content.Elements("PropertyGroup").Elements("AssemblyName").ReplaceContentWith(Name); // how many item groups are there that have references? Console.WriteLine("Looking for ItemGroup for Referenes..."); var ItemGroupReferenes = proj_Content.Elements("ItemGroup").Where(k => k.Elements("Reference").Any()).Single(); Console.WriteLine("ItemGroupReferenes..."); UpdateReferences(ItemGroupReferenes); // var ItemGroupForCompile = proj_Content.Elements("ItemGroup").Where(k => k.Elements("Compile").Any()).Single(); ItemGroupForCompile.RemoveAll(); // new operator is the new call opcode? :) var builder = new StockUltraApplicationBuilder(AddFile, this, ItemGroupForCompile, StartupType => { proj_Content.Elements("PropertyGroup").Elements("StartupObject").ReplaceContentWith( StartupType.FullName ); } ); // The default XML namespace of the project must be the MSBuild XML namespace. // If the project is authored in the MSBuild 2003 format, // please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" // to the <Project> element. // If the project has been authored in the old 1.0 or 1.2 format, // please convert it to MSBuild 2003 format. var fproj = new SolutionFile { Name = SolutionProjectFileName, Context = this }; fproj.WriteXElement( XElement.Parse( proj_Content.ToString().Replace( // dirty little hack // http://stackoverflow.com/questions/461251/add-xml-namespace-attribute-to-3rd-party-xml "<Project ToolsVersion=\"3.5\" DefaultTargets=\"Build\">", "<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" >" ) ) ); AddFile(fproj); #endregion }
public StudioView(Action<IHTMLElement, Action<ISaveAction>> AddSaveButton = null) { Content.style.position = IStyle.PositionEnum.absolute; Content.style.left = "0px"; Content.style.right = "0px"; Content.style.top = "0px"; Content.style.bottom = "0px"; new TwentyTenWorkspace().ToBackground(Content.style, true); var WorkspaceHeaderTab0 = new IHTMLDiv().With( div => { div.style.position = IStyle.PositionEnum.absolute; div.style.top = "0px"; div.style.left = "0px"; div.style.width = "14em"; div.style.height = "6em"; div.style.padding = "0.5em"; new Glow1().ToBackground(div.style, false); } ).AttachTo(Content); var WorkspaceHeaderTab1 = new IHTMLDiv().With( div => { div.style.position = IStyle.PositionEnum.absolute; div.style.top = "0px"; div.style.left = "14em"; div.style.width = "20em"; div.style.height = "6em"; div.style.padding = "0.5em"; new Glow1().ToBackground(div.style, false); } ).AttachTo(Content); var WorkspaceHeaderTab2 = new IHTMLDiv().With( div => { div.style.position = IStyle.PositionEnum.absolute; div.style.top = "0px"; div.style.left = "34em"; div.style.right = "6em"; div.style.height = "6em"; div.style.padding = "0.5em"; new Glow1().ToBackground(div.style, false); } ).AttachTo(Content); var WorkspaceHeaderTab7 = new IHTMLDiv().With( div => { div.style.position = IStyle.PositionEnum.absolute; div.style.top = "0px"; div.style.width = "6em"; div.style.right = "0px"; div.style.height = "6em"; //div.style.padding = "0.5em"; new Glow1().ToBackground(div.style, false); } ).AttachTo(Content); var WorkspaceHeaderTab0Text = default(IHTMLSpan); new DownloadSDK { }.AttachTo( new IHTMLAnchor { title = "Download JSC SDK!", href = "http://download.jsc-solutions.net" }.AttachTo(WorkspaceHeaderTab7) ); @"studio.jsc-solutions.net".ToDocumentTitle().With( title => { WorkspaceHeaderTab0Text = new IHTMLSpan { innerText = title }; WorkspaceHeaderTab0Text.AttachTo(WorkspaceHeaderTab0); //WorkspaceHeaderTab0Text.style.SetLocation(16, 8); WorkspaceHeaderTab0Text.style.fontFamily = IStyle.FontFamilyEnum.Tahoma; WorkspaceHeaderTab0Text.style.color = Color.White; WorkspaceHeaderTab0Text.style.display = IStyle.DisplayEnum.block; // http://www.quirksmode.org/css/textshadow.html WorkspaceHeaderTab0Text.style.textShadow = "#808080 4px 2px 2px"; } ); if (AddSaveButton != null) AddSaveButton(WorkspaceHeaderTab0Text, i => Save = i); // em + px :) var Workspace0 = new IHTMLDiv().With( div => { div.style.position = IStyle.PositionEnum.absolute; div.style.left = "0px"; div.style.right = "0px"; div.style.bottom = "0px"; div.style.top = "6em"; } ).AttachTo(Content); // workspace contains the split views var Workspace = new IHTMLDiv().With( div => { div.style.position = IStyle.PositionEnum.absolute; div.style.left = "6px"; div.style.right = "6px"; div.style.bottom = "6px"; div.style.top = "6px"; } ).AttachTo(Workspace0); // in this project we wont be having toolbox or toolbar yet Action<HorizontalSplit> ApplyStyle = t => { t.Split.Splitter.style.backgroundColor = Color.None; t.SplitImageContainer.Orphanize(); t.SplitArea.Target.style.borderLeft = "0"; t.SplitArea.Target.style.borderRight = "0"; t.SplitArea.Target.style.width = "6px"; t.SplitArea.Target.style.Opacity = 0.7; // should we obselete JSColor already? t.SelectionColor = JSColor.Black; }; var EditorTreeSplit = new HorizontalSplit { Minimum = 0, Maximum = 1, Value = 0.7, }; EditorTreeSplit.With(ApplyStyle); EditorTreeSplit.Split.Splitter.style.backgroundColor = Color.None; EditorTreeSplit.Container.AttachTo(Workspace); var Split = new HorizontalSplit { Minimum = 0, Maximum = 1, Value = 0.3, }; Split.With(ApplyStyle); Split.Split.Splitter.style.backgroundColor = Color.None; EditorTreeSplit.LeftContainer = Split.Container; var SolutionToolbox = new SolutionDockWindowPage(); SolutionToolbox.HeaderText.innerText = "Toolbox"; SolutionToolbox.Content.style.backgroundColor = Color.White; SolutionToolbox.Content.style.padding = "2px"; SolutionToolbox.Content.style.overflow = IStyle.OverflowEnum.auto; SolutionToolbox.Content.Clear(); var vv = new SolutionToolboxListView(); vv.Container.style.color = Color.Black; //vv.Container.AttachTo(SolutionToolbox.Content); var items = new StockToolboxTabsForHTMLDocument(); // jsc market components vv.Add( new SolutionToolboxListViewTab { DataType = "DataTable", Name = "DataTable", Title = "DataTable", Text = "DataTable", Icon = new DataTableImage() } ); vv.Add( new SolutionToolboxListViewTab { DataType = "SpiralDataType", Name = "Spiral1", Title = "Spiral", Text = "Spiral", Icon = new Spiral() } ); // can we drag this into // code ? // msvs gets the image link //http://192.168.43.252:11924/assets/ScriptCoreLib.Ultra.Components/StockToolboxImageTransparent64.png?data-jsc-type=DAETruck vv.Add( new SolutionToolboxListViewTab { DataType = "DAETruck", Name = "DAETruck", Title = "DAETruck", Text = "DAETruck", Icon = new DAETruck() } ); vv.Add( new SolutionToolboxListViewTab { DataType = "WebGLEarthByBjorn", Name = "WebGLEarthByBjorn", Title = "WebGLEarthByBjorn", Text = "WebGLEarthByBjorn", Icon = new WebGLEarthByBjorn() } ); items.WithEach(vv.Add); var Viewer = new SolutionDocumentViewer(); SolutionDocumentViewerTab File7Tab = "Design/App.htm"; Viewer.Add(File7Tab); #region OutputFile var OutputFile = new SolutionFile(); var OutputFileViewer = new SolutionFileView(); // fullscreen! :) OutputFileViewer.Container.style.height = "100%"; OutputFile.IndentStack.Push( delegate { OutputFile.Write(SolutionFileTextFragment.Comment, "" + DateTime.Now); OutputFile.WriteSpace(); } ); Action<string> OutputWriteLine = n => { // Would we want to rewire System.Out? Console.WriteLine? OutputFile.WriteIndent(); OutputFile.WriteLine(n); // we could have a resume feature? now we just go and clear... OutputFileViewer.File = OutputFile; }; OutputWriteLine("studio.jsc-solutions.net ready!"); #endregion SolutionDocumentViewerTab OutputTab = "Output"; Viewer.Add(OutputTab); OutputTab.TabElement.style.Float = IStyle.FloatEnum.right; SolutionDocumentViewerTab AboutTab = "Project"; Viewer.Add(AboutTab); AboutTab.TabElement.style.Float = IStyle.FloatEnum.right; var CurrentDesigner = new SolutionFileDesigner(); var HTMLDesigner = new SolutionFileDesignerHTMLElementTabs(); CurrentDesigner.Add(HTMLDesigner); // undoable? var sln = new SolutionBuilder(); #region CodeSourceA var CodeSourceATab = new SolutionFileDesignerTab { Image = new RTA_mode_html(), Text = "Generated Code" }; var CodeSourceAView = new SolutionFileView(); CodeSourceAView.Container.style.position = IStyle.PositionEnum.absolute; CodeSourceAView.Container.style.left = "0px"; CodeSourceAView.Container.style.right = "0px"; CodeSourceAView.Container.style.top = "0px"; CodeSourceAView.Container.style.bottom = "0px"; CodeSourceAView.Container.style.display = IStyle.DisplayEnum.none; CodeSourceAView.Container.AttachTo(CurrentDesigner.Content); CodeSourceATab.Deactivated += delegate { CodeSourceAView.Container.style.display = IStyle.DisplayEnum.none; }; CodeSourceATab.Activated += delegate { HTMLDesigner.HTMLDesignerContent.WhenContentReady( body => { var CodeSourceFile = new SolutionFile { Name = "Default.htm" }; var Type = new SolutionProjectLanguageType { Comments = new SolutionFileComment[] { "This type was generated from the HTML file." }, Namespace = sln.Name + ".HTML.Pages", Name = "IDefaultPage", IsInterface = true, }; (from n in body.AsXElement().DescendantsAndSelf() let id = n.Attribute("id") where id != null select new { n, id } ).WithEach( k => { Type.Properties.Add( new KnownStockTypes.ScriptCoreLib.JavaScript.DOM.HTML.IHTMLElement().ToAutoProperty(k.id.Value) ); } ); sln.Language.WriteType(CodeSourceFile, Type, null); CodeSourceAView.File = CodeSourceFile; CodeSourceAView.Container.style.display = IStyle.DisplayEnum.empty; } ); }; #endregion #region CodeSourceB var CodeSourceBTab = new SolutionFileDesignerTab { Image = new RTA_mode_html(), // all source code, not just html? Text = "Source" }; var CodeSourceBView = new SolutionFileView(); CodeSourceBView.Container.style.position = IStyle.PositionEnum.absolute; CodeSourceBView.Container.style.left = "0px"; CodeSourceBView.Container.style.right = "0px"; CodeSourceBView.Container.style.top = "0px"; CodeSourceBView.Container.style.bottom = "0px"; CodeSourceBView.Container.style.display = IStyle.DisplayEnum.none; CodeSourceBView.Container.AttachTo(CurrentDesigner.Content); CodeSourceBTab.Deactivated += delegate { CodeSourceBView.Container.style.display = IStyle.DisplayEnum.none; }; CodeSourceBTab.Activated += delegate { CodeSourceBView.Container.style.display = IStyle.DisplayEnum.empty; }; #endregion #region CodeSourceFormsDesignerTab var CodeSourceFormsDesignerTab = new SolutionFileDesignerTab { Image = new RTA_mode_design(), // all source code, not just html? Text = "Designer" }; var CodeSourceFormsDesignerTabView = new SolutionFileView(); CodeSourceFormsDesignerTabView.Container.style.With( style => { style.position = IStyle.PositionEnum.absolute; style.left = "0px"; style.right = "0px"; style.top = "0px"; style.bottom = "0px"; style.display = IStyle.DisplayEnum.none; } ); new IHTMLDiv().With( div => { div.style.position = IStyle.PositionEnum.absolute; div.style.left = "16px"; div.style.top = "16px"; div.style.width = "400px"; div.style.height = "300px"; div.style.backgroundColor = Color.FromGray(0xe0); div.style.border = "1px solid gray"; div.AttachTo(CodeSourceFormsDesignerTabView.Container); } ); CodeSourceFormsDesignerTabView.Container.AttachTo(CurrentDesigner.Content); CodeSourceFormsDesignerTab.Deactivated += delegate { CodeSourceFormsDesignerTabView.Container.style.display = IStyle.DisplayEnum.none; }; CodeSourceFormsDesignerTab.Activated += delegate { CodeSourceFormsDesignerTabView.Container.style.display = IStyle.DisplayEnum.empty; }; #endregion CurrentDesigner.Add(CodeSourceFormsDesignerTab); CurrentDesigner.Add(CodeSourceBTab); CurrentDesigner.Add(CodeSourceATab); var wLeftScrollable = new System.Windows.Forms.Form { BackColor = global::System.Drawing.Color.White, Text = "Toolbox", ControlBox = false, ShowIcon = false, AutoScroll = true }; vv.Container.AttachTo( wLeftScrollable.GetHTMLTargetContainer() ); //wLeftScrollable.Show(); Split.Split.LeftScrollable.style.zIndex = 0; wLeftScrollable.AttachFormTo(Split.Split.LeftScrollable); //wLeftScrollable.PopupInsteadOfClosing(); //Split.Split.LeftScrollable = (IHTMLDiv)(object)SolutionToolbox.body; Split.Split.RightScrollable = Viewer.Container; // ... #region dynamic content Func<IEnumerable<XElement>> GetPages = delegate { return from n in sln.ApplicationPage.DescendantsAndSelf() let type = n.Attribute(SolutionBuilderInteractive.DataTypeAttribute) where type != null let id = n.Attribute("id") where id != null select n; }; sln.Interactive.GenerateApplicationExpressions += Add => { // page.PageContainer.ReplaceWith( GetPages().WithEach( k => { var id = k.Attribute("id").Value; if (id == "Page1") { Add( new StockReplaceWithNewPageExpression(id) ); } if (id == "UserControl1") { Add( new StockReplaceWithNewUserControlExpression(sln.Name + ".Components", id) ); } if (id == "Applet1") { Add( new StockReplaceWithNewAppletExpression(sln.Name + ".Components", id) ); } if (id == "Sprite1") { Add( new StockReplaceWithNewSpriteExpression(sln.Name + ".Components", id) ); } if (id == "AppletUserControl1") { Add( new StockReplaceWithNewAppletExpression(sln.Name + ".Components", id) ); } } ); }; sln.Interactive.GenerateHTMLFiles += Add => { GetPages().WithEach( k => { var id = k.Attribute("id").Value; if (id == "Page1") { var __Content = new XElement(StockPageDefault.Page); __Content.Element("head").Element("title").Value = id; Add( new SolutionProjectHTMLFile { Name = "Design/" + id + ".htm", Content = __Content } ); } } ); }; sln.Interactive.GenerateTypes += Add => { GetPages().WithEach( k => { var id = k.Attribute("id").Value; if (id == "UserControl1") { Add( new StockUserControlType(sln.Name + ".Components", id) ); } if (id == "Applet1") { Add( new StockAppletType(sln.Name + ".Components", id) ); } if (id == "Sprite1") { Add( new StockSpriteType(sln.Name + ".Components", id) ); } if (id == "AppletUserControl1") { var UserControl2 = new StockUserControlType(sln.Name + ".Components", "UserControl2"); Add( UserControl2 ); Add( new StockUserControlAppletType(sln.Name + ".Components", id, UserControl2) ); } } ); }; #endregion var _Solution = new TreeNode(VistaTreeNodePage.Create); var _Project = _Solution.Add(); var About = new About(); #region UpdateFile1Text Action UpdateFile1Text = delegate { if (CodeSourceBView.File != null) { File7Tab.Text = CodeSourceBView.File.Name.SkipUntilLastIfAny("/"); } else { File7Tab.Text = sln.Name; } }; #endregion #region Update Action Update = delegate { sln.Name = About.ProjectName.value; UpdateFile1Text(); _Project.Clear(); UpdateTree(sln, CodeSourceBView, _Solution, _Project); }; #endregion var PreviousVersion = default(string); #region HTMLDesigner.HTMLDesignerContent HTMLDesigner.HTMLDesignerContent.WhenContentReady( body => { if (PreviousVersion == null) { var x = new XElement(body.AsXElement()); var y = x.ToString(); PreviousVersion = y; } Action<bool> HTMLDesignerContentCheck = DoUpdate => { var x = new XElement(body.AsXElement()); var y = x.ToString(); if (PreviousVersion != y) { PreviousVersion = y; sln.ApplicationPage = x; // allow any blur causing action to complete first // we get reselected for some odd reason, why? new Timer( delegate { if (DoUpdate) { OutputWriteLine("Designer has caused an update."); Update(); } else { OutputWriteLine("Designer will cause an update."); } } ).StartTimeout(700); } }; var HTMLDesignerContentDirty = new Timer( delegate { HTMLDesignerContentCheck(false); } ); HTMLDesigner.HTMLDesignerContent.contentWindow.onfocus += delegate { OutputWriteLine("Designer activated."); //"focus".ToDocumentTitle(); //HTMLDesignerContentDirty.StartInterval(700); }; HTMLDesigner.HTMLDesignerContent.contentWindow.onblur += delegate { //HTMLDesignerContentDirty.Stop(); OutputWriteLine("Designer deactivated."); //"blur".ToDocumentTitle(); HTMLDesignerContentCheck(true); }; } ); #endregion #region CodeSourceBView.FileChanged CodeSourceBView.FileChanged += delegate { UpdateFile1Text(); OutputWriteLine("Select: " + CodeSourceBView.File.Name); CodeSourceFormsDesignerTab.TabElement.Hide(); // hack :) if (CodeSourceBView.File.Name.EndsWith("/App.htm")) { // currently we only have one element :) HTMLDesigner.HTMLDesignerTab.RaiseActivated(); HTMLDesigner.HTMLDesignerTab.TabElement.style.display = IStyle.DisplayEnum.inline_block; HTMLDesigner.HTMLSourceTab.TabElement.style.display = IStyle.DisplayEnum.none; CodeSourceATab.TabElement.style.display = IStyle.DisplayEnum.inline_block; CodeSourceBTab.TabElement.style.display = IStyle.DisplayEnum.inline_block; HTMLDesigner.HTMLDesignerContent.WhenContentReady( body => { HTMLDesigner.HTMLDesignerContent.contentWindow.focus(); } ); // show the design/source buttons } else if (CodeSourceBView.File.Name.EndsWith(".sln")) { AboutTab.Activate(); } else if (CodeSourceBView.File.Name.EndsWith(sln.Language.ProjectFileExtension)) { AboutTab.Activate(); } else if (CodeSourceBView.File.Name.EndsWith(sln.Language.CodeFileExtension)) { // show type outline / member CodeSourceBTab.RaiseActivated(); HTMLDesigner.HTMLDesignerTab.TabElement.style.display = IStyle.DisplayEnum.none; HTMLDesigner.HTMLSourceTab.TabElement.style.display = IStyle.DisplayEnum.none; CodeSourceATab.TabElement.style.display = IStyle.DisplayEnum.none; CodeSourceBTab.TabElement.style.display = IStyle.DisplayEnum.inline_block; CodeSourceBView.File.ContextType.BaseType.With( BaseType => { if (BaseType is KnownStockTypes.System.Windows.Forms.UserControl) { CodeSourceFormsDesignerTab.TabElement.Show(); CodeSourceFormsDesignerTab.RaiseActivated(); } if (BaseType is KnownStockTypes.System.ComponentModel.Component) { CodeSourceFormsDesignerTab.TabElement.Show(); CodeSourceFormsDesignerTab.RaiseActivated(); } } ); } }; #endregion //AddSaveButton(WorkspaceHeader, i => Save = i); About.ProjectName.value = sln.Name; About.ProjectName.onchange += delegate { OutputWriteLine("Project name has changed."); Update(); }; Viewer.Content.Clear(); Viewer.Content.Add(About.Container); Viewer.Content.Add(CurrentDesigner.Container); Viewer.Content.Add(OutputFileViewer.Container); AboutTab.WhenActivated(About.Container); File7Tab.WhenActivated(CurrentDesigner.Container); OutputTab.WhenActivated(OutputFileViewer.Container); Viewer.First().Activate(); //var SolutionExplorer = new SolutionDockWindowPage(); //SolutionExplorer.HeaderText.innerText = "Solution Explorer"; //SolutionExplorer.Content.style.backgroundColor = Color.White; //SolutionExplorer.Content.style.padding = "2px"; //SolutionExplorer.Content.ReplaceContentWith(_Solution.Container); var fSolutionExplorer = new System.Windows.Forms.Form { BackColor = global::System.Drawing.Color.White, Text = "Solution Explorer", ControlBox = false, ShowIcon = false }; EditorTreeSplit.Split.RightScrollable.style.zIndex = 0; EditorTreeSplit.Split.RightScrollable.style.position = IStyle.PositionEnum.relative; fSolutionExplorer.AttachFormTo(EditorTreeSplit.Split.RightScrollable); _Solution.Container.AttachTo(fSolutionExplorer.GetHTMLTargetContainer()); _Solution.Container.style.overflow = IStyle.OverflowEnum.auto; _Solution.Container.style.height = "100%"; _Solution.Container.style.backgroundColor = Color.White; //EditorTreeSplit.Split.RightContainer = (IHTMLDiv)(object)SolutionExplorer.Container; EditorTreeSplit.Container.AttachTo(Workspace); //CurrentDesigner.First().RaiseActivated(); Update(); #region CreateLanguageButton Action<IHTMLImage, string, SolutionProjectLanguage, string> CreateLanguageButton = (Icon, Text, Language, Name) => { var span = new IHTMLSpan(Text); span.style.marginLeft = "0.7em"; span.style.marginRight = "0.7em"; new IHTMLButton { Icon /*, span */ }.AttachTo(WorkspaceHeaderTab1).With( btn => { btn.onclick += delegate { sln.Language = Language; sln.Name = Language.LanguageSpelledName.Replace(" ", "") + "Project1"; Update(); }; //btn.style.display = IStyle.DisplayEnum.block; } ); }; #endregion CreateLanguageButton(new VisualCSharpProject(), "C#", KnownLanguages.VisualCSharp, "VisualCSharpProject1"); CreateLanguageButton(new VisualFSharpProject(), "F#", KnownLanguages.VisualFSharp, "VisualFSharpProject1"); CreateLanguageButton(new VisualBasicProject(), "Visual Basic", KnownLanguages.VisualBasic, "VisualBasicProject1"); var ListOfCreateProjectTypeButton = new List<IHTMLButton>(); #region CreateProjectTypeButton Action<string, Action> CreateProjectTypeButton = (Text, Handler) => { var span = new IHTMLSpan(Text); span.style.marginLeft = "0.7em"; span.style.marginRight = "0.7em"; new IHTMLButton { span }.AttachTo(WorkspaceHeaderTab2).With( btn => { ListOfCreateProjectTypeButton.Add(btn); btn.onclick += delegate { ListOfCreateProjectTypeButton.WithEach(n => n.disabled = true); Handler(); }; //btn.style.display = IStyle.DisplayEnum.block; } ); }; #endregion #region ToSpecificProjectType Action<string, Action> ToSpecificProjectType = (Text, Handler) => { CreateProjectTypeButton(Text, delegate { Handler(); HTMLDesigner.HTMLDesignerContent.WhenDocumentReady( document => { document.WithContent(sln.ApplicationPage); // we should now also lock the designer! document.DesignMode = false; } ); Update(); } ); }; #endregion #region Avalon, Forms ToSpecificProjectType("Avalon App", delegate { sln.WithCanvas(); } ); ToSpecificProjectType("Avalon Flash App", delegate { sln.WithCanvasAdobeFlash(); } ); ToSpecificProjectType("Forms App", delegate { sln.WithForms(); } ); ToSpecificProjectType("Forms Applet App", delegate { sln.WithFormsApplet(); } ); #endregion ToSpecificProjectType("Flash App", delegate { sln.WithAdobeFlash(); } ); ToSpecificProjectType("Flash Camera App", delegate { sln.WithAdobeFlashCamera(); } ); ToSpecificProjectType("Flash Flare3D App", delegate { sln.WithAdobeFlashWithFlare3D(); } ); ToSpecificProjectType("Applet App", delegate { sln.WithJavaApplet(); } ); }
abstract public void WriteNamespace(SolutionFile File, string Namespace, Action Body);
abstract public void WriteSingleIndent(SolutionFile File);
abstract public void WriteXMLCommentLine(SolutionFile File, string Text);
abstract public void WritePseudoExpression(SolutionFile File, object Parameter, SolutionBuilder Context);
private void RenderWriteHistory(Dictionary<SolutionFileTextFragment, Color> Lookup, SolutionFile f, IHTMLElement Container) { Func<SolutionFileTextFragment, Color> LookupOrDefault = ff => { if (this.Colors.ContainsKey(ff)) return this.Colors[ff]; return this.Colors[SolutionFileTextFragment.None]; }; var Content = new IHTMLDiv().AttachTo(Container); Content.style.position = IStyle.PositionEnum.relative; var ViewBackground = new IHTMLDiv().AttachTo(Content); ViewBackground.style.position = IStyle.PositionEnum.absolute; ViewBackground.style.left = "0px"; ViewBackground.style.top = "0px"; ViewBackground.style.width = "4em"; ViewBackground.style.borderRight = "1px dotted gray"; ViewBackground.style.paddingRight = "0.5em"; var ViewTrap = new IHTMLDiv().AttachTo(Content); ViewTrap.style.position = IStyle.PositionEnum.absolute; ViewTrap.style.left = "0px"; ViewTrap.style.top = "0px"; ViewTrap.style.right = "0px"; ViewTrap.style.bottom = "0px"; //ViewTrap.style.backgroundColor = Color.White; var ViewTrapContainer = new IHTMLDiv().AttachTo(ViewTrap); ViewTrapContainer.style.cursor = IStyle.CursorEnum.text; ViewTrapContainer.style.position = IStyle.PositionEnum.relative; ViewTrapContainer.style.paddingLeft = "5em"; var View = new IHTMLDiv().AttachTo(ViewTrapContainer); var ContentHeightDummy = new IHTMLDiv().AttachTo(Content); var RegionStack = new Stack<List<Action<bool>>>(); var RegionGlobal = new List<Action<bool>>(); RegionStack.Push(RegionGlobal); var Lines = new List<IHTMLDiv>(); var CurrentLineDirty = false; var CurrentLine = default(IHTMLDiv); var CurrentLineContent = default(IHTMLDiv); Action NextLine = delegate { CurrentLineDirty = false; var c = new IHTMLDiv(); var cc = new IHTMLDiv(); var cb = new IHTMLDiv(); CurrentLine = c.AttachTo(View); CurrentLineContent = cc.AttachTo(c); var CurrentRegion = RegionStack.Peek(); RegionStack.WithEach( k => { k.Add( IsActive => { // should we react when in a global region if (k == RegionGlobal) return; if (IsActive) { cc.style.backgroundColor = Color.FromGray(0xf9); cb.style.backgroundColor = Color.FromGray(0xf9); } else { cc.style.backgroundColor = Color.None; cb.style.backgroundColor = Color.None; } } ); } ); CurrentLine.onmouseover += delegate { CurrentRegion.Invoke(true); cc.style.backgroundColor = Color.FromGray(0xf0); cb.style.backgroundColor = Color.FromGray(0xf0); }; CurrentLine.onmouseout += delegate { CurrentRegion.Invoke(false); cc.style.backgroundColor = Color.None; cb.style.backgroundColor = Color.None; }; Lines.Add(CurrentLine); //CurrentLineContent.style.marginLeft = "5em"; var BCurrentLine = cb.AttachTo(ViewBackground); BCurrentLine.style.textAlign = IStyle.TextAlignEnum.right; var span = new IHTMLCode { innerText = "" + Lines.Count }; span.style.color = Lookup[SolutionFileTextFragment.Type]; span.AttachTo(BCurrentLine); //Content.style.height = Lines.Count + "em"; new IHTMLDiv { new IHTMLCode { innerText = Environment.NewLine } }.AttachTo(ContentHeightDummy); }; foreach (var item in f.WriteHistory.ToArray()) { if (item is SolutionFileWriteArguments.BeginRegion) { RegionStack.Push(new List<Action<bool>>()); } if (item is SolutionFileWriteArguments.EndRegion) { RegionStack.Pop(); } if (CurrentLine == null) NextLine(); var innerText = item.Text; innerText = innerText.TakeUntilLastIfAny(Environment.NewLine); if (!string.IsNullOrEmpty(innerText)) { var span = new IHTMLCode { innerText = innerText }; if (item.Fragment == SolutionFileTextFragment.Indent) { span.style.width = "2em"; span.style.display = IStyle.DisplayEnum.inline_block; if (CurrentLineDirty) span.style.borderLeft = "1px dotted #afafaf"; } span.style.color = LookupOrDefault(item.Fragment); CurrentLineDirty = true; span.AttachTo(CurrentLineContent); if (item.Tag != null) { span.style.cursor = ScriptCoreLib.JavaScript.DOM.IStyle.CursorEnum.pointer; span.onmouseover += delegate { span.style.textDecoration = "underline"; }; span.onmouseout += delegate { span.style.textDecoration = ""; }; var Type = item.Tag as SolutionProjectLanguageType; if (Type != null) { span.title = Type.FullName; } var Method = item.Tag as SolutionProjectLanguageMethod; if (Method != null) { span.title = Method.Name; } var Uri = item.Tag as Uri; if (Uri != null) { var a = new IHTMLAnchor(); a.style.color = LookupOrDefault(item.Fragment); a.href = Uri.ToString(); a.target = "_blank"; a.Add(span); a.AttachTo(CurrentLineContent); a.onclick += e => { // https://sites.google.com/a/jsc-solutions.net/backlog/knowledge-base/2015/201511/20151103 e.preventDefault(); if (LinkCommentClick != null) LinkCommentClick(Uri); }; } } } if (item.Text.EndsWith(Environment.NewLine)) { if (!CurrentLineDirty) { var span = new IHTMLCode { innerText = " " }; span.AttachTo(CurrentLineContent); } CurrentLine = null; } } }
abstract public void WriteType(SolutionFile File, SolutionProjectLanguageType Type, SolutionBuilder Context);
abstract public void WriteTypeName(SolutionFile File, SolutionProjectLanguageType Type);
abstract public void WriteMethodBody(SolutionFile File, SolutionProjectLanguageCode Code, SolutionBuilder Context);
abstract public void WriteMethod(SolutionFile File, SolutionProjectLanguageMethod Method, SolutionBuilder Context);
/// <summary> /// This is a javascript application. /// </summary> /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param> public Application(IDefaultPage page) { new JSCSolutionsNETImage().ToBackground(page.Item1.style, false); new JSCSolutionsNETImage().ToBackground(page.Item2.style, false); // Update document title // http://do.jsc-solutions.net/Update-document-title @"Hello world".ToDocumentTitle(); // Send xml to server // http://do.jsc-solutions.net/Send-xml-to-server var v = new SolutionFileView(); var f = new SolutionFile(); f.WriteHTMLElement(StockPageDefault.Element); v.File = f; var Container = new IHTMLDiv(); Container.style.position = IStyle.PositionEnum.relative; Container.style.display = IStyle.DisplayEnum.inline_block; Container.style.width = "600px"; Container.style.height = "400px"; Container.style.border = "1px solid gray"; var ToolbarHeight = "1.3em"; var Content = new IHTMLDiv().AttachTo(Container); Content.style.position = IStyle.PositionEnum.absolute; Content.style.left = "0px"; Content.style.top = "0px"; Content.style.right = "0px"; Content.style.bottom = ToolbarHeight; var Toolbar = new IHTMLDiv().AttachTo(Container); Toolbar.style.backgroundColor = Color.FromGray(0xef); Toolbar.style.position = IStyle.PositionEnum.absolute; Toolbar.style.left = "0px"; Toolbar.style.height = ToolbarHeight; Toolbar.style.right = "0px"; Toolbar.style.bottom = "0px"; Action<IHTMLImage, string, Action> AddToolbarButton = (img, text, handler) => { var span = new IHTMLSpan { innerText = text }; span.style.paddingLeft = "1.5em"; span.style.paddingRight = "0.3em"; var a = new IHTMLAnchor { img, span }; img.style.verticalAlign = "middle"; img.border = 0; img.style.position = IStyle.PositionEnum.absolute; a.style.backgroundColor = Color.FromGray(0xef); a.style.color = Color.Black; a.style.textDecoration = "none"; a.style.fontFamily = IStyle.FontFamilyEnum.Tahoma; a.href = "javascript: void(0);"; a.onclick += delegate { handler(); }; a.style.display = IStyle.DisplayEnum.inline_block; a.style.height = "100%"; a.onmousemove += delegate { a.style.backgroundColor = Color.FromGray(0xff); }; a.onmouseout += delegate { a.style.backgroundColor = Color.FromGray(0xef); }; Toolbar.Add(a); }; v.Container.style.height = "100%"; v.Container.AttachTo(Content); Content.Add(v.Container); var i = CreateEditor(); i.AttachTo(Content); var ii = new IHTMLPre().AttachTo(Content); ii.style.position = IStyle.PositionEnum.absolute; ii.style.left = "0px"; ii.style.top = "0px"; ii.style.right = "0px"; ii.style.bottom = "0px"; ii.style.overflow = IStyle.OverflowEnum.auto; ii.style.padding = "0px"; ii.style.margin = "0px"; ii.style.whiteSpace = IStyle.WhiteSpaceEnum.normal; v.Container.style.display = IStyle.DisplayEnum.none; i.style.display = IStyle.DisplayEnum.empty; ii.style.display = IStyle.DisplayEnum.none; AddToolbarButton(new RTA_mode_design(), "Design", delegate { v.Container.style.display = IStyle.DisplayEnum.none; ii.style.display = IStyle.DisplayEnum.none; i.style.display = IStyle.DisplayEnum.empty; } ); AddToolbarButton(new RTA_mode_html(), "Source", delegate { v.Container.style.display = IStyle.DisplayEnum.empty; ii.style.display = IStyle.DisplayEnum.none; i.style.display = IStyle.DisplayEnum.none; f.Clear(); i.WhenContentReady( body => { f.WriteHTMLElement(body.AsXElement()); // update v.File = f; } ); } ); AddToolbarButton(new RTA_mode_html(), "Source raw", delegate { v.Container.style.display = IStyle.DisplayEnum.none; ii.style.display = IStyle.DisplayEnum.empty; i.style.display = IStyle.DisplayEnum.none; i.WhenContentReady( body => { ii.innerText = body.AsXElement().ToString(); } ); } ); page.PageContainer.Add(Container); new ApplicationWebService().WebMethod2( new XElement(@"Document", new object[] { new XElement(@"Data", new object[] { @"Hello world" } ), new XElement(@"Client", new object[] { @"Unchanged text" } ) } ), delegate(XElement doc) { // Show server message as document title // http://do.jsc-solutions.net/Show-server-message-as-document-title doc.Element(@"Data").Value.ToDocumentTitle(); } ); }
abstract public void WritePseudoCallExpression(SolutionFile File, PseudoCallExpression Lambda, SolutionBuilder Context);
abstract public void WriteAssemblyAttribute(SolutionFile File, SolutionProjectLanguageAttribute Attribute, SolutionBuilder Context);
abstract public void WriteLinkCommentLine(SolutionFile File, Uri Link);
abstract public void WriteUsingNamespace(SolutionFile File, string item);
public static SolutionFile WriteIndent(this SolutionFile File) { File.IndentStack.Invoke(); return(File); }