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

  1. //
  2. //  $Id: PrintCardForm.cc,v 1.5 2000/06/10 00:19:43 sergey Exp $
  3. //
  4.  
  5. #include <Pilot.h>
  6. #include "PrintCardForm.h"
  7. #include "PrintCardPreferencesForm.h"
  8. #include "UI/ListChoices.h"
  9. #include "Util/System.h"
  10. #include "Util/Error.h"
  11. #include "Util/Assert.h"
  12.  
  13. #include "PrintCardRes.h"
  14.  
  15.  
  16. PrintCardForm::PrintCardForm():
  17.     UI::Form(ID_MAIN_FORM),
  18.     _names(*this, ID_NAME_TRIGGER, ID_NAME_LIST),
  19.     _cards(*this, ID_CARD_LIST)
  20. {}
  21.  
  22. // operations
  23.  
  24. void PrintCardForm::create()
  25. {
  26.     UI::Form::create();
  27.  
  28.     // static "thunk" for the form' event handler
  29.     static UI::FormEventHandler<PrintCardForm> eventHandler;
  30.     eventHandler.init(this);
  31.  
  32.     initNamesList();
  33.     initCardsList();
  34. }
  35.  
  36. // event handlers
  37.  
  38. bool PrintCardForm::eventHandler(EventType* event)
  39. {
  40.     switch(event->eType)
  41.     {
  42.     case popSelectEvent:
  43.         if (event->data.popSelect.listID == ID_NAME_LIST)
  44.         {
  45.             // Names list event handler.
  46.             namesListSelected(event->data.popSelect.selection);
  47.             return Form::eventHandler(event);       // firther pop-processing must be done by default handler
  48.         }
  49.         break;
  50.  
  51.     case lstSelectEvent:
  52.         if (event->data.lstSelect.listID == ID_CARD_LIST)
  53.         {
  54.             // Cards list event handler
  55.             cardsListSelected(event->data.lstSelect.selection);
  56.             return true;
  57.         }
  58.         break;
  59.     }
  60.  
  61.     // gives the cards list a chance to handle page up/down events
  62.     if (_cards.handleKeyDownEvent(event))
  63.         return true;
  64.  
  65.     return Form::eventHandler(event);
  66. }
  67.  
  68. bool PrintCardForm::handleOpenFormEvent(Word formID)
  69. {
  70.     if (Form::handleOpenFormEvent(formID))
  71.     {
  72.         drawPreviewImage();
  73.         return true;
  74.     }
  75.     return false;
  76. }
  77.  
  78. bool PrintCardForm::handleUpdateFormEvent(Word formID)
  79. {
  80.     // Sometimes this event could be generated then chield screen didn't save
  81.     // the parent' screen, so parent is responsible to do it himself.
  82.  
  83.     if (Form::handleUpdateFormEvent(formID))
  84.     {
  85.         drawPreviewImage();
  86.         return true;
  87.     }
  88.     return false;
  89. }
  90.  
  91.  
  92. bool PrintCardForm::handleCtlSelectEvent(Word controlID, bool on)
  93. {
  94.     if (controlID == ID_PRINT_BUTTON)
  95.     {
  96.         if (_names.numberOfItems() != 0 && _cards.numberOfItems() != 0)
  97.         {
  98.             PrintStatusForm statusForm(ID_PRINT_STATUS_FORM);
  99.             statusForm.create();
  100.             _model.print(statusForm.irCallback());
  101.             activate();     // activate parent
  102.         }
  103.         else
  104.             Util::Error::errorMessage0(false, "Nothing to print");
  105.  
  106.         return true;
  107.     }
  108.  
  109.     return false;
  110. }
  111.  
  112. bool PrintCardForm::handleMenuEvent(Word itemID)
  113. {
  114.     switch(itemID)
  115.     {
  116.         case ID_MENU_PREFERENCES:
  117.         {
  118.             PrintCardPreferencesForm preferencesForm(ID_PREFERENCES_FORM, _model.preferences());
  119.             preferencesForm.create();
  120.             FrmDoDialog(preferencesForm.formPtr());
  121.             break;
  122.         }
  123.  
  124.         case ID_MENU_HELP:
  125.             FrmHelp(ID_MAIN_HELP_STRING);
  126.             break;
  127.  
  128.         case ID_MENU_ABOUT:
  129.             FrmAlert(ID_ABOUT_ALERT);
  130.             break;
  131.  
  132.         default:
  133.             return false;
  134.     }
  135.     return true;
  136. }
  137.  
  138. bool PrintCardForm::handleKeyDownEvent(char asciiChar, Word keyCode, Word modifiers)
  139. {
  140.     if (_model.findNameByFirstLetter(asciiChar))
  141.         _names.setSelection(_model.namesIndex());
  142. }
  143.  
  144. // implementation
  145.  
  146. void PrintCardForm::initNamesList()
  147. {
  148.     _names.setChoices(_model.createNameChoices());
  149.  
  150.     if (_model.namesIndex() < _names.numberOfItems())
  151.         _names.setSelection(_model.namesIndex());
  152.     else if (_names.numberOfItems() > 0)
  153.         _names.setSelection(0);
  154. }
  155.  
  156. void PrintCardForm::initCardsList()
  157. {
  158.     _cards.setChoices(_model.createCardChoices());
  159.  
  160.     if (_model.cardsIndex() < _cards.numberOfItems())
  161.         _cards.setSelection(_model.cardsIndex());
  162.     else if (_cards.numberOfItems() > 0)
  163.         _cards.setSelection(0);
  164. }
  165.  
  166. void PrintCardForm::namesListSelected(int index)
  167. {
  168.     _model.setNamesIndex(index);
  169. }
  170.  
  171. void PrintCardForm::cardsListSelected(int index)
  172. {
  173.     _model.setCardsIndex(index);
  174.     drawPreviewImage();
  175. }
  176.  
  177. void PrintCardForm::drawPreviewImage()
  178. {
  179.     BitmapPtr image = _model.getPreviewImage();
  180.     if (image != 0)
  181.         drawPreviewImage(image);
  182.     else
  183.         showDefaultPreviewImage();
  184. }
  185.  
  186. void PrintCardForm::drawPreviewImage(BitmapPtr image)
  187. {
  188.     assert(image != 0);
  189.  
  190.     hideDefaultPreviewImage();
  191.  
  192.     short x,y;
  193.     getPreviewImagePosition(x, y);
  194.     WinDrawBitmap(image, x, y);
  195. }
  196.  
  197. void PrintCardForm::showDefaultPreviewImage()
  198. {
  199.     showObject(ID_NOIMAGE_BITMAP);
  200. }
  201.  
  202. void PrintCardForm::hideDefaultPreviewImage()
  203. {
  204.     hideObject(ID_NOIMAGE_BITMAP);
  205. }
  206.  
  207. void PrintCardForm::getPreviewImagePosition(short& x, short& y) const
  208. {
  209.     FrmGetObjectPosition(formPtr(), FrmGetObjectIndex(formPtr(), ID_NOIMAGE_BITMAP), &x, &y);
  210. }
  211.