mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-02 17:03:13 +00:00
1154 lines
34 KiB
C++
1154 lines
34 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* Copyright (C) 2006-2010 - Frictional Games
|
|
*
|
|
* This file is part of Penumbra Overture.
|
|
*/
|
|
|
|
#include "hpl1/penumbra-overture/Notebook.h"
|
|
|
|
#include "hpl1/penumbra-overture/EffectHandler.h"
|
|
#include "hpl1/penumbra-overture/Init.h"
|
|
#include "hpl1/penumbra-overture/Inventory.h"
|
|
#include "hpl1/penumbra-overture/Player.h"
|
|
#include "hpl1/penumbra-overture/SaveHandler.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// FRONT STATE
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
cNotebookState_Front::cNotebookState_Front(cInit *apInit, cNotebook *apNotebook) : iNotebookState(apInit, apNotebook) {
|
|
mpDrawer = mpInit->mpGame->GetGraphics()->GetDrawer();
|
|
mpTextBack = mpDrawer->CreateGfxObject("notebook_textback.bmp", "diffalpha2d");
|
|
|
|
mpFrontFont = mpInit->mpGame->GetResources()->GetFontManager()->CreateFontData("verdana.fnt");
|
|
|
|
mvOptions.resize(2);
|
|
|
|
mvOptions[0].msText = kTranslate("Notebook", "TaskList");
|
|
mvOptions[0].mvPos = cVector3f(400, 220, 70);
|
|
|
|
mvOptions[1].msText = kTranslate("Notebook", "PickedNotes");
|
|
mvOptions[1].mvPos = cVector3f(400, 280, 70);
|
|
|
|
mlSelected = -1;
|
|
|
|
mvFontSize = 21;
|
|
|
|
for (size_t i = 0; i < mvOptions.size(); ++i) {
|
|
cRect2f optionRect;
|
|
optionRect.w = mpFrontFont->getLength(mvFontSize, mvOptions[i].msText.c_str());
|
|
optionRect.h = mvFontSize.y + 8;
|
|
optionRect.x = mvOptions[i].mvPos.x - optionRect.w / 2;
|
|
optionRect.y = mvOptions[i].mvPos.y;
|
|
|
|
mvOptions[i].mRect = optionRect;
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_Front::OnEnterState(int alLastState) {
|
|
mvOptions[0].msText = kTranslate("Notebook", "TaskList");
|
|
mvOptions[1].msText = kTranslate("Notebook", "PickedNotes");
|
|
|
|
mpNotebook->SetBookType(eNotebookType_Front);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_Front::OnLeaveState(int alNextState) {
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_Front::OnUpdate(float afTime) {
|
|
bool bFound = false;
|
|
for (size_t i = 0; i < mvOptions.size(); ++i) {
|
|
if (cMath::PointBoxCollision(mpNotebook->GetMousePos(), mvOptions[i].mRect)) {
|
|
if (mlSelected != (int)i) {
|
|
mlSelected = (int)i;
|
|
mvOptions[i].mfAlpha = 0;
|
|
}
|
|
bFound = true;
|
|
|
|
mvOptions[i].mfAlpha += 1.8f * afTime;
|
|
if (mvOptions[i].mfAlpha > 1.0f)
|
|
mvOptions[i].mfAlpha = 1.0f;
|
|
} else {
|
|
mvOptions[i].mfAlpha -= 1.3f * afTime;
|
|
if (mvOptions[i].mfAlpha < 0.0f)
|
|
mvOptions[i].mfAlpha = 0.0f;
|
|
}
|
|
}
|
|
|
|
if (bFound == false)
|
|
mlSelected = -1;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_Front::OnDraw() {
|
|
for (size_t i = 0; i < mvOptions.size(); ++i) {
|
|
if (mvOptions[i].mfAlpha > 0) {
|
|
mpFrontFont->draw(mvOptions[i].mvPos + cVector3f(0, 0, 1), mvFontSize,
|
|
cColor(0.9f, 0.9f, 0.9f, 1.0f * mpNotebook->GetAlpha() * mvOptions[i].mfAlpha),
|
|
eFontAlign_Center, mvOptions[i].msText);
|
|
|
|
mpDrawer->DrawGfxObject(mpTextBack, mvOptions[i].mvPos + cVector3f(-160, -2, -1),
|
|
cVector2f(320, mvFontSize.y + 15), cColor(1, mvOptions[i].mfAlpha * 0.7f));
|
|
}
|
|
|
|
mpFrontFont->draw(mvOptions[i].mvPos, mvFontSize, cColor(0.7f, 0.7f, 0.7f, 0.8f * mpNotebook->GetAlpha()),
|
|
eFontAlign_Center, mvOptions[i].msText);
|
|
mpFrontFont->draw(mvOptions[i].mvPos + cVector3f(1, 1, -1), mvFontSize, cColor(0.0f, 0.0f, 0.0f, 0.8f * mpNotebook->GetAlpha()),
|
|
eFontAlign_Center, mvOptions[i].msText);
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_Front::OnMouseDown(eMButton aButton) {
|
|
if (mlSelected == 0) {
|
|
mpStateMachine->ChangeState(eNotebookState_TaskList);
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_open", false, 1);
|
|
} else if (mlSelected == 1) {
|
|
mpStateMachine->ChangeState(eNotebookState_NoteList);
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_open", false, 1);
|
|
}
|
|
}
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_Front::OnExit() {
|
|
mpNotebook->SetActive(false);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// TASK LIST STATE
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
cNotebookState_TaskList::cNotebookState_TaskList(cInit *apInit, cNotebook *apNotebook) : iNotebookState(apInit, apNotebook) {
|
|
mpDrawer = mpInit->mpGame->GetGraphics()->GetDrawer();
|
|
mpTextFont = mpInit->mpGame->GetResources()->GetFontManager()->CreateFontData("cour.fnt", 14);
|
|
|
|
mfFontSize = 15;
|
|
|
|
//////////////////
|
|
// Options
|
|
mlSelected = -1;
|
|
mpOptionsImage[0] = mpDrawer->CreateGfxObject("notebook_nextpage.bmp", "diffalpha2d");
|
|
mpOptionsImage[1] = mpDrawer->CreateGfxObject("notebook_prevpage.bmp", "diffalpha2d");
|
|
|
|
mvOptions.resize(2);
|
|
|
|
cVector2f vBookSize(350, 460);
|
|
cVector3f vBookPos(400 - vBookSize.x / 2, 300 - vBookSize.y / 2, 60);
|
|
|
|
mvOptions[0].mvPos = cVector3f((vBookPos.x + vBookSize.x) - 119, (vBookPos.y + vBookSize.y) - 120, 15);
|
|
mvOptions[1].mvPos = cVector3f(vBookPos.x, vBookPos.y + vBookSize.y - 120, 15);
|
|
|
|
for (size_t i = 0; i < mvOptions.size(); ++i) {
|
|
cRect2f optionRect;
|
|
if (i == 0) {
|
|
optionRect.w = 119;
|
|
optionRect.h = 120;
|
|
optionRect.x = mvOptions[0].mvPos.x;
|
|
optionRect.y = mvOptions[0].mvPos.y;
|
|
} else if (i == 1) {
|
|
optionRect.w = 119;
|
|
optionRect.h = 120;
|
|
optionRect.x = mvOptions[1].mvPos.x;
|
|
optionRect.y = mvOptions[1].mvPos.y;
|
|
}
|
|
|
|
mvOptions[i].mRect = optionRect;
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_TaskList::OnEnterState(int alLastState) {
|
|
mvTaskPages.clear();
|
|
mpNotebook->SetBookType(eNotebookType_Open);
|
|
|
|
mlCurrentPage = 0;
|
|
mlSelected = -1;
|
|
|
|
int lStart = 0;
|
|
int lCount = 0;
|
|
float fYPos = 0;
|
|
tWStringVec vTempStrings;
|
|
|
|
tNotebook_BookTaskList_Iterator it = mpNotebook->GetTaskIterator();
|
|
while (it.HasNext()) {
|
|
cNotebook_BookTask *pTask = it.Next();
|
|
|
|
mpTextFont->getWordWrapRows(308, mfFontSize, mfFontSize - 1, _W("- ") + pTask->msText, &vTempStrings);
|
|
|
|
fYPos += ((float)vTempStrings.size()) * mfFontSize;
|
|
|
|
// Log("%d pos: %f\n",lCount,fYPos);
|
|
|
|
if (fYPos > 360.0f) {
|
|
cNotebook_TaskPage taskPage;
|
|
|
|
taskPage.mlStartTask = lStart;
|
|
taskPage.mlEndTask = lCount - 1;
|
|
lStart = lCount;
|
|
|
|
// Log("Too far! page: %d - %d\n",taskPage.mlStartTask,taskPage.mlEndTask);
|
|
|
|
mvTaskPages.push_back(taskPage);
|
|
|
|
fYPos = ((float)vTempStrings.size()) * mfFontSize;
|
|
}
|
|
|
|
// Space between tasks
|
|
fYPos += 30;
|
|
|
|
lCount++;
|
|
vTempStrings.clear();
|
|
}
|
|
|
|
if (lStart < mpNotebook->GetTaskNum()) {
|
|
cNotebook_TaskPage taskPage;
|
|
|
|
taskPage.mlStartTask = lStart;
|
|
taskPage.mlEndTask = lCount - 1;
|
|
|
|
mvTaskPages.push_back(taskPage);
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_TaskList::OnLeaveState(int alNextState) {
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_TaskList::OnUpdate(float afTime) {
|
|
//////////////////////////////////
|
|
// Next/Prev Page
|
|
bool bFound = false;
|
|
for (size_t i = 0; i < mvOptions.size(); ++i) {
|
|
if (cMath::PointBoxCollision(mpNotebook->GetMousePos(), mvOptions[i].mRect)) {
|
|
if (mlSelected != (int)i) {
|
|
mlSelected = (int)i;
|
|
mvOptions[i].mfAlpha = 0;
|
|
}
|
|
bFound = true;
|
|
|
|
mvOptions[i].mfAlpha += 2.5f * afTime;
|
|
if (mvOptions[i].mfAlpha > 1.0f)
|
|
mvOptions[i].mfAlpha = 1.0f;
|
|
} else {
|
|
mvOptions[i].mfAlpha -= 1.3f * afTime;
|
|
if (mvOptions[i].mfAlpha < 0.0f)
|
|
mvOptions[i].mfAlpha = 0.0f;
|
|
}
|
|
}
|
|
|
|
if (bFound == false)
|
|
mlSelected = -1;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_TaskList::OnDraw() {
|
|
cVector3f vPos(254, 110, 70);
|
|
|
|
int lCount = 0;
|
|
|
|
tNotebook_BookTaskList_Iterator it = mpNotebook->GetTaskIterator();
|
|
while (it.HasNext()) {
|
|
cNotebook_BookTask *pTask = it.Next();
|
|
|
|
if (lCount < mvTaskPages[mlCurrentPage].mlStartTask ||
|
|
lCount > mvTaskPages[mlCurrentPage].mlEndTask) {
|
|
++lCount;
|
|
continue;
|
|
}
|
|
|
|
mpTextFont->draw(vPos + cVector3f(-12, 0, 0), 14, cColor(0.0f, 0.0f, 0.0f, 0.9f), eFontAlign_Left,
|
|
_W("-"));
|
|
int lRows = mpTextFont->drawWordWrap(vPos, 308, 15, 14, cColor(0.0f, 0.0f, 0.0f, 0.9f), eFontAlign_Left, pTask->msText);
|
|
|
|
vPos.y += 30.0f + (float)lRows * 15.0f;
|
|
|
|
++lCount;
|
|
}
|
|
|
|
//////////////////////////////////
|
|
// Page number
|
|
mpTextFont->draw(cVector3f(400, 490, 16), 15, cColor(0.05f, mpNotebook->GetAlpha()), eFontAlign_Center,
|
|
Common::U32String::format("%d", mlCurrentPage + 1));
|
|
|
|
//////////////////////////////////
|
|
// Draw arrows back and forward
|
|
for (size_t i = 0; i < mvOptions.size(); ++i) {
|
|
if (i == 0 && mlCurrentPage >= (int)mvTaskPages.size() - 1)
|
|
continue;
|
|
if (i == 1 && mlCurrentPage == 0)
|
|
continue;
|
|
|
|
mpDrawer->DrawGfxObject(mpOptionsImage[i], mvOptions[i].mvPos,
|
|
cVector2f(mvOptions[i].mRect.w, mvOptions[i].mRect.h),
|
|
cColor(1, mpNotebook->GetAlpha()));
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_TaskList::OnMouseDown(eMButton aButton) {
|
|
// Forward
|
|
if (mlSelected == 0) {
|
|
if (mlCurrentPage < (int)mvTaskPages.size() - 1) {
|
|
mlCurrentPage++;
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_page", false, 1);
|
|
}
|
|
}
|
|
// Backward
|
|
else if (mlSelected == 1) {
|
|
if (mlCurrentPage > 0) {
|
|
mlCurrentPage--;
|
|
if (mlCurrentPage < 0)
|
|
mlCurrentPage = 0;
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_page", false, 1);
|
|
}
|
|
}
|
|
}
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_TaskList::OnExit() {
|
|
mpStateMachine->ChangeState(eNotebookState_Front);
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_close", false, 1);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// NOTE LIST STATE
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
cNotebookState_NoteList::cNotebookState_NoteList(cInit *apInit, cNotebook *apNotebook) : iNotebookState(apInit, apNotebook) {
|
|
mpDrawer = mpInit->mpGame->GetGraphics()->GetDrawer();
|
|
mpTextBack = mpDrawer->CreateGfxObject("notebook_listtextback.bmp", "diffalpha2d");
|
|
mpTab = mpDrawer->CreateGfxObject("notebook_tab.bmp", "diffalpha2d");
|
|
|
|
mpTextFont = mpInit->mpGame->GetResources()->GetFontManager()->CreateFontData("verdana.fnt", 14);
|
|
|
|
msUnread = kTranslate("Notebook", "Unread");
|
|
|
|
mvSize = cVector2f(14, 14);
|
|
|
|
mlMaxNotesPerPage = 11;
|
|
mlFirstNote = 0;
|
|
mlSelected = -1;
|
|
|
|
mpOptionsImage[0] = mpDrawer->CreateGfxObject("notebook_nextpage.bmp", "diffalpha2d");
|
|
mpOptionsImage[1] = mpDrawer->CreateGfxObject("notebook_prevpage.bmp", "diffalpha2d");
|
|
|
|
mvOptions.resize(2);
|
|
|
|
cVector2f vBookSize(350, 460);
|
|
cVector3f vBookPos(400 - vBookSize.x / 2, 300 - vBookSize.y / 2, 60);
|
|
|
|
mvOptions[0].mvPos = cVector3f((vBookPos.x + vBookSize.x) - 119, (vBookPos.y + vBookSize.y) - 120, 15);
|
|
|
|
mvOptions[1].mvPos = cVector3f(vBookPos.x, vBookPos.y + vBookSize.y - 120, 15);
|
|
|
|
for (size_t i = 0; i < mvOptions.size(); ++i) {
|
|
cRect2f optionRect;
|
|
if (i == 0) {
|
|
optionRect.w = 119;
|
|
optionRect.h = 120;
|
|
optionRect.x = mvOptions[0].mvPos.x;
|
|
optionRect.y = mvOptions[0].mvPos.y;
|
|
} else if (i == 1) {
|
|
optionRect.w = 119;
|
|
optionRect.h = 120;
|
|
optionRect.x = mvOptions[1].mvPos.x;
|
|
optionRect.y = mvOptions[1].mvPos.y;
|
|
}
|
|
|
|
mvOptions[i].mRect = optionRect;
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_NoteList::OnEnterState(int alLastState) {
|
|
mpNotebook->SetBookType(eNotebookType_Open);
|
|
|
|
mpSelectedNote = NULL;
|
|
|
|
if (alLastState != eNotebookState_Note)
|
|
mlFirstNote = (mpNotebook->GetNoteNum() / 12) * 11;
|
|
|
|
mlSelected = -1;
|
|
|
|
//////////////////////////////////////////
|
|
// Setup pos and size of all entries
|
|
int lCount = 0;
|
|
cVector3f vPos(242, 111, 70);
|
|
tNotebook_NoteList_Iterator it = mpNotebook->GetNoteIterator();
|
|
while (it.HasNext()) {
|
|
if (lCount == mlMaxNotesPerPage) {
|
|
lCount = 0;
|
|
vPos = cVector3f(242, 111, 70);
|
|
}
|
|
|
|
cNotebook_Note *pNote = it.Next();
|
|
|
|
pNote->mRect.x = vPos.x;
|
|
pNote->mRect.y = vPos.y + 6;
|
|
pNote->mRect.w = 300;
|
|
pNote->mRect.h = mvSize.y + 12;
|
|
|
|
vPos.y += mvSize.y + 15;
|
|
|
|
lCount++;
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_NoteList::OnLeaveState(int alNextState) {
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_NoteList::OnUpdate(float afTime) {
|
|
mpSelectedNote = NULL;
|
|
|
|
//////////////////////////////////
|
|
// Notes
|
|
int lCount = 0;
|
|
tNotebook_NoteList_Iterator it = mpNotebook->GetNoteIterator();
|
|
while (it.HasNext()) {
|
|
cNotebook_Note *pNote = it.Next();
|
|
if (lCount < mlFirstNote || lCount >= mlFirstNote + mlMaxNotesPerPage) {
|
|
lCount++;
|
|
continue;
|
|
}
|
|
|
|
if (cMath::PointBoxCollision(mpNotebook->GetMousePos(), pNote->mRect)) {
|
|
mpSelectedNote = pNote;
|
|
}
|
|
|
|
if (pNote == mpSelectedNote) {
|
|
pNote->mfAlpha += 2.5f * afTime;
|
|
if (pNote->mfAlpha > 1.0f)
|
|
pNote->mfAlpha = 1.0f;
|
|
} else {
|
|
pNote->mfAlpha -= 2.9f * afTime;
|
|
if (pNote->mfAlpha < 0.0f)
|
|
pNote->mfAlpha = 0.0f;
|
|
}
|
|
|
|
lCount++;
|
|
}
|
|
|
|
//////////////////////////////////
|
|
// Next/Prev Page
|
|
bool bFound = false;
|
|
for (size_t i = 0; i < mvOptions.size(); ++i) {
|
|
if (cMath::PointBoxCollision(mpNotebook->GetMousePos(), mvOptions[i].mRect)) {
|
|
if (mlSelected != (int)i) {
|
|
mlSelected = (int)i;
|
|
mvOptions[i].mfAlpha = 0;
|
|
}
|
|
bFound = true;
|
|
|
|
mvOptions[i].mfAlpha += 2.5f * afTime;
|
|
if (mvOptions[i].mfAlpha > 1.0f)
|
|
mvOptions[i].mfAlpha = 1.0f;
|
|
} else {
|
|
mvOptions[i].mfAlpha -= 1.3f * afTime;
|
|
if (mvOptions[i].mfAlpha < 0.0f)
|
|
mvOptions[i].mfAlpha = 0.0f;
|
|
}
|
|
}
|
|
|
|
if (bFound == false)
|
|
mlSelected = -1;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_NoteList::OnDraw() {
|
|
int lCount = 0;
|
|
tNotebook_NoteList_Iterator it = mpNotebook->GetNoteIterator();
|
|
while (it.HasNext()) {
|
|
cNotebook_Note *pNote = it.Next();
|
|
if (lCount < mlFirstNote || lCount >= mlFirstNote + mlMaxNotesPerPage) {
|
|
lCount++;
|
|
continue;
|
|
}
|
|
|
|
cVector3f vTabPos(400 - 175, pNote->mRect.y, 68);
|
|
cVector2f vTabSize(14, pNote->mRect.h + 3);
|
|
mpDrawer->DrawGfxObject(mpTab, vTabPos, vTabSize, cColor(1, mpNotebook->GetAlpha()));
|
|
|
|
cVector3f vTextPos(pNote->mRect.x, pNote->mRect.y, 70);
|
|
|
|
if (pNote->mfAlpha < 1) {
|
|
float fAlpha = 0.9f * mpNotebook->GetAlpha() * (1 - pNote->mfAlpha);
|
|
mpTextFont->draw(vTextPos, mvSize, cColor(0, fAlpha), eFontAlign_Left, pNote->msName);
|
|
}
|
|
|
|
if (pNote->mfAlpha > 0) {
|
|
float fAlpha = pNote->mfAlpha * mpNotebook->GetAlpha();
|
|
float fShadowWidth = mpTextFont->getLength(mvSize, pNote->msName.c_str());
|
|
|
|
cVector3f vPos(pNote->mRect.x - 10, pNote->mRect.y, 69);
|
|
cVector2f vSize(fShadowWidth + 20, pNote->mRect.h - 2);
|
|
|
|
mpDrawer->DrawGfxObject(mpTextBack, vPos, vSize, cColor(1, fAlpha * 0.7f));
|
|
|
|
mpTextFont->draw(vTextPos, mvSize, cColor(0.85f, fAlpha), eFontAlign_Left, pNote->msName);
|
|
}
|
|
|
|
lCount++;
|
|
}
|
|
|
|
//////////////////////////////////
|
|
// Page number
|
|
mpTextFont->draw(cVector3f(400, 490, 16), 17, cColor(0.05f, mpNotebook->GetAlpha()), eFontAlign_Center,
|
|
Common::U32String::format("%d", (mlFirstNote / 11) + 1));
|
|
|
|
//////////////////////////////////
|
|
// Draw arrows back and forward
|
|
for (size_t i = 0; i < mvOptions.size(); ++i) {
|
|
if (i == 0 && mlFirstNote >= mpNotebook->GetNoteNum() - mlMaxNotesPerPage)
|
|
continue;
|
|
if (i == 1 && mlFirstNote == 0)
|
|
continue;
|
|
|
|
mpDrawer->DrawGfxObject(mpOptionsImage[i], mvOptions[i].mvPos,
|
|
cVector2f(mvOptions[i].mRect.w, mvOptions[i].mRect.h),
|
|
cColor(1, mpNotebook->GetAlpha()));
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_NoteList::OnMouseDown(eMButton aButton) {
|
|
if (mpSelectedNote != NULL) {
|
|
mpNotebook->SetSelectedNote(mpSelectedNote);
|
|
mpStateMachine->ChangeState(eNotebookState_Note);
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_open", false, 1);
|
|
}
|
|
|
|
// Forward
|
|
if (mlSelected == 0) {
|
|
if (mlFirstNote < mpNotebook->GetNoteNum() - mlMaxNotesPerPage) {
|
|
mlFirstNote += mlMaxNotesPerPage;
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_page", false, 1);
|
|
}
|
|
}
|
|
// Backward
|
|
else if (mlSelected == 1) {
|
|
if (mlFirstNote > 0) {
|
|
mlFirstNote -= mlMaxNotesPerPage;
|
|
if (mlFirstNote < 0)
|
|
mlFirstNote = 0;
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_page", false, 1);
|
|
}
|
|
}
|
|
}
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_NoteList::OnExit() {
|
|
mpStateMachine->ChangeState(eNotebookState_Front);
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_close", false, 1);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// NOTE STATE
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
cNotebookState_Note::cNotebookState_Note(cInit *apInit, cNotebook *apNotebook) : iNotebookState(apInit, apNotebook) {
|
|
mpDrawer = mpInit->mpGame->GetGraphics()->GetDrawer();
|
|
mpOptionsImage[0] = mpDrawer->CreateGfxObject("notebook_nextpage.bmp", "diffalpha2d");
|
|
mpOptionsImage[1] = mpDrawer->CreateGfxObject("notebook_prevpage.bmp", "diffalpha2d");
|
|
|
|
mpTextFont = mpInit->mpGame->GetResources()->GetFontManager()->CreateFontData("cour.fnt", 14);
|
|
mpNavigateFont = mpInit->mpGame->GetResources()->GetFontManager()->CreateFontData("verdana.fnt");
|
|
|
|
mvSize = cVector2f(14, 14);
|
|
mlMaxRows = 22;
|
|
|
|
mvOptions.resize(2);
|
|
|
|
cVector2f vBookSize(350, 460);
|
|
cVector3f vBookPos(400 - vBookSize.x / 2, 300 - vBookSize.y / 2, 60);
|
|
|
|
mvOptions[0].msText = _W(">>>");
|
|
mvOptions[0].mvPos = cVector3f((vBookPos.x + vBookSize.x) - 119,
|
|
(vBookPos.y + vBookSize.y) - 120,
|
|
15);
|
|
|
|
mvOptions[1].msText = _W("<<<");
|
|
mvOptions[1].mvPos = cVector3f(vBookPos.x,
|
|
vBookPos.y + vBookSize.y - 120,
|
|
15);
|
|
|
|
for (size_t i = 0; i < mvOptions.size(); ++i) {
|
|
cRect2f optionRect;
|
|
if (i == 0) {
|
|
optionRect.w = 119;
|
|
optionRect.h = 120;
|
|
optionRect.x = mvOptions[0].mvPos.x;
|
|
optionRect.y = mvOptions[0].mvPos.y;
|
|
} else if (i == 1) {
|
|
optionRect.w = 119;
|
|
optionRect.h = 120;
|
|
optionRect.x = mvOptions[1].mvPos.x;
|
|
optionRect.y = mvOptions[1].mvPos.y;
|
|
}
|
|
|
|
mvOptions[i].mRect = optionRect;
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_Note::OnEnterState(int alLastState) {
|
|
mpNotebook->SetBookType(eNotebookType_Open);
|
|
cNotebook_Note *pNote = mpNotebook->GetSelectedNote();
|
|
|
|
mvRows.clear();
|
|
mvPages.clear();
|
|
mpTextFont->getWordWrapRows(320, mvSize.y + 5, mvSize, pNote->msText, &mvRows);
|
|
|
|
int lStartRow = 0;
|
|
int lRowCount = 0;
|
|
for (size_t i = 0; i < mvRows.size(); ++i) {
|
|
// Log("Row%d: %s\n",i, mvRows[i].c_str());
|
|
|
|
lRowCount++;
|
|
|
|
// Log("Row: %d\n",lRowCount);
|
|
if (cString::GetLastStringPosW(mvRows[i], _W("[new_page]")) >= 0) {
|
|
// There some text on this page, make a newer one
|
|
if (lRowCount > 1) {
|
|
cNotePage page;
|
|
page.mlStart = lStartRow;
|
|
page.mlEnd = lStartRow + lRowCount - 1;
|
|
lStartRow = page.mlEnd + 1;
|
|
mvPages.push_back(page);
|
|
}
|
|
// No text on page, skip the newer page.
|
|
else {
|
|
lStartRow++;
|
|
}
|
|
lRowCount = 0;
|
|
// Log("NEWPAGE Added page: %d - %d\n",page.mlStart,page.mlEnd);
|
|
} else if (lRowCount >= mlMaxRows) {
|
|
cNotePage page;
|
|
page.mlStart = lStartRow;
|
|
page.mlEnd = lStartRow + lRowCount;
|
|
lStartRow = page.mlEnd;
|
|
mvPages.push_back(page);
|
|
lRowCount = 0;
|
|
// Log("MAX ROW Added page: %d - %d\n",page.mlStart,page.mlEnd);
|
|
}
|
|
}
|
|
if (lStartRow < (int)mvRows.size()) {
|
|
cNotePage page;
|
|
page.mlStart = lStartRow;
|
|
page.mlEnd = (int)mvRows.size();
|
|
mvPages.push_back(page);
|
|
// Log("Added page: %d - %d\n",page.mlStart,page.mlEnd);
|
|
}
|
|
|
|
mlCurrentPage = 0;
|
|
|
|
mlSelected = -1;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_Note::OnLeaveState(int alNextState) {
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_Note::OnUpdate(float afTime) {
|
|
bool bFound = false;
|
|
for (size_t i = 0; i < mvOptions.size(); ++i) {
|
|
if (cMath::PointBoxCollision(mpNotebook->GetMousePos(), mvOptions[i].mRect)) {
|
|
if (mlSelected != (int)i) {
|
|
mlSelected = (int)i;
|
|
mvOptions[i].mfAlpha = 0;
|
|
}
|
|
bFound = true;
|
|
|
|
mvOptions[i].mfAlpha += 2.5f * afTime;
|
|
if (mvOptions[i].mfAlpha > 1.0f)
|
|
mvOptions[i].mfAlpha = 1.0f;
|
|
} else {
|
|
mvOptions[i].mfAlpha -= 1.3f * afTime;
|
|
if (mvOptions[i].mfAlpha < 0.0f)
|
|
mvOptions[i].mfAlpha = 0.0f;
|
|
}
|
|
}
|
|
|
|
if (bFound == false)
|
|
mlSelected = -1;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_Note::OnDraw() {
|
|
//////////////////////////////////
|
|
// Draw page text
|
|
cVector3f vPos(235, 107, 70);
|
|
for (int i = mvPages[mlCurrentPage].mlStart; i < mvPages[mlCurrentPage].mlEnd; ++i) {
|
|
mpTextFont->draw(vPos, mvSize, cColor(0, 1.0f * mpNotebook->GetAlpha()),
|
|
eFontAlign_Left, mvRows[i]);
|
|
|
|
vPos.y += mvSize.y + 2;
|
|
}
|
|
|
|
//////////////////////////////////
|
|
// Page number
|
|
mpTextFont->draw(cVector3f(400, 490, 16), 15, cColor(0.05f, mpNotebook->GetAlpha()), eFontAlign_Center,
|
|
Common::U32String::format("%d", mlCurrentPage + 1));
|
|
|
|
//////////////////////////////////
|
|
// Draw arrows back and forward
|
|
for (size_t i = 0; i < mvOptions.size(); ++i) {
|
|
if (i == 0 && mlCurrentPage == (int)mvPages.size() - 1)
|
|
continue;
|
|
if (i == 1 && mlCurrentPage == 0)
|
|
continue;
|
|
|
|
mpDrawer->DrawGfxObject(mpOptionsImage[i], mvOptions[i].mvPos,
|
|
cVector2f(mvOptions[i].mRect.w, mvOptions[i].mRect.h),
|
|
cColor(1, mpNotebook->GetAlpha()));
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_Note::OnMouseDown(eMButton aButton) {
|
|
// Forward
|
|
if (mlSelected == 0) {
|
|
if (mlCurrentPage < (int)mvPages.size() - 1) {
|
|
mlCurrentPage++;
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_page", false, 1);
|
|
}
|
|
}
|
|
// Backward
|
|
else if (mlSelected == 1) {
|
|
if (mlCurrentPage > 0) {
|
|
mlCurrentPage--;
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_page", false, 1);
|
|
}
|
|
}
|
|
}
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebookState_Note::OnExit() {
|
|
mpStateMachine->ChangeState(eNotebookState_NoteList);
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_open", false, 1);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// CONSTRUCTORS
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
cNotebook::cNotebook(cInit *apInit) : iUpdateable("Notebook") {
|
|
mpInit = apInit;
|
|
mpDrawer = mpInit->mpGame->GetGraphics()->GetDrawer();
|
|
|
|
mbInventoryWasActive = false;
|
|
|
|
Reset();
|
|
|
|
mpGfxBackground = mpDrawer->CreateGfxObject("notebook_background.bmp", "diffalpha2d");
|
|
|
|
mStateMachine.AddState(hplNew(cNotebookState_Front, (mpInit, this)), "Front", eNotebookState_Front, mpInit->mpGame->GetStepSize());
|
|
mStateMachine.AddState(hplNew(cNotebookState_TaskList, (mpInit, this)), "TaskList", eNotebookState_TaskList, mpInit->mpGame->GetStepSize());
|
|
mStateMachine.AddState(hplNew(cNotebookState_NoteList, (mpInit, this)), "NoteList", eNotebookState_NoteList, mpInit->mpGame->GetStepSize());
|
|
mStateMachine.AddState(hplNew(cNotebookState_Note, (mpInit, this)), "Note", eNotebookState_Note, mpInit->mpGame->GetStepSize());
|
|
|
|
///////////////////////
|
|
// Book types
|
|
mvBookTypes.resize(2);
|
|
|
|
// front
|
|
mvBookTypes[0].mpGfxImage = mpDrawer->CreateGfxObject("notebook_front.bmp", "diffalpha2d");
|
|
mvBookTypes[0].mfAlpha = 1;
|
|
mvBookTypes[0].mType = eNotebookType_Front;
|
|
|
|
// open
|
|
mvBookTypes[1].mpGfxImage = mpDrawer->CreateGfxObject("notebook_open.bmp", "diffalpha2d");
|
|
mvBookTypes[1].mfAlpha = 0;
|
|
mvBookTypes[1].mType = eNotebookType_Open;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
cNotebook::~cNotebook(void) {
|
|
STLDeleteAll(mlstTasks);
|
|
STLDeleteAll(mlstNotes);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// PUBLIC METHODS
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebook::OnStart() {
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebook::Update(float afTimeStep) {
|
|
////////////////////////////////
|
|
// Check active and fade
|
|
if (mbActive == false) {
|
|
mfAlpha -= 2.5f * afTimeStep;
|
|
if (mfAlpha < 0)
|
|
mfAlpha = 0;
|
|
return;
|
|
} else {
|
|
mfAlpha += 2.3f * afTimeStep;
|
|
if (mfAlpha > 1)
|
|
mfAlpha = 1;
|
|
}
|
|
|
|
////////////////////////////////
|
|
// Book types
|
|
for (size_t i = 0; i < mvBookTypes.size(); ++i) {
|
|
if (mBookType == mvBookTypes[i].mType) {
|
|
mvBookTypes[i].mfAlpha += 3.5f * afTimeStep;
|
|
if (mvBookTypes[i].mfAlpha > 1.0f)
|
|
mvBookTypes[i].mfAlpha = 1.0f;
|
|
} else {
|
|
mvBookTypes[i].mfAlpha -= 3.6f * afTimeStep;
|
|
if (mvBookTypes[i].mfAlpha < 0.0f)
|
|
mvBookTypes[i].mfAlpha = 0.0f;
|
|
}
|
|
}
|
|
|
|
//////////////////////////////
|
|
// Update state machine
|
|
mStateMachine.Update(afTimeStep);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebook::Reset() {
|
|
mbActive = false;
|
|
mfAlpha = 0;
|
|
|
|
STLDeleteAll(mlstTasks);
|
|
STLDeleteAll(mlstNotes);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebook::OnDraw() {
|
|
if (mfAlpha == 0)
|
|
return;
|
|
|
|
mpDrawer->DrawGfxObject(mpGfxBackground, cVector3f(0, 0, 0), cVector2f(800, 600), cColor(1, mfAlpha));
|
|
|
|
////////////////////////////////////
|
|
// Book types
|
|
cVector2f vBookSize(350, 460);
|
|
cVector3f vBookPos(400 - vBookSize.x / 2, 300 - vBookSize.y / 2, 10);
|
|
|
|
for (size_t i = 0; i < mvBookTypes.size(); ++i) {
|
|
mpDrawer->DrawGfxObject(mvBookTypes[i].mpGfxImage, vBookPos, vBookSize, cColor(1, mfAlpha * mvBookTypes[i].mfAlpha));
|
|
}
|
|
|
|
////////////////////////////////////
|
|
// Current state
|
|
static_cast<iNotebookState *>(mStateMachine.CurrentState())->OnDraw();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebook::SetMousePos(const cVector2f &avPos) {
|
|
mvMousePos = avPos;
|
|
mpInit->mpPlayer->SetCrossHairPos(mvMousePos);
|
|
}
|
|
|
|
void cNotebook::AddMousePos(const cVector2f &avRel) {
|
|
mvMousePos += avRel;
|
|
|
|
if (mvMousePos.x < 0)
|
|
mvMousePos.x = 0;
|
|
if (mvMousePos.x >= 800)
|
|
mvMousePos.x = 800;
|
|
if (mvMousePos.y < 0)
|
|
mvMousePos.y = 0;
|
|
if (mvMousePos.y >= 600)
|
|
mvMousePos.y = 600;
|
|
|
|
mpInit->mpPlayer->SetCrossHairPos(mvMousePos);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebook::OnMouseDown(eMButton aButton) {
|
|
// Check if click is outside of book
|
|
cRect2f bookRect;
|
|
bookRect.w = 350;
|
|
bookRect.h = 460;
|
|
bookRect.x = 400 - bookRect.w / 2;
|
|
bookRect.y = 300 - bookRect.h / 2;
|
|
if (cMath::PointBoxCollision(mvMousePos, bookRect) == false) {
|
|
OnExit();
|
|
} else {
|
|
static_cast<iNotebookState *>(mStateMachine.CurrentState())->OnMouseDown(aButton);
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebook::OnMouseUp(eMButton aButton) {
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebook::OnExit() {
|
|
static_cast<iNotebookState *>(mStateMachine.CurrentState())->OnExit();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
tNotebook_NoteList_Iterator cNotebook::GetNoteIterator() {
|
|
return tNotebook_NoteList_Iterator(&mlstNotes);
|
|
}
|
|
|
|
cNotebook_Note *cNotebook::AddNote(const tWString &asName, const tString &asTextCat, const tString &asTextEntry) {
|
|
cNotebook_Note *pNote = hplNew(cNotebook_Note, ());
|
|
pNote->msName = asName;
|
|
|
|
pNote->msTextCat = asTextCat;
|
|
pNote->msTextEntry = asTextEntry;
|
|
|
|
pNote->msText = kTranslate(asTextCat, asTextEntry);
|
|
|
|
mlstNotes.push_back(pNote);
|
|
|
|
return pNote;
|
|
}
|
|
|
|
void cNotebook::RemoveNote(const tString &asName) {
|
|
/*tNotebook_NoteListIt it = mlstNotes.begin();
|
|
for(; it != mlstNotes.end(); ){
|
|
cNotebook_Note *pNote = *it;
|
|
if(pNote->msName == asName) {
|
|
it = mlstNotes.erase(it);
|
|
hplDelete( pNote );
|
|
}
|
|
else{
|
|
++it;
|
|
}
|
|
}*/
|
|
}
|
|
//-----------------------------------------------------------------------
|
|
|
|
tNotebook_BookTaskList_Iterator cNotebook::GetTaskIterator() {
|
|
return tNotebook_BookTaskList_Iterator(&mlstTasks);
|
|
}
|
|
|
|
void cNotebook::AddTask(const tString &asName, const tWString &asText) {
|
|
if (mpInit->mbDisablePersonalNotes)
|
|
return;
|
|
|
|
tNotebook_BookTaskListIt it = mlstTasks.begin();
|
|
for (; it != mlstTasks.end(); ++it) {
|
|
cNotebook_BookTask *pTask = *it;
|
|
if (pTask->msName == asName) {
|
|
Warning("Notebook task '%s' already exists\n", asName.c_str());
|
|
return;
|
|
}
|
|
}
|
|
|
|
cNotebook_BookTask *pTask = hplNew(cNotebook_BookTask, ());
|
|
pTask->msName = asName;
|
|
pTask->msText = asText;
|
|
|
|
mlstTasks.push_back(pTask);
|
|
|
|
mpInit->mpGame->GetSound()->GetSoundHandler()->PlayGui("gui_notebook_add_note", false, 1);
|
|
mpInit->mpEffectHandler->GetSubTitle()->Add(kTranslate("Notebook", "AddTask"), 2.2f, false);
|
|
}
|
|
|
|
void cNotebook::RemoveTask(const tString &asName) {
|
|
tNotebook_BookTaskListIt it = mlstTasks.begin();
|
|
for (; it != mlstTasks.end();) {
|
|
cNotebook_BookTask *pTask = *it;
|
|
if (pTask->msName == asName) {
|
|
it = mlstTasks.erase(it);
|
|
hplDelete(pTask);
|
|
} else {
|
|
++it;
|
|
}
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebook::SetBookType(eNotebookType aType) {
|
|
if (mBookType == aType)
|
|
return;
|
|
|
|
mBookType = aType;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebook::SetActive(bool abX) {
|
|
mbActive = abX;
|
|
if (mbActive) {
|
|
mLastCrossHairState = mpInit->mpPlayer->GetCrossHairState();
|
|
|
|
if (mpInit->mpInventory->IsActive()) {
|
|
mbInventoryWasActive = true;
|
|
mvMousePos = mpInit->mpInventory->GetMousePos();
|
|
mpInit->mpInventory->SetActive(false);
|
|
} else {
|
|
mbInventoryWasActive = false;
|
|
}
|
|
mpInit->mpPlayer->SetCrossHairPos(mvMousePos);
|
|
mpInit->mpPlayer->SetCrossHairState(eCrossHairState_Pointer);
|
|
|
|
mBookType = eNotebookType_Front;
|
|
mStateMachine.ChangeState(eNotebookState_Front);
|
|
mvBookTypes[0].mfAlpha = 1;
|
|
} else {
|
|
if (mbInventoryWasActive) {
|
|
mpInit->mpInventory->SetActive(true);
|
|
mpInit->mpInventory->SetMousePos(mvMousePos);
|
|
} else {
|
|
mpInit->mpPlayer->SetCrossHairState(mLastCrossHairState);
|
|
mpInit->mpPlayer->SetCrossHairPos(cVector2f(400, 300));
|
|
}
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebook::SaveToGlobal(cNotebook_GlobalSave *apSave) {
|
|
//////////////////////
|
|
// Tasks
|
|
{
|
|
tNotebook_BookTaskListIt it = mlstTasks.begin();
|
|
for (; it != mlstTasks.end(); ++it) {
|
|
cNotebook_BookTask *pTask = *it;
|
|
cNotebookTask_GlobalSave saveTask;
|
|
|
|
saveTask.msName = pTask->msName;
|
|
saveTask.msText = pTask->msText;
|
|
|
|
apSave->mlstTasks.Add(saveTask);
|
|
}
|
|
}
|
|
|
|
//////////////////////
|
|
// Notes
|
|
{
|
|
tNotebook_NoteListIt it = mlstNotes.begin();
|
|
for (; it != mlstNotes.end(); ++it) {
|
|
cNotebook_Note *pNote = *it;
|
|
cNotebookNote_GlobalSave saveNote;
|
|
|
|
saveNote.mbRead = pNote->mbRead;
|
|
saveNote.msName = pNote->msName;
|
|
saveNote.msTextCat = pNote->msTextCat;
|
|
saveNote.msTextEntry = pNote->msTextEntry;
|
|
|
|
apSave->mlstNotes.Add(saveNote);
|
|
}
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cNotebook::LoadFromGlobal(cNotebook_GlobalSave *apSave) {
|
|
//////////////////////
|
|
// Tasks
|
|
{
|
|
cContainerListIterator<cNotebookTask_GlobalSave> it = apSave->mlstTasks.GetIterator();
|
|
while (it.HasNext()) {
|
|
cNotebook_BookTask *pTask = hplNew(cNotebook_BookTask, ());
|
|
cNotebookTask_GlobalSave &saveTask = it.Next();
|
|
|
|
pTask->msName = saveTask.msName;
|
|
pTask->msText = saveTask.msText;
|
|
|
|
mlstTasks.push_back(pTask);
|
|
}
|
|
}
|
|
|
|
//////////////////////
|
|
// Notes
|
|
{
|
|
cContainerListIterator<cNotebookNote_GlobalSave> it = apSave->mlstNotes.GetIterator();
|
|
while (it.HasNext()) {
|
|
cNotebook_Note *pNote = hplNew(cNotebook_Note, ());
|
|
cNotebookNote_GlobalSave &saveNote = it.Next();
|
|
|
|
pNote->mbRead = saveNote.mbRead;
|
|
pNote->msName = saveNote.msName;
|
|
pNote->msTextCat = saveNote.msTextCat;
|
|
pNote->msTextEntry = saveNote.msTextEntry;
|
|
|
|
pNote->msText = kTranslate(pNote->msTextCat, pNote->msTextEntry);
|
|
|
|
mlstNotes.push_back(pNote);
|
|
}
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|