Skip to content

Commit 2e9012d

Browse files
committed
refactor: simplify data table context menu layout
1 parent cf59609 commit 2e9012d

2 files changed

Lines changed: 56 additions & 49 deletions

File tree

TablePro/Resources/Localizable.xcstrings

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2714,6 +2714,9 @@
27142714
}
27152715
}
27162716
}
2717+
},
2718+
"Cell Value" : {
2719+
27172720
},
27182721
"Change Color" : {
27192722
"localizations" : {
@@ -4098,6 +4101,7 @@
40984101
}
40994102
},
41004103
"Copy Cell Value" : {
4104+
"extractionState" : "stale",
41014105
"localizations" : {
41024106
"vi" : {
41034107
"stringUnit" : {
@@ -17189,6 +17193,9 @@
1718917193
}
1719017194
}
1719117195
}
17196+
},
17197+
"With Headers" : {
17198+
1719217199
},
1719317200
"Word wrap" : {
1719417201
"localizations" : {

TablePro/Views/Results/TableRowViewWithMenu.swift

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -33,66 +33,38 @@ final class TableRowViewWithMenu: NSTableRowView {
3333
).target = self
3434
}
3535

36-
// Normal row menu (or additional items for inserted rows)
3736
if !coordinator.changeManager.isRowDeleted(rowIndex) {
38-
// Edit actions (if editable)
39-
if coordinator.isEditable && dataColumnIndex >= 0 {
40-
let setValueMenu = NSMenu()
41-
42-
let emptyItem = NSMenuItem(
43-
title: String(localized: "Empty"), action: #selector(setEmptyValue(_:)), keyEquivalent: "")
44-
emptyItem.representedObject = dataColumnIndex
45-
emptyItem.target = self
46-
setValueMenu.addItem(emptyItem)
47-
48-
let nullItem = NSMenuItem(
49-
title: String(localized: "NULL"), action: #selector(setNullValue(_:)), keyEquivalent: "")
50-
nullItem.representedObject = dataColumnIndex
51-
nullItem.target = self
52-
setValueMenu.addItem(nullItem)
53-
54-
let defaultItem = NSMenuItem(
55-
title: String(localized: "Default"), action: #selector(setDefaultValue(_:)), keyEquivalent: "")
56-
defaultItem.representedObject = dataColumnIndex
57-
defaultItem.target = self
58-
setValueMenu.addItem(defaultItem)
59-
60-
let setValueItem = NSMenuItem(title: String(localized: "Set Value"), action: nil, keyEquivalent: "")
61-
setValueItem.submenu = setValueMenu
62-
menu.addItem(setValueItem)
37+
// Copy
38+
let copyItem = NSMenuItem(
39+
title: String(localized: "Copy"), action: #selector(copySelectedOrCurrentRow), keyEquivalent: "c")
40+
copyItem.keyEquivalentModifierMask = .command
41+
copyItem.target = self
42+
menu.addItem(copyItem)
6343

64-
menu.addItem(NSMenuItem.separator())
65-
}
44+
// "Copy as" submenu — always includes Cell Value + With Headers, conditionally adds SQL statements
45+
let copyAsMenu = NSMenu()
6646

67-
// Copy actions
6847
if dataColumnIndex >= 0 {
6948
let copyCellItem = NSMenuItem(
70-
title: String(localized: "Copy Cell Value"), action: #selector(copyCellValue(_:)),
49+
title: String(localized: "Cell Value"), action: #selector(copyCellValue(_:)),
7150
keyEquivalent: "")
7251
copyCellItem.representedObject = dataColumnIndex
7352
copyCellItem.target = self
74-
menu.addItem(copyCellItem)
53+
copyAsMenu.addItem(copyCellItem)
7554
}
7655

77-
let copyItem = NSMenuItem(
78-
title: String(localized: "Copy"), action: #selector(copySelectedOrCurrentRow), keyEquivalent: "c")
79-
copyItem.keyEquivalentModifierMask = .command
80-
copyItem.target = self
81-
menu.addItem(copyItem)
82-
8356
let copyWithHeadersItem = NSMenuItem(
84-
title: String(localized: "Copy with Headers"),
57+
title: String(localized: "With Headers"),
8558
action: #selector(copySelectedOrCurrentRowWithHeaders),
8659
keyEquivalent: "c")
8760
copyWithHeadersItem.keyEquivalentModifierMask = [.command, .shift]
8861
copyWithHeadersItem.target = self
89-
menu.addItem(copyWithHeadersItem)
62+
copyAsMenu.addItem(copyWithHeadersItem)
9063

91-
// "Copy as" submenu — only for SQL databases with a known table
9264
if let dbType = coordinator.databaseType,
9365
dbType != .mongodb && dbType != .redis,
9466
coordinator.tableName != nil {
95-
let copyAsMenu = NSMenu()
67+
copyAsMenu.addItem(NSMenuItem.separator())
9668

9769
let insertItem = NSMenuItem(
9870
title: String(localized: "INSERT Statement(s)"),
@@ -107,24 +79,52 @@ final class TableRowViewWithMenu: NSTableRowView {
10779
keyEquivalent: "")
10880
updateItem.target = self
10981
copyAsMenu.addItem(updateItem)
110-
111-
let copyAsItem = NSMenuItem(
112-
title: String(localized: "Copy as"),
113-
action: nil,
114-
keyEquivalent: "")
115-
copyAsItem.submenu = copyAsMenu
116-
menu.addItem(copyAsItem)
11782
}
11883

84+
let copyAsItem = NSMenuItem(title: String(localized: "Copy as"), action: nil, keyEquivalent: "")
85+
copyAsItem.submenu = copyAsMenu
86+
menu.addItem(copyAsItem)
87+
88+
// Paste
11989
if coordinator.isEditable {
12090
let pasteItem = NSMenuItem(
12191
title: String(localized: "Paste"), action: #selector(pasteRows), keyEquivalent: "v")
12292
pasteItem.keyEquivalentModifierMask = .command
12393
pasteItem.target = self
12494
menu.addItem(pasteItem)
95+
}
96+
97+
menu.addItem(NSMenuItem.separator())
12598

126-
menu.addItem(NSMenuItem.separator())
99+
// Set Value (editable + column clicked)
100+
if coordinator.isEditable && dataColumnIndex >= 0 {
101+
let setValueMenu = NSMenu()
127102

103+
let emptyItem = NSMenuItem(
104+
title: String(localized: "Empty"), action: #selector(setEmptyValue(_:)), keyEquivalent: "")
105+
emptyItem.representedObject = dataColumnIndex
106+
emptyItem.target = self
107+
setValueMenu.addItem(emptyItem)
108+
109+
let nullItem = NSMenuItem(
110+
title: String(localized: "NULL"), action: #selector(setNullValue(_:)), keyEquivalent: "")
111+
nullItem.representedObject = dataColumnIndex
112+
nullItem.target = self
113+
setValueMenu.addItem(nullItem)
114+
115+
let defaultItem = NSMenuItem(
116+
title: String(localized: "Default"), action: #selector(setDefaultValue(_:)), keyEquivalent: "")
117+
defaultItem.representedObject = dataColumnIndex
118+
defaultItem.target = self
119+
setValueMenu.addItem(defaultItem)
120+
121+
let setValueItem = NSMenuItem(title: String(localized: "Set Value"), action: nil, keyEquivalent: "")
122+
setValueItem.submenu = setValueMenu
123+
menu.addItem(setValueItem)
124+
}
125+
126+
// Duplicate & Delete
127+
if coordinator.isEditable {
128128
let duplicateItem = NSMenuItem(
129129
title: String(localized: "Duplicate"), action: #selector(duplicateRow), keyEquivalent: "d")
130130
duplicateItem.keyEquivalentModifierMask = .command

0 commit comments

Comments
 (0)