home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 Mobile
/
Chip_Mobile_2001.iso
/
palm
/
business
/
printcar
/
printcar.exe
/
src
/
PrintCardModel.cc
< prev
next >
Wrap
C/C++ Source or Header
|
2000-06-10
|
4KB
|
150 lines
//
// $Id: PrintCardModel.cc,v 1.6 2000/06/10 00:19:44 sergey Exp $
//
#include <Pilot.h>
#include "PrintCardModel.h"
#include "ScriptTranslationTable.h"
#include "UI/ListChoices.h"
#include "IrDA/IrOutputStream.h"
#include "Util/AppPreferencesInputStream.h"
#include "Util/AppPreferencesOutputStream.h"
#include "Util/Assert.h"
// Constants
static const DWord APP_CREATOR_ID = 'PrCd';
static const Word APP_PREFERENCES_ID = 0;
static const Word APP_PREFERENCES_VERSION = 1;
// construction
PrintCardModel::PrintCardModel():
_namesIndex(0),
_cardsIndex(0)
{
loadPreferences();
}
PrintCardModel::~PrintCardModel()
{
savePreferences();
}
// operations
UI::ListChoices PrintCardModel::createNameChoices() const
{
UI::ListChoices choices;
for (int i = 0, count = _addressList.recordCount(); i < count; ++i)
{
// The list could contain deleted records. Lets ignore them
if (_addressList.isRecord(i))
{
char name[256];
choices.add(_addressList.getDisplayName(i, name, sizeof(name)));
}
}
return choices;
}
UI::ListChoices PrintCardModel::createCardChoices() const
{
UI::ListChoices choices;
for (int i = 0, count = _cardList.recordCount(); i < count; ++i)
{
const char* name = _cardList.record(i).name();
if (name != 0)
choices.add(name);
else
choices.add("-Error-");
}
return choices;
}
bool PrintCardModel::findNameByFirstLetter(char letter)
{
int index = _addressList.findByFirstLetter(_namesIndex, letter);
if (index != -1)
{
_namesIndex = index;
return true;
}
return false;
}
BitmapPtr PrintCardModel::getPreviewImage() const
{
if (_cardList.isRecord(_cardsIndex))
return _cardList.record(_cardsIndex).image();
return 0;
}
void PrintCardModel::print(IrDA::Callback& irCallback)
{
if (_addressList.isRecord(_namesIndex) && _cardList.isRecord(_cardsIndex))
printScript(irCallback, _cardList.record(_cardsIndex));
}
// serialization interface
void PrintCardModel::serialize(DataOutputStream& stream) const
{
stream.write(_namesIndex);
stream.write(_cardsIndex);
_preferences.serialize(stream);
}
void PrintCardModel::restore(const DataInputStream& stream)
{
_namesIndex = stream.readAs<int>();
_cardsIndex = stream.readAs<int>();
_preferences.restore(stream);
}
// implementation
void PrintCardModel::loadPreferences()
{
AppPreferencesInputStream stream;
if (stream.open(APP_CREATOR_ID, APP_PREFERENCES_ID))
restore(stream);
}
void PrintCardModel::savePreferences()
{
AppPreferencesOutputStream stream;
stream.open(APP_CREATOR_ID, APP_PREFERENCES_ID, APP_PREFERENCES_VERSION);
serialize(stream);
}
void PrintCardModel::printScript(IrDA::Callback& irCallback, const CardRecord& card)
{
IrDA::IrOutputStream outStream;
if (outStream.open(irCallback))
{
ScriptTranslationTable translationTable(_addressList.appInfo(), _addressList.record(_namesIndex), _preferences);
TemplateTranslator translator(translationTable);
// upload library routines first
if (card.libScript() != 0)
translator.translate(card.libScript(), outStream);
// upload main script
if (card.script() != 0)
translator.translate(card.script(), outStream);
}
}