Browse Source

Implemented drag'n'drop from explorer onto WpfWorkbench to open files.

Reimplemented workbench tracking of renamed/delete files.
UpdateAssemblyInfo: use version number 0 when SVN revision cannot be read and no REVISION file is present.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4683 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
26f7c10d6d
  1. 12
      src/Main/Base/Project/Src/Gui/IWorkbench.cs
  2. 19
      src/Main/Base/Project/Src/Gui/Workbench/SingleInstanceHelper.cs
  3. 124
      src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs
  4. 3
      src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.xaml
  5. 22
      src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs
  6. 11
      src/Tools/UpdateAssemblyInfo/Main.cs
  7. BIN
      src/Tools/UpdateAssemblyInfo/bin/Debug/UpdateAssemblyInfo.exe

12
src/Main/Base/Project/Src/Gui/IWorkbench.cs

@ -157,18 +157,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -157,18 +157,6 @@ namespace ICSharpCode.SharpDevelop.Gui
/// </summary>
void CloseAllViews();
/// <summary>
/// Re-initializes all components of the workbench, should be called
/// when a special property is changed that affects layout stuff.
/// (like language change)
/// </summary>
void RedrawAllComponents();
/// <summary>
/// Updates the toolstrip renderer.
/// </summary>
void UpdateRenderer();
/// <summary>
/// Is called, when a workbench view was opened
/// </summary>

19
src/Main/Base/Project/Src/Gui/Workbench/SingleInstanceHelper.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <owner name="Daniel Grunwald"/>
// <version>$Revision$</version>
// </file>
@ -59,17 +59,18 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -59,17 +59,18 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
internal static bool PreFilterMessage(ref Message m)
internal static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (m.Msg != CUSTOM_MESSAGE)
return false;
long fileNumber = m.WParam.ToInt64();
long openEvenIfProjectIsOpened = m.LParam.ToInt64();
if (msg != CUSTOM_MESSAGE) {
return IntPtr.Zero;
}
handled = true;
long fileNumber = wParam.ToInt64();
long openEvenIfProjectIsOpened = lParam.ToInt64();
LoggingService.Info("Receiving custom message...");
if (openEvenIfProjectIsOpened == 0 && ProjectService.OpenSolution != null) {
m.Result = new IntPtr(RESULT_PROJECT_IS_OPEN);
return new IntPtr(RESULT_PROJECT_IS_OPEN);
} else {
m.Result = new IntPtr(RESULT_FILES_HANDLED);
try {
WorkbenchSingleton.SafeThreadAsyncCall(
delegate { NativeMethods.SetForegroundWindow(WorkbenchSingleton.MainWin32Window.Handle) ; }
@ -84,8 +85,8 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -84,8 +85,8 @@ namespace ICSharpCode.SharpDevelop.Gui
} catch (Exception ex) {
LoggingService.Warn(ex);
}
return new IntPtr(RESULT_FILES_HANDLED);
}
return true;
}
}
}

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

