home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 Mobile
/
Chip_Mobile_2001.iso
/
palm
/
business
/
printcar
/
printcar.exe
/
src
/
PrintCardForm.cc
< prev
next >
Wrap
C/C++ Source or Header
|
2000-06-10
|
5KB
|
211 lines
//
// $Id: PrintCardForm.cc,v 1.5 2000/06/10 00:19:43 sergey Exp $
//
#include <Pilot.h>
#include "PrintCardForm.h"
#include "PrintCardPreferencesForm.h"
#include "UI/ListChoices.h"
#include "Util/System.h"
#include "Util/Error.h"
#include "Util/Assert.h"
#include "PrintCardRes.h"
PrintCardForm::PrintCardForm():
UI::Form(ID_MAIN_FORM),
_names(*this, ID_NAME_TRIGGER, ID_NAME_LIST),
_cards(*this, ID_CARD_LIST)
{}
// operations
void PrintCardForm::create()
{
UI::Form::create();
// static "thunk" for the form' event handler
static UI::FormEventHandler<PrintCardForm> eventHandler;
eventHandler.init(this);
initNamesList();
initCardsList();
}
// event handlers
bool PrintCardForm::eventHandler(EventType* event)
{
switch(event->eType)
{
case popSelectEvent:
if (event->data.popSelect.listID == ID_NAME_LIST)
{
// Names list event handler.
namesListSelected(event->data.popSelect.selection);
return Form::eventHandler(event); // firther pop-processing must be done by default handler
}
break;
case lstSelectEvent:
if (event->data.lstSelect.listID == ID_CARD_LIST)
{
// Cards list event handler
cardsListSelected(event->data.lstSelect.selection);
return true;
}
break;
}
// gives the cards list a chance to handle page up/down events
if (_cards.handleKeyDownEvent(event))
return true;
return Form::eventHandler(event);
}
bool PrintCardForm::handleOpenFormEvent(Word formID)
{
if (Form::handleOpenFormEvent(formID))
{
drawPreviewImage();
return true;
}
return false;
}
bool PrintCardForm::handleUpdateFormEvent(Word formID)
{
// Sometimes this event could be generated then chield screen didn't save
// the parent' screen, so parent is responsible to do it himself.
if (Form::handleUpdateFormEvent(formID))
{
drawPreviewImage();
return true;
}
return false;
}
bool PrintCardForm::handleCtlSelectEvent(Word controlID, bool on)
{
if (controlID == ID_PRINT_BUTTON)
{
if (_names.numberOfItems() != 0 && _cards.numberOfItems() != 0)
{
PrintStatusForm statusForm(ID_PRINT_STATUS_FORM);
statusForm.create();
_model.print(statusForm.irCallback());
activate(); // activate parent
}
else
Util::Error::errorMessage0(false, "Nothing to print");
return true;
}
return false;
}
bool PrintCardForm::handleMenuEvent(Word itemID)
{
switch(itemID)
{
case ID_MENU_PREFERENCES:
{
PrintCardPreferencesForm preferencesForm(ID_PREFERENCES_FORM, _model.preferences());
preferencesForm.create();
FrmDoDialog(preferencesForm.formPtr());
break;
}
case ID_MENU_HELP:
FrmHelp(ID_MAIN_HELP_STRING);
break;
case ID_MENU_ABOUT:
FrmAlert(ID_ABOUT_ALERT);
break;
default:
return false;
}
return true;
}
bool PrintCardForm::handleKeyDownEvent(char asciiChar, Word keyCode, Word modifiers)
{
if (_model.findNameByFirstLetter(asciiChar))
_names.setSelection(_model.namesIndex());
}
// implementation
void PrintCardForm::initNamesList()
{
_names.setChoices(_model.createNameChoices());
if (_model.namesIndex() < _names.numberOfItems())
_names.setSelection(_model.namesIndex());
else if (_names.numberOfItems() > 0)
_names.setSelection(0);
}
void PrintCardForm::initCardsList()
{
_cards.setChoices(_model.createCardChoices());
if (_model.cardsIndex() < _cards.numberOfItems())
_cards.setSelection(_model.cardsIndex());
else if (_cards.numberOfItems() > 0)
_cards.setSelection(0);
}
void PrintCardForm::namesListSelected(int index)
{
_model.setNamesIndex(index);
}
void PrintCardForm::cardsListSelected(int index)
{
_model.setCardsIndex(index);
drawPreviewImage();
}
void PrintCardForm::drawPreviewImage()
{
BitmapPtr image = _model.getPreviewImage();
if (image != 0)
drawPreviewImage(image);
else
showDefaultPreviewImage();
}
void PrintCardForm::drawPreviewImage(BitmapPtr image)
{
assert(image != 0);
hideDefaultPreviewImage();
short x,y;
getPreviewImagePosition(x, y);
WinDrawBitmap(image, x, y);
}
void PrintCardForm::showDefaultPreviewImage()
{
showObject(ID_NOIMAGE_BITMAP);
}
void PrintCardForm::hideDefaultPreviewImage()
{
hideObject(ID_NOIMAGE_BITMAP);
}
void PrintCardForm::getPreviewImagePosition(short& x, short& y) const
{
FrmGetObjectPosition(formPtr(), FrmGetObjectIndex(formPtr(), ID_NOIMAGE_BITMAP), &x, &y);
}