Abrufen von CellDingbat, um sich an seinen Status zwischen Mathematica-Sitzungen zu erinnern

8

Ich habe das Stylesheet meines Notebooks so modifiziert, dass es ein StyleData["Todo"] enthält, das von StyleData["Item"] erbt. Es ändert das Dingbat in eine Checkbox. Im Stylesheet-Editor:

%Vor%

Das Problem besteht darin, dass der Status des Kontrollkästchens in einem Notizbuch nicht zwischen Mathematica-Sitzungen gespeichert wird. Ich dachte, die DynamicModule[] würde den Trick machen. Wie bekomme ich das Kontrollkästchen, um seinen Zustand zu erinnern?

BEARBEITEN

Simons Lösung speichert den Status des Kontrollkästchens, aber das Kontrollkästchen wird abgeschnitten, wenn es als CellDingbat (MacOS X) verwendet wird. Wenn Sie den Code von Simon in eine CellFrameLabels-Option einfügen, wird der standardmäßige CellDingbat-Eintrag beibehalten. Hier ist, womit ich gegangen bin:

%Vor%     
JxB 28.10.2011, 16:38
quelle

1 Antwort

3

Das Problem mit Ihrem Code (glaube ich) ist, dass ein neues DynamicModule nicht jedes Mal erstellt wird, wenn Sie eine neue "ToDo" -Zelle erstellen. Es gibt also keinen Ort, an dem der Status jedes Checkbox gespeichert werden könnte.

Die einfachste Lösung, die ich mir vorstellen kann, um den Zustand von Checkbox für jede "ToDo" -Zelle zu speichern, ist, die CellDingbat beim ersten Mal zu überschreiben, wenn Checkbox aktiviert ist. (Andere Optionen, mit denen ich gespielt habe, waren TaggingRules , Umschalten zwischen "ToDo" - und "ToDone" -Stilen, etc ...)

Aber auch eine einfache Checkbox in CellDingbat speichert ihren Zustand nicht. Versuchen Sie, den folgenden Befehl auszuführen, und durchlaufen Sie dann die Ausgabe durch einen Show Ausdruck Zyklus.

%Vor%

Um das zu umgehen, habe ich Checkbox mit dem bestimmten Argument True oder False verwendet, das in eine Schaltfläche eingepackt ist, die den Status ändert. Das ist dumm und ineffizient, aber es funktioniert!

Also, mein Code für den Zellenstil

%Vor%

Ich bin nicht glücklich mit dieser Lösung, aber es ist das Beste, was ich mir ausgedacht habe. Eine Verbesserung wäre, den Tastenfunktionscode aus der Zelle zu entfernen, damit er nicht für jede geprüfte ToDo-Zelle wiederholt wird. Damit es auch ohne ReplaceAll läuft, wird der Kernel nicht benötigt und die Funktion kann nur mit dem Frontend ausgeführt werden.

    
Simon 28.10.2011, 23:27
quelle