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)
 {
 }
Exemple #5
0
        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;
 }