// taken explicitly from Fl_Return_Button.cpp static int flu_return_arrow(int x, int y, int w, int h) { int size = w; if (h<size) size = h; int d = (size+2)/4; if (d<3) d = 3; int t = (size+9)/12; if (t<1) t = 1; int x0 = x+(w-2*d-2*t-1)/2; int x1 = x0+d; int y0 = y+h/2; fl_color(FL_LIGHT3); fl_line(x0, y0, x1, y0+d); fl_yxline(x1, y0+d, y0+t, x1+d+2*t, y0-d); fl_yxline(x1, y0-t, y0-d); fl_color(fl_gray_ramp(0)); fl_line(x0, y0, x1, y0-d); fl_color(FL_DARK3); fl_xyline(x1+1, y0-t, x1+d, y0-d, x1+d+2*t); return 1; }
static void shade_frame(int x, int y, int w, int h, const char *c, Fl_Color bc) { uchar *g = fl_gray_ramp(); int b = strlen(c) / 4 + 1; for (x += b, y += b, w -= 2 * b + 1, h -= 2 * b + 1; b > 1; b --) { // Draw lines around the perimeter of the button, 4 colors per // circuit. fl_color(shade_color(*c++, bc)); fl_line(x, y + h + b, x + w - 1, y + h + b, x + w + b - 1, y + h); fl_color(shade_color(*c++, bc)); fl_line(x + w + b - 1, y + h, x + w + b - 1, y, x + w - 1, y - b); fl_color(shade_color(*c++, bc)); fl_line(x + w - 1, y - b, x, y - b, x - b, y); fl_color(shade_color(*c++, bc)); fl_line(x - b, y, x - b, y + h, x, y + h + b); } }
int start_media_monitor(void) { char buf[132 + 1]; float x; float y; int i; int len; len = 128; s->w = new Fl_Double_Window(465, 400, "IP streaming media monitor"); s->c_right = new Fl_Group(0, 0, 465, 405); s->c_sent = new Fl_Group(0, 0, 465, 200); s->c_sent->box(FL_DOWN_BOX); s->c_sent->align(FL_ALIGN_TOP | FL_ALIGN_INSIDE); s->c_sent->current(); s->canvas_sent = new Ca_Canvas(110, 35, 300, 100, "Packet delays"); s->canvas_sent->box(FL_PLASTIC_DOWN_BOX); s->canvas_sent->color(7); s->canvas_sent->align(FL_ALIGN_TOP); Fl_Group::current()->resizable(s->canvas_sent); s->canvas_sent->border(15); s->sent_x = new Ca_X_Axis(115, 135, 290, 30, "Packet"); s->sent_x->align(FL_ALIGN_BOTTOM); s->sent_x->minimum(0.0); s->sent_x->maximum(500.0); s->sent_x->label_format("%g"); s->sent_x->minor_grid_color(fl_gray_ramp(20)); s->sent_x->major_grid_color(fl_gray_ramp(15)); s->sent_x->label_grid_color(fl_gray_ramp(10)); s->sent_x->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); s->sent_x->minor_grid_style(FL_DOT); s->sent_x->major_step(5); s->sent_x->label_step(1); s->sent_x->axis_align(CA_BOTTOM | CA_LINE); s->sent_x->axis_color(FL_BLACK); s->sent_x->current(); s->sent_y = new Ca_Y_Axis(60, 40, 50, 90, "Delay\n(ms)"); s->sent_y->align(FL_ALIGN_LEFT); s->sent_y->minimum(0.0); s->sent_y->maximum(2000.0); s->sent_y->minor_grid_color(fl_gray_ramp(20)); s->sent_y->major_grid_color(fl_gray_ramp(15)); s->sent_y->label_grid_color(fl_gray_ramp(10)); s->sent_y->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); s->sent_y->minor_grid_style(FL_DOT); s->sent_y->major_step(5); s->sent_y->label_step(1); s->sent_y->axis_color(FL_BLACK); s->sent_y->current(); s->c_sent->end(); s->c_received = new Fl_Group(0, 200, 465, 200); s->c_received->box(FL_DOWN_BOX); s->c_received->align(FL_ALIGN_TOP | FL_ALIGN_INSIDE); s->c_received->current(); s->canvas_received = new Ca_Canvas(110, 235, 300, 100, "Delay spread"); s->canvas_received->box(FL_PLASTIC_DOWN_BOX); s->canvas_received->color(7); s->canvas_received->align(FL_ALIGN_TOP); Fl_Group::current()->resizable(s->canvas_received); s->canvas_received->border(15); s->received_x = new Ca_X_Axis(115, 335, 290, 30, "Delay (ms)"); s->received_x->align(FL_ALIGN_BOTTOM); s->received_x->minimum(0.0); s->received_x->maximum(2000.0); s->received_x->label_format("%g"); s->received_x->minor_grid_color(fl_gray_ramp(20)); s->received_x->major_grid_color(fl_gray_ramp(15)); s->received_x->label_grid_color(fl_gray_ramp(10)); s->received_x->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); s->received_x->minor_grid_style(FL_DOT); s->received_x->major_step(5); s->received_x->label_step(1); s->received_x->axis_align(CA_BOTTOM | CA_LINE); s->received_x->axis_color(FL_BLACK); s->received_x->current(); s->received_y = new Ca_Y_Axis(60, 240, 50, 90, "Freq"); s->received_y->align(FL_ALIGN_LEFT); s->received_y->minimum(0.0); s->received_y->maximum(50.0); s->received_y->minor_grid_color(fl_gray_ramp(20)); s->received_y->major_grid_color(fl_gray_ramp(15)); s->received_y->label_grid_color(fl_gray_ramp(10)); s->received_y->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); s->received_y->minor_grid_style(FL_DOT); s->received_y->major_step(5); s->received_y->label_step(1); s->received_y->axis_color(FL_BLACK); s->received_y->current(); for (i = 0; i < 2000; i++) s->received_delays_plot[2*i] = i; s->received_delays_plot_max = 0.0; s->min_diff = 2000; s->max_diff = 0; s->received_delays = NULL; s->highest_seq_no_seen = -1; for (i = 0; i < 500; i++) s->sent_re_plot[2*i] = i; s->sent_re_plot_min = 99999.0; s->sent_re_plot_max = 0.0; s->sent_re = NULL; s->c_received->end(); s->c_right->end(); Fl_Group::current()->resizable(s->c_right); s->w->end(); s->w->show(); Fl::check(); return 0; }
FL_EXPORT_C(Fl_Color, fl_gray_rampC)(int i){return fl_gray_ramp(i);}
int start_line_model_monitor(int len) { char buf[132 + 1]; float x; float y; int i; w = new Fl_Double_Window(850, 400, "Telephone line model monitor"); c_spec = new Fl_Group(0, 0, 380, 400); c_spec->box(FL_DOWN_BOX); c_spec->align(FL_ALIGN_TOP | FL_ALIGN_INSIDE); canvas_spec = new Ca_Canvas(60, 30, 300, 300, "Spectrum"); canvas_spec->box(FL_PLASTIC_DOWN_BOX); canvas_spec->color(7); canvas_spec->align(FL_ALIGN_TOP); canvas_spec->border(15); spec_freq = new Ca_X_Axis(65, 330, 290, 30, "Freq (Hz)"); spec_freq->align(FL_ALIGN_BOTTOM); spec_freq->minimum(0); spec_freq->maximum(4000); spec_freq->label_format("%g"); spec_freq->minor_grid_color(fl_gray_ramp(20)); spec_freq->major_grid_color(fl_gray_ramp(15)); spec_freq->label_grid_color(fl_gray_ramp(10)); spec_freq->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); spec_freq->minor_grid_style(FL_DOT); spec_freq->major_step(5); spec_freq->label_step(1); spec_freq->axis_color(FL_BLACK); spec_freq->axis_align(CA_BOTTOM | CA_LINE); spec_amp = new Ca_Y_Axis(20, 35, 40, 290, "Amp (dBmO)"); spec_amp->align(FL_ALIGN_LEFT); spec_amp->minimum(-80.0); spec_amp->maximum(10.0); spec_amp->minor_grid_color(fl_gray_ramp(20)); spec_amp->major_grid_color(fl_gray_ramp(15)); spec_amp->label_grid_color(fl_gray_ramp(10)); //spec_amp->grid_visible(CA_MINOR_TICK | CA_MAJOR_TICK | CA_LABEL_GRID | CA_ALWAYS_VISIBLE); spec_amp->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); spec_amp->minor_grid_style(FL_DOT); spec_amp->major_step(5); spec_amp->label_step(1); spec_amp->axis_color(FL_BLACK); spec_amp->current(); c_spec->end(); c_right = new Fl_Group(440, 0, 465, 405); c_can = new Fl_Group(380, 0, 415, 200); c_can->box(FL_DOWN_BOX); c_can->align(FL_ALIGN_TOP | FL_ALIGN_INSIDE); c_can->current(); canvas_can = new Ca_Canvas(460, 35, 300, 100, "??? coefficients"); canvas_can->box(FL_PLASTIC_DOWN_BOX); canvas_can->color(7); canvas_can->align(FL_ALIGN_TOP); Fl_Group::current()->resizable(canvas_can); canvas_can->border(15); can_x = new Ca_X_Axis(465, 135, 290, 30, "Tap"); can_x->align(FL_ALIGN_BOTTOM); can_x->minimum(0.0); can_x->maximum((float) len); can_x->label_format("%g"); can_x->minor_grid_color(fl_gray_ramp(20)); can_x->major_grid_color(fl_gray_ramp(15)); can_x->label_grid_color(fl_gray_ramp(10)); can_x->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); can_x->minor_grid_style(FL_DOT); can_x->major_step(5); can_x->label_step(1); can_x->axis_align(CA_BOTTOM | CA_LINE); can_x->axis_color(FL_BLACK); can_x->current(); can_y = new Ca_Y_Axis(420, 40, 40, 90, "Amp"); can_y->align(FL_ALIGN_LEFT); can_y->minimum(-0.1); can_y->maximum(0.1); can_y->minor_grid_color(fl_gray_ramp(20)); can_y->major_grid_color(fl_gray_ramp(15)); can_y->label_grid_color(fl_gray_ramp(10)); can_y->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); can_y->minor_grid_style(FL_DOT); can_y->major_step(5); can_y->label_step(1); can_y->axis_color(FL_BLACK); can_y->current(); c_can->end(); c_line_model = new Fl_Group(380, 200, 415, 200); c_line_model->box(FL_DOWN_BOX); c_line_model->align(FL_ALIGN_TOP | FL_ALIGN_INSIDE); c_line_model->current(); canvas_line_model = new Ca_Canvas(460, 235, 300, 100, "Line impulse response model"); canvas_line_model->box(FL_PLASTIC_DOWN_BOX); canvas_line_model->color(7); canvas_line_model->align(FL_ALIGN_TOP); Fl_Group::current()->resizable(canvas_line_model); canvas_line_model->border(15); line_model_x = new Ca_X_Axis(465, 335, 290, 30, "Tap"); line_model_x->align(FL_ALIGN_BOTTOM); line_model_x->minimum(0.0); line_model_x->maximum((float) len); line_model_x->label_format("%g"); line_model_x->minor_grid_color(fl_gray_ramp(20)); line_model_x->major_grid_color(fl_gray_ramp(15)); line_model_x->label_grid_color(fl_gray_ramp(10)); line_model_x->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); line_model_x->minor_grid_style(FL_DOT); line_model_x->major_step(5); line_model_x->label_step(1); line_model_x->axis_align(CA_BOTTOM | CA_LINE); line_model_x->axis_color(FL_BLACK); line_model_x->current(); line_model_y = new Ca_Y_Axis(420, 240, 40, 90, "Amp"); line_model_y->align(FL_ALIGN_LEFT); line_model_y->minimum(-0.1); line_model_y->maximum(0.1); line_model_y->minor_grid_color(fl_gray_ramp(20)); line_model_y->major_grid_color(fl_gray_ramp(15)); line_model_y->label_grid_color(fl_gray_ramp(10)); line_model_y->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); line_model_y->minor_grid_style(FL_DOT); line_model_y->major_step(5); line_model_y->label_step(1); line_model_y->axis_color(FL_BLACK); line_model_y->current(); c_line_model->end(); audio_meter = new Fl_Audio_Meter(810, 40, 10, 250, ""); audio_meter->box(FL_PLASTIC_UP_BOX); audio_meter->type(FL_VERT_AUDIO_METER); c_right->end(); Fl_Group::current()->resizable(c_right); w->end(); w->show(); #if defined(HAVE_FFTW3_H) p = fftw_plan_dft_1d(1024, in, out, FFTW_BACKWARD, FFTW_ESTIMATE); for (i = 0; i < 1024; i++) { in[i][0] = 0.0; in[i][1] = 0.0; } #else p = fftw_create_plan(1024, FFTW_BACKWARD, FFTW_ESTIMATE); for (i = 0; i < 1024; i++) { in[i].re = 0.0; in[i].im = 0.0; } #endif in_ptr = 0; Fl::check(); return 0; }
qam_monitor_t *qam_monitor_init(float constel_width, float constel_scaling, const char *tag) { char buf[132 + 1]; float x; float y; qam_monitor_t *s; if ((s = (qam_monitor_t *) malloc(sizeof(*s))) == NULL) return NULL; s->w = new Fl_Double_Window(905, 400, (tag) ? tag : "QAM monitor"); s->constel_scaling = 1.0/constel_scaling; s->c_const = new Fl_Group(0, 0, 380, 400); s->c_const->box(FL_DOWN_BOX); s->c_const->align(FL_ALIGN_TOP | FL_ALIGN_INSIDE); s->canvas_const = new Ca_Canvas(60, 30, 300, 300, "Constellation"); s->canvas_const->box(FL_PLASTIC_DOWN_BOX); s->canvas_const->color(7); s->canvas_const->align(FL_ALIGN_TOP); s->canvas_const->border(15); s->sig_i = new Ca_X_Axis(65, 330, 290, 30, "I"); s->sig_i->align(FL_ALIGN_BOTTOM); s->sig_i->minimum(-constel_width); s->sig_i->maximum(constel_width); s->sig_i->label_format("%g"); s->sig_i->minor_grid_color(fl_gray_ramp(20)); s->sig_i->major_grid_color(fl_gray_ramp(15)); s->sig_i->label_grid_color(fl_gray_ramp(10)); s->sig_i->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); s->sig_i->minor_grid_style(FL_DOT); s->sig_i->major_step(5); s->sig_i->label_step(1); s->sig_i->axis_color(FL_BLACK); s->sig_i->axis_align(CA_BOTTOM | CA_LINE); s->sig_q = new Ca_Y_Axis(20, 35, 40, 290, "Q"); s->sig_q->align(FL_ALIGN_LEFT); s->sig_q->minimum(-constel_width); s->sig_q->maximum(constel_width); s->sig_q->minor_grid_color(fl_gray_ramp(20)); s->sig_q->major_grid_color(fl_gray_ramp(15)); s->sig_q->label_grid_color(fl_gray_ramp(10)); //s->sig_q->grid_visible(CA_MINOR_TICK | CA_MAJOR_TICK | CA_LABEL_GRID | CA_ALWAYS_VISIBLE); s->sig_q->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); s->sig_q->minor_grid_style(FL_DOT); s->sig_q->major_step(5); s->sig_q->label_step(1); s->sig_q->axis_color(FL_BLACK); s->sig_q->current(); s->c_const->end(); s->c_right = new Fl_Group(440, 0, 465, 405); s->c_eq = new Fl_Group(380, 0, 265, 200); s->c_eq->box(FL_DOWN_BOX); s->c_eq->align(FL_ALIGN_TOP | FL_ALIGN_INSIDE); s->c_eq->current(); s->canvas_eq = new Ca_Canvas(460, 35, 150, 100, "Equalizer"); s->canvas_eq->box(FL_PLASTIC_DOWN_BOX); s->canvas_eq->color(7); s->canvas_eq->align(FL_ALIGN_TOP); Fl_Group::current()->resizable(s->canvas_eq); s->canvas_eq->border(15); s->eq_x = new Ca_X_Axis(465, 135, 140, 30, "Symbol"); s->eq_x->align(FL_ALIGN_BOTTOM); s->eq_x->minimum(-8.0); s->eq_x->maximum(8.0); s->eq_x->label_format("%g"); s->eq_x->minor_grid_color(fl_gray_ramp(20)); s->eq_x->major_grid_color(fl_gray_ramp(15)); s->eq_x->label_grid_color(fl_gray_ramp(10)); s->eq_x->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); s->eq_x->minor_grid_style(FL_DOT); s->eq_x->major_step(5); s->eq_x->label_step(1); s->eq_x->axis_align(CA_BOTTOM | CA_LINE); s->eq_x->axis_color(FL_BLACK); s->eq_x->current(); s->eq_y = new Ca_Y_Axis(420, 40, 40, 90, "Amp"); s->eq_y->align(FL_ALIGN_LEFT); s->eq_y->minimum(-0.1); s->eq_y->maximum(0.1); s->eq_y->minor_grid_color(fl_gray_ramp(20)); s->eq_y->major_grid_color(fl_gray_ramp(15)); s->eq_y->label_grid_color(fl_gray_ramp(10)); s->eq_y->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); s->eq_y->minor_grid_style(FL_DOT); s->eq_y->major_step(5); s->eq_y->label_step(1); s->eq_y->axis_color(FL_BLACK); s->eq_y->current(); s->c_eq->end(); s->c_symbol_track = new Fl_Group(380, 200, 525, 200); s->c_symbol_track->box(FL_DOWN_BOX); s->c_symbol_track->align(FL_ALIGN_TOP | FL_ALIGN_INSIDE); s->c_symbol_track->current(); s->canvas_track = new Ca_Canvas(490, 235, 300, 100, "Symbol and carrier tracking"); s->canvas_track->box(FL_PLASTIC_DOWN_BOX); s->canvas_track->color(7); s->canvas_track->align(FL_ALIGN_TOP); Fl_Group::current()->resizable(s->canvas_track); s->canvas_track->border(15); s->track_x = new Ca_X_Axis(495, 335, 290, 30, "Time (symbols)"); s->track_x->align(FL_ALIGN_BOTTOM); s->track_x->minimum(0.0); s->track_x->maximum(2400.0*5.0); s->track_x->label_format("%g"); s->track_x->minor_grid_color(fl_gray_ramp(20)); s->track_x->major_grid_color(fl_gray_ramp(15)); s->track_x->label_grid_color(fl_gray_ramp(10)); s->track_x->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); s->track_x->minor_grid_style(FL_DOT); s->track_x->major_step(5); s->track_x->label_step(1); s->track_x->axis_align(CA_BOTTOM | CA_LINE); s->track_x->axis_color(FL_BLACK); s->track_x->current(); s->symbol_track_y = new Ca_Y_Axis(420, 240, 70, 90, "Cor"); s->symbol_track_y->align(FL_ALIGN_LEFT); s->symbol_track_y->minimum(-0.1); s->symbol_track_y->maximum(0.1); s->symbol_track_y->minor_grid_color(fl_gray_ramp(20)); s->symbol_track_y->major_grid_color(fl_gray_ramp(15)); s->symbol_track_y->label_grid_color(fl_gray_ramp(10)); s->symbol_track_y->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); s->symbol_track_y->minor_grid_style(FL_DOT); s->symbol_track_y->major_step(5); s->symbol_track_y->label_step(1); s->symbol_track_y->axis_color(FL_RED); s->symbol_track_y->current(); s->carrier_y = new Ca_Y_Axis(790, 240, 70, 90, "Freq"); s->carrier_y->align(FL_ALIGN_RIGHT); s->carrier_y->minimum(-0.1); s->carrier_y->maximum(0.1); s->carrier_y->minor_grid_color(fl_gray_ramp(20)); s->carrier_y->major_grid_color(fl_gray_ramp(15)); s->carrier_y->label_grid_color(fl_gray_ramp(10)); s->carrier_y->grid_visible(CA_LABEL_GRID | CA_ALWAYS_VISIBLE); s->carrier_y->minor_grid_style(FL_DOT); s->carrier_y->major_step(5); s->carrier_y->label_step(1); s->carrier_y->axis_align(CA_RIGHT); s->carrier_y->axis_color(FL_BLUE); s->carrier_y->current(); s->c_symbol_track->end(); s->audio_meter = new Fl_Audio_Meter(672, 10, 16, 150, ""); s->audio_meter->box(FL_PLASTIC_UP_BOX); s->audio_meter->type(FL_VERT_AUDIO_METER); s->audio_level = new Fl_Output(650, 170, 60, 20, ""); s->audio_level->textsize(10); s->c_right->end(); Fl_Group::current()->resizable(s->c_right); s->w->end(); s->w->show(); s->next_constel_point = 0; s->constel_window = 10000; s->carrier_points = 0; s->carrier_ptr = 0; s->carrier_window = 100; s->symbol_track_points = 0; s->symbol_track_window = 10000; Fl::check(); return s; }
void Fl_Combo_Box_Panel::draw() { bool selected = focused(); int X=0, Y=0, W=w(), H=h(); if(selected) { // Draw using combo's focus_box m_comboBox->focus_box()->draw(X,Y,W,H, m_comboBox->selection_color(), FL_SELECTED); } else { // Draw using combo's BG fl_push_clip(X,Y,W,H); m_comboBox->draw_group_box(); fl_pop_clip(); } box()->inset(X,Y,W,H); int dd = 2; Fl_ListView *lv = m_comboBox->listview(); Fl_ListView_Item *item = lv->item(); if (!item) return; Fl_ListView_ItemExt *item_ext = 0; if(item->type()==Fl_ListView_Item::EXT) item_ext = (Fl_ListView_ItemExt *)item; if (!item_ext) { fl_font(lv->text_font(), lv->text_size()); } fl_push_clip(X,Y,W,H); Fl_Color text_color; for (unsigned c = 0; c < item->columns(); c++) { if (!lv->visible_col(c)) continue; int ww = lv->column_width(c); fl_push_clip(X+dd, Y, ww-dd, H); if (item_ext) { fl_font(item_ext->label_font(c),item_ext->label_size(c)); text_color = item_ext->label_color(c); } else text_color = m_comboBox->text_color(); if(selected) { // set selection color for text text_color = m_comboBox->selection_text_color(); } fl_color(text_color); fl_draw(item->label(c), X+dd, Y, ww-dd, H, FL_ALIGN_LEFT); fl_pop_clip(); fl_color(fl_gray_ramp(20)); fl_line(X + ww-1, Y, X + ww-1, H); fl_color(fl_gray_ramp(10)); fl_line(X + ww, Y, X + ww, H); X += ww; } fl_pop_clip(); }