Add control elements for columns.

- NEU: Steuer-Elemente für Spalten.
This commit is contained in:
Daniel Kraus 2015-08-09 20:54:43 +02:00
parent 5833e0fcb7
commit a009c1ab39
13 changed files with 192 additions and 42 deletions

View File

@ -26,12 +26,23 @@ namespace zaaReloaded2.Controller.Elements
/// </summary>
public abstract class ControlElementBase : ElementBase
{
#region Propertis
/// <summary>
/// Gets a list of child elements, all of which must be derived
/// from FormatElementBase.
/// </summary>
public IList<FormatElementBase> Children { get; internal set; }
/// <summary>
/// Informs whether this control element can have child elements.
/// </summary>
public virtual bool CanHaveChildren { get { return true; } }
#endregion
#region Constructors
public ControlElementBase()
: this(new List<FormatElementBase>())
{ }
@ -45,6 +56,10 @@ namespace zaaReloaded2.Controller.Elements
: this(new List<FormatElementBase>() { children })
{ }
#endregion
#region Protected methods
/// <summary>
/// Creates a clone of the Children list (for use in cloning
/// derived classes).
@ -54,5 +69,7 @@ namespace zaaReloaded2.Controller.Elements
{
return Children.Select(child => child.Clone() as FormatElementBase).ToList();
}
#endregion
}
}

View File

@ -32,7 +32,6 @@ namespace zaaReloaded2.Controller.Elements
set
{
_content = value;
}
}

View File

@ -0,0 +1,54 @@
/* NextColumn.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace zaaReloaded2.Controller.Elements
{
/// <summary>
/// Format element that causes a Formatter object to move the
/// insertion point to the next colum in a layout table.
/// </summary>
class NextColumn : ControlElementBase
{
public override string Label
{
get { return "Nächste Spalte"; }
}
public override bool CanHaveChildren
{
get
{
return false;
}
}
public override void Run(Formatter.Formatter formatter)
{
formatter.NextColumn();
}
protected override ElementBase CreateInstance()
{
return new NextColumn();
}
}
}

View File

@ -0,0 +1,54 @@
/* TwoColumns.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace zaaReloaded2.Controller.Elements
{
/// <summary>
/// Format element that causes a Formatter object to insert a table with
/// two columns and one row into the documents.
/// </summary>
class TwoColumns : ControlElementBase
{
public override string Label
{
get { return "Zwei Spalten einfügen"; }
}
public override bool CanHaveChildren
{
get
{
return false;
}
}
public override void Run(Formatter.Formatter formatter)
{
formatter.InsertTwoColumns();
}
protected override ElementBase CreateInstance()
{
return new TwoColumns();
}
}
}

View File

@ -89,6 +89,7 @@ namespace zaaReloaded2.Controller
{
return SettingsList.FirstOrDefault(s => s.Uid == uid);
}
#endregion
#region Private methods
@ -127,7 +128,9 @@ namespace zaaReloaded2.Controller
def.SettingsNameWard,
new List<ElementBase>()
{
new TwoColumns(),
new SelectFirstDay(defaultItems),
new NextColumn(),
new SelectLastDay(defaultItems)
}
)

View File

@ -119,13 +119,14 @@ namespace zaaReloaded2.Formatter
if (Document != null)
{
Document.ActiveWindow.Selection.ClearCharacterDirectFormatting();
Document.ActiveWindow.Selection.ClearParagraphDirectFormatting();
Selection s = Document.ActiveWindow.Selection;
s.ClearCharacterDirectFormatting();
s.ClearParagraphDirectFormatting();
if (!string.IsNullOrEmpty(ParagraphStyle))
{
Document.ActiveWindow.Selection.set_Style(ParagraphStyle);
s.set_Style(ParagraphStyle);
}
Document.ActiveWindow.Selection.Range.Text = _buffer.ToString();
s.Range.Text = _buffer.ToString();
}
if (Parent != null)
{

View File

@ -121,6 +121,8 @@ namespace zaaReloaded2.Formatter
{
if (!CanRun) throw new InvalidOperationException("No laboratory data to format.");
CreateParagraphStyle();
_secondaryBuffer.ParagraphStyle = zaaReloaded2.Properties.Settings.Default.ParagraphStyleName;
int current = 0;
while (current < Settings.Elements.Count)
{
@ -145,8 +147,6 @@ namespace zaaReloaded2.Formatter
current++;
}
}
CreateParagraphStyle();
_secondaryBuffer.ParagraphStyle = zaaReloaded2.Properties.Settings.Default.ParagraphStyleName;
_secondaryBuffer.Flush();
}
@ -208,6 +208,39 @@ namespace zaaReloaded2.Formatter
ProcessAllTimePoints(controlElement.Children);
}
/// <summary>
/// Inserts a table with two columns into the document.
/// </summary>
public void InsertTwoColumns()
{
_secondaryBuffer.Flush();
if (Document != null)
{
Range r = Document.ActiveWindow.Selection.Range;
_table = Document.Tables.Add(r, NumRows: 1, NumColumns: 2);
_table.AllowAutoFit = true;
_table.AutoFitBehavior(WdAutoFitBehavior.wdAutoFitWindow);
_table.PreferredWidthType = WdPreferredWidthType.wdPreferredWidthPercent;
_table.PreferredWidth = 100;
_table.Borders.Enable = 0;
}
}
/// <summary>
/// Moves the insertion point to the next column in a layout
/// table.
/// </summary>
public void NextColumn()
{
if (_table == null)
{
throw new InvalidOperationException(
"Kann nicht zur nächsten Spalte wechseln, da bislang keine Tabelle eingefügt wurde.");
}
_secondaryBuffer.Flush();
Document.ActiveWindow.Selection.MoveRight(WdUnits.wdCell);
}
/// <summary>
/// Creates a zaaReloaded2 paragraph style in the document.
/// </summary>
@ -324,6 +357,7 @@ namespace zaaReloaded2.Formatter
Laboratory _laboratory;
DocumentWriter _primaryBuffer;
DocumentWriter _secondaryBuffer;
Table _table;
#endregion
}

View File

@ -35,6 +35,18 @@ namespace zaaReloaded2.ViewModels
/// </summary>
public ObservableCollection<ElementViewModel> Elements { get; protected set; }
/// <summary>
/// Gets information whether this control element view model can
/// have child elements;
/// </summary>
public virtual bool CanHaveChildren
{
get
{
return ((ControlElementBase)Element).CanHaveChildren;
}
}
#endregion
#region Constructors

View File

@ -105,7 +105,9 @@ namespace zaaReloaded2.ViewModels
{
CreateControlElementViewModel(new SelectFirstDay()),
CreateControlElementViewModel(new SelectLastDay()),
CreateControlElementViewModel(new SelectEachDay())
CreateControlElementViewModel(new SelectEachDay()),
CreateControlElementViewModel(new TwoColumns()),
CreateControlElementViewModel(new NextColumn()),
}
)
);
@ -130,7 +132,9 @@ namespace zaaReloaded2.ViewModels
{
CreateControlElementViewModel(new SelectFirstDay(), copyFromViewModel),
CreateControlElementViewModel(new SelectLastDay(), copyFromViewModel),
CreateControlElementViewModel(new SelectEachDay(), copyFromViewModel)
CreateControlElementViewModel(new SelectEachDay(), copyFromViewModel),
CreateControlElementViewModel(new TwoColumns()),
CreateControlElementViewModel(new NextColumn()),
}
)
);

View File

@ -30,23 +30,11 @@ namespace zaaReloaded2.ViewModels
{
#region Properties
/// <summary>
/// Gets the label of the wrapped element.
/// </summary>
public virtual string Label
{
[DebuggerStepThrough]
get
{
return Element.Label;
}
}
public override string DisplayString
{
get
{
return Label;
return Element.Label;
}
}

View File

@ -89,25 +89,6 @@ namespace zaaReloaded2.ViewModels
return clone;
}
public override string DisplayString
{
get
{
if (String.IsNullOrEmpty(Content))
{
return _displayString;
}
else
{
return base.DisplayString;
}
}
set
{
_displayString = value;
}
}
#endregion
#region Private methods

View File

@ -345,7 +345,8 @@ namespace zaaReloaded2.ViewModels
bool CanAddChildElement()
{
return LastSelectedElement is ControlElementViewModel;
return LastSelectedElement is ControlElementViewModel &&
((ControlElementViewModel)LastSelectedElement).CanHaveChildren;
}
void DoEditElement()

View File

@ -193,10 +193,12 @@
<ItemGroup>
<Compile Include="Controller\Elements\ControlElementBase.cs" />
<Compile Include="Controller\Elements\FormatElementBase.cs" />
<Compile Include="Controller\Elements\NextColumn.cs" />
<Compile Include="Controller\Elements\SelectEachDay.cs" />
<Compile Include="Controller\Elements\SelectLastDay.cs" />
<Compile Include="Controller\Elements\SelectFirstDay.cs" />
<Compile Include="Controller\Elements\CustomText.cs" />
<Compile Include="Controller\Elements\TwoColumns.cs" />
<Compile Include="Controller\Settings.cs" />
<Compile Include="Controller\SettingsRepository.cs" />
<Compile Include="Demo\Demo.cs" />