]> Shamusworld >> Repos - wozmaker/blob - src/infowidget.cpp
Flesh out the disk settings dialog.
[wozmaker] / src / infowidget.cpp
1 //
2 // infowidget.cpp: A2R disk image info widget
3 //
4 // Part of the WOZ Maker Project
5 // by James Hammons
6 // (C) 2018 Underground Software
7 // See the README and GPLv3 files for licensing and warranty information
8 //
9
10 #include "infowidget.h"
11 #include "fileio.h"
12 #include "global.h"
13
14
15 InfoWidget::InfoWidget(void): QWidget()
16 {
17         label = new QLabel;
18
19         QVBoxLayout * mainLayout = new QVBoxLayout;
20         mainLayout->addWidget(label);
21         mainLayout->addStretch();
22
23         setLayout(mainLayout);
24 }
25
26
27 InfoWidget::~InfoWidget()
28 {
29 }
30
31
32 void InfoWidget::ShowInfo(void)
33 {
34 #if 0
35         const char objName[OTCount][16] = {
36                 "None", "Line", "Circle", "Ellipse", "Arc", "Polygon", "Dimension", "Spline", "Text", "Container"
37         };
38         const char dimName[DTCount][32] = {
39                 "Linear", "Vertical", "Horizontal", "Radial", "Diametric",
40                 "Circumferential", "Angular", "Leader"
41         };
42
43         // Sanity check
44         if (obj == NULL)
45                 return;
46
47         QString s = QString("<b>%1</b><br><br>").arg(QString(objName[obj->type]));
48
49         switch (obj->type)
50         {
51         case OTLine:
52         {
53                 Vector line(obj->p[0], obj->p[1]);
54                 s += QString("&lt;%1, %2&gt; to &lt;%3, %4&gt;<br>Length: %5<br>Angle: %6&#x00B0;<br>").arg(obj->p[0].x).arg(obj->p[0].y).arg(obj->p[1].x).arg(obj->p[1].y).arg(line.Magnitude()).arg(line.Angle() * RADIANS_TO_DEGREES);
55                 break;
56         }
57
58         case OTCircle:
59                 s += QString("Center: &lt;%1, %2&gt;<br>Radius: %3<br>").arg(obj->p[0].x).arg(obj->p[0].y).arg(obj->radius[0]);
60                 break;
61
62         case OTEllipse:
63                 break;
64
65         case OTArc:
66                 s += QString("Center: &lt;%1, %2&gt;<br>Radius: %3<br>Start: %4&#x00B0;<br>Span: %5&#x00B0;<br>").arg(obj->p[0].x).arg(obj->p[0].y).arg(obj->radius[0]).arg(obj->angle[0] * RADIANS_TO_DEGREES).arg(obj->angle[1] * RADIANS_TO_DEGREES);
67                 break;
68
69         case OTPolygon:
70                 break;
71
72         case OTDimension:
73         {
74                 Dimension * d = (Dimension *)obj;
75                 s += QString("Type: %1<br>").arg(dimName[d->subtype]);
76                 break;
77         }
78
79         case OTSpline:
80                 break;
81
82         case OTText:
83         {
84                 Text * t = (Text *)obj;
85                 s += QString("&lt;%1, %2&gt;<br>Width/Height: %3/%4<br>Angle: %5&#x00B0;<br>").arg(t->p[0].x).arg(t->p[0].y).arg(t->extents.Width()).arg(t->extents.Height()).arg(obj->angle[0] * RADIANS_TO_DEGREES);
86                 break;
87         }
88
89         case OTContainer:
90                 break;
91
92         default:
93                 break;
94         }
95 #endif
96         uint8_t buf[33];
97         memcpy(buf, Global::a2r->creator, 32);
98         buf[32] = 0;
99
100         QString s;
101         s += QString("No. Streams: %1<br>").arg(Global::numStreams);
102         s += QString("Creator: %1<br>").arg((char *)buf);
103         s += QString("Disk Type: %1<br>").arg(Global::a2r->diskType == 1 ? "5 1/4\"" : (Global::a2r->diskType == 2 ? "3 1/2\"" : "Unknown"));
104         s += QString("Write Protected: %1<br>").arg(Global::a2r->writeProtected == 1 ? "Yes" : "No");
105         s += QString("Synchronized: %1<br>").arg(Global::a2r->writeProtected == 1 ? "Yes" : "No");
106
107         if (Global::metadata != NULL)
108         {
109                 uint32_t size = Uint32LE(Global::metadata->metaSize);
110                 uint8_t * data = Global::metadata->data;
111                 uint32_t pos = 0;
112
113                 while (pos < size)
114                 {
115                         if (data[pos] == 0x09)
116                                 s += ": ";
117                         else if (data[pos] == 0x0A)
118                                 s += "<br>";
119                         else
120                                 s += data[pos];
121
122                         pos++;
123                 }
124         }
125
126 //      s += QString("Stream No.: %1<br>").arg(Global::streamNum);
127 //      s += QString("Nibbles: %1<br>").arg(Global::nibbleCount);
128
129         label->setText(s);
130 }
131