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

📄 gtkclist.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 5 页
字号:
  if (clist->column[column].area.width < clist->column[column].min_width)    gtk_clist_set_column_width (clist, column,clist->column[column].min_width);}voidgtk_clist_set_column_max_width (GtkCList *clist,				gint      column,				gint      max_width){  g_return_if_fail (clist != NULL);  g_return_if_fail (GTK_IS_CLIST (clist));  if (column < 0 || column >= clist->columns)    return;  if (clist->column[column].max_width == max_width)    return;  if (clist->column[column].min_width >= 0 && max_width >= 0 &&      clist->column[column].min_width > max_width)    clist->column[column].max_width = clist->column[column].min_width;  else    clist->column[column].max_width = max_width;    if (clist->column[column].area.width > clist->column[column].max_width)    gtk_clist_set_column_width (clist, column,clist->column[column].max_width);}/* PRIVATE COLUMN FUNCTIONS *   column_auto_resize *   real_resize_column *   abort_column_resize *   size_allocate_title_buttons *   size_allocate_columns *   list_requisition_width *   new_column_width *   column_button_create *   column_button_clicked *   column_title_passive_func */static voidcolumn_auto_resize (GtkCList    *clist,		    GtkCListRow *clist_row,		    gint         column,		    gint         old_width){  /* resize column if needed for auto_resize */  GtkRequisition requisition;  if (!clist->column[column].auto_resize ||      GTK_CLIST_AUTO_RESIZE_BLOCKED(clist))    return;  if (clist_row)    GTK_CLIST_CLASS_FW (clist)->cell_size_request (clist, clist_row,						   column, &requisition);  else    requisition.width = 0;  if (requisition.width > clist->column[column].width)    gtk_clist_set_column_width (clist, column, requisition.width);  else if (requisition.width < old_width &&	   old_width == clist->column[column].width)    {      GList *list;      gint new_width = 0;      /* run a "gtk_clist_optimal_column_width" but break, if       * the column doesn't shrink */      if (GTK_CLIST_SHOW_TITLES(clist) && clist->column[column].button)	new_width = (clist->column[column].button->requisition.width -		     (CELL_SPACING + (2 * COLUMN_INSET)));      else	new_width = 0;      for (list = clist->row_list; list; list = list->next)	{	  GTK_CLIST_CLASS_FW (clist)->cell_size_request	    (clist, GTK_CLIST_ROW (list), column, &requisition);	  new_width = MAX (new_width, requisition.width);	  if (new_width == clist->column[column].width)	    break;	}      if (new_width < clist->column[column].width)	gtk_clist_set_column_width	  (clist, column, MAX (new_width, clist->column[column].min_width));    }}static voidreal_resize_column (GtkCList *clist,		    gint      column,		    gint      width){  g_return_if_fail (clist != NULL);  g_return_if_fail (GTK_IS_CLIST (clist));  if (column < 0 || column >= clist->columns)    return;    if (width < MAX (COLUMN_MIN_WIDTH, clist->column[column].min_width))    width = MAX (COLUMN_MIN_WIDTH, clist->column[column].min_width);  if (clist->column[column].max_width >= 0 &&      width > clist->column[column].max_width)    width = clist->column[column].max_width;  clist->column[column].width = width;  clist->column[column].width_set = TRUE;  /* FIXME: this is quite expensive to do if the widget hasn't   *        been size_allocated yet, and pointless. Should   *        a flag be kept   */  size_allocate_columns (clist, TRUE);  size_allocate_title_buttons (clist);  CLIST_REFRESH (clist);}static voidabort_column_resize (GtkCList *clist){  g_return_if_fail (clist != NULL);  g_return_if_fail (GTK_IS_CLIST (clist));  if (!GTK_CLIST_IN_DRAG(clist))    return;  GTK_CLIST_UNSET_FLAG (clist, CLIST_IN_DRAG);  gtk_grab_remove (GTK_WIDGET (clist));  gdk_pointer_ungrab (GDK_CURRENT_TIME);  clist->drag_pos = -1;  if (clist->x_drag >= 0 && clist->x_drag <= clist->clist_window_width - 1)    draw_xor_line (clist);  if (GTK_CLIST_ADD_MODE(clist))    {      gdk_gc_set_line_attributes (clist->xor_gc, 1, GDK_LINE_ON_OFF_DASH, 0,0);      gdk_gc_set_dashes (clist->xor_gc, 0, "\4\4", 2);    }}static voidsize_allocate_title_buttons (GtkCList *clist){  GtkAllocation button_allocation;  gint last_column;  gint last_button = 0;  gint i;  if (!GTK_WIDGET_REALIZED (clist))    return;  button_allocation.x = clist->hoffset;  button_allocation.y = 0;  button_allocation.width = 0;  button_allocation.height = clist->column_title_area.height;  /* find last visible column */  for (last_column = clist->columns - 1; last_column >= 0; last_column--)    if (clist->column[last_column].visible)      break;  for (i = 0; i < last_column; i++)    {      if (!clist->column[i].visible)	{	  last_button = i + 1;	  gdk_window_hide (clist->column[i].window);	  continue;	}      button_allocation.width += (clist->column[i].area.width +				  CELL_SPACING + 2 * COLUMN_INSET);      if (!clist->column[i + 1].button)	{	  gdk_window_hide (clist->column[i].window);	  continue;	}      gtk_widget_size_allocate (clist->column[last_button].button,				&button_allocation);      button_allocation.x += button_allocation.width;      button_allocation.width = 0;      if (clist->column[last_button].resizeable)	{	  gdk_window_show (clist->column[last_button].window);	  gdk_window_move_resize (clist->column[last_button].window,				  button_allocation.x - (DRAG_WIDTH / 2), 				  0, DRAG_WIDTH,				  clist->column_title_area.height);	}      else	gdk_window_hide (clist->column[last_button].window);      last_button = i + 1;    }  button_allocation.width += (clist->column[last_column].area.width +			      2 * (CELL_SPACING + COLUMN_INSET));  gtk_widget_size_allocate (clist->column[last_button].button,			    &button_allocation);  if (clist->column[last_button].resizeable)    {      button_allocation.x += button_allocation.width;      gdk_window_show (clist->column[last_button].window);      gdk_window_move_resize (clist->column[last_button].window,			      button_allocation.x - (DRAG_WIDTH / 2), 			      0, DRAG_WIDTH, clist->column_title_area.height);    }  else    gdk_window_hide (clist->column[last_button].window);}static voidsize_allocate_columns (GtkCList *clist,		       gboolean  block_resize){  gint xoffset = CELL_SPACING + COLUMN_INSET;  gint last_column;  gint i;  /* find last visible column and calculate correct column width */  for (last_column = clist->columns - 1;       last_column >= 0 && !clist->column[last_column].visible; last_column--);  if (last_column < 0)    return;  for (i = 0; i <= last_column; i++)    {      if (!clist->column[i].visible)	continue;      clist->column[i].area.x = xoffset;      if (clist->column[i].width_set)	{	  if (!block_resize && GTK_CLIST_SHOW_TITLES(clist) &&	      clist->column[i].auto_resize && clist->column[i].button)	    {	      gint width;	      width = (clist->column[i].button->requisition.width -		       (CELL_SPACING + (2 * COLUMN_INSET)));	      if (width > clist->column[i].width)		gtk_clist_set_column_width (clist, i, width);	    }	  clist->column[i].area.width = clist->column[i].width;	  xoffset += clist->column[i].width + CELL_SPACING + (2* COLUMN_INSET);	}      else if (GTK_CLIST_SHOW_TITLES(clist) && clist->column[i].button)	{	  clist->column[i].area.width =	    clist->column[i].button->requisition.width -	    (CELL_SPACING + (2 * COLUMN_INSET));	  xoffset += clist->column[i].button->requisition.width;	}    }  clist->column[last_column].area.width = clist->column[last_column].area.width    + MAX (0, clist->clist_window_width + COLUMN_INSET - xoffset);}static gintlist_requisition_width (GtkCList *clist) {  gint width = CELL_SPACING;  gint i;  for (i = clist->columns - 1; i >= 0; i--)    {      if (!clist->column[i].visible)	continue;      if (clist->column[i].width_set)	width += clist->column[i].width + CELL_SPACING + (2 * COLUMN_INSET);      else if (GTK_CLIST_SHOW_TITLES(clist) && clist->column[i].button)	width += clist->column[i].button->requisition.width;    }  return width;}/* this function returns the new width of the column being resized given * the column and x position of the cursor; the x cursor position is passed * in as a pointer and automagicly corrected if it's beyond min/max limits */static gintnew_column_width (GtkCList *clist,		  gint      column,		  gint     *x){  gint xthickness = GTK_WIDGET (clist)->style->klass->xthickness;  gint width;  gint cx;  gint dx;  gint last_column;  /* first translate the x position from widget->window   * to clist->clist_window */  cx = *x - xthickness;  for (last_column = clist->columns - 1;       last_column >= 0 && !clist->column[last_column].visible; last_column--);  /* calculate new column width making sure it doesn't end up   * less than the minimum width */  dx = (COLUMN_LEFT_XPIXEL (clist, column) + COLUMN_INSET +	(column < last_column) * CELL_SPACING);  width = cx - dx;  if (width < MAX (COLUMN_MIN_WIDTH, clist->column[column].min_width))    {      width = MAX (COLUMN_MIN_WIDTH, clist->column[column].min_width);      cx = dx + width;      *x = cx + xthickness;    }  else if (clist->column[column].max_width >= COLUMN_MIN_WIDTH &&	   width > clist->column[column].max_width)    {      width = clist->column[column].max_width;      cx = dx + clist->column[column].max_width;      *x = cx + xthickness;    }        if (cx < 0 || cx > clist->clist_window_width)    *x = -1;  return width;}static voidcolumn_button_create (GtkCList *clist,		      gint      column){  GtkWidget *button;  gtk_widget_push_composite_child ();  button = clist->column[column].button = gtk_button_new ();  gtk_widget_pop_composite_child ();  if (GTK_WIDGET_REALIZED (clist) && clist->title_window)    gtk_widget_set_parent_window (clist->column[column].button,				  clist->title_window);  gtk_widget_set_parent (button, GTK_WIDGET (clist));  gtk_signal_connect (GTK_OBJECT (button), "clicked",		      (GtkSignalFunc) column_button_clicked,		      (gpointer) clist);  gtk_widget_show (button);}static voidcolumn_button_clicked (GtkWidget *widget,		       gpointer   data){  gint i;  GtkCList *clist;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_CLIST (data));  clist = GTK_CLIST (data);  /* find the column who's button was pressed */  for (i = 0; i < clist->columns; i++)    if (clist->column[i].button == widget)      break;  gtk_signal_emit (GTK_OBJECT (clist), clist_signals[CLICK_COLUMN], i);}static gintcolumn_title_passive_func (GtkWidget *widget, 			   GdkEvent  *event,			   gpointer   data){  g_return_val_if_fail (event != NULL, FALSE);    switch (event->type)    {    case GDK_MOTION_NOTIFY:    case GDK_BUTTON_PRESS:    case GDK_2BUTTON_PRESS:    case GDK_3BUTTON_PRESS:    case GDK_BUTTON_RELEASE:    case GDK_ENTER_NOTIFY:    case GDK_LEAVE_NOTIFY:      return TRUE;    default:      break;    }  return FALSE;}/* PUBLIC CELL FUNCTIONS *   gtk_clist_get_cell_type *   gtk_clist_set_text *   gtk_clist_get_text *   gtk_clist_set_pixmap *   gtk_clist_get_pixmap *   gtk_clist_set_pixtext *   gtk_clist_get_pixtext *   gtk_clist_set_shift */GtkCellType gtk_clist_get_cell_type (GtkCList *clist,			 gint      row,			 gint      column){  GtkCListRow *clist_row;  g_return_val_if_fail (clist != NULL, -1);  g_return_val_if_fail (GTK_IS_CLIST (clist), -1);  if (row < 0 || row >= clist->rows)    return -1;  if (column < 0 || column >= clist->columns)    return -1;  clist_row = (g_list_nth (clist->row_list, row))->data;  return clist_row->cell[column].type;}voidgtk_clist_set_text (GtkCList    *clist,		    gint         row,		    gint         column,		    const gchar *text)

⌨️ 快捷键说明

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