Re: help with window widgets



Hi,

You need to step back a second and think about some redesign following some simple guidelines. If, after you've redesigned, your problem doesn't go away, it will, at the very least certainly change its nature.

Basically, you are mixing graphical and event-based programming domains (I think, a little hard to know since it's not obvious if your code follows your specifications precisely or not). For example, do you require a new widget every time to display a new incoming value? In the first instance, I will assume that you require a single widget to display all incoming values. If this is the case, you should try to redesign your program flow thus:

main()
{
	// make ALL widgets necessary for program
	
	// enter while loop to read all values from stdin
		// for each value, update the entry widget to display accordingly
	
	gtk_main();
}

In other words, take all your widget creation out of the while loop, leaving only the reading from stdin and update of your display widget.

That said, as an example, this program will demonstrate output of text to a widget. In the real world of event-driven programs, however, it won't do much, since your mainloop will sit and wait for user events which will never arrive, since there's nothing to do except screen refreshes. Though I can't see the deleted code, so this may not be relevant.

Does/Will your program require reading from standard input for the entirety of its existence? Or will these data be delivered to your program periodically from somewhere else (e.g., a program which has read the voltage from the battery)? Whatever the case, the proper way to deal with this is to create your widgets, enter the main loop, and then wait for events to arrive which require processing. You will need to define the method by which your external program will deliver its information to your display program and accommodate accordingly.

If, on the other hand, your requirements are that each data point instantiates a separate widget for display (as your program currently implies), then try the following: 1) inside your while loop, remove all gtk_widget_show() calls (typically, a call to gtk_widget_show() after each widget is created is unnecessary). 2) at the end of the while loop, make a single call to gtk_widget_show_all(), specifying the top-most widget in the hierarchy created within the while loop.

cheers,

richard


On Nov 13, 2006, at 6:41 AM, ybisou wrote:



Why do you put gtk_widget_show_all and gtk_main calls in the loop? You
should move at least the gtk_main call outside of the loop.

I made some changes but I still can't have the widget to output all the integers coming from the STDIN. Only the first one is on the screen ! I will
appreciate if you could help me, thanks !
Here is a snipet of the code...

// GTK initializations

 int main( int   argc, char *argv[] )
{

  /*  GTK widget setup */

unsigned int val;
char buf[5];

while(read(STDIN_FILENO, &val, sizeof(int))) // here is my problem, I'm not able to actually go through this while loop more than once or is there a way to refresh the windows so their contents could also be refreshed (variables)?
{
	char temp[5];
	//read(STDIN_FILENO, &val, sizeof(int));
	buf[0]=ita(val/100);
	buf[1]=ita((val-((val/100)*100))/10);
	buf[2]='.';
	buf[3]=ita(val-((val/10)*10));
	
	printf(" reading %d",val); //just making sure i'm reading val
	

// --------------------------------------------------------------------
    // Create text entry widget and modify.
// --------------------------------------------------------------------

    text_entry_Widget = gtk_entry_new();

    gtk_widget_modify_text(text_entry_Widget, GTK_STATE_NORMAL,
&colorGreen);
    gtk_widget_modify_base(text_entry_Widget, GTK_STATE_NORMAL,
&colorBlack);

    GtkStyle *style = gtk_widget_get_style(text_entry_Widget);
pango_font_description_set_weight(style->font_desc, PANGO_WEIGHT_BOLD);

    gtk_widget_modify_font(text_entry_Widget, style->font_desc);

int text_width = 5; // Width of field in characters gtk_entry_set_width_chars(GTK_ENTRY(text_entry_Widget), text_width);

    gtk_editable_set_editable(GTK_EDITABLE(text_entry_Widget), FALSE);
    GTK_WIDGET_UNSET_FLAGS(text_entry_Widget, GTK_CAN_FOCUS);


    strcat(buf," V");                    // V for volts after the int
gtk_entry_set_text(GTK_ENTRY(text_entry_Widget), buf); // output the int
value

PangoFontDescription *font_desc = pango_font_description_from_string
("PANGO_STYLE_OBLIQUE,Monospace 30");
    gtk_widget_modify_font (text_entry_Widget, font_desc);
    pango_font_description_free (font_desc);


// --------------------------------------------------------------------


  vbox = gtk_vbox_new (FALSE, 5);
  gtk_box_pack_start (GTK_BOX (vBox_Widget), vbox, FALSE, FALSE, 0);

  frame = gtk_frame_new ("DC Voltages");


  label = gtk_label_new ("\nThis voltage comes from 12 V battery \n"\
			 "It's value should be stable.\n"\
			 "When undervoltage, a signal is generated");

PangoFontDescription *font_desc2 = pango_font_description_from_string
("PANGO_STYLE_OBLIQUE,Monospace 10");
//PangoFontDescription *font_desc2 = pango_font_description_from_string ("PANGO_STYLE_OBLIQUE,PANGO_VARIANT_NORMAL,PANGO_WEIGHT_BOLD,PANGO_STR ETCH_EXPANDED
,Monospace 30");
    gtk_widget_modify_font (label, font_desc2);
    pango_font_description_free (font_desc2);

    gtk_widget_show (label);


  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
  gtk_container_add (GTK_CONTAINER (frame), label);
  gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);


gtk_box_pack_start (GTK_BOX (vbox), text_entry_Widget, NULL, NULL, 0);
    gtk_widget_show (text_entry_Widget);   // show the int value

    gtk_container_add (GTK_CONTAINER (hbox), vBox_Widget);

  text=gtk_text_new(NULL, NULL);
  gtk_widget_show(text);
  gtk_container_add(GTK_CONTAINER(vbox), text);
gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, buffer, strlen (buffer));

	//Text motif

fnt=gdk_font_load("-unknown-Arial-normal-r-normal-*-*-650-96-96-p-0- iso8859-1");

  gtk_text_insert (GTK_TEXT (text), fnt, &text->style->black, NULL,
		   "\nSupports ", -1);

	//creating a seperator
	separator = gtk_hseparator_new ();
	gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 5);
        gtk_widget_show (separator);

	// some other stuff here

}
  gtk_widget_show_all (window);
  gtk_main ();


  close(fd);
  return 0;
}

--
View this message in context: http://www.nabble.com/help-with- window-widgets-tf2615494.html#a7311745
Sent from the Gtk+ - General mailing list archive at Nabble.com.

_______________________________________________
gtk-list mailing list
gtk-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-list





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]