Store Dynamic-accessible hidden metadata in a cell
You can give "Input" cells a default TaggingRules
option of TaggingRules -> {}
. Then, using CurrentValue
will not include the notebook tagging rules. For example:
SetOptions[
EvaluationNotebook[],
StyleDefinitions -> Notebook[
{
Cell[StyleData[StyleDefinitions->"Default.nb"]],
Cell[StyleData["Input"],TaggingRules->{}]
},
StyleDefinitions->"PrivateStylesheetFormatting.nb"
]
]
Then,
CurrentValue[EvaluationNotebook[], TaggingRules] = {"parent" -> "default"};
CurrentValue[EvaluationNotebook[], TaggingRules]
{"parent" -> "default"}
Let's try using CurrentValue
to modify a cell:
CurrentValue[EvaluationCell[], {TaggingRules, "key"}] = "value";
CurrentValue[EvaluationCell[], TaggingRules]
{"key" -> "value"}
The notebook tagging rule is not included.
This works for your explicit case:
CurrentValue[EvaluationCell[], CellFrameLabels] = {
{
None,
Cell[
BoxData[
PopupMenuBox[
Dynamic[
CurrentValue[
ParentCell[EvaluationCell[]],
{TaggingRules, "MyRule"},
FrontEnd`SetOptions[
ParentCell[EvaluationCell[]],
TaggingRules -> {"MyRule" -> None}
]
]
],
{6 -> "6", 24 -> "24"}
]
]
]},
{None, None}
};
Options[EvaluationCell[], TaggingRules]
SetOptions
didn't like operating on the ParentCell
so I had to force it to pull that from the kernel, but it should still perform alright I think.
Basic Idea
Here's a kinda solution. I'm gonna assume when the CurrentValue
isn't defined you use a default value. If that's the case you can do this:
CurrentValue[
EvaluationCell[],
{TaggingRules, "key"},
FEPrivate`FrontEndExecute@
FrontEnd`SetOptions[FrontEnd`EvaluationCell[],
TaggingRules -> {"key" -> "default"}]
]
That forces the TaggingRules
to be directly set rather than updated. Here's a proof of concept. First set up some state that can be inherited:
SetOptions[EvaluationNotebook[],
TaggingRules -> {"parentKey" -> "default"}];
Now usually we'd get inheritance:
CurrentValue[
EvaluationCell[],
{TaggingRules, "key"},
"default"
]
Options[EvaluationCell[], TaggingRules]
"default"
{TaggingRules -> {"parentKey" -> "default", "key" -> "default"}}
With this trick though we don't:
CurrentValue[
EvaluationCell[],
{TaggingRules, "key"},
FEPrivate`FrontEndExecute@
FrontEnd`SetOptions[FrontEnd`EvaluationCell[],
TaggingRules -> {"key" -> "default"}]
]
Options[EvaluationCell[], TaggingRules]
"default"
{TaggingRules -> {"key" -> "default"}}
Is it elegant? No. But it works if that's all you care about.