public OverridesImplementsDialog (MonoDevelop.Ide.Gui.Document editor, IType cls) { this.Build(); this.editor = editor; this.cls = cls; // FIXME: title Title = GettextCatalog.GetString ("Override and/or implement members"); store = new TreeStore (typeof (bool), typeof (Gdk.Pixbuf), typeof (string), typeof (bool), typeof (IMember)); // Column #1 TreeViewColumn nameCol = new TreeViewColumn (); nameCol.Title = GettextCatalog.GetString ("Name"); nameCol.Expand = true; nameCol.Resizable = true; CellRendererToggle cbRenderer = new CellRendererToggle (); cbRenderer.Activatable = true; cbRenderer.Toggled += OnSelectToggled; nameCol.PackStart (cbRenderer, false); nameCol.AddAttribute (cbRenderer, "active", colCheckedIndex); CellRendererPixbuf iconRenderer = new CellRendererPixbuf (); nameCol.PackStart (iconRenderer, false); nameCol.AddAttribute (iconRenderer, "pixbuf", colIconIndex); CellRendererText nameRenderer = new CellRendererText (); nameRenderer.Ellipsize = Pango.EllipsizeMode.End; nameCol.PackStart (nameRenderer, true); nameCol.AddAttribute (nameRenderer, "text", colNameIndex); treeview.AppendColumn (nameCol); // Column #2 CellRendererToggle explicitRenderer = new CellRendererToggle (); explicitRenderer.Activatable = true; explicitRenderer.Xalign = 0.0f; explicitRenderer.Toggled += OnExplicitToggled; TreeViewColumn explicitCol = new TreeViewColumn (); explicitCol.Title = GettextCatalog.GetString ("Explicit"); explicitCol.PackStart (explicitRenderer, true); explicitCol.SetCellDataFunc (explicitRenderer, new TreeCellDataFunc (RenderExplicitCheckbox)); explicitCol.AddAttribute (explicitRenderer, "active", colExplicitIndex); treeview.AppendColumn (explicitCol); store.SetSortColumnId (colNameIndex, SortType.Ascending); treeview.Model = store; buttonCancel.Clicked += OnCancelClicked; buttonOk.Clicked += OnOKClicked; buttonSelectAll.Clicked += delegate { SelectAll (true); }; buttonUnselectAll.Clicked += delegate { SelectAll (false); }; refactorer = IdeApp.Workspace.GetCodeRefactorer (IdeApp.ProjectOperations.CurrentSelectedSolution); ambience = AmbienceService.GetAmbienceForFile (cls.CompilationUnit.FileName); PopulateTreeView (); UpdateOKButton (); }
static IType CreateClass (Project project, Stetic.ActionGroupComponent group, string name, string namspace, string folder) { string fullName = namspace.Length > 0 ? namspace + "." + name : name; CodeRefactorer gen = new CodeRefactorer (project.ParentSolution); CodeTypeDeclaration type = new CodeTypeDeclaration (); type.Name = name; type.IsClass = true; type.BaseTypes.Add (new CodeTypeReference ("Gtk.ActionGroup")); // Generate the constructor. It contains the call that builds the widget. CodeConstructor ctor = new CodeConstructor (); ctor.Attributes = MemberAttributes.Public | MemberAttributes.Final; ctor.BaseConstructorArgs.Add (new CodePrimitiveExpression (fullName)); CodeMethodInvokeExpression call = new CodeMethodInvokeExpression ( new CodeMethodReferenceExpression ( new CodeTypeReferenceExpression ("Stetic.Gui"), "Build" ), new CodeThisReferenceExpression (), new CodeTypeOfExpression (fullName) ); ctor.Statements.Add (call); type.Members.Add (ctor); // Add signal handlers foreach (Stetic.ActionComponent action in group.GetActions ()) { foreach (Stetic.Signal signal in action.GetSignals ()) { CodeMemberMethod met = new CodeMemberMethod (); met.Name = signal.Handler; met.Attributes = MemberAttributes.Family; met.ReturnType = new CodeTypeReference (signal.SignalDescriptor.HandlerReturnTypeName); foreach (Stetic.ParameterDescriptor pinfo in signal.SignalDescriptor.HandlerParameters) met.Parameters.Add (new CodeParameterDeclarationExpression (pinfo.TypeName, pinfo.Name)); type.Members.Add (met); } } // Create the class IType cls = null; cls = gen.CreateClass (project, ((DotNetProject)project).LanguageName, folder, namspace, type); if (cls == null) throw new UserException ("Could not create class " + fullName); project.AddFile (cls.CompilationUnit.FileName, BuildAction.Compile); IdeApp.ProjectOperations.Save (project); // Make sure the database is up-to-date ProjectDomService.Parse (project, cls.CompilationUnit.FileName); return cls; }
CodeRefactorer GetCodeGenerator () { CodeRefactorer cr = new CodeRefactorer (project.ParentSolution); cr.TextFileProvider = textFileProvider; return cr; }
void CreateClass (string name, string namspace, string folder) { string fullName = namspace.Length > 0 ? namspace + "." + name : name; CodeRefactorer gen = new CodeRefactorer (fproject.Project.ParentSolution); bool partialSupport = fproject.Project.UsePartialTypes; Stetic.WidgetComponent component = (Stetic.WidgetComponent) rootWidget.Component; CodeTypeDeclaration type = new CodeTypeDeclaration (); type.Name = name; type.IsClass = true; type.IsPartial = partialSupport; type.BaseTypes.Add (new CodeTypeReference (component.Type.ClassName)); // Generate the constructor. It contains the call that builds the widget. CodeConstructor ctor = new CodeConstructor (); ctor.Attributes = MemberAttributes.Public | MemberAttributes.Final; foreach (object val in component.Type.InitializationValues) { if (val is Enum) { ctor.BaseConstructorArgs.Add ( new CodeFieldReferenceExpression ( new CodeTypeReferenceExpression (val.GetType ()), val.ToString () ) ); } else ctor.BaseConstructorArgs.Add (new CodePrimitiveExpression (val)); } if (partialSupport) { CodeMethodInvokeExpression call = new CodeMethodInvokeExpression ( new CodeMethodReferenceExpression ( new CodeThisReferenceExpression (), "Build" ) ); ctor.Statements.Add (call); } else { CodeMethodInvokeExpression call = new CodeMethodInvokeExpression ( new CodeMethodReferenceExpression ( new CodeTypeReferenceExpression ("Stetic.Gui"), "Build" ), new CodeThisReferenceExpression (), new CodeTypeOfExpression (fullName) ); ctor.Statements.Add (call); } type.Members.Add (ctor); // Add signal handlers AddSignalsRec (type, component); foreach (Stetic.Component ag in component.GetActionGroups ()) AddSignalsRec (type, ag); // Create the class IType cls = gen.CreateClass (Project.Project, ((DotNetProject)Project.Project).LanguageName, folder, namspace, type); if (cls == null) throw new UserException ("Could not create class " + fullName); Project.Project.AddFile (cls.CompilationUnit.FileName, BuildAction.Compile); IdeApp.ProjectOperations.Save (Project.Project); // Make sure the database is up-to-date ProjectDomService.Parse (Project.Project, cls.CompilationUnit.FileName, null); }
MemberReferenceCollection GetReferences (RefactoringOptions options, IMember member) { CodeRefactorer refactorer; if (options.TestFileProvider == null) { refactorer = IdeApp.Workspace.GetCodeRefactorer (IdeApp.ProjectOperations.CurrentSelectedSolution); } else { refactorer = new CodeRefactorer (); refactorer.TextFileProvider = options.TestFileProvider; } IProgressMonitor monitor = IdeApp.Workbench != null ? IdeApp.Workbench.ProgressMonitors.GetBackgroundProgressMonitor (this.Name, null) : new MonoDevelop.Core.ProgressMonitoring.NullProgressMonitor (); return refactorer.FindMemberReferences (monitor, member.DeclaringType, member, true); }
public static CodeRefactorer GetCodeGenerator (Project project) { CodeRefactorer cr = new CodeRefactorer (project.ParentSolution); cr.TextFileProvider = MonoDevelop.Ide.TextFileProvider.Instance; return cr; }
public void Update (WidgetParser parser, Stetic.Project stetic, CodeRefactorer refactorer) { if (AttrSyncState == SyncState.Unspecified) { if (refactorer != null) { InsertToolboxItemAttributes (parser, refactorer); AttrSyncState = SyncState.On; } return; } else if (AttrSyncState == SyncState.Off) return; StringCollection tb_names = new StringCollection (); foreach (IType cls in parser.GetToolboxItems().Values) { UpdateClass (parser, stetic, cls, null); tb_names.Add (cls.FullName); } List<XmlElement> toDelete = new List<XmlElement> (); foreach (XmlElement elem in SelectNodes ("objects/object")) { string name = elem.GetAttribute ("type"); if (!tb_names.Contains (name)) toDelete.Add (elem); } foreach (XmlElement elem in toDelete) elem.ParentNode.RemoveChild (elem); Save (); }
void InsertToolboxItemAttributes (WidgetParser parser, CodeRefactorer cref) { Dictionary<string, IType> tb_items = parser.GetToolboxItems (); foreach (string clsname in ObjectNames) { if (tb_items.ContainsKey (clsname)) continue; IType cls = parser.GetClass (clsname); if (cls == null) continue; cref.AddAttribute (cls, "System.ComponentModel.ToolboxItem", true); XmlElement elem = DocumentElement.SelectSingleNode ("object[@type='" + clsname + "']") as XmlElement; if (elem != null && elem.HasAttribute ("palette-category")) cref.AddAttribute (cls, "System.ComponentModel.Category", elem.GetAttribute ("palette-category")); } }