From cf077c1fd38c73a9e1cfe980fd55c455b489c3d8 Mon Sep 17 00:00:00 2001
From: rhenck <richard.henck@iqb.hu-berlin.de>
Date: Fri, 6 May 2022 16:11:21 +0200
Subject: [PATCH] [editor] Refactor new-element-panel

Show accordion with expansion-panels instead of tabs.
This way elements can be grouped logically.
---
 .../ui-element-toolbox.component.css          |  24 +-
 .../ui-element-toolbox.component.html         | 232 ++++++++++--------
 .../unit-view/unit-view.component.css         |   2 +-
 3 files changed, 142 insertions(+), 116 deletions(-)

diff --git a/projects/editor/src/app/components/new-ui-element-panel/ui-element-toolbox.component.css b/projects/editor/src/app/components/new-ui-element-panel/ui-element-toolbox.component.css
index fada10985..db7aed226 100644
--- a/projects/editor/src/app/components/new-ui-element-panel/ui-element-toolbox.component.css
+++ b/projects/editor/src/app/components/new-ui-element-panel/ui-element-toolbox.component.css
@@ -5,16 +5,9 @@
 
 :host button {
   text-align: left;
-  font-size: large;
-  margin: 5px;
-}
-
-:host ::ng-deep .mat-tab-label {
-  min-width: 0;
-}
-
-mat-tab-group {
-  padding: 10px;
+  font-size: medium;
+  margin-bottom: 3px;
+  width: 100%;
 }
 
 ::ng-deep aspect-ui-element-toolbox .mat-button-wrapper {
@@ -22,6 +15,13 @@ mat-tab-group {
   display: inline-block;
 }
 
-.radio-button-placeholder {
-  width: 96%;
+.mat-expansion-panel-header {
+  font-size: large;
+}
+.mat-expansion-panel-header.mat-expanded {
+  height: 40px;
+}
+
+:host ::ng-deep .mat-expansion-panel-body {
+  padding: 0 10px 10px;
 }
diff --git a/projects/editor/src/app/components/new-ui-element-panel/ui-element-toolbox.component.html b/projects/editor/src/app/components/new-ui-element-panel/ui-element-toolbox.component.html
index 974f8eb15..79a74dc77 100644
--- a/projects/editor/src/app/components/new-ui-element-panel/ui-element-toolbox.component.html
+++ b/projects/editor/src/app/components/new-ui-element-panel/ui-element-toolbox.component.html
@@ -1,107 +1,133 @@
-<mat-tab-group mat-stretch-tabs>
-  <mat-tab>
-    <ng-template mat-tab-label>
-      <mat-icon class="example-tab-icon">highlight_alt</mat-icon>
-    </ng-template>
-    <div fxLayout="column">
-      <button mat-raised-button (click)="addUIElement('text')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','text');">
-        <mat-icon>text_snippet</mat-icon>
-        {{'toolbox.text' | translate }}
+<mat-accordion multi>
+  <mat-expansion-panel expanded>
+    <mat-expansion-panel-header>
+      <mat-panel-description>
+        Stimulus
+      </mat-panel-description>
+    </mat-expansion-panel-header>
+    <button mat-stroked-button (click)="addUIElement('text')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','text');">
+      <mat-icon>text_snippet</mat-icon>
+      {{'toolbox.text' | translate }}
+    </button>
+    <button mat-stroked-button (click)="addUIElement('image')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','image')">
+      <mat-icon>image</mat-icon>
+      {{'toolbox.image' | translate }}
+    </button>
+    <button mat-stroked-button (click)="addUIElement('audio')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','audio')">
+      <mat-icon>volume_up</mat-icon>
+      {{'toolbox.audio' | translate }}
+    </button>
+    <button mat-stroked-button (click)="addUIElement('video')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','video')">
+      <mat-icon>ondemand_video</mat-icon>
+      {{'toolbox.video' | translate }}
+    </button>
+  </mat-expansion-panel>
+  <mat-expansion-panel expanded>
+    <mat-expansion-panel-header>
+      <mat-panel-description>
+        Eingabe
+      </mat-panel-description>
+    </mat-expansion-panel-header>
+    <button mat-stroked-button (click)="addUIElement('text-field')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','text-field')">
+      <mat-icon>text_fields</mat-icon>
+      {{'toolbox.text-field' | translate }}
+    </button>
+    <button mat-stroked-button (click)="addUIElement('text-area')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','text-area')">
+      <mat-icon>notes</mat-icon>
+      {{'toolbox.text-area' | translate }}
+    </button>
+  </mat-expansion-panel>
+  <mat-expansion-panel expanded>
+    <mat-expansion-panel-header>
+      <mat-panel-description>
+        Auswahl
+      </mat-panel-description>
+    </mat-expansion-panel-header>
+    <button mat-stroked-button (click)="addUIElement('checkbox')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','checkbox')">
+      <mat-icon>check_box</mat-icon>
+      {{'toolbox.checkbox' | translate }}
+    </button>
+    <button mat-stroked-button (click)="addUIElement('dropdown')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','dropdown')">
+      <mat-icon>menu_open</mat-icon>
+      {{'toolbox.dropdown' | translate }}
+    </button>
+    <div (mouseover)="hoverRadioButton = true" (mouseleave)="hoverRadioButton = false" fxLayout="row">
+      <button *ngIf="!hoverRadioButton" class="radio-button-placeholder" mat-stroked-button>
+        <mat-icon>radio_button_checked</mat-icon>
+        {{'toolbox.radio' | translate }}
       </button>
-      <button mat-raised-button (click)="addUIElement('button')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','button')">
-        <mat-icon>smart_button</mat-icon>
-        {{'toolbox.button' | translate }}
+      <button *ngIf="hoverRadioButton" mat-raised-button (click)="addUIElement('radio')"
+              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','radio')">
+        {{'toolbox.simple' | translate }}
       </button>
-      <button mat-raised-button (click)="addUIElement('frame')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','frame')">
-        <mat-icon>crop_square</mat-icon>
-        {{'toolbox.frame' | translate }}
-      </button>
-      <button mat-raised-button (click)="addUIElement('text-field')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','text-field')">
-        <mat-icon>text_fields</mat-icon>
-        {{'toolbox.text-field' | translate }}
-      </button>
-      <button mat-raised-button (click)="addUIElement('text-area')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','text-area')">
-        <mat-icon>notes</mat-icon>
-        {{'toolbox.text-area' | translate }}
-      </button>
-      <button mat-raised-button (click)="addUIElement('checkbox')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','checkbox')">
-        <mat-icon>check_box</mat-icon>
-        {{'toolbox.checkbox' | translate }}
-      </button>
-      <button mat-raised-button (click)="addUIElement('dropdown')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','dropdown')">
-        <mat-icon>menu_open</mat-icon>
-        {{'toolbox.dropdown' | translate }}
-      </button>
-
-      <div (mouseover)="hoverRadioButton = true" (mouseleave)="hoverRadioButton = false">
-        <button *ngIf="!hoverRadioButton" class="radio-button-placeholder" mat-raised-button>
-          <mat-icon>radio_button_checked</mat-icon>
-          {{'toolbox.radio' | translate }}
-        </button>
-        <button *ngIf="hoverRadioButton" mat-raised-button (click)="addUIElement('radio')"
-                draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','radio')">
-          {{'toolbox.simple' | translate }}
-        </button>
-        <button *ngIf="hoverRadioButton" mat-raised-button (click)="addUIElement('radio-group-images')"
-                draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','radio-group-images')">
-          {{'toolbox.complex' | translate }}
-        </button>
-      </div>
-
-      <button mat-raised-button (click)="addUIElement('drop-list')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','drop-list')">
-        <mat-icon>drag_indicator</mat-icon>
-        {{'toolbox.drop-list' | translate }}
-      </button>
-      <button mat-raised-button (click)="addUIElement('image')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','image')">
-        <mat-icon>image</mat-icon>
-        {{'toolbox.image' | translate }}
-      </button>
-      <button mat-raised-button (click)="addUIElement('audio')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','audio')">
-        <mat-icon>volume_up</mat-icon>
-        {{'toolbox.audio' | translate }}
-      </button>
-      <button mat-raised-button (click)="addUIElement('video')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','video')">
-        <mat-icon>ondemand_video</mat-icon>
-        {{'toolbox.video' | translate }}
-      </button>
-    </div>
-  </mat-tab>
-  <mat-tab>
-    <ng-template mat-tab-label>
-      <mat-icon class="example-tab-icon">widgets</mat-icon>
-    </ng-template>
-    <div fxLayout="column">
-      <button mat-raised-button (click)="addUIElement('likert')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','likert')">
-        <mat-icon>toc</mat-icon>
-        {{'toolbox.likert' | translate }}
-      </button>
-      <button mat-raised-button (click)="addUIElement('cloze')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','cloze')">
-        <mat-icon>vertical_split</mat-icon>
-        {{'toolbox.cloze' | translate }}
-      </button>
-      <button mat-raised-button (click)="addUIElement('slider')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','slider')">
-        <mat-icon>linear_scale</mat-icon>
-        {{'toolbox.slider' | translate }}
-      </button>
-      <button mat-raised-button (click)="addUIElement('spell-correct')"
-              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','spell-correct')">
-        <mat-icon>format_strikethrough</mat-icon>
-        {{'toolbox.spell-correct' | translate }}
+      <button *ngIf="hoverRadioButton" mat-raised-button (click)="addUIElement('radio-group-images')"
+              draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','radio-group-images')">
+        {{'toolbox.complex' | translate }}
       </button>
     </div>
-  </mat-tab>
-</mat-tab-group>
+    <button mat-stroked-button (click)="addUIElement('likert')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','likert')">
+      <mat-icon>toc</mat-icon>
+      {{'toolbox.likert' | translate }}
+    </button>
+    <button mat-stroked-button (click)="addUIElement('slider')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','slider')">
+      <mat-icon>linear_scale</mat-icon>
+      {{'toolbox.slider' | translate }}
+    </button>
+  </mat-expansion-panel>
+  <mat-expansion-panel>
+    <mat-expansion-panel-header>
+      <mat-panel-description>
+        (Zu)Ordnung
+      </mat-panel-description>
+    </mat-expansion-panel-header>
+    <button mat-stroked-button (click)="addUIElement('drop-list')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','drop-list')">
+      <mat-icon>drag_indicator</mat-icon>
+      {{'toolbox.drop-list' | translate }}
+    </button>
+  </mat-expansion-panel>
+  <mat-expansion-panel>
+    <mat-expansion-panel-header>
+      <mat-panel-description>
+        Verbund
+      </mat-panel-description>
+    </mat-expansion-panel-header>
+    <button mat-stroked-button (click)="addUIElement('cloze')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','cloze')">
+      <mat-icon>vertical_split</mat-icon>
+      {{'toolbox.cloze' | translate }}
+    </button>
+    <button mat-stroked-button (click)="addUIElement('spell-correct')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','spell-correct')">
+      <mat-icon>format_strikethrough</mat-icon>
+      {{'toolbox.spell-correct' | translate }}
+    </button>
+  </mat-expansion-panel>
+  <mat-expansion-panel>
+    <mat-expansion-panel-header>
+      <mat-panel-description>
+        Sonstige
+      </mat-panel-description>
+    </mat-expansion-panel-header>
+    <button mat-stroked-button (click)="addUIElement('button')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','button')">
+      <mat-icon>smart_button</mat-icon>
+      {{'toolbox.button' | translate }}
+    </button>
+    <button mat-stroked-button (click)="addUIElement('frame')"
+            draggable="true" (dragstart)="$event.dataTransfer?.setData('elementType','frame')">
+      <mat-icon>crop_square</mat-icon>
+      {{'toolbox.frame' | translate }}
+    </button>
+  </mat-expansion-panel>
+</mat-accordion>
diff --git a/projects/editor/src/app/components/unit-view/unit-view.component.css b/projects/editor/src/app/components/unit-view/unit-view.component.css
index c24f6c33b..172049861 100644
--- a/projects/editor/src/app/components/unit-view/unit-view.component.css
+++ b/projects/editor/src/app/components/unit-view/unit-view.component.css
@@ -1,5 +1,5 @@
 .toolbox_drawer {
-  width: 248px;
+  width: 220px;
 }
 
 .properties_drawer {
-- 
GitLab