xaizek / vide (License: GPLv2+) (since 2018-12-07)
Graphical predecessor of vifm that uses GTK+.
<root> / src / widget_utils.c (48cc59d9b3458c769e78b90ad1dceb15b35e3cb4) (9,099B) (mode 100644) [raw]
/* vide
 * Copyright (C) 2000 Ken Steen.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 */


#include "vide.h"

/* These all pretty much do the same thing.. create a widget and add it to
 * the box or table passed.. return the new widget
 */

void
add_tool_button (GtkWidget * toolbar, gchar * name, gchar * description,
		 GtkWidget * icon, GtkSignalFunc button_clicked)
{

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), name, description, "",
			   icon, GTK_SIGNAL_FUNC (button_clicked),
			   GTK_OBJECT (toolbar));
}

GtkWidget *
add_button (GtkWidget * box,
	    gchar * label,
	    gint fill, gint pad, GtkSignalFunc func, gpointer data)
{
  GtkWidget *button;
  button = gtk_button_new_with_label (label);
  gtk_signal_connect (GTK_OBJECT (button), "clicked", func, data);
  gtk_box_pack_start (GTK_BOX (box), button, fill, TRUE, pad);
  gtk_widget_show (button);

  return button;
}

GtkWidget *
add_label (GtkWidget * box, gchar * text, gfloat align, gint fill, gint pad)
{
  GtkWidget *label;
  label = gtk_label_new (text);
  gtk_misc_set_alignment (GTK_MISC (label), align, 0.5);
  gtk_box_pack_start (GTK_BOX (box), label, fill, TRUE, pad);
  gtk_widget_show(label);

  return label;
}

GtkWidget *
add_entry (GtkWidget * box, gchar * init_text, gint fill, gint pad)
{
  GtkWidget *entry;
  entry = gtk_entry_new ();
  if (init_text != NULL)
    gtk_entry_set_text (GTK_ENTRY (entry), init_text);
  gtk_box_pack_start (GTK_BOX (box), entry, fill, TRUE, pad);
  gtk_widget_show (entry);

  return entry;
}

GtkWidget *
add_check_button (GtkWidget * box,
		  gchar * label,
		  gint state,
		  gint fill, gint pad, GtkSignalFunc func, gpointer data)
{
  GtkWidget *check_button;
  check_button = gtk_check_button_new_with_label (label);
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), state);
  gtk_signal_connect (GTK_OBJECT (check_button), "toggled", func, data);
  gtk_box_pack_start (GTK_BOX (box), check_button, fill, TRUE, pad);
  gtk_widget_show (check_button);

  return check_button;
}

GtkWidget *
add_radio_button (GtkWidget * box,
		  gchar * label,
		  GSList * group,
		  gint fill, gint pad, GtkSignalFunc func, gpointer data)
{
  GtkWidget *radio_button;
  radio_button = gtk_radio_button_new_with_label (group, label);
  gtk_signal_connect (GTK_OBJECT (radio_button), "toggled", func, data);
  gtk_box_pack_start (GTK_BOX (box), radio_button, fill, TRUE, pad);
  gtk_widget_show (radio_button);

  return radio_button;
}

GtkWidget *
add_hbox (GtkWidget * box, gint homogen, gint spacing, gint fill, gint pad)
{
  GtkWidget *hbox;
  hbox = gtk_hbox_new (homogen, spacing);
  gtk_box_pack_start (GTK_BOX (box), hbox, fill, TRUE, pad);
  gtk_widget_show (hbox);

  return hbox;
}

GtkWidget *
add_vbox (GtkWidget * box, gint homogen, gint spacing, gint fill, gint pad)
{
  GtkWidget *vbox;
  vbox = gtk_vbox_new (homogen, spacing);
  gtk_box_pack_start (GTK_BOX (box), vbox, fill, TRUE, pad);
  gtk_widget_show (vbox);

  return vbox;
}

GtkWidget *
add_sw (GtkWidget * box,
	GtkPolicyType h_policy, GtkPolicyType v_policy, gint fill, gint pad)
{
  GtkWidget *sw;
  sw = gtk_scrolled_window_new (NULL, NULL);
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), h_policy,
				  v_policy);
  gtk_box_pack_start (GTK_BOX (box), sw, fill, TRUE, pad);
  gtk_widget_show (sw);

  return sw;
}

GtkWidget *
add_separator (GtkWidget * box, gint fill, gint pad)
{
  GtkWidget *sep;

  if (GTK_IS_HBOX (box))
    {
      sep = gtk_vseparator_new ();
      gtk_box_pack_start (GTK_BOX (box), sep, fill, TRUE, pad);
    }
  else if (GTK_IS_VBOX (box))
    {
      sep = gtk_hseparator_new ();
      gtk_box_pack_start (GTK_BOX (box), sep, fill, TRUE, pad);
    }
  else
    {
      return NULL;
    }

  gtk_widget_show (sep);
  return sep;
}

GtkWidget *
add_table (GtkWidget * box,
	   gint rows, gint cols, gint homogen, gint fill, gint pad)
{
  GtkWidget *table;
  table = gtk_table_new (rows, cols, homogen);
  gtk_box_pack_start (GTK_BOX (box), table, fill, TRUE, pad);
  gtk_widget_show (table);

  return table;
}

GtkWidget *
add_label_to_table (GtkWidget * table,
		    gchar * text,
		    gfloat align,
		    gint left, gint right, gint top, gint bottom)
{
  GtkWidget *label;
  label = gtk_label_new (text);
  gtk_misc_set_alignment (GTK_MISC (label), align, 0.5);
  gtk_table_attach_defaults (GTK_TABLE (table), label, left, right, top,
			     bottom);
  gtk_widget_show (label);

  return label;
}

GtkWidget *
add_entry_to_table (GtkWidget * table,
		    gchar * init_text,
		    gint left, gint right, gint top, gint bottom)
{
  GtkWidget *entry;
  entry = gtk_entry_new ();
  if (init_text != NULL)
    gtk_entry_set_text (GTK_ENTRY (entry), init_text);
  gtk_table_attach_defaults (GTK_TABLE (table), entry, left, right, top,
			     bottom);
  gtk_widget_show (entry);

  return entry;
}

GtkWidget *
add_button_to_table (GtkWidget * table,
		     gchar * label,
		     GtkSignalFunc func,
		     gpointer data,
		     gint left, gint right, gint top, gint bottom)
{
  GtkWidget *button;
  button = gtk_button_new_with_label (label);
  gtk_signal_connect (GTK_OBJECT (button), "clicked", func, data);
  gtk_table_attach_defaults (GTK_TABLE (table), button, left, right, top,
			     bottom);
  gtk_widget_show (button);

  return button;
}

GtkWidget *
add_check_button_to_table (GtkWidget * table,
			   gchar * label,
			   gint state,
			   GtkSignalFunc func,
			   gpointer data,
			   gint left, gint right, gint top, gint bottom)
{
  GtkWidget *check_button;
  check_button = gtk_check_button_new_with_label (label);
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), state);
  gtk_signal_connect (GTK_OBJECT (check_button), "toggled", func, data);
  gtk_table_attach_defaults (GTK_TABLE (table), check_button,
			     left, right, top, bottom);
  gtk_widget_show (check_button);

  return check_button;
}

GtkWidget *
add_menu_item (GtkWidget * menu,
	       gchar * label, GtkSignalFunc func, gpointer data)
{
  GtkWidget *menu_item;
  menu_item = gtk_menu_item_new_with_label (label);
  gtk_signal_connect (GTK_OBJECT (menu_item), "activate", func, data);
  gtk_menu_append (GTK_MENU (menu), menu_item);
  gtk_widget_show (menu_item);

  return menu_item;
}

GtkWidget *
add_menu_check_button (GtkWidget * menu,
		       gchar * label,
		       gboolean state, GtkSignalFunc func, gpointer data)
{
  GtkWidget *check;
  check = gtk_check_menu_item_new_with_label (label);
  gtk_signal_connect (GTK_OBJECT (check), "activate", func, data);
  gtk_menu_append (GTK_MENU (menu), check);
  gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (check), state);
  gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (check), TRUE);
  gtk_widget_show (check);

  return check;
}

GtkWidget *
add_menu_separator (GtkWidget * menu)
{
  GtkWidget *menu_item;
  menu_item = gtk_menu_item_new ();
  gtk_menu_append (GTK_MENU (menu), menu_item);
  gtk_widget_show (menu_item);
  gtk_widget_set_sensitive (GTK_WIDGET (menu_item), FALSE);

  return menu_item;
}

GtkWidget *
add_submenu (GtkWidget * menu_bar, gchar * label_text, GtkWidget * menu)
{
  GtkWidget *menu_item;
  GtkWidget *label;

  menu_item = gtk_menu_item_new ();
  label = gtk_widget_new (GTK_TYPE_LABEL,
			  "GtkWidget::visible", TRUE,
			  "GtkWidget::parent", menu_item,
			  "GtkMisc::xalign", 0.0, NULL);
  gtk_label_parse_uline (GTK_LABEL (label), label_text);
  gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu);
  gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), menu_item);
  gtk_widget_show (menu_item);

  return menu_item;
}



GtkWidget *
create_pixmap (GtkWidget * widget, const gchar * file)
{

  GdkColormap *colormap;
  GdkPixmap *gdkpixmap;
  GdkBitmap *mask;
  GtkWidget *pixmap;
  GtkStyle *style;

  colormap = gtk_widget_get_colormap (app.main_window);
  style = gtk_widget_get_style (app.main_window);
  gdkpixmap = gdk_pixmap_colormap_create_from_xpm (NULL, colormap, &mask,
						   NULL, file);
  pixmap = gtk_pixmap_new (gdkpixmap, mask);
  gdk_pixmap_unref (gdkpixmap);
  gdk_bitmap_unref (mask);
  return pixmap;
}

/*
GtkWidget *
add_submenu(GtkWidget *menu_bar, gchar *label, GtkWidget *menu)
{
  GtkWidget *menu_item;
  menu_item = gtk_menu_item_new_with_label(label);
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu);
  gtk_menu_bar_append(GTK_MENU_BAR(menu_bar), menu_item);
  gtk_widget_show(menu_item);
 
  return menu_item;
}
*/
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/vide

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/vide

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master