Changeset 506


Ignore:
Timestamp:
Sep 25, 2006, 3:03:53 AM (19 years ago)
Author:
root
Message:

Add Move to last, Okay adds if new, Replace Current in Listbox Dialog

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/assoc.c

    r405 r506  
    11
    2 /***********************************************************************
     2/**************************************************************************************
    33
    44  $Id$
     
    1010  14 Jul 06 SHL Use Runtime_Error
    1111  29 Jul 06 SHL Use xfgets, xfgets_bstripcr
    12 
    13 ***********************************************************************/
     12  10 Sep 06 GKY Add Move to last, Okay adds if new, Replace Current in Listbox Dialog
     13
     14**************************************************************************************/
    1415
    1516#define INCL_DOS
    1617#define INCL_WIN
     18#define INCL_PM
     19#define INCL_WINHOOKS
    1720
    1821#include <os2.h>
     
    4548  struct LINKASSOC *next;
    4649} LINKASSOC;
     50
    4751
    4852static LINKASSOC *asshead     = NULL,*asstail = NULL;
     
    242246}
    243247
    244 
    245248#pragma alloc_text(ASSOC,add_association,kill_association,AssocDlgProc,EditAssociations)
    246249
     
    303306    info = asshead;
    304307    while(info) {
    305       if(!stricmp(info->mask,killme->mask) &&
    306          info->offset == killme->offset &&
     308        if(!stricmp(info->mask,killme->mask) &&
     309           info->offset == killme->offset &&
    307310         (((!info->sig || !*info->sig) && !*killme->sig) ||
    308311          (info->sig && !strcmp(killme->sig,info->sig)))) {
     
    322325        free(info->cl);
    323326        free(info->mask);
    324         if(info->sig)
     327       if(info->sig)
    325328          free(info->sig);
    326329        free(info);
     
    465468{
    466469  LINKASSOC *info;
    467   SHORT      x;
     470  SHORT      x , y;
    468471
    469472  switch(msg) {
     
    637640          break;
    638641
     642      case ASS_BOTTOM:
     643          x = (SHORT)WinSendDlgItemMsg(hwnd,ASS_LISTBOX,
     644                                       LM_QUERYSELECTION,
     645                                       MPFROMSHORT(LIT_FIRST),
     646                                       MPVOID);
     647          if(x >= 0) {
     648            info = (LINKASSOC *)WinSendDlgItemMsg(hwnd,ASS_LISTBOX,
     649                                                  LM_QUERYITEMHANDLE,
     650                                                  MPFROMSHORT(x),
     651                                                  MPVOID);
     652            if(info) {
     653              if(info != asstail) {
     654                if(info->next)
     655                  info->next->prev = info->prev;
     656                if(info->prev)
     657                  info->prev->next = info->next;
     658                if(info == asshead)
     659                  asshead = info->next;
     660                info->next = NULL;
     661                info->prev = asstail;
     662                asstail->next = info;
     663                asstail = info;
     664                WinSendMsg(hwnd,UM_UNDO,MPVOID,MPVOID);
     665              }
     666            }
     667          }
     668          break;
    639669        case ASS_FIND:
    640670          {
     
    649679          break;
    650680
    651         case DID_OK:
    652           WinDismissDlg(hwnd,1);
    653           break;
    654 
    655         case DID_CANCEL:
    656           WinDismissDlg(hwnd,0);
    657           break;
    658 
    659         case IDM_HELP:
    660           if(hwndHelp)
    661             WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
    662                        MPFROM2SHORT(HELP_ASSOC,0),
    663                        MPFROMSHORT(HM_RESOURCEID));
    664           break;
    665 
    666         case ASS_ADD:
    667           {
     681      case DID_OK:
     682                    {
    668683            ASSOC temp;
    669             CHAR  dummy[34];
    670 
     684            CHAR  dummy[34];{
     685            x = (SHORT)WinSendDlgItemMsg(hwnd,
     686                                           ASS_LISTBOX,
     687                                           LM_QUERYSELECTION,
     688                                           MPVOID,
     689                                           MPVOID);
     690            if(x==LIT_NONE)
     691             x = (SHORT) WinSendDlgItemMsg(hwnd,
     692                                           ASS_LISTBOX,
     693                                          LM_SELECTITEM,
     694                                          MPFROMSHORT(0),
     695                                          MPFROMSHORT(TRUE));
     696            }
    671697            memset(&temp,0,sizeof(ASSOC));
    672698            WinQueryDlgItemText(hwnd,ASS_MASK,sizeof(temp.mask),temp.mask);
     
    698724            info = add_association(&temp);
    699725            if(!info)
    700               Runtime_Error(pszSrcFile, __LINE__, "add_association");
     726             WinDismissDlg(hwnd,1);/* Runtime_Error(pszSrcFile, __LINE__, "add_association");*/
    701727            else {
    702728
     
    732758            }
    733759          }
     760          WinDismissDlg(hwnd,1);
     761          break;
     762
     763        case DID_CANCEL:
     764          WinDismissDlg(hwnd,0);
     765          break;
     766
     767        case IDM_HELP:
     768          if(hwndHelp)
     769            WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
     770                       MPFROM2SHORT(HELP_ASSOC,0),
     771                       MPFROMSHORT(HM_RESOURCEID));
     772          break;
     773
     774        case ASS_ADD:
     775        {
     776            ASSOC temp;
     777            CHAR  dummy[34];
     778
     779            memset(&temp,0,sizeof(ASSOC));
     780            WinQueryDlgItemText(hwnd,ASS_MASK,sizeof(temp.mask),temp.mask);
     781            WinQueryDlgItemText(hwnd,ASS_CL,sizeof(temp.cl),temp.cl);
     782            WinQueryDlgItemText(hwnd,ASS_SIG,sizeof(temp.sig),temp.sig);
     783            rstrip(temp.sig);
     784            if(*temp.sig) {
     785              WinQueryDlgItemText(hwnd,ASS_OFFSET,sizeof(dummy),dummy);
     786              temp.offset = atol(dummy);
     787            }
     788            bstrip(temp.mask);
     789            bstrip(temp.cl);
     790            if(WinQueryButtonCheckstate(hwnd,ASS_DEFAULT))
     791              temp.flags = 0;
     792            else if(WinQueryButtonCheckstate(hwnd,ASS_FULLSCREEN))
     793              temp.flags = FULLSCREEN;
     794            else if(WinQueryButtonCheckstate(hwnd,ASS_MINIMIZED))
     795              temp.flags = MINIMIZED;
     796            else if(WinQueryButtonCheckstate(hwnd,ASS_MAXIMIZED))
     797              temp.flags = MAXIMIZED;
     798            else if(WinQueryButtonCheckstate(hwnd,ASS_INVISIBLE))
     799              temp.flags = INVISIBLE;
     800            if(WinQueryButtonCheckstate(hwnd,ASS_KEEP))
     801              temp.flags |= KEEP;
     802            if(WinQueryButtonCheckstate(hwnd,ASS_DIEAFTER))
     803              temp.flags |= DIEAFTER;
     804            if(WinQueryButtonCheckstate(hwnd,ASS_PROMPT))
     805              temp.flags |= PROMPT;
     806            info = add_association(&temp);
     807            //Add will fail if mask is not changed
     808            if(info)
     809             {
     810
     811              CHAR s[1002 + CCHMAXPATH + 6];
     812
     813              *s = 0;
     814              WinQueryDlgItemText(hwnd,ASS_ENVIRON,1000,s);
     815              bstripcr(s);
     816              if(*s)
     817                PrfWriteProfileString(fmprof,FM3Str,temp.cl,s);
     818              sprintf(s,"%-12s \x1a %-24s %s%s%s",temp.mask,
     819                      temp.cl,(*temp.sig) ?
     820                      "[" : NullStr,(*temp.sig) ? temp.sig : NullStr,
     821                      (*temp.sig) ? "]" : NullStr);
     822              x = (SHORT)WinSendDlgItemMsg(hwnd,
     823                                           ASS_LISTBOX,
     824                                          LM_INSERTITEM,
     825                                           MPFROM2SHORT(LIT_END,0),
     826                                           MPFROMP(s));
     827              if(x >= 0) {
     828                WinSendDlgItemMsg(hwnd,
     829                                  ASS_LISTBOX,
     830                                  LM_SETITEMHANDLE,
     831                                  MPFROMSHORT(x),
     832                                  MPFROMP(info));
     833                WinSendDlgItemMsg(hwnd,
     834                                  ASS_LISTBOX,
     835                                  LM_SELECTITEM,
     836                                  MPFROMSHORT(x),
     837                                  MPFROMSHORT(TRUE));
     838              }
     839              save_associations();
     840            }
     841         }
    734842          break;
    735843
     
    775883          }
    776884          break;
     885      case ASS_REPLACE:
     886               
     887               
     888
     889                       {
     890            ASSOC temp;
     891            CHAR  dummy[34];
     892
     893            y = (SHORT)WinSendDlgItemMsg(hwnd,
     894                                           ASS_LISTBOX,
     895                                           LM_QUERYSELECTION,
     896                                           MPFROMSHORT(LIT_CURSOR),
     897                                            MPVOID);
     898            memset(&temp,0,sizeof(ASSOC));
     899            WinQueryDlgItemText(hwnd,ASS_MASK,sizeof(temp.mask),temp.mask);
     900            WinQueryDlgItemText(hwnd,ASS_CL,sizeof(temp.cl),temp.cl);
     901            WinQueryDlgItemText(hwnd,ASS_SIG,sizeof(temp.sig),temp.sig);
     902            rstrip(temp.sig);
     903            if(*temp.sig) {
     904              WinQueryDlgItemText(hwnd,ASS_OFFSET,sizeof(dummy),dummy);
     905              temp.offset = atol(dummy);
     906            }
     907            bstrip(temp.mask);
     908            bstrip(temp.cl);
     909            if(WinQueryButtonCheckstate(hwnd,ASS_DEFAULT))
     910              temp.flags = 0;
     911            else if(WinQueryButtonCheckstate(hwnd,ASS_FULLSCREEN))
     912              temp.flags = FULLSCREEN;
     913            else if(WinQueryButtonCheckstate(hwnd,ASS_MINIMIZED))
     914              temp.flags = MINIMIZED;
     915            else if(WinQueryButtonCheckstate(hwnd,ASS_MAXIMIZED))
     916              temp.flags = MAXIMIZED;
     917            else if(WinQueryButtonCheckstate(hwnd,ASS_INVISIBLE))
     918              temp.flags = INVISIBLE;
     919            if(WinQueryButtonCheckstate(hwnd,ASS_KEEP))
     920              temp.flags |= KEEP;
     921            if(WinQueryButtonCheckstate(hwnd,ASS_DIEAFTER))
     922              temp.flags |= DIEAFTER;
     923            if(WinQueryButtonCheckstate(hwnd,ASS_PROMPT))
     924              temp.flags |= PROMPT;
     925            info = add_association(&temp);
     926            //Add will fail if mask is not changed
     927            if(info)
     928             {
     929
     930              CHAR s[1002 + CCHMAXPATH + 6];
     931
     932              *s = 0;
     933              WinQueryDlgItemText(hwnd,ASS_ENVIRON,1000,s);
     934              bstripcr(s);
     935              if(*s)
     936                PrfWriteProfileString(fmprof,FM3Str,temp.cl,s);
     937              sprintf(s,"%-12s \x1a %-24s %s%s%s",temp.mask,
     938                      temp.cl,(*temp.sig) ?
     939                      "[" : NullStr,(*temp.sig) ? temp.sig : NullStr,
     940                      (*temp.sig) ? "]" : NullStr);
     941              x = (SHORT)WinSendDlgItemMsg(hwnd,
     942                                           ASS_LISTBOX,
     943                                          LM_INSERTITEM,
     944                                           MPFROM2SHORT(LIT_END,0),
     945                                           MPFROMP(s));
     946              if(x >= 0) {
     947                WinSendDlgItemMsg(hwnd,
     948                                  ASS_LISTBOX,
     949                                  LM_SETITEMHANDLE,
     950                                  MPFROMSHORT(x),
     951                                  MPFROMP(info));
     952                WinSendDlgItemMsg(hwnd,
     953                                  ASS_LISTBOX,
     954                                  LM_SELECTITEM,
     955                                  MPFROMSHORT(x),
     956                                  MPFROMSHORT(TRUE));
     957              }
     958              save_associations();
     959            }
     960         }
     961          {
     962            ASSOC temp;
     963            CHAR  dummy[34];
     964
     965            WinSendDlgItemMsg(hwnd,
     966                                  ASS_LISTBOX,
     967                                  LM_SELECTITEM,
     968                                  MPFROMSHORT(y),
     969                                  MPFROMSHORT(TRUE));
     970            memset(&temp,0,sizeof(ASSOC));
     971            WinQueryDlgItemText(hwnd,ASS_MASK,sizeof(temp.mask),temp.mask);
     972            WinQueryDlgItemText(hwnd,ASS_SIG,sizeof(temp.sig),temp.sig);
     973            rstrip(temp.sig);
     974            if(*temp.sig) {
     975              WinQueryDlgItemText(hwnd,ASS_OFFSET,sizeof(dummy),dummy);
     976              temp.offset = atol(dummy);
     977            }
     978            bstrip(temp.mask);
     979            PrfWriteProfileData(fmprof,
     980                                FM3Str,
     981                                temp.mask,
     982                                NULL,
     983                                0L);
     984            if(!kill_association(&temp))
     985              Runtime_Error(pszSrcFile, __LINE__, "kill_association");
     986            else {
     987             
     988              if(y >= 0) {
     989                WinSendDlgItemMsg(hwnd,
     990                                  ASS_LISTBOX,
     991                                  LM_DELETEITEM,
     992                                  MPFROMSHORT(y),
     993                                  MPVOID);
     994                WinSendDlgItemMsg(hwnd,ASS_LISTBOX,LM_SELECTITEM,
     995                                  MPFROMSHORT(x-1),
     996                                  MPFROMSHORT(TRUE));
     997              }
     998              save_associations();
     999            }
     1000          }
     1001          break;
    7771002      }
    7781003      return 0;
    779   }
     1004   }
    7801005  return WinDefDlgProc(hwnd,msg,mp1,mp2);
    7811006}
Note: See TracChangeset for help on using the changeset viewer.