[prev in list] [next in list] [prev in thread] [next in thread] 

List:       aumix
Subject:    [aumix] patch to aumix 2.4:  hide unwanted controls in GTK+ window
From:       Trevor Johnson <trevor () jpj ! net>
Date:       2000-03-23 23:25:20
[Download RAW message or body]

This isn't finished yet:  I haven't figured out how to hide the numbers
and haven't figured out how to stop the widgets from being destroyed once
they're hidden, so they may be shown again later (the note from Havoc
Pennington hints at a way).
__
Trevor Johnson

diff -ruN aumix-2.4/src/gtk.c aumix-2.5a/src/gtk.c
--- aumix-2.4/src/gtk.c	Thu Mar 23 01:01:18 2000
+++ aumix-2.5a/src/gtk.c	Thu Mar 23 23:11:38 2000
@@ -28,8 +28,13 @@
 #include "interactive.h"
 #include <signal.h>		/* SIGALRM */
 
-int             items[SOUND_MIXER_NRDEVICES], *itemp[SOUND_MIXER_NRDEVICES];
+int             visible[SOUND_MIXER_NRDEVICES];
+GtkWidget      *baltracks[SOUND_MIXER_NRDEVICES];
+GtkWidget      *channellabel[SOUND_MIXER_NRDEVICES];
+GtkHScale      *levels[SOUND_MIXER_NRDEVICES];
+GtkWidget      *maintable;
 GtkToggleButton *rpbuttons[SOUND_MIXER_NRDEVICES];
+//gpointer * mixerid[SOUND_MIXER_NRDEVICES];
 
 void            SaveSettingsGTK(void)
 {
@@ -52,6 +57,75 @@
 	return;
 }
 
+void            DoNothingGTK(void)
+{
+}
+
+void            HideUnhideGTK(int *device)
+{
+	int             i;
+	/* xxx This loop is an ugly hack.  We only want the device number. */
+	for (i = 0; i < SOUND_MIXER_NRDEVICES; i++)
+		if (viewmenuitems[i] == (GtkWidget *) device) {
+			if (visible[i]) {
+				/* Hide the record/play button, if any. */
+				if ((1 << i) & recmask)
+					gtk_widget_hide(GTK_WIDGET(rpbuttons[i]));
+/* Hide the level adjustment. */
+/* XXX */
+/* gtk_widget_hide(GTK_WIDGET(adjustment[i])); */
+				/* Hide the level track. */
+				gtk_widget_hide(GTK_WIDGET(levels[i]));
+/* Hide the name of the channel. */
+				gtk_widget_hide(channellabel[i]);
+				/* Hide the balance track, if any. */
+				if ((1 << i) & stereodevs) {
+/* Hide the balance adjustment, if any. */
+/* XXX */
+/* gtk_widget_hide(balance[i]); */
+/* Hide the balance track, if any. */
+					gtk_widget_hide(baltracks[i]);
+				}
+			} else {
+/*
+
+  "delete_event" signal: window manager has requested that this window
+                    be removed; by default, calls gtk_object_destroy()
+                    which emits the "destroy" signal. Return TRUE
+                    from the delete_event signal to avoid the destroy.
+                    Only happens on toplevel windows, not on other
+                    widgets.
+
+--Havoc Pennington on gtk-app-devel-list@redhat.com
+
+
+gtk_signal_connect(GTK_OBJECT(window), "delete_event",
+GTK_SIGNAL_FUNC(window_destroyed), 0);
+
+*/
+				/* Show the record/play button, if any. */
+				if ((1 << i) & recmask)
+					gtk_widget_show(GTK_WIDGET(rpbuttons[i]));
+/* Show the level adjustment. */
+/* XXX */
+/* gtk_widget_show(GTK_WIDGET(adjustment[i])); */
+				/* Show the level track. */
+				gtk_widget_show(GTK_WIDGET(levels[i]));
+				/* Show the name of the channel. */
+				gtk_widget_show(channellabel[i]);
+				/* Show the balance track, if any. */
+				if ((1 << i) & stereodevs) {
+/* Show the balance adjustment, if any. */
+/* XXX */
+/* gtk_widget_show(balance[i]); */
+					/* Show the balance track, if any. */
+					gtk_widget_show(baltracks[i]);
+				}
+			}
+		}
+	visible[i] = !visible[i];
+}
+
 void            AdjustLevelGTK(int *device)
 {
 	int             i;
@@ -86,19 +160,19 @@
 	GdkPixmap      *icon_pixmap;
 	GtkStyle       *style;
 	GtkWidget      *window;
-	GtkWidget      *levels[SOUND_MIXER_NRDEVICES];
-	GtkWidget      *baltracks[SOUND_MIXER_NRDEVICES];
+	//GtkWidget * levels[SOUND_MIXER_NRDEVICES];
 	GtkWidget      *mainbox;
-	GtkWidget      *maintable;
+	//GtkWidget * maintable;
 	GtkWidget      *filemenu;
 	GtkWidget      *filemenuitems[5];
+	GtkWidget      *viewmenu;
+	//GtkWidget * viewmenuitems[SOUND_MIXER_NRDEVICES];
 	GtkWidget      *mutemenu;
 	GtkWidget      *muteallitem;
 	GtkWidget      *menubar;
 	GtkWidget      *menubarlabel;
 	GtkAccelGroup  *accel;
 	GtkWidget      *label;
-	GtkWidget      *channellabel[SOUND_MIXER_NRDEVICES];
 	GtkWidget      *control_box;
 	int             balset, max, i, y, tmp, left, right;
 	GtkSignalFunc   filefuncs[] = {&LoadSettingsGTK, &SaveSettingsGTK, &LoadDialog, \
&SaveDialog, &CloseScreenGTK}; @@ -119,13 +193,29 @@
 	gtk_box_pack_start(GTK_BOX(mainbox), menubar, FALSE, TRUE, 0);
 	filemenu = gtk_menu_new();
 	mutemenu = gtk_menu_new();
+	viewmenu = gtk_menu_new();
 	for (i = 0; i < 5; i++) {
 		filemenuitems[i] = gtk_menu_item_new_with_label(LOCAL_TEXT(filemenutext[i]));
 		gtk_menu_append(GTK_MENU(filemenu), filemenuitems[i]);
 		gtk_widget_show(filemenuitems[i]);
-		gtk_widget_add_accelerator(filemenuitems[i], "activate", accel, \
(guint)fileacceltext[i], 0, GTK_ACCEL_VISIBLE); \
+		gtk_widget_add_accelerator(filemenuitems[i], "activate", accel, (guint) \
fileacceltext[i], 0, GTK_ACCEL_VISIBLE);  \
gtk_signal_connect(GTK_OBJECT(filemenuitems[i]), "activate", filefuncs[i], NULL);  }
+	for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
+		visible[i] = TRUE;
+		if ((1 << i) & devmask) {
+			viewmenuitems[i] = gtk_check_menu_item_new_with_label(LOCAL_TEXT(dev_label[i]));
+			gtk_menu_append(GTK_MENU(viewmenu), viewmenuitems[i]);
+			gtk_widget_show(viewmenuitems[i]);
+			gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(viewmenuitems[i]), TRUE);
+/*
+guint  gtk_signal_connect                 (GtkObject           *object,
+                                           const gchar         *name,
+                                           GtkSignalFunc        func,
+                                           gpointer             func_data);
+*/
+		}
+	}
 	muteallitem = gtk_check_menu_item_new_with_label(LOCAL_TEXT("Mute All"));
 	gtk_menu_append(GTK_MENU(mutemenu), muteallitem);
 /* XXX need to translate the "m" */
