⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m_global.c

📁 ncurses-5.4
💻 C
📖 第 1 页 / 共 2 页
字号:
  int l;    assert(menu);  menu->height  = 1 + menu->spc_rows * (menu->arows - 1);  l = menu->namelen + menu->marklen;  if ( (menu->opt & O_SHOWDESC) && (menu->desclen > 0) )    l += (menu->desclen + menu->spc_desc);    menu->itemlen = l;  l *= menu->cols;  l += (menu->cols-1)*menu->spc_cols; /* for the padding between the columns */  menu->width = l;}  /*---------------------------------------------------------------------------|   Facility      :  libnmenu  |   Function      :  void _nc_Link_Item(MENU *menu)|   |   Description   :  Statically calculate for every item its four neighbors.|                    This depends on the orientation of the menu. This|                    static approach simplifies navigation in the menu a lot.||   Return Values :  -+--------------------------------------------------------------------------*/NCURSES_EXPORT(void)_nc_Link_Items (MENU * menu){  if (menu && menu->items && *(menu->items))    {      int i,j;      ITEM *item;      int Number_Of_Items = menu->nitems;      int col = 0, row = 0;      int Last_in_Row;      int Last_in_Column;      bool cycle = (menu->opt & O_NONCYCLIC) ? FALSE : TRUE;            menu->status &= ~_LINK_NEEDED;            if (menu->opt & O_ROWMAJOR)	{	  int Number_Of_Columns = menu->cols;	  	  for(i=0; i < Number_Of_Items; i++)	    {	      item = menu->items[i];	      	      Last_in_Row = row * Number_Of_Columns + (Number_Of_Columns-1);	      	      item->left  = (col) ? 		/* if we are not in the leftmost column, we can use the		   predecessor in the items array */		menu->items[i-1] :		  (cycle ? menu->items[(Last_in_Row>=Number_Of_Items) ? 				       Number_Of_Items-1:				       Last_in_Row] : 		   (ITEM *)0 );	      	      item->right = (  (col < (Number_Of_Columns-1)) && 			     ((i+1) < Number_Of_Items) 			     ) ? 			       menu->items[i+1] :				 ( cycle ? menu->items[row * Number_Of_Columns] : 				  (ITEM *)0				  );	      	      Last_in_Column = (menu->rows-1) * Number_Of_Columns + col;	      	      item->up    = (row) ? menu->items[i-Number_Of_Columns] :		(cycle ? menu->items[(Last_in_Column>=Number_Of_Items) ?				     Number_Of_Items-1 : 				     Last_in_Column] : 		 (ITEM *)0);	      	      item->down  = ( (i+Number_Of_Columns) < Number_Of_Items ) 		? 		  menu->items[i + Number_Of_Columns] :		    (cycle ? menu->items[(row+1)<menu->rows ?					 Number_Of_Items-1:col] : 		     (ITEM *)0);	      item->x = col;	      item->y = row;	      if ( ++col == Number_Of_Columns )		{		  row++;		  col = 0;		}	    }	}      else	{	  int Number_Of_Rows = menu->rows;	  	  for(j=0; j<Number_Of_Items; j++)	    {	      item = menu->items[i=(col * Number_Of_Rows + row)];	      	      Last_in_Column = (menu->cols-1) * Number_Of_Rows + row;	      	      item->left  = (col) ? 		menu->items[i - Number_Of_Rows] :		  (cycle ? (Last_in_Column >= Number_Of_Items ) ? 		   menu->items[Last_in_Column-Number_Of_Rows] : 		   menu->items[Last_in_Column] : 		   (ITEM *)0 );	      	      item->right = ((i + Number_Of_Rows) <Number_Of_Items) 		? 		  menu->items[i + Number_Of_Rows] :		    (cycle ? menu->items[row] : (ITEM *)0);	      	      Last_in_Row = col * Number_Of_Rows + (Number_Of_Rows - 1);	      	      item->up    = (row) ? 		menu->items[i-1] :		  (cycle ?		   menu->items[(Last_in_Row>=Number_Of_Items) ? 			       Number_Of_Items-1:			       Last_in_Row] :		   (ITEM *)0);	      	      item->down  = (row < (Number_Of_Rows-1)) 		? 		  (menu->items[((i+1)<Number_Of_Items) ? 			       i+1 :			       (col-1)*Number_Of_Rows + row + 1]) :				 (cycle ?				  menu->items[col * Number_Of_Rows] :				  (ITEM *)0				  );	      	      item->x = col;	      item->y = row;	      if ( (++row) == Number_Of_Rows )		{		  col++;		  row = 0;		}	    }	}    }}/*---------------------------------------------------------------------------|   Facility      :  libnmenu  |   Function      :  void _nc_Show_Menu(const MENU *menu)|   |   Description   :  Update the window that is associated with the menu||   Return Values :  -+--------------------------------------------------------------------------*/NCURSES_EXPORT(void)_nc_Show_Menu (const MENU *menu){  WINDOW *win;  int maxy, maxx;    assert(menu);  if ( (menu->status & _POSTED) && !(menu->status & _IN_DRIVER) )    {      /* adjust the internal subwindow to start on the current top */      assert(menu->sub);      mvderwin(menu->sub,menu->spc_rows * menu->toprow,0);      win = Get_Menu_Window(menu);            maxy = getmaxy(win);      maxx = getmaxx(win);	             if (menu->height < maxy) 	maxy = menu->height;      if (menu->width < maxx) 	maxx = menu->width;            copywin(menu->sub,win,0,0,0,0,maxy-1,maxx-1,0);      pos_menu_cursor(menu);    }	}	/*---------------------------------------------------------------------------|   Facility      :  libnmenu  |   Function      :  void _nc_New_TopRow_and_CurrentItem(|                            MENU *menu, |                            int new_toprow, |                            ITEM *new_current_item)|   |   Description   :  Redisplay the menu so that the given row becomes the|                    top row and the given item becomes the new current|                    item.||   Return Values :  -+--------------------------------------------------------------------------*/NCURSES_EXPORT(void)_nc_New_TopRow_and_CurrentItem(MENU *menu, int new_toprow, ITEM *new_current_item){  ITEM *cur_item;  bool mterm_called = FALSE;  bool iterm_called = FALSE;    assert(menu);  if (menu->status & _POSTED)    {      if (new_current_item != menu->curitem)	{	  Call_Hook(menu,itemterm);	  iterm_called = TRUE;	}      if (new_toprow != menu->toprow)	{	  Call_Hook(menu,menuterm);	  mterm_called = TRUE;	}			            cur_item  = menu->curitem;      assert(cur_item);      menu->toprow  = new_toprow;      menu->curitem = new_current_item;			            if (mterm_called)	{	  Call_Hook(menu,menuinit);	}      if (iterm_called)	{	  /* this means, move from the old current_item to the new one... */	  Move_To_Current_Item( menu, cur_item );	  Call_Hook(menu,iteminit);	}      if (mterm_called || iterm_called)	{	  _nc_Show_Menu(menu);	}      else	pos_menu_cursor(menu);    }  else    { /* if we are not posted, this is quite simple */      menu->toprow  = new_toprow;      menu->curitem = new_current_item;    }}/* m_global.c ends here */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -