ETJava Beta | Java    注册   登录
  • 搜索:
  • C++面向对象多级菜单向Arduino的移植

    发表于      阅读(1)     博客类别:Crawler     转自:https://www.cnblogs.com/hele-two/p/18263317
    如有侵权 请联系我们删除  (页面底部联系我们)  

    前段时间写了一篇文章《C++面向对象语言自制多级菜单》,文中指出了可以将HeleMenu库进行移植,现已完成技术思路,特此记录。

    一、特性

    基本与上一篇文章指出的一致,只是将菜单显示和响应函数合二为一

    二、代码实现

    基本与上一篇文章指出的一致,只是考虑到右值和左值的问题,将形参改为了const类型

    三、使用示例

    (一)手动生成

    void setup() {
        /*手动生成菜单,测试用例3*/
        HeleMenu *m1 = new HeleMenu("Root");
        m1->attachAction(display_root);
        HeleMenuViewer::init(m1); //初始化根菜单
    
        HeleMenu *m2 = new HeleMenu("Log",m1);
        m2->attachAction(display_log);
        m2->addToMenus();
    
        m2 = new HeleMenu("Opt",m1);
        m2->addValues({"save","unsave"});
        m2->attachAction(display_opt);
        m2->addToMenus();
    
        m2 = new HeleMenu("Menu",m1);
        m2->attachAction(display_menu);
        m2->addToMenus();
        m1 = m2; //构建下一层子菜单
    
        m1->addValues({"1.Adjust", "2.About"});
    
        HeleMenuViewer::gotoRoot();	 //到达根菜单
    }
    
    void loop() {
        //显示与响应 
        lcd.clear();
        HeleMenuViewer::action();
        _delay_ms(50);
    }
    

    (二)脚本生成

    void setup() {
        /*脚本生成菜单*/
        //测试用例1
        void (*p_display[])(const string&, const vector<string>&, uint8_t&) = {/*root*/display_root, /*log*/display_log, /*operate*/display_opt, /*menu*/display_menu};
        HeleMenu *m1 = HeleMenu::parseMenu("Root{Log{},Opt{save,unsave},Menu{0.Contrast,2.About}}",	p_display);
        HeleMenuViewer::init(m1);
        
        //测试用例2
        // void (*p_display[])(const string&, const vector<string>&, uint8_t&) = {/*root*/display_root, /*log*/display_log, /*operate*/display_opt, /*menu*/display_menu};
        // HeleMenu *m1 = HeleMenu::parseMenu("{Log{},Opt{save,unsave},Menu{0.Contrast,2.About}}",	p_display);
        // HeleMenuViewer::init(m1);
    
        HeleMenuViewer::gotoRoot();	 //到达根菜单
    }
    
    void loop() {
        //显示与响应 
        lcd.clear();
        HeleMenuViewer::action();
        _delay_ms(50);
    }
    

    (三)演示

    菜单结构如下:

     -Root
        -Log
          -XX
          -...
        -Opt
          -save
          -unsave
        -Menu
          -Contrast
          -About
    

    四、参考资料

    五、源码下载

    https://download.csdn.net/download/hele_two/89472615