init: 导入项目到 meswork Gitea

This commit is contained in:
XingCheng3
2026-05-29 10:07:05 +08:00
commit ad9a4106fb
3582 changed files with 460312 additions and 0 deletions

View File

@@ -0,0 +1,163 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{03AED807-CA2D-4823-B321-41C470174F0B}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Braincase.GanttChart</RootNamespace>
<AssemblyName>GanttChartExample</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>Mes32X32.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Chart\Chart.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Chart\Chart.Designer.cs">
<DependentUpon>Chart.cs</DependentUpon>
</Compile>
<Compile Include="Chart\IProject.cs" />
<Compile Include="Chart\PlaySlider.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Chart\Project.cs" />
<Compile Include="Chart\Viewport.cs" />
<Compile Include="ExampleFull.Play.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ExampleSimple.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ExampleSimple.Designer.cs">
<DependentUpon>ExampleSimple.cs</DependentUpon>
</Compile>
<Compile Include="ExampleFull.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ExampleFull.Designer.cs">
<DependentUpon>ExampleFull.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Chart\Chart.resx">
<DependentUpon>Chart.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ExampleSimple.resx">
<DependentUpon>ExampleSimple.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ExampleFull.resx">
<DependentUpon>ExampleFull.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="Mes32X32.ico" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LogNet\20-01LogNet.csproj">
<Project>{4b777069-a494-40ff-8e88-e3d815ed80cb}</Project>
<Name>20-01LogNet</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,47 @@
namespace Braincase.GanttChart
{
partial class Chart
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// Chart
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Margin = new System.Windows.Forms.Padding(0);
this.Name = "Chart";
this.Size = new System.Drawing.Size(469, 439);
this.ResumeLayout(false);
}
#endregion
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,410 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
namespace Braincase.GanttChart
{
/// <summary>
/// Passive data class holding schedule information
/// </summary>
[Serializable]
public class Task
{
/// <summary>
/// Initialize a new task to hold schedule information
/// </summary>
public Task()
{
Complete = 0.0f;
Start = 0;
End = 1;
Duration = 1;
Slack = 0;
TagValue = "1";
BackFill = Brushes.MediumSlateBlue;
}
/// <summary>
/// Get or set Task background color
/// </summary>
public Brush BackFill { get; set; }
/// <summary>
/// Get or set the Name of this Task
/// </summary>
public string Name { get; set; }
/// <summary>
/// Indicate whether this task is collapsed such that sub tasks are hidden from view. Only groups can be collasped.
/// </summary>
public bool IsCollapsed { get; set; }
/// <summary>
/// Get or set the pecentage complete of this task, expressed in float between 0.0 and 1.0f.
/// </summary>
public float Complete { get; internal set; }
public string ID { get; internal set; }
/// <summary>
/// Task类型 1:工艺路径规划2零件是否可见3机器人4信号点
/// </summary>
public int Type { get; internal set; }
/// <summary>
/// 变量代码
/// </summary>
public string TagID { get; internal set; }
/// <summary>
/// 变量值
/// </summary>
public string TagValue { get; internal set; }
/// <summary>
/// 变量值
/// </summary>
public int TagFrom { get; internal set; }
/// <summary>
/// 变量值
/// </summary>
public string OpName { get; internal set; }
/// <summary>
/// 拷贝变量值
/// </summary>
public string TagIDCopyFrom { get; internal set; }
/// <summary>
/// 模型代码
/// </summary>
public int ModelCode { get; internal set; }
/// <summary>
/// 模型是否可见
/// </summary>
public int Visible { get; internal set; }
/// <summary>
/// 机器人脚本
/// </summary>
public string ScriptText { get; internal set; }
/// <summary>
/// Get the start time of this Task relative to the project start
/// </summary>
public float Start { get; internal set; }
/// <summary>
/// Get the end time of this Task relative to the project start
/// </summary>
public float End { get; internal set; }
/// <summary>
/// Get the duration of this Task
/// </summary>
public float Duration { get; internal set; }
/// <summary>
/// Get the amount of slack (free float)
/// </summary>
public float Slack { get; internal set; }
/// <summary>
/// Convert this Task to a descriptive string
/// </summary>
/// <returns></returns>
public override string ToString()
{
// return string.Format("[Name = {0}, Start = {1}, End = {2}, Duration = {3}, Complete = {4}, TagID = {5}, TagValue = {6}, ModelCode = {7}]", Name, Start, End, Duration, Complete, TagID, TagValue, ModelCode);
return string.Format("[ID = {0}, TagID = {1},Name = {2}, TagValue = {3},StartTime = {4}, KeepTime = {5},EndTime = {6}]", ID, TagID, Name, TagValue, Start, Duration, End);
}
}
/// <summary>
/// Time scale in which the time units represent
/// </summary>
public enum TimeScale
{
/// <summary>
/// Unit time in Days
/// </summary>
Day,
/// <summary>
/// Unit time in Weeks
/// </summary>
Week,
/// <summary>
/// Unit time in Others
/// </summary>
Other
}
/// <summary>
/// ProjectManager interface
/// </summary>
/// <typeparam name="T">Task class type</typeparam>
/// <typeparam name="R">Resource class type</typeparam>
public interface IProjectManager<T, R>
where T : Task
where R : class
{
/// <summary>
/// Add task to project manager
/// </summary>
/// <param name="task"></param>
void Add(T task);
/// <summary>
/// Delete task from project manager
/// </summary>
/// <param name="task"></param>
void Delete(T task);
/// <summary>
/// Group the member task under the group task. Group task cannot have relations.
/// </summary>
/// <param name="group"></param>
/// <param name="member"></param>
void Group(T group, T member);
/// <summary>
/// Ungroup member task from group task. If there are no more task under group, group will become a normal task.
/// </summary>
/// <param name="group"></param>
/// <param name="member"></param>
void Ungroup(T group, T member);
/// <summary>
/// Split the specified task into consecutive parts part1 and part2.
/// </summary>
/// <param name="task">The regular task to split which has duration of at least 2 to make two parts of 1 time unit duration each.</param>
/// <param name="part1">New Task part (1) of the split task, with the start time of the original task and the specified duration value.</param>
/// <param name="part2">New Task part (2) of the split task, starting 1 time unit after part (1) ends and having the remaining of the duration of the origina task.</param>
/// <param name="duration">The duration of part (1) will be set to the specified duration value but will also be adjusted to approperiate value if necessary.</param>
void Split(T task, T part1, T part2, float duration);
/// <summary>
/// Split the specified part and obtain another part from it.
/// </summary>
/// <param name="part">The task part to split which has duration of at least 2 to make two parts of 1 time unit duration each. Its duration will be set to the specified duration value.</param>
/// <param name="another">New Task part of the original part, starting 1 time unit after it ends and having the remaining of the duration of the original part.</param>
/// <param name="duration">The duration of part (1) will be set to the specified duration value but will also be adjusted to approperiate value if necessary.</param>
void Split(T part, T another, float duration);
/// <summary>
/// Join part1 and part2 in a split task into a single part represented by part1, and part2 will be deleted from the ProjectManager.
/// The resulting part will have a duration total of the two parts. Schedule of other parts will be packed according to direction of join.
/// If the join will result in only one part remaining, the split task will merge instead.
/// </summary>
/// <param name="part1">The part to keep in the ProjectManager after the join completes successfully.</param>
/// <param name="part2">The part to join into part1 and be deleted afterwards from the ProjectManager.</param>
void Join(T part1, T part2);
/// <summary>
/// Merge all the parts of the splitted task back into one task, having duration equal to sum of total duration of individual task parts, and aggregating the resources onto the resulting task.
/// </summary>
/// <param name="split">The split Task to merge</param>
void Merge(T split);
/// <summary>
/// Get the parts of the split task
/// </summary>
/// <param name="split"></param>
/// <returns></returns>
IEnumerable<T> PartsOf(T split);
/// <summary>
/// Get the split task that the specified part belogs to.
/// </summary>
/// <param name="part"></param>
/// <returns></returns>
T SplitTaskOf(T part);
/// <summary>
/// Get whether the specified task is a split task
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
bool IsSplit(T task);
/// <summary>
/// Get whether the specified task is a part of a split task
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
bool IsPart(T task);
/// <summary>
/// Ungroup all member task under the specfied group task. The specified group task will become a normal task.
/// </summary>
/// <param name="group"></param>
void Ungroup(T group);
/// <summary>
/// Move the specified task by offset positions in the task enumeration
/// </summary>
/// <param name="task"></param>
/// <param name="offset"></param>
void Move(T task, int offset);
/// <summary>
/// Set a relation between the precedent and dependant task
/// </summary>
/// <param name="precedent"></param>
/// <param name="dependant"></param>
void Relate(T precedent, T dependant);
/// <summary>
/// Unset the relation between the precedent and dependant task, if any.
/// </summary>
/// <param name="precedent"></param>
/// <param name="dependant"></param>
void Unrelate(T precedent, T dependant);
/// <summary>
/// Remove all dependant task from specified precedent task
/// </summary>
/// <param name="precedent"></param>
void Unrelate(T precedent);
/// <summary>
/// Enumerate through all tasks that is a precedent, having dependants.
/// </summary>
IEnumerable<T> Precedents { get; }
/// <summary>
/// Enumerate through all the tasks in the ProjectManager.
/// If there are no change to groups and no add/delete tasks, the order between consecutive calls is preserved.
/// </summary>
IEnumerable<T> Tasks { get; }
/// <summary>
/// Set the start time of the specified task.
/// </summary>
/// <param name="task"></param>
/// <param name="start">Number of timescale units after ProjectManager.Start</param>
void SetStart(T task, float start);
/// <summary>
/// Set the end time of the specified task. Duration is automatically adjusted to satisfy.
/// </summary>
/// <param name="task"></param>
/// <param name="end">Number of timescale units after ProjectManager.Start</param>
void SetEnd(T task, float end);
/// <summary>
/// Set the duration of the specified task from start to end.
/// </summary>
/// <param name="task"></param>
/// <param name="duration">Number of timescale units between ProjectManager.Start</param>
void SetDuration(T task, float duration);
/// <summary>
/// Set the percentage complete of the specified task from 0.0f to 1.0f.
/// No effect on group tasks as they will get the aggregated percentage complete of all child tasks
/// </summary>
/// <param name="task"></param>
/// <param name="complete"></param>
void SetComplete(T task, float complete);
/// <summary>
/// Set whether to collapse the specified group task. No effect on regular tasks.
/// </summary>
/// <param name="group"></param>
/// <param name="collasped"></param>
void SetCollapse(T group, bool collasped);
/// <summary>
/// Set the "now" time. Its value is the number of timescale units after the start time.
/// </summary>
int Now { get; }
/// <summary>
/// Set the start date of the project.
/// </summary>
DateTime Start { get; set; }
/// <summary>
/// Get the zero-based index of the specified task
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
int IndexOf(T task);
/// <summary>
/// Enumerate through parent group and grandparent groups of the specified task
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
IEnumerable<T> AncestorsOf(T task);
/// <summary>
/// Enumerate through all the children and grandchildren of the specified group
/// </summary>
/// <param name="group"></param>
/// <returns></returns>
IEnumerable<T> DecendantsOf(T group);
/// <summary>
/// Enumerate through all the direct children of the specified group
/// </summary>
/// <param name="group"></param>
/// <returns></returns>
IEnumerable<T> ChildrenOf(T group);
/// <summary>
/// Enumerate through all the direct precedents and indirect precedents of the specified task
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
IEnumerable<T> PrecedentsOf(T task);
/// <summary>
/// Enumerate through all the direct dependants and indirect dependants of the specified task
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
IEnumerable<T> DependantsOf(T task);
/// <summary>
/// Enumerate through all the direct precedents of the specified task
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
IEnumerable<T> DirectPrecedentsOf(T task);
/// <summary>
/// Enumerate through all the direct dependants of the specified task
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
IEnumerable<T> DirectDependantsOf(T task);
/// <summary>
/// Enumerate through all the critical paths. Each path is an enumerable of tasks, starting from the final task of each path.
/// </summary>
IEnumerable<IEnumerable<T>> CriticalPaths { get; }
/// <summary>
/// Get the parent group of the specified task
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
T ParentOf(T task);
/// <summary>
/// Get whether the specified task is a group
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
bool IsGroup(T task);
/// <summary>
/// Get whether the specified task is a member
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
bool IsMember(T task);
/// <summary>
/// Get whether the specified task has relations, either has dependants or has precedents connecting to it.
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
bool HasRelations(T task);
/// <summary>
/// Assign the specified resource to the specified task
/// </summary>
/// <param name="task"></param>
/// <param name="resource"></param>
void Assign(T task, R resource);
/// <summary>
/// Unassign the specified resource from the specfied task
/// </summary>
/// <param name="task"></param>
/// <param name="resource"></param>
void Unassign(T task, R resource);
/// <summary>
/// Unassign all resources from the specified task
/// </summary>
/// <param name="task"></param>
void Unassign(T task);
/// <summary>
/// Unassign the specified resource from all tasks that has this resource assigned
/// </summary>
/// <param name="resource"></param>
void Unassign(R resource);
/// <summary>
/// Enumerate through all the resources that has been assigned to some task.
/// </summary>
IEnumerable<R> Resources { get; }
/// <summary>
/// Enumerate through all the resources that has been assigned to the specified task.
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
IEnumerable<R> ResourcesOf(T task);
/// <summary>
/// Enumerate through all the tasks that has the specified resource assigned to it.
/// </summary>
/// <param name="resource"></param>
/// <returns></returns>
IEnumerable<T> TasksOf(R resource);
}
}

