equal
deleted
inserted
replaced
19 if (path.is_file) Isabelle_System.pdf_viewer(path) |
19 if (path.is_file) Isabelle_System.pdf_viewer(path) |
20 } |
20 } |
21 |
21 |
22 |
22 |
23 /* configuration state */ |
23 /* configuration state */ |
|
24 |
|
25 sealed case class Session( |
|
26 background: Option[Sessions.Background], |
|
27 selection: Set[Document.Node.Name], |
|
28 snapshot: Option[Document.Snapshot] |
|
29 ) { |
|
30 def is_vacuous: Boolean = background.isEmpty |
|
31 def is_pending: Boolean = snapshot.isEmpty |
|
32 |
|
33 def get_background: Sessions.Background = background.get |
|
34 def get_variant: Document_Build.Document_Variant = get_background.info.documents.head |
|
35 def get_snapshot: Document.Snapshot = snapshot.get |
|
36 } |
24 |
37 |
25 sealed case class State( |
38 sealed case class State( |
26 session_background: Option[Sessions.Background] = None, |
39 session_background: Option[Sessions.Background] = None, |
27 selection: Set[Document.Node.Name] = Set.empty, |
40 selection: Set[Document.Node.Name] = Set.empty, |
28 views: Set[AnyRef] = Set.empty, |
41 views: Set[AnyRef] = Set.empty, |
51 }) |
64 }) |
52 } |
65 } |
53 |
66 |
54 def register_view(id: AnyRef): State = copy(views = views + id) |
67 def register_view(id: AnyRef): State = copy(views = views + id) |
55 def unregister_view(id: AnyRef): State = copy(views = views - id) |
68 def unregister_view(id: AnyRef): State = copy(views = views - id) |
|
69 |
|
70 def session(get_snapshot: () => Document.Snapshot): Session = { |
|
71 val background = session_background.filter(_.info.documents.nonEmpty) |
|
72 val snapshot = |
|
73 if (background.isEmpty) None |
|
74 else { |
|
75 val snapshot = get_snapshot() |
|
76 if (snapshot.is_outdated) None else Some(snapshot) |
|
77 } |
|
78 Session(background, selection, snapshot) |
|
79 } |
56 } |
80 } |
57 } |
81 } |