Browse Source

Fixed bug that could cause pads to be lost when the layout is changed. (when trying to reopen such a "lost" pad, it would show up with a width of zero)

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4134 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts^2
Daniel Grunwald 17 years ago
parent
commit
8bf506da54
  1. 4
      data/layouts/Debug.xml
  2. 0
      data/layouts/Default.xml
  3. 0
      data/layouts/LayoutConfig.xml
  4. 5
      data/layouts/Plain.xml
  5. 13
      data/resources/layouts/Plain.xml
  6. 1
      src/AddIns/BackendBindings/FSharp/FSharpBinding/Project/FSharpBinding.addin
  7. 1
      src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.addin
  8. 3
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.addin
  9. 3
      src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.addin
  10. 10
      src/Main/Base/Project/Src/Gui/IWorkbenchLayout.cs
  11. 78
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs
  12. 36
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonPadContent.cs
  13. 12
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs
  14. 2
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/LayoutConfiguration.cs
  15. 10
      src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs
  16. 15
      src/Main/Base/Project/Src/Internal/Doozers/PadDescriptor.cs
  17. 6
      src/Main/Base/Project/Src/Project/IProject.cs
  18. 16
      src/Setup/Files.wxs

4
data/resources/layouts/Debug.xml → data/layouts/Debug.xml

@ -25,6 +25,8 @@
</DockablePane> </DockablePane>
</ResizingPanel> </ResizingPanel>
</ResizingPanel> </ResizingPanel>
<Hidden /> <Hidden>
<DockableContent Name="ICSharpCode_SharpDevelop_Gui_TaskListPad" AutoHide="false"/>
</Hidden>
<Windows /> <Windows />
</DockingManager> </DockingManager>

0
data/resources/layouts/Default.xml → data/layouts/Default.xml

0
data/resources/layouts/LayoutConfig.xml → data/layouts/LayoutConfig.xml

5
data/layouts/Plain.xml

@ -0,0 +1,5 @@
<DockingManager>
<DocumentPanePlaceHolder />
<Hidden />
<Windows />
</DockingManager>

13
data/resources/layouts/Plain.xml

@ -1,13 +0,0 @@
<DockingManager>
<DocumentPanePlaceHolder />
<Hidden>
<DockableContent Name="ICSharpCode_SharpDevelop_Project_ProjectBrowserPad" AutoHide="false" />
<DockableContent Name="ICSharpCode_SharpDevelop_Gui_ToolsPad" AutoHide="false" />
<DockableContent Name="ICSharpCode_SharpDevelop_Gui_ClassBrowser_ClassBrowserPad" AutoHide="false" />
<DockableContent Name="ICSharpCode_SharpDevelop_Gui_PropertyPad" AutoHide="false" />
<DockableContent Name="ICSharpCode_SharpDevelop_Gui_ErrorListPad" AutoHide="false" />
<DockableContent Name="ICSharpCode_SharpDevelop_Gui_TaskListPad" AutoHide="false" />
<DockableContent Name="ICSharpCode_SharpDevelop_Gui_CompilerMessageView" AutoHide="false" />
</Hidden>
<Windows />
</DockingManager>

1
src/AddIns/BackendBindings/FSharp/FSharpBinding/Project/FSharpBinding.addin

@ -101,6 +101,7 @@
category = "Main" category = "Main"
title = "F# Interactive" title = "F# Interactive"
icon = "F#.ProjectIcon" icon = "F#.ProjectIcon"
defaultPosition = "Bottom, Hidden"
class = "FSharpBinding.FSharpInteractive"/> class = "FSharpBinding.FSharpInteractive"/>
</Path> </Path>

1
src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.addin

@ -173,6 +173,7 @@
insertafter = "Bookmarks" insertafter = "Bookmarks"
insertbefore = "DefinitionView" insertbefore = "DefinitionView"
icon = "PadIcons.Output" icon = "PadIcons.Output"
defaultPosition = "Bottom, Hidden"
class = "ICSharpCode.PythonBinding.PythonConsolePad"/> class = "ICSharpCode.PythonBinding.PythonConsolePad"/>
</Path> </Path>

