自分のメニューのラベルから判断する方法がありそうです。
出来ればもっと厳密にやりたいところですが・・・。
Code:
{define-class public AppRecordGridUI {inherits StandardRecordGridUI}
field protected menu-for-read-only:StringArray =
{StringArray
||非活性にするメニュー
"昇順ソート",
"降順ソート",
"フィルタを取り除く",
"のみのフィルタ",
"以下のフィルタ",
"以上のフィルタ",
"以外のフィルタ",
"貼り付け領域",
"行の固定",
"を解除",
"フレームの固定"
||-- ,"貼り付け",
||-- "コピー",
||-- "列の固定"
}
field protected menu-for-remove:StringArray =
{StringArray
"変更をコミットする",
"変更を戻す"
}
{method public {context-menu-at x:Distance, y:Distance}:#MenuPane
let menu-pane:#MenuPane = {super.context-menu-at x, y}
||メニュー削除用の保持配列
def delete-menu = {{Array-of MenuAction}}
||入力用・表示用のグリッドにあわせてメニューを変更する
{if-non-null menu-pane then
{for i:int = 0 below menu-pane.size do
def menu = {menu-pane.get i}
{type-switch menu
case action:MenuAction do
def label-string:String = {action.label.get-text}
||非活性にしたいラベルの文字列が見つかったら
||その MenuAction を無効にする
{for label in self.menu-for-read-only do
{if {label-string.find-string label} > -1 then
set action.enabled? = false
}
}
||削除したいラベルの文字列が見つかったら
||その MenuAction を削除用配列に保持にする
{for label in self.menu-for-remove do
{if {label-string.find-string label} > -1 then
{delete-menu.append action}
}
}
}
}
}
||削除用配列のメニューを削除する
{for ma in delete-menu do
{menu-pane.remove ma}
}
{return menu-pane}
}
}
{let people:RecordSet =
{RecordSet
{RecordFields
{RecordField "First", domain = String},
{RecordField "Last", domain = String},
{RecordField "Age", domain = int}
},
{RecordData First = "John", Last = "Smith", Age = 25},
{RecordData First = "Jane", Last = "Smith", Age = 29},
{RecordData First = "Jane", Last = "Jones", Age = 28}
}
}
{value
{RecordGrid
record-source = people,
ui-object = {AppRecordGridUI}
}
}