Exemplo n.º 1
0
static void
gtk_combo_button_destroy (GtkObject * combo_button)
{
  gtk_widget_destroy (GTK_COMBO_BUTTON (combo_button)->popwin);
  gtk_widget_unref (GTK_COMBO_BUTTON (combo_button)->popwin);

  if (GTK_OBJECT_CLASS (parent_class)->destroy)
    (*GTK_OBJECT_CLASS (parent_class)->destroy) (combo_button);
}
Exemplo n.º 2
0
static void
gtk_combo_button_size_allocate (GtkWidget     *widget,
			 GtkAllocation *allocation)
{
  GtkComboButton *combo_button;
  GtkAllocation button_allocation;

  g_return_if_fail (widget != NULL);
  g_return_if_fail (GTK_IS_COMBO_BUTTON (widget));
  g_return_if_fail (allocation != NULL);

  GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation);

  combo_button = GTK_COMBO_BUTTON (widget);

  button_allocation = combo_button->button->allocation;
/*
  button_allocation.width = MIN(button_allocation.width, 
                                combo_button->button->requisition.width);
  button_allocation.height = MIN(button_allocation.height, 
                               combo_button->button->requisition.height);
  button_allocation.x += (combo_button->button->allocation.width-
                        button_allocation.width) / 2;
  button_allocation.y += (combo_button->button->allocation.height-
                        button_allocation.height) / 2;
*/

  gtk_widget_size_allocate (combo_button->button, &button_allocation);

  button_allocation.x=combo_button->button->allocation.x +
                      combo_button->button->allocation.width;
  button_allocation.width=combo_button->arrow->requisition.width;
  gtk_widget_size_allocate (combo_button->arrow, &button_allocation);

}
Exemplo n.º 3
0
static void
gtk_combo_button_size_request (GtkWidget *widget,
			   GtkRequisition *requisition)
{
  GtkComboButton *combo_button;
  GtkRequisition box_requisition;

  g_return_if_fail (widget != NULL);
  g_return_if_fail (GTK_IS_COMBO_BUTTON (widget));
  g_return_if_fail (requisition != NULL);

  GTK_WIDGET_CLASS (parent_class)->size_request (widget, &box_requisition);

  combo_button=GTK_COMBO_BUTTON(widget);
/*
  size = MIN(box_requisition.width, box_requisition.height);
  size = MIN(combo_button->button->requisition.width, box_requisition.height);
  size = MIN(combo_button->button->requisition.width, box_requisition.height);

  widget->requisition.height = size;
  widget->requisition.width = size + combo_button->arrow->requisition.width;
*/
  widget->requisition.height = box_requisition.height;
  widget->requisition.width = box_requisition.width;
}
Exemplo n.º 4
0
static gint
gtk_combo_button_button_press (GtkWidget * widget, GdkEvent * event, gpointer data)
{
  GtkWidget *child;

  child = gtk_get_event_widget (event);

  if (child != widget)
    {
      while (child)
	{
	  if (child == widget)
	    return FALSE;
	  child = child->parent;
	}
    }

  gtk_widget_hide (widget);
  gtk_grab_remove (widget);
  gdk_pointer_ungrab (GDK_CURRENT_TIME);
  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(GTK_COMBO_BUTTON(data)->arrow), FALSE);

  return TRUE;
}
Exemplo n.º 5
0
static void
gtk_border_combo_realize(GtkWidget *widget)
{
  GtkComboButton *combo;
  GtkBorderCombo *border_combo;
  GtkWidget *pixmap;
  GtkRequisition requisition;
  GdkPixmap *border_pixmap;
  gint i,j;
  gchar *border[18];

  g_return_if_fail (widget != NULL);
  g_return_if_fail (GTK_IS_BORDER_COMBO (widget));

  GTK_WIDGET_CLASS (parent_class)->realize (widget);

  combo=GTK_COMBO_BUTTON(widget);
  border_combo=GTK_BORDER_COMBO(widget);

  border_combo->table = gtk_table_new (border_combo->nrows, border_combo->ncols, TRUE);

  border_combo->button = (GtkWidget ***)g_malloc(border_combo->nrows*sizeof(GtkWidget **));

  for(i = 0; i < border_combo->nrows; i++){

    border_combo->button[i] = (GtkWidget **)g_malloc(border_combo->ncols*sizeof(GtkWidget *));

    for(j = 0; j < border_combo->ncols; j++){

        border_combo->button[i][j] = gtk_toggle_button_new();
        gtk_button_set_relief(GTK_BUTTON(border_combo->button[i][j]),
                              GTK_RELIEF_NONE);
        gtk_table_attach (GTK_TABLE(border_combo->table), 
                          border_combo->button[i][j],
                          j, j+1, i, i+1, GTK_SHRINK, GTK_SHRINK, 0, 0);

        gtk_widget_set_usize(border_combo->button[i][j], 24, 24);
        gtk_widget_show(border_combo->button[i][j]); 
        gtk_signal_connect (GTK_OBJECT (border_combo->button[i][j]), "toggled",
		            (GtkSignalFunc) gtk_border_combo_update, 
                            border_combo);

    }
  }

  gtk_container_add(GTK_CONTAINER(GTK_COMBO_BUTTON(border_combo)->frame), 
                    border_combo->table);
  gtk_widget_show(border_combo->table);

  if(!GTK_BIN(combo->button)->child && widget->window){
       border_pixmap=gdk_pixmap_create_from_xpm_d(
                             widget->window,
                             NULL,
                             &(combo->button->style->bg[GTK_STATE_NORMAL]),
                             xpm_border);    

       pixmap=gtk_pixmap_new(border_pixmap, NULL);
       gtk_container_add(GTK_CONTAINER(combo->button), pixmap);
       gtk_widget_show(pixmap);
  }

  GTK_WIDGET_CLASS (parent_class)->size_request (widget, &requisition); 

  /* EMPTY */
  for(i=0; i<18; i++)
        border[i]=xpm_border[i];
  pixmap=create_border_pixmap(border_combo, border);
  gtk_container_add(GTK_CONTAINER(border_combo->button[0][0]), pixmap);
  gtk_widget_show(pixmap);

  /* TOP */
  border[4]=full;
  pixmap=create_border_pixmap(border_combo, border);
  gtk_container_add(GTK_CONTAINER(border_combo->button[0][1]), pixmap);
  gtk_widget_show(pixmap);


  /* BOTTOM */
  border[4]=dotted;
  border[16]=full;
  pixmap=create_border_pixmap(border_combo, border);
  gtk_container_add(GTK_CONTAINER(border_combo->button[0][2]), pixmap);
  gtk_widget_show(pixmap);


  /* RIGHT */
  border[16]=dotted;
  for(i=5; i<16; i=i+2)
        border[i]=side001;
  pixmap=create_border_pixmap(border_combo, border);
  gtk_container_add(GTK_CONTAINER(border_combo->button[0][3]), pixmap);
  gtk_widget_show(pixmap);


  /* LEFT */
  for(i=5; i<16; i=i+2)
        border[i]=side100;
  pixmap=create_border_pixmap(border_combo, border);
  gtk_container_add(GTK_CONTAINER(border_combo->button[1][0]), pixmap);
  gtk_widget_show(pixmap);


  /* v101 */
  for(i=5; i<16; i=i+2)
        border[i]=side101;
  pixmap=create_border_pixmap(border_combo, border);
  gtk_container_add(GTK_CONTAINER(border_combo->button[1][1]), pixmap);
  gtk_widget_show(pixmap);
 

  /* h101 */
  for(i=5; i<16; i=i+2)
        border[i]=side000;
  border[4]=full;
  border[16]=full;  
  pixmap=create_border_pixmap(border_combo, border);
  gtk_container_add(GTK_CONTAINER(border_combo->button[1][2]), pixmap);
  gtk_widget_show(pixmap);

  /* v111 */
  border[4]=dotted;
  border[16]=dotted;
  for(i=5; i<16; i=i+2)
        border[i]=side111;
  pixmap=create_border_pixmap(border_combo, border);
  gtk_container_add(GTK_CONTAINER(border_combo->button[1][3]), pixmap);
  gtk_widget_show(pixmap);  

  /* h111 */
  for(i=5; i<16; i=i+2)
        border[i]=side000;
  border[4]=full;
  border[16]=full;
  border[10]=full;
  pixmap=create_border_pixmap(border_combo, border);
  gtk_container_add(GTK_CONTAINER(border_combo->button[2][0]), pixmap);
  gtk_widget_show(pixmap);

  /* CROSS */
  border[4]=dotted;
  border[16]=dotted;
  for(i=5; i<16; i=i+2)
        border[i]=side010;
  pixmap=create_border_pixmap(border_combo, border);
  gtk_container_add(GTK_CONTAINER(border_combo->button[2][1]), pixmap);
  gtk_widget_show(pixmap);


  /* sides */
  for(i=5; i<16; i=i+2)
        border[i]=side101;
  border[4]=full;
  border[16]=full;
  border[10]=dotted;
  pixmap=create_border_pixmap(border_combo, border);
  gtk_container_add(GTK_CONTAINER(border_combo->button[2][2]), pixmap);
  gtk_widget_show(pixmap);

  /* FULL */
  for(i=5; i<16; i=i+2)
        border[i]=side111;
  border[4]=full;
  border[10]=full;
  border[16]=full;
  pixmap=create_border_pixmap(border_combo, border);
  gtk_container_add(GTK_CONTAINER(border_combo->button[2][3]), pixmap);
  gtk_widget_show(pixmap);

  gtk_signal_connect (GTK_OBJECT (combo->button), "clicked",
		      (GtkSignalFunc) gtk_border_combo_update, 
                       border_combo);
}
Exemplo n.º 6
0
static void
gtk_border_combo_update (GtkWidget * widget, GtkBorderCombo * border_combo)
{
  gint i,j;
  gint focus_row = -1, focus_col = -1;
  gint new_row = -1, new_col = -1;
  gint new_selection=FALSE;
  gint row,column;
  GdkPixmap *window;

  row=border_combo->row;
  column=border_combo->column;

  for(i=0 ; i<border_combo->nrows; i++)
    for(j=0; j<border_combo->ncols; j++){    
      if(GTK_WIDGET_HAS_FOCUS(border_combo->button[i][j])){
            focus_row=i;
            focus_col=j;
      }
      if(border_combo->button[i][j]->state==GTK_STATE_ACTIVE){
        if(i != row || j != column){
            new_selection=TRUE;
            new_row=i;
            new_col=j;
        }
      }
    }

  if(!new_selection && focus_row >= 0 && focus_col >= 0){
     if(focus_row != row || focus_col != column){
       new_selection = TRUE;
       new_row=focus_row;
       new_col=focus_col;
     }
  }

  if(new_selection){
      if(row >= 0 && column >= 0){
          gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(border_combo->button[row][column]), FALSE);
          gtk_widget_queue_draw(border_combo->button[row][column]);
      }
      border_combo->row=new_row;
      border_combo->column=new_col;
      window=GTK_PIXMAP(GTK_BIN(GTK_COMBO_BUTTON(border_combo)->button)
                                                         ->child)->pixmap;
      gdk_window_copy_area(window,
                           widget->style->fg_gc[GTK_STATE_NORMAL],
                           0,0,
 GTK_PIXMAP(GTK_BIN(border_combo->button[new_row][new_col])->child)->pixmap,
                           0,0,16,16);

      gtk_widget_queue_draw(GTK_COMBO_BUTTON(border_combo)->button);
      
      gtk_signal_emit (GTK_OBJECT(border_combo), border_combo_signals[CHANGED],
                       new_row * border_combo->ncols + new_col);
  }

  if(!new_selection && row >= 0 && column >= 0){
          gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(border_combo->button[row][column]), TRUE);
          gtk_widget_queue_draw(border_combo->button[row][column]);

          gtk_signal_emit (GTK_OBJECT(border_combo),                     
                           border_combo_signals[CHANGED],
                           row * border_combo->ncols + column);
  }


  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(GTK_COMBO_BUTTON(border_combo)->arrow), FALSE);

  gtk_grab_remove(GTK_COMBO_BUTTON(border_combo)->popwin);
  gdk_pointer_ungrab(GDK_CURRENT_TIME);
  gtk_widget_hide(GTK_COMBO_BUTTON(border_combo)->popwin);
  return;

}