QyotoCodeGenerator(QyotoForm form) { CodeCompileUnit unit = new CodeCompileUnit(); CodeNamespace nspace = new CodeNamespace(form.Namespace); nspace.Imports.Add(new CodeNamespaceImport("System")); nspace.Imports.Add(new CodeNamespaceImport("Qyoto")); unit.Namespaces.Add(nspace); CodeTypeDeclaration type = new CodeTypeDeclaration(form.ClassName); type.IsClass = true; type.IsPartial = true; type.TypeAttributes = TypeAttributes.Public; type.BaseTypes.Add(new CodeTypeReference(form.BaseTypeName)); nspace.Types.Add(type); m_SetupUiMethod = new CodeMemberMethod(); m_SetupUiMethod.Name = "SetupUi"; m_SetupUiMethod.Attributes = MemberAttributes.Family | MemberAttributes.Final; type.Members.Add(m_SetupUiMethod); m_SetupUiMethod.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeBaseReferenceExpression(), "ObjectName"), new CodePrimitiveExpression(form.ClassName))); XmlDocument doc = new XmlDocument(); doc.Load(form.UiFile); XmlElement widgetNode = (XmlElement)doc.SelectSingleNode("/ui/widget"); ParseWidget(widgetNode, type, null, null); foreach (XmlElement node in doc.SelectNodes("/ui/connections/connection")) { string sender = node.SelectSingleNode("sender").InnerText; string signal = node.SelectSingleNode("signal").InnerText; string receiver = node.SelectSingleNode("receiver").InnerText; string slot = node.SelectSingleNode("slot").InnerText; CodeExpression senderExpression = null; if (sender == type.Name) senderExpression = new CodeThisReferenceExpression(); else senderExpression = new CodeVariableReferenceExpression(sender); CodeExpression receiverExpression = null; if (receiver == type.Name) receiverExpression = new CodeThisReferenceExpression(); else receiverExpression = new CodeVariableReferenceExpression(receiver); m_SetupUiMethod.Statements.Add(new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("QObject"), "Connect", senderExpression, new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("Qt"), "SIGNAL", new CodePrimitiveExpression(signal)), receiverExpression, new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("Qt"), "SLOT", new CodePrimitiveExpression(slot)))); } m_SetupUiMethod.Statements.Add(new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("QMetaObject"), "ConnectSlotsByName", new CodeThisReferenceExpression())); foreach (var expr in m_SetBuddyExpressions) { m_SetupUiMethod.Statements.Add(expr); } using (TextWriter writer = new StreamWriter(form.GeneratedSourceCodeFile)) { CodeDomProvider provider = form.Project.LanguageBinding.GetCodeDomProvider(); provider.GenerateCodeFromCompileUnit(unit, writer, new CodeGeneratorOptions()); } }
public static void GenerateFormCodeFile(QyotoForm form) { new QyotoCodeGenerator(form); }
void OnFormRemoved(object o, QyotoForm form) { m_Project.Files.Remove(form.GeneratedSourceCodeFile); ProjectNodeBuilder.FilesChanged(m_Project); IdeApp.ProjectOperations.Save(m_Project); }
void OnFormAdded(object o, QyotoForm form) { }
public static QyotoForm WriteXml(XmlNode node, QyotoDesignInfo info) { string className = node.SelectSingleNode("widget").Attributes["name"].Value; string uiFileName = Path.Combine(info.QtGuiFolder, String.Format("{0}.ui", className)); // Create .ui file using (StreamWriter writer = new StreamWriter(uiFileName)) { writer.Write(node.OuterXml); } uiFileName = Path.GetFileName(uiFileName); QyotoForm form = new QyotoForm(uiFileName); form.Project = info.Project; return form; }
public QyotoFormPropertyDescriptor(QyotoForm form) { m_Form = form; }