BREW Scheduler Supporting vCalendar - 4 / 7 -
How to Use TemplateApp
TemplateApp included in the Example folder of SophiaFramework is a template application with menu, dialog, and softkey windows which are common to many applications.
Steps to Make an Application by Using TemplateApp
Step 1. Copy the following files included in theTemplate folder to one of the Example folders into your project.
MainWindow.hpp MainWindow.cpp PreferenceDialog.hpp PreferenceDialog.cpp SoftkeyWindow.hpp SoftkeyWindow.cpp TemplateApp.hpp TemplateApp.cpp VersionDialog.hpp VersionDialog.cpp templateapp_res.h templateapp.bri templateapp.bar All included in the Resource folder
Step 2. Change the application name in the files of TemplateApp, templateapp and TEMPLATEAPP to that of your application's name.
Step 3. Generate a bid file and a mif file.
Step 4. Compile and check whether it will work on emulator.
Result | Display Menu with Softkey(Right) | Display Dialog with Softkey(Left) |
Step 5. Delete the code for the enclosed demo with the following macro.
#if defined USE_EXAMPLE_UI #endif
Display Calendar
Define MainWindow
SFMRESPONDERATTRIBUTE(MAINWINDOW, four_char_code('M', 'a', 'i', 'n')) SFMTYPEDEFCLASS(MainWindow) class MainWindow : public SFRPlainWindow { SFMSEALCOPY(MainWindow) // for drawing variables private: SFXDate _cursor; // Position of cursor SInt16 _boxSize; // length of a square unit of calendar SInt16 _calLeft; // left end of the calendar public: explicit MainWindow(SFRApplicationPtr director) static_throws; virtual ~MainWindow(Void); // for drawing handler and key handler HANDLER_DECLARE_VOIDRENDER(OnRenderContent) // drawing handler HANDLER_DECLARE_BOOLEVENT(OnKey) // key handler ... }
Modyfy Constructor
#define CAL_TOP_MARGIN (20) #define CAL_SIDE_MARGIN (20) MainWindow::MainWindow(SFRApplicationPtr director) static_throws : SFRPlainWindow(director, SFXRectangle(0, 0, 0, 0), BEHAVIOR_PLAINWINDOW, ATTRIBUTE_MAINWINDOW) { SoftkeyWindowPtr softkey; SoftkeyWindow::Initialize(this); // The following code is added ------------------------- if (static_try()) { // Register drawing handler static_throw(RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent))); if (static_try()) { // Register key handler static_throw(RegisterHandler(SFEVT_KEY, HANDLER_AFTER, HANDLER_FUNCTION(OnKey))); } } // ------------------------------------------------------- if (static_try()) { static_throw(RegisterHandler(static_cast<SFCEventEnum>( SoftkeyWindow::USEREVT_SOFTKEY), HANDLER_AFTER, HANDLER_FUNCTION(OnSoftkey))); if (static_try()) { // ... } } // The following codes are added ------------------------- // Calendar square unit length _boxSize =(GetContentWorld().GetRight() - 2* CAL_SIDE_MARGIN) / 7; // Left end of calendar _calLeft = (GetContentWorld().GetRight() - 7 * _boxSize) / 2; // Get current date _currentDay = SFXDate::CurrentDate(); // ------------------------------------------------------- }
Add Drawing Handler and Key Handler
// The following code is added ------------------------- // Drawing Handler ( Draw within Window ) HANDLER_IMPLEMENT_VOIDRENDER(MainWindow, OnRenderContent, graphics) { // Get the screen size SFXRectangle screenRect(GetContentWorld()); // Get cursor position SInt16 year = _cursor.GetYear(); SInt16 month = _cursor.GetMonth(); SInt16 day = _cursor.GetDay(); // Get current date SFXDate current = SFXDate::CurrentDate(); // ScreenRect is painted out with white graphics->FillRectangle(screenRect, SFXRGBColor(0xff, 0xff, 0xff, 0x00)); // Drawing the frame of the calendar DrawCalendarLine(screenRect, graphics); // Drawing the date at the top graphics->DrawText( SFXAnsiString::Format("%2d-%2d", year, month), SFXGrid(CAL_SIDE_MARGIN, 0)); // Drawing the days of the week part of calendar. DrawDayOfWeek(screenRect, graphics); // Drawing the date part of the calendar. DrawDate(current, screenRect, graphics); // If a schedule exists, it is drawn on the bottom. if (SyncScheduler::GetVCalCollection()-> IsDataExist(year, month, day)) { DrawContent(screenRect, graphics); } return; } /* ** The implementations of the DrawCalendarLine(), ** DrawDayOfWeek(), DrawDate() and DrawContent() ** are not included here. See source code for details. */ // Key Handler HANDLER_IMPLEMENT_BOOLEVENT(MainWindow, OnKey, event) { Bool result(false); switch (event.GetP16()) { case AVK_SELECT: // If select key is pressed ::new OneDayWindow(_cursor); result = true; break; case AVK_LEFT: _currentDay.SubDay(1); // Move day left InvalidateContent(); // A new area is registered result = true; break; case AVK_RIGHT: _currentDay.AddDay(1); // Move day right InvalidateContent(); // A new area is registered result = true; break; case AVK_UP: _currentDay.SubDay(7); // Move day up InvalidateContent(); // A new area is registered result = true; break; case AVK_DOWN: _currentDay.AddDay(7); // Move day down InvalidateContent(); // A new area is registered result = true; break; } return result; }
Result with the above code:
The cursor can be moved by pushing the Up, Down, Left or Right keys.
If the select key is pressed, a new OneDayWindow is generated.
Every time the cursor moves to a new area, it is registered, and its contents are then acted upon.