Overview

BeepCalendar is the most decomposed control in the library, split across 90+ partial files organized into 8 subsystems. This design keeps each file focused and manageable despite the control's complexity (~15,000+ lines total).

Partial Class Design

SubsystemFilesResponsibility
Core6 filesConstructor, public API, lifecycle, style, appearance
Commands5 filesPublic commands, execution core, helpers, duplicate detection
Event Operations13 filesCRUD, history (undo/redo), navigation, queries, editor
Interactions16 filesPointer events, timing, proposals, hit testing, commitment
Painting11 filesPipeline, views (Month/Week/Day/List), design-time, sidebar
Layout Theme9 filesTheme application, controls, categories, responsive labels
Visual Updates3 filesFlush, scope, invalidation strategy
Types & Fields5 filesEnums, EventArgs, command types, event model

Event Operations

EventOperations/
  ├── BeepCalendar.EventOperations.cs           — Main partial
  ├── BeepCalendar.EventOperations.Public.cs     — Public API
  ├── BeepCalendar.EventOperations.Navigation.cs  — Today/Next/Prev
  ├── BeepCalendar.EventOperations.Queries.cs    — Filter/Search
  ├── BeepCalendar.EventOperations.Crud.cs        — CRUD coordinator
  │    ├── Crud.Add.cs      — Add event logic
  │    ├── Crud.Remove.cs   — Remove event logic
  │    └── Crud.Upsert.cs   — Upsert logic
  ├── BeepCalendar.EventOperations.History.cs     — Undo/redo coordinator
  │    ├── History.Internal.cs
  │    └── History.Apply.cs  — Apply/Apply.Upsert/Apply.Remove
  └── BeepCalendar.EventOperations.Editor.cs     — Event editor integration
       └── Editor.Commit.cs

Painting Pipeline

Painting/
  ├── BeepCalendar.Painting.cs                    — Main partial
  ├── BeepCalendar.Painting.Pipeline.cs           — Paint orchestration
  │    ├── Pipeline.Views.cs     — View dispatch
  │    ├── Pipeline.Telemetry.cs — Performance metrics
  │    ├── Pipeline.Legacy.cs    — Backward compat
  │    └── Pipeline.HeaderFormatting.cs
  ├── BeepCalendar.Painting.Views.cs              — View-level paint
  │    ├── Painting.MonthView.cs + MonthView.Events.cs + MonthView.Headers.cs
  │    ├── Painting.WeekView.cs + WeekView.Events.cs
  │    ├── Painting.DayView.cs
  │    └── Painting.ListView.cs
  ├── BeepCalendar.Painting.DesignTime.cs         — Designer preview
  ├── BeepCalendar.Painting.Helpers.cs            — Paint utilities
  └── BeepCalendar.Painting.Sidebar.cs            — Sidebar calendar

Interaction System

The interaction system handles all pointer/touch/mouse events with hit testing that adapts to the current view mode:

  • Pointer — Mouse down/up/move/cancel with view-specific hit testing
  • Timing — Start/end time selection with snap-to-grid (configurable interval)
  • Proposals — Visual preview of event being created (ghost rectangle)
  • Hit Testing — MonthView, WeekView, DayView, TimelineView, TimedView, ListView, AgendaView
  • Commitment — New event creation, copy-on-drag, modification tracking

File Map

Notable internal helpers:

  • CalendarEventEditor — Public sealed class implementing ICalendarEventEditor. Opens a dialog form with a UserControl for editing event details (title, start/end, all-day, location, status, organizer, description).
  • CalendarLayoutManager — Calculates cell positions and dimensions for each view mode
  • CalendarViewStateHelper — Tracks view state across mode switches
  • CalendarPerformanceMetrics — Measures rendering performance
  • CalendarEventService — Conflict detection and resolution

Examples

var cal = new BeepCalendar();

// View modes
cal.ViewMode = CalendarViewMode.Month;  // Month/Week/Day/Agenda/Timeline
cal.CurrentDate = DateTime.Today;
cal.ShowSidebar = true;

// Events
cal.Events.Add(new CalendarEvent
{
    Title = "Team Standup",
    Start = DateTime.Today.AddHours(9),
    End = DateTime.Today.AddHours(9.5),
    Category = categories["Meeting"]
});

// Undo/redo
if (cal.CanUndo) cal.Undo();
if (cal.CanRedo) cal.Redo();

// Conflict detection
cal.ConflictDetected += (s, e) =>
    Console.WriteLine($"Conflict: {e.Conflict.Description}");