Orc.Controls is a WPF UI controls library by WildGums. It provides a comprehensive set of reusable controls for Line of Business applications, including date/time pickers, log viewers, color pickers, validation controls, and many more.
Orc.Controls consists of the following projects:
Orc.Controls— Core WPF controls library.Orc.Controls.Settings— Settings infrastructure for controls.Orc.Controls.Tests— Unit and UI tests for the library.
These rules are non-negotiable. Violating them causes broken builds, crashes, or downstream breakage.
Files matching *.generated.cs, *.generated.xaml are auto-generated.
- NEVER manually edit these files
This project maintains stable ABI / API. Breaking changes break downstream apps.
| Allowed | Never |
|---|---|
| Add new overloads | Modify existing signatures |
| Add new methods | Remove public APIs |
| Add new classes | Change return types |
The PublicApiFacts tests in Orc.Controls.Tests automatically detect breaking public API changes. These tests must pass.
Building alone is NOT sufficient. Run tests before claiming completion (see Commands).
Direct commits to protected branches are a policy violation.
| Repository | Protected Branches |
|---|---|
| Orc.Controls | master |
| Orc.Controls | develop |
Required workflow:
- Create a feature branch FIRST — Use naming convention:
feature/issue-NNNN-description - Make all commits on the feature branch — Never commit directly to protected branches
- Submit a Pull Request — Changes must be reviewed by a human before merging
# CORRECT — Always create a feature branch first
git checkout -b feature/issue-1234-fix-description
# NEVER DO THIS — Policy violation
git checkout develop && git commit # FORBIDDEN
# NEVER DO THIS — Policy violation
git checkout master && git commit # FORBIDDENSingle source of truth for all commands:
| Task | Command |
|---|---|
| Build | dotnet cake --target=build |
| Test | dotnet cake --target=test |
| Build and test | dotnet cake --target=buildandtest |
src/
Orc.Controls/ # Core WPF controls (DateTimePicker, LogViewer, ColorPicker, etc.)
Orc.Controls.Settings/ # Settings infrastructure
Orc.Controls.Tests/ # NUnit unit and UI tests
Orc.Controls.Example/ # Example application demonstrating controls
deployment/ # Build and deployment scripts
design/ # Design assets
The Orc.Controls/Controls/ directory contains each control in its own subdirectory:
DateTimePicker,DateRangePicker,TimePicker,TimeSpanPickerColorPicker,ColorLegendLogViewerFilterBox,WatermarkTextBoxOpenFilePicker,SaveFilePicker,DirectoryPickerValidationContextControlNumericTextBox,NumericUpDownDropDownButton,LinkLabel,StepBar,RangeSlider- And many more
| Directory | Editable? | Notes |
|---|---|---|
*.generated.cs |
No | Leave as-is |
*.generated.xaml |
No | Leave as-is |
deployment/ |
No | Deployment / build scripts |
src/Orc.Controls/Controls/ |
Yes | Individual WPF control implementations |
src/Orc.Controls/Themes/ |
Yes | XAML resource dictionaries and styles |
src/Orc.Controls.Tests/ |
Yes | Tests for all controls and utilities |
| Anti-Pattern | Why |
|---|---|
| Modifying method signatures | ABI breaking |
Manual edits to *.generated.cs, *.generated.xaml |
Overwritten on regenerate |
| Using default parameters in public APIs | ABI breaking |
| Skipping failing tests | Unacceptable — tests must pass |
dotnet cake --target=testNON-NEGOTIABLE: Tests must PASS before claiming completion.
- Do NOT skip failing tests
- Do NOT claim completion if tests fail
- Do NOT use
SkipExceptionto work around failures
- Use NUnit to write tests
- Name test classes with the suffix
FactsorTests - Combine Pascal / Snake case for test methods (e.g.
Feature_Does_Work)
[TestFixture]
public class MyControlFacts
{
[Test]
public void Feature_Does_Work()
{
var result = 47 - 5;
Assert.That(result, Is.EqualTo(42));
}
}Philosophy: Tests FAIL when wrong, never skip (except missing hardware).
The PublicApiFacts class verifies that no breaking changes are introduced to the public API:
Orc_Controls_HasNoBreakingChanges_Async— ChecksOrc.ControlsassemblyOrc_Controls_Settings_HasNoBreakingChanges_Async— ChecksOrc.Controls.Settingsassembly
When intentionally adding new public API, update the corresponding .verified.txt snapshot files in Orc.Controls.Tests/.
- Establish baseline — What's the known-good state?
- One change at a time — Verify each change before proceeding
- Track changes in a table — Log what you changed and the result
- Platform differences are signals — If X works and Y fails, the difference IS the answer
- Revert if worse — Don't pile fixes on top of failures
| Topic | Document |
|---|---|
| Contributing guidelines | CONTRIBUTING.md |
| Project documentation | opensource.wildgums.com |