public void Convert(string guiFolderName, bool makeBackup) { GtkDesignInfo info = GtkDesignInfo.FromProject(project); Stetic.Project gproject = GuiBuilderService.SteticApp.CreateProject(info); //Stetic.Project does not implement IDisposable try { string newGuiFolderName = project.BaseDirectory.Combine(guiFolderName); gproject.ConvertProject(info.SteticFile, newGuiFolderName); info.ConvertGtkFolder(guiFolderName, makeBackup); info.UpdateGtkFolder(); folderName = newGuiFolderName; IProgressMonitor monitor = IdeApp.Workbench.ProgressMonitors.GetBuildProgressMonitor(); try { ConfigurationSelector configuration = IdeApp.Workspace.ActiveConfiguration; Generator generator = new Generator(); generator.Run(monitor, project, configuration); monitor.ReportSuccess("Converting was succesfull"); } finally { monitor.Dispose(); } } finally { gproject.Dispose(); } }
internal GuiBuilderWindow (GuiBuilderProject fproject, Stetic.Project gproject, Stetic.WidgetInfo rootWidget) { this.fproject = fproject; this.rootWidget = rootWidget; this.gproject = gproject; name = rootWidget.Name; gproject.ProjectReloaded += OnProjectReloaded; rootWidget.Changed += OnChanged; }
protected void OnEditIcons() { Project project = CurrentNode.GetParentDataItem(typeof(Project), true) as Project; GuiBuilderProject gp = GtkDesignInfo.FromProject(project).GuiBuilderProject; Stetic.Project sp = gp.SteticProject; sp.EditIcons(); gp.SaveProject(true); }
internal GuiBuilderWindow(GuiBuilderProject fproject, Stetic.Project gproject, Stetic.WidgetInfo rootWidget) { this.fproject = fproject; this.rootWidget = rootWidget; this.gproject = gproject; name = rootWidget.Name; gproject.ProjectReloaded += OnProjectReloaded; rootWidget.Changed += OnChanged; }
void Load() { if (gproject != null || disposed || fileName == null) { return; } gproject = GuiBuilderService.SteticApp.CreateProject(); formInfos = new List <GuiBuilderWindow> (); if (!System.IO.File.Exists(fileName)) { // Regenerate the gtk-gui folder if the stetic project // doesn't exist. GtkDesignInfo.FromProject(project).UpdateGtkFolder(); } try { gproject.Load(fileName); } catch (Exception ex) { MessageService.ShowException(ex, GettextCatalog.GetString("The GUI designer project file '{0}' could not be loaded.", fileName)); hasError = true; } Counters.SteticProjectsLoaded++; gproject.ResourceProvider = GtkDesignInfo.FromProject(project).ResourceProvider; gproject.WidgetAdded += OnAddWidget; gproject.WidgetRemoved += OnRemoveWidget; gproject.ActionGroupsChanged += OnGroupsChanged; project.FileAddedToProject += OnFileAdded; project.FileRemovedFromProject += OnFileRemoved; project.ReferenceAddedToProject += OnReferenceAdded; project.ReferenceRemovedFromProject += OnReferenceRemoved; foreach (Stetic.WidgetInfo ob in gproject.Widgets) { RegisterWindow(ob, false); } // Monitor changes in the file lastSaveTime = System.IO.File.GetLastWriteTime(fileName); watcher = new FileSystemWatcher(); if (System.IO.File.Exists(fileName)) { watcher.Path = Path.GetDirectoryName(fileName); watcher.Filter = Path.GetFileName(fileName); watcher.Changed += (FileSystemEventHandler)DispatchService.GuiDispatch(new FileSystemEventHandler(OnSteticFileChanged)); watcher.EnableRaisingEvents = true; } }
public override void ActivateItem() { StockIconsNode node = (StockIconsNode)CurrentNode.DataItem; GtkDesignInfo info = GtkDesignInfo.FromProject(node.Project); GuiBuilderProject gp = info.GuiBuilderProject; Stetic.Project sp = gp.SteticProject; sp.ImagesRootPath = FileService.AbsoluteToRelativePath(info.GtkGuiFolder, gp.Project.BaseDirectory); sp.ImportFileCallback = delegate(string file) { return(GuiBuilderService.ImportFile(gp.Project, file)); }; sp.EditIcons(); gp.Save(true); }
string GetBaseType(WidgetParser parser, ITypeDefinition widgetClass, Stetic.Project stetic) { string[] types = stetic.GetWidgetTypes(); Hashtable typesHash = new Hashtable(); foreach (string t in types) { typesHash [t] = t; } string ret = parser.GetBaseType(widgetClass, typesHash); return(ret ?? "Gtk.Widget"); }
void Unload() { if (gproject == null) { return; } Counters.SteticProjectsLoaded--; if (Unloaded != null) { Unloaded(this, EventArgs.Empty); } if (formInfos != null) { foreach (GuiBuilderWindow win in formInfos) { win.Dispose(); } formInfos = null; } if (gproject != null) { gproject.WidgetAdded -= OnAddWidget; gproject.WidgetRemoved -= OnRemoveWidget; gproject.ActionGroupsChanged -= OnGroupsChanged; gproject.Dispose(); gproject = null; } if (project != null) { project.FileAddedToProject -= OnFileAdded; project.FileRemovedFromProject -= OnFileRemoved; project.ReferenceAddedToProject -= OnReferenceAdded; project.ReferenceRemovedFromProject -= OnReferenceRemoved; } needsUpdate = true; hasError = false; librariesUpdated = false; if (watcher != null) { watcher.Dispose(); watcher = null; } NotifyChanged(); }
public DesignerView(Stetic.Project project, ProjectItemInfo item) { this.widget = (WidgetInfo)item; // Widget design tab design = project.CreateWidgetDesigner(widget, true); // Actions design tab actionbox = design.CreateActionGroupDesigner(); // Designers tab AppendPage(design, new Gtk.Label(Catalog.GetString("Designer"))); AppendPage(actionbox, new Gtk.Label(Catalog.GetString("Actions"))); TabPos = Gtk.PositionType.Bottom; }
void Load () { if (gproject != null || disposed || fileName == null) return; gproject = GuiBuilderService.SteticApp.CreateProject (); formInfos = new List<GuiBuilderWindow> (); if (!System.IO.File.Exists (fileName)) { // Regenerate the gtk-gui folder if the stetic project // doesn't exist. GtkDesignInfo.FromProject (project).UpdateGtkFolder (); } try { gproject.Load (fileName); } catch (Exception ex) { MessageService.ShowException (ex, GettextCatalog.GetString ("The GUI designer project file '{0}' could not be loaded.", fileName)); hasError = true; } Counters.SteticProjectsLoaded++; gproject.ResourceProvider = GtkDesignInfo.FromProject (project).ResourceProvider; gproject.WidgetAdded += OnAddWidget; gproject.WidgetRemoved += OnRemoveWidget; gproject.ActionGroupsChanged += OnGroupsChanged; project.FileAddedToProject += OnFileAdded; project.FileRemovedFromProject += OnFileRemoved; project.ReferenceAddedToProject += OnReferenceAdded; project.ReferenceRemovedFromProject += OnReferenceRemoved; foreach (Stetic.WidgetInfo ob in gproject.Widgets) RegisterWindow (ob, false); // Monitor changes in the file lastSaveTime = System.IO.File.GetLastWriteTime (fileName); watcher = new FileSystemWatcher (); if (System.IO.File.Exists (fileName)) { watcher.Path = Path.GetDirectoryName (fileName); watcher.Filter = Path.GetFileName (fileName); watcher.Changed += (FileSystemEventHandler) DispatchService.GuiDispatch (new FileSystemEventHandler (OnSteticFileChanged)); watcher.EnableRaisingEvents = true; } }
public Stetic.CodeGenerationResult GenerateCode(ArrayList projectFolders, bool useGettext, string gettextClass, bool usePartialClasses, GtkDesignInfo info) { Gtk.Application.Init(); Stetic.Application app = Stetic.ApplicationFactory.CreateApplication(Stetic.IsolationMode.None); Stetic.Project[] projects = new Stetic.Project [projectFolders.Count]; for (int n = 0; n < projectFolders.Count; n++) { projects [n] = app.CreateProject(info); projects [n].Load((string)projectFolders [n]); } Stetic.GenerationOptions options = new Stetic.GenerationOptions(); options.UseGettext = useGettext; options.GettextClass = gettextClass; return(app.GenerateProjectCode(options, projects)); }
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(); }
public Stetic.CodeGenerationResult GenerateCode(ArrayList projectFiles, bool useGettext, string gettextClass, string resourceLoaderClass, bool usePartialClasses) { Gtk.Application.Init(); Stetic.Application app = Stetic.ApplicationFactory.CreateApplication(Stetic.IsolationMode.None); Stetic.Project[] projects = new Stetic.Project [projectFiles.Count]; for (int n = 0; n < projectFiles.Count; n++) { projects [n] = app.CreateProject(); projects [n].Load((string)projectFiles [n]); } Stetic.GenerationOptions options = new Stetic.GenerationOptions(); options.UseGettext = useGettext; options.GettextClass = gettextClass; options.ImageResourceLoaderClass = resourceLoaderClass; options.UsePartialClasses = usePartialClasses; options.GenerateSingleFile = false; return(app.GenerateProjectCode(options, projects)); }
void UpdateClass(WidgetParser parser, Stetic.Project stetic, ITypeDefinition widgetClass, ITypeDefinition wrapperClass) { string typeName = widgetClass.FullName; string basetypeName = GetBaseType(parser, widgetClass, stetic); XmlElement objectElem = (XmlElement)SelectSingleNode("objects/object[@type='" + typeName + "']"); if (objectElem == null) { // The widget class is not yet in the XML file. Create an element for it. objectElem = CreateElement("object"); objectElem.SetAttribute("type", typeName); string category = parser.GetCategory(widgetClass); if (category == String.Empty) { objectElem.SetAttribute("palette-category", "General"); } else { objectElem.SetAttribute("palette-category", category); } objectElem.SetAttribute("allow-children", "false"); if (wrapperClass != null) { objectElem.SetAttribute("wrapper", wrapperClass.FullName); } // By default add a reference to Gtk.Widget properties and events XmlElement itemGroups = objectElem.OwnerDocument.CreateElement("itemgroups"); objectElem.AppendChild(itemGroups); itemGroups = objectElem.OwnerDocument.CreateElement("signals"); objectElem.AppendChild(itemGroups); objectElem.SetAttribute("base-type", basetypeName); DocumentElement.AppendChild(objectElem); } UpdateObject(parser, basetypeName, objectElem, widgetClass, wrapperClass); }
void Load() { if (gproject != null || disposed || folderName == null) { return; } GtkDesignInfo info = GtkDesignInfo.FromProject(project); gproject = GuiBuilderService.SteticApp.CreateProject(info); formInfos = new List <GuiBuilderWindow> (); // TODO : when expanding project, UpdateGtkFolder causes in throwing exception by gtk // info.UpdateGtkFolder (); try { gproject.Load(folderName); } catch (Exception ex) { MessageService.ShowException(ex, GettextCatalog.GetString("The GUI designer project folder '{0}' could not be loaded.", folderName)); hasError = true; } Counters.SteticProjectsLoaded++; gproject.ResourceProvider = GtkDesignInfo.FromProject(project).ResourceProvider; // gproject.DesignInfo = info; gproject.WidgetAdded += OnAddWidget; gproject.WidgetRemoved += OnRemoveWidget; gproject.ActionGroupsChanged += OnGroupsChanged; project.FileAddedToProject += OnFileAdded; project.FileRemovedFromProject += OnFileRemoved; project.ReferenceAddedToProject += OnReferenceAdded; project.ReferenceRemovedFromProject += OnReferenceRemoved; foreach (Stetic.WidgetInfo ob in gproject.Widgets) { RegisterWindow(ob, false); } }
public override bool AddToProject(SolutionItem policyParent, Project project, string language, string directory, string name) { if (!GtkDesignInfo.SupportsDesigner(project)) { ReferenceManager mgr = new ReferenceManager(project as DotNetProject); mgr.GtkPackageVersion = mgr.DefaultGtkVersion; mgr.Dispose(); } GtkDesignInfo info = GtkDesignInfo.FromProject((DotNetProject)project); GuiBuilderProject gproject = info.GuiBuilderProject; string fileName = fileTemplate.GetFileName(policyParent, project, language, directory, name); fileTemplate.AddToProject(policyParent, project, language, directory, name); #if TRUNK ProjectDomService.Parse(project, fileName); #else ProjectDomService.Parse(project, fileName, null); #endif DotNetProject netProject = project as DotNetProject; string ns = netProject != null?netProject.GetDefaultNamespace(fileName) : ""; string cname = Path.GetFileNameWithoutExtension(fileName); string fullName = ns.Length > 0 ? ns + "." + cname : cname; string[,] tags = { { "Name", cname }, { "Namespace", ns }, { "FullName", fullName } }; XmlElement widgetElem = steticTemplate ["widget"]; if (widgetElem != null) { string content = widgetElem.OuterXml; content = StringParserService.Parse(content, tags); XmlDocument doc = new XmlDocument(); doc.LoadXml(content); gproject.AddNewComponent(doc.DocumentElement); gproject.Save(false); gproject.GenerateCode(fileName); IdeApp.ProjectOperations.Save(project); return(true); } widgetElem = steticTemplate ["action-group"]; if (widgetElem != null) { string content = widgetElem.OuterXml; content = StringParserService.Parse(content, tags); XmlDocument doc = new XmlDocument(); doc.LoadXml(content); Stetic.Project sproject = gproject.SteticProject; sproject.AddNewActionGroup(doc.DocumentElement); gproject.Save(false); gproject.GenerateCode(fileName); IdeApp.ProjectOperations.Save(project); return(true); } throw new InvalidOperationException("<widget> or <action-group> element not found in widget template."); }
static int RunApp(string[] args, int n) { Project = SteticApp.CreateProject(); Project.WidgetAdded += OnWidgetAdded; Project.WidgetRemoved += OnWidgetRemoved; Project.ModifiedChanged += OnProjectModified; Project.ProjectReloaded += OnProjectReloaded; Palette = SteticApp.PaletteWidget; widgetTree = SteticApp.WidgetTreeWidget; Signals = SteticApp.SignalsWidget; propertyTree = SteticApp.PropertiesWidget; ProjectView = new WindowListWidget(); UIManager = new Stetic.UIManager(Project); Glade.XML.CustomHandler = CustomWidgetHandler; Glade.XML glade = new Glade.XML("stetic.glade", "MainWindow"); glade.Autoconnect(typeof(SteticMain)); if (ProjectView.Parent is Gtk.Viewport && ProjectView.Parent.Parent is Gtk.ScrolledWindow) { Gtk.Viewport viewport = (Gtk.Viewport)ProjectView.Parent; Gtk.ScrolledWindow scrolled = (Gtk.ScrolledWindow)viewport.Parent; viewport.Remove(ProjectView); scrolled.Remove(viewport); scrolled.AddWithViewport(ProjectView); } foreach (Gtk.Widget w in glade.GetWidgetPrefix("")) { Gtk.Window win = w as Gtk.Window; if (win != null) { win.AddAccelGroup(UIManager.AccelGroup); win.ShowAll(); } } MainWindow = (Gtk.Window)Palette.Toplevel; WidgetNotebook = (Gtk.Notebook)glade ["notebook"]; WidgetNotebook.SwitchPage += OnPageChanged; ProjectView.ComponentActivated += OnWidgetActivated; widgetTree.SelectionChanged += OnSelectionChanged; #if GTK_SHARP_2_6 // This is needed for both our own About dialog and for ones // the user constructs Gtk.AboutDialog.SetUrlHook(ActivateUrl); #endif if (n < args.Length) { LoadProject(args [n]); } ReadConfiguration(); foreach (string s in Configuration.WidgetLibraries) { SteticApp.AddWidgetLibrary(s); } SteticApp.UpdateWidgetLibraries(false); ProjectView.Fill(Project); Program.Run(); return(0); }
void Load () { if (gproject != null || disposed || folderName == null) return; GtkDesignInfo info = GtkDesignInfo.FromProject (project); gproject = GuiBuilderService.SteticApp.CreateProject (info); formInfos = new List<GuiBuilderWindow> (); // TODO : when expanding project, UpdateGtkFolder causes in throwing exception by gtk // info.UpdateGtkFolder (); try { gproject.Load (folderName); } catch (Exception ex) { MessageService.ShowException (ex, GettextCatalog.GetString ("The GUI designer project folder '{0}' could not be loaded.", folderName)); hasError = true; } Counters.SteticProjectsLoaded++; gproject.ResourceProvider = GtkDesignInfo.FromProject (project).ResourceProvider; // gproject.DesignInfo = info; gproject.WidgetAdded += OnAddWidget; gproject.WidgetRemoved += OnRemoveWidget; gproject.ActionGroupsChanged += OnGroupsChanged; project.FileAddedToProject += OnFileAdded; project.FileRemovedFromProject += OnFileRemoved; project.ReferenceAddedToProject += OnReferenceAdded; project.ReferenceRemovedFromProject += OnReferenceRemoved; foreach (Stetic.WidgetInfo ob in gproject.Widgets) RegisterWindow (ob, false); }
static int RunApp(string[] args, int n) { Project = SteticApp.CreateProject (); Project.WidgetAdded += OnWidgetAdded; Project.WidgetRemoved += OnWidgetRemoved; Project.ModifiedChanged += OnProjectModified; Project.ProjectReloaded += OnProjectReloaded; Palette = SteticApp.PaletteWidget; widgetTree = SteticApp.WidgetTreeWidget; Signals = SteticApp.SignalsWidget; propertyTree = SteticApp.PropertiesWidget; ProjectView = new WindowListWidget (); UIManager = new Stetic.UIManager (Project); Glade.XML.CustomHandler = CustomWidgetHandler; Glade.XML glade = new Glade.XML ("stetic.glade", "MainWindow"); glade.Autoconnect (typeof (SteticMain)); if (ProjectView.Parent is Gtk.Viewport && ProjectView.Parent.Parent is Gtk.ScrolledWindow) { Gtk.Viewport viewport = (Gtk.Viewport)ProjectView.Parent; Gtk.ScrolledWindow scrolled = (Gtk.ScrolledWindow)viewport.Parent; viewport.Remove (ProjectView); scrolled.Remove (viewport); scrolled.AddWithViewport (ProjectView); } foreach (Gtk.Widget w in glade.GetWidgetPrefix ("")) { Gtk.Window win = w as Gtk.Window; if (win != null) { win.AddAccelGroup (UIManager.AccelGroup); win.ShowAll (); } } MainWindow = (Gtk.Window)Palette.Toplevel; WidgetNotebook = (Gtk.Notebook) glade ["notebook"]; WidgetNotebook.SwitchPage += OnPageChanged; ProjectView.ComponentActivated += OnWidgetActivated; widgetTree.SelectionChanged += OnSelectionChanged; #if GTK_SHARP_2_6 // This is needed for both our own About dialog and for ones // the user constructs Gtk.AboutDialog.SetUrlHook (ActivateUrl); #endif if (n < args.Length) { LoadProject (args [n]); } ReadConfiguration (); foreach (string s in Configuration.WidgetLibraries) { SteticApp.AddWidgetLibrary (s); } SteticApp.UpdateWidgetLibraries (false); ProjectView.Fill (Project); Program.Run (); return 0; }
public Stetic.CodeGenerationResult GenerateCode (ArrayList projectFiles, bool useGettext, string gettextClass, bool usePartialClasses) { Gtk.Application.Init (); Stetic.Application app = Stetic.ApplicationFactory.CreateApplication (Stetic.IsolationMode.None); Stetic.Project[] projects = new Stetic.Project [projectFiles.Count]; for (int n=0; n < projectFiles.Count; n++) { projects [n] = app.CreateProject (); projects [n].Load ((string) projectFiles [n]); } Stetic.GenerationOptions options = new Stetic.GenerationOptions (); options.UseGettext = useGettext; options.GettextClass = gettextClass; options.UsePartialClasses = usePartialClasses; options.GenerateSingleFile = false; return app.GenerateProjectCode (options, projects); }
void Unload () { if (gproject == null) return; Counters.SteticProjectsLoaded--; if (Unloaded != null) Unloaded (this, EventArgs.Empty); if (formInfos != null) { foreach (GuiBuilderWindow win in formInfos) win.Dispose (); formInfos = null; } if (gproject != null) { gproject.WidgetAdded -= OnAddWidget; gproject.WidgetRemoved -= OnRemoveWidget; gproject.ActionGroupsChanged -= OnGroupsChanged; gproject.Dispose (); gproject = null; } if (project != null) { project.FileAddedToProject -= OnFileAdded; project.FileRemovedFromProject -= OnFileRemoved; project.ReferenceAddedToProject -= OnReferenceAdded; project.ReferenceRemovedFromProject -= OnReferenceRemoved; } needsUpdate = true; hasError = false; librariesUpdated = false; if (watcher != null) { watcher.Dispose (); watcher = null; } NotifyChanged (); }