در این مرحله، نحوه ذخیره داده ها هنگام تعویض بین صفحه نمایش و نحوه بازیابی داده های ذخیره شده را نشان خواهیم داد.

 

اضافه کردن ساعت و دقیقه مرحله قبل به مدل

مدل وظیفه نگهداری داده ها را در برنامه برعهده دارد.جهت باز کردن TouchGFX در محیط ویژوال استودیو روی Browse Code پایین سمت راست برنامه کلیک کنید. پوشه برنامه باز می شود فولدر simulator را پیدا کنید سپس فولدر msvs را باز کنید حالا Application را کلیک کنید تا برنامه در ویژوال استودیو باز شود.

برای ذخیره و بازیابی داده از طریق مدل، مقادیر protected را برای ساعت و دقیقه اضافه کنید، و همچنین توابع عمومی زیر را برای دسترسی به این مقادیر در Model.hpp اضافه کنید. آن را از مسیر زیر در پروژه پیدا کنید.

 

مسیر فایل مدل

 

Model.hpp
#ifndef MODEL_HPP
#define MODEL_HPP
    class ModelListener;

    class Model
    {
        public:Model();

        void bind(ModelListener* listener)
        {
            modelListener = listener;
        }

        void tick();

        void saveHour(int saveHour)
        {
            hour = saveHour;
        }

        void saveMinute(int saveMinute)
        {
            minute = saveMinute;
        }

        int getHour()
        {
            return hour;
        }

        int getMinute()
        {
            return minute;
        }

        protected:ModelListener* modelListener;
        int hour;
        int minute;
    };

#endif // MODEL_HPP

حتماً سازنده ساعت و دقیقه را نیز تنظیم کنید آن را در فایل Model.cpp اضافه کنید.

Model.cpp
#include <gui/model/Model.hpp>
#include <gui/model/ModelListener.hpp>

Model::Model():modelListener(0), hour(0), minute(0)
{

}

void Model::tick()
{

}

با این کد ساعت و دقیقه جایگاهی در مدل دارند. از آنجا که این مدل برای همه presenters در دسترس است، این روش پیشنهادی برای به اشتراک گذاری اطلاعات بین presenters ها (وview ها) است. این مدل همچنین در جایی است که UI قادر به اتصال به دیگر پریفرال ها و سایر ماژول های نرم افزاری است.

 

دسترسی به مدل از view

حال، برای دسترسی به داده های موجود در مدل ازview ،presenter باید توابع را فراهم کند تا ClockSettingScreenView بارگذاری و ذخیره داده ها از مدل را به صورت زیر انجام دهد. بنابراین در فایل ClockSettingScreenPresenter.hpp خواهیم داشت.

ClockSettingScreenPresenter.hpp
    void saveHour(int16_t hour)
    {
        model->saveHour(hour);
    }

    void saveMinute(int16_t minute)
    {
        model->saveMinute(minute);
    }

    int16_t getHour()
    {
        return model->getHour();
    }

    int16_t getMinute()
    {
        return model->getMinute();
    }

از آنجا که MainScreen همچنین می تواند به داده های موجود در مدل دسترسی داشته باشد، همان خطوط را به MainScreenPresenter.hpp اضافه کنید.

 

داده ها از مدل

اکنون کد دسترسی به ساعت و دقیقه در Model وجود دارد و برای دریافت این مقادیر از Model فقط به جای استفاده از متغیرهای محلی، باید ClockSettingScreen و MainScreen برای دریافت مقادیر آپدیت شوند.

 

آپدیت ClockSettingScreen

اکنون می توانیم بافر دو Text Area و ساعت و دقیقه را در ClockSettingScreenView.cpp با مدل مقدار دهی اولیه کنیم.

ClockSettingScreenView.cpp
    void ClockSettingScreenView::setupScreen()
    {
        ClockSettingScreenViewBase::setupScreen();
        hour = presenter->getHour();
        minute = presenter->getMinute();

        Unicode::snprintf(textAreaHourBuffer, TEXTAREAHOUR_SIZE, "%02d", hour);
        Unicode::snprintf(textAreaMinuteBuffer, TEXTAREAMINUTE_SIZE, "%02d", minute);

    }

برای ذخیره مقادیر ساعت و دقیقه، توابع مجازی، که با interaction ها ایجاد شده اند، برای دکمه Save، در ClockSettingScreenView.cpp پیاده سازی شده و مقادیر را در مدل (از طریق presenter) ذخیره می کند.

ClockSettingScreenView.cpp
    void ClockSettingScreenView:: buttonSaveClicked()
    {
        presenter->saveHour(hour);
        presenter->saveMinute(minute);
    }

یادتون باشه که تابع Virtual آن را در فایل ClockSettingScreenView.hpp ایجاد کنید یا خود تابع بالا را در همون فایل hpp پیاده سازی کنید.

اکنون ClockSettingScreen مقادیر اولیه را برای ساعت و دقیقه از مدل دریافت می کند.

 

آپدیت MainScreen

MainScreen هم باید مقادیر را با مدل هماهنگ کند.

مشابه ClockSettingScreen، مقدار اولیه نشان داده شده درtext clock باید با داده های مدل مطابقت داشته باشد.

MainScreenView.cpp
    void MainScreenView::setupScreen()
    {
        MainScreenViewBase::setupScreen();

        hour = presenter->getHour();
        minute = presenter->getMinute();

        Unicode::snprintf(textClockBuffer1, TEXTCLOCKBUFFER1_SIZE, "%02d", hour);
        Unicode::snprintf(textClockBuffer2, TEXTCLOCKBUFFER2_SIZE, "%02d", minute);

    }

ساعت و دقیقه از Model منتقل می شود. هنگام ترک صفحه، مقادیر آپدیت شده باید به مدل ارسال شوند (برای رفتن به صفحه تنظیمات در ClockSettingScreen)

MainScreenView.cpp
    void MainScreenView::tearDownScreen()
    {
        presenter->saveHour(hour);
        presenter->saveMinute(minute);

        MainScreenViewBase::tearDownScreen();
    }

این کد مقادیر آپدیت شده ساعت و دقیقه را قبل از رفتن به صفحه پیکربندی به مدل می فرستد.

حال برنامه را اجرا کنید و نتایج را ببینید فایل پروژه در لینک دانلود انتهای آموزش قرار داده شده است.

در آموزش بعدی به مباحث پیشرفته تر می پردازیم و ایده های خود را در آن پیاده سازی می کنیم.

موفق باشید.

  دانلود

فایل : آموزش TouchGFX - Model
حجم : 39,15MB
  نظرات

جهت ثبت نظر وارد سایت شوید

راهنمای استفاده از کد در کامنت
````
insert your code
``
علی زرین بخش
شنبه 30 بهمن 1400 ,07:46 ب.ظ

سلام.وقت بخیر شما با ویجت video کار کردید؟ امکانش هست که این آموزش رو بدید؟خیلی خیلی بهش نیاز دارم

جهت ثبت پاسخ وارد سایت شوید