src/Pure/PIDE/document_editor.scala
changeset 77144 42c3970e1ac1
parent 76994 7c23db6b857b
child 77147 38077c938d01
equal deleted inserted replaced
77143:61f6bb753cbf 77144:42c3970e1ac1
    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 }