Skip to content

Commit d30fba6

Browse files
authored
Merge pull request #272 from datlechin/refactor/simplify-data-context-menu
Simplify data table context menu
2 parents cf59609 + e00bb0f commit d30fba6

File tree

2 files changed

+71
-78
lines changed

2 files changed

+71
-78
lines changed

TablePro/Resources/Localizable.xcstrings

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2715,6 +2715,16 @@
27152715
}
27162716
}
27172717
},
2718+
"Cell Value" : {
2719+
"localizations" : {
2720+
"vi" : {
2721+
"stringUnit" : {
2722+
"state" : "translated",
2723+
"value" : "Giá trị ô"
2724+
}
2725+
}
2726+
}
2727+
},
27182728
"Change Color" : {
27192729
"localizations" : {
27202730
"vi" : {
@@ -4097,22 +4107,6 @@
40974107
}
40984108
}
40994109
},
4100-
"Copy Cell Value" : {
4101-
"localizations" : {
4102-
"vi" : {
4103-
"stringUnit" : {
4104-
"state" : "translated",
4105-
"value" : "Sao chép giá trị ô"
4106-
}
4107-
},
4108-
"zh-Hans" : {
4109-
"stringUnit" : {
4110-
"state" : "translated",
4111-
"value" : "复制单元格值"
4112-
}
4113-
}
4114-
}
4115-
},
41164110
"Copy Column Name" : {
41174111
"localizations" : {
41184112
"vi" : {
@@ -4211,20 +4205,7 @@
42114205
}
42124206
},
42134207
"Copy with Headers" : {
4214-
"localizations" : {
4215-
"vi" : {
4216-
"stringUnit" : {
4217-
"state" : "translated",
4218-
"value" : "Sao chép kèm tiêu đề"
4219-
}
4220-
},
4221-
"zh-Hans" : {
4222-
"stringUnit" : {
4223-
"state" : "translated",
4224-
"value" : "复制(含表头)"
4225-
}
4226-
}
4227-
}
4208+
42284209
},
42294210
"Could not fetch plugin registry" : {
42304211

@@ -17190,6 +17171,16 @@
1719017171
}
1719117172
}
1719217173
},
17174+
"With Headers" : {
17175+
"localizations" : {
17176+
"vi" : {
17177+
"stringUnit" : {
17178+
"state" : "translated",
17179+
"value" : "Kèm tiêu đề"
17180+
}
17181+
}
17182+
}
17183+
},
1719317184
"Word wrap" : {
1719417185
"localizations" : {
1719517186
"vi" : {

TablePro/Views/Results/TableRowViewWithMenu.swift

Lines changed: 50 additions & 48 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,54 @@ 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+
}
12596

97+
if coordinator.isEditable {
12698
menu.addItem(NSMenuItem.separator())
99+
}
100+
101+
// Set Value (editable + column clicked)
102+
if coordinator.isEditable && dataColumnIndex >= 0 {
103+
let setValueMenu = NSMenu()
127104

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

0 commit comments

Comments
 (0)