3
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.addin

@ -122,7 +122,8 @@
title = "${res:MainWindow.Windows.Debug.Watch}" title = "${res:MainWindow.Windows.Debug.Watch}"
icon = "PadIcons.LocalVariables" icon = "PadIcons.LocalVariables"
shortcut = "Control|Alt|W" shortcut = "Control|Alt|W"
class = "ICSharpCode.SharpDevelop.Gui.Pads.WatchPad"/> class = "ICSharpCode.SharpDevelop.Gui.Pads.WatchPad"
defaultPosition = "Bottom, Hidden" />
</Path> </Path>
<Path name ="/SharpDevelop/Pads/WatchPad/ContextMenu"> <Path name ="/SharpDevelop/Pads/WatchPad/ContextMenu">

3
src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.addin

@ -49,7 +49,8 @@
category = "Help2" category = "Help2"
title = "${res:AddIns.HtmlHelp2.DynamicHelp}" title = "${res:AddIns.HtmlHelp2.DynamicHelp}"
icon = "HtmlHelp2.16x16.DynamicHelp" icon = "HtmlHelp2.16x16.DynamicHelp"
class = "HtmlHelp2.HtmlHelp2DynamicHelpPad"/> class = "HtmlHelp2.HtmlHelp2DynamicHelpPad"
defaultPosition = "Right, Hidden" />
</Path> </Path>
<Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions"> <Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions">

10
src/Main/Base/Project/Src/Gui/IWorkbenchLayout.cs

@ -55,28 +55,28 @@ namespace ICSharpCode.SharpDevelop.Gui
/// <summary> /// <summary>
/// Shows a new <see cref="IPadContent"/>. /// Shows a new <see cref="IPadContent"/>.
/// </summary> /// </summary>
void ShowPad(PadDescriptor content); void ShowPad(PadDescriptor padDescriptor);
/// <summary> /// <summary>
/// Activates a pad (Show only makes it visible but Activate does /// Activates a pad (Show only makes it visible but Activate does
/// bring it to foreground) /// bring it to foreground)
/// </summary> /// </summary>
void ActivatePad(PadDescriptor content); void ActivatePad(PadDescriptor padDescriptor);
/// <summary> /// <summary>
/// Hides a <see cref="IPadContent"/>. /// Hides a <see cref="IPadContent"/>.
/// </summary> /// </summary>
void HidePad(PadDescriptor content); void HidePad(PadDescriptor padDescriptor);
/// <summary> /// <summary>
/// Closes and disposes a <see cref="IPadContent"/>. /// Closes and disposes a <see cref="IPadContent"/>.
/// </summary> /// </summary>
void UnloadPad(PadDescriptor content); void UnloadPad(PadDescriptor padDescriptor);
/// <summary> /// <summary>
/// returns true, if padContent is visible; /// returns true, if padContent is visible;
/// </summary> /// </summary>
bool IsVisible(PadDescriptor padContent); bool IsVisible(PadDescriptor padDescriptor);
/// <summary> /// <summary>
/// Shows a new <see cref="IViewContent"/> and optionally switches to it. /// Shows a new <see cref="IViewContent"/> and optionally switches to it.

78
src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs

@ -8,6 +8,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
@ -121,58 +122,36 @@ namespace ICSharpCode.SharpDevelop.Gui
Dictionary<PadDescriptor, AvalonPadContent> pads = new Dictionary<PadDescriptor, AvalonPadContent>(); Dictionary<PadDescriptor, AvalonPadContent> pads = new Dictionary<PadDescriptor, AvalonPadContent>();
Dictionary<string, AvalonPadContent> padsByClass = new Dictionary<string, AvalonPadContent>(); Dictionary<string, AvalonPadContent> padsByClass = new Dictionary<string, AvalonPadContent>();
public void ShowPad(PadDescriptor content) public void ShowPad(PadDescriptor padDescriptor)
{ {
AvalonPadContent pad; AvalonPadContent pad;
if (pads.TryGetValue(content, out pad)) { if (pads.TryGetValue(padDescriptor, out pad)) {
dockingManager.Show(pad); dockingManager.Show(pad);
} else { } else {
pad = new AvalonPadContent(this, content); LoggingService.Debug("Add pad " + padDescriptor.Class + " at " + padDescriptor.DefaultPosition);
pads.Add(content, pad);
padsByClass.Add(content.Class, pad);
AnchorStyle style;
if ((content.DefaultPosition & DefaultPadPositions.Top) != 0)
style = AnchorStyle.Top;
else if ((content.DefaultPosition & DefaultPadPositions.Left) != 0)
style = AnchorStyle.Left;
else if ((content.DefaultPosition & DefaultPadPositions.Bottom) != 0)
style = AnchorStyle.Bottom;
else
style = AnchorStyle.Right;
dockingManager.Show(pad, DockableContentState.Docked, style);
SetPaneSizeWorkaround(pad.ContainerPane);
if ((content.DefaultPosition & DefaultPadPositions.Hidden) != 0)
dockingManager.Hide(pad);
}
}
static void SetPaneSizeWorkaround(Pane pane) pad = new AvalonPadContent(this, padDescriptor);
{ pads.Add(padDescriptor, pad);
ResizingPanel panel = pane.Parent as ResizingPanel; padsByClass.Add(padDescriptor.Class, pad);
if (panel.Orientation == Orientation.Horizontal) { pad.ShowInDefaultPosition();
if (ResizingPanel.GetResizeWidth(pane).Value == 0)
ResizingPanel.SetResizeWidth(pane, new GridLength(200));
} else if (panel.Orientation == Orientation.Vertical) {
if (ResizingPanel.GetResizeHeight(pane).Value == 0)
ResizingPanel.SetResizeHeight(pane, new GridLength(150));
} }
} }
public void ActivatePad(PadDescriptor content) public void ActivatePad(PadDescriptor padDescriptor)
{ {
ShowPad(content); ShowPad(padDescriptor);
} }
public void HidePad(PadDescriptor content) public void HidePad(PadDescriptor padDescriptor)
{ {
AvalonPadContent p; AvalonPadContent p;
if (pads.TryGetValue(content, out p)) if (pads.TryGetValue(padDescriptor, out p))
dockingManager.Hide(p); dockingManager.Hide(p);
} }
public void UnloadPad(PadDescriptor content) public void UnloadPad(PadDescriptor padDescriptor)
{ {
AvalonPadContent p = pads[content]; AvalonPadContent p = pads[padDescriptor];
dockingManager.Hide(p); dockingManager.Hide(p);
DockablePane pane = p.Parent as DockablePane; DockablePane pane = p.Parent as DockablePane;
if (pane != null) if (pane != null)
@ -180,10 +159,10 @@ namespace ICSharpCode.SharpDevelop.Gui
p.Dispose(); p.Dispose();
} }
public bool IsVisible(PadDescriptor padContent) public bool IsVisible(PadDescriptor padDescriptor)
{ {
AvalonPadContent p; AvalonPadContent p;
if (pads.TryGetValue(padContent, out p)) if (pads.TryGetValue(padDescriptor, out p))
return p.IsVisible; return p.IsVisible;
else else
return false; return false;
@ -218,10 +197,11 @@ namespace ICSharpCode.SharpDevelop.Gui
return; return;
Busy = true; Busy = true;
try { try {
bool isPlainLayout = LayoutConfiguration.CurrentLayoutName == "Plain";
if (File.Exists(LayoutConfiguration.CurrentLayoutFileName)) { if (File.Exists(LayoutConfiguration.CurrentLayoutFileName)) {
dockingManager.RestoreLayout(LayoutConfiguration.CurrentLayoutFileName); LoadLayout(LayoutConfiguration.CurrentLayoutFileName, isPlainLayout);
} else { } else if (File.Exists(LayoutConfiguration.CurrentLayoutTemplateFileName)) {
LoadDefaultLayoutConfiguration(); LoadLayout(LayoutConfiguration.CurrentLayoutTemplateFileName, isPlainLayout);
} }
} catch (Exception ex) { } catch (Exception ex) {
MessageService.ShowError(ex); MessageService.ShowError(ex);
@ -234,10 +214,22 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
} }
void LoadDefaultLayoutConfiguration() void LoadLayout(string fileName, bool hideAllLostPads)
{ {
if (File.Exists(LayoutConfiguration.CurrentLayoutTemplateFileName)) { LoggingService.Info("Loading layout file: " + fileName + ", hideAllLostPads=" + hideAllLostPads);
dockingManager.RestoreLayout(LayoutConfiguration.CurrentLayoutTemplateFileName); DockableContent[] oldContents = dockingManager.DockableContents;
dockingManager.RestoreLayout(fileName);
DockableContent[] newContents = dockingManager.DockableContents;
// Restoring a AvalonDock layout will remove pads that are not
// stored in the layout file.
// We'll re-add those lost pads.
foreach (DockableContent lostContent in oldContents.Except(newContents)) {
AvalonPadContent padContent = lostContent as AvalonPadContent;
if (padContent != null && !hideAllLostPads) {
padContent.ShowInDefaultPosition();
} else {
dockingManager.Hide(lostContent);
}
} }
} }

36
src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonPadContent.cs

@ -41,6 +41,37 @@ namespace ICSharpCode.SharpDevelop.Gui
placeholder.IsVisibleChanged += AvalonPadContent_IsVisibleChanged; placeholder.IsVisibleChanged += AvalonPadContent_IsVisibleChanged;
} }
public void ShowInDefaultPosition()
{
AnchorStyle style;
if ((descriptor.DefaultPosition & DefaultPadPositions.Top) != 0)
style = AnchorStyle.Top;
else if ((descriptor.DefaultPosition & DefaultPadPositions.Left) != 0)
style = AnchorStyle.Left;
else if ((descriptor.DefaultPosition & DefaultPadPositions.Bottom) != 0)
style = AnchorStyle.Bottom;
else
style = AnchorStyle.Right;
layout.DockingManager.Show(this, DockableContentState.Docked, style);
SetPaneSizeWorkaround(this.ContainerPane);
if ((descriptor.DefaultPosition & DefaultPadPositions.Hidden) != 0)
layout.DockingManager.Hide(this);
}
static void SetPaneSizeWorkaround(Pane pane)
{
ResizingPanel panel = pane.Parent as ResizingPanel;
if (panel != null) {
if (panel.Orientation == Orientation.Horizontal) {
if (ResizingPanel.GetResizeWidth(pane).Value == 0)
ResizingPanel.SetResizeWidth(pane, new GridLength(200));
} else if (panel.Orientation == Orientation.Vertical) {
if (ResizingPanel.GetResizeHeight(pane).Value == 0)
ResizingPanel.SetResizeHeight(pane, new GridLength(150));
}
}
}
void AvalonPadContent_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) void AvalonPadContent_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{ {
Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(LoadPadContentIfRequired)); Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(LoadPadContentIfRequired));
@ -83,5 +114,10 @@ namespace ICSharpCode.SharpDevelop.Gui
padInstance.Dispose(); padInstance.Dispose();
} }
} }
public override string ToString()
{
return "[AvalonPadContent " + this.Name + "]";
}
} }
} }

12
src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs

@ -92,17 +92,22 @@ namespace ICSharpCode.SharpDevelop.Gui
oldActiveViewContent = newActiveViewContent; oldActiveViewContent = newActiveViewContent;
CommandManager.InvalidateRequerySuggested(); CommandManager.InvalidateRequerySuggested();
var contextName = newActiveViewContent.GetType().FullName; if (newActiveViewContent != null) {
string contextName = newActiveViewContent.GetType().FullName;
CommandsRegistry.LoadContext(contextName, (UIElement)Content); CommandsRegistry.LoadContext(contextName, (UIElement)Content);
CommandsRegistry.RegisterCommandBindingsUpdateHandler(contextName, delegate { CommandsRegistry.RegisterCommandBindingsUpdateHandler(
contextName,
delegate {
var bindings = CommandsRegistry.GetCommandBindings(contextName); var bindings = CommandsRegistry.GetCommandBindings(contextName);
CommandsRegistry.RemoveManagedCommandBindings(CommandBindings); CommandsRegistry.RemoveManagedCommandBindings(CommandBindings);
CommandBindings.AddRange(bindings); CommandBindings.AddRange(bindings);
}); });
CommandsRegistry.RegisterInputBindingUpdateHandler(contextName, delegate { CommandsRegistry.RegisterInputBindingUpdateHandler(
contextName,
delegate {
var bindings = CommandsRegistry.GetInputBindings(contextName); var bindings = CommandsRegistry.GetInputBindings(contextName);
CommandsRegistry.RemoveManagedInputBindings(InputBindings); CommandsRegistry.RemoveManagedInputBindings(InputBindings);
InputBindings.AddRange(bindings); InputBindings.AddRange(bindings);
@ -110,6 +115,7 @@ namespace ICSharpCode.SharpDevelop.Gui
CommandsRegistry.InvokeCommandBindingUpdateHandlers(contextName); CommandsRegistry.InvokeCommandBindingUpdateHandlers(contextName);
CommandsRegistry.InvokeInputBindingUpdateHandlers(contextName); CommandsRegistry.InvokeInputBindingUpdateHandlers(contextName);
} }
}
sealed class ViewContentCollection : Collection<IViewContent> sealed class ViewContentCollection : Collection<IViewContent>
{ {

2
src/Main/Base/Project/Src/Gui/Workbench/Layouts/LayoutConfiguration.cs

@ -16,7 +16,7 @@ namespace ICSharpCode.SharpDevelop.Gui
{ {
public class LayoutConfiguration public class LayoutConfiguration
{ {
const string DataLayoutSubPath = "resources/layouts"; const string DataLayoutSubPath = "layouts";
const string configFile = "LayoutConfig.xml"; const string configFile = "LayoutConfig.xml";
public static readonly List<LayoutConfiguration> Layouts = new List<LayoutConfiguration>(); public static readonly List<LayoutConfiguration> Layouts = new List<LayoutConfiguration>();

10
src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs

@ -56,7 +56,7 @@ namespace ICSharpCode.SharpDevelop.Gui
public ISynchronizeInvoke SynchronizingObject { get; private set; } public ISynchronizeInvoke SynchronizingObject { get; private set; }
public Window MainWindow { get { return this; } } public Window MainWindow { get { return this; } }
List<PadDescriptor> padViewContentCollection = new List<PadDescriptor>(); List<PadDescriptor> padDescriptorCollection = new List<PadDescriptor>();
ToolBar[] toolBars; ToolBar[] toolBars;
@ -137,7 +137,7 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
} }
// keep a reference to the event handler to prevent it from being gargabe collected // keep a reference to the event handler to prevent it from being garbage collected
// (CommandManager.RequerySuggested only keeps weak references to the event handlers) // (CommandManager.RequerySuggested only keeps weak references to the event handlers)
EventHandler requerySuggestedEventHandler; EventHandler requerySuggestedEventHandler;
@ -180,7 +180,7 @@ namespace ICSharpCode.SharpDevelop.Gui
public IList<PadDescriptor> PadContentCollection { public IList<PadDescriptor> PadContentCollection {
get { get {
return padViewContentCollection.AsReadOnly(); return padDescriptorCollection.AsReadOnly();
} }
} }
@ -318,8 +318,10 @@ namespace ICSharpCode.SharpDevelop.Gui
{ {
if (content == null) if (content == null)
throw new ArgumentNullException("content"); throw new ArgumentNullException("content");
if (padDescriptorCollection.Contains(content))
throw new ArgumentException("Pad is already loaded");
padViewContentCollection.Add(content); padDescriptorCollection.Add(content);
if (WorkbenchLayout != null) { if (WorkbenchLayout != null) {
WorkbenchLayout.ShowPad(content); WorkbenchLayout.ShowPad(content);

15
src/Main/Base/Project/Src/Internal/Doozers/PadDescriptor.cs

@ -48,6 +48,8 @@ namespace ICSharpCode.SharpDevelop
/// </summary> /// </summary>
public PadDescriptor(Codon codon) public PadDescriptor(Codon codon)
{ {
if (codon == null)
throw new ArgumentNullException("codon");
addIn = codon.AddIn; addIn = codon.AddIn;
shortcut = codon.Properties["shortcut"]; shortcut = codon.Properties["shortcut"];
category = codon.Properties["category"]; category = codon.Properties["category"];
@ -64,6 +66,12 @@ namespace ICSharpCode.SharpDevelop
/// </summary> /// </summary>
public PadDescriptor(Type padType, string title, string icon) public PadDescriptor(Type padType, string title, string icon)
{ {
if (padType == null)
throw new ArgumentNullException("padType");
if (title == null)
throw new ArgumentNullException("title");
if (icon == null)
throw new ArgumentNullException("icon");
this.padType = padType; this.padType = padType;
this.@class = padType.FullName; this.@class = padType.FullName;
this.title = title; this.title = title;
@ -151,10 +159,8 @@ namespace ICSharpCode.SharpDevelop
public void CreatePad() public void CreatePad()
{ {
#if DEBUG
if (WorkbenchSingleton.InvokeRequired) if (WorkbenchSingleton.InvokeRequired)
throw new InvalidOperationException("This action could trigger pad creation and is only valid on the main thread!"); throw new InvalidOperationException("This action could trigger pad creation and is only valid on the main thread!");
#endif
if (!padContentCreated) { if (!padContentCreated) {
padContentCreated = true; padContentCreated = true;
try { try {
@ -179,5 +185,10 @@ namespace ICSharpCode.SharpDevelop
} }
WorkbenchSingleton.Workbench.WorkbenchLayout.ActivatePad(this); WorkbenchSingleton.Workbench.WorkbenchLayout.ActivatePad(this);
} }
public override string ToString()
{
return "[PadDescriptor " + this.Class + "]";
}
} }
} }

6
src/Main/Base/Project/Src/Project/IProject.cs

@ -85,6 +85,8 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary> /// <summary>
/// Gets/Sets the name of the project. /// Gets/Sets the name of the project.
///
/// Only the getter is thread-safe.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Name already exists in ISolutionFolder, it's repeated here to prevent /// Name already exists in ISolutionFolder, it's repeated here to prevent
@ -262,6 +264,7 @@ namespace ICSharpCode.SharpDevelop.Project
{ {
/// <summary> /// <summary>
/// Gets the list of projects on which this project depends. /// Gets the list of projects on which this project depends.
/// This method is thread-safe.
/// </summary> /// </summary>
ICollection<IBuildable> GetBuildDependencies(ProjectBuildOptions buildOptions); ICollection<IBuildable> GetBuildDependencies(ProjectBuildOptions buildOptions);
@ -273,16 +276,19 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary> /// <summary>
/// Gets the name of the buildable item. /// Gets the name of the buildable item.
/// This property is thread-safe.
/// </summary> /// </summary>
string Name { get; } string Name { get; }
/// <summary> /// <summary>
/// Gets the parent solution. /// Gets the parent solution.
/// This property is thread-safe.
/// </summary> /// </summary>
Solution ParentSolution { get; } Solution ParentSolution { get; }
/// <summary> /// <summary>
/// Creates the project-specific build options. /// Creates the project-specific build options.
/// This member must be implemented thread-safe.
/// </summary> /// </summary>
/// <param name="options">The global build options.</param> /// <param name="options">The global build options.</param>
/// <param name="isRootBuildable">Specifies whether this project is the main buildable item. /// <param name="isRootBuildable">Specifies whether this project is the main buildable item.

16
src/Setup/Files.wxs

@ -780,6 +780,14 @@
<File Source="..\..\data\options\StandardHeader.xml" Id="StandardHeader.xml" Name="StandardHeader.xml" /> <File Source="..\..\data\options\StandardHeader.xml" Id="StandardHeader.xml" Name="StandardHeader.xml" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="LayoutsFolder" Name="layouts">
<Component Guid="B982324C-D787-425E-BB2C-4EF4C983867D" Id="LayoutFiles" DiskId="1">
<File Source="..\..\data\layouts\Plain.xml" Name="Plain.xml" Id="Plain.xml" />
<File Source="..\..\data\layouts\Debug.xml" Name="Debug.xml" Id="Debug.xml" />
<File Source="..\..\data\layouts\Default.xml" Name="Default.xml" Id="Default.xml" />
<File Source="..\..\data\layouts\LayoutConfig.xml" Id="LayoutConfig.xml" Name="LayoutConfig.xml" />
</Component>
</Directory>
<Directory Id="ResourcesFolder" Name="resources"> <Directory Id="ResourcesFolder" Name="resources">
<Directory Id="CssFolder" Name="css"> <Directory Id="CssFolder" Name="css">
<Component Guid="458B2D53-EE43-4586-BDEB-E9AFF37F720B" Id="CssFiles" DiskId="1"> <Component Guid="458B2D53-EE43-4586-BDEB-E9AFF37F720B" Id="CssFiles" DiskId="1">
@ -833,14 +841,6 @@
<File Source="..\..\data\resources\languages\uk.png" Name="uk.png" Id="uk.png" /> <File Source="..\..\data\resources\languages\uk.png" Name="uk.png" Id="uk.png" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="LayoutsFolder" Name="layouts">
<Component Guid="B982324C-D787-425E-BB2C-4EF4C983867D" Id="LayoutFiles" DiskId="1">
<File Source="..\..\data\resources\layouts\Plain.xml" Name="Plain.xml" Id="Plain.xml" />
<File Source="..\..\data\resources\layouts\Debug.xml" Name="Debug.xml" Id="Debug.xml" />
<File Source="..\..\data\resources\layouts\Default.xml" Name="Default.xml" Id="Default.xml" />
<File Source="..\..\data\resources\layouts\LayoutConfig.xml" Id="LayoutConfig.xml" Name="LayoutConfig.xml" />
</Component>
</Directory>
<Component Guid="D8322576-2925-4F43-ACB0-05369DC5FC67" Id="StringResourceFiles" DiskId="1"> <Component Guid="D8322576-2925-4F43-ACB0-05369DC5FC67" Id="StringResourceFiles" DiskId="1">
<File Source="..\..\data\resources\StringResources.tr.resources" Id="StringResources.tr.resources" Name="StringResources.tr.resources" /> <File Source="..\..\data\resources\StringResources.tr.resources" Id="StringResources.tr.resources" Name="StringResources.tr.resources" />
<File Source="..\..\data\resources\StringResources.cz.resources" Id="StringResources.cz.resources" Name="StringResources.cz.resources" /> <File Source="..\..\data\resources\StringResources.cz.resources" Id="StringResources.cz.resources" Name="StringResources.cz.resources" />

Loading…
Cancel
Save