ROVLib2
RISCOSC++applicationdevelopmentlibrary
aboutbox.cpp
1 #include "aboutbox.h"
2 #include "icon.h"
3 #include "wimp_font.h"
4 #include <string.h>
5 #include "wimp_error.h"
6 
7 namespace
8 {
9  const tCoordinate cIconHeight(52);
10  const tCoordinate cIconVerticalGap(8);
11  const tCoordinate cIconVerticalSpace(8);
12  const char* pca3dValidation = "r2";
13 }
14 
15 namespace rov2
16 {
17 
18 CAboutBox::CAboutBox(const std::string& rksName, const std::string& rksPurpose, const std::string& rksAuthor, const std::string& rksVersion)
19  : CWindow("About this program")
20  , m_cHeaderWidth(0)
21  , m_cValueWidth(0)
22 {
23  AddRow("Name", rksName);
24  AddRow("Purpose", rksPurpose);
25  AddRow("Author", rksAuthor);
26  AddRow("Version", rksVersion);
27 }
28 
30 {
31  // Delete the icons
32 }
33 
34 void
36 {
37  rwcbBlock.wfFlags.wfHasBackIcon = 0;
38  rwcbBlock.wfFlags.wfHasCloseIcon = 0;
39  rwcbBlock.lVisibleMaximum.cX = m_cHeaderWidth + m_cValueWidth + 36;
40  rwcbBlock.lVisibleMinimum.cY = -(m_lpsHeaders.size() * (cIconHeight + cIconVerticalGap) - cIconVerticalGap + 2 * cIconVerticalSpace);
41  rwcbBlock.lWorkareaMaximum.cX = rwcbBlock.lVisibleMaximum.cX;
42  rwcbBlock.lWorkareaMinimum.cY = rwcbBlock.lVisibleMinimum.cY;
43  //swerr("CAboutBox::Adorn - width: %d, height: %d");
44 }
45 
46 void
48 {
49  bool b2d = (wimp_3dstatus() == 0);
50 
51  tIconCreateBlock icbBlock;
52  ::memset(&icbBlock, 0, sizeof(tIconCreateBlock));
53 
54  icbBlock.lMinimum.cX = 8;
55  icbBlock.lMaximum.cX = 12 + m_cHeaderWidth;
56  icbBlock.lMaximum.cY = -cIconVerticalSpace;
57 
58  for (std::list<const std::string*>::iterator it = m_lpsHeaders.begin(); it != m_lpsHeaders.end(); ++it)
59  {
60 
61  icbBlock.lMinimum.cY = icbBlock.lMaximum.cY - cIconHeight;
62  icbBlock.idData.indirectedText.kpcaValidationString = (const char*)-1;
63  icbBlock.idData.indirectedText.pcaTextbuffer = const_cast<char*>((*it)->c_str());
64  icbBlock.idData.indirectedText.iBufferLength = (*it)->size();
65  icbBlock.ifFlags.ifFlags = 0x17000311;
66  m_liIcons.push_back(new CCreatedIcon(icbBlock, this, false));
67  icbBlock.lMaximum.cY -= (cIconHeight + cIconVerticalGap);
68  }
69 
70  icbBlock.lMinimum.cX = 12 + m_cHeaderWidth;
71  icbBlock.lMaximum.cX = 28 + m_cHeaderWidth + m_cValueWidth;
72  icbBlock.lMaximum.cY = -cIconVerticalSpace;
73 
74  for (std::list<const std::string*>::iterator it = m_lpsValues.begin(); it != m_lpsValues.end(); ++it)
75  {
76  icbBlock.lMinimum.cY = icbBlock.lMaximum.cY - cIconHeight;
77  icbBlock.idData.indirectedText.kpcaValidationString = b2d ? (const char*)-1 : pca3dValidation;
78  icbBlock.idData.indirectedText.pcaTextbuffer = const_cast<char*>((*it)->c_str());
79  icbBlock.idData.indirectedText.iBufferLength = (*it)->size();
80  icbBlock.ifFlags.ifFlags = b2d ? 0x0700013d : 0x1700013d;
81  m_liIcons.push_back(new CCreatedIcon(icbBlock, this, false));
82  icbBlock.lMaximum.cY -= (cIconHeight + cIconVerticalGap);
83  }
84 }
85 
86 void
87 CAboutBox::AddRow(const std::string& rksHeader, const std::string& rksValue)
88 {
89  tCoordinate wh = wimp_strwidth(rksHeader.c_str()) + 16;
90  tCoordinate wv = wimp_strwidth(rksValue.c_str()) + 16;
91 
92  if (wh > m_cHeaderWidth)
93  {
94  m_cHeaderWidth = wh;
95  }
96 
97  if (wv > m_cValueWidth)
98  {
99  m_cValueWidth = wv;
100  }
101 
102  m_lpsHeaders.push_back(new std::string(rksHeader));
103  m_lpsValues.push_back(new std::string(rksValue));
104 }
105 
106 }
virtual void Adorn(tWindowCreateBlock &rwcbBlock)
Definition: aboutbox.cpp:35
virtual void Created(void)
Definition: aboutbox.cpp:47
CAboutBox(const std::string &rksName, const std::string &rksPurpose, const std::string &rksAuthor, const std::string &rksVersion)
Definition: aboutbox.cpp:18
void AddRow(const std::string &rksHeader, const std::string &rksValue)
Definition: aboutbox.cpp:87