@ -16,6 +16,7 @@ using System.Windows; @@ -16,6 +16,7 @@ using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Navigation;
using ICSharpCode.Core;
@ -71,6 +72,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -71,6 +72,7 @@ namespace ICSharpCode.SharpDevelop.Gui
{
this.MainWin32Window = this.GetWin32Window();
base.OnSourceInitialized(e);
HwndSource.FromHwnd(this.MainWin32Window.Handle).AddHook(SingleInstanceHelper.WndProc);
}
public void Initialize()
@ -96,6 +98,13 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -96,6 +98,13 @@ namespace ICSharpCode.SharpDevelop.Gui
AddHandler(Hyperlink.RequestNavigateEvent, new RequestNavigateEventHandler(OnRequestNavigate));
Project.ProjectService.CurrentProjectChanged += SetProjectTitle;
FileService.FileRemoved += CheckRemovedOrReplacedFile;
FileService.FileReplaced += CheckRemovedOrReplacedFile;
FileService.FileRenamed += CheckRenamedFile;
FileService.FileRemoved += FileService.RecentOpen.FileRemoved;
FileService.FileRenamed += FileService.RecentOpen.FileRenamed;
requerySuggestedEventHandler = new EventHandler(CommandManager_RequerySuggested);
CommandManager.RequerySuggested += requerySuggestedEventHandler;
@ -133,6 +142,42 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -133,6 +142,42 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
void CheckRemovedOrReplacedFile(object sender, FileEventArgs e)
{
foreach (OpenedFile file in FileService.OpenedFiles) {
if (FileUtility.IsBaseDirectory(e.FileName, file.FileName)) {
foreach (IViewContent content in file.RegisteredViewContents.ToArray()) {
// content.WorkbenchWindow can be null if multiple view contents
// were in the same WorkbenchWindow and both should be closed
// (e.g. Windows Forms Designer, Subversion History View)
if (content.WorkbenchWindow != null) {
content.WorkbenchWindow.CloseWindow(true);
}
}
}
}
}
void CheckRenamedFile(object sender, FileRenameEventArgs e)
{
if (e.IsDirectory) {
foreach (OpenedFile file in FileService.OpenedFiles) {
if (file.FileName != null && FileUtility.IsBaseDirectory(e.SourceFile, file.FileName)) {
file.FileName = FileUtility.RenameBaseDirectory(file.FileName, e.SourceFile, e.TargetFile);
}
}
} else {
foreach (OpenedFile file in FileService.OpenedFiles) {
if (file.FileName != null &&
FileUtility.IsEqualFileName(file.FileName, e.SourceFile))
{
file.FileName = e.TargetFile;
return;
}
}
}
}
void UpdateMenu()
{
MenuService.UpdateStatus(mainMenu.ItemsSource);
@ -433,14 +478,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -433,14 +478,6 @@ namespace ICSharpCode.SharpDevelop.Gui
}
#endregion
public void RedrawAllComponents()
{
}
public void UpdateRenderer()
{
}
public Properties CreateMemento()
{
Properties prop = new Properties();
@ -467,6 +504,12 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -467,6 +504,12 @@ namespace ICSharpCode.SharpDevelop.Gui
{
base.OnClosing(e);
if (!e.Cancel) {
if (Project.ProjectService.IsBuilding) {
MessageService.ShowMessage(StringParser.Parse("${res:MainWindow.CannotCloseWithBuildInProgressMessage}"));
e.Cancel = true;
return;
}
Project.ProjectService.SaveSolutionPreferences();
while (WorkbenchSingleton.Workbench.WorkbenchWindowCollection.Count > 0) {
@ -488,6 +531,69 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -488,6 +531,69 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
protected override void OnDragEnter(DragEventArgs e)
{
try {
base.OnDragEnter(e);
if (!e.Handled) {
e.Effects = GetEffect(e.Data);
e.Handled = true;
}
} catch (Exception ex) {
MessageService.ShowError(ex);
}
}
protected override void OnDragOver(DragEventArgs e)
{
try {
base.OnDragOver(e);
if (!e.Handled) {
e.Effects = GetEffect(e.Data);
e.Handled = true;
}
} catch (Exception ex) {
MessageService.ShowError(ex);
}
}
DragDropEffects GetEffect(IDataObject data)
{
if (data != null && data.GetDataPresent(DataFormats.FileDrop)) {
string[] files = (string[])data.GetData(DataFormats.FileDrop);
foreach (string file in files) {
if (File.Exists(file)) {
return DragDropEffects.Link;
}
}
}
return DragDropEffects.None;
}
protected override void OnDrop(DragEventArgs e)
{
try {
base.OnDrop(e);
if (!e.Handled && e.Data != null && e.Data.GetDataPresent(DataFormats.FileDrop)) {
e.Handled = true;
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files) {
if (File.Exists(file)) {
Project.IProjectLoader loader = Project.ProjectService.GetProjectLoader(file);
if (loader != null) {
FileUtility.ObservedLoad(new NamedFileOperationDelegate(loader.Load), file);
} else {
FileService.OpenFile(file);
}
}
}
}
} catch (Exception ex) {
MessageService.ShowError(ex);
}
}
void InitFocusTrackingEvents()
{
#if DEBUG
@ -495,7 +601,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -495,7 +601,7 @@ namespace ICSharpCode.SharpDevelop.Gui
this.PreviewGotKeyboardFocus += new KeyboardFocusChangedEventHandler(WpfWorkbench_PreviewGotKeyboardFocus);
#endif
}
#if DEBUG
bool toggle;

3
src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.xaml

@ -4,7 +4,8 @@ @@ -4,7 +4,8 @@
xmlns:core = "http://icsharpcode.net/sharpdevelop/core"
Title = "{core:Localize MainWindow.DialogName}"
WindowStartupLocation = "Manual"
Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"
Background = "{DynamicResource {x:Static SystemColors.ControlBrushKey}}"
AllowDrop = "True"
>
<DockPanel Name="dockPanel">
<Menu Name="mainMenu" DockPanel.Dock="Top"/>

22
src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs

@ -57,25 +57,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -57,25 +57,6 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
/// <remarks>
/// This method handles the redraw all event for specific changed IDE properties
/// </remarks>
static void TrackPropertyChanges(object sender, PropertyChangedEventArgs e)
{
if (e.OldValue != e.NewValue && workbench != null) {
switch (e.Key) {
case "ICSharpCode.SharpDevelop.Gui.StatusBarVisible":
case "ICSharpCode.SharpDevelop.Gui.VisualStyle":
case "ICSharpCode.SharpDevelop.Gui.ToolBarVisible":
workbench.RedrawAllComponents();
break;
case "ICSharpCode.SharpDevelop.Gui.UseProfessionalRenderer":
workbench.UpdateRenderer();
break;
}
}
}
/// <summary>
/// Runs workbench initialization.
/// Is called by ICSharpCode.SharpDevelop.Sda and should not be called manually!
@ -106,9 +87,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -106,9 +87,6 @@ namespace ICSharpCode.SharpDevelop.Gui
WinFormsMessageService.DialogOwner = workbench.MainWin32Window;
WinFormsMessageService.DialogSynchronizeInvoke = workbench.SynchronizingObject;
PropertyService.PropertyChanged += new PropertyChangedEventHandler(TrackPropertyChanges);
ResourceService.LanguageChanged += delegate { workbench.RedrawAllComponents(); };
workbench.Initialize();
workbench.SetMemento(PropertyService.Get(workbenchMemento, new Properties()));
workbench.WorkbenchLayout = layout;

11
src/Tools/UpdateAssemblyInfo/Main.cs

@ -188,12 +188,6 @@ namespace UpdateAssemblyInfo @@ -188,12 +188,6 @@ namespace UpdateAssemblyInfo
Console.WriteLine("The revision number of the SharpDevelop version being compiled could not be retrieved.");
Console.WriteLine();
Console.WriteLine("Build continues with revision number '0'...");
try {
Process[] p = Process.GetProcessesByName("msbuild");
if (p != null && p.Length > 0) {
System.Threading.Thread.Sleep(3000);
}
} catch {}
return "0";
}
}
@ -220,8 +214,9 @@ namespace UpdateAssemblyInfo @@ -220,8 +214,9 @@ namespace UpdateAssemblyInfo
if (revisionNumber == null || revisionNumber.Length == 0 || revisionNumber == "0") {
revisionNumber = ReadRevisionFromFile();
}
if (revisionNumber == null || revisionNumber.Length == 0 || revisionNumber == "0") {
throw new ApplicationException("Error reading revision number");
if (revisionNumber == null || revisionNumber.Length == 0) {
revisionNumber = "0";
//throw new ApplicationException("Error reading revision number");
}
}
#endregion

BIN
src/Tools/UpdateAssemblyInfo/bin/Debug/UpdateAssemblyInfo.exe

Binary file not shown.
Loading…
Cancel
Save