BREW POP / SMTP Mailer - 3 / 6 -
User Interface
MainWindow
![]() |
The MainWindow has four different buttons:
|
|---|
Constructor
MainWindow::MainWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(),
SFXGraphics::GetDeviceRectangle(), "Simple Mailer") static_throws
{
// register key handler
if (static_try()) {
static_throw(
RegisterHandler(SFEVT_KEY, HANDLER_AFTER,
HANDLER_FUNCTION(OnKey)));
}
// Get the height of font
SInt16 fontHeight = SFXGraphics::GetFontHeight(AEE_FONT_NORMAL);
// Calculation of button width
SInt16 width = SFXGraphics::MeasureText
(AEE_FONT_NORMAL, "Send Mail");
// Get the width and height of the screen
SFXDevice device;
UInt16 ScreenWidth = device.GetScreenWidth();
SInt16 ScreenHeight = device.GetScreenHeight();
// Calculate the position of buttons, in the center of the screen
SInt16 position_X = ( ScreenWidth- (width + 2 * MARGIN))/2;
SInt16 position_Y = ( ScreenHeight- ( 4 * fontHeight + 3 * MARGIN )- fontHeight )/2;
SFXRectangle rectangle(position_X, position_Y, width + 4 * MARGIN, fontHeight + 2);
// Make button
SFRButtonControlPtr button1 = ::new SFRButtonControl(this,
rectangle, "Send");
rectangle.AddY(fontHeight + MARGIN);
SFRButtonControlPtr button2 = ::new SFRButtonControl(this,
rectangle, "Receive");
rectangle.AddY(fontHeight + MARGIN);
SFRButtonControlPtr button3 = ::new SFRButtonControl(this,
rectangle, "Setup");
rectangle.AddY(fontHeight + MARGIN);
SFRButtonControlPtr button4 = ::new SFRButtonControl(this,
rectangle, "End");
// Registration of button handler
if (static_try() && button1 != null) {
static_throw(
button1->RegisterHandler(
SREVT_CONTROL, HANDLER_BEFORE,
HANDLER_FUNCTION(OnButtonControl1)));
if (static_try()) {
// set focus
button1->SetStatusFocus(true);
}
}
if (static_try() && button2 != null) {
static_throw(
button2->RegisterHandler(
SREVT_CONTROL, HANDLER_BEFORE,
HANDLER_FUNCTION(OnButtonControl2)));
}
if (static_try() && button3 != null) {
static_throw(
button3->RegisterHandler(
SREVT_CONTROL, HANDLER_BEFORE,
HANDLER_FUNCTION(OnButtonControl3)));
}
if (static_try() && button4 != null) {
static_throw(
button4->RegisterHandler(
SREVT_CONTROL, HANDLER_BEFORE,
HANDLER_FUNCTION(OnButtonControl4)));
}
return;
}
Button Handler
Define Button Handler
// when "Send Mail" button is pressed
HANDLER_IMPLEMENT_VOIDCONTROL(MainWindow, OnButtonControl1, result, control)
{
// make window for sending mail
::new SendingWindow();
}
// when "Receive Mail" button is pressed
HANDLER_IMPLEMENT_VOIDCONTROL(MainWindow, OnButtonControl2, result, control)
{
// prepare and start to receive mail
// as for detailed codes, see this
}
// when "Setup" button is pressed
HANDLER_IMPLEMENT_VOIDCONTROL(MainWindow, OnButtonControl3, result, control)
{
// make window for setup
::new OptionWindow();
}
// when "End" button is pressed
HANDLER_IMPLEMENT_VOIDCONTROL(MainWindow, OnButtonControl4, result, control)
{
// terminate application
SFRApplication::Terminate();
}
Declare Handler in defining MainWindow
SFMTYPEDEFCLASS(MainWindow)
class MainWindow : public SFRTitleWindow {
SFMSEALCOPY(MainWindow)
private:
SFXPOP3Receiver _receiver; // For POP3 reception
SFRMessageDialogPtr _dialog;
public:
MainWindow(Void) static_throws;
virtual ~MainWindow(Void);
private:
HANDLER_DECLARE_BOOLEVENT(OnKey) // Key handler
HANDLER_DECLARE_VOIDDIALOG(OnDialog) // Dialog handler
// Button handler
HANDLER_DECLARE_VOIDCONTROL(OnButtonControl1)
HANDLER_DECLARE_VOIDCONTROL(OnButtonControl2)
HANDLER_DECLARE_VOIDCONTROL(OnButtonControl3)
HANDLER_DECLARE_VOIDCONTROL(OnButtonControl4)
CALLBACK_DECLARE_SFXPOP3RECEIVER(POP3Callback)
// Callback that notifies mail reception completion
};
OptionWindow for Setup
Define OptionWindow for Setup
There are 6 kinds of text controls and a checkbox included in OptionWindow . All are declared as member variables.
SFMTYPEDEFCLASS(OptionWindow)
class OptionWindow : public SFRTitleWindow {
SFMSEALCOPY(OptionWindow)
private:
// Text control
SFRBrewTextControlPtr _textControlSMTPServer;
SFRBrewTextControlPtr _textControlSMTPPort;
SFRBrewTextControlPtr _textControlPOP3Server;
SFRBrewTextControlPtr _textControlPOP3Port;
SFRBrewTextControlPtr _textControlUser;
SFRBrewTextControlPtr _textControlPassword;
// Checkbox Control
SFRCheckboxControlPtr _checkboxEraseMail;
public:
OptionWindow(Void);
virtual ~OptionWindow(Void);
private:
HANDLER_DECLARE_BOOLEVENT(OnKey) // Key handler
HANDLER_DECLARE_VOIDCONTROL(OnButtonControlOk) // OK button handler
HANDLER_DECLARE_VOIDCONTROL(OnButtonControlCancel)
// Cancel button handler
};
Constructors : create control and register handlers
The first step here should be getting the data needed for setup such as the address of the SMTP server in SimpleMailer application class.
Executing the following statement will display the address of the SMTP server in its own text control.
option->ReadSFXAnsiString(OPTION_SMTPSERVER, "");
The SelectHandler, registered in the last part of the code, enables text control input
OptionWindow::OptionWindow(Void) : SFRTitleWindow(
SFRApplication::GetInstance(), SFXGraphics::GetDeviceRectangle(), "Setup")
{
// Set up data is obtained from the application class.
SFXConfigPtr option = SimpleMailer::GetOption();
...
// Make label
::new SFRLabelControl(this, rectLeft, "SMTP Server");
::new SFRLabelControl(this, rectRight, "Port");
...
// Make text control
_textControlSMTPServer = ::new SFREditboxControl(this,
rectLeft, option->ReadSFXAnsiString(OPTION_SMTPSERVER, ""));
...
// Make checkbox
_checkboxEraseMail = ::new SFRCheckboxControl(this, rectLeft,
"delete mail");
if (_checkboxEraseMail != null) {
// read data and set checkbox
_checkboxEraseMail->SetStatusCheck(
option->ReadBool(OPTION_ERASEMAIL, false));
}
...
// Make button
SFRButtonControlPtr buttonOk = ::new SFRButtonControl(this,
rectLeft, BUTTON_LABEL_OK);
...
if (_textControlSMTPServer != null) {
// set the maximum size of text control
_textControlSMTPServer->SetMaxSize(64);
// set forcus
_textControlSMTPServer->SetStatusFocus(true);
}
...
// Register handler for when "SELECT" key is pressed
// ( For text control )
if (static_try()) {
static_throw(
RegisterHandler(
SFEVT_KEY, AVK_SELECT, HANDLER_AFTER,
HANDLER_FUNCTION(SelectHandler)));
}
return;
}
Button Handler
You should save the data inputted in the text contols of OptionWindow for setup.
You get texts through the GetText() function of Text Control and write data through the WriteSFXAnsiString() function of SFXConfig.
The first argument of WriteSFXAnsiString() should be one of the following values.
// tag for data saved in SFXConfig // address of SMTP server, SFXAnsiString #define OPTION_SMTPSERVER 1 // port number of SMTP server, UInt16 #define OPTION_SMTPPOPT 2 // address of POP3 server, SFXAnsiString #define OPTION_POP3SERVER 3 // port number of POP3 server, UInt16 #define OPTION_POP3PORT 4 // user, SFXAnsiString #define OPTION_USER 5 // password, SFXAnsiString #define OPTION_PASSWORD 6 // option for deleting mail, Bool #define OPTION_ERASEMAIL 7
HANDLER_IMPLEMENT_VOIDCONTROL(OptionWindow, OnButtonControlOk, result, control)
{
// Save data inputted in text controls of OptionWindow
SFXConfigPtr option = SimpleMailer::GetOption();
option->WriteSFXAnsiString(OPTION_SMTPSERVER,
_textControlSMTPServer->GetText());
option->WriteUInt16(OPTION_SMTPPOPT,
static_cast<UInt16>
(_textControlSMTPPort->GetText().AsUInt32()));
option->WriteSFXAnsiString(OPTION_POP3SERVER,
_textControlPOP3Server->GetText());
option->WriteUInt16(OPTION_POP3PORT,
static_cast<UInt16>
(_textControlPOP3Port->GetText().AsUInt32()));
option->WriteSFXAnsiString(OPTION_USER,
_textControlUser->GetText());
option->WriteSFXAnsiString(OPTION_PASSWORD,
_textControlPassword->GetText());
option->WriteBool(OPTION_ERASEMAIL,
_checkboxEraseMail->GetStatusCheck());
option->Save();
// Close window
Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE, SRP16_TERMINATE_INVOKE, true));
}
SendingWindow for sending mail
![]() |
The SendingWindow has 4 kinds of text boxes.
It also has Send and Cancel buttons. Programming here is the same as with the OptionWindow. |
|---|