View File

@@ -0,0 +1,216 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Braincase.GanttChart
{
/// <summary>
/// 绘制播放滑动条
/// </summary>
public partial class Chart
{
public enum ControlState//按钮状态
{
Normal,
Hover,
Pressed,
Focused,
}
private ControlState _controlState = ControlState.Normal;
private ControlState MouseState
{
get { return _controlState; }
set
{
if (_controlState != value)
{
_controlState = value;
base.Invalidate();
}
}
}
private bool isMouseDown = false;
/// <summary>
/// 确定拖拽范围
/// </summary>
RectangleF PlayMaskRectDragDrop;
private int _minValue = 0;
private int _maxValue = 100;
private int _currValue = 0;
private int offset = 0;//轨道距离两头的余量.
private Size _sliderSize = new Size(1, 20);//滑块大小
public int Value
{
get { return this._currValue; }
set
{
this._currValue = value;
}
}
/// <summary>
/// Occurs when a Task is being dragged by the mouse
/// </summary>
public event EventHandler<MouseEventArgs> PlaySliderMouseDrag = null;
private void OnMouseMove_PlaySlider(MouseEventArgs e)
{
if (!this.isMouseDown)
{
this.MouseState = this.IsInSliderArea(e.Location) ? ControlState.Hover : this.MouseState = ControlState.Normal;
}
else
{
if (e.Button == MouseButtons.Left)
{
this.MouseState = ControlState.Pressed;
this.ChangeValue(e.Location);
PlaySliderMouseDrag(this, e);
//OnPlaySliderMouseDrop
}
}
}
private void OnMouseDown_PlaySlider(MouseEventArgs e)
{
base.Focus();
if (e.Button == MouseButtons.Left)
{
if (this.IsInSliderArea(e.Location))//滑块内.
{
this.isMouseDown = true;
this.MouseState = ControlState.Pressed;
}
}
}
private void OnMouseUp_PlaySlider(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left )
{
this.isMouseDown = false;
this.MouseState = this.IsInSliderArea(e.Location) ? ControlState.Hover : ControlState.Normal;
}
}
protected override void OnMouseLeave(EventArgs e)
{
if (!this.isMouseDown)
{
this.MouseState = ControlState.Normal;
}
base.OnMouseLeave(e);
}
protected override void OnMouseCaptureChanged(EventArgs e)
{
if (!base.Capture)//未捕获鼠标
{
isMouseDown = false;
}
base.OnMouseCaptureChanged(e);
}
//单击或滑动改变值
private void ChangeValue(Point mouse )
{
//_mProject.NowIndex
// int NowIndex;
var point = _mViewport.DeviceToWorldCoord(mouse);
_maxValue = (int)_mProject.MaxPlayLenth;;
//if (point.X <= this.ClientRectangle.X + offset + this._sliderSize.Width / 2f)
if (point.X <= _minValue + offset + this._sliderSize.Width / 2f)
{
this.Value = this._minValue;
return;
}
//if (point.X >= this.ClientRectangle.Right - offset - this._sliderSize.Width / 2f)
if (point.X >= _maxValue - offset - this._sliderSize.Width / 2f)
{
this.Value = this._maxValue;
return;
}
float len = point.X - this._sliderSize.Width / 2f - offset;
var percent = len / (_maxValue - this._sliderSize.Width - 2 * offset);
//var percent = len / (this.ClientRectangle.Width - this._sliderSize.Width - 2 * offset);
var v = this._minValue + (int)((this._maxValue - this._minValue) * percent);
if (v > this._maxValue) { v = this._maxValue; }
if (v < this._minValue) { v = this._minValue; }
this.Value = v;
_mProject.NowIndexXf = v;
_mProject.NowIndex = (int)(_mProject.AllCountFrame* percent);
}
protected virtual void OnPlaySliderMouseDrop(TaskDragDropEventArgs e)
{
this.Invalidate();
}
//鼠标落点是否在滑块内
private bool IsInSliderArea(Point point)
{
var chartcoord = _mViewport.DeviceToWorldCoord(point);
return PlayMaskRectDragDrop.Contains(chartcoord);
}
/// <summary>
/// 绘制播放线
/// </summary>
/// <param name="graphics"></param>
private void OnPaint_PlaySlider(Graphics graphics)
{
//正常播放
DrawPlayLine(graphics);
}
/// <summary>
/// 绘制播放线
/// </summary>
/// <param name="graphics"></param>
private void DrawPlayLine(Graphics graphics)
{
try
{
if (float.NaN == _mProject.NowIndexXf) return;
float xf1 = _mProject.NowIndexXf;
Pen pen = new Pen(Color.Red);
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
pen.Width = 1;
graphics.DrawLine(pen, new PointF(xf1, _mViewport.Y), new PointF(xf1, _mViewport.Rectangle.Bottom));
Color color = System.Drawing.Color.FromArgb(((int)(((byte)(34)))), ((int)(((byte)(54)))), ((int)(((byte)(82)))));
Brush brushes = new SolidBrush(color);
PointF[] point = new PointF[3];
float h0 = 6f;
PlayMaskRectDragDrop = new Rectangle((int)(xf1 - h0), (int)_mViewport.Y, (int)(2 * h0), (int)(_mViewport.Y + 2 * h0));
point[0] = new PointF(xf1 - h0, _mViewport.Y);
point[1] = new PointF(xf1 + h0, _mViewport.Y);
point[2] = new PointF(xf1, _mViewport.Y + 2.0f * h0);
graphics.FillPolygon(brushes, point);
}
catch
{
}
//graphics.DrawRectangle(new Pen(Color.Red), PlayMaskRectDragDrop);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,494 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace Braincase.GanttChart
{
/// <summary>
/// IViewport moves in world coordinate and projects models to device coordinate space
/// </summary>
public interface IViewport
{
/// <summary>
/// Get the projection matrix to transform world coordinates to device coordinates
/// </summary>
Matrix Projection { get; }
/// <summary>
/// Get the rectangle boundary in world coordinates to be captured and projected onto viewport
/// </summary>
RectangleF Rectangle { get; }
/// <summary>
/// Request viewport to recalculate its get properties.
/// </summary>
void Resize();
/// <summary>
/// Convert device coordinates to world coordinates
/// </summary>
/// <param name="screencoord"></param>
/// <returns></returns>
PointF DeviceToWorldCoord(Point screencoord);
/// <summary>
/// Convert device coordinates to world coordinates
/// </summary>
/// <param name="screencoord"></param>
/// <returns></returns>
PointF DeviceToWorldCoord(PointF screencoord);
/// <summary>
/// Convert world coordinates to device coordinates
/// </summary>
/// <param name="worldcoord"></param>
/// <returns></returns>
PointF WorldToDeviceCoord(PointF worldcoord);
/// <summary>
/// Get or set the world height
/// </summary>
float WorldHeight { get; set; }
/// <summary>
/// Get or set the world width
/// </summary>
float WorldWidth { get; set; }
/// <summary>
/// Get or set the X world-coordinate of the position of the viewport.
/// This is also the same as the IViewport.Rectangle.Left.
/// </summary>
float X { get; set; }
/// <summary>
/// Get or set the Y world-coordinate of the position of the viewport.
/// This is also the same as the IViewport.Rectangle.Top.
/// </summary>
float Y { get; set; }
}
/// <summary>
/// IViewport for printing to file
/// </summary>
class PrintViewport : IViewport
{
public PrintViewport(Graphics graphics,
float worldWidth, float worldHeight,
int deviceWidth, int deviceHeight,
int marginLeft, int marginTop)
{
WorldWidth = worldWidth;
WorldHeight = worldHeight;
_mDeviceWidth = deviceWidth;
_mDeviceHeight = deviceHeight;
_mMarginTop = marginTop;
_mMarginLeft = marginLeft;
}
/// <summary>
/// Get or set viewport X world coordinate
/// </summary>
public float X { get; set; }
/// <summary>
/// Get or set viewport Y world coordinate
/// </summary>
public float Y { get; set; }
/// <summary>
/// Get or set scaling factor between 0.0f and 1.0f (obviously, scale of zero would mean you can't see anything)
/// </summary>
public float Scale { get { return _mScale; } set { _mScale = value; } }
/// <summary>
/// Get or set width of the world
/// </summary>
public float WorldWidth { get; set; }
/// <summary>
/// Get or set height of the world
/// </summary>
public float WorldHeight { get; set; }
/// <summary>
/// Get the projection matrix for transforming models into viewport
/// </summary>
public Matrix Projection
{
get
{
Matrix matrix = new Matrix();
matrix.Translate(this._mMarginLeft, this._mMarginTop);
matrix.Scale(_mScale, _mScale);
matrix.Translate(-this.X, -this.Y);
return matrix;
}
}
/// <summary>
/// Get the rectangle bounds of the viewport in world coordinate
/// </summary>
public RectangleF Rectangle
{
get { return new RectangleF(this.X, this.Y, _mDeviceWidth / _mScale, _mDeviceHeight / _mScale); }
}
/// <summary>
/// Resize the viewport, recalculating and correcting dimensions
/// </summary>
public void Resize()
{
}
/// <summary>
/// Convert view coordinates to world coordinate
/// </summary>
/// <param name="screencoord"></param>
/// <returns></returns>
public PointF DeviceToWorldCoord(Point screencoord)
{
return new PointF(screencoord.X + X, screencoord.Y + Y);
}
/// <summary>
/// Convert view coordinates to world coordinate
/// </summary>
/// <param name="screencoord"></param>
/// <returns></returns>
public PointF DeviceToWorldCoord(PointF screencoord)
{
return new PointF(screencoord.X + X, screencoord.Y + Y);
}
/// <summary>
/// Convert world coordinates to view coordinate
/// </summary>
/// <param name="worldcoord"></param>
/// <returns></returns>
public PointF WorldToDeviceCoord(PointF worldcoord)
{
return new PointF(worldcoord.X - X, worldcoord.Y - Y);
}
int _mDeviceWidth, _mDeviceHeight;
int _mMarginLeft, _mMarginTop;
float _mScale = 1.0f;
}
/// <summary>
/// An IViewport that is placed over a world coordinate system and provides methods to transform between world and view coordinates
/// </summary>
class ControlViewport : IViewport
{
/// <summary>
/// Construct a Viewport
/// </summary>
/// <param name="view"></param>
public ControlViewport(Control view)
{
_mDevice = view;
_mhScroll = new HScrollBar();
_mvScroll = new VScrollBar();
_mScrollHolePatch = new UserControl();
WorldWidth = view.Width;
WorldHeight = view.Height;
_mDevice.Controls.Add(_mhScroll);
_mDevice.Controls.Add(_mvScroll);
_mDevice.Controls.Add(_mScrollHolePatch);
_mhScroll.Scroll += (s, e) => X = e.NewValue;
_mvScroll.Scroll += (s, e) => Y = e.NewValue;
_mDevice.Resize += (s, e) => this.Resize();
_mDevice.MouseWheel += (s, e) => Y -= e.Delta > 0 ? WheelDelta : -WheelDelta;
WheelDelta = _mvScroll.LargeChange;
_RecalculateMatrix();
_RecalculateRectangle();
}
/// <summary>
/// Identity Matrix
/// </summary>
public static readonly Matrix Identity = new Matrix(1, 0, 0, 1, 0, 0);
/// <summary>
/// Get or set the number of pixels to scroll on each click of the mouse
/// </summary>
public int WheelDelta { get; set; }
/// <summary>
/// Get the Rectangle area in world coordinates where the Viewport is currently viewing over
/// </summary>
public RectangleF Rectangle
{
get
{
return _mRectangle;
}
}
/// <summary>
/// Get the projection transformation matrix required for drawing models in the world projected into view
/// </summary>
public Matrix Projection
{
get
{
return _mMatrix;
}
}
/// <summary>
/// Resize the Viewport according to the view control and world dimensions, which ever larger and add scrollbars where approperiate
/// </summary>
public void Resize()
{
if (WorldWidth <= _mDevice.Width)
{
_mhScroll.Hide();
}
else
{
_mhScroll.Show();
_mhScroll.Maximum = (int)(WorldWidth - _mDevice.Width);
_mhScroll.Dock = DockStyle.None;
_mhScroll.Location = new Point(0, _mDevice.Height - _mhScroll.Height);
_mhScroll.Width = _mDevice.Width - _mvScroll.Width;
}
if (WorldHeight <= _mDevice.Height)
{
_mvScroll.Hide();
}
else
{
_mvScroll.Show();
_mvScroll.Maximum = (int)(WorldHeight - _mDevice.Height);
_mvScroll.Dock = DockStyle.None;
_mvScroll.Location = new Point(_mDevice.Width - _mvScroll.Width, 0);
_mvScroll.Height = _mDevice.Height - _mhScroll.Height;
}
_mScrollHolePatch.Location = new Point(_mhScroll.Right, _mvScroll.Bottom);
_mScrollHolePatch.Size = new Size(_mvScroll.Width, _mhScroll.Height);
_RecalculateRectangle();
_RecalculateMatrix();
_mDevice.Invalidate();
}
/// <summary>
/// Convert view coordinates to world coordinates
/// </summary>
/// <param name="screencoord"></param>
/// <returns></returns>
public PointF DeviceToWorldCoord(Point screencoord)
{
return new PointF(screencoord.X + X, screencoord.Y + Y);
}
/// <summary>
/// Convert view coordinates to world coordinates
/// </summary>
/// <param name="screencoord"></param>
/// <returns></returns>
public PointF DeviceToWorldCoord(PointF screencoord)
{
return new PointF(screencoord.X + X, screencoord.Y + Y);
}
/// <summary>
/// Convert world coordinates to view coordinates
/// </summary>
/// <param name="worldcoord"></param>
/// <returns></returns>
public PointF WorldToDeviceCoord(PointF worldcoord)
{
return new PointF(worldcoord.X - X, worldcoord.Y - Y);
}
/// <summary>
/// Get or set the world width
/// </summary>
public float WorldWidth
{
get { return _mWorldWidth; }
set
{
if (!value.Equals(_mWorldWidth))
{
if (value < _mDevice.Width) value = _mDevice.Width;
_mWorldWidth = value;
Resize();
}
}
}
/// <summary>
/// Get or set the world height
/// </summary>
public float WorldHeight
{
get { return _mWorldHeight; }
set
{
if (!value.Equals(_mWorldHeight))
{
if (value < _mDevice.Height) value = _mDevice.Height;
_mWorldHeight = value;
Resize();
}
}
}
/// <summary>
/// Get or set the world X coordinate of the Viewport location, represented by the top left corner of the Viewport Rectangle
/// </summary>
public float X
{
get { return _mhScroll.Value; }
set
{
if (!((int)value).Equals(_mhScroll.Value))
{
if (value > _mhScroll.Maximum) value = _mhScroll.Maximum;
else if (value < 0) value = 0;
_mhScroll.Value = (int)value;
_RecalculateRectangle();
_RecalculateMatrix();
_mDevice.Invalidate();
}
}
}
/// <summary>
/// Get or set the wordl Y coordinate of the Viewport location, represented by the top left corner of the Viewport Rectangle
/// </summary>
public float Y
{
get { return _mvScroll.Value; }
set
{
if (!((int)value).Equals(_mvScroll.Value))
{
if (value > _mvScroll.Maximum) value = _mvScroll.Maximum;
else if (value < 0) value = 0;
_mvScroll.Value = (int)value;
_RecalculateRectangle();
_RecalculateMatrix();
_mDevice.Invalidate();
}
}
}
private void _RecalculateRectangle()
{
_mRectangle = new RectangleF(X, Y, _mDevice.Width, _mDevice.Height);
}
private void _RecalculateMatrix()
{
_mMatrix = new Matrix();
_mMatrix.Translate(-X, -Y);
}
Control _mDevice;
HScrollBar _mhScroll;
VScrollBar _mvScroll;
UserControl _mScrollHolePatch;
RectangleF _mRectangle = RectangleF.Empty;
Matrix _mMatrix = new Matrix();
float _mWorldHeight, _mWorldWidth;
}
/// <summary>
/// IViewport for printing to image. The full chart in the world is printed as-is.
/// </summary>
class ImageViewport : IViewport
{
private float _mScale;
public ImageViewport(float scale, float worldWidth, float worldHeight)
{
_mScale = scale;
WorldWidth = worldWidth;
WorldHeight = worldHeight;
}
/// <summary>
/// Get the projection matrix to transform world coordinates to device coordinates
/// </summary>
public Matrix Projection
{
get
{
Matrix projection = new Matrix();
projection.Scale(_mScale, _mScale);
return projection;
}
}
/// <summary>
/// The device rectangle boundary in the world to capture and project onto device is the same rectangle of the world for ImageViewport
/// So that the entire world is projected onto the ImageViewport
/// </summary>
public RectangleF Rectangle
{
get
{
return new RectangleF(0, 0, this.WorldWidth, this.WorldHeight);
}
}
public void Resize()
{
}
/// <summary>
/// The device and world coordinates are the same for ImageViewport
/// </summary>
public PointF DeviceToWorldCoord(Point screencoord)
{
return screencoord;
}
/// <summary>
/// The device and world coordinates are the same for ImageViewport
/// </summary>
public PointF DeviceToWorldCoord(PointF screencoord)
{
return screencoord;
}
/// <summary>
/// The device and world coordinates are the same for ImageViewport
/// </summary>
public PointF WorldToDeviceCoord(PointF worldcoord)
{
return worldcoord;
}
/// <summary>
/// Get or set the world height
/// </summary>
public float WorldHeight { get; set; }
/// <summary>
/// Get or set the world width
/// </summary>
public float WorldWidth { get; set; }
/// <summary>
/// No effect for ImageViewport. X and Y world-coordinate offset is always at (0,0).
/// </summary>
public float X { get; set; }
/// <summary>
/// No effect for ImageViewport. X and Y world-coordinate offset is always at (0,0).
/// </summary>
public float Y { get; set; }
}
}

View File

@@ -0,0 +1,530 @@
namespace Braincase.GanttChart
{
partial class ExampleFull
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExampleFull));
this.panel1 = new System.Windows.Forms.Panel();
this.numericUpDown_TimeInterval = new System.Windows.Forms.NumericUpDown();
this.numericUpDown_indexOneFrameCount = new System.Windows.Forms.NumericUpDown();
this.textBox_CurrentTime = new System.Windows.Forms.TextBox();
this.textBox_AllCountFrame = new System.Windows.Forms.TextBox();
this.pictureBox_Stop = new System.Windows.Forms.PictureBox();
this.pictureBox_Pause = new System.Windows.Forms.PictureBox();
this.pictureBox_Play = new System.Windows.Forms.PictureBox();
this.label7 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.textBox_NowIndex = new System.Windows.Forms.TextBox();
this.textBox_MaxEnd = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.button_Save = new System.Windows.Forms.Button();
this.button_Delete = new System.Windows.Forms.Button();
this.button_Insert = new System.Windows.Forms.Button();
this.label12 = new System.Windows.Forms.Label();
this.textBox_Name = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.label10 = new System.Windows.Forms.Label();
this.textBox_End = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.textBox_Duration = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.textBox_Start = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.textBox_ID = new System.Windows.Forms.TextBox();
this.label_ID = new System.Windows.Forms.Label();
this.button1_ZoomRedues = new System.Windows.Forms.Button();
this.button_ZoomPlus = new System.Windows.Forms.Button();
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.lblStatus = new System.Windows.Forms.ToolStripStatusLabel();
this.timer_Play = new System.Windows.Forms.Timer(this.components);
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this._mChart = new Braincase.GanttChart.Chart();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown_TimeInterval)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown_indexOneFrameCount)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox_Stop)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox_Pause)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox_Play)).BeginInit();
this.statusStrip1.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel1.Controls.Add(this.numericUpDown_TimeInterval);
this.panel1.Controls.Add(this.numericUpDown_indexOneFrameCount);
this.panel1.Controls.Add(this.textBox_CurrentTime);
this.panel1.Controls.Add(this.textBox_AllCountFrame);
this.panel1.Controls.Add(this.pictureBox_Stop);
this.panel1.Controls.Add(this.pictureBox_Pause);
this.panel1.Controls.Add(this.pictureBox_Play);
this.panel1.Controls.Add(this.label7);
this.panel1.Controls.Add(this.label6);
this.panel1.Controls.Add(this.textBox_NowIndex);
this.panel1.Controls.Add(this.textBox_MaxEnd);
this.panel1.Controls.Add(this.label1);
this.panel1.Controls.Add(this.button_Save);
this.panel1.Controls.Add(this.button_Delete);
this.panel1.Controls.Add(this.button_Insert);
this.panel1.Controls.Add(this.label12);
this.panel1.Controls.Add(this.textBox_Name);
this.panel1.Controls.Add(this.label5);
this.panel1.Controls.Add(this.label10);
this.panel1.Controls.Add(this.textBox_End);
this.panel1.Controls.Add(this.label4);
this.panel1.Controls.Add(this.textBox_Duration);
this.panel1.Controls.Add(this.label3);
this.panel1.Controls.Add(this.textBox_Start);
this.panel1.Controls.Add(this.label2);
this.panel1.Controls.Add(this.textBox_ID);
this.panel1.Controls.Add(this.label_ID);
this.panel1.Controls.Add(this.button1_ZoomRedues);
this.panel1.Controls.Add(this.button_ZoomPlus);
this.panel1.Location = new System.Drawing.Point(3, 3);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(1526, 29);
this.panel1.TabIndex = 5;
//
// numericUpDown_TimeInterval
//
this.numericUpDown_TimeInterval.DecimalPlaces = 2;
this.numericUpDown_TimeInterval.Increment = new decimal(new int[] {
1,
0,
0,
131072});
this.numericUpDown_TimeInterval.Location = new System.Drawing.Point(1161, 2);
this.numericUpDown_TimeInterval.Maximum = new decimal(new int[] {
10,
0,
0,
0});
this.numericUpDown_TimeInterval.Minimum = new decimal(new int[] {
1,
0,
0,
131072});
this.numericUpDown_TimeInterval.Name = "numericUpDown_TimeInterval";
this.numericUpDown_TimeInterval.Size = new System.Drawing.Size(51, 23);
this.numericUpDown_TimeInterval.TabIndex = 11;
this.numericUpDown_TimeInterval.Value = new decimal(new int[] {
1,
0,
0,
131072});
this.numericUpDown_TimeInterval.ValueChanged += new System.EventHandler(this.numericUpDown_TimeInterval_ValueChanged);
//
// numericUpDown_indexOneFrameCount
//
this.numericUpDown_indexOneFrameCount.Location = new System.Drawing.Point(1404, 2);
this.numericUpDown_indexOneFrameCount.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.numericUpDown_indexOneFrameCount.Name = "numericUpDown_indexOneFrameCount";
this.numericUpDown_indexOneFrameCount.Size = new System.Drawing.Size(54, 23);
this.numericUpDown_indexOneFrameCount.TabIndex = 10;
this.numericUpDown_indexOneFrameCount.Value = new decimal(new int[] {
1,
0,
0,
0});
this.numericUpDown_indexOneFrameCount.ValueChanged += new System.EventHandler(this.numericUpDown_indexOneFrameCount_ValueChanged);
//
// textBox_CurrentTime
//
this.textBox_CurrentTime.Enabled = false;
this.textBox_CurrentTime.Location = new System.Drawing.Point(1074, 2);
this.textBox_CurrentTime.Name = "textBox_CurrentTime";
this.textBox_CurrentTime.Size = new System.Drawing.Size(45, 23);
this.textBox_CurrentTime.TabIndex = 9;
//
// textBox_AllCountFrame
//
this.textBox_AllCountFrame.Enabled = false;
this.textBox_AllCountFrame.Location = new System.Drawing.Point(969, 1);
this.textBox_AllCountFrame.Name = "textBox_AllCountFrame";
this.textBox_AllCountFrame.Size = new System.Drawing.Size(45, 23);
this.textBox_AllCountFrame.TabIndex = 9;
//
// pictureBox_Stop
//
this.pictureBox_Stop.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox_Stop.Image")));
this.pictureBox_Stop.InitialImage = ((System.Drawing.Image)(resources.GetObject("pictureBox_Stop.InitialImage")));
this.pictureBox_Stop.Location = new System.Drawing.Point(1373, 1);
this.pictureBox_Stop.Name = "pictureBox_Stop";
this.pictureBox_Stop.Size = new System.Drawing.Size(25, 22);
this.pictureBox_Stop.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox_Stop.TabIndex = 8;
this.pictureBox_Stop.TabStop = false;
this.pictureBox_Stop.Click += new System.EventHandler(this.pictureBox_Stop_Click);
//
// pictureBox_Pause
//
this.pictureBox_Pause.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox_Pause.Image")));
this.pictureBox_Pause.InitialImage = ((System.Drawing.Image)(resources.GetObject("pictureBox_Pause.InitialImage")));
this.pictureBox_Pause.Location = new System.Drawing.Point(1342, 1);
this.pictureBox_Pause.Name = "pictureBox_Pause";
this.pictureBox_Pause.Size = new System.Drawing.Size(25, 22);
this.pictureBox_Pause.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox_Pause.TabIndex = 8;
this.pictureBox_Pause.TabStop = false;
this.pictureBox_Pause.Click += new System.EventHandler(this.pictureBox_Pause_Click);
//
// pictureBox_Play
//
this.pictureBox_Play.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox_Play.Image")));
this.pictureBox_Play.InitialImage = ((System.Drawing.Image)(resources.GetObject("pictureBox_Play.InitialImage")));
this.pictureBox_Play.Location = new System.Drawing.Point(1311, 2);
this.pictureBox_Play.Name = "pictureBox_Play";
this.pictureBox_Play.Size = new System.Drawing.Size(25, 22);
this.pictureBox_Play.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox_Play.TabIndex = 8;
this.pictureBox_Play.TabStop = false;
this.pictureBox_Play.Click += new System.EventHandler(this.pictureBox_Play_Click);
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(1219, 4);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(33, 15);
this.label7.TabIndex = 7;
this.label7.Text = "帧数";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(1121, 5);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(33, 15);
this.label6.TabIndex = 7;
this.label6.Text = "间隔";
//
// textBox_NowIndex
//
this.textBox_NowIndex.Enabled = false;
this.textBox_NowIndex.Location = new System.Drawing.Point(1253, 1);
this.textBox_NowIndex.Name = "textBox_NowIndex";
this.textBox_NowIndex.Size = new System.Drawing.Size(51, 23);
this.textBox_NowIndex.TabIndex = 6;
this.textBox_NowIndex.TextChanged += new System.EventHandler(this.textBox_TimeInterval_TextChanged);
//
// textBox_MaxEnd
//
this.textBox_MaxEnd.Enabled = false;
this.textBox_MaxEnd.Location = new System.Drawing.Point(849, 1);
this.textBox_MaxEnd.Name = "textBox_MaxEnd";
this.textBox_MaxEnd.Size = new System.Drawing.Size(48, 23);
this.textBox_MaxEnd.TabIndex = 5;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(797, 4);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(46, 15);
this.label1.TabIndex = 4;
this.label1.Text = "总时间";
//
// button_Save
//
this.button_Save.Location = new System.Drawing.Point(177, 3);
this.button_Save.Name = "button_Save";
this.button_Save.Size = new System.Drawing.Size(49, 23);
this.button_Save.TabIndex = 3;
this.button_Save.Text = "保存";
this.button_Save.UseVisualStyleBackColor = true;
this.button_Save.Click += new System.EventHandler(this.button_Save_Click);
//
// button_Delete
//
this.button_Delete.Location = new System.Drawing.Point(122, 3);
this.button_Delete.Name = "button_Delete";
this.button_Delete.Size = new System.Drawing.Size(49, 23);
this.button_Delete.TabIndex = 3;
this.button_Delete.Text = "删除";
this.button_Delete.UseVisualStyleBackColor = true;
this.button_Delete.Click += new System.EventHandler(this.button_Delete_Click);
//
// button_Insert
//
this.button_Insert.Location = new System.Drawing.Point(67, 3);
this.button_Insert.Name = "button_Insert";
this.button_Insert.Size = new System.Drawing.Size(49, 23);
this.button_Insert.TabIndex = 3;
this.button_Insert.Text = "增加";
this.button_Insert.UseVisualStyleBackColor = true;
this.button_Insert.Click += new System.EventHandler(this.button_Insert_Click);
//
// label12
//
this.label12.AutoSize = true;
this.label12.Location = new System.Drawing.Point(1015, 6);
this.label12.Name = "label12";
this.label12.Size = new System.Drawing.Size(59, 15);
this.label12.TabIndex = 1;
this.label12.Text = "当前时间";
//
// textBox_Name
//
this.textBox_Name.Enabled = false;
this.textBox_Name.Location = new System.Drawing.Point(673, 3);
this.textBox_Name.Name = "textBox_Name";
this.textBox_Name.Size = new System.Drawing.Size(118, 23);
this.textBox_Name.TabIndex = 2;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(619, 7);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(39, 15);
this.label5.TabIndex = 1;
this.label5.Text = "Name";
//
// label10
//
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(933, 5);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(33, 15);
this.label10.TabIndex = 1;
this.label10.Text = "总帧";
//
// textBox_End
//
this.textBox_End.Enabled = false;
this.textBox_End.Location = new System.Drawing.Point(565, 1);
this.textBox_End.Name = "textBox_End";
this.textBox_End.Size = new System.Drawing.Size(48, 23);
this.textBox_End.TabIndex = 2;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(532, 6);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(27, 15);
this.label4.TabIndex = 1;
this.label4.Text = "End";
//
// textBox_Duration
//
this.textBox_Duration.Enabled = false;
this.textBox_Duration.Location = new System.Drawing.Point(477, 2);
this.textBox_Duration.Name = "textBox_Duration";
this.textBox_Duration.Size = new System.Drawing.Size(49, 23);
this.textBox_Duration.TabIndex = 2;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(418, 5);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(53, 15);
this.label3.TabIndex = 1;
this.label3.Text = "Duration";
//
// textBox_Start
//
this.textBox_Start.Location = new System.Drawing.Point(367, 2);
this.textBox_Start.Name = "textBox_Start";
this.textBox_Start.Size = new System.Drawing.Size(45, 23);
this.textBox_Start.TabIndex = 2;
this.textBox_Start.KeyUp += new System.Windows.Forms.KeyEventHandler(this.textBox_Start_KeyUp);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(330, 5);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(31, 15);
this.label2.TabIndex = 1;
this.label2.Text = "Start";
//
// textBox_ID
//
this.textBox_ID.Enabled = false;
this.textBox_ID.Location = new System.Drawing.Point(290, 1);
this.textBox_ID.Name = "textBox_ID";
this.textBox_ID.Size = new System.Drawing.Size(34, 23);
this.textBox_ID.TabIndex = 2;
//
// label_ID
//
this.label_ID.AutoSize = true;
this.label_ID.Location = new System.Drawing.Point(232, 8);
this.label_ID.Name = "label_ID";
this.label_ID.Size = new System.Drawing.Size(59, 15);
this.label_ID.TabIndex = 1;
this.label_ID.Text = "工艺代码";
//
// button1_ZoomRedues
//
this.button1_ZoomRedues.Location = new System.Drawing.Point(36, 1);
this.button1_ZoomRedues.Name = "button1_ZoomRedues";
this.button1_ZoomRedues.Size = new System.Drawing.Size(25, 23);
this.button1_ZoomRedues.TabIndex = 0;
this.button1_ZoomRedues.Text = "-";
this.button1_ZoomRedues.UseVisualStyleBackColor = true;
this.button1_ZoomRedues.Click += new System.EventHandler(this.button1_ZoomRedues_Click);
//
// button_ZoomPlus
//
this.button_ZoomPlus.Location = new System.Drawing.Point(6, 1);
this.button_ZoomPlus.Name = "button_ZoomPlus";
this.button_ZoomPlus.Size = new System.Drawing.Size(24, 23);
this.button_ZoomPlus.TabIndex = 0;
this.button_ZoomPlus.Text = "+";
this.button_ZoomPlus.UseVisualStyleBackColor = true;
this.button_ZoomPlus.Click += new System.EventHandler(this.button_ZoomPlus_Click);
//
// statusStrip1
//
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.lblStatus});
this.statusStrip1.Location = new System.Drawing.Point(0, 694);
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Size = new System.Drawing.Size(1532, 22);
this.statusStrip1.TabIndex = 7;
this.statusStrip1.Text = "statusStrip1";
//
// lblStatus
//
this.lblStatus.Name = "lblStatus";
this.lblStatus.Size = new System.Drawing.Size(1517, 17);
this.lblStatus.Spring = true;
//
// timer_Play
//
this.timer_Play.Tick += new System.EventHandler(this.timer_Play_Tick);
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this._mChart, 0, 1);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 240F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(1532, 694);
this.tableLayoutPanel1.TabIndex = 8;
//
// _mChart
//
this._mChart.AllowTaskDragDrop = false;
this._mChart.BarHeight = 15;
this._mChart.BarSpacing = 16;
this._mChart.BarWidth = 40F;
this._mChart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this._mChart.Dock = System.Windows.Forms.DockStyle.Fill;
this._mChart.Font = new System.Drawing.Font("Segoe UI", 9F);
this._mChart.FullDateStringFormat = null;
this._mChart.HeaderOneHeight = 12;
this._mChart.HeaderScale = 0F;
this._mChart.Location = new System.Drawing.Point(0, 35);
this._mChart.Margin = new System.Windows.Forms.Padding(0);
this._mChart.Name = "_mChart";
this._mChart.Padding = new System.Windows.Forms.Padding(5);
this._mChart.Size = new System.Drawing.Size(1532, 659);
this._mChart.TabIndex = 4;
this._mChart.Value = 0;
//
// ExampleFull
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1532, 716);
this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.statusStrip1);
this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "ExampleFull";
this.Text = "MesWork 工艺规划";
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown_TimeInterval)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown_indexOneFrameCount)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox_Stop)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox_Pause)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox_Play)).EndInit();
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private GanttChart.Chart _mChart;
private System.Windows.Forms.StatusStrip statusStrip1;
private System.Windows.Forms.ToolStripStatusLabel lblStatus;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button button_ZoomPlus;
private System.Windows.Forms.Button button1_ZoomRedues;
private System.Windows.Forms.TextBox textBox_Name;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox textBox_End;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox textBox_Duration;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox textBox_Start;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBox_ID;
private System.Windows.Forms.Label label_ID;
private System.Windows.Forms.Button button_Save;
private System.Windows.Forms.Button button_Delete;
private System.Windows.Forms.Button button_Insert;
private System.Windows.Forms.TextBox textBox_MaxEnd;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox textBox_NowIndex;
private System.Windows.Forms.PictureBox pictureBox_Play;
private System.Windows.Forms.PictureBox pictureBox_Stop;
private System.Windows.Forms.PictureBox pictureBox_Pause;
private System.Windows.Forms.Timer timer_Play;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.TextBox textBox_AllCountFrame;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.TextBox textBox_CurrentTime;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.NumericUpDown numericUpDown_indexOneFrameCount;
private System.Windows.Forms.NumericUpDown numericUpDown_TimeInterval;
}
}

