home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 Mobile / Chip_Mobile_2001.iso / palm / business / printcar / printcar.exe / src / PrintCardModel.cc < prev    next >
C/C++ Source or Header  |  2000-06-10  |  4KB  |  150 lines

  1. //
  2. //  $Id: PrintCardModel.cc,v 1.6 2000/06/10 00:19:44 sergey Exp $
  3. //
  4.  
  5. #include <Pilot.h>
  6. #include "PrintCardModel.h"
  7. #include "ScriptTranslationTable.h"
  8. #include "UI/ListChoices.h"
  9. #include "IrDA/IrOutputStream.h"
  10. #include "Util/AppPreferencesInputStream.h"
  11. #include "Util/AppPreferencesOutputStream.h"
  12. #include "Util/Assert.h"
  13.  
  14.  
  15. // Constants
  16.  
  17. static const DWord  APP_CREATOR_ID              = 'PrCd';
  18. static const Word   APP_PREFERENCES_ID          = 0;
  19. static const Word   APP_PREFERENCES_VERSION     = 1;
  20.  
  21. // construction
  22.  
  23. PrintCardModel::PrintCardModel():
  24.     _namesIndex(0),
  25.     _cardsIndex(0)
  26. {
  27.     loadPreferences();
  28. }
  29.  
  30. PrintCardModel::~PrintCardModel()
  31. {
  32.     savePreferences();
  33. }
  34.  
  35. // operations
  36.  
  37. UI::ListChoices PrintCardModel::createNameChoices() const
  38. {
  39.     UI::ListChoices choices;
  40.  
  41.     for (int i = 0, count = _addressList.recordCount(); i < count; ++i)
  42.     {
  43.         // The list could contain deleted records. Lets ignore them
  44.         if (_addressList.isRecord(i))
  45.         {
  46.             char name[256];
  47.             choices.add(_addressList.getDisplayName(i, name, sizeof(name)));
  48.         }
  49.     }
  50.  
  51.     return choices;
  52. }
  53.  
  54. UI::ListChoices PrintCardModel::createCardChoices() const
  55. {
  56.     UI::ListChoices choices;
  57.  
  58.     for (int i = 0, count = _cardList.recordCount(); i < count; ++i)
  59.     {
  60.         const char* name = _cardList.record(i).name();
  61.  
  62.         if (name != 0)
  63.             choices.add(name);
  64.         else
  65.             choices.add("-Error-");
  66.     }
  67.  
  68.     return choices;
  69. }
  70.  
  71. bool PrintCardModel::findNameByFirstLetter(char letter)
  72. {
  73.     int index = _addressList.findByFirstLetter(_namesIndex, letter);
  74.  
  75.     if (index != -1)
  76.     {
  77.         _namesIndex = index;
  78.         return true;
  79.     }
  80.  
  81.     return false;
  82. }
  83.  
  84. BitmapPtr PrintCardModel::getPreviewImage() const
  85. {
  86.     if (_cardList.isRecord(_cardsIndex))
  87.         return _cardList.record(_cardsIndex).image();
  88.  
  89.     return 0;
  90. }
  91.  
  92. void PrintCardModel::print(IrDA::Callback& irCallback)
  93. {
  94.     if (_addressList.isRecord(_namesIndex) && _cardList.isRecord(_cardsIndex))
  95.         printScript(irCallback, _cardList.record(_cardsIndex));
  96. }
  97.  
  98. // serialization interface
  99.  
  100. void PrintCardModel::serialize(DataOutputStream& stream) const
  101. {
  102.     stream.write(_namesIndex);
  103.     stream.write(_cardsIndex);
  104.     _preferences.serialize(stream);
  105. }
  106.  
  107. void PrintCardModel::restore(const DataInputStream& stream)
  108. {
  109.     _namesIndex = stream.readAs<int>();
  110.     _cardsIndex = stream.readAs<int>();
  111.     _preferences.restore(stream);
  112. }
  113.  
  114. // implementation
  115.  
  116. void PrintCardModel::loadPreferences()
  117. {
  118.     AppPreferencesInputStream stream;
  119.  
  120.     if (stream.open(APP_CREATOR_ID, APP_PREFERENCES_ID))
  121.         restore(stream);
  122. }
  123.  
  124. void PrintCardModel::savePreferences()
  125. {
  126.     AppPreferencesOutputStream stream;
  127.  
  128.     stream.open(APP_CREATOR_ID, APP_PREFERENCES_ID, APP_PREFERENCES_VERSION);
  129.     serialize(stream);
  130. }
  131.  
  132. void PrintCardModel::printScript(IrDA::Callback& irCallback, const CardRecord& card)
  133. {
  134.     IrDA::IrOutputStream outStream;
  135.  
  136.     if (outStream.open(irCallback))
  137.     {
  138.         ScriptTranslationTable translationTable(_addressList.appInfo(), _addressList.record(_namesIndex), _preferences);
  139.         TemplateTranslator translator(translationTable);
  140.  
  141.         // upload library routines first
  142.         if (card.libScript() != 0)
  143.             translator.translate(card.libScript(), outStream);
  144.  
  145.         // upload main script
  146.         if (card.script() != 0)
  147.             translator.translate(card.script(), outStream);
  148.     }
  149. }
  150.