////默认脚本  object pascal 语言编写
////作者:  oisee
////创建时间: 2006-6
//我的第一个作品，大家多多指教
//更新历史:
//
//
//
//
//





procedure UpdateBatteryState;
var
  adjustBase;
begin
  //电池上次状态  xStr[0]
  xInt[0] :=GetBatteryInfo('percent');


  if (xInt[0]>100) or (xInt[0]<0) then
  begin
    xStr[0] := 'no battery';
    SetImagePro(1,'Visible',false);
    SetImagePro(2,'Visible',false);
    SetImagePro(3,'Visible',true);
    SetImagePro(4,'Visible',false);
    SetImagePro(5,'Visible',false);
  end
  else
  begin
    if GetBatteryInfo('state')=0 then
    begin
      xStr[0] := 'ac'; //使用交流电
      SetImagePro(1,'Visible',true);
      SetImagePro(2,'Visible',true);
      SetImagePro(3,'Visible',false);
      SetImagePro(4,'Visible', xInt[0]<>100);
      SetImagePro(5,'Visible', xInt[0]=100);

      if xInt[0]=100 then
      begin
        if xStr[1] <> 'drain' then
        begin
          xStr[1] := 'drain';
          SetImagePro(1,'filename',WidgetPath + 'innerFillDrain.png');
          SetImagePro(2,'filename',WidgetPath + 'topCapDrain.png');
        end;

      end
      else if xInt[0]<20 then
      begin
        if xStr[1] <> 'red' then
        begin
          xStr[1] := 'red';
          SetImagePro(1,'filename',WidgetPath + 'innerFillRed.png');
          SetImagePro(2,'filename',WidgetPath + 'topCapRed.png');
        end;
      end
      else
      begin
        if xStr[1] <> 'charge' then
        begin
          xStr[1] := 'charge';
          SetImagePro(1,'filename',WidgetPath + 'innerFillCharge.png');
          SetImagePro(2,'filename',WidgetPath + 'topCapCharge.png');
        end;
      end;

      //电池百分比
      if xInt[0] <> xInt[1] then
      begin
        xInt[1] := xInt[0]; //存储上一次的百分比
        adjustBase := 64 - round( xInt[0] * (57/100) );
        SetImagePro(1,'srcTop', adjustBase );
        SetImagePro(2,'top', adjustBase - 1 );
        print(xint[0]);
        refreshwidget;
      end;

    end
    else
    begin
      xStr[0] := 'battery'; //使用电池
      SetImagePro(1,'Visible',true);
      SetImagePro(2,'Visible',true);
      SetImagePro(3,'Visible',false);
      SetImagePro(4,'Visible',false);
      SetImagePro(5,'Visible',false);

      if xInt[0]<20 then
      begin
        if xStr[1] <> 'red' then
        begin
          xStr[1] := 'red';
          SetImagePro(1,'filename',WidgetPath + 'innerFillRed.png');
          SetImagePro(2,'filename',WidgetPath + 'topCapRed.png');
        end;
      end
      else
      begin
        if xStr[1] <> 'useing battery' then
        begin
          xStr[1] := 'useing battery';
          SetImagePro(1,'filename',WidgetPath + 'innerFillFull.png');
          SetImagePro(2,'filename',WidgetPath + 'topCapFull.png');
        end;
      end;

    end;
    //电池百分比
    if xInt[0] <> xInt[1] then
    begin
      xInt[1] := xInt[0]; //存储上一次的百分比
      adjustBase := 64 - round( xInt[0] * (57/100) );
      SetImagePro(1,'srcTop', adjustBase );
      SetImagePro(2,'top', adjustBase - 1 );
      refreshwidget;
      print(xint[0]);
    end;


  end;

end;


//插件初始化函数   用于资源和图片的载入等初始化
procedure Init;
begin
  //设置整个widget插件的宽度和高度
  widgetWidth := 72;
  widgetHeight := 84;

  //设置背景图片的坐标
  BackgroundLeft := 0;
  BackgroundTop := 0;

  //载入图片控件,文字控件,按钮控件,图片资源等等
  //载入示例图片,XDeskShowPath表示XDeskShow安装路径 WidgetPath表示当前插件路径

  //背景图
  AddImage(0, WidgetPath + 'back.png');
  SetImagePro(0,'top',4);

  //电池颜色图
  AddImage(1,'');
  SetImagePro(1,'left',13);
  SetImagePro(1,'top',4);

  //电池底座图
  AddImage(2, '');
  SetImagePro(2,'left',12);
  SetImagePro(2,'top',4);


  //电池标志图
  AddImage(3, WidgetPath + 'No Battery.png');
  SetImagePro(3,'left',26);
  SetImagePro(3,'top',32);
  SetImagePro(3,'Visible',false);

  AddImage(4, WidgetPath + 'Charging.png');
  SetImagePro(4,'left',28);
  SetImagePro(4,'top',26);
  SetImagePro(4,'Visible',false);

  AddImage(5, WidgetPath + 'Charged.png');
  SetImagePro(5,'left',30);
  SetImagePro(5,'top',30);
  SetImagePro(5,'Visible',false);

  //电池前景图
  AddImage(6, WidgetPath + 'Front.png');
  SetImagePro(6,'left',11);

{  //示例:创建一个文字控件 并设置其字体属性和坐标
  AddLabel(0,'示例');
  SetLabelPro(0,'fontstr','0,0,0/-12/Arial/19/1000');
  SetLabelPro(0,'top','40');
  SetLabelPro(0,'left','6');
 }

 UpdateBatteryState;


end;

//画widget整个外观的函数
procedure OnDrawWidget;
begin
  //可以在这里添加任何对widget外观的绘制代码.
  {......}


  //系统自绘所有widget控件的函数. 如果不调用此函数将不会显示所有图片/文字/按钮控件
  InheritDrawWidget;


  //可以在这里添加任何对widget外观的绘制代码
  {......}
end;

//启动插件事件
procedure StartWidget;
begin
  //可以在这里添加在启动widget时需要做的一些事情的代码.例如启动定时器
  {......}
  SetTimer(0,500,true); //  将序号为0的定时器启动,间隔时间1000毫秒



end;

//定时器每到预定时间时执行此函数代码,index为定时器序号
procedure OnTimer(index);
begin
  Case index of
    0:
    begin
      //当序号为 0 的定时器到预定时间时,这里添加的代码将被执行
      {......}
      UpdateBatteryState;
    end;
    1:
      begin
      //当序号为 1 的定时器到预定时间时,这里添加的代码将被执行
      //以下依次类推,可以自行添加序号.最多可以有11个定时器,序号最多到10
      {......}

      end;
    end;

end;

//当按钮控件被单击(鼠标在按钮上按下并抬起后)时,执行此函数代码. index为被点击的按钮的序号
procedure OnButtonClick(index);
begin
  Case index of
    0:
      begin
      //当序号为 0 的按钮被单击时,这里添加的代码将被执行
      //以下依次类推,可以自行添加对应按钮的序号
      {......}

      end;
    1:
      begin

      end;
    end;

end;

//当按钮控件被鼠标悬停在上面时,执行此函数代码. index为被悬停的按钮的序号
procedure OnButtonHot(index);
begin
  RefreshWidget;
  Case index of
    0:
      begin
      //当序号为 0 的按钮被悬停时,这里添加的代码将被执行
      //以下依次类推,可以自行添加对应按钮的序号
      {......}

      end;
    1:
      begin

      end;
    end;
end;

//当按钮控件被鼠标按下时,执行此函数代码. index为被被按下的按钮的序号
procedure OnButtonDown(index);
begin
  RefreshWidget;
  Case index of
    0:
      begin
      //当序号为 0 的按钮被鼠标按下时,这里添加的代码将被执行
      //以下依次类推,可以自行添加对应按钮的序号
      {......}

      end;
    1:
      begin

      end;
    end;
end;

//当鼠标单击widget时触发此事件,执行此函数内代码
procedure OnClickWidget;
begin
  //当widget被鼠标单击时,这里添加的代码将被执行
  {......}
end;


//当鼠标双击widget时触发此事件,执行此函数内代码
procedure OnDBClickWidget;
begin
  //当widget被双击时,这里添加的代码将被执行
  {......}
end;

//当鼠标进入widget上方时,触发此事件,将执行此函数代码.
procedure OnMouseEnterWidget;
begin

end;

//当鼠标离开widget上方时,触发此事件,将执行此函数代码.
procedure OnMouseLeaveWidget;
begin

end;

//当鼠标在widget上移动的时候,调用此函数. 
procedure OnMoveOnWidget;
begin

end;

//当有文件拖放到widget上时,触发此事件,将执行此函数代码.
procedure OnDropFile(filename);
begin
  // filename为被拖放到widget上的文件的完整路径和文件名.在这里写处理此事件的代码
  {...}
end;      

//当xdeskshow的widget获得焦点时,触发此事件,并执行此函数内代码.
procedure OnActiveWidget;
begin

end;


//当xdeskshow的widget失去焦点时,触发此事件,并执行此函数内代码.
procedure OnDeActiveWidget;
begin

end;


//当在widget上有按键时触发此事件,并执行此函数内代码. key为按下的键的代码. ctl=true表示ctrl键按下,alt=true表示Alt键按下,shf=true表示Shift键按下. 否则都为0.
procedure OnKeyDownWidget(key,ctl,alt,shf);
begin
  //print('按下的键的代码是: '+inttostr(key) );
  //if ctl then print('Ctrl键被按下');


end;

//当鼠标滚轮在widget中向上滚动时触发此事件,执行此函数内代码
//MousePosX,MousePosY为鼠标当前坐标
procedure OnWidgetMouseWheelUp(MousePosX,MousePosY);
begin
  //鼠标滚轮在widget中向上滚动时,这里添加的代码将被执行
  {......}
end;

//当鼠标滚轮在widget中向下滚动时触发此事件,执行此函数内代码
//MousePosX,MousePosY为鼠标当前坐标
procedure OnWidgetMouseWheelDown(MousePosX,MousePosY);
begin
  //鼠标滚轮在widget中向下滚动时,这里添加的代码将被执行
  {......}
end;



//当有新驱动器添加时触发此事件,执行此函数内代码
//例如:USB盘插入时
procedure OnDriveAdd(DriveType,Path);
begin

end;

//当有新驱动器添加时触发此事件,执行此函数内代码
//例如:USB盘拔出时
procedure OnDriveRemoved(DriveType,Path);
begin
  
end;


//当邮件检测完毕时,这里添加的代码将被执行
//index为检测开始时赋予的序号，count为检测获得的邮件数量
procedure CheckEmailCountCompleted(index,count);
begin
  Case index of
    0:
      begin
      //当序号为 0 的邮件检测完毕时,这里添加的代码将被执行
      //以下依次类推,可以自行添加对应的序号

      end;
    1:
      begin

      end;
    end;
end;




//当获取网页完毕时,这里添加的代码将被执行
//index为获取网页html开始时赋予的序号，str为获得的指定网页的html字符串,filename为网页文件存放的文件名,用完后建议删除filename指向的文件
procedure GetHtmlStrCompleted(index,str,filename);
begin
  Case index of
    0:
      begin
      //当序号为 0 的网页获取完毕时,这里添加的代码将被执行
      //以下依次类推,可以自行添加对应的序号

      end;
    1:
      begin

      end;
    end;
  DeleteFile(filename);
end;

//当自定义菜单被点击时,这里添加的代码将被执行
//index为自定义菜单的序号（0－8）
procedure OnCustomMenuClick(index);
begin
  Case index of
    0:
      begin
      //当序号为 0 的自定义菜单被点击时,这里添加的代码将被执行
      //以下依次类推,0至8号,可以自行添加对应序号的响应代码
      //  showmessage('第一个自定义菜单被点击哦！');

      end;
    1:
      begin

      end;
    end;
end;

//当关闭widget时,触发此事件,并执行此函数内代码.
procedure OnCloseWidget;
begin
  //如果自定义了某些变量,可以在这里将自定义的配置信息写入默认ini文件,以便下次新建此种插件的时候沿用此配置
  //SaveDefIni(name,value);

end;

//当退出XDeskShow时,触发此事件,并执行此函数内代码.
procedure OnExitXDS;
begin
  //如果自定义了某些变量,请在这里将自定义的配置信息保存
  //SaveIni(name,value);

end;


//当克隆本插件时,触发此事件,并执行此函数内代码.
procedure OnCloneWidget;
begin
  //如果自定义了某些变量,可以在这里将自定义的配置信息写入默认ini文件,以便克隆新建的插件沿用此配置  
  //SaveDefIni(name,value);

end;

//当widget切换脚本的时候,触发此事件,并执行此函数内代码.
procedure OnBeforeChangeScript;
begin
  //如果自定义了某些变量,请在这里将自定义的配置信息保存.否则切换脚本后自定义信息有可能丢失
  //SaveDefIni(name,value);

end;






 
