Esempio n. 1
0
/* Bind values to variables in the current scope according to the format of the argument list */
void BindArguments(ArgList arguments, VyObj values[], int num_args){
    int i;
    for(i = 0; i < num_args; i++){
        Param cur = arguments.params[i];
        /* Normal arguments can just be bound right away */
        if(!cur.rest){
            VariableBind(cur.name, values[i]);
        } else {
            VyObj list = Nil();
            int j;
            for(j = num_args - 1; j >= i; j--)
                list = Cons(values[j], list);
            VariableBind(cur.name, list);
            i = num_args;
        }
    }

    /* Finish filling in arguments that weren't passed */
    for(; i < arguments.num_params; i++){
        Param cur = arguments.params[i];
        if(cur.rest)
            VariableBind(cur.name, Nil());
        else {
            if(IsNone(cur.default_value))
                cur.default_value = Nil();
            VariableBind(cur.name, cur.default_value);
        }
    }
}
Esempio n. 2
0
const WCHAR *Doc::GetFilePath() const
{
    if (filePath) {
        // verify it's consistent with the path in the doc
        const WCHAR *docPath = GetFilePathFromDoc();
        CrashIf(docPath && !str::Eq(filePath, docPath));
        return filePath;
    }
    CrashIf(!generic && !IsNone());
    return GetFilePathFromDoc();
}
Esempio n. 3
0
// return true if this is document supported by ebook UI
bool Doc::IsEbook() const
{
    switch (type) {
    case Doc_Epub:
    case Doc_Fb2:
    case Doc_Mobi:
    case Doc_MobiTest:
        return true;
    default:
        CrashIf(!IsEngine() && !IsNone());
        return false;
    }
}
Esempio n. 4
0
bool Doc::IsEngine() const
{
    switch (type) {
    case Engine_PDF: case Engine_XPS:
    case Engine_DjVu:
    case Engine_Image: case Engine_ImageDir: case Engine_ComicBook:
    case Engine_PS:
    case Engine_Chm:
    case Engine_Epub: case Engine_Fb2: case Engine_Mobi: case Engine_Pdb:
    case Engine_Chm2: case Engine_Tcr: case Engine_Html: case Engine_Txt:
        return true;
    default:
        CrashIf(!IsEbook() && !IsNone());
        return false;
    }
}
Esempio n. 5
0
void WTHRRecord::IsNone(bool value)
    {
    if(value)
        {
        DATA.value.weatherType &= ~ePleasant;
        DATA.value.weatherType &= ~eCloudy;
        DATA.value.weatherType &= ~eRainy;
        DATA.value.weatherType &= ~eSnow;
        }
    else if(IsNone())
        {
        DATA.value.weatherType |= ePleasant;
        DATA.value.weatherType &= ~eCloudy;
        DATA.value.weatherType &= ~eRainy;
        DATA.value.weatherType &= ~eSnow;
        }
    }
static intptr_t WINAPI OFDProc(HANDLE hDlg,intptr_t Msg,intptr_t Param1,void* Param2)
{
  OFDData *DlgParams=(OFDData *)Info.SendDlgMessage(hDlg,DM_GETDLGDATA,0,0);
  TCHAR newdir[MAX_PATH];

  TCHAR newcurdir[MAX_PATH];
  FarListGetItem item={sizeof(FarListGetItem)};
  BOOL ItemPresent=FALSE;
  if (Msg==DN_CONTROLINPUT||Msg==DN_CLOSE)
  {
    item.ItemIndex=Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,0,0);
    ItemPresent=Info.SendDlgMessage(hDlg,DM_LISTGETITEM,0,&item);
    if(ItemPresent)
    {
      lstrcpy(newcurdir,DlgParams->curr_dir);
      lstrcat(newcurdir,DlgParams->names[item.ItemIndex].Text);
    }
  }

  switch(Msg)
  {
    case DN_CONTROLINPUT:
      {
        const INPUT_RECORD* record=(const INPUT_RECORD*)Param2;
        if(record->EventType==KEY_EVENT&&record->Event.KeyEvent.bKeyDown)
        {
          WORD Key=record->Event.KeyEvent.wVirtualKeyCode;
          wchar_t Char=FSF.LUpper(record->Event.KeyEvent.uChar.UnicodeChar);
          if((IsNone(record)&&Key==VK_RETURN)||(IsCtrl(record)&&Key==VK_RETURN)||(IsCtrl(record)&&Char=='\\'))
          {
            bool bRoot=(Char=='\\');
            if(ItemPresent||bRoot)
            {
              if(bRoot||(item.Item.Flags&LIF_CHECKED&&IsNone(record)))
              {
                TCHAR *ptr,old_dir[MAX_PATH];//,buffer[MAX_PATH];
                lstrcpy(old_dir,DlgParams->curr_dir);
                int Len=lstrlen(old_dir);
                if (bRoot)
                {
                  *newdir=0;
                  lstrcpy(newcurdir,_T(".."));
                }
                else
                {
                  GetFullPathName(newcurdir,ArraySize(newdir),newdir,&ptr);
                  FSF.AddEndSlash(newdir);
                }
                //MessageBox(NULL,old_dir,newcurdir,MB_OK);
                if (TryLoadDir(hDlg,DlgParams,newdir))
                {
                  if(!lstrcmp(newcurdir+(bRoot?0:Len),_T("..")))
                  {
                    if(Len)
                    {
                      if (bRoot)
                      {
                        ptr=old_dir;
                        for (; *ptr && *ptr!='\\'; ptr++)
                          ;
                        if (*ptr=='\\')
                          ptr[1]=0;
                        ptr=old_dir;
                      }
                      else
                      {
                        if(old_dir[Len-1]=='\\')
                          old_dir[Len-1]=0;
                        ptr=(TCHAR*)FSF.PointToName(old_dir);
                      }
                      FarListPos Pos={sizeof(FarListPos)};
                      FarListFind find={sizeof(FarListFind),0,ptr,LIFIND_EXACTMATCH};
                      Pos.SelectPos=Info.SendDlgMessage(hDlg,DM_LISTFINDSTRING,0,&find);
                      Pos.TopPos=-1;
                      if(Pos.SelectPos>=0)
                        Info.SendDlgMessage(hDlg,DM_LISTSETCURPOS,0,&Pos);
                    }
                  }
                }
                return TRUE;
              }
              if(!(IsNone(record)&&Key==VK_RETURN))
              {
                Info.SendDlgMessage(hDlg,DM_CLOSE,0,0);
                return TRUE;
              }
              return FALSE;
            } else return TRUE;
          }
          else if(IsShift(record)&&Key==VK_RETURN)
          {
            if(ItemPresent)
            {
              SHELLEXECUTEINFO info;
              ZeroMemory(&info,sizeof(info));
              info.cbSize=sizeof(info);
              info.fMask=SEE_MASK_NOCLOSEPROCESS|SEE_MASK_FLAG_DDEWAIT;
              info.lpFile=newcurdir;
              info.nShow=SW_SHOWNORMAL;
              ShellExecuteEx(&info);
            }
            return TRUE;
          }
          else if(IsAlt(record)&&Char>='A'&&Char<='Z')
          {
            int Drive=Char-'A';
            DWORD Disks=GetLogicalDrives();
            if(Disks&(1<<Drive))
            {
              TCHAR temp_dir[3]=_T("A:"),*fileptr;
              temp_dir[0]=(TCHAR)(temp_dir[0]+Drive);
              if(!GetFullPathName(temp_dir,ArraySize(newdir),newdir,&fileptr))
                lstrcpy(newdir,temp_dir);
              FSF.AddEndSlash(newdir);
              TryLoadDir(hDlg,DlgParams,newdir);
            }
            return TRUE;
          }
          else if(IsRCtrl(record)&&Char>='0'&&Char<='9')
          {
            FarSettingsCreate settings={sizeof(FarSettingsCreate),FarGuid,INVALID_HANDLE_VALUE};
            HANDLE Settings=Info.SettingsControl(INVALID_HANDLE_VALUE,SCTL_CREATE,0,&settings)?settings.Handle:0;
            if(Settings)
            {
              FarSettingsEnum enums={sizeof(FarSettingsEnum),0,0,{0}};
              enums.Root=FSSF_FOLDERSHORTCUT_0+Char-'0';
              if(Info.SettingsControl(Settings,SCTL_ENUM,0,&enums)&&enums.Count>0)
              {
                intptr_t menu_id=-1;
                if (enums.Count==1)
                {
                  menu_id=0;
                } 
                else
                {
                  FarMenuItem *menuElements=(FarMenuItem *)malloc(enums.Count*sizeof(FarMenuItem));
                  for(size_t ii=0;ii<enums.Count;ii++)
                  {
                    menuElements[ii].Text=enums.Histories[ii].Name;
                    menuElements[ii].Flags=0;
                  }
                  menu_id=Info.Menu(&MainGuid,&ShortcutMenuDiag,-1,-1,0,FMENU_WRAPMODE,GetMsg(mFolderShortcut),0,NULL,NULL,NULL,menuElements,enums.Count);
                  free(menuElements);
                }
                if (menu_id!=-1)
                {
                  lstrcpy(newdir,enums.Histories[menu_id].Name);
                  FSF.AddEndSlash(newdir);
                  TryLoadDir(hDlg,DlgParams,newdir);
                }
              }
              Info.SettingsControl(Settings,SCTL_FREE,0,0);
            }
            return TRUE;
          }
          else if(IsNone(record)&&Key==VK_LEFT)
          {
            INPUT_RECORD keyOut={0};
            keyOut.EventType=KEY_EVENT;
            keyOut.Event.KeyEvent.bKeyDown=1;
            keyOut.Event.KeyEvent.wRepeatCount=1;
            keyOut.Event.KeyEvent.wVirtualKeyCode=VK_HOME;
            Info.SendDlgMessage(hDlg,DM_KEY,1,&keyOut);
            return TRUE;
          }
          else if(IsNone(record)&&Key==VK_RIGHT)
          {
            INPUT_RECORD keyOut={0};
            keyOut.EventType=KEY_EVENT;
            keyOut.Event.KeyEvent.bKeyDown=1;
            keyOut.Event.KeyEvent.wRepeatCount=1;
            keyOut.Event.KeyEvent.wVirtualKeyCode=VK_END;
            Info.SendDlgMessage(hDlg,DM_KEY,1,&keyOut);
            return TRUE;
          }
        }
      }
      break;
    case DN_CTLCOLORDIALOG:
      Info.AdvControl(&MainGuid,ACTL_GETCOLOR,COL_MENUTEXT, Param2);
      return true;
    case DN_CTLCOLORDLGLIST:
      if(Param1==0)
      {
        FarDialogItemColors *fdic=(FarDialogItemColors *)Param2;
        FarColor *Colors = fdic->Colors;
        
        int ColorIndex[]={COL_MENUTEXT,COL_MENUTEXT,COL_MENUTITLE,COL_MENUTEXT,COL_MENUHIGHLIGHT,COL_MENUTEXT,COL_MENUSELECTEDTEXT,COL_MENUSELECTEDHIGHLIGHT,COL_MENUSCROLLBAR,COL_MENUDISABLEDTEXT};
        size_t Count=sizeof(ColorIndex)/sizeof(ColorIndex[0]);
        if(Count>fdic->ColorsCount) Count=fdic->ColorsCount;
        for(size_t i=0;i<Count;i++)
        {
          FarColor fc;
          if (Info.AdvControl(&MainGuid, ACTL_GETCOLOR, ColorIndex[i],&fc))
          {
            Colors[i] = fc;
          }
        }
        return TRUE;
      }
      break;
    case DN_INITDIALOG:
      Info.SendDlgMessage(hDlg,DM_UPDATESIZE,0,0);
      TryLoadDir(hDlg,(OFDData *)Param2,((OFDData *)Param2)->curr_dir);
      break;
    case DN_HELP:
      Info.ShowHelp(Info.ModuleName,_T("FileDialog"),FHELP_SELFHELP);
      return (long)NULL;
    case DN_CLOSE:
      {
        if((Param1==0)&&ItemPresent)
        {
          lstrcpy(DlgParams->filename,DlgParams->curr_dir);
          if(lstrcmp(DlgParams->names[item.ItemIndex].Text,_T("..")))
            lstrcat(DlgParams->filename,DlgParams->names[item.ItemIndex].Text);
          DlgParams->result=true;
        }
        if (DlgParams->names)
        {
          free(DlgParams->names);
          DlgParams->names=NULL;
        }
      }
      break;
    case DN_RESIZECONSOLE:
      Info.SendDlgMessage(hDlg,DM_UPDATESIZE,0,0);
      break;
    case DM_UPDATESIZE:
      {
        const int minimal_width=65,minimal_height=12;
        int width=minimal_width,height=minimal_height;
        HANDLE console=CreateFile(_T("CONOUT$"),GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
        if(console!=INVALID_HANDLE_VALUE)
        {
          COORD console_size={80,25};
          SMALL_RECT console_rect;
          if(Info.AdvControl(&MainGuid,ACTL_GETFARRECT,0,&console_rect))
          {
            console_size.X=console_rect.Right-console_rect.Left+1;
            console_size.Y=console_rect.Bottom-console_rect.Top+1;
          }
          width=console_size.X*3/5;
          if(width<minimal_width) width=minimal_width;
          height=console_size.Y*2/3;
          if(height<minimal_height) height=minimal_height;
          if(width>(console_size.X-11)) width=console_size.X-11;
          if(height>(console_size.Y-4)) height=console_size.Y-4;
          CloseHandle(console);
        }
        Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,FALSE,0);
        { //minimize listbox
          SMALL_RECT listbox_size={3,1,4,2};
          Info.SendDlgMessage(hDlg,DM_SETITEMPOSITION,0,&listbox_size);
        }
        { //resize and move dialog
          COORD dialog_size={(short)(width+6),(short)(height+2)};
          Info.SendDlgMessage(hDlg,DM_RESIZEDIALOG,0,&dialog_size);
          COORD position={-1,-1};
          Info.SendDlgMessage(hDlg,DM_MOVEDIALOG,TRUE,&position);
        }
        { //resize listbox
          SMALL_RECT listbox_size={3,1,(short)(width+2),(short)(height)};
          Info.SendDlgMessage(hDlg,DM_SETITEMPOSITION,0,&listbox_size);
        }
        Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,TRUE,0);
      }
      break;
  }
  return Info.DefDlgProc(hDlg,Msg,Param1,Param2);
}
Esempio n. 7
0
static intptr_t WINAPI MainDialogProc(HANDLE hDlg,intptr_t Msg,intptr_t Param1,void* Param2)
{
  BoardParams* DlgParams=(BoardParams*)Info.SendDlgMessage(hDlg,DM_GETDLGDATA,0,0);
  //if(Msg==DN_KEY&&Param2==KEY_ENTER) return TRUE;
  switch(Msg)
  {
    case DN_INITDIALOG:
      Info.SendDlgMessage(hDlg,DM_RESETBOARD,0,0);
      SetFocus(true);
      break;
    case DN_CONTROLINPUT:
      {
        const INPUT_RECORD* record=(const INPUT_RECORD*)Param2;
        if(record->EventType==KEY_EVENT&&record->Event.KeyEvent.bKeyDown)
        {
          KillFocus();
          if(IsNone(record))
          {
            switch(record->Event.KeyEvent.wVirtualKeyCode)
            {
              case VK_UP:
                DlgParams->curr_col--;
                break;
              case VK_DOWN:
                DlgParams->curr_col++;
                break;
              case VK_LEFT:
                DlgParams->curr_row--;
                break;
              case VK_RIGHT:
                DlgParams->curr_row++;
                break;
              case VK_HOME:
                DlgParams->curr_row=0;
                break;
              case VK_END:
                DlgParams->curr_row=DlgParams->width-1;
                break;
              case VK_PRIOR:
                DlgParams->curr_col=0;
                break;
              case VK_NEXT:
                DlgParams->curr_col=DlgParams->height-1;
                break;
              case L' ':
                {
                  Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,FALSE,0);
                  if(!DlgParams->finished)
                  {
                    if(!DlgParams->started) Info.SendDlgMessage(hDlg,DM_START_GAME,0,0);
                    OpenPlace(hDlg,DlgParams,DlgParams->curr_row,DlgParams->curr_col,COP_CHECK_ALL);
                  }
                  Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,TRUE,0);
                }
                break;
              case VK_DELETE:
                {
                  Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,FALSE,0);
                  if(!DlgParams->finished)
                  {
                    FarDialogItem DialogItem;
                    Info.SendDlgMessage(hDlg,DM_GETDLGITEMSHORT,DlgParams->width*DlgParams->curr_col+DlgParams->curr_row,&DialogItem);
                    switch(GET_DATA_1(DialogItem))
                    {
                      case STATE_CLOSE:
                        SET_DATA_1(DialogItem,STATE_MARKED);
                        DlgParams->curr_mines++;
                        break;
                      case STATE_OPEN:
                        break;
                      case STATE_MARKED:
                        SET_DATA_1(DialogItem,STATE_CLOSE);
                        DlgParams->curr_mines--;
                        break;
                    }
                    Info.SendDlgMessage(hDlg,DM_SETDLGITEMSHORT,DlgParams->width*DlgParams->curr_col+DlgParams->curr_row,&DialogItem);
                    Info.SendDlgMessage(hDlg,DM_SHOWTIME,0,0);
                  }
                  Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,TRUE,0);
                }
                break;
              case VK_F2:
                DlgParams->started=false;
                DlgParams->finished=FINISH_NO;
                Info.SendDlgMessage(hDlg,DM_SETTEXTPTR,DlgParams->width*DlgParams->height,const_cast<wchar_t*>(GetMsg(mStart)));
                Info.SendDlgMessage(hDlg,DM_RESETBOARD,0,0);
                break;
              case VK_F3:
                {
                  wchar_t ScoreKeyName[1024],PlayerKeyName[1024];
                  FSF.sprintf(ScoreKeyName,L"Score_%d_%d_%d",DlgParams->width,DlgParams->height,DlgParams->mines);
                  FSF.sprintf(PlayerKeyName,L"Player_%d_%d_%d",DlgParams->width,DlgParams->height,DlgParams->mines);
                  CFarSettings settings(MainGuid);
                  __int64 Score; wchar_t Name[512];
                  Score=settings.Get(ScoreKeyName,-1);
                  if(!settings.Get(PlayerKeyName,Name,sizeofa(Name))) Name[0]=0;
                  if(Score>=0&&Name[0])
                  {
                    wchar_t buffer[1024];
                    FSF.sprintf(buffer,GetMsg(mHighscoreFormat),Name,(long)Score);
                    const wchar_t* MsgItems[]={GetMsg(mHighscoreTitle),buffer,GetMsg(mOk)};
                    Info.Message(&MainGuid,&HiscoreGuid,0,NULL,MsgItems,sizeofa(MsgItems),1);
                  }
                }
                break;
            }
          }
          if(DlgParams->curr_row>=DlgParams->width) DlgParams->curr_row=0;
          if(DlgParams->curr_row<0) DlgParams->curr_row=DlgParams->width-1;
          if(DlgParams->curr_col>=DlgParams->height) DlgParams->curr_col=0;
          if(DlgParams->curr_col<0) DlgParams->curr_col=DlgParams->height-1;
          SetFocus(true);
          Info.SendDlgMessage(hDlg,DM_REDRAW,0,0);
        }
        else if(record->EventType==MOUSE_EVENT)
        {
          DWORD Buttons=record->Event.MouseEvent.dwButtonState;
          if(Buttons&FROM_LEFT_1ST_BUTTON_PRESSED) RunKey(L"Keys([[Space]])");
          else if(Buttons&RIGHTMOST_BUTTON_PRESSED) RunKey(L"Keys([[Del]])");
        }
      }
      break;
    case DN_GOTFOCUS:
      SetFocus(false);
      break;
    case DN_KILLFOCUS:
      KillFocus();
      break;
    case DM_RESETBOARD:
      {
        int curr_mines=DlgParams->mines,color;
        FarDialogItem DialogItem;
        Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,FALSE,0);
        for(int i=0;i<DlgParams->height;i++)
          for(int j=0;j<DlgParams->width;j++)
          {
            int k=i*DlgParams->width+j;
            Info.SendDlgMessage(hDlg,DM_GETDLGITEMSHORT,k,&DialogItem);
            SET_DATA_0(DialogItem,0);
            SET_DATA_1(DialogItem,0);
            color=0;
            DialogItem.VBuf[1].Char=GetChar(GET_DATA_0(DialogItem),GET_DATA_1(DialogItem),&color);
            int bgcolor=GetBG(i,j,STATE_CLOSE);
            DialogItem.VBuf[0].Attributes.ForegroundColor=DialogItem.VBuf[1].Attributes.ForegroundColor=DialogItem.VBuf[2].Attributes.ForegroundColor=color;
            DialogItem.VBuf[0].Attributes.BackgroundColor=DialogItem.VBuf[1].Attributes.BackgroundColor=DialogItem.VBuf[2].Attributes.BackgroundColor=bgcolor;
            Info.SendDlgMessage(hDlg,DM_SETDLGITEMSHORT,k,&DialogItem);
          }
        //set mines
        while(curr_mines)
          for(int i=0;i<DlgParams->height;i++)
            for(int j=0;j<DlgParams->width;j++)
            {
              int k=i*DlgParams->width+j;
              Info.SendDlgMessage(hDlg,DM_GETDLGITEMSHORT,k,&DialogItem);
              if(curr_mines&&(!GET_DATA_0(DialogItem)))
              {
                if(rand()<=(RAND_MAX*DlgParams->mines/(DlgParams->width*DlgParams->height)))
                {
                  curr_mines--;
                  SET_DATA_0(DialogItem,9);
                  Info.SendDlgMessage(hDlg,DM_SETDLGITEMSHORT,k,&DialogItem);
                }
              }
            }
        //set places
        for(int i=0;i<DlgParams->height;i++)
          for(int j=0;j<DlgParams->width;j++)
          {
            int k=i*DlgParams->width+j;
            Info.SendDlgMessage(hDlg,DM_GETDLGITEMSHORT,k,&DialogItem);
            if(GET_DATA_0(DialogItem)==0)
            {
              SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j-1,i-1,hDlg,DlgParams,false));
              SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j-1,i,hDlg,DlgParams,false));
              SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j-1,i+1,hDlg,DlgParams,false));
              SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j,i-1,hDlg,DlgParams,false));
              SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j,i+1,hDlg,DlgParams,false));
              SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j+1,i-1,hDlg,DlgParams,false));
              SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j+1,i,hDlg,DlgParams,false));
              SET_DATA_0(DialogItem,GET_DATA_0(DialogItem)+GetMine(j+1,i+1,hDlg,DlgParams,false));
              Info.SendDlgMessage(hDlg,DM_SETDLGITEMSHORT,k,&DialogItem);
            }
          }
        DlgParams->curr_mines=0;
        Info.SendDlgMessage(hDlg,DM_SHOWTIME,0,0);
        Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,TRUE,0);
      }
      break;
    case DN_ENTERIDLE:
      Info.SendDlgMessage(hDlg,DM_SHOWTIME,0,0);
      break;
    case DM_SHOWTIME:
      {
        wchar_t buffer[1024]; DWORD diff_time=DlgParams->started?((DlgParams->finished?DlgParams->end_time:GetTickCount())-DlgParams->start_time)/1000:0;
        FSF.sprintf(buffer,GetMsg(mTime),diff_time,DlgParams->curr_mines);
        Info.SendDlgMessage(hDlg,DM_SETTEXTPTR,DlgParams->width*DlgParams->height+1,buffer);
      }
      break;
    case DM_START_GAME:
      Info.SendDlgMessage(hDlg,DM_SETTEXTPTR,DlgParams->width*DlgParams->height,const_cast<wchar_t*>(GetMsg(mGame)));
      DlgParams->started=true;
      DlgParams->start_time=GetTickCount();
      break;
  }
  return Info.DefDlgProc(hDlg,Msg,Param1,Param2);
}
Esempio n. 8
0
static intptr_t WINAPI MainDialogProc(HANDLE hDlg,intptr_t Msg,intptr_t Param1,void* Param2)
{
  switch(Msg)
  {
    case DN_INITDIALOG:
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_INIT,1,0);
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("aaa"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("1 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("2 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("3 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("4 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("5 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("6 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("7 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("8 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("9 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("0 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("1 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("2 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("3 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("4 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("5 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("6 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("7 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("8 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("9 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("0 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("1 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("2 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("3 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("4 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("5 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("6 bbb"));
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ADDSTR,1,(void*)_T("7 bbb"));
      {
        ListBoxExSetColor color={2,LISTBOXEX_COLORS_ITEM,0,{{FCF_FG_4BIT|FCF_BG_4BIT,0xC,0x7,NULL},0,false}};
        for(int i=2;i<5;i++)
        {
          color.ColorIndex=i;
          Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETCOLOR,1,&color);
        }
        color.Color.Color.ForegroundColor=0xA;
        color.Color.Color.BackgroundColor=0x7;
        for(int i=7;i<10;i++)
        {
          color.ColorIndex=i;
          Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETCOLOR,1,&color);
        }
        color.Color.Color.ForegroundColor=0x9;
        color.Color.Color.BackgroundColor=0x7;
        for(int i=12;i<15;i++)
        {
          color.ColorIndex=i;
          Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETCOLOR,1,&color);
        }
        color.Color.Color.ForegroundColor=0x9;
        color.Color.Color.BackgroundColor=0x0;
        color.TypeIndex=LISTBOXEX_COLORS_SELECTED;
        for(int i=12;i<15;i++)
        {
          color.ColorIndex=i;
          Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETCOLOR,1,&color);
        }
        ListBoxExSetHotkey hotkey={16,'a'};
        Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETHOTKEY,1,&hotkey);
      }
      break;
    case DN_CONTROLINPUT:
      {
        const INPUT_RECORD* record=(const INPUT_RECORD *)Param2;
        if(record->EventType==KEY_EVENT&&record->Event.KeyEvent.bKeyDown)
        {
          WORD vk=record->Event.KeyEvent.wVirtualKeyCode;
          if(IsNone(record))
          {
            switch(vk)
            {
              case VK_DELETE:
                {
                  FarListDelete list={sizeof(FarListDelete),3,4};
                  Info.SendDlgMessage(hDlg,DM_LISTBOXEX_DELETE,1,&list);
                }
                break;
              case VK_F2:
                {
                  ListBoxExSetFlags flags={Info.SendDlgMessage(hDlg,DM_LISTBOXEX_GETCURPOS,1,0L),LIFEX_DISABLE};
                  Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETFLAGS,1,&flags);
                }
                break;
              case VK_F3:
                {
                  ListBoxExSetFlags flags={Info.SendDlgMessage(hDlg,DM_LISTBOXEX_GETCURPOS,1,0L)-1,0};
                  Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETFLAGS,1,&flags);
                }
                break;
              case VK_INSERT:
                Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_TOGGLE,1,(void*)Info.SendDlgMessage(hDlg,DM_LISTBOXEX_GETCURPOS,1,0L));
                break;
            }
          }
          else if(IsShift(record))
          {
            switch(vk)
            {
              case VK_DELETE:
                {
                  ListBoxExSetFlags flags={Info.SendDlgMessage(hDlg,DM_LISTBOXEX_GETCURPOS,1,0L),LIFEX_HIDDEN};
                  Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_SETFLAGS,1,&flags);
                }
                break;
            }
          }
          else if(IsCtrl(record))
          {
            switch(vk)
            {
              case VK_UP:
                {
                  FarListPos pos={sizeof(FarListPos),Info.SendDlgMessage(hDlg,DM_LISTBOXEX_GETCURPOS,1,0L),-1};
                  Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_MOVE_UP,1,(void*)(INT_PTR)pos.SelectPos);
                  pos.SelectPos--;
                  Info.SendDlgMessage(hDlg,DM_LISTBOXEX_SETCURPOS,1,&pos);
                }
                break;
              case VK_DOWN:
                {
                  FarListPos pos={sizeof(FarListPos),Info.SendDlgMessage(hDlg,DM_LISTBOXEX_GETCURPOS,1,0L),-1};
                  Info.SendDlgMessage(hDlg,DM_LISTBOXEX_ITEM_MOVE_DOWN,1,(void*)(INT_PTR)pos.SelectPos);
                  pos.SelectPos++;
                  Info.SendDlgMessage(hDlg,DM_LISTBOXEX_SETCURPOS,1,&pos);
                }
                break;
            }
          }
        }
      }
      break;
    case DN_CLOSE:
      Info.SendDlgMessage(hDlg,DM_LISTBOXEX_FREE,1,0);
      break;
    case DM_LISTBOXEX_ISLBE:
      if(Param1==1) return TRUE;
      return FALSE;
  }
  return ListBoxExDialogProc(hDlg,Msg,Param1,Param2);
}