diff --git a/anatomy/models.py b/anatomy/models.py index 8515252a..61a9947d 100644 --- a/anatomy/models.py +++ b/anatomy/models.py @@ -78,7 +78,7 @@ class AnatomyQuestion(models.Model): image = models.ImageField( upload_to=image_directory_path, - help_text="The image to use for the question. Ideally use use unmarked images and annotate (arrow) them on the test system. If you wish to reuse an image that is already uploaded 'clone' the question that contains it.As a preference", + help_text="The image to use for the question. Ideally use use unmarked images and annotate (arrow) them on the test system. If you wish to reuse an image that is already uploaded 'clone' the question that contains it.", ) image_annotations = models.TextField( diff --git a/anatomy/static/css/anatomy.css b/anatomy/static/css/anatomy.css index a9b6d3f8..b8f7971c 100644 --- a/anatomy/static/css/anatomy.css +++ b/anatomy/static/css/anatomy.css @@ -280,6 +280,12 @@ button a { border: 1px dashed white; } +.series-drop { + position: sticky; + height: 600px; + bottom: -500px; +} + .submit-button { position: sticky; bottom: 0; diff --git a/anatomy/static/css/dicomViewer.css b/anatomy/static/css/dicomViewer.css deleted file mode 120000 index ca61ad1e..00000000 --- a/anatomy/static/css/dicomViewer.css +++ /dev/null @@ -1 +0,0 @@ -/home/ross/dv/dicomViewer.css \ No newline at end of file diff --git a/anatomy/static/css/dicomViewer.css b/anatomy/static/css/dicomViewer.css new file mode 100644 index 00000000..b10c2033 --- /dev/null +++ b/anatomy/static/css/dicomViewer.css @@ -0,0 +1,148 @@ +.canvas-panel { + height: 100%; + position: relative; + color: white; +} + + +#dicom-overlay { + position: absolute; + bottom: 0; +} + +#image-thumbs { + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); + overflow-y: auto; + max-height: 100%; + max-width: 30%; + user-select: none; +} + +.thumbnail { + pointer-events: none; + display: block; + margin: auto; +} + +.thumb { + position: relative; + border: 1px dotted blue; + touch-action: none; + user-select: none; +} + +.thumb-active { + border: 5px dotted blue; +} + +.thumb span { + position: absolute; + right: 0; + color: lightblue; +} + +.cornerstone-element { + position: relative; + height: 100%; +} + +.dicom-button { + font-size: 40px; + z-index: 99; + opacity: 20%; + color: gray; + top: 0; +} + +.dicom-button:hover { + opacity: 100%; +} + +.dicom-button-highlight { + opacity: 50%; + color: lightblue; +} + +#dicom-toggle-mode-button { + position: absolute; + left: 0; +} + +#dicom-settings-button { + position: absolute; + right: 0; +} + +#dicom-fullscreen-button { + position: absolute; + transform: translate(50%, -20%); + right: 50%; +} + +#dicom-collapse-button { + position: absolute; + transform: translate(0, -50%); + top: 50%; + right: 0; +} + +#dicom-info-button { + position: absolute; + transform: translate(0, -75%); + right: 0; + top: 100%; +} + +#dicom-settings-panel { + display: none; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + padding-left: 30px; + padding-right: 30px; + padding-bottom: 20px; + background-color: rgba(0, 0, 0, 0.8); /* Black w/ opacity */ + max-width: 100%; + max-height: 100%; + z-index: 999; +} + +#dicom-log-panel { + display: none; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + padding-left: 30px; + padding-right: 30px; + padding-bottom: 20px; + background-color: rgba(0, 0, 0, 0.8); /* Black w/ opacity */ + width: 90%; + height: 90%; + z-index: 999; +} + +#dicom-window-panel { + position: absolute; + top: 100%; + transform: translate(0, -100%); + opacity: 0.0; +} +#dicom-window-panel:hover { + opacity: 1; +} + +#dicom-summary-panel { + position: relative; + z-index: 999; + max-width: 100%; + height: 100%; + color: red; + top: -100%; + overflow: scroll; + display: none; +} \ No newline at end of file diff --git a/atlas/forms.py b/atlas/forms.py index 63aa1926..ea46d480 100755 --- a/atlas/forms.py +++ b/atlas/forms.py @@ -16,6 +16,7 @@ from django.shortcuts import get_object_or_404 from atlas.models import ( Case, CaseCollection, + CaseDetail, CidReportAnswer, Differential, Finding, @@ -39,6 +40,7 @@ from tinymce.widgets import TinyMCE from dal import autocomplete +import logging class ConditionForm(ModelForm): class Meta: @@ -240,9 +242,20 @@ class CaseForm(ModelForm): js = ["jsi18n.js", "tesseract.min.js"] def __init__(self, *args, **kwargs): + logging.info("LOG") + logging.debug(kwargs) self.user = kwargs.pop( "user" ) # To get request.user. Do not use kwargs.pop('user', None) due to potential security hole + + # This is populated if we create the case from an exam/collection + self.collection = None + if "exams" in kwargs["initial"]: + collections = kwargs["initial"].pop("exams") + logging.debug(collections) + + self.collection = get_object_or_404(CaseCollection, pk=collections[0]) + if kwargs.get("instance"): # We get the 'initial' keyword argument or initialize it # as a dict if it didn't exist. @@ -251,6 +264,7 @@ class CaseForm(ModelForm): # a list of primary key for the selected data. # initial["exams"] = [t.pk for t in kwargs["instance"].exams.all()] + ModelForm.__init__(self, *args, **kwargs) super(CaseForm, self).__init__(*args, **kwargs) @@ -307,6 +321,9 @@ class CaseForm(ModelForm): # Get the unsaved Case instance instance = ModelForm.save(self, False) + + + # Prepare a 'save_m2m' method for the form, old_save_m2m = self.save_m2m @@ -324,6 +341,18 @@ class CaseForm(ModelForm): instance.save() self.save_m2m() + logging.debug(f"{self.collection=}") + + if self.collection is not None: + logging.debug(f"{self.collection=}") + case_no = self.collection.cases.count() + 1 + logging.debug(f"{case_no=}") + logging.debug(f"{instance=}") + + # Create through model + #cd = CaseDetail(case=instance, collection=exam, sort_order=case_no) + self.collection.cases.add(instance, through_defaults={"sort_order": case_no}) + return instance diff --git a/atlas/templates/atlas/case_display_block.html b/atlas/templates/atlas/case_display_block.html index 5e86d483..d3ed1c3b 100755 --- a/atlas/templates/atlas/case_display_block.html +++ b/atlas/templates/atlas/case_display_block.html @@ -117,8 +117,8 @@ Add collection