View File

@@ -0,0 +1,104 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace Braincase.GanttChart
{
public partial class ExampleFull
{
private void textBox_TimeInterval_TextChanged(object sender, EventArgs e)
{
//if()
//InitPlay();
}
private void _mChart_PlaySliderMouseDrag(object sender, MouseEventArgs e)
{
if (_mManager.MaxPlayLenth < 0.0001) return;
textBox_NowIndex.Text = _mManager.NowIndex.ToString();
textBox_CurrentTime.Text = ((float)_mManager.NowIndex * _mManager.TimeInterval).ToString();
float timeX;
timeX = (_mManager.NowIndexXf * _mManager.MaxCountLenth) / _mManager.MaxPlayLenth;
_mChart.Invalidate();
}
private void InitPlay()
{
if (!_mManager.IsPlaye)
{
_mManager.NowIndex = 0;
}
SetMaxCountLenth();
_mManager.NowIndexXf = _mManager.NowIndex * _mManager.TimeInterval * (_mManager.MaxCountLenth / (float)_mManager.AllCountFrame);
}
private void pictureBox_Play_Click(object sender, EventArgs e)
{
InitPlay();
_mManager.IsPlaye = true;
//int Interval = (int)(_mManager.TimeInterval * 1000);
timer_Play.Interval = 30;
timer_Play.Enabled = true;
pictureBox_Pause.Enabled = true;
pictureBox_Stop.Enabled = true;
_mManager.IsLastPlaye = false;
}
private void pictureBox_Pause_Click(object sender, EventArgs e)
{
timer_Play.Enabled = false;
}
private void pictureBox_Stop_Click(object sender, EventArgs e)
{
pictureBox_Pause.Enabled = false;
pictureBox_Stop.Enabled = false;
timer_Play.Enabled = false;
_mManager.NowIndex = 0;
_mManager.IsPlaye = false;
_mChart.Invalidate();
}
// int indexTest = 0;
int indexOneFrameCount = 1;
int indexOneFrameCountBase = 2;
private void timer_Play_Tick(object sender, EventArgs e)
{
_mManager.NowIndexXf = _mManager.NowIndex * _mManager.MaxCountLenth/(float)_mManager.AllCountFrame;
//时间屏幕坐标点坐标 X
_mManager.NowIndexXf = _mManager.NowIndexXf * _mChart.BarWidth / _mChart.HeaderScale;
//_mManager.NowIndexXf = _mManager.NowIndex * _mManager.TimeInterval * ((float)_mManager.AllCountFrame / _mManager.MaxCountLenth);
textBox_NowIndex.Text = _mManager.NowIndex.ToString();
float currentTime = (float)(_mManager.NowIndex + 1) * _mManager.TimeInterval;
if(currentTime>= _mManager.MaxCountLenth)
{
textBox_CurrentTime.Text = _mManager.MaxCountLenth.ToString();
}
else
{
textBox_CurrentTime.Text = currentTime.ToString();
}
_mManager.NowIndex = _mManager.NowIndex + indexOneFrameCount+ indexOneFrameCountBase;
if (_mManager.IsLastPlaye)
{
_mManager.IsLastPlaye = false;
timer_Play.Enabled = false;
_mManager.NowIndex = 0;
}
else if (_mManager.NowIndex > _mManager.AllCountFrame)
{
_mManager.NowIndex = _mManager.AllCountFrame;
_mManager.IsLastPlaye = true;
}
_mChart.Invalidate();
}
private void numericUpDown_indexOneFrameCount_ValueChanged(object sender, EventArgs e)
{
indexOneFrameCount = (int)numericUpDown_indexOneFrameCount.Value;
}
}
}

