Dokumentation eingebaut und aktuelle Element wird nun gekennzeichnet
This commit is contained in:
parent
0147753ff6
commit
2abef7a2a4
49 changed files with 3505 additions and 39 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -27,3 +27,4 @@ obj/
|
|||
[Rr]elease*/
|
||||
_ReSharper*/
|
||||
[Tt]est[Rr]esult*
|
||||
output/
|
||||
|
|
36
TimeScheduler/TimeScheduler.Test/Properties/AssemblyInfo.cs
Normal file
36
TimeScheduler/TimeScheduler.Test/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,36 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// Allgemeine Informationen über eine Assembly werden über folgende
|
||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||
// die einer Assembly zugeordnet sind.
|
||||
[assembly: AssemblyTitle("TimeScheduler.Test")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("TimeScheduler.Test")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Wenn ComVisible auf "false" festgelegt wird, sind die Typen innerhalb dieser Assembly
|
||||
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
|
||||
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
|
||||
[assembly: Guid("8b47037c-584e-41fb-b8b8-14fad26d7bca")]
|
||||
|
||||
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
||||
//
|
||||
// Hauptversion
|
||||
// Nebenversion
|
||||
// Buildnummer
|
||||
// Revision
|
||||
//
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [Assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
85
TimeScheduler/TimeScheduler.Test/TimeScheduler.Test.csproj
Normal file
85
TimeScheduler/TimeScheduler.Test/TimeScheduler.Test.csproj
Normal file
|
@ -0,0 +1,85 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{8B47037C-584E-41FB-B8B8-14FAD26D7BCA}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>TimeScheduler.Test</RootNamespace>
|
||||
<AssemblyName>TimeScheduler.Test</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
|
||||
<IsCodedUITest>False</IsCodedUITest>
|
||||
<TestProjectType>UnitTest</TestProjectType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
</ItemGroup>
|
||||
<Choose>
|
||||
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
|
||||
</ItemGroup>
|
||||
</When>
|
||||
<Otherwise>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</Otherwise>
|
||||
</Choose>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ViewModel\MainViewModelTest.cs" />
|
||||
</ItemGroup>
|
||||
<Choose>
|
||||
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
|
||||
<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>
|
|
@ -0,0 +1,14 @@
|
|||
using System;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace TimeScheduler.Test.ViewModel
|
||||
{
|
||||
[TestClass]
|
||||
public class MainViewModelTest
|
||||
{
|
||||
[TestMethod]
|
||||
public void TestMethod1()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,6 +5,8 @@ VisualStudioVersion = 14.0.23107.0
|
|||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TimeScheduler", "TimeScheduler\TimeScheduler.csproj", "{0129AAAE-40F7-4B87-959F-0C48806F496A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TimeScheduler.Test", "TimeScheduler.Test\TimeScheduler.Test.csproj", "{8B47037C-584E-41FB-B8B8-14FAD26D7BCA}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
@ -15,6 +17,10 @@ Global
|
|||
{0129AAAE-40F7-4B87-959F-0C48806F496A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0129AAAE-40F7-4B87-959F-0C48806F496A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0129AAAE-40F7-4B87-959F-0C48806F496A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8B47037C-584E-41FB-B8B8-14FAD26D7BCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8B47037C-584E-41FB-B8B8-14FAD26D7BCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8B47037C-584E-41FB-B8B8-14FAD26D7BCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8B47037C-584E-41FB-B8B8-14FAD26D7BCA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace TimeScheduler.Common
|
|||
/// <FrameworkElement Property="{Binding Source={StaticResource proxy},Path=VMProperty}">
|
||||
/// </code>
|
||||
/// </example>
|
||||
class BindingProxy : Freezable
|
||||
public class BindingProxy : Freezable
|
||||
{
|
||||
#region Konstruktion
|
||||
/// <summary>Standard-Konstruktor</summary>
|
||||
|
|
|
@ -64,7 +64,7 @@ namespace TimeScheduler.Domain.Impl
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region ITimeItem
|
||||
#region ITimeItem (Eigenschaften nicht implizit implementieren, sonst funktioniert das Binden nicht)
|
||||
private int key_;
|
||||
/// <inheritdoc/>
|
||||
public int Key { get { return key_; } set { SetField(ref key_, value); } }
|
||||
|
@ -106,6 +106,10 @@ namespace TimeScheduler.Domain.Impl
|
|||
private TimeItemType itemType_;
|
||||
/// <inheritdoc/>
|
||||
public TimeItemType ItemType { get { return itemType_; } set { SetField(ref itemType_, value); } }
|
||||
|
||||
private bool isCurrentItem_;
|
||||
/// <inheritdoc/>
|
||||
public bool IsCurrentItem { get { return isCurrentItem_; } set { SetField(ref isCurrentItem_, value); } }
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,15 +48,23 @@
|
|||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="ListBoxItem">
|
||||
<Border x:Name="showSelection" BorderBrush="Black" BorderThickness="1" Margin="1,2,1,0">
|
||||
<Border x:Name="showSelection" BorderBrush="Black" BorderThickness="2" Margin="1,2,1,0">
|
||||
<Border Background="{TemplateBinding Background}" Margin="5" CornerRadius="10" Padding="5">
|
||||
<ContentPresenter />
|
||||
<Grid>
|
||||
<ContentPresenter />
|
||||
<Path x:Name="currentItemAdorner" Visibility="Collapsed" Fill="#FF00C000" Width="10" Height="10"
|
||||
VerticalAlignment="Top" HorizontalAlignment="Right"
|
||||
Data="M 0,0 L 10,5 L0,10 Z"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
</Border>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="IsSelected" Value="true">
|
||||
<Setter TargetName="showSelection" Property="Background" Value="Blue"/>
|
||||
</Trigger>
|
||||
<DataTrigger Binding="{Binding IsCurrentItem}" Value="true">
|
||||
<Setter TargetName="currentItemAdorner" Property="Visibility" Value="Visible"/>
|
||||
</DataTrigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
|
@ -110,7 +118,7 @@
|
|||
<Setter.Value>
|
||||
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
<GradientStop Color="White" Offset="0"/>
|
||||
<GradientStop Color="Green" Offset="0.5"/>
|
||||
<GradientStop Color="Red" Offset="0.5"/>
|
||||
</LinearGradientBrush>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
|
@ -120,7 +128,7 @@
|
|||
</ListBox.ItemContainerStyle>
|
||||
</ListBox>
|
||||
</DockPanel>
|
||||
|
||||
|
||||
<GridSplitter Grid.Column="1" ResizeBehavior="PreviousAndNext" ResizeDirection="Columns" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
|
||||
|
||||
<ContentControl Grid.Column="2" Margin="5" Content="{Binding SelectedTimeItem}">
|
||||
|
@ -159,7 +167,7 @@
|
|||
|
||||
<TextBlock Grid.Column="0" Grid.Row="0" Text="Beschreibung:"/>
|
||||
<TextBox Grid.Column="1" Grid.Row="0" Text="{Binding Path=Description,UpdateSourceTrigger=PropertyChanged}"/>
|
||||
|
||||
|
||||
<TextBlock Grid.Column="0" Grid.Row="1" Text="Von:"/>
|
||||
<DatePickerTextBox Grid.Column="1" Grid.Row="1" Text="{Binding From,StringFormat=g,UpdateSourceTrigger=PropertyChanged}"/>
|
||||
|
||||
|
@ -173,7 +181,7 @@
|
|||
<TextBlock Grid.Column="0" Grid.Row="4" Text="Typ:"/>
|
||||
<ComboBox Grid.Column="1" Grid.Row="4" DisplayMemberPath="Value" SelectedValuePath="Key"
|
||||
ItemsSource="{Binding Source={StaticResource proxy},Path=Data.ItemTypes}" SelectedValue="{Binding ItemType}"/>
|
||||
|
||||
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ContentControl.ContentTemplate>
|
||||
|
|
|
@ -23,5 +23,8 @@ namespace TimeScheduler.Model
|
|||
|
||||
/// <summary>Typ</summary>
|
||||
TimeItemType ItemType { get; set; }
|
||||
|
||||
/// <summary>Definiert ob diese Element, das aktuelle ist auf dem gespeichert werden soll</summary>
|
||||
bool IsCurrentItem { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
8
TimeScheduler/TimeScheduler/Resource/ChangeLog.md
Normal file
8
TimeScheduler/TimeScheduler/Resource/ChangeLog.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
Änderungshistorie
|
||||
=================
|
||||
|
||||
|
||||
|
||||
Version 1.0.0.0
|
||||
---------------
|
||||
* erstellt
|
|
@ -89,9 +89,17 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
<None Include="Resource\ChangeLog.md" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>
|
||||
</PreBuildEvent>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>"$(SolutionDir)package\CreateDocu.cmd"</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<!-- 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">
|
||||
|
|
|
@ -14,10 +14,10 @@ namespace TimeScheduler.ViewModel
|
|||
#region Konstruktion
|
||||
/// <summary>aktuelles Ele</summary>
|
||||
private ITimeItem lastTimeItem_;
|
||||
/// <summary>Element, das noch undefinierten Zeitraum speichert</summary>
|
||||
private ITimeItem undefinedItem_;
|
||||
/// <summary>Zyklische Aktuallisierung</summary>
|
||||
private System.Timers.Timer timer_;
|
||||
/// <summary>Funktion zum ermitteln der aktuellen Uhrzeit</summary>
|
||||
protected Func<DateTime> currentTime_ = new Func<DateTime>(() => DateTime.Now);
|
||||
|
||||
/// <summary>Standard-Konstruktor</summary>
|
||||
public MainViewModel() : this(new Domain.Impl.FileDomain()) { Refresh(); }
|
||||
|
@ -56,22 +56,13 @@ namespace TimeScheduler.ViewModel
|
|||
{
|
||||
case Microsoft.Win32.PowerModes.Resume: break;
|
||||
case Microsoft.Win32.PowerModes.StatusChange: break;
|
||||
case Microsoft.Win32.PowerModes.Suspend:
|
||||
// Beim wechseln in Suspend, ein neues Element erzeugen, wenn das vorhergehende lang genug ist
|
||||
Save();
|
||||
if (lastTimeItem_ != null)
|
||||
if ((lastTimeItem_.Till - lastTimeItem_.From) > TimeSpan.FromMinutes(15))
|
||||
{
|
||||
var newItem = Provider.NewItem();
|
||||
newItem.From = lastTimeItem_.Till;
|
||||
TimeItems.Add(newItem);
|
||||
}
|
||||
break;
|
||||
// Beim wechseln in Suspend, ein neues Element erzeugen, wenn das vorhergehende lang genug ist
|
||||
case Microsoft.Win32.PowerModes.Suspend: CreateNewLastItem(); break;
|
||||
}
|
||||
}
|
||||
catch (Exception exc) { }
|
||||
}
|
||||
private void SystemEvents_SessionEnded(object sender, Microsoft.Win32.SessionEndedEventArgs e) { Save(); }
|
||||
private void SystemEvents_SessionEnded(object sender, Microsoft.Win32.SessionEndedEventArgs e) { UpdateLastItem(); }
|
||||
private void SystemEvents_SessionSwitch(object sender, Microsoft.Win32.SessionSwitchEventArgs e)
|
||||
{
|
||||
try
|
||||
|
@ -84,24 +75,15 @@ namespace TimeScheduler.ViewModel
|
|||
case Microsoft.Win32.SessionSwitchReason.RemoteDisconnect: break;
|
||||
case Microsoft.Win32.SessionSwitchReason.SessionLogon: break;
|
||||
case Microsoft.Win32.SessionSwitchReason.SessionLogoff: break;
|
||||
case Microsoft.Win32.SessionSwitchReason.SessionLock:
|
||||
// Beim Sperren, eine neue Session beginnen
|
||||
Save();
|
||||
if (lastTimeItem_ != null)
|
||||
if ((lastTimeItem_.Till - lastTimeItem_.From) >= TimeSpan.FromMinutes(15))
|
||||
{
|
||||
var newItem = Provider.NewItem();
|
||||
newItem.From = lastTimeItem_.Till;
|
||||
TimeItems.Add(newItem);
|
||||
}
|
||||
break;
|
||||
// Beim Sperren, eine neue Session beginnen
|
||||
case Microsoft.Win32.SessionSwitchReason.SessionLock: CreateNewLastItem(); break;
|
||||
case Microsoft.Win32.SessionSwitchReason.SessionUnlock: break;
|
||||
case Microsoft.Win32.SessionSwitchReason.SessionRemoteControl: break;
|
||||
}
|
||||
}
|
||||
catch (Exception exc) { }
|
||||
}
|
||||
private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { Save(); }
|
||||
private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { UpdateLastItem(); }
|
||||
|
||||
|
||||
/// <summary>Datenbeschaffer</summary>
|
||||
|
@ -109,7 +91,7 @@ namespace TimeScheduler.ViewModel
|
|||
#endregion
|
||||
|
||||
#region Eigenschaften
|
||||
private DateTime selectedDate_ = DateTime.Now.Date;
|
||||
private DateTime selectedDate_;
|
||||
/// <summary>Beinhaltet den selektierten Tag</summary>
|
||||
public DateTime SelectedDate
|
||||
{
|
||||
|
@ -144,6 +126,7 @@ namespace TimeScheduler.ViewModel
|
|||
RefreshCommand = new RelayCommand(Refresh);
|
||||
AddNewCommand = new RelayCommand(AddNew);
|
||||
DeleteCommand = new RelayCommand(Delete, CanDelete);
|
||||
SaveCommand = new RelayCommand(Save);
|
||||
}
|
||||
|
||||
public ICommand RefreshCommand { get; private set; }
|
||||
|
@ -157,18 +140,22 @@ namespace TimeScheduler.ViewModel
|
|||
ItemTypes = it;
|
||||
|
||||
// Andere Daten ermitteln
|
||||
RefreshForDate(SelectedDate);
|
||||
SelectedDate = currentTime_().Date;
|
||||
//RefreshForDate(SelectedDate);
|
||||
|
||||
// Letztes Element ermitteln, auf dem weiter gelaufen wird
|
||||
var lastItem = TimeItems.OrderByDescending(x => x.From).FirstOrDefault();
|
||||
if (lastItem == null || lastItem.From.Date != SelectedDate.Date)
|
||||
{// Wenn keines gefunden wurde oder keins für den heutigen Tag gefunden wurde, dann eins neu erzeugen
|
||||
lastItem = Provider.NewItem();
|
||||
lastItem.From = DateTime.Now;
|
||||
lastItem.From = currentTime_();
|
||||
TimeItems.Add(lastItem);
|
||||
}
|
||||
// und abspeichern
|
||||
lastTimeItem_ = lastItem;
|
||||
lastTimeItem_.IsCurrentItem = true;
|
||||
// Und direkt den aktuellen Wert speichern
|
||||
UpdateLastItem();
|
||||
}
|
||||
private void RefreshForDate(DateTime date)
|
||||
{
|
||||
|
@ -205,16 +192,46 @@ namespace TimeScheduler.ViewModel
|
|||
}
|
||||
|
||||
public ICommand AddNewCommand { get; private set; }
|
||||
private void AddNew() { TimeItems.Add(Provider.NewItem()); }
|
||||
private void AddNew() { CreateNewLastItem(); }
|
||||
|
||||
public ICommand DeleteCommand { get; private set; }
|
||||
private void Delete() { TimeItems.Remove(SelectedTimeItem); }
|
||||
public bool CanDelete() { return SelectedTimeItem != null; }
|
||||
|
||||
private void Save() { if (lastTimeItem_ != null) { lastTimeItem_.Till = DateTime.Now; } }
|
||||
public ICommand SaveCommand { get; private set; }
|
||||
private void Save() { UpdateLastItem(); }
|
||||
#endregion
|
||||
|
||||
#region Hilfsfunktionen
|
||||
/// <summary>Schließt das aktuelle "Letzte Element" ab und erzeugt ein neues, aber nur wenn das aktuelle >15min ist</summary>
|
||||
private void CreateNewLastItem()
|
||||
{
|
||||
// Aktuelles Element speichern
|
||||
UpdateLastItem();
|
||||
|
||||
// Wenn ein letztes Element existiert und dies eine Dauer >15min besitzt, dann erst ein neues erzeugen
|
||||
if (lastTimeItem_ != null && (lastTimeItem_.Till - lastTimeItem_.From) > TimeSpan.FromMinutes(15))
|
||||
{
|
||||
// neues Element erzeugen und belegen
|
||||
var newItem = Provider.NewItem();
|
||||
newItem.From = lastTimeItem_.Till;
|
||||
newItem.IsCurrentItem = true;
|
||||
// Aufnehmen und altes LastItem durch neues ersetzen
|
||||
TimeItems.Add(newItem);
|
||||
lastTimeItem_.IsCurrentItem = false;
|
||||
lastTimeItem_ = newItem;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Aktualisiert das "Letzte Element"</summary>
|
||||
private void UpdateLastItem()
|
||||
{
|
||||
if (lastTimeItem_ != null)
|
||||
lastTimeItem_.Till = currentTime_();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Ereignisse
|
||||
private void TimeItems_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
|
||||
|
|
23
TimeScheduler/package/CreateDocu.cmd
Normal file
23
TimeScheduler/package/CreateDocu.cmd
Normal file
|
@ -0,0 +1,23 @@
|
|||
@echo off
|
||||
cls
|
||||
|
||||
setlocal
|
||||
|
||||
:: In aktuellen Ordner wechseln
|
||||
%~d0
|
||||
cd %~dp0
|
||||
|
||||
:: Dokumentation via doxygen erzeugen
|
||||
pushd "doxygen
|
||||
doxygen TimeScheduler.doxyconf
|
||||
popd
|
||||
|
||||
:: Dokumentation via simpleDocu erzeugen
|
||||
set FOLDER=%1
|
||||
if "%FOLDER%"=="" set FOLDER=Release
|
||||
pushd "docu"
|
||||
docu.exe "..\..\TimeScheduler\bin\%FOLDER%\TimeScheduler.exe" "..\..\TimeScheduler\bin\%FOLDER%\TimeScheduler.XML" --output="..\..\output\docu"
|
||||
popd
|
||||
|
||||
endlocal
|
||||
::pause
|
BIN
TimeScheduler/package/docu/Interop.SparkLanguagePackageLib.dll
Normal file
BIN
TimeScheduler/package/docu/Interop.SparkLanguagePackageLib.dll
Normal file
Binary file not shown.
10
TimeScheduler/package/docu/README.txt
Normal file
10
TimeScheduler/package/docu/README.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
Einfache Software zum erstellen von HTML-Dokumentation.
|
||||
Kann aktuell noch keine Code-Elemente in Beispielen.
|
||||
|
||||
Webseite: http://docu.jagregory.com
|
||||
|
||||
Aufruf durch:
|
||||
docu assembly.dll
|
||||
|
||||
Beim Exe-Programmen, die xml mit angeben:
|
||||
docu assembly.exe assembly.xml
|
BIN
TimeScheduler/package/docu/Spark.dll
Normal file
BIN
TimeScheduler/package/docu/Spark.dll
Normal file
Binary file not shown.
BIN
TimeScheduler/package/docu/Spark.pdb
Normal file
BIN
TimeScheduler/package/docu/Spark.pdb
Normal file
Binary file not shown.
BIN
TimeScheduler/package/docu/SparkLanguage.dll
Normal file
BIN
TimeScheduler/package/docu/SparkLanguage.dll
Normal file
Binary file not shown.
BIN
TimeScheduler/package/docu/StructureMap.dll
Normal file
BIN
TimeScheduler/package/docu/StructureMap.dll
Normal file
Binary file not shown.
BIN
TimeScheduler/package/docu/docu.exe
Normal file
BIN
TimeScheduler/package/docu/docu.exe
Normal file
Binary file not shown.
3
TimeScheduler/package/docu/docu.exe.config
Normal file
3
TimeScheduler/package/docu/docu.exe.config
Normal file
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
BIN
TimeScheduler/package/docu/docu.pdb
Normal file
BIN
TimeScheduler/package/docu/docu.pdb
Normal file
Binary file not shown.
210
TimeScheduler/package/docu/docu.xml
Normal file
210
TimeScheduler/package/docu/docu.xml
Normal file
|
@ -0,0 +1,210 @@
|
|||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>docu</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="M:Docu.Console.ISwitch.Handle(System.String)">
|
||||
<summary>
|
||||
Handle the argument
|
||||
</summary>
|
||||
<param name="arg">argument</param>
|
||||
<returns>Continue/true or exit/false</returns>
|
||||
</member>
|
||||
<member name="T:Docu.Output.Rendering.SparkTemplateBase">
|
||||
<summary>
|
||||
All public or protected methods and properties on this class are available within documentation templates
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Docu.Output.Rendering.SparkTemplateBase.Assemblies">
|
||||
<summary>
|
||||
All of the assemblies being documented
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Docu.Output.Rendering.SparkTemplateBase.Namespaces">
|
||||
<summary>
|
||||
All of the namespaces in the assemblies being documented
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Docu.Output.Rendering.SparkTemplateBase.Types">
|
||||
<summary>
|
||||
All of the types in the assemblies being documented
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Docu.Output.Rendering.SparkTemplateBase.Namespace">
|
||||
<summary>
|
||||
The current namespace being documented within the special !namespace template
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Docu.Output.Rendering.SparkTemplateBase.Type">
|
||||
<summary>
|
||||
The current type being documented withing the special !type template
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Docu.Output.Rendering.SparkTemplateBase.RelativeOutputPath">
|
||||
<summary>
|
||||
The path of the file that this view represents, relative to the output directory.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.SetMethodUrlFormat(System.String)">
|
||||
<summary>
|
||||
Configures the pattern that will be used to construct links to methods referenced in the documentation of other symbols
|
||||
</summary>
|
||||
<remarks>
|
||||
The pattern can be constructed using the following placeholders:
|
||||
<list type="definition">
|
||||
<item><term>{type.namespace}</term><description>The namespace of the type that contains the method</description></item>
|
||||
<item><term>{type}</term><description>The short name of the type that contains the method</description></item>
|
||||
<item><term>{method}</term><description>The name of method</description></item>
|
||||
</list>
|
||||
<para>The default is {type.namespace}/{type}.htm#{method}</para></remarks>
|
||||
<param name="format">The pattern used to construct the link</param>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.SetTypeUrlFormat(System.String)">
|
||||
<summary>
|
||||
Configures the pattern that will be used to construct links to types referenced in the documentation of other symbols
|
||||
</summary>
|
||||
<remarks>
|
||||
The pattern can be constructed using the following placeholders:
|
||||
<list type="definition">
|
||||
<item><term>{type.namespace}</term><description>The namespace of the type</description></item>
|
||||
<item><term>{type}</term><description>The short name of the type</description></item>
|
||||
</list>
|
||||
<para>The default is {type.namespace}/{type}.htm</para></remarks>
|
||||
<param name="format">The pattern used to construct the link</param>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.SetPropertyUrlFormat(System.String)">
|
||||
<summary>
|
||||
Configures the pattern that will be used to construct links to properties referenced in the documentation of other symbols
|
||||
</summary>
|
||||
<remarks>
|
||||
The pattern can be constructed using the following placeholders:
|
||||
<list type="definition">
|
||||
<item><term>{type.namespace}</term><description>The namespace of the type that contains the property</description></item>
|
||||
<item><term>{type}</term><description>The short name of the type that contains the property</description></item>
|
||||
<item><term>{property}</term><description>The name of the property</description></item>
|
||||
</list>
|
||||
<para>The default is {type.namespace}/{type}.htm#{property}</para></remarks>
|
||||
<param name="format">The pattern used to construct the link</param>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.SetEventUrlFormat(System.String)">
|
||||
<summary>
|
||||
Configures the pattern that will be used to construct links to events referenced in the documentation of other symbols
|
||||
</summary>
|
||||
<remarks>
|
||||
The pattern can be constructed using the following placeholders:
|
||||
<list type="definition">
|
||||
<item><term>{type.namespace}</term><description>The namespace of the type that contains the event</description></item>
|
||||
<item><term>{type}</term><description>The short name of the type that contains the event</description></item>
|
||||
<item><term>{event}</term><description>The name of the event</description></item>
|
||||
</list>
|
||||
<para>The default is {type.namespace}/{type}.htm#{event}</para></remarks>
|
||||
<param name="format">The pattern used to construct the link</param>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.SetFieldUrlFormat(System.String)">
|
||||
<summary>
|
||||
Configures the pattern that will be used to construct links to fields referenced in the documentation of other symbols
|
||||
</summary>
|
||||
<remarks>
|
||||
The pattern can be constructed using the following placeholders:
|
||||
<list type="definition">
|
||||
<item><term>{type.namespace}</term><description>The namespace of the type that contains the field</description></item>
|
||||
<item><term>{type}</term><description>The short name of the type that contains the field</description></item>
|
||||
<item><term>{field}</term><description>The name of the field</description></item>
|
||||
</list>
|
||||
<para>The default is {type.namespace}/{type}.htm#{field}</para></remarks>
|
||||
<param name="format">The pattern used to construct the link</param>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.SetNamespaceUrlFormat(System.String)">
|
||||
<summary>
|
||||
Configures the pattern that will be used to construct links to namespaces referenced in the documentation of other symbols
|
||||
</summary>
|
||||
<remarks>
|
||||
The pattern can be constructed using the following placeholders:
|
||||
<list type="definition">
|
||||
<item><term>{type.namespace}</term><description>The name of the namespace</description></item>
|
||||
</list>
|
||||
<para>The default is {namespace}.htm</para></remarks>
|
||||
<param name="format">The pattern used to construct the link</param>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.WriteProductName(System.Reflection.Assembly)">
|
||||
<summary>
|
||||
Returns the product name of an assembly
|
||||
</summary>
|
||||
<param name="assembly"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.WriteFileDescription(System.Reflection.Assembly)">
|
||||
<summary>
|
||||
Returns the description of an assembly
|
||||
</summary>
|
||||
<param name="assembly"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.WriteAssemblyTitle(System.Reflection.Assembly)">
|
||||
<summary>
|
||||
Returns the title of an assembly
|
||||
</summary>
|
||||
<param name="assembly"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.WriteVersion(System.Reflection.Assembly)">
|
||||
<summary>
|
||||
Returns the version number of an assembly
|
||||
</summary>
|
||||
<param name="assembly"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.h(System.String)">
|
||||
<summary>
|
||||
HTML encodes the content
|
||||
</summary>
|
||||
<param name="content"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.Format(Docu.Documentation.Comments.IComment)">
|
||||
<summary>
|
||||
Returns the comments in a format suitable for display
|
||||
</summary>
|
||||
<param name="comment"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.Format(Docu.Documentation.IReferencable,System.Linq.Expressions.Expression{System.Func{System.Object,System.String}}[])">
|
||||
<summary>
|
||||
Returns a hyperlink to another symbol
|
||||
</summary>
|
||||
<remarks>The format of the URL in the returned hyperlink can be controlled by the methods <see cref="M:Docu.Output.Rendering.SparkTemplateBase.SetNamespaceUrlFormat(System.String)"/>, <see cref="M:Docu.Output.Rendering.SparkTemplateBase.SetTypeUrlFormat(System.String)"/>, <see cref="M:Docu.Output.Rendering.SparkTemplateBase.SetPropertyUrlFormat(System.String)"/>, <see cref="M:Docu.Output.Rendering.SparkTemplateBase.SetMethodUrlFormat(System.String)"/>, <see cref="M:Docu.Output.Rendering.SparkTemplateBase.SetFieldUrlFormat(System.String)"/> and <see cref="M:Docu.Output.Rendering.SparkTemplateBase.SetEventUrlFormat(System.String)"/></remarks>
|
||||
<param name="referencable"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.WriteInterfaces(System.Collections.Generic.IList{Docu.Documentation.IReferencable})">
|
||||
<summary>
|
||||
Returns a comma-delimited list of the interfaces impleted by a given type
|
||||
</summary>
|
||||
<param name="interfaces"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Docu.Output.Rendering.SparkTemplateBase.OutputMethodParams(Docu.Documentation.Method)">
|
||||
<summary>
|
||||
Returns a comma-delimited list of the parameters of a given method
|
||||
</summary>
|
||||
<param name="method"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Docu.Output.PatternTemplateResolver.Resolve(System.String,System.Collections.Generic.IList{Docu.Documentation.Namespace})">
|
||||
<summary>
|
||||
Expands a path into a collection of output files
|
||||
</summary>
|
||||
<example>
|
||||
given template path and a list of namespaces:
|
||||
|
||||
test.htm.spark, null == [test.htm]
|
||||
!namespace.htm.spark, [one, two] == [one.htm, two.htm]
|
||||
!namespace/test.htm.spark, [one, two] == [one/test.htm, two/test.htm]
|
||||
</example>
|
||||
<param name="path">Template path</param>
|
||||
<param name="namespaces">Namespaces</param>
|
||||
<returns>List of resolved output matches</returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
|
@ -0,0 +1,82 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<title>${h(Type.PrettyName)} - ${WriteProductName(Assemblies[0])} Documentation</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<link type="text/css" rel="stylesheet" href="../main.css" />
|
||||
<script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.scrollTo-min.js"></script>
|
||||
<script type="text/javascript" src="../js/navigation.js"></script>
|
||||
<script type="text/javascript" src="../js/example.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<header><h1>${WriteProductName(Assemblies[0])} : API Documentation</h1>
|
||||
</header>
|
||||
|
||||
<namespaces />
|
||||
<types />
|
||||
<article>
|
||||
<header>
|
||||
<p class="class"><strong>Type</strong> ${h(Type.PrettyName)}</p>
|
||||
</header>
|
||||
<section>
|
||||
<header>
|
||||
<p><strong>Namespace</strong> ${Namespace.Name}</p>
|
||||
<p if="Type.ParentType != null && Type.ParentType.PrettyName != 'object'"><strong>Parent</strong> ${Format(Type.ParentType)}</p>
|
||||
<p if="Type.Interfaces.Count > 0"><strong>Interfaces</strong> ${WriteInterfaces(Type.Interfaces)}</p>
|
||||
</header>
|
||||
<div class="sub-header">
|
||||
<if condition="(Type.Summary != null && Type.Summary.Children.Count() > 0) || (Type.Remarks != null && Type.Remarks.Children.Count() > 0)">
|
||||
<div id="summary">
|
||||
<comment content="Type.Summary" />
|
||||
<remarks content="Type.Remarks" />
|
||||
<example content="Type.Example" />
|
||||
</div>
|
||||
</if>
|
||||
|
||||
<if condition="Type.Events.Count > 0">
|
||||
<h3 class="section">Events</h3>
|
||||
<ul>
|
||||
<li each="var ev in Type.Events">${Format(ev)}</li>
|
||||
</ul>
|
||||
</if>
|
||||
|
||||
<if condition="Type.Methods.Count > 0">
|
||||
<h3 class="section">Methods</h3>
|
||||
<ul>
|
||||
<li each="var method in Type.Methods">${Format(method)}</li>
|
||||
</ul>
|
||||
</if>
|
||||
|
||||
<if condition="Type.Properties.Count > 0">
|
||||
<h3 class="section">Properties</h3>
|
||||
<ul>
|
||||
<li each="var property in Type.Properties">${Format(property)}</li>
|
||||
</ul>
|
||||
</if>
|
||||
|
||||
<if condition="Type.Fields.Count > 0">
|
||||
<h3 class="section">Fields</h3>
|
||||
<ul>
|
||||
<li each="var field in Type.Fields">${Format(field)}</li>
|
||||
</ul>
|
||||
</if>
|
||||
</div>
|
||||
<events events="Type.Events" title="'Events'" />
|
||||
|
||||
<var publicInstanceMethods="Type.Methods.Where(x => x.IsPublic && !x.IsStatic)" />
|
||||
<methods methods="publicInstanceMethods" title="'Public instance methods'" />
|
||||
|
||||
<var publicStaticMethods="Type.Methods.Where(x => x.IsPublic && x.IsStatic)" />
|
||||
<methods methods="publicStaticMethods" title="'Public static methods'" />
|
||||
|
||||
<properties properties="Type.Properties" title="'Public properties'" />
|
||||
<fields fields="Type.Fields" title="'Public fields'" />
|
||||
</section>
|
||||
</article>
|
||||
<use file="../_common_footer" />
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1 @@
|
|||
${Format(content)}
|
|
@ -0,0 +1,12 @@
|
|||
<if condition="events.Count() > 0">
|
||||
<h3 class="section">${title}</h3>
|
||||
|
||||
<div id="${ev.Name}" class="method" each="var ev in events">
|
||||
<h4><strong>${h(ev.Name)}</strong></h4>
|
||||
<div class="content">
|
||||
<comment content="ev.Summary" />
|
||||
<remarks content="ev.Remarks" />
|
||||
<example content="ev.Example" />
|
||||
</div>
|
||||
</div>
|
||||
</if>
|
|
@ -0,0 +1,4 @@
|
|||
<div class="example" if="content != null && content.Children.Count() > 0">
|
||||
<a href="javascript:void(0)">Show Example</a>
|
||||
<pre>${Format(content)}</pre>
|
||||
</div>
|
|
@ -0,0 +1,19 @@
|
|||
<if condition="fields.Count() > 0">
|
||||
<h3 class="section">${title}</h3>
|
||||
|
||||
<div id="${field.Name}" class="method" each="var field in fields">
|
||||
<h4>${h(field.ReturnType.PrettyName)} <strong>${h(field.Name)}</strong></h4>
|
||||
<div class="content">
|
||||
<comment content="field.Summary" />
|
||||
<remarks content="field.Remarks" />
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<code>return ${Format(field.ReturnType)}</code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<example content="field.Example" />
|
||||
</div>
|
||||
</div>
|
||||
</if>
|
|
@ -0,0 +1,46 @@
|
|||
<if condition="methods.Count() > 0">
|
||||
<h3 class="section">${title}</h3>
|
||||
|
||||
<div id="${method.Name}" class="method" each="var method in methods">
|
||||
<h4>
|
||||
${Format(method.ReturnType)} <strong>${h(method.PrettyName)}</strong>(${OutputMethodParams(method)})
|
||||
</h4>
|
||||
<div class="content">
|
||||
<comment content="method.Summary" />
|
||||
<remarks content="method.Remarks" />
|
||||
|
||||
<var hasReturn="method.ReturnType.PrettyName != 'void'" />
|
||||
<var hasParams="method.Parameters.Any(x => x.HasDocumentation)" />
|
||||
|
||||
<div class="parameters" if="hasParams">
|
||||
<h5>Parameters</h5>
|
||||
<dl>
|
||||
<for each="var param in method.Parameters">
|
||||
<dt>
|
||||
<code>${Format(param.Reference)}</code> ${param.Name}
|
||||
</dt>
|
||||
<dd if="!param.Summary.IsEmpty">
|
||||
<comment content="param.Summary" />
|
||||
</dd>
|
||||
</for>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div class="return" if="!method.Returns.IsEmpty">
|
||||
|
||||
<h5>Returns</h5>
|
||||
<dl>
|
||||
<dt>
|
||||
<code>${Format(method.ReturnType)}</code>
|
||||
</dt>
|
||||
<dd>
|
||||
<comment content="method.Returns" />
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<value content="method.Value" />
|
||||
<example content="method.Example" />
|
||||
</div>
|
||||
</div>
|
||||
</if>
|
|
@ -0,0 +1,14 @@
|
|||
<nav id="namespaces">
|
||||
<h2 class="fixed">Namespaces</h2>
|
||||
<div class="scroll">
|
||||
<ul>
|
||||
<li each="var ns in Namespaces">
|
||||
<if condition="ns == Namespace">
|
||||
${Format(ns, class => "current")}
|
||||
<else />
|
||||
${Format(ns)}
|
||||
</if>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
|
@ -0,0 +1,27 @@
|
|||
<if condition="properties.Count() > 0">
|
||||
<h3 class="section">${title}</h3>
|
||||
|
||||
<div id="${property.Name}" class="method" each="var property in properties">
|
||||
<h4>
|
||||
${Format(property.ReturnType)} <strong>${h(property.Name)}</strong> <if condition="property.HasGet">get;</if> <if condition="property.HasSet">set;</if>
|
||||
</h4>
|
||||
<div class="content">
|
||||
<comment content="property.Summary" />
|
||||
<remarks content="property.Remarks" />
|
||||
|
||||
<div class="return" if="property.ReturnType.HasDocumentation">
|
||||
<h5>Property type</h5>
|
||||
<dl>
|
||||
<dt>
|
||||
<code>${Format(property.ReturnType)}</code>
|
||||
</dt>
|
||||
<dd>
|
||||
<comment content="property.ReturnType.Summary" />
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<value content="property.Value" />
|
||||
<example content="property.Example" />
|
||||
</div>
|
||||
</div>
|
||||
</if>
|
|
@ -0,0 +1,3 @@
|
|||
<blockquote class="remarks" if="content != null && content.Children.Count() > 0">
|
||||
${Format(content)}
|
||||
</blockquote>
|
14
TimeScheduler/package/docu/templates/!namespace/_types.spark
Normal file
14
TimeScheduler/package/docu/templates/!namespace/_types.spark
Normal file
|
@ -0,0 +1,14 @@
|
|||
<nav id="types">
|
||||
<h2 class="fixed">Types in ${Namespace.PrettyName}</h2>
|
||||
<div class="scroll">
|
||||
<ul>
|
||||
<li each="var type in Namespace.Types">
|
||||
<if condition="type == Type">
|
||||
${Format(type, class => "current")}
|
||||
<else />
|
||||
${Format(type)}
|
||||
</if>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
|
@ -0,0 +1,3 @@
|
|||
<blockquote class="value" if="content.Children.Count() > 0">
|
||||
<strong>Value: </strong>${Format(content)}
|
||||
</blockquote>
|
|
@ -0,0 +1,49 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<title>${Namespace.Name} - ${WriteProductName(Assemblies[0])} Documentation</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<link type="text/css" rel="stylesheet" href="../main.css" />
|
||||
<script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script>
|
||||
<script type="text/javascript" src="../js/jquery.scrollTo-min.js"></script>
|
||||
<script type="text/javascript" src="../js/navigation.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<header><h1>${WriteProductName(Assemblies[0])} : API Documentation</h1>
|
||||
</header>
|
||||
<namespaces />
|
||||
<types />
|
||||
<article>
|
||||
<header>
|
||||
<p class="class"><strong>Namespace</strong> ${Namespace.Name}</p>
|
||||
</header>
|
||||
<section>
|
||||
<div class="sub-header">
|
||||
<if condition="Namespace.HasClasses">
|
||||
<h3 class="section">Classes</h3>
|
||||
<ul>
|
||||
<for each="var type in Namespace.Classes">
|
||||
<li>${Format(type)}</li>
|
||||
</for>
|
||||
</ul>
|
||||
</if>
|
||||
|
||||
<if condition="Namespace.HasInterfaces">
|
||||
<h3 class="section">Interfaces</h3>
|
||||
<ul>
|
||||
<for each="var type in Namespace.Interfaces">
|
||||
<li>${Format(type)}</li>
|
||||
</for>
|
||||
</ul>
|
||||
</if>
|
||||
<p if="!Namespace.HasTypes">This namespace is empty.</p>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
<use file="../_common_footer" />
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,6 @@
|
|||
<footer>
|
||||
<span id="version">Built from v${WriteVersion(Assemblies[0])} of ${WriteAssemblyTitle(Assemblies[0])}</span>
|
||||
<span id="docu-link">
|
||||
Generated by <a href="http://docu.jagregory.com">docu</a>
|
||||
</span>
|
||||
</footer>
|
8
TimeScheduler/package/docu/templates/_namespaces.spark
Normal file
8
TimeScheduler/package/docu/templates/_namespaces.spark
Normal file
|
@ -0,0 +1,8 @@
|
|||
<nav id="namespaces">
|
||||
<h2 class="fixed">Namespaces</h2>
|
||||
<div class="scroll">
|
||||
<ul>
|
||||
<li each="var ns in Namespaces">${Format(ns)}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
10
TimeScheduler/package/docu/templates/_types.spark
Normal file
10
TimeScheduler/package/docu/templates/_types.spark
Normal file
|
@ -0,0 +1,10 @@
|
|||
<nav id="types">
|
||||
<h2 class="fixed">All Types</h2>
|
||||
<div class="scroll">
|
||||
<ul>
|
||||
<for each="var ns in Namespaces">
|
||||
<li each="var type in ns.Types">${Format(type)}</li>
|
||||
</for>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
23
TimeScheduler/package/docu/templates/index.htm.spark
Normal file
23
TimeScheduler/package/docu/templates/index.htm.spark
Normal file
|
@ -0,0 +1,23 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<title>${WriteProductName(Assemblies[0])} API Documentation</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<link type="text/css" rel="stylesheet" href="main.css" />
|
||||
</head>
|
||||
<body>
|
||||
<header><h1>${WriteProductName(Assemblies[0])} : API Documentation</h1>
|
||||
</header>
|
||||
<namespaces />
|
||||
<types />
|
||||
<article>
|
||||
<header>
|
||||
<p class="class">${WriteProductName(Assemblies[0])} Documentation</p>
|
||||
</header>
|
||||
</article>
|
||||
<use file="_common_footer" />
|
||||
</body>
|
||||
</html>
|
21
TimeScheduler/package/docu/templates/js/example.js
Normal file
21
TimeScheduler/package/docu/templates/js/example.js
Normal file
|
@ -0,0 +1,21 @@
|
|||
$(document).ready(function() {
|
||||
$('div.example').each(function(i, div) {
|
||||
var a = $('a', div);
|
||||
var pre = $('pre', div);
|
||||
|
||||
a.pre = pre;
|
||||
a.preVisible = false;
|
||||
pre.hide();
|
||||
a.click(function() {
|
||||
if (a.preVisible) {
|
||||
a.pre.hide();
|
||||
a.text('Show Example');
|
||||
a.preVisible = false;
|
||||
} else {
|
||||
a.pre.show();
|
||||
a.text('Hide Example');
|
||||
a.preVisible = true;
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
19
TimeScheduler/package/docu/templates/js/jquery-1.3.2.min.js
vendored
Normal file
19
TimeScheduler/package/docu/templates/js/jquery-1.3.2.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
TimeScheduler/package/docu/templates/js/jquery.scrollTo-min.js
vendored
Normal file
11
TimeScheduler/package/docu/templates/js/jquery.scrollTo-min.js
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* jQuery.ScrollTo - Easy element scrolling using jQuery.
|
||||
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
||||
* Dual licensed under MIT and GPL.
|
||||
* Date: 5/25/2009
|
||||
* @author Ariel Flesler
|
||||
* @version 1.4.2
|
||||
*
|
||||
* http://flesler.blogspot.com/2007/10/jqueryscrollto.html
|
||||
*/
|
||||
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
|
11
TimeScheduler/package/docu/templates/js/navigation.js
Normal file
11
TimeScheduler/package/docu/templates/js/navigation.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
$(document).ready(function() {
|
||||
var scroll = function(selector) {
|
||||
var currentItem = $(selector + ' .current');
|
||||
|
||||
if (currentItem)
|
||||
$(selector + ' div.scroll').scrollTo(currentItem);
|
||||
};
|
||||
|
||||
scroll('#namespaces');
|
||||
scroll('#types');
|
||||
});
|
263
TimeScheduler/package/docu/templates/main.css
Normal file
263
TimeScheduler/package/docu/templates/main.css
Normal file
|
@ -0,0 +1,263 @@
|
|||
/* HTML5 ? Boilerplate */
|
||||
|
||||
html, body, div, span, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp,
|
||||
small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
blockquote, q { quotes: none; }
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after { content: ""; content: none; }
|
||||
ins { background-color: #ff9; color: #000; text-decoration: none; }
|
||||
mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; }
|
||||
del { text-decoration: line-through; }
|
||||
abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; }
|
||||
table { border-collapse: collapse; border-spacing: 0; }
|
||||
hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
|
||||
input, select { vertical-align: middle; }
|
||||
|
||||
body { font:13px/1.231 sans-serif; }
|
||||
select, input, textarea, button { font:99% sans-serif; }
|
||||
pre, code, kbd, samp { font-family: monospace, sans-serif; }
|
||||
|
||||
html { overflow-y: scroll; }
|
||||
a:hover, a:active { outline: none; }
|
||||
ul, ol { margin-left: 2em; }
|
||||
ol { list-style-type: decimal; }
|
||||
nav ul, nav li { margin: 0; list-style:none; list-style-image: none; }
|
||||
small { font-size: 85%; }
|
||||
strong, th { font-weight: bold; }
|
||||
td { vertical-align: top; }
|
||||
sub, sup { font-size: 75%; line-height: 0; position: relative; }
|
||||
sup { top: -0.5em; }
|
||||
sub { bottom: -0.25em; }
|
||||
|
||||
pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; padding: 15px; }
|
||||
textarea { overflow: auto; }
|
||||
.ie6 legend, .ie7 legend { margin-left: -7px; }
|
||||
input[type="radio"] { vertical-align: text-bottom; }
|
||||
input[type="checkbox"] { vertical-align: bottom; }
|
||||
.ie7 input[type="checkbox"] { vertical-align: baseline; }
|
||||
.ie6 input { vertical-align: text-bottom; }
|
||||
label, input[type="button"], input[type="submit"], input[type="image"], button { cursor: pointer; }
|
||||
button, input, select, textarea { margin: 0; }
|
||||
input:valid, textarea:valid { }
|
||||
input:invalid, textarea:invalid { -moz-box-shadow: 0px 0px 5px red; -webkit-box-shadow: 0px 0px 5px red; }
|
||||
.no-boxshadow input:invalid, .no-boxshadow textarea:invalid { background-color: #f0dddd; }
|
||||
|
||||
|
||||
::-moz-selection{ background: #FF5E99; color:#fff; }
|
||||
::selection { background:#FF5E99; color:#fff; }
|
||||
a:link { -webkit-tap-highlight-color: #FF5E99; }
|
||||
button { width: auto; overflow: visible; }
|
||||
.ie7 img { -ms-interpolation-mode: bicubic; }
|
||||
|
||||
h1, h2, h3, h4, h5, h6 { font-weight: bold; }
|
||||
a, a:active, a:visited { color: #607890; }
|
||||
a:hover { color: #036; }
|
||||
|
||||
|
||||
/**
|
||||
* Primary styles
|
||||
*
|
||||
* Author: Dylan Beattie (dylan@dylanbeattie.net)
|
||||
*/
|
||||
|
||||
body > header {
|
||||
position: absolute;
|
||||
left: 8px;
|
||||
right: 8px;
|
||||
top: 8px;
|
||||
height: 16px;
|
||||
padding: 4px;
|
||||
border: 1px solid #333333;
|
||||
}
|
||||
|
||||
body > header > span#project-link {
|
||||
position: absolute;
|
||||
right: 4px;
|
||||
top: 4px;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #999999;
|
||||
}
|
||||
nav {
|
||||
padding: 0px;
|
||||
}
|
||||
div.scroll {
|
||||
padding: 4px;
|
||||
overflow: auto;
|
||||
position: absolute;
|
||||
top: 24px;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
div.scroll ul li {
|
||||
padding: 2px 0px;
|
||||
}
|
||||
div.scroll ul li a {
|
||||
text-decoration: none;
|
||||
}
|
||||
nav#namespaces {
|
||||
position: absolute;
|
||||
top: 42px;
|
||||
left: 8px;
|
||||
bottom: 8px;
|
||||
width: 384px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
nav#types {
|
||||
position: absolute;
|
||||
top: 42px;
|
||||
right: 8px;
|
||||
left: 400px;
|
||||
height: 204px;
|
||||
background-color: #fff;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
article {
|
||||
position: absolute;
|
||||
left: 400px;
|
||||
top: 256px;
|
||||
bottom: 40px;
|
||||
right: 8px;
|
||||
background-color: #fff;
|
||||
}
|
||||
footer {
|
||||
position: absolute;
|
||||
left: 400px;
|
||||
bottom: 8px;
|
||||
height: 16px;
|
||||
right: 8px;
|
||||
background-color: #aaaaaa;
|
||||
padding: 4px;
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #cccccc;
|
||||
}
|
||||
header p {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
nav h2, header p.class {
|
||||
background-color: #333333;
|
||||
padding: 4px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
article section {
|
||||
position: absolute;
|
||||
top: 24px;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
overflow:auto;
|
||||
}
|
||||
|
||||
section ul li {
|
||||
margin: 4px 0px;
|
||||
}
|
||||
article section header p { margin: 0px; }
|
||||
article section h3, article section p {
|
||||
padding: 4px;
|
||||
margin: 4px 0px;
|
||||
}
|
||||
article section h3 {
|
||||
font-size: 120%;
|
||||
}
|
||||
div.method {
|
||||
padding: 4px 4px 4px 16px;
|
||||
}
|
||||
|
||||
div#summary {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
div.method div.content {
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
footer span#docu-link {
|
||||
position: absolute;
|
||||
right: 4px;
|
||||
}
|
||||
code {
|
||||
font-family: Consolas, Courier, monospaced;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
|
||||
h5 {
|
||||
margin: 8px 0px;
|
||||
}
|
||||
|
||||
dl dt { width: 180px; float: left; }
|
||||
dl dd { margin-left: 180px; }
|
||||
|
||||
|
||||
|
||||
.ir { display: block; text-indent: -999em; overflow: hidden; background-repeat: no-repeat; text-align: left; direction: ltr; }
|
||||
.hidden { display: none; visibility: hidden; }
|
||||
.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
|
||||
.visuallyhidden.focusable:active,
|
||||
.visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
|
||||
.invisible { visibility: hidden; }
|
||||
.clearfix:before, .clearfix:after { content: "\0020"; display: block; height: 0; overflow: hidden; }
|
||||
.clearfix:after { clear: both; }
|
||||
.clearfix { zoom: 1; }
|
||||
|
||||
|
||||
@media all and (orientation:portrait) {
|
||||
|
||||
}
|
||||
|
||||
@media all and (orientation:landscape) {
|
||||
|
||||
}
|
||||
|
||||
@media screen and (max-device-width: 480px) {
|
||||
|
||||
/* html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */
|
||||
}
|
||||
|
||||
|
||||
@media print {
|
||||
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important;
|
||||
-ms-filter: none !important; }
|
||||
a, a:visited { color: #444 !important; text-decoration: underline; }
|
||||
a[href]:after { content: " (" attr(href) ")"; }
|
||||
abbr[title]:after { content: " (" attr(title) ")"; }
|
||||
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
|
||||
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
|
||||
thead { display: table-header-group; }
|
||||
tr, img { page-break-inside: avoid; }
|
||||
@page { margin: 0.5cm; }
|
||||
p, h2, h3 { orphans: 3; widows: 3; }
|
||||
h2, h3{ page-break-after: avoid; }
|
||||
}
|
||||
|
2384
TimeScheduler/package/doxygen/TimeScheduler.doxyconf
Normal file
2384
TimeScheduler/package/doxygen/TimeScheduler.doxyconf
Normal file
File diff suppressed because it is too large
Load diff
BIN
TimeScheduler/package/doxygen/doxygen.exe
Normal file
BIN
TimeScheduler/package/doxygen/doxygen.exe
Normal file
Binary file not shown.
BIN
TimeScheduler/package/doxygen/doxygen_manual-1.8.10.pdf
Normal file
BIN
TimeScheduler/package/doxygen/doxygen_manual-1.8.10.pdf
Normal file
Binary file not shown.
BIN
TimeScheduler/package/doxygen/doxyindexer.exe
Normal file
BIN
TimeScheduler/package/doxygen/doxyindexer.exe
Normal file
Binary file not shown.
BIN
TimeScheduler/package/doxygen/doxysearch.cgi.exe
Normal file
BIN
TimeScheduler/package/doxygen/doxysearch.cgi.exe
Normal file
Binary file not shown.
Loading…
Reference in a new issue