Top: VB6; Bottom: C#.
Generated XAML in VS2013
WPF Xaml Authoring Code
The following is a the current gmSL scripting logic that directs the authoring for WPF Xaml files. This script file is distributed as source with the product. You make make a project-specific copy then modify and extend it according to your requirements. Coming in 1Q2018: we will be releasing .NET based API and other product changes that will allow developers to implement advanced, custom upgrades such as WPF C# (or VB.NET) rather than gmSL. Contact us to learn more.
int hasEvtHandler(int formRoot, int ctlRoot, string srcEvtName) { int evtRoot; string eventName; int eventRoot; tVbControl vbControl; if (Character.Substr(srcEvtName,0,1)== "_" && ctlRoot > Defines.OPC_MAXIMUM) { vbControl = Store.GetVector(ctlRoot); evtRoot = vbControl.nxtVector; if(evtRoot == 0) evtRoot = ctlRoot; eventName = Store.GetIdent(evtRoot) + srcEvtName; } else { eventName = srcEvtName; } eventRoot = Store.FindVector(eventName,formRoot); if(eventRoot) { return 1; } return 0; } int addPropFromEvtHandler(int formRoot, int ctlRoot, string srcEvtName, string netProp, string netPropValue) { int evtRoot; string eventName; int eventRoot; tVbControl vbControl; if (Character.Substr(srcEvtName,0,1)== "_") { vbControl = Store.GetVector(ctlRoot); evtRoot = vbControl.nxtVector; if(evtRoot == 0) evtRoot = ctlRoot; eventName = Store.GetIdent(evtRoot) + srcEvtName; } else { eventName = srcEvtName; } eventRoot = Store.FindVector(eventName,formRoot); if(eventRoot) { Write.Text(" " + netProp + "="""); Write.Text(netPropValue); Write.Character(""""); return 1; } return 0; } int addEvtHandler(int formRoot, int ctlRoot, string srcEvtName, string netEvtName) { int evtRoot; string eventName; int eventRoot; tVbControl vbControl; if (Character.Substr(srcEvtName,0,1)== "_" && ctlRoot > Defines.OPC_MAXIMUM) { vbControl = Store.GetVector(ctlRoot); evtRoot = vbControl.nxtVector; if(evtRoot == 0) evtRoot = ctlRoot; eventName = Store.GetIdent(evtRoot) + srcEvtName; } else { eventName = srcEvtName; } eventRoot = Store.FindVector(eventName,formRoot); if(eventRoot) { Write.Text(" " + netEvtName + "="""); Write.Text(Store.GetName(eventRoot)); Write.Character(""""); return 1; } return 0; } int wrtPropertyIfEqual(int ctlType, int iCode, string srcName, string EqualValue, string netName, string netValue) { string sValue = ""; sValue = getPropertyIfEqual(ctlType, iCode, srcName, EqualValue, netName, netValue); if (sValue != "") { Write.Text(sValue); return 1; } } string getPropertyIfEqual(int ctlType, int iCode, string srcName, string EqualValue, string netName, string netValue) { string sValue = ""; string mout = ""; sValue = getStringValue(ctlType,iCode,srcName,"!"); if (netName == "WindowStartupLocation") { //System.LogMessage("srcName: " + srcName + " sValue:" + sValue); } if (sValue == EqualValue) { mout = " " + netName + "=""" + netValue + """"; } return mout; } string getPropertyIfEqualAndEqual(int ctlType, int iCode, string Prop1, string Value1, string Prop2, string Value2, string netName, string netValue) { string sValue1 = ""; string sValue2 = ""; string mout = ""; sValue1 = getStringValue(ctlType,iCode,Prop1,"!"); sValue2 = getStringValue(ctlType,iCode,Prop2,"!"); if (netName == "IsEditable") { //System.LogMessage("srcName: " + srcName + " sValue:" + sValue); } if (sValue1 == Value1 && sValue2 == Value2) { mout = " " + netName + "=""" + netValue + """"; } return mout; } string getStringValue(int ctlType, int iCode, string srcName, string nullValue) { int iProp; string sValue; if (srcName != "!") iProp = ControlData.FindProperty(ctlType,srcName,iCode); if(iProp) { sValue = ControlData.GetProperty(iProp); if (ctlType == OPC.FNT && srcName =="Size") sValue = ControlData.GetFontSize(iProp); } else { iProp = 1; sValue = nullValue; } return sValue; } string getStringProperty(int ctlType, int iCode, string srcName, string netName, string defaultValue) { string sValue = ""; string mout = ""; if (netName == "!") netName = srcName; sValue = getStringValue(ctlType,iCode,srcName,"!"); if (sValue == "!" || sValue == "") { sValue = defaultValue; } if (sValue != "!") { mout = " " + netName + "=""" + sValue + """"; } return mout; } int wrtIsCancelButton(int formRoot, int ctlRoot, string netName, string netValue) { int iCode; int iProp; int iValue; string sValue; int ctlType; int frmRoot; frmRoot = Store.GetFirst(formRoot); iCode = ControlData.LoadCode(frmRoot); ctlType = Store.GetObjectType(frmRoot); if(ctlType != OPC.FOR) return 0; iProp = ControlData.FindProperty(ctlType,"CancelButton",iCode); if (iProp) { //Need to get addr of CancelButton //If addr matches ctlRoot then autor netName = netValue, can be hard coded for this methond IsCancel = "True" //this needs repeated for acceptbutton } //System.Logmessage("iProp " + iProp + " iValue:" + iValue + " ctlRoot:" + ctlRoot); } int wrtTextProperty(int ctlType, int iCode, string srcName, string netName, string defaultValue) { int iProp; string sValue; int opcd; int subc; tCodeBlock codptr; int pcnt; //Optional netName if (netName == "!") netName = srcName; if (srcName != "!") iProp = ControlData.FindProperty(ctlType,srcName,iCode); if(iProp) { if (ctlType == OPC.FNT && srcName =="Size") sValue = ControlData.GetFontSize(iProp); else sValue = ControlData.GetProperty(iProp); } else { if (defaultValue != "!") { iProp = 1; sValue = defaultValue; } } if (iProp) { if (Character.FindFirst(sValue,0,"FrxData") != 1) { sValue = XAMLEncode(sValue); Write.Text(" " + netName + "="""); Write.Text(sValue); Write.Text(""""); } else { //Get code info, dig into frxinfo block //codptr = Opcode.GetCode(); //pcnt = Opcode.GetLength(); //opcd = Opcode.GetOperation(codptr,iProp,subc); //string temp; //temp = Store.GetName(subc-54); //Need to get the text next. Maybe the size of an frxdata block. //System.LogMessage(" ip:" + iProp + " ic: " + iCode + " opcd:" + opcd + " subc:" + subc + " " + temp); //Opcode.DumpCode(iProp-10,iProp+10); } } return iProp; } int wrtStringProperty(int ctlType, int iCode, string srcName, string netName, string defaultValue) { int iProp; string sValue; //Optional netName if (netName == "!") netName = srcName; if (srcName != "!") iProp = ControlData.FindProperty(ctlType,srcName,iCode); if(iProp) { if (ctlType == OPC.FNT && srcName =="Size") sValue = ControlData.GetFontSize(iProp); else sValue = ControlData.GetProperty(iProp); } else { if (defaultValue != "!") { iProp = 1; sValue = defaultValue; } } if (iProp) Write.Text(" " + netName + "=""" + sValue + """"); return iProp; } int wrtPictureProperty(int formRoot, int ctlType, int iCode, string srcName, string netName, string defaultValue) { int iProp; string sValue; iProp = ControlData.FindProperty(ctlType,srcName,iCode); if (iProp) { string picaddr = ControlData.GetProperty(iProp); string frmName = Symbol.ClassName(formRoot); sValue = "Images/" + frmName + "." + picaddr + "." + srcName + ".png"; } else { if (defaultValue != "!") { iProp = 1; sValue = defaultValue; } } if (iProp) Write.Text(" " + netName + "=""" + sValue + """"); return iProp; } string getColorProperty(int ctlType, int iCode, string srcName, string netName, string defaultValue) { int iProp; string sValue; if (srcName != "!") iProp = ControlData.FindProperty(ctlType,srcName,iCode); if(iProp) { sValue = ControlData.GetProperty(iProp); sValue = getColor(sValue); } else { if (defaultValue != "!") { iProp = 1; sValue = defaultValue; } } if (iProp) { return " " + netName + "=""" + sValue + """"; } else { return ""; } } int wrtColorProperty(int ctlType, int iCode, string srcName, string netName, string defaultValue) { string sValue = ""; sValue = getColorProperty(ctlType, iCode, srcName, netName, defaultValue); if (sValue != "") { Write.Text(sValue); return 1; } return 0; } int wrtIntProperty(int ctlType, int iCode, string srcName, string netName, string defaultValue, int offset) { int iProp; int iValue; string sValue; if (srcName != "!") iProp = ControlData.FindProperty(ctlType,srcName,iCode); if(iProp) { iValue = ControlData.GetValue(iProp) ; iValue = iValue - offset; if (iValue < 0) iValue = 0; sValue = iValue; } else { if (defaultValue != "!") { iProp = 1; sValue = defaultValue; } } if (iProp) Write.Text(" " + netName + "=""" + sValue + """"); return iProp; } string getIntProperty(int ctlType, int iCode, string srcName, string defaultValue, int offset) { int iProp; int iValue; string sValue; if (srcName != "!") iProp = ControlData.FindProperty(ctlType,srcName,iCode); if(iProp) { iValue = ControlData.GetValue(iProp) ; if(iValue >= offset) iValue = iValue - offset; sValue = iValue; } else { if (defaultValue != "!") { iProp = 1; sValue = defaultValue; } } return sValue; } string getEnumProperty(int ctlType, int iCode, string srcName, string netName, string defaultValue) { int iProp; int iValue; string sValue; int iPos; if (srcName != "!") iProp = ControlData.FindProperty(ctlType,srcName,iCode); if(iProp) { if (netName=="Visibility") { sValue = "Hidden"; // only have to author Visibility=Hidden; wpf default = vb6 default } else if (netName=="FlowDirection") { iValue = ControlData.GetValue(iProp); if (iValue==1) sValue = "RightToLeft"; } else { sValue = ControlData.GetProperty(iProp); } } else { if (defaultValue != "!") { iProp = 1; sValue = defaultValue; } } iPos = Character.FindFirst(sValue,0,"."); if(iPos) { int lpos = iPos; while (lpos) { iPos = lpos; lpos = Character.FindFirst(sValue, lpos, "."); if (lpos == 0) break; lpos = iPos + lpos; } sValue = Character.Remove(sValue,0,iPos); } string mout = ""; if (iProp) { mout = " " + netName + "=""" + sValue + """"; } return mout; } int wrtEnumProperty(int ctlType, int iCode, string srcName, string netName, string defaultValue) { int iProp; int iValue; string sValue; int iPos; if (srcName != "!") iProp = ControlData.FindProperty(ctlType,srcName,iCode); if(iProp) { if (netName=="Visibility") { sValue = "Hidden"; // only have to author Visibility=Hidden; wpf default = vb6 default } else if (netName=="FlowDirection") { iValue = ControlData.GetValue(iProp); if (iValue==1) sValue = "RightToLeft"; } else { sValue = ControlData.GetProperty(iProp); } } else { if (defaultValue != "!") { iProp = 1; sValue = defaultValue; } } iPos = Character.FindFirst(sValue,0,"."); if(iPos) { int lpos = iPos; while (lpos) { iPos = lpos; lpos = Character.FindFirst(sValue, lpos, "."); if (lpos == 0) break; lpos = iPos + lpos; } sValue = Character.Remove(sValue,0,iPos); } if (iProp) Write.Text(" " + netName + "=""" + sValue + """"); return iProp; } int wrtBoolProperty(int ctlType, int iCode, string srcName, string netName, string defaultValue, int TrueValue) { int iProp; int iValue; string sValue; if (srcName != "!") iProp = ControlData.FindProperty(ctlType,srcName,iCode); if(iProp) { iValue = ControlData.GetValue(iProp); if(iValue == TrueValue) sValue = "True"; } else { if (defaultValue != "!") { iProp = 1; sValue = defaultValue; } } if (iProp) Write.Text(" " + netName + "=""" + sValue + """"); return iProp; } int wrtTwipsProperty(int ctlType, int iCode, string srcName, string netName) { int iProp; int iValue; iProp = ControlData.FindProperty(ctlType,srcName,iCode); if(iProp) { iValue = ControlData.GetValue(iProp)/15; Write.Text(" " + netName + "=""" + iValue + """"); } return iProp; } string getSurfaceAttribs(int formRoot) { int iCode; int iProp; int iValue; int frmRoot; int iSize; int iSize2; string sHeight; string sWidth; string sValue; int ctlType; frmRoot = Store.GetFirst(formRoot); iCode = ControlData.LoadCode(frmRoot); ctlType = Store.GetObjectType(frmRoot); if(ctlType != OPC.FOR) return ""; sValue = ""; sValue = sValue + getColorProperty(ctlType,iCode,"BackColor", "Background", "#FFF0F0F0"); // Form sValue = sValue + getStringProperty(ctlType,iCode,"ScaleLeft","!","0"); // Form sValue = sValue + getStringProperty(ctlType,iCode,"ScaleTop","!","0"); // Form //sValue = sValue + getStringProperty(ctlType,iCode,"ScaleWidth","!","!"); // Form //sValue = sValue + getStringProperty(ctlType,iCode,"ScaleHeight","!","!"); // Form sValue = sValue + getEnumProperty(ctlType,iCode,"ScaleMode","ScaleMode","Pixels"); // Form return sValue; } string getFormAttribs(int formRoot) { int iCode; int iProp; int iValue; int frmRoot; int iSize; int iSize2; string sHeight; string sWidth; string sValue; int ctlType; frmRoot = Store.GetFirst(formRoot); iCode = ControlData.LoadCode(frmRoot); ctlType = Store.GetObjectType(frmRoot); if(ctlType != OPC.FOR) return ""; sValue = ""; iProp = ControlData.FindProperty(ctlType,"ClientHeight",iCode); iSize = ControlData.GetValue(iProp); iProp = ControlData.FindProperty(ctlType,"ClientTop",iCode); iSize2 = ControlData.GetValue(iProp); if(iProp) { iSize = iSize + iSize2; sValue = sValue + " Height=""" + iSize + """"; } iProp = ControlData.FindProperty(ctlType,"ClientWidth",iCode); iSize = ControlData.GetValue(iProp); iProp = ControlData.FindProperty(ctlType,"ClientLeft",iCode); iSize2 = ControlData.GetValue(iProp); if(iProp) { iSize = iSize + iSize2 + 5; // 5 assumes sizable borders; sValue = sValue + " Width=""" + iSize + """"; } sValue = sValue + getStringProperty(ctlType,iCode,"Caption","Title","!"); // Form sValue = sValue + getPropertyIfEqual(ctlType,iCode,"BorderStyle","System.Windows.Forms.FormBorderStyle.None","WindowStyle","None"); // Form sValue = sValue + getPropertyIfEqual(ctlType,iCode,"ControlBox","false","ResizeMode","NoResize"); // Form if (Character.FindFirst(sValue,0,"ResizeMode") == 0 && Character.FindFirst(sValue,0,"WindowStyle") == 0) { //ToolWindow lets you resize. If ControlBox is false, resize is disabled and ResizeMode=NoResize takes presidence sValue = sValue + getPropertyIfEqualAndEqual(ctlType,iCode,"MinButton","false","MaxButton","False","WindowStyle", "ToolWindow"); // Form } sValue = sValue + getPropertyIfEqual(ctlType,iCode,"ShowInTaskbar","false","ShowInTaskbar","False"); // Form //StartUpPosition sValue = sValue + getPropertyIfEqual(ctlType,iCode,"StartUpPosition","!","WindowStartupLocation","Manual"); // Form sValue = sValue + getPropertyIfEqual(ctlType,iCode,"StartUpPosition","System.Windows.Forms.FormStartPosition.CenterParent","WindowStartupLocation","CenterOwner"); // Form sValue = sValue + getPropertyIfEqual(ctlType,iCode,"StartUpPosition","System.Windows.Forms.FormStartPosition.CenterScreen","WindowStartupLocation","CenterScreen"); // Form iProp = ControlData.FindProperty(ctlType,"Icon",iCode); if (iProp) { string picaddr = ControlData.GetProperty(iProp); string frmName = Symbol.ClassName(formRoot); sValue = sValue + " Icon=" + """Images\" + frmName + "." + picaddr + ".Icon.ico"""; // " Format fix for notepad++ } return sValue; } string getColor(string vb6Color) { string cvalue; int invalid = 0; // convert 0x??BBGGRR to #SSRRGGBB if (vb6Color=="default") return "Grey"; //System color conversions //VB6 system colors: http://msdn.microsoft.com/en-us/library/aa265064%28VS.60%29.aspx //WPF system colors: http://msdn.microsoft.com/en-us/library/system.windows.systemcolors.aspx //UPGRADE_TODO: need to have tool support all system colors if (vb6Color=="System.Windows.SystemColors.ScrollBarColor") return "{x:Static SystemColors.ScrollBarBrush}"; if (vb6Color=="System.Windows.SystemColors.WindowColor") return "{x:Static SystemColors.WindowBrush}"; if (vb6Color=="System.Windows.SystemColors.WindowTextColor") return "{x:Static SystemColors.WindowTextBrush}"; if (vb6Color=="System.Windows.SystemColors.ActiveCaptionTextColor") return "{x:Static SystemColors.ActiveCaptionTextBrush}"; if (vb6Color=="System.Windows.SystemColors.HighlightColor") return "{x:Static SystemColors.HighlightBrush}"; if (vb6Color=="0x80000000") return "{x:Static SystemColors.ScrollBarBrush}"; if (vb6Color=="0x80000005") return "{x:Static SystemColors.WindowBrush}"; if (vb6Color=="0x80000008") return "{x:Static SystemColors.WindowTextBrush}"; if (vb6Color=="0x80000009") return "{x:Static SystemColors.ActiveCaptionTextBrush}"; if (vb6Color=="0x8000000D") return "{x:Static SystemColors.HighlightBrush}"; //Look for S which will mean system font invalid = Character.FindFirst(vb6Color, 0, "S"); if (invalid>0) { System.LogMessage("Invalid Color:" + vb6color); return "Grey"; } string sat = "FF"; // Character.SubStr(vb6Color,2,2); string blu = Character.SubStr(vb6Color,4,2); string grn = Character.SubStr(vb6Color,6,2); string red = Character.SubStr(vb6Color,8,2); cvalue = "#" + sat+red+grn+blu; return cvalue; } int WPFAuthorProjectAssembly(int projectRoot,int iValue) { string StartupURI = ""; if(!Project.StartupMain) { StartupUri="StartupUri=""" + Project.Exename +".xaml"""; } #TextStart cat >(%= Project.DeployLocation %)\(%= Project.NameSpace %).xaml <<'!)(!' <Application x:Class="(%= Project.NameSpace %).App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" (%=StartupUri%) > <Application.Resources> </Application.Resources> </Application> !)(! #TextEnd if (Select.Dialect == Dialects.csh) { #TextStart cat >(%= Project.DeployLocation %)\(%= Project.NameSpace %).xaml.cs <<'!)(!' using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Windows; namespace (%= Project.NameSpace %) { /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { } } !)(! #TextEnd } else { #TextStart cat >(%= Project.DeployLocation %)\(%= Project.NameSpace %).xaml.vb <<'!)(!' Imports System Imports System.Collections.Generic Imports System.Configuration Imports System.Data Imports System.Linq Imports System.Windows Namespace (%= Project.NameSpace %) ''' <summary> ''' Interaction logic for App.xaml ''' </summary> Public Partial Class App : Inherits Application End Class End Namespace !)(! #TextEnd } return 1; } void wrtFormFinish() { #TextStart </DockPanel> </Window> !)(! #TextEnd } int wrtCommonProperties(int ctlRoot, int ctlType, int inICode, int topOffset, int leftOffset, int level) { int iProp; int iValue; int iCode; string sValue; iCode = inICode; Write.Text(" Name="""); Write.Text(Store.GetName(ctlRoot)); Write.Character(""""); wrtIntProperty(ctlType, iCode, "Left", "Canvas.Left", "!",leftOffset); // common wrtIntProperty(ctlType, iCode, "Top", "Canvas.Top", "!",topOffset); // common if(ctlType != OPC.LAB) { wrtIntProperty(ctlType, iCode, "Height", "Height", "!",0); // common wrtIntProperty(ctlType, iCode, "Width", "Width", "!",0); // common } //UPGRADE_TODO: Need to make sure that this color does not need to be default for all controls if(ctlType == OPC.FRA || ctlType == OPC.PBX) { wrtColorProperty(ctlType, iCode, "BackColor", "Background", "#FFF0F0F0"); // common } else if (ctlType == OPC.LAB) { sValue = getStringProperty(ctlType,iCode,"BackStyle","!"); // common if (Character.FindFirst(sValue,0,"Transparent") == 0) wrtColorProperty(ctlType,iCode,"BackColor", "Background", "#FFF0F0F0"); // common } else if (ctlType == OPC.CMB) { sValue = getIntProperty(ctlType,iCode,"Style","Style","!"); //common if (sValue == "1") { wrtColorProperty(ctlType,iCode,"BackColor", "Background", "!"); // common } } else { wrtColorProperty(ctlType, iCode, "BackColor", "Background", "!"); // common } if(ctlType != OPC.PBX) { wrtColorProperty(ctlType, iCode, "ForeColor", "Foreground", "!"); // common wrtStringProperty(ctlType,iCode,"TabIndex","TabIndex","!"); } //wrtEnumProperty(ctlType,iCode,"Visible","Visibility","!"); wrtStringProperty(ctlType,iCode,"Enabled","IsEnabled","!"); wrtStringProperty(ctlType,iCode,"ToolTipText","ToolTip","!"); //System.LogMessage(" nm:" + Store.GetName(ctlRoot) + " " + level + " toffset:" + topOffset + " loffset:" + leftOffset); return iCode; } void wrtMenuShortcuts(int formRoot,int menuRoot) { int levels[7]; int ctlRoot; int ctlType; int iChild; int iCode; int iCaption; string caption; string wpfCaption; int level; string sValue; int x; string name; string shortcuts[100]; int shortcutsCtls[100]; int shortCnt = 0; int hasEve; level = 1 for(ctlRoot = Store.FindFirstChild(levels,menuRoot); ctlRoot != 0; ctlRoot = Store.FindNextChild(levels)) { ctlType = Store.GetObjectType(ctlRoot); if(ctlType != OPC.MEN) break; iChild = Store.GetFirst(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); if(iCode) { iCaption = ControlData.FindProperty(ctlType,"Caption",iCode); if(iCaption) { level = levels[0]; caption = ControlData.GetProperty(iCaption); if(caption != "-") { wpfCaption = Character.Replace(caption,"&","_"); sValue = getStringValue(ctlType,iCode,"Shortcut","!","!"); hasEve = hasEvtHandler(formRoot, ctlRoot, "_Click"); if (sValue != "!" && hasEve) { shortcuts[shortCnt] = sValue; shortcutsCtls[shortCnt] = ctlRoot; shortCnt = shortCnt + 1; } } } Opcode.SetLength(iCode); } } if (shortCnt == 0) return; #TextStart <Window.Resources> #TextEnd Write.ChangeMargin(1); for (x = 0;x < shortCnt;x = x + 1) { Write.Text("<RoutedUICommand x:Key=""" + Store.GetName(shortcutsCtls[x]) + "_Command"" />"); Write.Record(); } Write.ChangeMargin(-1); #TextStart </Window.Resources> #TextEnd #TextStart <Window.CommandBindings> #TextEnd Write.ChangeMargin(1); for (x = 0;x < shortCnt;x = x + 1) { name = Store.GetName(shortcutsCtls[x]); Write.Text("<CommandBinding Command=""{StaticResource " + name + "_Command}"" Executed=""" + name + "_Click"" />"); Write.Record(); } Write.ChangeMargin(-1); #TextStart </Window.CommandBindings> #TextEnd #TextStart <Window.InputBindings> #TextEnd Write.ChangeMargin(1); for (x = 0;x < shortCnt;x = x + 1) { name = Store.GetName(shortcutsCtls[x]); string gest = GetGesture(shortcuts[x]); Write.Text("<KeyBinding Gesture=""" + gest + """ Command=""{StaticResource " + name + "_Command}"" />"); Write.Record(); } Write.ChangeMargin(-1); #TextStart </Window.InputBindings> #TextEnd } string GetGesture(string shortcuts) { string mout = shortcuts; mout = Character.Replace(mout, " | ","+"); mout = Character.Replace(mout, "Keys.Control","Ctrl"); mout = Character.Replace(mout, "Keys.Shift","Shift"); mout = Character.Replace(mout, "Keys.Alt","Alt"); mout = Character.Replace(mout, "Keys.",""); return mout; } void wrtMenu(int formRoot,int menuRoot) { int levels[7]; int ctlRoot; int ctlType; int iChild; int iCode; int iCaption; string caption; string wpfCaption; int level; string sValue; #TextStart <Menu DockPanel.Dock="Top" Name="mainMenu1" IsMainMenu="True"> #TextEnd Write.ChangeMargin(1); level = 1 for(ctlRoot = Store.FindFirstChild(levels,menuRoot); ctlRoot != 0; ctlRoot = Store.FindNextChild(levels)) { ctlType = Store.GetObjectType(ctlRoot); if(ctlType != OPC.MEN) break; iChild = Store.GetFirst(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); if(iCode) { iCaption = ControlData.FindProperty(ctlType,"Caption",iCode); if(iCaption) { if(levels[0] < level) { Write.ChangeMargin(-1); Write.Line("</MenuItem>"); } level = levels[0]; caption = ControlData.GetProperty(iCaption); if(caption == "-") Write.Text("<Separator/>"); else { wpfCaption = Character.Replace(caption,"&","_"); Write.Text("<MenuItem Header="""); if(wpfCaption == caption) Write.Character("_"); Write.Text(wpfCaption); Write.Character(""""); Write.Text(" Name="""); Write.Text(Store.GetName(ctlRoot)); Write.Character(""""); wrtBoolProperty(ctlType,iCode,"Checked","IsChecked","!", 3); addEvtHandler(formRoot, ctlRoot, "_Click", "Click"); // MenuItem sValue = getStringValue(ctlType,iCode,"Shortcut","!","!"); // MenuItem if (sValue != "!") { string gest = GetGesture(sValue); Write.Text(" InputGestureText=""" + gest + """"); } if(iChild) Write.Text(" >"); else Write.Text(" />"); } Write.Record(); if(iChild) Write.ChangeMargin(1); } Opcode.SetLength(iCode); } } if(levels[0] < level) { Write.ChangeMargin(-1); Write.Line("</MenuItem>"); } Write.ChangeMargin(-1); #TextStart </Menu> #TextEnd } void wrtCheckBox(int formRoot,int ctlRoot,int topOffset, int leftOffset) { int iCode; int iProp; int iValue; string sValue; int ctlType; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<CheckBox"); wrtCommonProperties(ctlRoot, ctlType, iCode, topOffset,leftOffset); wrtBoolProperty(ctlType,iCode,"Value","IsChecked","False",OPC.CHV.vbChecked); // CheckBox wrtEnumProperty(ctlType,iCode,"Alignment","FlowDirection","!"); // CheckBox wrtStringProperty(ctlType,iCode,"!","Margin","0,5,0,0"); // CheckBox addEvtHandler(formRoot, ctlRoot, "_Click", "Click"); // checkbox addEvtHandler(formRoot, ctlType, "_MouseMove", "MouseMove"); // CheckBox Write.Text(">"); Write.Record(); Write.ChangeMargin(1); Write.Text("<AccessText"); wrtStringProperty(ctlType,iCode,"!","TextWrapping","Wrap"); // CheckBox wrtStringProperty(ctlType,iCode,"Caption","Text","!"); // CheckBox wrtIntProperty(ctlType,iCode,"Width","Width","!",7); // CheckBox Write.Text(" />"); Write.Record(); Write.ChangeMargin(-1); Write.Line("</CheckBox>"); Opcode.SetLength(iCode); } void wrtTextBox(int formRoot,int ctlRoot,int topOffset, int leftOffset) { int iCode; int iProp; int iValue; string sValue; int ctlType; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<TextBox"); wrtCommonProperties(ctlRoot, ctlType, iCode, topOffset, leftOffset); addEvtHandler(formRoot, ctlRoot, "_KeyPress", "PreviewKeyDown"); // TextBox addEvtHandler(formRoot, ctlRoot, "_KeyDown", "KeyDown"); // TextBox addEvtHandler(formRoot, ctlRoot, "_Click", "MouseLeftButtonUp"); // TextBox addEvtHandler(formRoot, ctlRoot, "_Change", "TextChanged"); // TextBox addEvtHandler(formRoot, ctlRoot, "_LostFocus", "LostFocus"); // TextBox // TOODO: addEvtHandler(formRoot, ctlType, "_KeyDown", "KeyDown"); // TextBox KeyDown vs KeyPress? wrtTextProperty(ctlType,iCode,"Text","Text","!"); // TextBox wrtStringProperty(OPC.FNT,iCode,"Name","FontFamily","!"); // TextBox wrtStringProperty(OPC.FNT,iCode,"Size","FontSize","!"); // TextBox wrtStringProperty(ctlType,iCode,"Locked","IsReadOnly","!"); // TextBox iProp = ControlData.FindProperty(ctlType,"MultiLine",iCode); // TextBox if(iProp) { iValue = ControlData.GetValue(iProp); if(iValue) { Write.Text(" TextWrapping=""" + "Wrap" + """"); Write.Text(" Margin=""" + "3" + """"); Write.Text(" Padding=""" + "0" + """"); } } iProp = ControlData.FindProperty(ctlType,"ScrollBars",iCode); if(iProp) { iValue = ControlData.GetValue(iProp); if(iValue == OPC.SBC.vbVertical) { Write.Text(" VerticalScrollBarVisibility=""" + "Visible" + """"); } } Write.Text(" />"); Write.Record(); Opcode.SetLength(iCode); } void wrtFrame(int formRoot,int ctlRoot,int topOffset, int leftOffset, int level) { int iCode; int iProp; int iValue; string sValue; int ctlType; int childRoot; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<GroupBox"); string caption; caption = getStringValue(ctlType,iCode,"Caption","!"); wrtStringProperty(ctlType,iCode,"Caption","Header","!"); wrtCommonProperties(ctlRoot, ctlType, iCode, topOffset, leftOffset,level); addEvtHandler(formRoot, ctlRoot, "_Click", "MouseLeftButtonUp"); // Frame addEvtHandler(formRoot, ctlRoot, "_MouseDown", "MouseDown"); // Frame addEvtHandler(formRoot, ctlRoot, "_MouseUp", "MouseUp"); // Frame addEvtHandler(formRoot, ctlType, "_MouseMove", "MouseMove"); // Frame Write.Text(">"); Write.Record(); Write.ChangeMargin(1); Write.Text("<Canvas"); Opcode.SetLength(iCode); if (level < 1) { topOffset = 8; //topOffset for title bar difference in vb6 } else { topOffset = 16; } tree(level+1, " .cap:" + caption); if (caption == "" || caption == "!") topOffset = 0; leftOffset = 7; int children = wrtAuthorChildControlsReversed(formRoot, ctlRoot, topOffset, leftOffset, level, "Canvas"); Write.ChangeMargin(-1); Write.Line("</GroupBox>"); } int wrtAuthorChildControlsReversed(int formRoot,int ctlRoot,int topOffset, int leftOffset, int level, string tagName) { int hasChildren = 0; int childRoot; int ctlType; int controls[512]; int conCnt; int conCur; for(childRoot = Store.GetFirst(ctlRoot); childRoot != 0; childRoot = Store.GetNext(childRoot)) { controls[conCnt] = childRoot; conCnt = conCnt + 1; if (level == 0) { ctlType = Store.GetObjectType(ctlRoot); if(ctlType <= Defines.NOBJECT_NAME) break; } } if (level == 0) { tree(0,"root"); } tree(level," |-" + Store.GetName(ctlRoot) + " " + level + " offset:" + topOffset); level = level + 1; for (conCur = conCnt-1; conCur >= 0; conCur = conCur - 1) { if (hasChildren == 0) { Write.Text(">"); Write.Record(); Write.ChangeMargin(1); hasChildren = 1; } wpfAuthorControl(formRoot,controls[conCur],topOffset,leftOffset,level); } if (!hasChildren) { Write.Text(" />"); Write.Record(); } else { Write.ChangeMargin(-1); Write.Text("</" + tagName + ">"); Write.Record(); } return hasChildren; } void wrtOptionButton(int formRoot,int ctlRoot,int topOffset, int leftOffset) { int iCode; int iProp; int iValue; string sValue; int evtRoot; tVbControl vbControl; int ctlType; int isGraphical; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); //System.LogMessage("Dumping"); //Opcode.DumpCode(iCode,iCode+11); //System.LogMessage("RDB: ICode:" + iCode); Write.Text("<RadioButton"); isGraphical=0; string s = getIntProperty(ctlType,iCode,"Style","Style","!"); //OptionButton if (s == "1") isGraphical=1; wrtCommonProperties(ctlRoot, ctlType, iCode, topOffset, leftOffset); // OptionButton addEvtHandler(formRoot, ctlRoot, "_MouseMove", "MouseMove"); // OptionButton addEvtHandler(formRoot, ctlRoot, "_Click", "Click"); // OptionButton if (isGraphical==0) wrtStringProperty(ctlType,iCode,"Caption","Content","!"); // OptionButton //wrtStringProperty(ctlType,iCode,"ToolTipText","ToolTip","!"); wrtStringProperty(OPC.FNT,iCode,"Name","FontFamily","Arial"); // OptionButton wrtStringProperty(OPC.FNT,iCode,"Size","FontSize","11"); // OptionButton wrtStringProperty(ctlType,iCode,"Value","IsChecked","!"); // OptionButton if (isGraphical) { // Graphical Radio Button Write.Text(">"); Write.Record(); string file = ""; iProp = ControlData.FindProperty(ctlType,"Picture",iCode); if (iProp) { //Opcode.DumpCode(iProp, iProp + 2); string picaddr = ControlData.GetProperty(iProp); //System.LogMessage("RB:" + ctlRoot + " iProp:" + iProp + " iCode:" + iCode + " Addr:" + picaddr); Write.ChangeMargin(1); string frmName = Symbol.ClassName(formRoot); Write.Text("<Image Source=" + """Images\" + frmName + "." + picaddr + ".Picture.png"" Stretch=""None"" />"); //" notepad++ format fix Write.Record(); Write.ChangeMargin(-1); } Write.Text("</RadioButton>"); Write.Record(); } else { // Normal Radio Button Write.Text(" />"); Write.Record(); } Opcode.SetLength(iCode); } void wrtCommandButton(int formRoot,int ctlRoot,int topOffset, int leftOffset) { int iCode; int iProp; int iValue; string sValue; tVbControl vbControl; int ctlType; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<Button"); wrtCommonProperties(ctlRoot, ctlType, iCode, topOffset, leftOffset); // CommandButton addEvtHandler(formRoot, ctlRoot, "_Click", "Click"); // CommandButton wrtStringProperty(ctlType,iCode,"Caption","Content","!"); // CommandButton wrtStringProperty(OPC.FNT,iCode,"Name","FontFamily","Arial"); // CommandButton wrtStringProperty(OPC.FNT,iCode,"Size","FontSize","11"); // CommandButton wrtIsCancelButton(formRoot, ctlRoot, "IsCancel", "True"); //wrtPropertyIfEqual(ctlType,iCode,"Cancel", "", "IsCancel", "True"); // CommandButton Write.Text(" />"); Write.Record(); Opcode.SetLength(iCode); } void wrtLabel(int formRoot,int ctlRoot,int topOffset, int leftOffset) { int iCode; int iProp; int iValue; string sValue; int ctlType; string caption; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<Label"); wrtCommonProperties(ctlRoot, ctlType, iCode, topOffset, leftOffset); // Label addEvtHandler(formRoot, ctlRoot, "_Click", "MouseLeftButtonUp"); // Label // TODO: addEvtHandler(formRoot, ctlRoot, "_Change", "UNKNOWN"); // Label sValue = "true";//getStringValue(ctlType,iCode,"WordWrap","!"); // Label if (sValue == "true") { caption = getStringValue(ctlType,iCode,"Caption","!"); // Label } else { wrtStringProperty(ctlType,iCode,"Caption","Content","!"); // Label } wrtStringProperty(OPC.FNT,iCode,"Name","FontFamily","Arial"); // Label wrtStringProperty(OPC.FNT,iCode,"Size","FontSize","11"); // Label wrtStringProperty(ctlType,iCode,"!","Margin","3,0"); // Label wrtStringProperty(ctlType,iCode,"!","Padding","0"); // Label wrtEnumProperty(ctlType,iCode,"Alignment","HorizontalContentAlignment","!"); // Label sValue = getStringProperty(ctlType,iCode,"AutoSize","!"); // Label if (Character.FindFirst(sValue,0,"true") == 0) { wrtIntProperty(ctlType, iCode, "Height", "Height", "!",0); // Label wrtIntProperty(ctlType, iCode, "Width", "Width", "!",0); // Label } if (caption == "" || caption == "!") { Write.Text(" />"); } else { Write.Text(" >"); Write.Record(); Write.ChangeMargin(1); Write.Text("<TextBlock TextWrapping=""Wrap"">" + caption + "</TextBlock>"); Write.Record(); Write.ChangeMargin(-1); Write.Text("</Label>"); } Write.Record(); Opcode.SetLength(iCode); } void wrtUnknown(int formRoot,int ctlRoot,int topOffset, int leftOffset, string opcName) { int iCode; int ctlType; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<GroupBox"); wrtCommonProperties(ctlRoot, OPC.PBX, iCode, topOffset, leftOffset); Write.Text(">"); Write.Record(); Write.ChangeMargin(1); Write.Text("<Canvas><TextBlock>" + opcName + "</TextBlock></Canvas>"); Write.Record(); Write.ChangeMargin(-1); Write.Text("</GroupBox>"); Write.Record(); Opcode.SetLength(iCode); } void wrtArrayString(int iProp, string attrName, int ItemDataProp) { string sValue; string sItemValue; int iEnd; int iStart; string entry; string tag; int cur = 0; Write.ChangeMargin(1); sValue = ControlData.GetProperty(iProp); if (ItemDataProp) { sItemValue = ControlData.GetProperty(ItemDataProp); sItemValue = sItemValue + ","; sItemValue = Character.Replace(sItemValue,""",""); // Must have a strange character at the end of the string only after the replace, messes up xaml, so append "," before the replace } iEnd = 0; for(iStart = -5; iStart != 0; iStart = Character.FindFirst(sValue,iEnd,""")) { iStart = iStart + iEnd + 6; iEnd = Character.FindFirst(sValue,iStart,"""); if(iEnd != 0) { iEnd = iEnd + iStart; entry = Character.Substr(sValue,iStart-1,iEnd-iStart); } else entry = Character.Substr(sValue,iStart-1,1-iStart); if (ItemDataProp) { tag = Split(sItemValue,",",cur); if (tag != "") { tag = " Tag=""" + tag + """"; } else tag = ""; } Write.Line("<" + attrName + " Content=""" + entry + """" + tag + " />"); if(iEnd == 0) break; iEnd = iEnd + 5; cur = cur + 1; } Write.ChangeMargin(-1); } void wrtComboBox(int formRoot,int ctlRoot,int topOffset, int leftOffset) { int iCode; int iProp; int iValue; int ctlType; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<ComboBox"); wrtCommonProperties(ctlRoot, ctlType, iCode, topOffset, leftOffset); wrtStringProperty(ctlType,iCode,"Text","Text","!"); // ComboBox wrtPropertyIfEqual(ctlType,iCode,"Style", "!", "IsEditable", "True"); // ComboBox //wrtPropertyIfEqual(ctlType,iCode,"Style", "System.Windows.Forms.ComboBoxStyle.DropDownList", "IsEditable", "False"); // ComboBox addEvtHandler(formRoot, ctlRoot, "_Click", "SelectionChanged"); // ComboBox addEvtHandler(formRoot, ctlRoot, "_Change", "TextBoxBase.TextChanged"); // ComboBox addEvtHandler(formRoot, ctlRoot, "_DropDown", "DropDownOpened"); // ComboBox addEvtHandler(formRoot, ctlRoot, "_KeyPress", "KeyDown"); // ComboBox addEvtHandler(formRoot, ctlType, "_DblClick", "MouseDoubleClick"); // ComboBox addEvtHandler(formRoot, ctlType," _GotFocus", "GotFocus"); // ComboBox iValue = 3; //Makes all controls draw +3 left and +3 top //Write.Text(" Margin=""" + iValue + """"); iProp = ControlData.FindProperty(ctlType,"List",iCode); if(iProp == 0) { Write.Text(" />"); Write.Record(); } else { int iData = ControlData.FindProperty(ctlType,"ItemData",iCode); Write.Text(">"); Write.Record(); wrtArrayString(iProp,"ComboBoxItem",iData); Write.Line("</ComboBox>"); } Opcode.SetLength(iCode); } void wrtListBox(int formRoot,int ctlRoot,int topOffset, int leftOffset) { int iCode; int iProp; int iValue; int ctlType; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<ListBox"); wrtCommonProperties(ctlRoot, ctlType, iCode, topOffset, leftOffset); addEvtHandler(formRoot, ctlRoot, "_Change", "SelectionChanged"); // ListBox addEvtHandler(formRoot, ctlRoot, "_LostFocus", "LostFocus"); // ListBox addEvtHandler(formRoot, ctlRoot, "_Click", "MouseLeftButtonUp"); // ListBox addEvtHandler(formRoot, ctlRoot, "_DblClick", "MouseDoubleClick"); // ListBox addEvtHandler(formRoot, ctlRoot, "_Scroll", "ScrollViewer.ScrollChanged"); // ListBox //Makes all controls draw +3 left and +3 top //wrtStringProperty(ctlType,iCode,"!","Margin","3"); iProp = ControlData.FindProperty(ctlType,"List",iCode); if(iProp == 0) { Write.Text(" />"); Write.Record(); } else { int iData = ControlData.FindProperty(ctlType,"ItemData",iCode); Write.Text(">"); Write.Record(); wrtArrayString(iProp,"ListBoxItem",iData); Write.Line("</ListBox>"); } Opcode.SetLength(iCode); } void wrtPictureBox(int formRoot,int ctlRoot,int topOffset, int leftOffset, int level) { int iCode; int iProp; int iValue; int ctlType; int childRoot; int hasChildren=0; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<my:GraphicsPanel"); wrtCommonProperties(ctlRoot, ctlType, iCode, topOffset, leftOffset); // PictureBox wrtStringProperty(ctlType, iCode, "ScaleLeft", "!", "0"); // PictureBox wrtStringProperty(ctlType, iCode, "ScaleTop", "!", "0"); // PictureBox wrtStringProperty(ctlType, iCode, "ScaleWidth", "!", "!"); // PictureBox wrtStringProperty(ctlType, iCode, "ScaleHeight", "!", "!"); // PictureBox wrtEnumProperty(ctlType, iCode, "ScaleMode", "ScaleMode", "!"); // PictureBox wrtPictureProperty(formRoot, ctlType, iCode, "Picture", "Picture", "!"); // PictureBox addEvtHandler(formRoot, ctlRoot, "_KeyPress", "PreviewKeyDown"); // PictureBox addEvtHandler(formRoot, ctlRoot, "_KeyDown", "KeyDown"); // PictureBox addEvtHandler(formRoot, ctlRoot, "_Click", "MouseLeftButtonUp"); // PictureBox addEvtHandler(formRoot, ctlRoot, "_MouseDown", "MouseDown"); // PictureBox addEvtHandler(formRoot, ctlRoot, "_MouseUp", "MouseUp"); // PictureBox // TODO: addEvtHandler(formRoot, ctlType, "_KeyDown", "KeyDown"); // PictureBox addEvtHandler(formRoot, ctlRoot, "_Resize", "SizeChanged"); // PictureBox addPropFromEvtHandler(formRoot, ctlRoot, "_DragDrop", "AllowDrop","True"); // PictureBox addEvtHandler(formRoot, ctlRoot, "_DragDrop", "Drop"); // PictureBox //Makes all controls draw +3 left and +3 top //wrtStringProperty(ctlType,iCode,"!","Margin","3"); // PictureBox int children = wrtAuthorChildControlsReversed(formRoot, ctlRoot, topOffset, leftOffset, level, "my:GraphicsPanel"); Opcode.SetLength(iCode); } void wrtScrollBar(int formRoot,int ctlRoot,int topOffset, int leftOffset,string orientation) { int iCode; int iProp; int iValue; int ctlType; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<ScrollBar Orientation="""+ orientation + """"); wrtCommonProperties(ctlRoot, ctlType, iCode, topOffset, leftOffset); wrtStringProperty(ctlType,iCode,"LargeChange","!","1"); wrtStringProperty(ctlType,iCode,"SmallChange","!","1"); wrtStringProperty(ctlType,iCode,"Min","Minimum","0"); wrtStringProperty(ctlType,iCode,"Max","Maximum","32767"); addEvtHandler(formRoot, ctlRoot, "_Change", "ScrollViewer.ScrollChanged"); // Scrollbar addEvtHandler(formRoot, ctlType, "_GotFocus", "GotFocus"); // HScrollBar addEvtHandler(formRoot, ctlType, "_Scroll", "Scroll"); // HScrollBar (same as Change?) //Makes all controls draw +3 left and +3 top //wrtStringProperty(ctlType,iCode,"!","Margin","3"); Write.Text(" />"); Write.Record(); Opcode.SetLength(iCode); } void wrtLine(int formRoot,int ctlRoot,int topOffset, int leftOffset) { int iCode; int iProp; int iValue; int ctlType; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<Line "); Write.Text(" Name="""); Write.Text(Store.GetName(ctlRoot)); Write.Character(""""); wrtTwipsProperty(ctlType,iCode,"X1","X1"); wrtTwipsProperty(ctlType,iCode,"X2","X2"); wrtTwipsProperty(ctlType,iCode,"Y1","Y1"); wrtTwipsProperty(ctlType,iCode,"Y2","Y2"); Write.Text(" />"); Write.Record(); Opcode.SetLength(iCode); } string lvlSpace(int level) { string spc = " "; int x; for (x = 0;x < level;x=x+1) { spc = spc + " "; } return spc; } void wpfAuthorControl(int formRoot,int ctlRoot,int topOffset,int leftOffset,int level) { int ctlType; string ctlTypeName; tMigInfo ctlInfo; ctlType = Store.GetObjectType(ctlRoot); if(ctlType == OPC.MEN) return; ctlInfo = Store.GetVector(ctlRoot); if(ctlInfo.Collection) return; //ctlTypeName = Symbol.FullName(ctlRoot,0); //dbg(" ctl:" + formRoot + ":" + ctlRoot + ":" + ctlTypeName); string spc = lvlSpace(level); tree(level," |-" + Store.GetName(ctlRoot) + " : to:" + topOffset + " lo:" + leftOffset); if(ctlType == OPC.CBX) { wrtCheckBox(formRoot,ctlRoot,topOffset,leftOffset); } else if(ctlType == OPC.TXB) { wrtTextBox(formRoot,ctlRoot,topOffset,leftOffset); } else if(ctlType == OPC.FRA) { wrtFrame(formRoot,ctlRoot,topOffset,leftOffset,level); } else if(ctlType == OPC.OBU) { wrtOptionButton(formRoot,ctlRoot,topOffset,leftOffset); } else if(ctlType == OPC.CMB) { wrtCommandButton(formRoot,ctlRoot,topOffset,leftOffset); } else if(ctlType == OPC.LAB) { wrtLabel(formRoot,ctlRoot,topOffset,leftOffset); } else if(ctlType == OPC.PBX) { wrtPictureBox(formRoot,ctlRoot,topOffset,leftOffset); } else if(ctlType == OPC.CBO) { wrtComboBox(formRoot,ctlRoot,topOffset,leftOffset); } else if(ctlType == OPC.LSB) { wrtListBox(formRoot,ctlRoot,topOffset,leftOffset); } else if(ctlType == OPC.HBR) { wrtScrollBar(formRoot,ctlRoot,topOffset,leftOffset,"Horizontal"); } else if(ctlType == OPC.VBR) { wrtScrollBar(formRoot,ctlRoot,topOffset,leftOffset,"Vertical"); } else if(ctlType == OPC.TIM) { ctlTypeName = Symbol.FullName(ctlRoot,0); wrtUnknown(formRoot,ctlRoot,topOffset,leftOffset,"TIM"); System.LogMessage("WPFSubsystem unknown control; TIM: " + ctlTypeName); } else if(ctlType == OPC.MDI) { ctlTypeName = Symbol.FullName(ctlRoot,0); wrtUnknown(formRoot,ctlRoot,topOffset,leftOffset,"MDI"); System.LogMessage("WPFSubsystem unknown control; MDI: " + ctlTypeName); } else if(ctlType == OPC.SHA) { ctlTypeName = Symbol.FullName(ctlRoot,0); wrtUnknown(formRoot,ctlRoot,topOffset,leftOffset,"SHA"); System.LogMessage("WPFSubsystem unknown control; SHA: " + ctlTypeName); } else if(ctlType == OPC.LIN) { wrtLine(formRoot,ctlRoot,topOffset,leftOffset); } else if(ctlType == OPC.IMA) { ctlTypeName = Symbol.FullName(ctlRoot,0); wrtUnknown(formRoot,ctlRoot,topOffset,leftOffset,"IMA"); } else if(ctlType == OPC.USC) { ctlTypeName = Symbol.FullName(ctlRoot,0); wrtUnknown(formRoot,ctlRoot,topOffset,leftOffset,"USC"); } else if(ctlType == OPC.FOR) { } else if(ctlType > Defines.OPC_MAXIMUM) { ctlTypeName = Store.GetName(ctlType); if(Runtime.CallHandler(ctlType,EventType.AuthorSubsystem,ctlRoot,topOffset,leftOffset) == 0) { ctlInfo = Store.DeltaVector(ctlRoot); ctlInfo.PropertyBag = True; string msg = "WPFSubsystem: unknown control:" + ctlTypeName + ": " + Symbol.FullName(ctlRoot,0); System.LogMessage(msg); Write.Text("<!-- " + msg + " -->"); Write.Record(); } } } int FindMenu(int formRoot) { int ctlRoot; int frmRoot; int ctlType; frmRoot = Store.GetFirst(formRoot); for(ctlRoot = Store.GetFirst(frmRoot); ctlRoot != 0; ctlRoot = Store.GetNext(ctlRoot)) { ctlType = Store.GetObjectType(ctlRoot); if(ctlType <= Defines.NOBJECT_NAME) break; if(ctlType == OPC.MEN) { return ctlRoot; } } return 0; } int WPFAuthorControls(int formRoot,int optValue) { int ctlRoot; int frmRoot; int ctlType; int topOffset; tMigInfo ctlInfo; string sValue; int iValue; int iCode; int oldIndent; int mnuRoot; Write.SetIndentation(4,0); frmRoot = Store.GetFirst(formRoot); sValue = getFormAttribs(formRoot); #TextStart cat >(%= Project.DeployLocation %)\(%= Symbol.ClassName(formRoot) %).xaml <<'!)(!' #TextEnd Write.Text("<Window" + sValue); addEvtHandler(formRoot, ctlRoot, "Form_Load", "Loaded"); // Form //addEvtHandler(formRoot, ctlRoot, "Form_Activate", "Activated"); // Form addEvtHandler(formRoot, ctlRoot, "Form_Deactivate", "Deactivated"); // Form addEvtHandler(formRoot, ctlRoot, "Form_QueryUnload", "Closing"); // Form addEvtHandler(formRoot, ctlType, "Form_GotFocus", "GotFocus"); // Form addEvtHandler(formRoot, ctlType, "Form_KeyPress", "KeyDown"); // Form Write.Record(); Write.ChangeMargin(1); #TextStart xmlns:my="clr-namespace:MigrationSupport.WPF;assembly=MigrationSupport.WPF" x:Class="(%= Project.NameSpace %).(%= Symbol.ClassName(formRoot) %)" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"> #TextEnd Write.ChangeMargin(-1); mnuRoot = FindMenu(formRoot); if (mnuRoot) wrtMenuShortcuts(formRoot, mnuRoot); Write.Text("<DockPanel LastChildFill=""True"">"); Write.Record(); topOffset = 0; if (mnuRoot) { wrtMenu(formRoot, mnuRoot); topOffset = 24; } sValue = getSurfaceAttribs(formRoot); Write.Text("<my:GraphicsPanel Name=""Surface"" Margin=""0""" + sValue); addEvtHandler(formRoot, ctlRoot, "Form_Resize", "SizeChanged"); // Form int children = wrtAuthorChildControlsReversed(formRoot, frmRoot, topOffset, 0, 0, "my:GraphicsPanel"); wrtFormFinish(); wrtControlCodeBegin(formRoot); return 1; } void wrtControlCodeBegin(int formRoot) { string FormName; int frmRoot; int ctlRoot; int ctlType; tVbControl ctlInfo; tVbControl ctlArray; int levels[19]; tCodeBlock codptr; int pcnt; int iProp; int iCode; FormName = Symbol.ClassName(formRoot); frmRoot = Store.GetFirst(formRoot); codptr = Opcode.GetCode(); pcnt = Opcode.GetLength(); #TextStart cat >(%= Project.DeployLocation %)\(%= FormName %).xaml.(%= Symbol.NamedEntryLabel("LangExt",Select.Dialect) %) <<'!)(!' #TextEnd if (Select.Dialect==Dialects.csh) { #TextStart using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Forms; using MigrationSupport.WPF; using System.Runtime.InteropServices; namespace (%= Select.RootSpace %)(%= Project.NameSpace %) { #TextEnd } else { #TextStart Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Text Imports System.Windows Imports System.Windows.Controls Imports System.Windows.Data Imports System.Windows.Documents Imports System.Windows.Input Imports System.Windows.Media Imports System.Windows.Media.Imaging Imports System.Windows.Navigation Imports System.Windows.Shapes Imports System.Windows.Forms Imports MigrationSupport.WPF Imports System.Runtime.InteropServices Namespace (%= Select.RootSpace %)(%= Project.NameSpace %) #TextEnd } Write.ChangeMargin(1); if (Select.Dialect==Dialects.csh) { #TextStart public partial class (%= FormName %) : Window { #TextEnd } else { #TextStart Public Partial Class (%= FormName %) : Inherits Window #TextEnd } Write.ChangeMargin(1); for(ctlRoot = Store.FindFirstChild(levels,frmRoot); ctlRoot != 0; ctlRoot = Store.FindNextChild(levels)) { ctlType = Store.GetObjectType(ctlRoot); if(ctlType <= Defines.NOBJECT_NAME) break; ctlInfo = Store.GetVector(ctlRoot); if(ctlInfo.PropertyBag) { if (Select.Dialect==Dialects.csh) { Write.Text("public " + Symbol.FullName(ctlType,1) + " " + Store.GetName(ctlRoot) + " = null;"); } else { Write.Text("Public " + Store.GetName(ctlRoot)) + " As " + Symbol.FullName(ctlType,1) + " = Nothing"; } Write.Record(); continue; } if(!ctlInfo.Collection) continue; if(ctlInfo.NeedsInit || ctlInfo.Referenced) { if (Select.Dialect==Dialects.csh) { Write.Text("public System.Collections.Generic.SortedList<int, "); Opcode.SetOperation(codptr,pcnt,OPC.TYP,ctlType); Runtime.AuthorCode(pcnt,pcnt+sizeof(OPC.TYP)); Write.Text("> " + Store.GetName(ctlRoot) + " = null;"); } else { Write.Text("Public " + Store.GetName(ctlRoot) + " As System.Collections.Generic.SortedList(Of Integer, "); Opcode.SetOperation(codptr,pcnt,OPC.TYP,ctlType); Runtime.AuthorCode(pcnt,pcnt+sizeof(OPC.TYP)); Write.Text(") = Nothing"); } Write.Record(); } } if(Project.DefInstance) { if (Select.Dialect == Dialects.csh) { #TextStart private static (%= FormName %) m_vb6FormDefInstance = null; public static (%= FormName %) DefInstance { get { if(m_vb6FormDefInstance == null) { m_vb6FormDefInstance = new (%= FormName %)(); } return m_vb6FormDefInstance; } set { m_vb6FormDefInstance = value; } } #TextEnd } else { #TextStart Private Shared m_vb6FormDefInstance As (%= FormName %) Public Shared Property DefInstance() As (%= FormName %) Get If m_vb6FormDefInstance Is Nothing Then m_vb6FormDefInstance = New (%= FormName %)() End If DefInstance = m_vb6FormDefInstance End Get Set(ByVal value As (%= FormName %)) m_vb6FormDefInstance = Value End Set End Property #TextEnd } } if (Select.Dialect == Dialects.csh) { #TextStart public (%= FormName %)() { #TextEnd } else { #TextStart <System.Diagnostics.DebuggerNonUserCode()> Public Sub New() MyBase.New() #TextEnd } Write.ChangeMargin(1); if(Project.DefInstance) { if (Select.Dialect == Dialects.csh) { #TextStart if(m_vb6FormDefInstance == null) { m_vb6FormDefInstance = this; } #TextEnd } else { #TextStart If (m_vb6FormDefInstance Is Nothing) Then m_vb6FormDefInstance = this; End If #TextEnd } } if (Select.Dialect==Dialects.csh) { #TextStart // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // #TextEnd } else { #TextStart ' ' Required for Windows Form Designer support ' InitializeComponent() ' ' TODO: Add any constructor code after InitializeComponent call ' #TextEnd } for(ctlRoot = Store.FindFirstChild(levels,frmRoot); ctlRoot != 0; ctlRoot = Store.FindNextChild(levels)) { ctlType = Store.GetObjectType(ctlRoot); if(ctlType <= Defines.NOBJECT_NAME) break; ctlInfo = Store.GetVector(ctlRoot); if(ctlInfo.Collection) { if(ctlInfo.NeedsInit || ctlInfo.Referenced) { Write.Text(Store.GetName(ctlRoot)); if (Select.Dialect == Dialects.csh) { Write.Text(" = new System.Collections.Generic.SortedList<int, "); Opcode.SetOperation(codptr,pcnt,OPC.TYP,ctlType); Runtime.AuthorCode(pcnt,pcnt+sizeof(OPC.TYP)); Write.Text(">();"); } else { Write.Text(" = New System.Collections.Generic.SortedList(Of Integer, "); Opcode.SetOperation(codptr,pcnt,OPC.TYP,ctlType); Runtime.AuthorCode(pcnt,pcnt+sizeof(OPC.TYP)); Write.Text(")()"); } Write.Record(); } } else if(ctlInfo.nxtVector) { ctlArray = Store.GetVector(ctlInfo.nxtVector); if(ctlArray.NeedsInit || ctlArray.Referenced) { Write.Text(Store.GetName(ctlInfo.nxtVector)); Write.Text(".Add("); Write.Integer(ctlInfo.iVector,0); Write.Text(", "); Write.Text(Store.GetName(ctlRoot)); if Write.Text(")"); if (Select.Dialect == Dialects.csh) Write.Text(";"); Write.Record(); } } iCode = ControlData.LoadCode(ctlRoot); iProp = ControlData.FindProperty(ctlType,"Visible",iCode); if (iProp) { Write.Text(Store.GetName(ctlRoot)); if(ctlType != OPC.MEN) { Write.Text(".Visibility = System.Windows.Visibility.Hidden"); if (Select.Dialect == Dialects.csh) Write.Text(";"); } else { Write.Text(".Visibility = System.Windows.Visibility.Collapsed"); if (Select.Dialect == Dialects.csh) Write.Text(";"); } Write.Record(); } } /* int hasEvt; hasEvt = hasEvtHandler(formRoot, frmRoot, "Form_Load"); if (hasEvt) { Write.Text("this.Loaded += new System.Windows.RoutedEventHandler(Form_Load);"); Write.Record(); } hasEvt = hasEvtHandler(formRoot, frmRoot, "Form_Activate"); if (hasEvt) { Write.Text("this.Activated += new EventHandler(Form_Activate);"); Write.Record(); } */ Write.ChangeMargin(-1); if (Select.Dialect == Dialects.csh) Write.Line("}"); else Write.Line("End Sub"); } int WPFCodeScan(int subRoot,int projectRoot) { int delta; tCodeBlock codptr; int nCode; tCodeBlock setTextTop; tCodeBlock ifOBUvalue; int getOBUToolTip; int nOper; int icode; int lcode; int oldUnit; int opcd; int subc; tInfoFile projInfo; int nArg; int qeAddr[10]; int qeType[10]; int lastNew; int iqe; delta = 0; codptr = Opcode.GetCode(); nCode = Opcode.GetLength(); setTextTop = CodePattern.Read("TXB.Top,MEM.Child,STR.AssignValue",nOper); ifOBUvalue = CodePattern.Read("OBU.Value,MEM.Child,ARG.Boolean",nOper); oldUnit = Store.Unit(); Store.Select(StorageUnit.LANG); getOBUToolTip = Symbol.FindIdentifier("Basic.OptionButton.ToolTipText.get"); Store.Select(oldUnit); lastNew = 0; for(icode = 0; icode >= 0; icode = Opcode.GetNext(codptr,icode,nCode)) { lcode = CodePattern.Match(icode,setTextTop); if(lcode) { lcode = icode + sizeof(OPC.TXB); nCode = Opcode.DeleteCode(lcode,nCode,sizeof(OPC.MEM)); Opcode.SetLength(nCode); Opcode.SetOperation(codptr,lcode,OPC.WPO,OPC.WPO.SetCanvas); delta = 1; continue; } lcode = CodePattern.Match(icode,ifOBUvalue); if(lcode) { lcode = lcode - sizeof(OPC.ARG); nCode = Opcode.ExpandCode(lcode,nCode,sizeof(OPC.CNV)); Opcode.SetLength(nCode); Opcode.SetOperation(codptr,lcode,OPC.CNV,OPC.CNV.CastBool); delta = 1; continue; } opcd = Opcode.GetOperation(codptr,icode,subc); if(opcd == OPC.NEW) { lastNew = icode; continue; } if(opcd == OPC.DPS && subc == getOBUToolTip) { nCode = Opcode.DeleteCode(icode,nCode,sizeof(OPC.DPS) - sizeof(OPC.OBU) - sizeof(OPC.MEM)); Opcode.SetLength(nCode); Opcode.SetOperation(codptr,icode,OPC.OBU,OPC.OBU.ToolTipText); Opcode.SetOperation(codptr,icode+sizeof(OPC.OBU),OPC.MEM,OPC.MEM.Child); delta = 1; continue; } if(opcd == OPC.IOF && subc == OPC.IOF.Run) { Opcode.SetOperation(codptr,icode,OPC.WPO,OPC.WPO.RunProject); nCode = Opcode.ExpandCode(icode,nCode,sizeof(OPC.LDA)); Opcode.SetLength(nCode); projInfo = Store.GetVector(projectRoot); Opcode.SetOperation(codptr,icode,OPC.LDA,projInfo.vbName); delta = 1; continue; } if((opcd == OPC.ANA && subc == OPC.ANA.DrawRectangle) || (opcd == OPC.ANA && subc == OPC.ANA.FillRectangle) || (opcd == OPC.PBX && subc == OPC.PBX.Line) ) { nArg = Opcode.GetCallArgs(subRoot,lastNew,icode,qeAddr,qeType,8); iqe = Opcode.GetPrevious(codptr,qeAddr[6],qeAddr[7]-sizeof(OPC.ARG)); opcd = Opcode.GetOperation(codptr,iqe,subc); if(opcd == OPC.CNV && subc == OPC.CNV.ColorToInt) { delta = 1; nCode = Opcode.DeleteCode(iqe,nCode,sizeof(OPC.CNV)); Opcode.SetLength(nCode); icode = icode - sizeof(OPC.CNV); } continue; } } return delta; } int WPFRuntimeInformation(int projectRoot,int optValue) { Project.Exename = Project.Startup; if(!Project.StartupMain) { Project.Startup = "App"; } return 0; } int WPFControlMigration(int ctlRoot,int iStart) { int objType; objType = Store.GetObjectType(ctlRoot); if(objType == OPC.LIN) return ControlMigration.BlockControlAnalysis; return 0; } string WPFEventArgs(string source,int evtRoot) { string ident; ident = Store.GetIdent(evtRoot); if(ident == "Resize") { if(source == "EventArgs") return "SizeChangedEventArgs"; } else if(ident == "DropDown") { if(source == "EventArgs") return "EventArgs"; } else if(ident == "Deactivate") { if(source == "EventArgs") return "EventArgs"; } else if(ident == "Scroll") { if(source == "EventArgs") return "System.Windows.Controls.ScrollChangedEventArgs "; } else { if(source == "EventArgs") return "RoutedEventArgs"; if(source == "System.Windows.Forms.MouseEventArgs") return "System.Windows.Input.MouseEventArgs"; if(source == "System.Windows.Forms.KeyPressEventArgs") return "System.Windows.Input.KeyEventArgs"; if(source == "System.Windows.Forms.KeyEventArgs") return "System.Windows.Input.KeyEventArgs"; if(source == "System.Windows.Forms.ScrollEventArgs") return "System.Windows.Controls.Primitives.ScrollEventArgs"; } return NULL; } int DriveListBox(int context,int ctlRoot,int topOffset) { int iCode; int iProp; int iValue; string eventName; int eventRoot; int ctlType; int formRoot; if(context != EventType.AuthorSubsystem) return 0; for(formRoot = Store.GetParent(ctlRoot); formRoot != 0; formRoot = Store.GetParent(formRoot)) { if(Store.GetObjectType(formRoot) == ObjectType.FormFile) break; } if(formRoot == 0) return 0; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<my:DriveListBox"); iCode = wrtCommonProperties(ctlRoot, ctlType, iCode, topOffset, 0); Write.Text(" />"); Write.Record(); Opcode.SetLength(iCode); return 1; } int DirListBox(int context,int ctlRoot,int topOffset) { int iCode; int iProp; int iValue; string eventName; int eventRoot; int ctlType; int formRoot; if(context != EventType.AuthorSubsystem) return 0; for(formRoot = Store.GetParent(ctlRoot); formRoot != 0; formRoot = Store.GetParent(formRoot)) { if(Store.GetObjectType(formRoot) == ObjectType.FormFile) break; } if(formRoot == 0) return 0; ctlType = Store.GetObjectType(ctlRoot); iCode = ControlData.LoadCode(ctlRoot); Write.Text("<my:DirListBox"); iCode = wrtCommonProperties(ctlRoot, ctlType, iCode, topOffset, 0); Write.Text(" />"); Write.Record(); Opcode.SetLength(iCode); return 1; } string XAMLEncode(string str) { int x; //The first 2 bytes are size of the string. We need to strip them off. They are being converted to ;\n. if (Character.FindFirst(str,0,";\n") == 1) { str = Character.SubStr(str,3); } //System.LogMessage("Encoding string: " + str); string s; string temp = ""; string last = ""; for (x = 0;x < 9999;x=x+1) { s = Character.SubStr(str,x,1); if (s == "&") { //Temp fix for remove an wierd arrow character when finding " in the string //System.LogMessage("found:" + last); temp = Character.Replace(temp, last, ""); } if (s == "") { break; } else { temp = temp + s; } last = s; } str = temp; str = Character.Replace(str, "\r\n", " "); str = Character.Replace(str, "\r", " "); str = Character.Replace(str, "\n", " "); str = Character.Replace(str, "\t", "   "); return str; } /*************************************************************************************************************************************************** SplitMethods ***************************************************************************************************************************************************/ string Split(string str, string chr, int index) { int cnt = 0; int pos = 0; int fnd = 0; string lastVal=""; int lastPos = 0; //System.LogMessage("----------------------------------------"); //System.LogMessage("Splitting Str: " + str + " index: " + index); if (str == "") { //System.LogMessage("Empty string, dropping out"); if (index == -1) { return 0; } else { return ""; } } //System.LogMessage("First scan"); fnd = Character.FindFirst(str,pos,chr); pos = pos + fnd; while (1) { //System.LogMessage("Entered loop"); if (index == cnt) { return Character.SubStr(str,lastPos,pos-lastPos-1); } cnt=cnt+1; fnd = Character.FindFirst(str,pos+1,chr); if (fnd == 0) { if (index == cnt) { return Character.SubStr(str,pos); } if (pos-lastPos-1 > 1 && lastPos > 0) { //System.LogMessage("lastPos: " + lastPos + " pos-lastPos-1: " + (pos-lastPos-1)); cnt = cnt + 1; } //System.LogMessage("cnt: " + cnt); break; } lastPos = pos; pos = pos + fnd + 1; } if (index == -1) { //System.LogMessage("cnt: " + cnt); return cnt; } return 0; } string SplitCnt(string str, string chr) { return Split(str, chr, -1); } int wpfCompilerInfo(int dummy1, int dummy2) { if(Select.Dialect == Dialects.vbn) { //System.LogMessage("wpfCompilerInfo Reset subsystem sequence: wpb,wpf,lob,loc"); Select.Subsystem = Dialects.wpb; Select.Subsystem2 = Dialects.wpf; Select.Subsystem3 = Dialects.lob; Select.Subsystem4 = Dialects.loc; } else { //System.LogMessage("wpfCompilerInfo Reset subsystem sequence: wpf,loc"); Select.Subsystem = Dialects.wpf; Select.Subsystem2 = Dialects.loc; } return 0; }