View File

@@ -0,0 +1,404 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Braincase.GanttChart
{
/// <summary>
/// An elaborate example on how the chart control might be used.
/// Start by collapsing all regions and then read the constructor.
/// Refer to IProjectManager interface for method description.
/// </summary>
public partial class ExampleFull : Form
{
OverlayPainter _mOverlay = new OverlayPainter();
ProjectManager _mManager = null;
object selectCureetTask;
public ExampleFull()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
_mOverlay.PrintMode = true;
DataTable dt_CraftTasks;
dt_CraftTasks = InitCraftTasks();
// Create a Project and some Tasks
_mManager = new ProjectManager();
InitTasks(ref _mManager, dt_CraftTasks);
// Initialize the Chart with our ProjectManager and CreateTaskDelegate
_mChart.Init(_mManager);
_mChart.CreateTaskDelegate = delegate() { return new MyTask(_mManager); };
// Attach event listeners for events we are interested in
_mChart.TaskMouseOver += new EventHandler<TaskMouseEventArgs>(_mChart_TaskMouseOver);
_mChart.TaskMouseOut += new EventHandler<TaskMouseEventArgs>(_mChart_TaskMouseOut);
_mChart.TaskSelected += new EventHandler<TaskMouseEventArgs>(_mChart_TaskSelected);
_mChart.TaskMouseDrop += _mChart_TaskMouseDrop;
_mChart.PlaySliderMouseDrag += _mChart_PlaySliderMouseDrag;
_mChart.AllowTaskDragDrop = true;
// Set Time information
//_mManager.TimeScale = TimeScale.Day;
}
private void _mChart_TaskMouseDrop(object sender, TaskDragDropEventArgs e)
{
SetMaxCountLenth();
selectCureetTask = e.Source;
textBox_ID.Text = ((MyTask)selectCureetTask).ID.ToString();
textBox_Start.Text = ((MyTask)selectCureetTask).Start.ToString();
textBox_Duration.Text = ((MyTask)selectCureetTask).Duration.ToString();
textBox_Name.Text = ((MyTask)selectCureetTask).Name;
textBox_End.Text = (((MyTask)selectCureetTask).Start + ((MyTask)selectCureetTask).Duration).ToString();
_mChart.Invalidate();
}
private DataTable InitCraftTasks()
{
DataTable dt = new DataTable();
// DataRow dr;
dt.Columns.Add("CraftID");
dt.Columns.Add("Start");
dt.Columns.Add("Duration");
dt.Columns.Add("Name");
dt.Rows.Add("1", "1", "10", "工艺Name01");
dt.Rows.Add("2", "5", "20", "工艺Name02");
dt.Rows.Add("3", "10", "30", "工艺Name03");
dt.Rows.Add("4", "15", "10", "工艺Name04");
dt.Rows.Add("5", "10", "20", "工艺Name05");
dt.Rows.Add("6", "20", "20", "工艺Name06");
return dt;
}
private void InitTasks(ref ProjectManager m_Manager,DataTable dt)
{
string craftID ;
string craftName ;
string duration;
string start ;
for (int i = 0; i < dt.Rows.Count; i++)
{
craftID = dt.Rows[i]["CraftID"].ToString();
craftName = dt.Rows[i]["Name"].ToString();
duration = dt.Rows[i]["Duration"].ToString();
start = dt.Rows[i]["Start"].ToString();
TaskAdd(ref m_Manager, craftID, start, duration, craftName);
}
}
private void TaskAdd(ref ProjectManager m_Manager, string m_CraftID,string m_Start, string m_Duration,string m_Name)
{
try
{
string craftID = m_CraftID;
float duration = (float)Convert.ToDouble(m_Duration);
float start = (float)Convert.ToDouble(m_Start);
var taskName = new MyTask(_mManager) { Name = m_Name };
_mManager.Add(taskName);
_mManager.SetID(taskName, craftID);
_mManager.SetComplete(taskName, 1.0f);
_mManager.SetDuration(taskName, duration);
_mManager.SetStart(taskName, start);
SetMaxCountLenth();
_mChart.Invalidate();
}
catch(Exception err) {
LogNet.LogisTrac.WriteLog(typeof(ExampleFull), err);
}
}
private void SetMaxCountLenth()
{
float maxPlayLenth = 0;
float maxLeneh=0;
float tempLeneh =0;
foreach(MyTask a in _mManager.Tasks)
{
tempLeneh = a.Start + a.Duration;
if(tempLeneh> maxLeneh)
{
Task task = a;
maxLeneh = tempLeneh;
if (_mChart._mChartTaskRects.ContainsKey(task))
{
maxPlayLenth = _mChart._mChartTaskRects[a].X + _mChart._mChartTaskRects[a].Width;
}
//maxPlayLenth=a.
//MaxPlayLenth
}
}
//最大播放长度
_mManager.MaxPlayLenth = maxPlayLenth;
//时间最大值
_mManager.MaxCountLenth = maxLeneh;
//间隔时间
_mManager.TimeInterval = (float)Convert.ToDouble(numericUpDown_TimeInterval.Value);
//总帧数
_mManager.AllCountFrame = (int)(_mManager.MaxCountLenth / _mManager.TimeInterval);
textBox_MaxEnd.Text = maxLeneh.ToString();
textBox_AllCountFrame.Text = _mManager.AllCountFrame.ToString();
}
private void TaskSave()
{
foreach (MyTask a in _mManager.Tasks)
{
}
}
private void TaskDelete(MyTask taskName)
{
try
{
_mManager.Delete(taskName);
selectCureetTask = null;
textBox_ID.Text = "";
textBox_Start.Text = "";
textBox_Duration.Text = "";
textBox_Name.Text = "";
textBox_End.Text = "";
SetMaxCountLenth();
_mChart.Invalidate();
}
catch(Exception err) {
LogNet.LogisTrac.WriteLog(typeof(ExampleFull), err);
}
}
private void SetTaskStart(string m_Start)
{
if(selectCureetTask!=null)
{
float start = (float)Convert.ToDouble(m_Start);
_mManager.SetStart((MyTask)selectCureetTask, start);
SetMaxCountLenth();
_mChart.Invalidate();
}
}
/// <summary>
/// 选择task (e.Task)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void _mChart_TaskSelected(object sender, TaskMouseEventArgs e)
{
SetMaxCountLenth();
textBox_ID.Text = e.Task.ID.ToString();
textBox_Start.Text = e.Task.Start.ToString();
textBox_Duration.Text = e.Task.Duration.ToString();
textBox_Name.Text = e.Task.Name;
textBox_End.Text = (e.Task.Start + e.Task.Duration).ToString();
selectCureetTask = e.Task;
}
void _mChart_TaskMouseOut(object sender, TaskMouseEventArgs e)
{
lblStatus.Text = "";
_mChart.Invalidate();
}
void _mChart_TaskMouseOver(object sender, TaskMouseEventArgs e)
{
lblStatus.Text = string.Format("工艺代码:{0} 开始时间: {1} 持续时间: {2} 结束时间: {3} 工艺名称: {4}",e.Task.ID.ToString(), e.Task.Start.ToString(),e.Task.Duration.ToString(), e.Task.End.ToString(),e.Task.Name);
_mChart.Invalidate();
}
private void button_ZoomPlus_Click(object sender, EventArgs e)
{
if (_mChart.ZoomScaleIndex > 0)
{
_mChart.ZoomScaleIndex--;
_mChart.Refresh();
SetMaxCountLenth();
}
}
private void button1_ZoomRedues_Click(object sender, EventArgs e)
{
if (_mChart.ZoomScaleIndex < 10)
{
_mChart.ZoomScaleIndex++;
_mChart.Refresh();
SetMaxCountLenth();
}
}
/// <summary>
/// 增加工艺
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button_Insert_Click(object sender, EventArgs e)
{
string craftID = textBox_ID.Text;
string start = textBox_Start.Text;
string duration = textBox_Duration.Text;
string craftName = textBox_Name.Text;
ProjectManager m_Manager = _mManager;
TaskAdd(ref m_Manager, craftID, start, duration, craftName);
}
/// <summary>
/// 删除选择的工艺
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button_Delete_Click(object sender, EventArgs e)
{
MyTask taskName;
if (selectCureetTask == null) return;
taskName = (MyTask)selectCureetTask;
TaskDelete(taskName);
}
/// <summary>
/// 保存工艺规划
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button_Save_Click(object sender, EventArgs e)
{
TaskSave();
}
private void textBox_Start_KeyUp(object sender, KeyEventArgs e)
{
try
{
string m_Start = textBox_Start.Text;
SetTaskStart(m_Start);
}
catch(Exception err)
{
LogNet.LogisTrac.WriteLog(typeof(ExampleFull), err);
}
}
private void numericUpDown_TimeInterval_ValueChanged(object sender, EventArgs e)
{
SetMaxCountLenth();
}
}
#region overlay painter
/// <summary>
/// An example of how to encapsulate a helper painter for painter additional features on Chart
/// </summary>
public class OverlayPainter
{
/// <summary>
/// Hook such a method to the chart paint event listeners
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void ChartOverlayPainter(object sender, ChartPaintEventArgs e)
{
// Don't want to print instructions to file
if (this.PrintMode) return;
var g = e.Graphics;
var chart = e.Chart;
// Demo: Static billboards begin -----------------------------------
// Demonstrate how to draw static billboards
// "push matrix" -- save our transformation matrix
e.Chart.BeginBillboardMode(e.Graphics);
// draw mouse command instructions
int margin = 300;
int left = 20;
var color = chart.HeaderFormat.Color;
StringBuilder builder = new StringBuilder();
builder.AppendLine("THIS IS DRAWN BY A CUSTOM OVERLAY PAINTER TO SHOW DEFAULT MOUSE COMMANDS.");
builder.AppendLine("*******************************************************************************************************");
builder.AppendLine("Left Click - Select task and display properties in PropertyGrid");
builder.AppendLine("Left Mouse Drag - Change task starting point");
builder.AppendLine("Right Mouse Drag - Change task duration");
builder.AppendLine("Middle Mouse Drag - Change task complete percentage");
builder.AppendLine("Left Doubleclick - Toggle collaspe on task group");
builder.AppendLine("Right Doubleclick - Split task into task parts");
builder.AppendLine("Left Mouse Dragdrop onto another task - Group drag task under drop task");
builder.AppendLine("Right Mouse Dragdrop onto another task part - Join task parts");
builder.AppendLine("SHIFT + Left Mouse Dragdrop onto another task - Make drop task precedent of drag task");
builder.AppendLine("ALT + Left Dragdrop onto another task - Ungroup drag task from drop task / Remove drop task from drag task precedent list");
builder.AppendLine("SHIFT + Left Mouse Dragdrop - Order tasks");
builder.AppendLine("SHIFT + Middle Click - Create new task");
builder.AppendLine("ALT + Middle Click - Delete task");
builder.AppendLine("Left Doubleclick - Toggle collaspe on task group");
var size = g.MeasureString(builder.ToString(), e.Chart.Font);
var background = new Rectangle(left, chart.Height - margin, (int)size.Width, (int)size.Height);
background.Inflate(10, 10);
g.FillRectangle(new System.Drawing.Drawing2D.LinearGradientBrush(background, Color.LightYellow, Color.Transparent, System.Drawing.Drawing2D.LinearGradientMode.Vertical), background);
g.DrawRectangle(Pens.Brown, background);
g.DrawString(builder.ToString(), chart.Font, color, new PointF(left, chart.Height - margin));
// "pop matrix" -- restore the previous matrix
e.Chart.EndBillboardMode(e.Graphics);
// Demo: Static billboards end -----------------------------------
}
public bool PrintMode { get; set; }
}
#endregion overlay painter
#region custom task and resource
/// <summary>
/// A custom resource of your own type (optional)
/// </summary>
[Serializable]
public class MyResource
{
public string Name { get; set; }
}
/// <summary>
/// A custom task of your own type deriving from the Task interface (optional)
/// </summary>
[Serializable]
public class MyTask : Task
{
public MyTask(ProjectManager manager)
: base()
{
Manager = manager;
}
private ProjectManager Manager { get; set; }
//1代表0.001
public new float Start { get { return base.Start; } set { Manager.SetStart(this, value); } }
public new float End { get { return base.End; } set { Manager.SetEnd(this, value); } }
public new float Duration { get { return base.Duration; } set { Manager.SetDuration(this, value); } }
public new float Complete { get { return base.Complete; } set { Manager.SetComplete(this, value); } }
public new string ID { get { return base.ID; } set { Manager.SetID(this, value); } }
}
#endregion custom task and resource
}

View File

@@ -0,0 +1,368 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBox_Stop.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABGdBTUEAALGPC/xhBQAABLpJREFUeF7t
2zFuUwkUhWH2QJzYgiKKo1kNi0nPAlgDG6BBomALblNmC9lC2pn30ClG4VYXJ7Ev3yf9or9HwY7z/A4A
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgb3e93V7vd5vP++3msN9ePCz/Pi49Lf2ro7bedLnt
rxsfbq4u7v75+P5DZuDULAN9ut1uvv9vQL1Fu8tv6xaZhbe2jnGz3fwsx9KbtW7iB+WN3e42X6pxdEJd
XX7NXLym/dXmRzmITrH7zMZrKAbQGZT5eEnLoe+fH15n0vKqnxl5Cev72fLwOpvW3xszJ8e0fiJSHVzn
l0+3XoCPcue0bplZOQavHvPyKnJE619nqyPrfFufesi8/In1+Z7qwDr/1ufmMjNdy0vxXXVcDWi3+ZyZ
6VoOefjtsJrSITPTlcepq+Pq7Lt4yMx0LYdcv89RHFcDeszMdC1H9GWnuT1lZrqKo2pQmZmu6qiaU2am
qzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ
6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjll
Zrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pO
mZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qia
U2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq
5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqO
qjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqq
o2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu
6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2am
qzqq5pSZ6aqOqjllZrqWIz49P6rG9JSZ6VqO+PjsqJrTY2ama7+9eCgOqxFdPGRmupZDHn4/rIZ0yMx0
3Vxd3BWH1YR2m8+Zma5/Pr7/UB5XZ9/1dnudmfkT+93lt+rAOt9ut5vvmZc/tbzN+lQdWefbumnm5Rhu
tpuf1aF1fq1bZlaOxavInLx6vJD91eXX6uA6n253my+Zk5ewHPn++dF1Jl1tfmRGXlJ5fJ18mY/XsP5v
VI2gk+w+s/Ga1vezxRg6pZbfGzMXb2H9RMRHwKfXuolPq07IOsb619lqLL1iu8tvfjBO2Pp8z/oQ3DLW
IY/Kr98n8aWr47fedLntrxsflh+Ku/W5ucwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jd6
9+4/HvM7DY9eJfwAAAAASUVORK5CYII=
</value>
</data>
<data name="pictureBox_Stop.InitialImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABGdBTUEAALGPC/xhBQAABLpJREFUeF7t
2zFuUwkUhWH2QJzYgiKKo1kNi0nPAlgDG6BBomALblNmC9lC2pn30ClG4VYXJ7Ev3yf9or9HwY7z/A4A
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgb3e93V7vd5vP++3msN9ePCz/Pi49Lf2ro7bedLnt
rxsfbq4u7v75+P5DZuDULAN9ut1uvv9vQL1Fu8tv6xaZhbe2jnGz3fwsx9KbtW7iB+WN3e42X6pxdEJd
XX7NXLym/dXmRzmITrH7zMZrKAbQGZT5eEnLoe+fH15n0vKqnxl5Cev72fLwOpvW3xszJ8e0fiJSHVzn
l0+3XoCPcue0bplZOQavHvPyKnJE619nqyPrfFufesi8/In1+Z7qwDr/1ufmMjNdy0vxXXVcDWi3+ZyZ
6VoOefjtsJrSITPTlcepq+Pq7Lt4yMx0LYdcv89RHFcDeszMdC1H9GWnuT1lZrqKo2pQmZmu6qiaU2am
qzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ
6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjll
Zrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pO
mZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qia
U2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq
5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqO
qjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqq
o2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu
6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2amqzqq5pSZ6aqOqjllZrqqo2pOmZmu6qiaU2am
qzqq5pSZ6aqOqjllZrqWIz49P6rG9JSZ6VqO+PjsqJrTY2ama7+9eCgOqxFdPGRmupZDHn4/rIZ0yMx0
3Vxd3BWH1YR2m8+Zma5/Pr7/UB5XZ9/1dnudmfkT+93lt+rAOt9ut5vvmZc/tbzN+lQdWefbumnm5Rhu
tpuf1aF1fq1bZlaOxavInLx6vJD91eXX6uA6n253my+Zk5ewHPn++dF1Jl1tfmRGXlJ5fJ18mY/XsP5v
VI2gk+w+s/Ga1vezxRg6pZbfGzMXb2H9RMRHwKfXuolPq07IOsb619lqLL1iu8tvfjBO2Pp8z/oQ3DLW
IY/Kr98n8aWr47fedLntrxsflh+Ku/W5ucwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jd6
9+4/HvM7DY9eJfwAAAAASUVORK5CYII=
</value>
</data>
<data name="pictureBox_Pause.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABGdBTUEAALGPC/xhBQAABP1JREFUeF7t
2jGLXXUQxuFttEonJARsNFUE0wqxsfILiIhYCumin0BIk0qwEMTCNiDY2QhWgnVsggYETSGkEU0nkkrn
bxd5Y9bsmbs79z4P/Po5Z86EZbNHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwHKu
ulRdra5UF6p9sZ5lPdN6tvWM61nhid6sPqp+rP56TF9U16qL1RRr1jXzmj0902o983r29Q7gEW9U31bp
w3lc96sb1Vk+lDXbmnHNmp7hca13sd4JHH1apY/kuP1UvVadNWumNVua+bitd8MB+6ZKH8bTdJaOZM2S
Znya1jviAH1cpQ/iJJ2vTtuaIc12kta74oCsn8vTh3DSvqxO25ohzXbS1jvjALxQ/Vmlj2CL3q9Oy/pN
VZppix5Wlyv23AdV+gC26l51Wj9q3a7STFt1s2LP/VCl5W/Z9WrX3qnSLFv2S/VsxZ56vUqL37qvql27
VaVZtu7dij31eZWW3tGu/V6lObbOr3332J0qLb2jXf7t1nNVmqGjuxV76rcqLb2j9ceAu/JylWbo6EHF
nkoL72qX/7O+5f+cHyf2VFp2Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4adldORDG
ScvuyoEwTlp2Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4adldORDGScvuyoEwTlp2
Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4adldORDGScvuyoEwTlp2Vw6EcdKyu3Ig
jJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4adldORDGScvuyoEwTlp2Vw6EcdKyu3IgjJOW3ZUDYZy0
7K4cCOOkZXflQBgnLbsrB8I4adldORDGScvuyoEwTlp2Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXfl
QBgnLbsrB8I4adldORDGScvuyoEwTlp2Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4
adldORDGScvuyoEwTlp2Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4adldORDGScvu
yoEwTlp2Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4adldORDGScvuyoEwTlp2Vw6E
cdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBjnQZUW3tHL1a5cqdIMHf1WsafuVmnpHT1X7cqFKs3Q0Z2K
PfVNlZa+db9Wu5bm6OhWxZ56o0pL37pPql37okqzbN2rFXvqmernKi1+y96qdu1alWbZsu8q9tzNKi1/
q25Xp+F8da9KM23VexV77nL1sEofwBatf8lPy/tVmmmL/qierzgAH1bpIzhp31anbc2QZjtp651xQL6u
0odwkl6sTtuaIc12kta74gCtX1mmD+JpeqU6K9Ysacanya91D9yNKn0Yx+376qXqrFkzrdnSzMdtvRv4
5/9H/u/P7ver9QFdrM6qNduacc2anuFxrXex3gk84u3qs+q/fl36VXW9OsuH8W9r1jXzmj0902o983r2
9Q7gic5Vl6qr1fpjwPX3TvtiPct6pvVs6xnXswIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAMBhOzr6Gz1D7ZxfJj38AAAAAElFTkSuQmCC
</value>
</data>
<data name="pictureBox_Pause.InitialImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABGdBTUEAALGPC/xhBQAABP1JREFUeF7t
2jGLXXUQxuFttEonJARsNFUE0wqxsfILiIhYCumin0BIk0qwEMTCNiDY2QhWgnVsggYETSGkEU0nkkrn
bxd5Y9bsmbs79z4P/Po5Z86EZbNHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwHKu
ulRdra5UF6p9sZ5lPdN6tvWM61nhid6sPqp+rP56TF9U16qL1RRr1jXzmj0902o983r29Q7gEW9U31bp
w3lc96sb1Vk+lDXbmnHNmp7hca13sd4JHH1apY/kuP1UvVadNWumNVua+bitd8MB+6ZKH8bTdJaOZM2S
Znya1jviAH1cpQ/iJJ2vTtuaIc12kta74oCsn8vTh3DSvqxO25ohzXbS1jvjALxQ/Vmlj2CL3q9Oy/pN
VZppix5Wlyv23AdV+gC26l51Wj9q3a7STFt1s2LP/VCl5W/Z9WrX3qnSLFv2S/VsxZ56vUqL37qvql27
VaVZtu7dij31eZWW3tGu/V6lObbOr3332J0qLb2jXf7t1nNVmqGjuxV76rcqLb2j9ceAu/JylWbo6EHF
nkoL72qX/7O+5f+cHyf2VFp2Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4adldORDG
ScvuyoEwTlp2Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4adldORDGScvuyoEwTlp2
Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4adldORDGScvuyoEwTlp2Vw6EcdKyu3Ig
jJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4adldORDGScvuyoEwTlp2Vw6EcdKyu3IgjJOW3ZUDYZy0
7K4cCOOkZXflQBgnLbsrB8I4adldORDGScvuyoEwTlp2Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXfl
QBgnLbsrB8I4adldORDGScvuyoEwTlp2Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4
adldORDGScvuyoEwTlp2Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4adldORDGScvu
yoEwTlp2Vw6EcdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBgnLbsrB8I4adldORDGScvuyoEwTlp2Vw6E
cdKyu3IgjJOW3ZUDYZy07K4cCOOkZXflQBjnQZUW3tHL1a5cqdIMHf1WsafuVmnpHT1X7cqFKs3Q0Z2K
PfVNlZa+db9Wu5bm6OhWxZ56o0pL37pPql37okqzbN2rFXvqmernKi1+y96qdu1alWbZsu8q9tzNKi1/
q25Xp+F8da9KM23VexV77nL1sEofwBatf8lPy/tVmmmL/qierzgAH1bpIzhp31anbc2QZjtp651xQL6u
0odwkl6sTtuaIc12kta74gCtX1mmD+JpeqU6K9Ysacanya91D9yNKn0Yx+376qXqrFkzrdnSzMdtvRv4
5/9H/u/P7ver9QFdrM6qNduacc2anuFxrXex3gk84u3qs+q/fl36VXW9OsuH8W9r1jXzmj0902o983r2
9Q7gic5Vl6qr1fpjwPX3TvtiPct6pvVs6xnXswIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAMBhOzr6Gz1D7ZxfJj38AAAAAElFTkSuQmCC
</value>
</data>
<data name="pictureBox_Play.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABGdBTUEAALGPC/xhBQAABSZJREFUeF7t
3U+oZnMcx/EhSULjT2JBEk2zEUmShaSJnUTSbGRMklKSRDaTSLJCSLNCommKQUJWkiaakkRCFkiIkiQS
PofVNN/bnXvv85zzO+e8XvXezCy/n7uYee5zziYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABYruPSremx9FLal55IN6djE8zWrvRF+meFfkmPp60JZuXjVP1QVP2c7kvHJJi8d1P1g7BaB9L2BJP1
YKrGv5b2pksSTMqFqRr8evo7PZJOSzAJT6dq7Bvpy3RbgtH7MFUjX0Rvp6sSjNaPqRr3ItudtiQYnWrQ
y+indG86OsFoVGNeZh+kGxKMQjXiPtqTLk7QtGq8ffVXejidmqBJ1XD77vPU/XIkNKca7FC9la5M0Ixq
qEPXfXh5boLBVQNtoe7zmXvSUQkGU42zpd5P1ycYRDXKFnsxXZSgV9UYW+3P9FA6JUEvqiG23mfplgRL
Vw1wLL2RtiVYmmp4Y+updE6ChasGN8a+T3enIxMsTDW2Mbc/XZdgIaqRTaEXUvd9e9iQalxT6Y/UPbHl
pATrUg1ran2adiZYs2pQU+31dEWCw1YNaep1D+I+O8GqqgHNoe/SXemIBCuqxjOn3kvXJihVo5ljz6cL
EhykGstc+z09kDYn+E81lLn3SdqRoByI/u+1dHlixqph6OC6V86dlZihahA6tG/TnYmZqcagleteVXdN
YiaqEWj1nkvnJyauOr4Or9/S/emExERVh9fa6l6ffVNigqqDa329mi5LTEh1aG2sR9OZiQmoDqyN9026
IzFy1XG1uN5JVydGqjqqFt8z6bzEyFTH1HL6Ne1KxydGojqklttH6cbECFQHVD+9nE5PNKw6nPqre3bX
pYlGVUdT/52caFB1LPXf3kSDqmNpmLzCoUHVoTRMtycaUx1Kw7Qn0ZjqUBqmrxONqQ6lYfoq0ZjqUBqm
ZxONqQ6lYfKP9AZVh9Iw+W/eBlWHUv/tSzSoOpb674xEg6pjqb+6Rwd57ULDqqOpn7rfvzox0bDqcFpu
vjA1ItUBtZx85XaEqkNq8Xlow0hVx9Ti8tifkauOqo3nwXETUR1XG8ujRyekOrDWl4dXT1B1aK0trz+Y
sOrgOry8QGcGqsNr9byCbSaq42vlvMRzZqoR6NC8BnqmqjHo4B5PZyVmqBqE/u+1dHlixqphzL1P0o4E
5UDm2u/pgbQ5wX+qocyx55Nv9nGIaixz6r10bYJSNZo59F26Kx2RYEXVeKbeE+nsBKuqBjTVXk9XJDhs
1ZCm1qdpZ4I1qwY1lboXZD6YTkqwLtWwptAL6cIEG1KNa8ztT9clWIhqZGPs+3R3OjLBwlRjG1tPJa8O
YCmqwY2lN9K2BEtTDa/1Pku3JFi6aoCt9md6KJ2SoBfVEFvsxXRRgl5VY2yp99P1CQZRjbKFfkz3pKMS
DKYa59A9nc5NMLhqoEP1VroyQTOqofbd5+nWBM2pBttXf6WH06kJmlQNt4/2pIsTNK0a7zL7IN2QYBSq
ES+jn9K96egEo/FDqga9yHanLQlG50CqRr2I3k5XJRit7kO5atwb6ct0W4LR6763XY18Pf2dHkmnJZiM
x1I1+LW0N12SYJK6T7Or4a9W92+Y7Qkm781U/RBU/ZzuS8ckmI1d6YtU/VB0/Zq6hyRsTTBLx6Xulwef
TK+kfal74HP3Z93fAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3btOlfhAc5/WO8AWEA
AAAASUVORK5CYII=
</value>
</data>
<data name="pictureBox_Play.InitialImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABGdBTUEAALGPC/xhBQAABSZJREFUeF7t
3U+oZnMcx/EhSULjT2JBEk2zEUmShaSJnUTSbGRMklKSRDaTSLJCSLNCommKQUJWkiaakkRCFkiIkiQS
PofVNN/bnXvv85zzO+e8XvXezCy/n7uYee5zziYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABYruPSremx9FLal55IN6djE8zWrvRF+meFfkmPp60JZuXjVP1QVP2c7kvHJJi8d1P1g7BaB9L2BJP1
YKrGv5b2pksSTMqFqRr8evo7PZJOSzAJT6dq7Bvpy3RbgtH7MFUjX0Rvp6sSjNaPqRr3ItudtiQYnWrQ
y+indG86OsFoVGNeZh+kGxKMQjXiPtqTLk7QtGq8ffVXejidmqBJ1XD77vPU/XIkNKca7FC9la5M0Ixq
qEPXfXh5boLBVQNtoe7zmXvSUQkGU42zpd5P1ycYRDXKFnsxXZSgV9UYW+3P9FA6JUEvqiG23mfplgRL
Vw1wLL2RtiVYmmp4Y+updE6ChasGN8a+T3enIxMsTDW2Mbc/XZdgIaqRTaEXUvd9e9iQalxT6Y/UPbHl
pATrUg1ran2adiZYs2pQU+31dEWCw1YNaep1D+I+O8GqqgHNoe/SXemIBCuqxjOn3kvXJihVo5ljz6cL
EhykGstc+z09kDYn+E81lLn3SdqRoByI/u+1dHlixqph6OC6V86dlZihahA6tG/TnYmZqcagleteVXdN
YiaqEWj1nkvnJyauOr4Or9/S/emExERVh9fa6l6ffVNigqqDa329mi5LTEh1aG2sR9OZiQmoDqyN9026
IzFy1XG1uN5JVydGqjqqFt8z6bzEyFTH1HL6Ne1KxydGojqklttH6cbECFQHVD+9nE5PNKw6nPqre3bX
pYlGVUdT/52caFB1LPXf3kSDqmNpmLzCoUHVoTRMtycaUx1Kw7Qn0ZjqUBqmrxONqQ6lYfoq0ZjqUBqm
ZxONqQ6lYfKP9AZVh9Iw+W/eBlWHUv/tSzSoOpb674xEg6pjqb+6Rwd57ULDqqOpn7rfvzox0bDqcFpu
vjA1ItUBtZx85XaEqkNq8Xlow0hVx9Ti8tifkauOqo3nwXETUR1XG8ujRyekOrDWl4dXT1B1aK0trz+Y
sOrgOry8QGcGqsNr9byCbSaq42vlvMRzZqoR6NC8BnqmqjHo4B5PZyVmqBqE/u+1dHlixqphzL1P0o4E
5UDm2u/pgbQ5wX+qocyx55Nv9nGIaixz6r10bYJSNZo59F26Kx2RYEXVeKbeE+nsBKuqBjTVXk9XJDhs
1ZCm1qdpZ4I1qwY1lboXZD6YTkqwLtWwptAL6cIEG1KNa8ztT9clWIhqZGPs+3R3OjLBwlRjG1tPJa8O
YCmqwY2lN9K2BEtTDa/1Pku3JFi6aoCt9md6KJ2SoBfVEFvsxXRRgl5VY2yp99P1CQZRjbKFfkz3pKMS
DKYa59A9nc5NMLhqoEP1VroyQTOqofbd5+nWBM2pBttXf6WH06kJmlQNt4/2pIsTNK0a7zL7IN2QYBSq
ES+jn9K96egEo/FDqga9yHanLQlG50CqRr2I3k5XJRit7kO5atwb6ct0W4LR6763XY18Pf2dHkmnJZiM
x1I1+LW0N12SYJK6T7Or4a9W92+Y7Qkm781U/RBU/ZzuS8ckmI1d6YtU/VB0/Zq6hyRsTTBLx6Xulwef
TK+kfal74HP3Z93fAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3btOlfhAc5/WO8AWEA
AAAASUVORK5CYII=
</value>
</data>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>-5, 7</value>
</metadata>
<metadata name="timer_Play.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>105, 8</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>40</value>
</metadata>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABMLAAATCwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgChADIAoQIyAKEgMgChczIA
occyAKHqMgChmTIAoTwyAKEJMgChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgChADIAoQQyAKEvMgChdzIA
odYyAKH7MgCh/zIAof8yAKH/MgCh6jIAoacyAKFJMgChEjIAoQAyAKEAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAKEAMgChADIAoQoyAKE+MgChkTIA
oeoyAKH+MgCh+TIAoe0yAKH+MgCh/zIAofwyAKH3MgCh/jIAofgyAKHBMgChZDIAoR4yAKEBMgChAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAKEAMgChATIAoRUyAKFcMgChujIA
ofEyAKH/MgCh9DIAobcyAKFPMgChfjIAof8yAKH/MgCh5TIAoVUyAKGLMgCh4jIAofwyAKH9MgCh2TIA
oYcyAKEoMgChBTIAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAKEAMgChAjIAoSYyAKF2MgCh0DIA
ofcyAKH+MgCh8zIAof8yAKGjMgChDTIAoQAyAKFpMgCh/zIAof8yAKHhMgChHjIAoQIyAKEiMgChbjIA
ocoyAKH3MgCh/jIAoeUyAKGfMgChQTIAoQsyAKEAAAAAAAAAAAAAAAAAMgChCDIAoUEyAKGXMgCh4jIA
of4yAKH/MgChzzIAoW0yAKFoMgCh+zIAoZcyAKEAMgChADIAoWkyAKH/MgCh/zIAoeEyAKEeMgChADIA
oQAyAKEBMgChETIAoVAyAKGiMgCh8DIAof8yAKH0MgChuTIAoW0yAKEVMgChADIAoQAyAKG2MgCh7TIA
of8yAKHvMgCh7jIAofgyAKFLMgChADIAoTcyAKH1MgChlzIAoQAyAKEAMgChaTIAof8yAKH/MgCh4TIA
oR4yAKEAAAAAAAAAAAAAAAAAMgChADIAoQcyAKE4MgChijIAod8yAKH9MgCh+zIAoc4yAKFdMgChADIA
of8yAKHlMgChlDIAoToyAKGgMgCh7jIAoSwyAKEAMgChFzIAodgyAKGZMgChADIAoQAyAKFpMgCh/zIA
of8yAKHxMgChfDIAoSkyAKEBMgChAAAAAAAAAAAAAAAAADIAoQAyAKECMgChITIAoW8yAKG/MgCh/zIA
oZYyAKEAMgCh/zIAoZoyAKEBMgChADIAoZkyAKHSMgChEjIAoQAyAKEGMgChujIAoZoyAKEAMgChADIA
oWkyAKH/MgCh/zIAof0yAKH+MgCh4TIAoZIyAKFEMgChDjIAoQAyAKEAAAAAAAAAAAAAAAAAMgChADIA
oUIyAKH7MgChlzIAoQAyAKH/MgChlzIAoQAyAKEAMgChmjIAobMyAKEEMgChADIAoQAyAKGcMgChmzIA
oQAyAKEAMgChaTIAof8yAKH/MgCh4zIAoZYyAKHRMgCh+zIAofQyAKHDMgChZDIAoSIyAKEBMgChAAAA
AAAyAKEAMgChPzIAofsyAKGXMgChADIAof8yAKGXMgChADIAoQAyAKGaMgChiDIAoQAAAAAAMgChADIA
oYgyAKGaMgChADIAoQAyAKFpMgCh/zIAof8yAKHhMgChIDIAoRIyAKFeMgChqzIAoe0yAKH+MgCh3jIA
oYYyAKEqMgChADIAoQAyAKE/MgCh+zIAoZcyAKEAMgCh/zIAoZcyAKEAMgChADIAoZgyAKFtMgChAAAA
AAAyAKEAMgChXDIAoZQyAKEAMgChADIAoWkyAKH/MgCh/zIAoeEyAKEeMgChADIAoQAyAKEGMgChMDIA
oX8yAKHTMgCh+jIAoWkyAKEAMgChADIAoT8yAKH7MgChlzIAoQAyAKH/MgChlzIAoQAyAKEAMgChlTIA
oWMyAKEAAAAAADIAoQAyAKE2MgChhTIAoQAyAKEAMgChaTIAof8yAKH/MgCh4TIAoR4yAKEAAAAAAAAA
AAAyAKEAMgChATIAoRUyAKFYMgChQDIAoQAyAKEAMgChPzIAofsyAKGXMgChADIAof8yAKGXMgChADIA
oQAyAKGLMgChQTIAoQAyAKEFMgChADIAoSMyAKF4MgChADIAoQAyAKFpMgCh/zIAof8yAKHhMgChHjIA
oQAAAAAAAAAAAAAAAAAAAAAAMgChADIAoQAyAKEBMgChADIAoQAyAKE/MgCh+zIAoZcyAKEAMgCh/zIA
oZcyAKEAMgChADIAoXcyAKEkMgChBzIAoUIyAKEBMgChFjIAoWUyAKEBMgChADIAoWkyAKH/MgCh/zIA
oeEyAKEeMgChADIAoQAyAKE5MgChSTIAoQ8yAKEBMgChAAAAAAAAAAAAMgChADIAoT8yAKH7MgChlzIA
oQAyAKH/MgChlzIAoQAyAKECMgChWzIAoQ8yAKEVMgChhTIAoQoyAKEHMgChMzIAoQEyAKEAMgChaTIA
of8yAKH/MgCh4TIAoR4yAKEAMgChADIAoWkyAKH1MgChyzIAoX8yAKE4MgChBTIAoQAyAKEAMgChPzIA
ofsyAKGXMgChADIAof8yAKGXMgChADIAoQMyAKFZMgChCzIAoS4yAKHDMgChGjIAoQAAAAAAAAAAADIA
oQAyAKFpMgCh/zIAof8yAKHhMgChHjIAoQAyAKEAMgChLDIAoaEyAKHkMgCh/DIAoe8yAKGrMgChUzIA
oREyAKFBMgCh+zIAoZcyAKEAMgCh/zIAoZcyAKEAMgChBzIAoVAyAKEEMgChQTIAodoyAKEjMgChAAAA
AAAAAAAAMgChADIAoWkyAKH/MgCh/zIAoeEyAKEeMgChAAAAAAAyAKEAMgChBjIAoSAyAKFyMgChwjIA
ofMyAKH4MgCh0zIAobMyAKH9MgChljIAoQAyAKH/MgChlzIAoQAyAKEBMgChBDIAoQAyAKFKMgCh7jIA
oT0yAKEAAAAAADIAoQAyAKEAMgChbDIAof8yAKH/MgCh4TIAoR8yAKEAAAAAAAAAAAAAAAAAMgChADIA
oQEyAKELMgChRzIAoZYyAKHeMgCh/TIAof8yAKGWMgChADIAof8yAKGXMgChAAAAAAAAAAAAMgChADIA
oW0yAKH/MgChZDIAoQAyAKEEMgChHDIAoWAyAKHPMgCh/zIAof8yAKH3MgChkTIAoS8yAKELMgChADIA
oQAAAAAAAAAAAAAAAAAyAKEAMgChATIAoSAyAKF2MgCh/zIAoZYyAKEAMgCh/zIAoZcyAKEAAAAAADIA
oQAyAKEAMgChljIAof8yAKGeMgChOTIAoZEyAKHcMgCh+TIAof8yAKH/MgCh/zIAof8yAKH+MgCh6jIA
obgyAKFXMgChITIAoQEyAKEAAAAAAAAAAAAAAAAAMgChADIAoT8yAKH7MgChlzIAoQAyAKH/MgChlzIA
oQAAAAAAMgChADIAoQwyAKG9MgCh/zIAofMyAKHyMgCh/jIAof8yAKH/MgCh/zIAofoyAKH3MgCh/jIA
of8yAKH/MgCh/zIAofsyAKHbMgChmzIAoUwyAKENMgChATIAoQAyAKEAMgChPzIAofsyAKGXMgChADIA
of8yAKGXMgChATIAoRkyAKFbMgChsTIAofAyAKH/MgCh/zIAof8yAKH/MgCh/DIAoeYyAKGxMgChVTIA
oUIyAKGFMgCh1TIAofUyAKH/MgCh/zIAof8yAKH/MgCh9DIAocUyAKGDMgChMDIAoQYyAKE/MgCh+zIA
oZcyAKEAMgCh/zIAocEyAKGOMgCh2TIAofcyAKH/MgCh/zIAof8yAKH/MgCh7jIAobMyAKFwMgChJjIA
oQoyAKEAMgChADIAoQEyAKEXMgChTTIAoZsyAKHYMgCh/TIAof8yAKH/MgCh/zIAof4yAKHqMgChszIA
oZgyAKH+MgChljIAoQAyAKH/MgCh/zIAof8yAKH/MgCh/zIAof8yAKH0MgChyTIAoYEyAKE/MgChBzIA
oQAAAAAAMgChADIAoSIyAKF2MgChQjIAoRIyAKEAMgChATIAoR4yAKFjMgChrjIAoecyAKH9MgCh/zIA
of8yAKH/MgCh/zIAof8yAKGWMgChADIAof8yAKH/MgCh/zIAofkyAKHWMgChmjIAoUIyAKERMgChATIA
oQAyAKEGMgChFTIAoQMyAKEAMgChKDIAoZUyAKHHMgChxjIAoXcyAKE3MgChBzIAoQAyAKEGMgChKTIA
oXYyAKHDMgCh7jIAof4yAKH/MgCh/zIAoZYyAKEAMgChrjIAoeYyAKH+MgCh0zIAoVcyAKELMgChADIA
oQAyAKEAMgChADIAoVUyAKHAMgChkjIAoVYyAKEUMgChATIAoRYyAKFhMgChqzIAodUyAKGmMgChZTIA
oR8yAKEDMgChBDIAoS0yAKGiMgCh9DIAofUyAKHGMgChWTIAoQAyAKEGMgChKjIAoWsyAKHBMgCh3DIA
ocEyAKFwMgChJTIAoQYyAKEAMgChDDIAoTgyAKF/MgChyjIAocMyAKGUMgChMzIAoQsyAKEEMgChJjIA
oWUyAKG/MgCh0TIAoaYyAKGoMgCh1TIAodYyAKGNMgChQTIAoRAyAKEAMgChAAAAAAAyAKEAMgChADIA
oQ8yAKE8MgChkDIAoc8yAKHfMgChpDIAoVIyAKEcMgChADIAoQEyAKETMgChRzIAoZ8yAKHGMgChvzIA
oWQyAKEtMgChMzIAoY8yAKHvMgCh5zIAoa8yAKFcMgChHDIAoQMyAKEAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADIAoQAyAKECMgChFTIAoVcyAKGaMgCh3DIAodEyAKGaMgChSDIAoQsyAKEAMgChATIA
oSUyAKGGMgCh6TIAofEyAKHhMgChtzIAoXAyAKErMgChBTIAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgChADIAoQIyAKElMgChXTIAobgyAKHbMgChxTIA
oYUyAKFbMgChqzIAodEyAKHLMgChhDIAoTsyAKELMgChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAKEAMgChCzIA
oTcyAKGTMgCh0zIAofAyAKG2MgChWjIAoRcyAKEBMgChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA/+Af//+AB//8AAD/8AAAP8AIAA8AGDABARg+AQEYD4ERGAPxMZgAcTOY
ADEzmDAxM5g8MTKIPzEgCDDxIAgwMSB4MAEgeDgBJHg+ATxAD8E8AAHxOAAAMQAAAAEAAwABABwgAQBE
BAEBwAABAEAAA+AAAA/4AAB//wAD///gD/8=
</value>
</data>
</root>

View File

@@ -0,0 +1,102 @@
namespace Braincase.GanttChart
{
partial class ExampleSimple
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.panel1 = new System.Windows.Forms.Panel();
this.panel2 = new System.Windows.Forms.Panel();
this.panel3 = new System.Windows.Forms.Panel();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.panel2, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.panel3, 0, 2);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 3;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 511F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(858, 556);
this.tableLayoutPanel1.TabIndex = 0;
//
// panel1
//
this.panel1.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(3, 3);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(852, 14);
this.panel1.TabIndex = 0;
//
// panel2
//
this.panel2.BackColor = System.Drawing.Color.Tomato;
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(3, 23);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(852, 14);
this.panel2.TabIndex = 1;
//
// panel3
//
this.panel3.BackColor = System.Drawing.Color.Gold;
this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel3.Location = new System.Drawing.Point(3, 43);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(852, 510);
this.panel3.TabIndex = 2;
//
// ExampleSimple
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(858, 556);
this.Controls.Add(this.tableLayoutPanel1);
this.Name = "ExampleSimple";
this.Text = "Simple Chart";
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Panel panel3;
}
}

View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Braincase.GanttChart
{
public partial class ExampleSimple : Form
{
ProjectManager _mProject;
public ExampleSimple()
{
InitializeComponent();
_mProject = new ProjectManager();
_mProject.Add(new Task() { Name = "New Task" });
//_mChart.Init(_mProject);
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace Braincase.GanttChart
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new ExampleFull());
//Application.Run(new ExampleSimple());
//Application.Run(new ExampleGanttTreeView());
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("GanttChart Example")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Braincase Solutions")]
[assembly: AssemblyProduct("GanttChart Example")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("cdcf962f-b52a-4cd5-a1ea-4c6a1faa6adf")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace Braincase.GanttChart.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Braincase.GanttChart.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace Braincase.GanttChart.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.0.3.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net461" />
</packages>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB