《linux 内核完全剖析》 vsprintf.c 代码笔记

Flex1 到 Flex3 使用的都是 Halo组件,这里将介绍Halo 组件中的List 和 DataGrid 。其中 DataGrid 是显示多列数据中最常用的方式。但是在Spark中还有没对应DataGrid的组件。

先写个“食物”的模型 Dinner.as 。

package model {
  [Bindable]
  public class Dinner {
    public var name:String;
    public var food:String;
    public var due:Date;

    public function Dinner(
      name:String = "", food:String = "", due:Date = null) {
      this.name = name;
      this.food = food;
      this.due = due == null ? new Date() : due;
    }
  }
}

然后在对食物进行处理,相关解释以注释写在Mxml中。

<?xml version="1.0" encoding="utf-8"?>
<s:Application
  xmlns:fx="http://ns.adobe.com/mxml/2009"
  xmlns:s="library://ns.adobe.com/flex/spark"
  xmlns:mx="library://ns.adobe.com/flex/mx"
  width="100%" height="100%">
<fx:Script>
<![CDATA[
  import mx.collections.ArrayCollection;
  import model.Dinner;

  [Bindable]
  private var _dinners:ArrayCollection = new ArrayCollection([ //创建一个“食物”集合
    new Dinner("Breakfast", "Subway"),
    new Dinner("Lunch", "French"),
    new Dinner("Supper", "Japanese food"),
    new Dinner("Coffee"), new Dinner("Tea"), new Dinner("Wine")]);

  private function formatDinner(dinner:Dinner):String { //创建格式化数据的函数
    return dinner.name +
    (dinner.food == "" ? "" : (" (" + dinner.food + ")")) +
    ", due on " + dateFormatter.format(dinner.due) + ".";
  }

  private function formatDate(item:Object,
    column:DataGridColumn):String
  {
    var dinner:Dinner = item as Dinner;
    return dinner == null ? "" : dateFormatter.format(dinner.due);
  }
]]></fx:Script>
<fx:Declarations>
  <mx:DateFormatter id="dateFormatter" formatString="YYYY-MM-DD"/> <!--格式化日期的组件-->
</fx:Declarations>
  <s:layout>
    <s:HorizontalLayout paddingLeft="10" paddingTop="10"
      paddingBottom="10" paddingRight="10"/>
  </s:layout>
  <mx:List dataProvider="{_dinners}" labelFunction="formatDinner"
    alternatingItemColors="[#EEEEEE, #FFFFFF]"
    variableRowHeight="true" wordWrap="true"
    width="250" height="150"/>
  <mx:DataGrid width="100%" height="150" dataProvider="{_dinners}">
    <mx:columns>
		<!--数据列名同属性名-->
      <mx:DataGridColumn headerText="Name" dataField="name"
        width="150"/>
		<!--labelFunction 格式化当前列数据的函数-->
      <mx:DataGridColumn headerText="Due" dataField="due"
        width="100" labelFunction="formatDate"/>
      <mx:DataGridColumn headerText="Food" dataField="food"/>
    </mx:columns>
  </mx:DataGrid>
</s:Application>

《linux 内核完全剖析》 vsprintf.c 代码笔记

时间: 2024-11-08 13:34:49

《linux 内核完全剖析》 vsprintf.c 代码笔记的相关文章

《linux 内核完全剖析》 exit.c 代码分析笔记

exit.c 代码分析笔记 release 释放进程的函数release() 主要根据指定进程的任务数据结构指针,在任务数组中删除指定的进程指针,释放相关内存页,并立刻让内核重新调度进程的运行. void release(struct task_struct * p) //释放p指向的进程 { int i; if (!p) //常规检测p是否为0 return; if (p == current) { //不能把自己给释放了 printk("task releasing itself\n\r&q

《linux 内核完全剖析》 笔记 由逻辑地址转换成线性地址代码分析

一开始由这段代码引发的纠结 get_base(current->ldt[1]) 下面是各个相关的代码,摘自不同的header files... current是指向当前task的指针 struct desc_struct ldt[3]; struct desc_struct { unsigned long a,b; } ; #define _get_base(addr) ({unsigned long __base; __asm__("movb %3,%%dh\n\t" &quo

《linux 内核完全剖析》 fork.c 代码分析笔记

fork.c 代码分析笔记 verifiy_area long last_pid=0; //全局变量,用来记录目前最大的pid数值 void verify_area(void * addr,int size) // addr 是虚拟地址 ,size是需要写入的字节大小 { unsigned long start; start = (unsigned long) addr; //把地址强制类型转换之后,赋值给start size += start & 0xfff; //取addr在当前虚拟地址中4

《linux 内核完全剖析》sched.c sched.h 代码分析笔记

sched.c sched.h 代码分析笔记 首先上header file sched.h #ifndef _SCHED_H #define _SCHED_H #define HZ 100 #define NR_TASKS 64 #define TASK_SIZE 0x04000000 #define LIBRARY_SIZE 0x00400000 #if (TASK_SIZE & 0x3fffff) #error "TASK_SIZE must be multiple of 4M&qu

《linux 内核完全剖析》 signal.c 代码分析笔记

signal.c 代码分析笔记 sgetmask int sys_sgetmask()// 获取当前进程阻塞的信号 { returncurrent->blocked; } sys_ssetmask int sys_ssetmask(int newmask) //设置当前进程阻塞信号,确保SIGKILL 和SIGSTOP不被阻塞 { int old=current->blocked; current->blocked= newmask & ~(1<<(SIGKILL-1

《linux 内核完全剖析》 笔记 CODE_SPACE 宏定义分析

在memory.c里面,遇到一个宏定义,如下: #define CODE_SPACE(addr) ((((addr)+4095)&~4095) < current->start_code + current->end_code) 看的第一眼,不知道,第二眼,还是不知道,纠结了半天还是不知道. 睡了一晚,今天早上再看,嘿嘿,居然看懂了... 这个宏定义用于判断给定的addr线性地址是否位于当前进程的代码段中. 4095 = 0xFFF; addr+4095的作用是将位于0~4095

《linux 内核完全剖析》 keyboard.S 部分代码分析(key_map)

keyboard.S 部分代码分析(key_map) keyboard中间有这么一段,我一开始没看明白,究竟啥意思 key_map: .byte 0,27 .ascii "1234567890-=" .byte 127,9 .ascii "qwertyuiop[]" .byte 13,0 .ascii "asdfghjkl;'" .byte '`,0 .ascii "\\zxcvbnm,./" .byte 0,'*,0,32

《linux 内核完全剖析》 chapter 8 内核代码

求n内与n互质的数有多少个. 欧拉函数就是为这个而生的. 如果对欧拉函数不是很了解的话,可以看看这个http://zh.wikipedia.org/wiki/%E6%AC%A7%E6%8B%89%E5%87%BD%E6%95%B0 我们有了上一篇埃氏筛法求素数之后,我们求这个就简单了. 具体用法就是这个函数 用最后这个公式.n可以写成 我们先来求得2到sqrt(n)的素数然后来将n化成的形式 中间如果n能整除p的话就要带入公式了.这样我们就求得最后结果了. #include<iostream>

《linux 内核完全剖析》 sys.c 代码分析

sys.c 代码分析 setregid /* * This is done BSD-style, with no consideration of the saved gid, except * that if you set the effective gid, it sets the saved gid too. This * makes it possible for a setgid program to completely drop its privileges, * which i