Texas Instruments matrix-gui-2.0 hacking -- submenu.php

<?php
/*
 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
 *
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *
 *    Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 *    Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the
 *    distribution.
 *
 *    Neither the name of Texas Instruments Incorporated nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
*/

# require() 语句包含并运行指定文件,和include()几乎完全一样,
# 除了处理失败的方式不同之外
require("helper_functions.php");

# 获取桌面json对象
$var = read_desktop_file();

if($var==null)
{
    echo "Json.txt file is empty or doesn‘t exist.";
    return;
}

# 获取图标格点列数,行数
$icon_per_col = $_COOKIE["iconGridCol"];
$icon_per_row = $_COOKIE["iconGridRow"];

# 每一页一共有多少个图标
$icons_per_page = $icon_per_col * $icon_per_row;
# isset(): 检测变量是否设置
# 如果page被作为请求参数设置了,那么取出页号,否则为0
$current_page = isset($_GET["page"]) == true ? $_GET["page"] : 0;

# 每一个单元格宽,高的所占对应的百分比
$cell_height=100/$icon_per_row;
$cell_width=100/$icon_per_col;

//Some parts of the code doesn‘t set the submenu variable when the user is at the Main Menu which is relected in the "top" variable
# 如果请求参数里没有设置子菜单,那么就是主菜单
# 查看了当前版本的json.txt文件,其中仅仅有main_menu内容,所以,在分析的时候
# 可以不考虑submenu这个选项,想象力足够的话,也可以考虑在内
$submenu = isset($_GET["submenu"]) == true ? $_GET["submenu"] : "main_menu" ;

//A value of -1 disables the next/previous page arrow
# 本来就是第一月,到了最前面那一页,不能在往前了
$previous_page = ($current_page != 0) ? $current_page - 1 : -1;
# 这里有待进一步的解析,因为var看上去像2维数组,这个要去解析前面的json对象
# 这里count($var[$submenu]["apps"]))是统计json对象在"apps"这个阶层对象的个数
$next_page = (($current_page+1)*$icons_per_page <  count($var[$submenu]["apps"])) ? $current_page + 1 : -1;

//Only enable exit link if your currently not in the main menu
# 仅仅当你不在主页的时候才需要链接到主页
$enable_main_menu_link = $submenu != "main_menu";

# 获取指定的子目录,主要是因为主界面下可能有很多子目录,可以通过这种方式进入子目录
# 而且这种进入子目录的方式是采用在请求参数中指定
$submenu_entry = get_submenu($var,$submenu);    

# 设置菜单的标题
# 由于解析的json.txt文件里面只有main_menu,没有其他的内容,
# 所以我们只能看到:Aplex App Launcher v2 p+页码
# 同时由于app很少,所以页码只能是1,因为current_page总是0
$menu_title = ($submenu == "main_menu") ? "Aplex App Launcher v2 p".($current_page+1) : $submenu_entry["Name"]." Submenu p".($current_page+1);

# 起始索引,从当前页开始
$start_index = $current_page * $icons_per_page;
# 当前页最后的索引
$end_index = $start_index + $icons_per_page - 1;

# 有可能当前页是最后一页,并且最后一页没有占满,所以要修改正最后索引的下标
if(count($var[$submenu]["apps"]) - 1 < $end_index)
    $end_index = count($var[$submenu]["apps"]) - 1;
?>

<!-- 动态设置css样式 -->
<!-- 设置图标单元格的样式 -->
<style type="text/css">
.icons_cell
{
    height:<?php echo $cell_height; ?>%;    /* 设置图标单元格的高比例 */
    width:<?php echo $cell_width; ?>%;      /* 设置图标单元格的宽比例 */
}
</style>

<!-- 自动生成菜单栏 -->
<?php include "menubar.php"; ?>

<!-- 是用table生成Icon List(图标矩阵) -->
<table id = "iconlist" > 

<?php
    # x: 在这里代表的是行数
    # i: 在这里代表的是图标数组的起始索引的下标
    for($x = 0,$i = $start_index;$x<$icon_per_row;$x++)
    {
        echo "<tr>";
        # y: 在这里代表的是列数
        for($y = 0;$y<$icon_per_col;$y++,$i++)
        {
            # 单元格的相关设置
            echo "<td class = ‘icons_cell‘ align = ‘center‘ >";

            if($i<=$end_index)
            {
                $current_app = $var[$submenu]["apps"][$i];  # 但前要显示的app
                $img_src = $current_app["Icon"];            # 获取当前app的图标
                $app_title = $current_app["Name"];          # 获取当前app的名字
                $type = strtolower($current_app["Type"]);   # 获取当前app的类型
                $class = "";                                # 当前app的css修饰
                $disable_link = false;                      # 超级链接
                # 如果当前的类型是目录
                if($type=="directory")
                {
                    # 获取分类名字
                    $category = $current_app["Category"];
                    # 合成超级链接
                    $link = "submenu.php?submenu=$category";

                    # 如果这个分类不存在
                    if(isset($var[$category]["apps"]) == false)
                    {
                        # 采用这种超级链接,起内容主要是说,这个功能将来会被支持
                        # 但目前还没有被支持
                        $link = "coming_soon.php?submenu=$category";
                    }
                }
                elseif($type=="application")                # 应用程序
                {
                    # 判断是否有超级链接描述
                    # 就目前的json.txt中的Description_link值而言,都是-1
                    # 也就是说没有Description_link
                    $has_description_page = $current_app["Description_Link"] != -1;

                    //This check to see if the application doesn‘t have a description page. If it doesn‘t then directly launch the application"
                    // 如果没有应用程序描述,那么直接运行程序,如果有程序描述,那么先运行描述文件,
                    // 再通过描述文件来运行app程序
                    if($has_description_page == false)
                    {
                        # urlencode(): 是指针对网页url中的中文字符的一种编码转换方式
                        # 没有url描述,那就相当于直接运行程序
                        $link =  "run_script.php?&submenu=".urlencode($submenu)."&app=".urlencode($app_title);

                        //Determine if the application is GUI based. If it is then add a class to the link so the javascript code can
                        //manipulate the link if it needs to
                        if($var[$submenu]["apps"][$i]["ProgramType"]=="gui")
                            $class = "class = ‘is_gui_app‘";
                    }
                    else
                        $link =  "app_description.php?submenu=".urlencode($submenu)."&app=".urlencode($app_title);
                }

                # 合成超级连接
                echo "<a href = ‘$link‘ $class><img src= ‘$img_src‘ ></a>";
                # 合成对应的应用标题
                echo "<p>$app_title</p>";
            }
            echo "</td>";
        }
        echo "</tr>";
    }

echo "</table>";
?>

<!-- 总感觉这部分脚本跑完,前面没有描述内容的app都必须跑描述文件了 -->
<!-- 从app_description文件内容可知,其实也没事,会提示没有描述内容而已 -->
<script>
//Don‘t launch GUI based application directly if the application is being launched remotely
//or if the target doesn‘t have an attached graphic device
if(client_is_host == false || has_graphics == false)
{
    // 遍历所有的带有".is_gui_app"class
    $(‘.is_gui_app‘).each(function(index) {
        var link = $(this).attr("href");                        // 获取超级链接
        var new_link = link.substr(link.indexOf("&submenu="));  // 获取参数
        new_link = "app_description.php?" + new_link;           // 合成新的超级链接
        $(this).attr("href",new_link);                          // 重新设置超级链接
    });
}
</script>
时间: 2024-10-06 23:36:09

Texas Instruments matrix-gui-2.0 hacking -- submenu.php的相关文章

Texas Instruments matrix-gui-2.0 hacking -- app_description.php

<?php /* * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistribut

Texas Instruments matrix-gui-2.0 hacking -- index.php

<?php /* * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistribut

Texas Instruments matrix-gui-2.0 hacking -- run_script.php

<?php /* * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistribut

Texas Instruments matrix-gui-2.0 hacking -- menubar.php

<?php /* * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistribut

Texas Instruments matrix-gui-2.0 hacking -- execute_command.sh

#!/bin/sh #Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ # # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # Redistribut

Texas Instruments matrix-gui-2.0 hacking -- json.txt

{ "main_menu": { "apps": [ { "Name":"Profiling", "Order":"1", "Icon":"apps\/images\/oprofile-icon.png", "Type":"directory", "Category":"prof

ZHA profile与ZLL profile的一个例子

ZHA Coordinator 如何控制ZLL Light/Philips Hue Light 缩写: ZHA: ZigBee Home Automation profile ZLL:  ZigBee Light Link profile TCLK: Trust Center Link Key 为什么ZLL 灯加入ZHA网络 在ZLL网络中,设备支持两种方式Join ZigBee网络,一种是通过Touch Link[1]方式入网,遥控器和灯靠近配对的方式把灯拉入到ZLL网络中.另外一种是传统入网

TIMAC 学习笔记1

TIMAC是TI公司推出的基于IEEE 802.15.4的通讯协议栈,编译环境为IAR,使用IAR自带的CLIB库,CLIB库提供了轻量级的C库,它不支持嵌入式C++.适用于RF4CE协议和ZigBee-Pro产品. 目前学习的MAC层协议版本为1.5.0. 为什么要学习TIMAC呢?在开发基于ZigBee的项目中,遇到了一些底层上的问题,再深入时,发现卡在底层封装的库中去,TIMAC比ZStack的底层开放程度更高,为了更好的理解无线传输的一些细节问题,才会去看TIMAC协议. 特点 1. 多

IAR8.30.3安装破解方法及ZStack-MESH安装方法

安装前的准备 安装破解前请先关闭所有安全软件,比如360安全卫士.电脑管家.金山毒霸. 安装包地址:[http://pan.baidu.com/s/1miDBFTI] 1.     安装IAR 将压缩文件解压,打开IAR8.30.3文件夹,找到EW8051-8303-Autorun.exe双击运行,接着在弹出的安装向导窗口里选择Install IAR Embedded Workbench,按照默认的选项完成安装就行了.安装完成后退出软件,并点击Exit退出安装向导窗口. 2.     破解IAR