@@ -136,6 +226,10 @@
 	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menubarlabel), filemenu);
 	gtk_menu_bar_append(GTK_MENU_BAR(menubar), menubarlabel);
 	gtk_widget_show(menubarlabel);
+	menubarlabel = gtk_menu_item_new_with_label(LOCAL_TEXT("View"));
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menubarlabel), viewmenu);
+	gtk_menu_bar_append(GTK_MENU_BAR(menubar), menubarlabel);
+	gtk_widget_show(menubarlabel);
 	menubarlabel = gtk_menu_item_new_with_label(LOCAL_TEXT("Mute"));
 	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menubarlabel), mutemenu);
 	gtk_menu_bar_append(GTK_MENU_BAR(menubar), menubarlabel);
@@ -170,6 +264,12 @@
 				gtk_widget_show(GTK_WIDGET(rpbuttons[i]));
 				gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rpbuttons[i]), (1 << i) & recsrc \
                ? TRUE : FALSE);
 				rpcallback[i] = (gint *) gtk_signal_connect(GTK_OBJECT(rpbuttons[i]), "clicked", \
GTK_SIGNAL_FUNC(SwitchRecordPlayGTK), &rpbuttons[i]); +
+/* Don't destroy the buttons when they're hidden. */
+				gtk_signal_connect(GTK_OBJECT(rpbuttons[i]), "delete_event",
+						   GTK_SIGNAL_FUNC(TrueGTK), NULL);
+
+
 			}
 			if ((1 << i) & stereodevs) {
 				if (tmp) {
@@ -185,10 +285,10 @@
 				gtk_widget_show(baltracks[i]);
 				gtk_range_set_update_policy(GTK_RANGE(baltracks[i]), GTK_UPDATE_CONTINUOUS);
 			}
-			items[i] = i;
-			itemp[i] = &items[i];
 			lvlcallback[i] = (gint *) gtk_signal_connect(GTK_OBJECT(adjustment[i]), \
"value_changed", GTK_SIGNAL_FUNC(AdjustLevelGTK), &adjustment[i]);  levels[i] = \
gtk_hscale_new(adjustment[i]); +
+			gtk_signal_connect(GTK_OBJECT(viewmenuitems[i]), "activate", \
GTK_SIGNAL_FUNC(HideUnhideGTK), &viewmenuitems[i]);  \
gtk_scale_set_value_pos(GTK_SCALE(levels[i]), GTK_POS_LEFT);  \
gtk_scale_set_digits(GTK_SCALE(levels[i]), 0);  gtk_widget_show(levels[i]);
diff -ruN aumix-2.4/src/gtk.h aumix-2.5a/src/gtk.h
--- aumix-2.4/src/gtk.h	Thu Mar 23 01:01:18 2000
+++ aumix-2.5a/src/gtk.h	Thu Mar 23 23:10:13 2000
@@ -13,9 +13,13 @@
 GtkAdjustment  *adjustment[SOUND_MIXER_NRDEVICES];
 GtkAdjustment  *balance[SOUND_MIXER_NRDEVICES];
 GtkToggleButton *rpbuttons[SOUND_MIXER_NRDEVICES];
+GtkHScale      *levels[SOUND_MIXER_NRDEVICES];
+GtkWidget      *maintable;
+GtkWidget      *viewmenuitems[SOUND_MIXER_NRDEVICES];
 gint           *balcallback[SOUND_MIXER_NRDEVICES];
 gint           *lvlcallback[SOUND_MIXER_NRDEVICES];
 gint           *rpcallback[SOUND_MIXER_NRDEVICES];
+void            HideUnhideGTK(int *device);
 void            SaveSettingsGTK(void);
 void            LoadSettingsGTK(void);
 void            AdjustLevelGTK(int *device);


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic