// twfilt.c // // These functions dynamically generate the People and Event filtering menus. // // by John D. de Boer #include "twist.h" #include "twindow.h" extern int ITEMS; extern FilterItem ***Items; extern MenuRef PeopleMenu,EventMenu; int PITEMS,EITEMS; // number of items in each menu // "People" and "Event" menu choices void InsertFilterMenus(void) { int i; FilterItem *F; InsertMenu(PeopleMenu,0); InsertMenu(EventMenu,0); for (i=0;imenu) InsertMenu(F->menu,-1); } } void AdjustFilterMenus(void) { int i; FilterItem *F; SubItem **H; for (i=0;imenu) AdjustFilterMenu(F); else if (F->item && *(F->item)) { H= (*(F->item))[0]; if (H && *H) CheckMenuItem(F->people ? PeopleMenu : EventMenu,F->place,(*H)->show); } } } bool FilterCommand(window *W, UInt32 C) { int i; FilterItem *F; if (!W) return 0; C-='Item'; for (i=0;imenu) { if (range(C,F->num)) { DoFilterSubMenu(F,C + 1,-1); SetUpOrder(); Redisplay(); return 1; } C-=F->num; if (C==0) { DoFilterSubMenu(F,F->num + 2,-1); SetUpOrder(); Redisplay(); return 1; } if (C==1) { DoFilterSubMenu(F,F->num + 3,-1); SetUpOrder(); Redisplay(); return 1; } C-=2; } else { if (C==0) { DoFilterItem(F,-1); SetUpOrder(); Redisplay(); return 1; } C--; } } if (!range(C,4)) return 0; for (i=0;ipeople != (C<2)) continue; DoFilterItem(F,(C==0) || (C==2)); } SetUpOrder(); Redisplay(); return 1; }