# Recent QSOs and Filters

## The Recent QSOs grid

The main log table. Double-click a row to edit; **right-click** for everything
else (see [The right-click menu](#the-right-click-menu) below). Columns are
configurable — click **Columns** to choose which are visible; widths, order and
hidden columns are saved (per profile), with a separate layout for the narrower
Main-tab pane.

- The selected-row count is always visible at the top, and a **Select all /
  Unselect all** button takes every displayed row.
- QSL and upload status columns are coloured: **Y** green, **N** red, **R**
  blue, **V** (verified) green — a LoTW contact marked *V* counts as confirmed
  everywhere, like *Y*.
- A **Distance (km)** column (also in Worked-before) is computed from the QSO's
  own locator pair.
- There are **no per-column header filters** — they only ever searched the rows
  on screen, which made a QSO further back in the log look missing. Use the
  advanced filter, which queries the whole logbook.

A QSO logged from **WSJT-X, MSHV, JTDX or a net** appears here immediately, not
when its auto-upload eventually goes out. That matters if you use a *delayed*
upload to leave yourself time to correct a contact before it is sent.

### Award columns

Each defined award can show a column with the reference the QSO counts for.
These columns are **hidden by default** and opt-in from the Columns picker.

---

## The right-click menu

Select one or more rows, right-click, and the menu acts on **the whole
selection**. Right-clicking a row that is not selected selects it first, so a
single right-click on one QSO always does what it looks like it will.

| Entry | What it does |
|---|---|
| **Fix country & zones from cty.dat** | Re-derives DXCC, continent, CQ and ITU zones from the prefix database. Use after a cty.dat update, or on QSOs imported without zones. |
| **Update from the callsign databases** | Re-queries QRZ.com / HamQTH per QSO. A network round trip each — a progress bar appears. |
| **Update from ClubLog (exceptions)** | Applies Club Log's exception list: callsigns whose real entity is not what the prefix says. |
| **Update US county from the ULS database** | Re-derives the county of US contacts and **replaces** what is stored. Only appears once the county database is downloaded — see [[Awards]]. |
| **Send OpsLog QSL by e-mail** | Renders the [[QSL Card Designer]] card for that QSO and mails it. |
| **Bulk edit field…** | One field, one value, on every selected QSO. Leaving the value **empty clears** the field. |
| **Export selected to ADIF / Cabrillo** | Just the rows you picked. |
| **Export selected — choose fields…** | Same, but you pick which ADIF fields go in the file. |
| **Export filtered view to ADIF / Cabrillo** | **Every QSO the current filter matches** — not only the rows on screen, and with no row limit. |
| **Send to QRZ / Club Log / HRDLog / eQSL / LoTW** | Uploads the selection now, whatever the automatic upload mode is. |
| **Delete…** | With a confirmation naming the count. |

> **Exporting a filtered search is two different entries.** *Export selected*
> takes the rows you highlighted. *Export filtered view* takes the whole result
> of the filter, including the QSOs scrolled off the bottom. When you have just
> built a filter and want the lot, it is the second one.

---

## Advanced filter builder

Click the filter button to open the **QSO filter builder** (Log4OM-style).

- Add one or more **conditions**: *field · operator · value*.
- Operators: equals, not-equal, contains, starts/ends with, greater/less
  (or equal), is empty, is not empty.
- Fields include every confirmation **status and date** (sent / received,
  before / after) for paper QSL, LoTW, eQSL, Club Log, HRDLog and QRZ.com.
  Field names stay in English — they are ADIF names, a standard vocabulary.
- Join the conditions with **ALL (AND)** or **ANY (OR)**.
- Save named **presets** (they travel with the `data/` folder).

A filter shows **every** match — the on-screen row limit only applies to the
unfiltered log (safety cap 10 000).

### Worked examples

Each of these is a few clicks in the builder. The point of the last column is
what you then do with the result.

**1. Everything worked on 20 m in FT8 that is still unconfirmed on LoTW**

| Join | Field | Operator | Value |
|---|---|---|---|
| ALL | `band` | equals | `20m` |
| | `mode` | equals | `FT8` |
| | `lotw_qsl_rcvd` | is empty | |

→ right-click → **Export filtered view to ADIF**, and you have the file to
re-upload or to check against LoTW.

**2. Paper cards sent but never answered, older than a year**

| Join | Field | Operator | Value |
|---|---|---|---|
| ALL | `qsl_sent` | equals | `Y` |
| | `qsl_rcvd` | is empty | |
| | `qso_date` | less than | `20250816` |

→ select all → **Bulk edit field** to mark them for a bureau chase, or export
them for a follow-up list.

**3. Every contact with one entity, on any band, in a date range**

| Join | Field | Operator | Value |
|---|---|---|---|
| ALL | `dxcc` | equals | `291` |
| | `qso_date` | greater or equal | `20260101` |
| | `qso_date` | less or equal | `20261231` |

→ this is the shape for an award submission. Save it as a **preset** so next
year is one click and a date change.

**4. Anything that might be a duplicate of tonight's run**

| Join | Field | Operator | Value |
|---|---|---|---|
| ALL | `call` | contains | `DL` |
| | `band` | equals | `40m` |
| ANY | `qsl_sent` | equals | `Y` |
| | `lotw_qsl_sent` | equals | `Y` |

Note the mix: the **ALL** block narrows to the contacts you care about, the
**ANY** block accepts a QSO confirmed by either route.

**5. US contacts with no county recorded**

| Join | Field | Operator | Value |
|---|---|---|---|
| ALL | `dxcc` | equals | `291` |
| | `cnty` | is empty | |

→ select all → right-click → **Update US county from the ULS database**.

### Tips

- **Dates are ADIF dates**: `YYYYMMDD`, no separators. `20260816`, not
  `16/08/2026`.
- **`is empty` is not the same as `equals N`.** A QSL that was never sent is
  empty; one explicitly marked *not sent* holds `N`. Filters on confirmation
  usually want *is empty*.
- To find what a field is called, show its column in the grid: the Columns
  picker and the filter builder use the same ADIF names.
- A preset saves the conditions, not the results — it re-runs against the log
  as it is today.

---

## Worked-before matrix

As you type a callsign, the worked-before grid shows prior contacts with that
**entity**, arranged by band/mode slot, so you instantly see what's new (new
DXCC / new band / new slot) versus already worked. Its right-click menu offers
the same bulk edit and export as the main grid.
