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

📄 m_global.c

📁 ncurses 库 可能有用酒用 没用就算了 我觉得还可以用
💻 C
📖 第 1 页 / 共 2 页
字号:
      if (name)	{	  check = _nc_Calculate_Text_Width(&((*items)->name));	}      else	{	  check = _nc_Calculate_Text_Width(&((*items)->description));	}      if (check > width)	width = check;    }  T(("calculate_actual_width %s = %d/%d",     name ? "name" : "desc",     width,     name ? menu->namelen : menu->desclen));  width += 2;			/* FIXME - need this? */  return width;}#else#define calculate_actual_width(menu, name) (name ? menu->namelen : menu->desclen)#endif/*---------------------------------------------------------------------------|   Facility      :  libnmenu  |   Function      :  void _nc_Calculate_Item_Length_and_Width(MENU *menu)|   |   Description   :  Calculate the length of an item and the width of the|                    whole menu.||   Return Values :  -+--------------------------------------------------------------------------*/NCURSES_EXPORT(void)_nc_Calculate_Item_Length_and_Width(MENU * menu){  int l;  assert(menu);  menu->height = 1 + menu->spc_rows * (menu->arows - 1);  l = calculate_actual_width(menu, TRUE);  l += menu->marklen;  if ((menu->opt & O_SHOWDESC) && (menu->desclen > 0))    {      l += calculate_actual_width(menu, FALSE);      l += 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;  T(("_nc_CalculateItem_Length_and_Width columns %d, item %d, width %d",     menu->cols,     menu->itemlen,     menu->width));}/*---------------------------------------------------------------------------|   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 + -