Add an Infotext to the login screen. This modifies lib/widget/label.*!

master
Rene Jochum 2011-05-01 16:35:14 +02:00
parent 204eba3c3d
commit f23a94d644
4 changed files with 122 additions and 61 deletions

View File

@ -50,6 +50,47 @@ W_LABEL::W_LABEL(W_LABINIT const *init)
if (init->pText)
{
sstrcpy(aText, init->pText);
// Limit the wordwrap feature to
// widgets using "labelDisplay" as output function.
if (init->pDisplay == labelDisplay)
{
iV_SetFont(FontID);
QStringList words = QString(init->pText).split(" ");
QStringList line;
unsigned int wsize, lsize = 0;
foreach(const QString &word, words)
{
wsize = iV_GetTextWidth(word.toUtf8().constData());
if (lsize + wsize >= width)
{
if (line.isEmpty())
{
// Let iv_DrawText handle to long lines.
lines << word;
}
else
{
// Append current line and create a new one with that word.
lines << line.join(" ");
line.clear();
line << word;
lsize = wsize;
}
}
else
{
line << word;
lsize += wsize;
}
}
if (!line.isEmpty())
{
lines << line.join(" ");
}
lines = lines;
}
}
}
@ -91,7 +132,7 @@ void labelFree(W_LABEL *psWidget)
/* label display function */
void labelDisplay(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, PIELIGHT *pColours)
{
SDWORD fx,fy, fw;
unsigned int fx,fy, fw;
W_LABEL *psLabel;
enum iV_fonts FontID;
@ -100,22 +141,30 @@ void labelDisplay(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, PIELIGHT *pC
iV_SetFont(FontID);
iV_SetTextColour(pColours[WCOL_TEXT]);
if (psLabel->style & WLAB_ALIGNCENTRE)
// Draw each line.
int i = 0;
foreach(const QString &line, psLabel->lines)
{
fw = iV_GetTextWidth(psLabel->aText);
fx = xOffset + psLabel->x + (psLabel->width - fw) / 2;
if (psLabel->style & WLAB_ALIGNCENTRE)
{
fx = xOffset + psLabel->x + (psLabel->width - iV_GetTextWidth(line.toUtf8().constData())) / 2;
}
else if (psLabel->style & WLAB_ALIGNRIGHT)
{
fw = iV_GetTextWidth(line.toUtf8().constData());
fx = xOffset + psLabel->x + psLabel->width - fw;
}
else
{
fx = xOffset + psLabel->x;
}
fy = yOffset + psLabel->y + (psLabel->height - iV_GetTextLineSize())/2 - iV_GetTextAboveBase() + (iV_GetTextLineSize() * i);
iV_DrawText(line.toUtf8().constData(),fx,fy);
i++;
}
else if (psLabel->style & WLAB_ALIGNRIGHT)
{
fw = iV_GetTextWidth(psLabel->aText);
fx = xOffset + psLabel->x + psLabel->width - fw;
}
else
{
fx = xOffset + psLabel->x;
}
fy = yOffset + psLabel->y + (psLabel->height - iV_GetTextLineSize())/2 - iV_GetTextAboveBase();
iV_DrawText(psLabel->aText,fx,fy);
}
/* Respond to a mouse moving over a label */

View File

@ -24,6 +24,8 @@
#ifndef __INCLUDED_LIB_WIDGET_LABEL_H__
#define __INCLUDED_LIB_WIDGET_LABEL_H__
#include <QtCore/QStringList>
#include "widget.h"
#include "widgbase.h"
#include "lib/ivis_opengl/textdraw.h"
@ -33,6 +35,7 @@ struct W_LABEL : public WIDGET
W_LABEL(W_LABINIT const *init);
char aText[WIDG_MAXSTR]; // Text on the label
QStringList lines; // Text parsed to list on init.
enum iV_fonts FontID;
const char *pTip; // The tool tip for the button
};

View File

@ -1252,8 +1252,8 @@ void startGameFind(void)
sFormInit.style = WFORM_PLAIN;
sFormInit.x = FRONTEND_BOTFORMX+40;
sFormInit.y = 160;
sFormInit.width = FRONTEND_TOPFORMW-100;
sFormInit.height = FRONTEND_TOPFORMH+80;
sFormInit.width = 300;
sFormInit.height = FRONTEND_TOPFORMH+120;
sFormInit.pDisplay = intOpenPlainForm;
// sFormInit.disableChildren = true;
widgAddForm(psWScreen, &sFormInit);
@ -1261,58 +1261,66 @@ void startGameFind(void)
addSideText(CON_LOGIN_SIDETEXT, FRONTEND_SIDEX+65, FRONTEND_SIDEY-10, _("LOBBY LOGIN"));
// Draw username label
W_LABINIT sLoginUserLabInit;
sLoginUserLabInit.formID = FRONTEND_LOGINFORM;
sLoginUserLabInit.id = CON_LOGIN_USER_LABEL;
sLoginUserLabInit.style = WLAB_ALIGNCENTRE;
sLoginUserLabInit.x = 50;
sLoginUserLabInit.y = 50; // 215
sLoginUserLabInit.width = CON_SETTINGSWIDTH;
sLoginUserLabInit.height = 20;
sLoginUserLabInit.pText = _("Username:");
sLoginUserLabInit.pDisplay = showPasswordLabel;
widgAddLabel(psWScreen, &sLoginUserLabInit);
sLabInit.formID = FRONTEND_LOGINFORM;
sLabInit.id = CON_LOGIN_USER_LABEL;
sLabInit.style = WLAB_ALIGNCENTRE;
sLabInit.x = 50;
sLabInit.y = 50;
sLabInit.width = 200;
sLabInit.height = 20;
sLabInit.pText = _("Username:");
sLabInit.pDisplay = showPasswordLabel;
widgAddLabel(psWScreen, &sLabInit);
// Draw username entry box
W_EDBINIT sLoginUserEdInit;
sLoginUserEdInit.formID = FRONTEND_LOGINFORM;
sLoginUserEdInit.id = CON_LOGIN_USER;
sLoginUserEdInit.x = 50;
sLoginUserEdInit.y = 55;
sLoginUserEdInit.width = 280;
sLoginUserEdInit.height = 20;
sLoginUserEdInit.pText = lobbyUser.toUtf8().constData();
sLoginUserEdInit.pBoxDisplay = displayPasswordEditBox;
widgAddEditBox(psWScreen, &sLoginUserEdInit);
sEdInit.formID = FRONTEND_LOGINFORM;
sEdInit.id = CON_LOGIN_USER;
sEdInit.x = 50;
sEdInit.y = 55;
sEdInit.width = 200;
sEdInit.height = 20;
sEdInit.pText = lobbyUser.toUtf8().constData();
sEdInit.pBoxDisplay = displayPasswordEditBox;
widgAddEditBox(psWScreen, &sEdInit);
// Draw password label
W_LABINIT sLoginPassLabInit;
sLoginPassLabInit.formID = FRONTEND_LOGINFORM;
sLoginPassLabInit.id = CON_LOGIN_PASS_LABEL;
sLoginPassLabInit.style = WLAB_ALIGNCENTRE;
sLoginPassLabInit.x = 50;
sLoginPassLabInit.y = 110;
sLoginPassLabInit.width = CON_SETTINGSWIDTH;
sLoginPassLabInit.height = 20;
sLoginPassLabInit.pText = _("Password:");
sLoginPassLabInit.pDisplay = showPasswordLabel;
widgAddLabel(psWScreen, &sLoginPassLabInit);
sLabInit.formID = FRONTEND_LOGINFORM;
sLabInit.id = CON_LOGIN_PASS_LABEL;
sLabInit.style = WLAB_ALIGNCENTRE;
sLabInit.x = 50;
sLabInit.y = 110;
sLabInit.width = 200;
sLabInit.height = 20;
sLabInit.pText = _("Password:");
sLabInit.pDisplay = showPasswordLabel;
widgAddLabel(psWScreen, &sLabInit);
// Draw password entry box
W_EDBINIT sLoginPassEdInit;
sLoginPassEdInit.formID = FRONTEND_LOGINFORM;
sLoginPassEdInit.id = CON_LOGIN_PASS;
sLoginPassEdInit.x = 50;
sLoginPassEdInit.y = 115;
sLoginPassEdInit.width = 280;
sLoginPassEdInit.height = 20;
sLoginPassEdInit.pText = "";
sLoginPassEdInit.pBoxDisplay = displayPasswordEditBox;
widgAddEditBox(psWScreen, &sLoginPassEdInit);
sEdInit.formID = FRONTEND_LOGINFORM;
sEdInit.id = CON_LOGIN_PASS;
sEdInit.x = 50;
sEdInit.y = 115;
sEdInit.width = 200;
sEdInit.height = 20;
sEdInit.pText = "";
sEdInit.pBoxDisplay = displayPasswordEditBox;
widgAddEditBox(psWScreen, &sEdInit);
addMultiBut(psWScreen, FRONTEND_LOGINFORM,CON_LOGIN_NO,50,160,MULTIOP_OKW,MULTIOP_OKH,
// Info Text
sLabInit.formID = FRONTEND_LOGINFORM;
sLabInit.id = CON_LOGIN_INFOTEXT;
sLabInit.style = WLAB_ALIGNLEFT;
sLabInit.x = 30;
sLabInit.y = 150;
sLabInit.width = 300 - (30*2);
sLabInit.height = 20;
sLabInit.pText = _("Use your wz2100.net credentials here.");
sLabInit.pDisplay = labelDisplay;
widgAddLabel(psWScreen, &sLabInit);
addMultiBut(psWScreen, FRONTEND_LOGINFORM,CON_LOGIN_NO,50,210,MULTIOP_OKW,MULTIOP_OKH,
_("Cancel"),IMAGE_NO,IMAGE_NO,true);
addMultiBut(psWScreen, FRONTEND_LOGINFORM,CON_LOGIN_YES,295,160,MULTIOP_OKW,MULTIOP_OKH,
addMultiBut(psWScreen, FRONTEND_LOGINFORM,CON_LOGIN_YES,210,210,MULTIOP_OKW,MULTIOP_OKH,
_("OK"),IMAGE_OK,IMAGE_OK,true);
// Now hide it.

View File

@ -116,6 +116,7 @@ void loadMapPreview(bool hideInterface);
#define CON_LOGIN_USER_LABEL 10154
#define CON_LOGIN_PASS_LABEL 10155
#define CON_LOGIN_SIDETEXT 10156
#define CON_LOGIN_INFOTEXT 10157
// ////////////////////////////////////////////////////////////////