Advertisement
Guest User

Untitled

a guest
Feb 25th, 2012
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 15.00 KB | None | 0 0
  1. /*HEADER FILE*/
  2.  
  3.  
  4. #ifndef GUI_H
  5. #define GUI_H
  6.  
  7. #include <gtk/gtk.h>
  8.  
  9. #define PAGE_WIDTH 1000
  10. #define CONTROL_PANEL_HEIGHT 300
  11. #define DISPLAY_PANEL_HEIGHT 600
  12. #define SLIDER_PANEL_WIDTH 100
  13. #define SLIDER_HEIGHT 150
  14. #define SLIDER_WIDTH 30
  15. #define PAPER_HEIGHT 200
  16.  
  17. GtkWidget *window;
  18. GtkWidget *panel_window;
  19. GtkWidget *panel_control;
  20. GtkWidget *panel_display;
  21. GtkWidget *seperator1;
  22.  
  23. GtkWidget *paper_output;
  24.  
  25.  
  26. GtkWidget **comboBox_waveType;
  27. GtkWidget **slider_panel_outer;
  28. GtkWidget **slider_panel;
  29. GtkWidget **slider_panel2;
  30.  
  31. GtkWidget **slider_amp;
  32. GtkWidget **slider_freq;
  33. GtkWidget **slider_phase;
  34. GtkWidget **slider_width;
  35. GtkWidget **slider_slope;
  36. GtkWidget **slider_curve;
  37. GtkWidget **slider_fourier;
  38.  
  39. GtkWidget *slider_label;
  40. GtkWidget **slider_freq_panel;
  41. GtkWidget **slider_phase_panel;
  42. GtkWidget **slider_amp_panel;
  43. GtkWidget **slider_fourier_panel;
  44.  
  45. typedef struct
  46. {
  47.     GtkWidget *slider_bitdepth;
  48.     GtkWidget *slider_downsample;
  49.     //~ GtkWidget *hbox;
  50.     //~ GtkWidget *vbox1;
  51.     //~ GtkWidget *vbox2;
  52.     //~ GtkWidget *outerPanel;
  53.     //~
  54.    
  55.     int derp;
  56.    
  57. }
  58. Redux_Panel;
  59.  
  60. Redux_Panel** redux_panel_array;
  61.  
  62. GtkWidget *vSeperator;
  63.  
  64. GtkWidget *paper1;  
  65.  
  66. void init_slider_arrays(int _number_of_oscs);
  67. void init_gui(int argc, char **argv, int _number_of_oscs, int _number_of_redux);
  68.  
  69.  
  70.  
  71.  
  72. #endif
  73.  
  74.  
  75.  
  76. /*C FILE*/
  77.  
  78.  
  79. #include "gui.h"
  80. #include "display.h"
  81. #include <stdlib.h>
  82. #include "version1.h"
  83. #include "oscillator.h"
  84. #include "redux.h"
  85.  
  86.  
  87. static gboolean
  88. on_expose_event(GtkWidget *widget,
  89.     GdkEventExpose *event,
  90.     gpointer data)
  91. {  
  92.     display_refresh();
  93.     return TRUE;
  94. }  
  95.  
  96. void slider_move_event_fourier(GtkWidget *widget, int *i)
  97. {
  98.     int value = gtk_range_get_value(GTK_RANGE(slider_fourier[*i]));
  99.     osc_set_fourier(*i, value);
  100.     call_update();
  101. }
  102. void slider_move_event_curve(GtkWidget *widget, int *i)
  103. {
  104.     double value = gtk_range_get_value(GTK_RANGE(slider_curve[*i]));
  105.     osc_set_curve(*i, value);
  106.     call_update();
  107. }
  108. void slider_move_event_slope(GtkWidget *widget, int *i)
  109. {
  110.     double value = gtk_range_get_value(GTK_RANGE(slider_slope[*i]));
  111.     osc_set_slope(*i, value);
  112.     call_update();
  113. }
  114. void slider_move_event_width(GtkWidget *widget, int *i)
  115. {
  116.     double value = gtk_range_get_value(GTK_RANGE(slider_width[*i]));
  117.     osc_set_width(*i, value);
  118.     call_update();
  119. }
  120. void slider_move_event_amp(GtkWidget *widget, int *i)
  121. {
  122.     double value = gtk_range_get_value(GTK_RANGE(slider_amp[*i]));
  123.     osc_set_amp(*i, value);
  124.     call_update();
  125. }
  126. void slider_move_event_phase(GtkWidget *widget, int *i)
  127. {
  128.     double value = gtk_range_get_value(GTK_RANGE(slider_phase[*i]));
  129.     osc_set_phase(*i, value);
  130.     call_update();
  131. }
  132. void slider_move_event_freq(GtkWidget *widget, int *i)
  133. {
  134.     double value = gtk_range_get_value(GTK_RANGE(slider_freq[*i]));
  135.     osc_set_freq(*i, value);
  136.     call_update();
  137. }
  138. void comboBox_waveType_changed_event(GtkWidget *widget, int *i)
  139. {
  140.     int value = gtk_combo_box_get_active(GTK_COMBO_BOX(comboBox_waveType[*i]));
  141.     osc_set_wavetype(*i, value);
  142.     call_update();
  143.    
  144. }
  145. void slider_move_event_redux_bitdepth(GtkWidget *widget, int *i)
  146. {
  147.     printf("i: %d\n", *i);
  148.    
  149.     double value = gtk_range_get_value(GTK_RANGE(redux_panel_array[*i]->slider_bitdepth));
  150.     //double value = gtk_range_get_value(GTK_RANGE(widget));
  151.     printf("does it get here?"); fflush(stdout);
  152.     redux_set_bitdepth(*i, value);
  153.     call_update();
  154. }
  155. void slider_move_event_redux_downsample(GtkWidget *widget, int *i)
  156. {
  157.     double value = gtk_range_get_value(GTK_RANGE(redux_panel_array[*i]->slider_downsample));
  158.     redux_set_downsample(*i, value);
  159.     call_update();
  160. }
  161.  
  162.  
  163.  
  164. void addOscPanel(int osc_id)
  165. {
  166.     /*initialise the widgets*/
  167.     /*panel they are all contained in*/
  168.     slider_panel_outer[osc_id] = gtk_vbox_new(FALSE, 10);
  169.     slider_panel[osc_id]  = gtk_hbox_new(FALSE, 0);
  170.     gtk_widget_set_size_request(slider_panel_outer[osc_id] , SLIDER_PANEL_WIDTH, CONTROL_PANEL_HEIGHT);
  171.     char c[15];
  172.     sprintf(c, "Oscillator %d", osc_id);
  173.     slider_label = gtk_label_new(c);
  174.     gtk_box_pack_start(GTK_BOX(slider_panel_outer[osc_id]), slider_label , FALSE, FALSE, 0);
  175.    
  176.    
  177.    
  178.     /*wavetype combo box*/
  179.     comboBox_waveType[osc_id] = gtk_combo_box_new_text();    
  180.     gtk_box_pack_start(GTK_BOX(slider_panel_outer[osc_id]), comboBox_waveType[osc_id], FALSE, FALSE, 0);  
  181.     gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox_waveType[osc_id]), "Sine");
  182.     gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox_waveType[osc_id]), "Custom");
  183.     gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox_waveType[osc_id]), "F. Saw");
  184.     gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox_waveType[osc_id]), "F. Square");
  185.     gtk_combo_box_append_text(GTK_COMBO_BOX(comboBox_waveType[osc_id]), "F. Triangle");
  186.     gtk_signal_connect(GTK_OBJECT(comboBox_waveType[osc_id]), "changed", (GtkSignalFunc)comboBox_waveType_changed_event, &osc_id);
  187.     gtk_combo_box_set_active(GTK_COMBO_BOX(comboBox_waveType[osc_id]), 0);
  188.    
  189.    
  190.     gtk_box_pack_start(GTK_BOX(slider_panel_outer[osc_id]), slider_panel[osc_id] , TRUE, TRUE, 0);
  191.    
  192.     gtk_box_pack_start(GTK_BOX(panel_control), slider_panel_outer[osc_id] , TRUE, TRUE, 5);
  193.     vSeperator = gtk_vseparator_new();
  194.     gtk_box_pack_start(GTK_BOX(panel_control), vSeperator, FALSE, FALSE, 5);
  195.    
  196.     /*sliders*/
  197.     slider_freq[osc_id] =gtk_vscale_new_with_range(0.1, 30, 0.01);
  198.     slider_amp[osc_id]  =gtk_vscale_new_with_range(0, 1, 0.01);
  199.     slider_phase[osc_id] =gtk_vscale_new_with_range(-180, 180, 1);
  200.     slider_width[osc_id] = gtk_vscale_new_with_range(0, 1, 0.01);
  201.     slider_slope[osc_id] = gtk_vscale_new_with_range(0, 1, 0.01);
  202.     slider_curve[osc_id] = gtk_vscale_new_with_range(0, 1, 0.01);
  203.     slider_fourier[osc_id] = gtk_vscale_new_with_range(1, 32, 1);
  204.  
  205.     /*slider panels*/  
  206.     slider_phase_panel[osc_id] = gtk_vbox_new(FALSE, 0);
  207.     slider_amp_panel[osc_id] = gtk_vbox_new(FALSE, 0);
  208.     slider_freq_panel[osc_id] = gtk_vbox_new(FALSE, 0);    
  209.     slider_fourier_panel[osc_id] = gtk_vbox_new(FALSE, 0);    
  210.      
  211.     /*add slider panels to the containing panel*/
  212.     gtk_box_pack_start(GTK_BOX(slider_panel[osc_id]), slider_freq_panel[osc_id], TRUE, TRUE, 0);
  213.     gtk_box_pack_start(GTK_BOX(slider_panel[osc_id]), slider_amp_panel[osc_id], TRUE, TRUE, 0);  
  214.     gtk_box_pack_start(GTK_BOX(slider_panel[osc_id]), slider_phase_panel[osc_id], TRUE, TRUE, 0);  
  215.     gtk_box_pack_start(GTK_BOX(slider_panel[osc_id]), slider_fourier_panel[osc_id], TRUE, TRUE, 0);
  216.    
  217.     /*add sliders and labels to their respective panels*/
  218.     slider_label = gtk_label_new("Freq");
  219.     gtk_box_pack_start(GTK_BOX(slider_freq_panel[osc_id] ), slider_label, FALSE, FALSE, 0);
  220.     slider_label = gtk_label_new("Amp");
  221.     gtk_box_pack_start(GTK_BOX(slider_amp_panel[osc_id] ), slider_label, FALSE, FALSE, 0);
  222.     slider_label = gtk_label_new("Phase");        
  223.     gtk_box_pack_start(GTK_BOX(slider_phase_panel[osc_id]), slider_label, FALSE, FALSE, 0);
  224.     slider_label = gtk_label_new("Fourier");
  225.     gtk_box_pack_start(GTK_BOX(slider_fourier_panel[osc_id]), slider_label, FALSE, FALSE, 0);
  226.    
  227.     gtk_box_pack_start(GTK_BOX(slider_freq_panel[osc_id] ), slider_freq[osc_id] , TRUE, TRUE, 0);
  228.     gtk_box_pack_start(GTK_BOX(slider_amp_panel[osc_id] ), slider_amp[osc_id] , TRUE, TRUE, 0);
  229.     gtk_box_pack_start(GTK_BOX(slider_phase_panel[osc_id] ), slider_phase[osc_id] , TRUE, TRUE, 0);
  230.     gtk_box_pack_start(GTK_BOX(slider_fourier_panel[osc_id] ), slider_fourier[osc_id] , TRUE, TRUE, 0);
  231.    
  232.     slider_label = gtk_label_new("Width");
  233.     gtk_box_pack_start(GTK_BOX(slider_freq_panel[osc_id] ), slider_label, FALSE, FALSE, 0);
  234.     slider_label = gtk_label_new("Slope");
  235.     gtk_box_pack_start(GTK_BOX(slider_amp_panel[osc_id] ), slider_label, FALSE, FALSE, 0);
  236.     slider_label = gtk_label_new("Curve");
  237.     gtk_box_pack_start(GTK_BOX(slider_phase_panel[osc_id]), slider_label, FALSE, FALSE, 0);
  238.    
  239.     gtk_box_pack_start(GTK_BOX(slider_freq_panel[osc_id] ), slider_width[osc_id] , TRUE, TRUE, 0);
  240.     gtk_box_pack_start(GTK_BOX(slider_amp_panel[osc_id] ), slider_slope[osc_id] , TRUE, TRUE, 0);
  241.     gtk_box_pack_start(GTK_BOX(slider_phase_panel[osc_id] ), slider_curve[osc_id] , TRUE, TRUE, 0);
  242.  
  243.     /*signal connects*/
  244.     gtk_signal_connect(GTK_OBJECT(slider_freq[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_freq, &osc_id);
  245.     gtk_signal_connect(GTK_OBJECT(slider_phase[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_phase, &osc_id);
  246.     gtk_signal_connect(GTK_OBJECT(slider_amp[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_amp, &osc_id);
  247.     gtk_signal_connect(GTK_OBJECT(slider_curve[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_curve, &osc_id);
  248.     gtk_signal_connect(GTK_OBJECT(slider_width[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_width, &osc_id);
  249.     gtk_signal_connect(GTK_OBJECT(slider_slope[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_slope, &osc_id);
  250.     gtk_signal_connect(GTK_OBJECT(slider_fourier[osc_id]), "value_changed", (GtkSignalFunc)slider_move_event_fourier, &osc_id);
  251.        
  252.     /*set initial values and invert the sliders*/
  253.     gtk_range_set_value(GTK_RANGE(slider_phase[osc_id] ), 0);
  254.     gtk_range_set_value(GTK_RANGE(slider_freq[osc_id] ), 1);
  255.     gtk_range_set_value(GTK_RANGE(slider_amp[osc_id] ), 1);
  256.     gtk_range_set_inverted(GTK_RANGE(slider_phase[osc_id] ), TRUE);
  257.     gtk_range_set_inverted(GTK_RANGE(slider_amp[osc_id] ), TRUE);
  258.     gtk_range_set_inverted(GTK_RANGE(slider_freq[osc_id] ), TRUE);
  259.     gtk_range_set_value(GTK_RANGE(slider_width[osc_id] ), 1);
  260.     gtk_range_set_value(GTK_RANGE(slider_curve[osc_id] ), 1);
  261.     gtk_range_set_value(GTK_RANGE(slider_slope[osc_id] ), 1);
  262.     gtk_range_set_inverted(GTK_RANGE(slider_width[osc_id] ), TRUE);
  263.     gtk_range_set_inverted(GTK_RANGE(slider_curve[osc_id] ), TRUE);
  264.     gtk_range_set_inverted(GTK_RANGE(slider_slope[osc_id] ), TRUE);
  265.    
  266.  
  267.    
  268.  
  269.    
  270.    
  271.    
  272. }
  273.  
  274. void addReduxPanel(int redux_id)
  275. {
  276.    
  277.    
  278.     GtkWidget *outerPanel;
  279.     outerPanel = gtk_vbox_new(FALSE, 0);
  280.     GtkWidget *label;
  281.     label =  gtk_label_new("Redux");
  282.     gtk_box_pack_start(GTK_BOX(outerPanel), label, FALSE, FALSE, 5);
  283.     GtkWidget *hbox;
  284.     hbox = gtk_hbox_new(FALSE, 0);
  285.     gtk_box_pack_start(GTK_BOX(outerPanel), hbox, TRUE, TRUE, 5);
  286.     GtkWidget *vbox1;
  287.     vbox1 = gtk_vbox_new(FALSE, 0);
  288.     gtk_box_pack_start(GTK_BOX(hbox), vbox1, TRUE, TRUE, 0);
  289.     GtkWidget *vbox2;
  290.     vbox2 = gtk_vbox_new(FALSE, 0);
  291.     gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
  292.        
  293.     redux_panel_array[redux_id]->slider_downsample = gtk_vscale_new_with_range(1, 100, 1);
  294.     redux_panel_array[redux_id]->slider_bitdepth = gtk_vscale_new_with_range(1, 100, 1);   
  295.    
  296.     gtk_box_pack_start(GTK_BOX(vbox1), redux_panel_array[redux_id]->slider_downsample, TRUE, TRUE, 0);
  297.     label = gtk_label_new("Down Sample");
  298.     gtk_box_pack_start(GTK_BOX(vbox1), label,FALSE, FALSE, 0);
  299.    
  300.     gtk_box_pack_start(GTK_BOX(vbox2), redux_panel_array[redux_id]->slider_bitdepth, TRUE, TRUE, 0);
  301.     label = gtk_label_new("Bit Depth");
  302.     gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 0);
  303.    
  304.     gtk_box_pack_start(GTK_BOX(panel_control), outerPanel, TRUE, TRUE, 0); /*add panel to the main control panel*/
  305.     vSeperator = gtk_vseparator_new();
  306.     gtk_box_pack_start(GTK_BOX(panel_control), vSeperator, FALSE, FALSE, 5);
  307.    
  308.     gtk_signal_connect(GTK_OBJECT(redux_panel_array[redux_id]->slider_bitdepth), "value_changed", (GtkSignalFunc)slider_move_event_redux_bitdepth, &redux_id);
  309.     gtk_signal_connect(GTK_OBJECT(redux_panel_array[redux_id]->slider_downsample), "value_changed", (GtkSignalFunc)slider_move_event_redux_downsample, &redux_id);
  310.    
  311.     gtk_range_set_value(GTK_RANGE(redux_panel_array[redux_id]->slider_bitdepth ), 5);
  312.     gtk_range_set_value(GTK_RANGE(redux_panel_array[redux_id]->slider_downsample ), 10);
  313.    
  314.     redux_panel_array[redux_id]->derp = 11;
  315.    
  316. }
  317.  
  318. void init_redux_sliders(int _number_of_redux)
  319. {
  320.     redux_panel_array = malloc(_number_of_redux*sizeof(Redux_Panel*));
  321.     int i = 0;
  322.     for (i=0; i<_number_of_redux; i++)
  323.     {
  324.         redux_panel_array[i] = malloc(sizeof(Redux_Panel));
  325.         //redux_panel_array[i]->slider_bitdepth = malloc(sizeof(GtkWidget));
  326.         //redux_panel_array[i]->slider_downsample = malloc(sizeof(GtkWidget));
  327.     }
  328. }
  329.  
  330. void init_slider_arrays(int _number_of_oscs)
  331. {
  332.     //oscPanelArray = malloc(_number_of_oscs*sizeof(OscPanel*));
  333.    
  334.     comboBox_waveType =malloc(_number_of_oscs*sizeof(GtkWidget*));
  335.     slider_panel_outer = malloc(_number_of_oscs*sizeof(GtkWidget*));
  336.     slider_panel = malloc(_number_of_oscs*sizeof(GtkWidget*));
  337.     slider_amp= malloc(_number_of_oscs*sizeof(GtkWidget*));
  338.     slider_freq= malloc(_number_of_oscs*sizeof(GtkWidget*));
  339.     slider_phase= malloc(_number_of_oscs*sizeof(GtkWidget*));
  340.     slider_label= malloc(_number_of_oscs*sizeof(GtkWidget*));
  341.     slider_freq_panel= malloc(_number_of_oscs*sizeof(GtkWidget*));
  342.     slider_phase_panel= malloc(_number_of_oscs*sizeof(GtkWidget*));
  343.     slider_amp_panel= malloc(_number_of_oscs*sizeof(GtkWidget*));
  344.     slider_curve = malloc(_number_of_oscs*sizeof(GtkWidget*));
  345.     slider_slope = malloc(_number_of_oscs*sizeof(GtkWidget*));
  346.     slider_width = malloc(_number_of_oscs*sizeof(GtkWidget*));
  347.     slider_fourier= malloc(_number_of_oscs*sizeof(GtkWidget*));
  348.     slider_fourier_panel= malloc(_number_of_oscs*sizeof(GtkWidget*));
  349.    
  350. }
  351.  
  352. void init_gui(int argc, char **argv, int _number_of_oscs, int _number_of_redux)
  353. {
  354.     gtk_init(&argc, &argv);
  355.    
  356.     /*main container sizing and packing*/
  357.     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  358.     panel_window = gtk_vbox_new(FALSE, 0);
  359.     panel_control= gtk_hbox_new(FALSE, 0);
  360.     panel_display= gtk_hbox_new(FALSE, 0);
  361.     seperator1 = gtk_hseparator_new();
  362.    
  363.     gtk_container_add(GTK_CONTAINER(window), panel_window);
  364.     gtk_box_pack_start(GTK_BOX(panel_window), panel_control, FALSE, FALSE, 0);
  365.     gtk_box_pack_start(GTK_BOX(panel_window), seperator1, FALSE, FALSE, 0);
  366.     gtk_box_pack_start(GTK_BOX(panel_window), panel_display, FALSE, FALSE, 0);
  367.    
  368.     gtk_widget_set_size_request(panel_control, PAGE_WIDTH, CONTROL_PANEL_HEIGHT);
  369.     gtk_widget_set_size_request(panel_display, PAGE_WIDTH, DISPLAY_PANEL_HEIGHT);
  370.    
  371.      /*paper*/
  372.     paper1 = gtk_drawing_area_new();
  373.     gtk_widget_is_drawable(paper1);
  374.     gtk_widget_set_size_request(paper1, PAGE_WIDTH, PAPER_HEIGHT);
  375.     init_display(0, PAPER_HEIGHT/2, PAGE_WIDTH, PAPER_HEIGHT, paper1);
  376.     gtk_box_pack_start(GTK_BOX(panel_display), paper1, FALSE, FALSE, 0);
  377.     gtk_box_pack_start(GTK_BOX(panel_display), seperator1, FALSE, FALSE, 0);
  378.    
  379.     g_signal_connect(paper1, "expose-event",G_CALLBACK(on_expose_event), NULL);
  380.    
  381.     /*add osc panels*/
  382.    
  383.     init_slider_arrays(_number_of_oscs);
  384.     int i = 0;
  385.     for (i = 0; i<_number_of_oscs; i++)
  386.     {
  387.         addOscPanel(i);
  388.        
  389.     }
  390.    
  391.     init_redux_sliders(_number_of_redux);
  392.     int j = 0;
  393.     for (j =0; j<_number_of_redux; j++)
  394.     {
  395.         addReduxPanel(j);
  396.         //printf("derp: %d\n", redux_panel_array[i]->derp);
  397.     }
  398.    
  399.     printf("derp: %d\n", redux_panel_array[0]->derp);
  400.     printf("derp: %d\n", redux_panel_array[1]->derp);
  401.    
  402.     gtk_widget_show_all(window);
  403.     gtk_main();    
  404.        
  405. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement