Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*HEADER FILE*/
- #ifndef GUI_H
- #define GUI_H
- #include <gtk/gtk.h>
- #define PAGE_WIDTH 1000
- #define CONTROL_PANEL_HEIGHT 300
- #define DISPLAY_PANEL_HEIGHT 600
- #define SLIDER_PANEL_WIDTH 100
- #define SLIDER_HEIGHT 150
- #define SLIDER_WIDTH 30
- #define PAPER_HEIGHT 200
- GtkWidget *window;
- GtkWidget *panel_window;
- GtkWidget *panel_control;
- GtkWidget *panel_display;
- GtkWidget *seperator1;
- GtkWidget *paper_output;
- GtkWidget **comboBox_waveType;
- GtkWidget **slider_panel_outer;
- GtkWidget **slider_panel;
- GtkWidget **slider_panel2;
- GtkWidget **slider_amp;
- GtkWidget **slider_freq;
- GtkWidget **slider_phase;
- GtkWidget **slider_width;
- GtkWidget **slider_slope;
- GtkWidget **slider_curve;
- GtkWidget **slider_fourier;
- GtkWidget *slider_label;
- GtkWidget **slider_freq_panel;
- GtkWidget **slider_phase_panel;
- GtkWidget **slider_amp_panel;
- GtkWidget **slider_fourier_panel;
- typedef struct
- {
- GtkWidget *slider_bitdepth;
- GtkWidget *slider_downsample;
- //~ GtkWidget *hbox;
- //~ GtkWidget *vbox1;
- //~ GtkWidget *vbox2;
- //~ GtkWidget *outerPanel;
- //~
- int derp;
- }
- Redux_Panel;
- Redux_Panel** redux_panel_array;
- GtkWidget *vSeperator;
- GtkWidget *paper1;
- void init_slider_arrays(int _number_of_oscs);
- void init_gui(int argc, char **argv, int _number_of_oscs, int _number_of_redux);
- #endif
- /*C FILE*/
- #include "gui.h"
- #include "display.h"
- #include <stdlib.h>
- #include "version1.h"
- #include "oscillator.h"
- #include "redux.h"
- static gboolean
- on_expose_event(GtkWidget *widget,
- GdkEventExpose *event,
- gpointer data)
- {
- display_refresh();
- return TRUE;
- }
- void slider_move_event_fourier(GtkWidget *widget, int *i)
- {
- int value = gtk_range_get_value(GTK_RANGE(slider_fourier[*i]));
- osc_set_fourier(*i, value);
- call_update();
- }
- void slider_move_event_curve(GtkWidget *widget, int *i)
- {
- double value = gtk_range_get_value(GTK_RANGE(slider_curve[*i]));
- osc_set_curve(*i, value);
- call_update();
- }
- void slider_move_event_slope(GtkWidget *widget, int *i)
- {
- double value = gtk_range_get_value(GTK_RANGE(slider_slope[*i]));
- osc_set_slope(*i, value);
- call_update();
- }
- void slider_move_event_width(GtkWidget *widget, int *i)
- {
- double value = gtk_range_get_value(GTK_RANGE(slider_width[*i]));
- osc_set_width(*i, value);
- call_update();
- }
- void slider_move_event_amp(GtkWidget *widget, int *i)
- {
- double value = gtk_range_get_value(GTK_RANGE(slider_amp[*i]));
- osc_set_amp(*i, value);
- call_update();
- }
- void slider_move_event_phase(GtkWidget *widget, int *i)
- {
- double value = gtk_range_get_value(GTK_RANGE(slider_phase[*i]));
- osc_set_phase(*i, value);
- call_update();
- }
- void slider_move_event_freq(GtkWidget *widget, int *i)
- {
- double value = gtk_range_get_value(GTK_RANGE(slider_freq[*i]));
- osc_set_freq(*i, value);
- call_update();
- }
- void comboBox_waveType_changed_event(GtkWidget *widget, int *i)
- {
- int value = gtk_combo_box_get_active(GTK_COMBO_BOX(comboBox_waveType[*i]));
- osc_set_wavetype(*i, value);
- call_update();
- }
- void slider_move_event_redux_bitdepth(GtkWidget *widget, int *i)
- {
- printf("i: %d\n", *i);
- double value = gtk_range_get_value(GTK_RANGE(redux_panel_array[*i]->slider_bitdepth));
- //double value = gtk_range_get_value(GTK_RANGE(widget));
- printf("does it get here?"); fflush(stdout);
- redux_set_bitdepth(*i, value);
- call_update();
- }
- void slider_move_event_redux_downsample(GtkWidget *widget, int *i)
- {
- double value = gtk_range_get_value(GTK_RANGE(redux_panel_array[*i]->slider_downsample));
- redux_set_downsample(*i, value);
- call_update();
- }
- void addOscPanel(int osc_id)
- {
- /*initialise the widgets*/
- /*panel they are all contained in*/
- slider_panel_outer[osc_id] = gtk_vbox_new(FALSE, 10);
- slider_panel[osc_id] = gtk_hbox_new(FALSE, 0);
- gtk_widget_set_size_request(slider_panel_outer[osc_id] , SLIDER_PANEL_WIDTH, CONTROL_PANEL_HEIGHT);
- char c[15];
- sprintf(c, "Oscillator %d", osc_id);
- slider_label = gtk_label_new(c);
- gtk_box_pack_start(GTK_BOX(slider_panel_outer[osc_id]), slider_label , FALSE, FALSE, 0);
- /*wavetype combo box*/
- comboBox_waveType[osc_id] = gtk_combo_box_new_text();
- gtk_box_pack_start(GTK_BOX(slider_panel_outer[osc_id]), comboBox_waveType[osc_id], FALSE, FALSE, 0);
- gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox_waveType[osc_id]), "Sine");
- gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox_waveType[osc_id]), "Custom");
- gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox_waveType[osc_id]), "F. Saw");
- gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox_waveType[osc_id]), "F. Square");
- gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox_waveType[osc_id]), "F. Triangle");
- gtk_signal_connect(GTK_OBJECT(comboBox_waveType[osc_id]), "changed", (GtkSignalFunc)comboBox_waveType_changed_event, &osc_id);
- gtk_combo_box_set_active(GTK_COMBO_BOX(comboBox_waveType[osc_id]), 0);
- gtk_box_pack_start(GTK_BOX(slider_panel_outer[osc_id]), slider_panel[osc_id] , TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(panel_control), slider_panel_outer[osc_id] , TRUE, TRUE, 5);
- vSeperator = gtk_vseparator_new();
- gtk_box_pack_start(GTK_BOX(panel_control), vSeperator, FALSE, FALSE, 5);
- /*sliders*/
- slider_freq[osc_id] =gtk_vscale_new_with_range(0.1, 30, 0.01);
- slider_amp[osc_id] =gtk_vscale_new_with_range(0, 1, 0.01);
- slider_phase[osc_id] =gtk_vscale_new_with_range(-180, 180, 1);
- slider_width[osc_id] = gtk_vscale_new_with_range(0, 1, 0.01);
- slider_slope[osc_id] = gtk_vscale_new_with_range(0, 1, 0.01);
- slider_curve[osc_id] = gtk_vscale_new_with_range(0, 1, 0.01);
- slider_fourier[osc_id] = gtk_vscale_new_with_range(1, 32, 1);
- /*slider panels*/
- slider_phase_panel[osc_id] = gtk_vbox_new(FALSE, 0);
- slider_amp_panel[osc_id] = gtk_vbox_new(FALSE, 0);
- slider_freq_panel[osc_id] = gtk_vbox_new(FALSE, 0);
- slider_fourier_panel[osc_id] = gtk_vbox_new(FALSE, 0);
- /*add slider panels to the containing panel*/
- gtk_box_pack_start(GTK_BOX(slider_panel[osc_id]), slider_freq_panel[osc_id], TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(slider_panel[osc_id]), slider_amp_panel[osc_id], TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(slider_panel[osc_id]), slider_phase_panel[osc_id], TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(slider_panel[osc_id]), slider_fourier_panel[osc_id], TRUE, TRUE, 0);
- /*add sliders and labels to their respective panels*/
- slider_label = gtk_label_new("Freq");
- gtk_box_pack_start(GTK_BOX(slider_freq_panel[osc_id] ), slider_label, FALSE, FALSE, 0);
- slider_label = gtk_label_new("Amp");
- gtk_box_pack_start(GTK_BOX(slider_amp_panel[osc_id] ), slider_label, FALSE, FALSE, 0);
- slider_label = gtk_label_new("Phase");
- gtk_box_pack_start(GTK_BOX(slider_phase_panel[osc_id]), slider_label, FALSE, FALSE, 0);
- slider_label = gtk_label_new("Fourier");
- gtk_box_pack_start(GTK_BOX(slider_fourier_panel[osc_id]), slider_label, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(slider_freq_panel[osc_id] ), slider_freq[osc_id] , TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(slider_amp_panel[osc_id] ), slider_amp[osc_id] , TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(slider_phase_panel[osc_id] ), slider_phase[osc_id] , TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(slider_fourier_panel[osc_id] ), slider_fourier[osc_id] , TRUE, TRUE, 0);
- slider_label = gtk_label_new("Width");
- gtk_box_pack_start(GTK_BOX(slider_freq_panel[osc_id] ), slider_label, FALSE, FALSE, 0);
- slider_label = gtk_label_new("Slope");
- gtk_box_pack_start(GTK_BOX(slider_amp_panel[osc_id] ), slider_label, FALSE, FALSE, 0);
- slider_label = gtk_label_new("Curve");
- gtk_box_pack_start(GTK_BOX(slider_phase_panel[osc_id]), slider_label, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(slider_freq_panel[osc_id] ), slider_width[osc_id] , TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(slider_amp_panel[osc_id] ), slider_slope[osc_id] , TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(slider_phase_panel[osc_id] ), slider_curve[osc_id] , TRUE, TRUE, 0);
- /*signal connects*/
- gtk_signal_connect(GTK_OBJECT(slider_freq[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_freq, &osc_id);
- gtk_signal_connect(GTK_OBJECT(slider_phase[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_phase, &osc_id);
- gtk_signal_connect(GTK_OBJECT(slider_amp[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_amp, &osc_id);
- gtk_signal_connect(GTK_OBJECT(slider_curve[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_curve, &osc_id);
- gtk_signal_connect(GTK_OBJECT(slider_width[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_width, &osc_id);
- gtk_signal_connect(GTK_OBJECT(slider_slope[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_slope, &osc_id);
- gtk_signal_connect(GTK_OBJECT(slider_fourier[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_fourier, &osc_id);
- /*set initial values and invert the sliders*/
- gtk_range_set_value(GTK_RANGE(slider_phase[osc_id] ), 0);
- gtk_range_set_value(GTK_RANGE(slider_freq[osc_id] ), 1);
- gtk_range_set_value(GTK_RANGE(slider_amp[osc_id] ), 1);
- gtk_range_set_inverted(GTK_RANGE(slider_phase[osc_id] ), TRUE);
- gtk_range_set_inverted(GTK_RANGE(slider_amp[osc_id] ), TRUE);
- gtk_range_set_inverted(GTK_RANGE(slider_freq[osc_id] ), TRUE);
- gtk_range_set_value(GTK_RANGE(slider_width[osc_id] ), 1);
- gtk_range_set_value(GTK_RANGE(slider_curve[osc_id] ), 1);
- gtk_range_set_value(GTK_RANGE(slider_slope[osc_id] ), 1);
- gtk_range_set_inverted(GTK_RANGE(slider_width[osc_id] ), TRUE);
- gtk_range_set_inverted(GTK_RANGE(slider_curve[osc_id] ), TRUE);
- gtk_range_set_inverted(GTK_RANGE(slider_slope[osc_id] ), TRUE);
- }
- void addReduxPanel(int redux_id)
- {
- GtkWidget *outerPanel;
- outerPanel = gtk_vbox_new(FALSE, 0);
- GtkWidget *label;
- label = gtk_label_new("Redux");
- gtk_box_pack_start(GTK_BOX(outerPanel), label, FALSE, FALSE, 5);
- GtkWidget *hbox;
- hbox = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(outerPanel), hbox, TRUE, TRUE, 5);
- GtkWidget *vbox1;
- vbox1 = gtk_vbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), vbox1, TRUE, TRUE, 0);
- GtkWidget *vbox2;
- vbox2 = gtk_vbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
- redux_panel_array[redux_id]->slider_downsample = gtk_vscale_new_with_range(1, 100, 1);
- redux_panel_array[redux_id]->slider_bitdepth = gtk_vscale_new_with_range(1, 100, 1);
- gtk_box_pack_start(GTK_BOX(vbox1), redux_panel_array[redux_id]->slider_downsample, TRUE, TRUE, 0);
- label = gtk_label_new("Down Sample");
- gtk_box_pack_start(GTK_BOX(vbox1), label,FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(vbox2), redux_panel_array[redux_id]->slider_bitdepth, TRUE, TRUE, 0);
- label = gtk_label_new("Bit Depth");
- gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(panel_control), outerPanel, TRUE, TRUE, 0); /*add panel to the main control panel*/
- vSeperator = gtk_vseparator_new();
- gtk_box_pack_start(GTK_BOX(panel_control), vSeperator, FALSE, FALSE, 5);
- gtk_signal_connect(GTK_OBJECT(redux_panel_array[redux_id]->slider_bitdepth), "value_changed", (GtkSignalFunc)slider_move_event_redux_bitdepth, &redux_id);
- gtk_signal_connect(GTK_OBJECT(redux_panel_array[redux_id]->slider_downsample), "value_changed", (GtkSignalFunc)slider_move_event_redux_downsample, &redux_id);
- gtk_range_set_value(GTK_RANGE(redux_panel_array[redux_id]->slider_bitdepth ), 5);
- gtk_range_set_value(GTK_RANGE(redux_panel_array[redux_id]->slider_downsample ), 10);
- redux_panel_array[redux_id]->derp = 11;
- }
- void init_redux_sliders(int _number_of_redux)
- {
- redux_panel_array = malloc(_number_of_redux*sizeof(Redux_Panel*));
- int i = 0;
- for (i=0; i<_number_of_redux; i++)
- {
- redux_panel_array[i] = malloc(sizeof(Redux_Panel));
- //redux_panel_array[i]->slider_bitdepth = malloc(sizeof(GtkWidget));
- //redux_panel_array[i]->slider_downsample = malloc(sizeof(GtkWidget));
- }
- }
- void init_slider_arrays(int _number_of_oscs)
- {
- //oscPanelArray = malloc(_number_of_oscs*sizeof(OscPanel*));
- comboBox_waveType =malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_panel_outer = malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_panel = malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_amp= malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_freq= malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_phase= malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_label= malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_freq_panel= malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_phase_panel= malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_amp_panel= malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_curve = malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_slope = malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_width = malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_fourier= malloc(_number_of_oscs*sizeof(GtkWidget*));
- slider_fourier_panel= malloc(_number_of_oscs*sizeof(GtkWidget*));
- }
- void init_gui(int argc, char **argv, int _number_of_oscs, int _number_of_redux)
- {
- gtk_init(&argc, &argv);
- /*main container sizing and packing*/
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- panel_window = gtk_vbox_new(FALSE, 0);
- panel_control= gtk_hbox_new(FALSE, 0);
- panel_display= gtk_hbox_new(FALSE, 0);
- seperator1 = gtk_hseparator_new();
- gtk_container_add(GTK_CONTAINER(window), panel_window);
- gtk_box_pack_start(GTK_BOX(panel_window), panel_control, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(panel_window), seperator1, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(panel_window), panel_display, FALSE, FALSE, 0);
- gtk_widget_set_size_request(panel_control, PAGE_WIDTH, CONTROL_PANEL_HEIGHT);
- gtk_widget_set_size_request(panel_display, PAGE_WIDTH, DISPLAY_PANEL_HEIGHT);
- /*paper*/
- paper1 = gtk_drawing_area_new();
- gtk_widget_is_drawable(paper1);
- gtk_widget_set_size_request(paper1, PAGE_WIDTH, PAPER_HEIGHT);
- init_display(0, PAPER_HEIGHT/2, PAGE_WIDTH, PAPER_HEIGHT, paper1);
- gtk_box_pack_start(GTK_BOX(panel_display), paper1, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(panel_display), seperator1, FALSE, FALSE, 0);
- g_signal_connect(paper1, "expose-event",G_CALLBACK(on_expose_event), NULL);
- /*add osc panels*/
- init_slider_arrays(_number_of_oscs);
- int i = 0;
- for (i = 0; i<_number_of_oscs; i++)
- {
- addOscPanel(i);
- }
- init_redux_sliders(_number_of_redux);
- int j = 0;
- for (j =0; j<_number_of_redux; j++)
- {
- addReduxPanel(j);
- //printf("derp: %d\n", redux_panel_array[i]->derp);
- }
- printf("derp: %d\n", redux_panel_array[0]->derp);
- printf("derp: %d\n", redux_panel_array[1]->derp);
- gtk_widget_show_all(window);
- gtk_main();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement