[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