Browse Source

Added backgroundworker for loading metadata from connection, and added progress indicators in the form or varying length ellipses after the 'loading' message. Also added obj and bin directories to ignore list.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1937 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Dickon Field 20 years ago
parent
commit
2776cc0363
  1. 1
      src/AddIns/Misc/SharpServerTools/ServerBrowserTool/ServerBrowserTool.csproj
  2. 56
      src/AddIns/Misc/SharpServerTools/ServerBrowserTool/Src/Forms/ProgressEllipsis.cs
  3. 88
      src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/DbModelInfoTreeNode.cs

1
src/AddIns/Misc/SharpServerTools/ServerBrowserTool/ServerBrowserTool.csproj

@ -46,6 +46,7 @@ @@ -46,6 +46,7 @@
<Compile Include="Src\Forms\RebuildRequiredEvents.cs" />
<Compile Include="Src\Forms\ServerBrowserTool.cs" />
<Compile Include="Src\Configuration\AssemblyInfo.cs" />
<Compile Include="Src\Forms\ProgressEllipsis.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Src" />

56
src/AddIns/Misc/SharpServerTools/ServerBrowserTool/Src/Forms/ProgressEllipsis.cs

@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
/*
* User: dickon
* Date: 23/10/2006
* Time: 09:01
*
*/
using System;
using System.Text;
namespace SharpServerTools.Forms
{
/// <summary>
/// Shows progress as a series of ellipses. Not threadsafe.
/// </summary>
public class ProgressEllipsis
{
int noOfDots;
StringBuilder currentString;
int currentValue;
public ProgressEllipsis()
{
}
public ProgressEllipsis(int noOfDots)
{
this.noOfDots = noOfDots;
currentString = new StringBuilder();
currentValue = 0;
}
public void performStep()
{
currentValue++;
if ((currentValue % noOfDots) == 0) {
currentValue = 0;
currentString.Remove(0, currentString.Length-1);
} else {
currentString.Append(".");
}
}
public string Text {
get {
return currentString.ToString();
}
}
public int Value {
set {
this.currentValue = value;
}
}
}
}

88
src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/DbModelInfoTreeNode.cs

@ -25,7 +25,12 @@ namespace SharpDbTools.Forms @@ -25,7 +25,12 @@ namespace SharpDbTools.Forms
/// </summary>
public class DbModelInfoTreeNode: TreeNode, IRequiresRebuildSource
{
BackgroundWorker loadMetadataFromFileBackgroundWorker;
BackgroundWorker backgroundWorker;
ProgressEllipsis progress;
Timer timer;
const string fileLoadMessage = ": loading from file";
const string connectionLoadMessage = ": loading from connection";
string message;
public DbModelInfoTreeNode(string name): base(name)
{
@ -65,6 +70,11 @@ namespace SharpDbTools.Forms @@ -65,6 +70,11 @@ namespace SharpDbTools.Forms
TreeNode dbNode = CreateMetaDataNode(this.LogicalConnectionName);
this.Nodes.Add(connectionPropsNode);
this.Nodes.Add(dbNode);
timer = new Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(this.TimerClick);
progress = new ProgressEllipsis(4);
}
public string LogicalConnectionName {
@ -192,16 +202,37 @@ namespace SharpDbTools.Forms @@ -192,16 +202,37 @@ namespace SharpDbTools.Forms
private void LoadMetadataFromFileClickHandler(object sender, EventArgs e)
{
LoggingService.Debug("load metadata from file clicked");
this.loadMetadataFromFileBackgroundWorker = new BackgroundWorker();
loadMetadataFromFileBackgroundWorker.DoWork += new DoWorkEventHandler(this.LoadMetadataFromFileDoWork);
loadMetadataFromFileBackgroundWorker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(this.LoadMetadataFromFileFinished);
this.backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += new DoWorkEventHandler(this.LoadMetadataFromFileDoWork);
backgroundWorker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(this.LoadMetadataFinished);
string logicalConnectionName = (string)this.Tag;
this.Text = logicalConnectionName + ": loading...";
this.message = logicalConnectionName + fileLoadMessage;
this.ContextMenuStrip.Enabled = false;
this.loadMetadataFromFileBackgroundWorker.RunWorkerAsync(logicalConnectionName);
timer.Start();
this.backgroundWorker.RunWorkerAsync(logicalConnectionName);
}
private void TimerClick(object sender, EventArgs eventArgs)
{
string ellipsis = progress.Text;
progress.performStep();
string displayMsg = this.message + ellipsis;
SetText(displayMsg);
}
delegate void TextSetterDelegate(string text);
public void SetText(string text)
{
if (this.TreeView.InvokeRequired) {
this.TreeView.Invoke(new TextSetterDelegate(this.SetText), new object[] { text });
return;
}
this.Text = text;
}
private void LoadMetadataFromFileDoWork(object sender, DoWorkEventArgs args)
{
string logicalConnectionName = args.Argument as string;
@ -210,26 +241,47 @@ namespace SharpDbTools.Forms @@ -210,26 +241,47 @@ namespace SharpDbTools.Forms
}
}
private void LoadMetadataFromFileFinished(object sender, RunWorkerCompletedEventArgs args)
private void LoadMetadataFinished(object sender, RunWorkerCompletedEventArgs args)
{
if (this.TreeView.InvokeRequired) {
this.TreeView.Invoke(new EventHandler<RunWorkerCompletedEventArgs>
(this.LoadMetadataFinished));
return;
}
this.timer.Stop();
this.Text = (string)this.Tag;
this.ContextMenuStrip.Enabled = true;
this.backgroundWorker.Dispose();
this.backgroundWorker = null;
this.FireRebuildRequired();
}
private void LoadMetadataFromConnectionClickHandler(object sender, EventArgs args)
{
string connectionLogicalName = this.Text;
LoggingService.Debug("load metadata from connection clicked for connection with name: "
+ connectionLogicalName);
try {
DbModelInfoService.LoadMetadataFromConnection(connectionLogicalName);
}
catch(DbException e) {
MessageService.ShowError(e,
"An Exception was thrown while trying to connect to: " + connectionLogicalName);
LoggingService.Debug("load metadata from connection clicked");
this.backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += new DoWorkEventHandler(this.LoadMetadataFromConnectionDoWork);
backgroundWorker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(this.LoadMetadataFinished);
string logicalConnectionName = (string)this.Tag;
this.message = logicalConnectionName + connectionLoadMessage;
this.ContextMenuStrip.Enabled = false;
timer.Start();
this.backgroundWorker.RunWorkerAsync(logicalConnectionName);
}
private void LoadMetadataFromConnectionDoWork(object sender, DoWorkEventArgs args)
{
string connectionLogicalName = args.Argument as string;
if (connectionLogicalName != null) {
try {
DbModelInfoService.LoadMetadataFromConnection(connectionLogicalName);
}
catch(DbException e) {
MessageService.ShowError(e,
"An Exception was thrown while trying to connect to: " + connectionLogicalName);
}
}
this.FireRebuildRequired();
}
}
}

Loading…
Cancel
Save