# Maximum Width Dynamic Layout

## Overview

The Flow Analysis View now dynamically adjusts to use the maximum available terminal width, ensuring optimal use of screen real estate regardless of terminal size.

## Dynamic Width Calculation

### Available Space Calculation
```python
available_width = terminal_width - 16  # 4 chars left + 4 chars right + 8 safety margin
```

**Prevents Line Wrapping**: Very conservative calculation ensures content never exceeds terminal width, even on narrow terminals

### Minimum Column Requirements
| Column | Min Width | Purpose |
|--------|-----------|---------|
| Flow # | 3 chars | Flow number with space |
| Source | 15 chars | Compact IP:port |
| Proto | 4 chars | Transport protocol |
| Destination | 15 chars | Compact IP:port |
| Extended | 6 chars | Extended protocol |
| Frame Type | 8 chars | Frame type name |
| Pkts | 6 chars | Right-aligned numbers |
| Volume | 8 chars | Right-aligned with units |
| Timing | 8 chars | Right-aligned with units |
| Quality | 8 chars | Right-aligned percentages |

**Total Minimum**: 81 characters

### Space Distribution Algorithm

1. **Check Available Space**: If terminal width > minimum requirements
2. **Calculate Extra Space**: `extra = available_width - minimum_total`
3. **Distribute to Text Columns**: Extra space goes to expandable columns:
   - Source (IP:port endpoints)
   - Destination (IP:port endpoints)
   - Extended (protocol names)
   - Frame Type (frame type names)

4. **Equal Distribution**: `extra_per_column = extra_space ÷ 4`
5. **Remainder Handling**: Any leftover space goes to Source and Destination columns

### Example Width Distributions

#### Small Terminal (120 chars)
```
Available: 112 chars (120 - 8 margin)
Extra: 6 chars (112 - 106 minimum)
Distribution: +1 to Source, +1 to Destination, +1 to Extended, +1 to Frame Type, +2 remainder to Source/Dest
```

#### Medium Terminal (150 chars) 
```
Available: 142 chars (150 - 8 margin)
Extra: 36 chars (142 - 106 minimum)
Distribution: +9 to each expandable column
```

#### Large Terminal (200 chars)
```
Available: 192 chars (200 - 8 margin)
Extra: 86 chars (192 - 106 minimum) 
Distribution: +21 to each expandable column, +2 remainder to Source/Dest
```

## Adaptive Features

### Intelligent Truncation
- Source/Destination fields truncate based on their allocated width
- IP addresses get maximum space before port numbers
- Ellipsis (…) indicates truncated content

### Perfect Alignment
- All right-aligned columns maintain perfect edge alignment
- Sub-row indentation matches main flow number column width
- Headers automatically adjust to match column widths

### Responsive Layout
```
Small Terminal (120 chars):
  #   Source               Proto  Destination          Extended Frame Type    Pkts    Volume     Timing    Quality

Large Terminal (200 chars):
   #   Source                          Proto      Destination                     Extended       Frame Type            Pkts      Volume        Timing      Quality
```

## Benefits

1. **Maximum Information Density**: Uses every available character of terminal width
2. **Scalable Design**: Works equally well on narrow and wide terminals
3. **Perfect Alignment**: All columns line up properly regardless of terminal size
4. **Responsive Text**: Important text fields expand to show more information on wider screens
5. **Consistent Metrics**: Numeric columns maintain consistent width for easy comparison

## Implementation Details

### Dynamic Column Width Object
```python
self.column_widths = {
    'flow_num': 4,
    'source': 25,      # Dynamically calculated
    'proto': 6,
    'destination': 25, # Dynamically calculated  
    'extended': 12,    # Dynamically calculated
    'frame_type': 14,  # Dynamically calculated
    'pkts': 8,
    'volume': 10,
    'timing': 10,
    'quality': 10
}
```

### Formatting Functions
- `_calculate_column_widths()`: Determines optimal column widths for current terminal
- `_format_headers()`: Creates header line with dynamic spacing
- `_format_flow_summary_line()`: Formats main flow lines with dynamic widths
- `_format_protocol_frame_line()`: Formats sub-rows with matching alignment

The layout now provides optimal readability and information display regardless of terminal size, from compact laptop screens to ultra-wide monitors.