- Complete the ProgressBar API - Fix the CList example code
Mon Feb 22 08:45:10 GMT 1999 Tony Gale <gale@gtk.org> * docs/gtk_tut.sgml: - Complete the ProgressBar API - Fix the CList example code * examples/clist/clist.c, examples/progressbar/progressbar.c: Update from tutorial
This commit is contained in:

committed by
Tony Gale

parent
619ca57c5a
commit
d5aed59bbc
@ -1,3 +1,12 @@
|
|||||||
|
Mon Feb 22 08:45:10 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
|
* docs/gtk_tut.sgml:
|
||||||
|
- Complete the ProgressBar API
|
||||||
|
- Fix the CList example code
|
||||||
|
|
||||||
|
* examples/clist/clist.c, examples/progressbar/progressbar.c:
|
||||||
|
Update from tutorial
|
||||||
|
|
||||||
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
Mon Feb 22 08:45:10 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
|
* docs/gtk_tut.sgml:
|
||||||
|
- Complete the ProgressBar API
|
||||||
|
- Fix the CList example code
|
||||||
|
|
||||||
|
* examples/clist/clist.c, examples/progressbar/progressbar.c:
|
||||||
|
Update from tutorial
|
||||||
|
|
||||||
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
Mon Feb 22 08:45:10 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
|
* docs/gtk_tut.sgml:
|
||||||
|
- Complete the ProgressBar API
|
||||||
|
- Fix the CList example code
|
||||||
|
|
||||||
|
* examples/clist/clist.c, examples/progressbar/progressbar.c:
|
||||||
|
Update from tutorial
|
||||||
|
|
||||||
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
Mon Feb 22 08:45:10 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
|
* docs/gtk_tut.sgml:
|
||||||
|
- Complete the ProgressBar API
|
||||||
|
- Fix the CList example code
|
||||||
|
|
||||||
|
* examples/clist/clist.c, examples/progressbar/progressbar.c:
|
||||||
|
Update from tutorial
|
||||||
|
|
||||||
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
Mon Feb 22 08:45:10 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
|
* docs/gtk_tut.sgml:
|
||||||
|
- Complete the ProgressBar API
|
||||||
|
- Fix the CList example code
|
||||||
|
|
||||||
|
* examples/clist/clist.c, examples/progressbar/progressbar.c:
|
||||||
|
Update from tutorial
|
||||||
|
|
||||||
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
Mon Feb 22 08:45:10 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
|
* docs/gtk_tut.sgml:
|
||||||
|
- Complete the ProgressBar API
|
||||||
|
- Fix the CList example code
|
||||||
|
|
||||||
|
* examples/clist/clist.c, examples/progressbar/progressbar.c:
|
||||||
|
Update from tutorial
|
||||||
|
|
||||||
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
Mon Feb 22 08:45:10 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
|
* docs/gtk_tut.sgml:
|
||||||
|
- Complete the ProgressBar API
|
||||||
|
- Fix the CList example code
|
||||||
|
|
||||||
|
* examples/clist/clist.c, examples/progressbar/progressbar.c:
|
||||||
|
Update from tutorial
|
||||||
|
|
||||||
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
Sun Feb 21 17:44:52 1999 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
* gtk/testgtkrc: Removed check-y/check-n backgrounds -
|
||||||
|
@ -11,7 +11,7 @@ Tony Gale <tt><htmlurl url="mailto:gale@gtk.org"
|
|||||||
name="<gale@gtk.org>"></tt>
|
name="<gale@gtk.org>"></tt>
|
||||||
Ian Main <tt><htmlurl url="mailto:imain@gtk.org"
|
Ian Main <tt><htmlurl url="mailto:imain@gtk.org"
|
||||||
name="<imain@gtk.org>"></tt>,
|
name="<imain@gtk.org>"></tt>,
|
||||||
<date>February 7th, 1999
|
<date>February 21st, 1999
|
||||||
<abstract>
|
<abstract>
|
||||||
This is a tutorial on how to use GTK (the GIMP Toolkit) through its C
|
This is a tutorial on how to use GTK (the GIMP Toolkit) through its C
|
||||||
interface.
|
interface.
|
||||||
@ -3452,6 +3452,13 @@ GtkWidget *gtk_progress_bar_new_with_adjustment( GtkAdjustment *adjustment );
|
|||||||
The second method has the advantage that we can use the adjustment
|
The second method has the advantage that we can use the adjustment
|
||||||
object to specify our own range parameters for the progress bar.
|
object to specify our own range parameters for the progress bar.
|
||||||
|
|
||||||
|
The adjustment of a progress object can be changed dynamically using:
|
||||||
|
|
||||||
|
<tscreen><verb>
|
||||||
|
void gtk_progress_set_adjustment( GtkProgress *progress,
|
||||||
|
GtkAdjustment *adjustment );
|
||||||
|
</verb></tscreen>
|
||||||
|
|
||||||
Now that the progress bar has been created we can use it.
|
Now that the progress bar has been created we can use it.
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
@ -3555,13 +3562,84 @@ format string:
|
|||||||
<item> %l - lower range value
|
<item> %l - lower range value
|
||||||
<item> %u - upper range value
|
<item> %u - upper range value
|
||||||
</itemize>
|
</itemize>
|
||||||
|
|
||||||
|
The displaying of this text string can be toggled using:
|
||||||
|
|
||||||
|
<tscreen><verb>
|
||||||
|
void gtk_progress_set_show_text( GtkProgress *progress,
|
||||||
|
gint show_text );
|
||||||
|
</verb></tscreen>
|
||||||
|
|
||||||
|
The <tt/show_text/ argument is a boolean TRUE/FALSE value. The
|
||||||
|
appearance of the text can be modified further using:
|
||||||
|
|
||||||
|
<tscreen><verb>
|
||||||
|
void gtk_progress_set_text_alignment( GtkProgress *progress,
|
||||||
|
gfloat x_align,
|
||||||
|
gfloat y_align );
|
||||||
|
</verb></tscreen>
|
||||||
|
|
||||||
|
The <tt/x_align/ and <tt/y_align/ arguments take a value between 0.0
|
||||||
|
and 1.0. Their value indicates the position of the text string within
|
||||||
|
the trough. Values of 0.0 for both would place the string in the top
|
||||||
|
left hand corner; values of 0.5 (the default) centres the text, and
|
||||||
|
values of 1.0 places the text in the lower right hand corner.
|
||||||
|
|
||||||
|
The current text setting of a progress object can be retrieved using
|
||||||
|
the current or a specified adjustment value using the following two
|
||||||
|
functions. The character string returned by these functions should be
|
||||||
|
freed by the application (using the g_free() function). These
|
||||||
|
functions return the formatted string that would be displayed within
|
||||||
|
the trough.
|
||||||
|
|
||||||
|
<tscreen><verb>
|
||||||
|
gchar *gtk_progress_get_current_text( GtkProgress *progress );
|
||||||
|
|
||||||
|
gchar *gtk_progress_get_text_from_value( GtkProgress *progress,
|
||||||
|
gfloat value );
|
||||||
|
</verb></tscreen>
|
||||||
|
|
||||||
|
There is yet another way to change the range and value of a progress
|
||||||
|
object using the following function:
|
||||||
|
|
||||||
|
<tscreen><verb>
|
||||||
|
void gtk_progress_configure( GtkProgress *progress,
|
||||||
|
gfloat value,
|
||||||
|
gfloat min,
|
||||||
|
gfloat max );
|
||||||
|
</verb></tscreen>
|
||||||
|
|
||||||
|
This function provides quite a simple interface to the range and value
|
||||||
|
of a progress object.
|
||||||
|
|
||||||
|
The remaining functions can be used to get and set the current value
|
||||||
|
of a progess object in various types and formats:
|
||||||
|
|
||||||
|
<tscreen><verb>
|
||||||
|
void gtk_progress_set_percentage( GtkProgress *progress,
|
||||||
|
gfloat percentage );
|
||||||
|
|
||||||
|
void gtk_progress_set_value( GtkProgress *progress,
|
||||||
|
gfloat value );
|
||||||
|
|
||||||
|
gfloat gtk_progress_get_value( GtkProgress *progress );
|
||||||
|
|
||||||
|
gfloat gtk_progress_get_current_percentage( GtkProgress *progress );
|
||||||
|
|
||||||
|
gfloat gtk_progress_get_percentage_from_value( GtkProgress *progress,
|
||||||
|
gfloat value );
|
||||||
|
</verb></tscreen>
|
||||||
|
|
||||||
|
These functions are pretty self explanatory. The last function uses
|
||||||
|
the the adjustment of the specified progess object to compute the
|
||||||
|
percentage value of the given range value.
|
||||||
|
|
||||||
Progress Bars are usually used with timeouts or other such functions
|
Progress Bars are usually used with timeouts or other such functions
|
||||||
(see section on <ref id="sec_timeouts" name="Timeouts, I/O and Idle
|
(see section on <ref id="sec_timeouts" name="Timeouts, I/O and Idle
|
||||||
Functions">) to give the illusion of multitasking. All will employ the
|
Functions">) to give the illusion of multitasking. All will employ the
|
||||||
gtk_progress_bar_update function in the same manner.
|
gtk_progress_bar_update function in the same manner.
|
||||||
|
|
||||||
Here is an example of the progress bar, updated using timeouts. This
|
Here is an example of the progress bar, updated using timeouts. This
|
||||||
code also shows you how to reset the Progress Bar.
|
code also shows you how to reset the Progress Bar.
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
@ -3582,11 +3660,12 @@ gint progress_timeout( gpointer data )
|
|||||||
gfloat new_val;
|
gfloat new_val;
|
||||||
GtkAdjustment *adj;
|
GtkAdjustment *adj;
|
||||||
|
|
||||||
adj = GTK_PROGRESS (data)->adjustment;
|
|
||||||
|
|
||||||
/* Calculate the value of the progress bar using the
|
/* Calculate the value of the progress bar using the
|
||||||
* value range set in the adjustment object */
|
* value range set in the adjustment object */
|
||||||
new_val = adj->value + 1;
|
|
||||||
|
new_val = gtk_progress_get_value( GTK_PROGRESS(data) ) + 1;
|
||||||
|
|
||||||
|
adj = GTK_PROGRESS (data)->adjustment;
|
||||||
if (new_val > adj->upper)
|
if (new_val > adj->upper)
|
||||||
new_val = adj->lower;
|
new_val = adj->lower;
|
||||||
|
|
||||||
@ -8174,27 +8253,95 @@ gtk_signal_connect(GTK_OBJECT( clist),
|
|||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
/* example-start clist clist.c */
|
/* example-start clist clist.c */
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
/* These are just the prototypes of the various callbacks */
|
/* User clicked the "Add List" button. */
|
||||||
void button_add_clicked( GtkWidget *button, gpointer data);
|
void button_add_clicked( gpointer data )
|
||||||
void button_clear_clicked( GtkWidget *button, gpointer data);
|
{
|
||||||
void button_hide_show_clicked( GtkWidget *button, gpointer data);
|
int indx;
|
||||||
void selection_made( GtkWidget *clist, gint row, gint column,
|
|
||||||
GdkEventButton *event, gpointer data);
|
/* Something silly to add to the list. 4 rows of 2 columns each */
|
||||||
|
gchar *drink[4][2] = { { "Milk", "3 Oz" },
|
||||||
|
{ "Water", "6 l" },
|
||||||
|
{ "Carrots", "2" },
|
||||||
|
{ "Snakes", "55" } };
|
||||||
|
|
||||||
gint main (int argc, gchar *argv[])
|
/* Here we do the actual adding of the text. It's done once for
|
||||||
|
* each row.
|
||||||
|
*/
|
||||||
|
for ( indx=0 ; indx < 4 ; indx++ )
|
||||||
|
gtk_clist_append( (GtkCList *) data, drink[indx]);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* User clicked the "Clear List" button. */
|
||||||
|
void button_clear_clicked( gpointer data )
|
||||||
|
{
|
||||||
|
/* Clear the list using gtk_clist_clear. This is much faster than
|
||||||
|
* calling gtk_clist_remove once for each row.
|
||||||
|
*/
|
||||||
|
gtk_clist_clear( (GtkCList *) data);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The user clicked the "Hide/Show titles" button. */
|
||||||
|
void button_hide_show_clicked( gpointer data )
|
||||||
|
{
|
||||||
|
/* Just a flag to remember the status. 0 = currently visible */
|
||||||
|
static short int flag = 0;
|
||||||
|
|
||||||
|
if (flag == 0)
|
||||||
|
{
|
||||||
|
/* Hide the titles and set the flag to 1 */
|
||||||
|
gtk_clist_column_titles_hide((GtkCList *) data);
|
||||||
|
flag++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Show the titles and reset flag to 0 */
|
||||||
|
gtk_clist_column_titles_show((GtkCList *) data);
|
||||||
|
flag--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we come here, then the user has selected a row in the list. */
|
||||||
|
void selection_made( GtkWidget *clist,
|
||||||
|
gint row,
|
||||||
|
gint column,
|
||||||
|
GdkEventButton *event,
|
||||||
|
gpointer data )
|
||||||
|
{
|
||||||
|
gchar *text;
|
||||||
|
|
||||||
|
/* Get the text that is stored in the selected row and column
|
||||||
|
* which was clicked in. We will receive it as a pointer in the
|
||||||
|
* argument text.
|
||||||
|
*/
|
||||||
|
gtk_clist_get_text(GTK_CLIST(clist), row, column, &text);
|
||||||
|
|
||||||
|
/* Just prints some information about the selected row */
|
||||||
|
g_print("You selected row %d. More specifically you clicked in "
|
||||||
|
"column %d, and the text in this cell is %s\n\n",
|
||||||
|
row, column, text);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main( int argc,
|
||||||
|
gchar *argv[] )
|
||||||
{
|
{
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
GtkWidget *vbox, *hbox;
|
GtkWidget *vbox, *hbox;
|
||||||
GtkWidget *clist;
|
GtkWidget *clist;
|
||||||
GtkWidget *button_add, *button_clear, *button_hide_show;
|
GtkWidget *button_add, *button_clear, *button_hide_show;
|
||||||
gchar *titles[2] = {"Ingredients","Amount"};
|
gchar *titles[2] = { "Ingredients", "Amount" };
|
||||||
|
|
||||||
gtk_init(&argc, &argv);
|
gtk_init(&argc, &argv);
|
||||||
|
|
||||||
|
|
||||||
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_widget_set_usize(GTK_WIDGET(window), 300, 150);
|
gtk_widget_set_usize(GTK_WIDGET(window), 300, 150);
|
||||||
|
|
||||||
@ -8269,77 +8416,6 @@ gint main (int argc, gchar *argv[])
|
|||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* User clicked the "Add List" button. */
|
|
||||||
void button_add_clicked( GtkWidget *button, gpointer data)
|
|
||||||
{
|
|
||||||
int indx;
|
|
||||||
|
|
||||||
/* Something silly to add to the list. 4 rows of 2 columns each */
|
|
||||||
gchar *drink[4][2] = {{"Milk", "3 Oz"},
|
|
||||||
{"Water", "6 l"},
|
|
||||||
{"Carrots", "2"},
|
|
||||||
{"Snakes", "55"}};
|
|
||||||
|
|
||||||
/* Here we do the actual adding of the text. It's done once for
|
|
||||||
* each row.
|
|
||||||
*/
|
|
||||||
for( indx=0; indx < 4; indx++)
|
|
||||||
gtk_clist_append( (GtkCList*) data, drink[indx]);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* User clicked the "Clear List" button. */
|
|
||||||
void button_clear_clicked( GtkWidget *button, gpointer data)
|
|
||||||
{
|
|
||||||
/* Clear the list using gtk_clist_clear. This is much faster than
|
|
||||||
* calling gtk_clist_remove once for each row.
|
|
||||||
*/
|
|
||||||
gtk_clist_clear((GtkCList*) data);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The user clicked the "Hide/Show titles" button. */
|
|
||||||
void button_hide_show_clicked( GtkWidget *button, gpointer data)
|
|
||||||
{
|
|
||||||
/* Just a flag to remember the status. 0 = currently visible */
|
|
||||||
static short int flag = 0;
|
|
||||||
|
|
||||||
if (flag == 0)
|
|
||||||
{
|
|
||||||
/* Hide the titles and set the flag to 1 */
|
|
||||||
gtk_clist_column_titles_hide((GtkCList*) data);
|
|
||||||
flag++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Show the titles and reset flag to 0 */
|
|
||||||
gtk_clist_column_titles_show((GtkCList*) data);
|
|
||||||
flag--;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If we come here, then the user has selected a row in the list. */
|
|
||||||
void selection_made( GtkWidget *clist, gint row, gint column,
|
|
||||||
GdkEventButton *event, gpointer data)
|
|
||||||
{
|
|
||||||
gchar *text;
|
|
||||||
|
|
||||||
/* Get the text that is stored in the selected row and column
|
|
||||||
* which was clicked in. We will receive it as a pointer in the
|
|
||||||
* argument text.
|
|
||||||
*/
|
|
||||||
gtk_clist_get_text(GTK_CLIST(clist), row, column, &text);
|
|
||||||
|
|
||||||
/* Just prints some information about the selected row */
|
|
||||||
g_print("You selected row %d. More specifically you clicked in column %d, and the text in this cell is %s\n\n", row, column, text);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* example-end */
|
/* example-end */
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
@ -8365,7 +8441,7 @@ not derived from GtkList, so you cannot use them interchangeably.
|
|||||||
A GtkTree is created in the usual way, using:
|
A GtkTree is created in the usual way, using:
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
GtkWidget* gtk_tree_new( void );
|
GtkWidget *gtk_tree_new( void );
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
Like the GtkList widget, a GtkTree will simply keep growing as more
|
Like the GtkList widget, a GtkTree will simply keep growing as more
|
||||||
@ -8381,7 +8457,7 @@ explains the gory details of GtkTreeItem. For now, it'll suffice to
|
|||||||
create one, using:
|
create one, using:
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
GtkWidget* gtk_tree_item_new_with_label( gchar *label );
|
GtkWidget *gtk_tree_item_new_with_label( gchar *label );
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
You can then add it to the tree using one of the following (see
|
You can then add it to the tree using one of the following (see
|
||||||
@ -9181,7 +9257,7 @@ menubars. This first function is used to create a new menubar.
|
|||||||
|
|
||||||
<tscreen>
|
<tscreen>
|
||||||
<verb>
|
<verb>
|
||||||
GtkWidget* gtk_menu_bar_new (void);
|
GtkWidget *gtk_menu_bar_new( void );
|
||||||
</verb>
|
</verb>
|
||||||
</tscreen>
|
</tscreen>
|
||||||
|
|
||||||
@ -9190,7 +9266,7 @@ gtk_container_add to pack this into a window, or the box_pack
|
|||||||
functions to pack it into a box - the same as buttons.
|
functions to pack it into a box - the same as buttons.
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
GtkWidget* gtk_menu_new (void);
|
GtkWidget *gtk_menu_new( void );
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
This function returns a pointer to a new menu, it is never actually
|
This function returns a pointer to a new menu, it is never actually
|
||||||
@ -9202,13 +9278,13 @@ The next two calls are used to create menu items that are packed into
|
|||||||
the menu (and menubar).
|
the menu (and menubar).
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
GtkWidget* gtk_menu_item_new (void);
|
GtkWidget *gtk_menu_item_new( void );
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
and
|
and
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
GtkWidget* gtk_menu_item_new_with_label (const char *label);
|
GtkWidget *gtk_menu_item_new_with_label( const char *label );
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
These calls are used to create the menu items that are to be
|
These calls are used to create the menu items that are to be
|
||||||
@ -9278,8 +9354,8 @@ Now we need to associate the menu with <tt/file_item/. This is done
|
|||||||
with the function
|
with the function
|
||||||
|
|
||||||
<tscreen>
|
<tscreen>
|
||||||
void gtk_menu_item_set_submenu (GtkMenuItem *menu_item,
|
void gtk_menu_item_set_submenu( GtkMenuItem *menu_item,
|
||||||
GtkWidget *submenu);
|
GtkWidget *submenu );
|
||||||
</tscreen>
|
</tscreen>
|
||||||
|
|
||||||
So, our example would continue with
|
So, our example would continue with
|
||||||
@ -9292,7 +9368,8 @@ All that is left to do is to add the menu to the menubar, which is
|
|||||||
accomplished using the function
|
accomplished using the function
|
||||||
|
|
||||||
<tscreen>
|
<tscreen>
|
||||||
void gtk_menu_bar_append (GtkMenuBar *menu_bar, GtkWidget *menu_item);
|
void gtk_menu_bar_append( GtkMenuBar *menu_bar,
|
||||||
|
GtkWidget *menu_item );
|
||||||
</tscreen>
|
</tscreen>
|
||||||
|
|
||||||
which in our case looks like this:
|
which in our case looks like this:
|
||||||
@ -9307,7 +9384,7 @@ menus often are, we can use the following function (again on
|
|||||||
menubar.
|
menubar.
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
void gtk_menu_item_right_justify (GtkMenuItem *menu_item);
|
void gtk_menu_item_right_justify( GtkMenuItem *menu_item );
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
Here is a summary of the steps needed to create a menu bar with menus
|
Here is a summary of the steps needed to create a menu bar with menus
|
||||||
@ -9369,7 +9446,8 @@ That should about do it. Let's take a look at an example to help clarify.
|
|||||||
static gint button_press (GtkWidget *, GdkEvent *);
|
static gint button_press (GtkWidget *, GdkEvent *);
|
||||||
static void menuitem_response (gchar *);
|
static void menuitem_response (gchar *);
|
||||||
|
|
||||||
int main (int argc, char *argv[])
|
int main( int argc,
|
||||||
|
char *argv[] )
|
||||||
{
|
{
|
||||||
|
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
@ -9460,7 +9538,7 @@ int main (int argc, char *argv[])
|
|||||||
|
|
||||||
gtk_main ();
|
gtk_main ();
|
||||||
|
|
||||||
return 0;
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Respond to a button-press by posting a menu passed in as widget.
|
/* Respond to a button-press by posting a menu passed in as widget.
|
||||||
@ -9516,8 +9594,8 @@ Here is an example using the GTK item factory.
|
|||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
|
|
||||||
/* Obligatory basic callback */
|
/* Obligatory basic callback */
|
||||||
static void
|
static void print_hello( GtkWidget *w,
|
||||||
print_hello (GtkWidget *w, gpointer data)
|
gpointer data )
|
||||||
{
|
{
|
||||||
g_message ("Hello, World!\n");
|
g_message ("Hello, World!\n");
|
||||||
}
|
}
|
||||||
@ -9560,8 +9638,8 @@ static GtkItemFactoryEntry menu_items[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void
|
void get_main_menu( GtkWidget *window,
|
||||||
get_main_menu (GtkWidget *window, GtkWidget ** menubar)
|
GtkWidget **menubar )
|
||||||
{
|
{
|
||||||
GtkItemFactory *item_factory;
|
GtkItemFactory *item_factory;
|
||||||
GtkAccelGroup *accel_group;
|
GtkAccelGroup *accel_group;
|
||||||
@ -9593,8 +9671,8 @@ get_main_menu (GtkWidget *window, GtkWidget ** menubar)
|
|||||||
*menubar = gtk_item_factory_get_widget (item_factory, "<main>");
|
*menubar = gtk_item_factory_get_widget (item_factory, "<main>");
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int main( int argc,
|
||||||
main (int argc, char *argv[])
|
char *argv[] )
|
||||||
{
|
{
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
GtkWidget *main_vbox;
|
GtkWidget *main_vbox;
|
||||||
@ -9621,13 +9699,13 @@ main (int argc, char *argv[])
|
|||||||
gtk_widget_show (window);
|
gtk_widget_show (window);
|
||||||
gtk_main ();
|
gtk_main ();
|
||||||
|
|
||||||
return 0;
|
return(0);
|
||||||
}
|
}
|
||||||
/* example-end */
|
/* example-end */
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
|
|
||||||
For now, there's only this example. An explanation and lots 'o' comments
|
For now, there's only this example. An explanation and lots 'o' comments
|
||||||
will follow later.
|
will follow later.
|
||||||
|
|
||||||
<!-- ***************************************************************** -->
|
<!-- ***************************************************************** -->
|
||||||
|
@ -11,7 +11,7 @@ Tony Gale <tt><htmlurl url="mailto:gale@gtk.org"
|
|||||||
name="<gale@gtk.org>"></tt>
|
name="<gale@gtk.org>"></tt>
|
||||||
Ian Main <tt><htmlurl url="mailto:imain@gtk.org"
|
Ian Main <tt><htmlurl url="mailto:imain@gtk.org"
|
||||||
name="<imain@gtk.org>"></tt>,
|
name="<imain@gtk.org>"></tt>,
|
||||||
<date>February 7th, 1999
|
<date>February 21st, 1999
|
||||||
<abstract>
|
<abstract>
|
||||||
This is a tutorial on how to use GTK (the GIMP Toolkit) through its C
|
This is a tutorial on how to use GTK (the GIMP Toolkit) through its C
|
||||||
interface.
|
interface.
|
||||||
@ -3452,6 +3452,13 @@ GtkWidget *gtk_progress_bar_new_with_adjustment( GtkAdjustment *adjustment );
|
|||||||
The second method has the advantage that we can use the adjustment
|
The second method has the advantage that we can use the adjustment
|
||||||
object to specify our own range parameters for the progress bar.
|
object to specify our own range parameters for the progress bar.
|
||||||
|
|
||||||
|
The adjustment of a progress object can be changed dynamically using:
|
||||||
|
|
||||||
|
<tscreen><verb>
|
||||||
|
void gtk_progress_set_adjustment( GtkProgress *progress,
|
||||||
|
GtkAdjustment *adjustment );
|
||||||
|
</verb></tscreen>
|
||||||
|
|
||||||
Now that the progress bar has been created we can use it.
|
Now that the progress bar has been created we can use it.
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
@ -3555,13 +3562,84 @@ format string:
|
|||||||
<item> %l - lower range value
|
<item> %l - lower range value
|
||||||
<item> %u - upper range value
|
<item> %u - upper range value
|
||||||
</itemize>
|
</itemize>
|
||||||
|
|
||||||
|
The displaying of this text string can be toggled using:
|
||||||
|
|
||||||
|
<tscreen><verb>
|
||||||
|
void gtk_progress_set_show_text( GtkProgress *progress,
|
||||||
|
gint show_text );
|
||||||
|
</verb></tscreen>
|
||||||
|
|
||||||
|
The <tt/show_text/ argument is a boolean TRUE/FALSE value. The
|
||||||
|
appearance of the text can be modified further using:
|
||||||
|
|
||||||
|
<tscreen><verb>
|
||||||
|
void gtk_progress_set_text_alignment( GtkProgress *progress,
|
||||||
|
gfloat x_align,
|
||||||
|
gfloat y_align );
|
||||||
|
</verb></tscreen>
|
||||||
|
|
||||||
|
The <tt/x_align/ and <tt/y_align/ arguments take a value between 0.0
|
||||||
|
and 1.0. Their value indicates the position of the text string within
|
||||||
|
the trough. Values of 0.0 for both would place the string in the top
|
||||||
|
left hand corner; values of 0.5 (the default) centres the text, and
|
||||||
|
values of 1.0 places the text in the lower right hand corner.
|
||||||
|
|
||||||
|
The current text setting of a progress object can be retrieved using
|
||||||
|
the current or a specified adjustment value using the following two
|
||||||
|
functions. The character string returned by these functions should be
|
||||||
|
freed by the application (using the g_free() function). These
|
||||||
|
functions return the formatted string that would be displayed within
|
||||||
|
the trough.
|
||||||
|
|
||||||
|
<tscreen><verb>
|
||||||
|
gchar *gtk_progress_get_current_text( GtkProgress *progress );
|
||||||
|
|
||||||
|
gchar *gtk_progress_get_text_from_value( GtkProgress *progress,
|
||||||
|
gfloat value );
|
||||||
|
</verb></tscreen>
|
||||||
|
|
||||||
|
There is yet another way to change the range and value of a progress
|
||||||
|
object using the following function:
|
||||||
|
|
||||||
|
<tscreen><verb>
|
||||||
|
void gtk_progress_configure( GtkProgress *progress,
|
||||||
|
gfloat value,
|
||||||
|
gfloat min,
|
||||||
|
gfloat max );
|
||||||
|
</verb></tscreen>
|
||||||
|
|
||||||
|
This function provides quite a simple interface to the range and value
|
||||||
|
of a progress object.
|
||||||
|
|
||||||
|
The remaining functions can be used to get and set the current value
|
||||||
|
of a progess object in various types and formats:
|
||||||
|
|
||||||
|
<tscreen><verb>
|
||||||
|
void gtk_progress_set_percentage( GtkProgress *progress,
|
||||||
|
gfloat percentage );
|
||||||
|
|
||||||
|
void gtk_progress_set_value( GtkProgress *progress,
|
||||||
|
gfloat value );
|
||||||
|
|
||||||
|
gfloat gtk_progress_get_value( GtkProgress *progress );
|
||||||
|
|
||||||
|
gfloat gtk_progress_get_current_percentage( GtkProgress *progress );
|
||||||
|
|
||||||
|
gfloat gtk_progress_get_percentage_from_value( GtkProgress *progress,
|
||||||
|
gfloat value );
|
||||||
|
</verb></tscreen>
|
||||||
|
|
||||||
|
These functions are pretty self explanatory. The last function uses
|
||||||
|
the the adjustment of the specified progess object to compute the
|
||||||
|
percentage value of the given range value.
|
||||||
|
|
||||||
Progress Bars are usually used with timeouts or other such functions
|
Progress Bars are usually used with timeouts or other such functions
|
||||||
(see section on <ref id="sec_timeouts" name="Timeouts, I/O and Idle
|
(see section on <ref id="sec_timeouts" name="Timeouts, I/O and Idle
|
||||||
Functions">) to give the illusion of multitasking. All will employ the
|
Functions">) to give the illusion of multitasking. All will employ the
|
||||||
gtk_progress_bar_update function in the same manner.
|
gtk_progress_bar_update function in the same manner.
|
||||||
|
|
||||||
Here is an example of the progress bar, updated using timeouts. This
|
Here is an example of the progress bar, updated using timeouts. This
|
||||||
code also shows you how to reset the Progress Bar.
|
code also shows you how to reset the Progress Bar.
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
@ -3582,11 +3660,12 @@ gint progress_timeout( gpointer data )
|
|||||||
gfloat new_val;
|
gfloat new_val;
|
||||||
GtkAdjustment *adj;
|
GtkAdjustment *adj;
|
||||||
|
|
||||||
adj = GTK_PROGRESS (data)->adjustment;
|
|
||||||
|
|
||||||
/* Calculate the value of the progress bar using the
|
/* Calculate the value of the progress bar using the
|
||||||
* value range set in the adjustment object */
|
* value range set in the adjustment object */
|
||||||
new_val = adj->value + 1;
|
|
||||||
|
new_val = gtk_progress_get_value( GTK_PROGRESS(data) ) + 1;
|
||||||
|
|
||||||
|
adj = GTK_PROGRESS (data)->adjustment;
|
||||||
if (new_val > adj->upper)
|
if (new_val > adj->upper)
|
||||||
new_val = adj->lower;
|
new_val = adj->lower;
|
||||||
|
|
||||||
@ -8174,27 +8253,95 @@ gtk_signal_connect(GTK_OBJECT( clist),
|
|||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
/* example-start clist clist.c */
|
/* example-start clist clist.c */
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
/* These are just the prototypes of the various callbacks */
|
/* User clicked the "Add List" button. */
|
||||||
void button_add_clicked( GtkWidget *button, gpointer data);
|
void button_add_clicked( gpointer data )
|
||||||
void button_clear_clicked( GtkWidget *button, gpointer data);
|
{
|
||||||
void button_hide_show_clicked( GtkWidget *button, gpointer data);
|
int indx;
|
||||||
void selection_made( GtkWidget *clist, gint row, gint column,
|
|
||||||
GdkEventButton *event, gpointer data);
|
/* Something silly to add to the list. 4 rows of 2 columns each */
|
||||||
|
gchar *drink[4][2] = { { "Milk", "3 Oz" },
|
||||||
|
{ "Water", "6 l" },
|
||||||
|
{ "Carrots", "2" },
|
||||||
|
{ "Snakes", "55" } };
|
||||||
|
|
||||||
gint main (int argc, gchar *argv[])
|
/* Here we do the actual adding of the text. It's done once for
|
||||||
|
* each row.
|
||||||
|
*/
|
||||||
|
for ( indx=0 ; indx < 4 ; indx++ )
|
||||||
|
gtk_clist_append( (GtkCList *) data, drink[indx]);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* User clicked the "Clear List" button. */
|
||||||
|
void button_clear_clicked( gpointer data )
|
||||||
|
{
|
||||||
|
/* Clear the list using gtk_clist_clear. This is much faster than
|
||||||
|
* calling gtk_clist_remove once for each row.
|
||||||
|
*/
|
||||||
|
gtk_clist_clear( (GtkCList *) data);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The user clicked the "Hide/Show titles" button. */
|
||||||
|
void button_hide_show_clicked( gpointer data )
|
||||||
|
{
|
||||||
|
/* Just a flag to remember the status. 0 = currently visible */
|
||||||
|
static short int flag = 0;
|
||||||
|
|
||||||
|
if (flag == 0)
|
||||||
|
{
|
||||||
|
/* Hide the titles and set the flag to 1 */
|
||||||
|
gtk_clist_column_titles_hide((GtkCList *) data);
|
||||||
|
flag++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Show the titles and reset flag to 0 */
|
||||||
|
gtk_clist_column_titles_show((GtkCList *) data);
|
||||||
|
flag--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we come here, then the user has selected a row in the list. */
|
||||||
|
void selection_made( GtkWidget *clist,
|
||||||
|
gint row,
|
||||||
|
gint column,
|
||||||
|
GdkEventButton *event,
|
||||||
|
gpointer data )
|
||||||
|
{
|
||||||
|
gchar *text;
|
||||||
|
|
||||||
|
/* Get the text that is stored in the selected row and column
|
||||||
|
* which was clicked in. We will receive it as a pointer in the
|
||||||
|
* argument text.
|
||||||
|
*/
|
||||||
|
gtk_clist_get_text(GTK_CLIST(clist), row, column, &text);
|
||||||
|
|
||||||
|
/* Just prints some information about the selected row */
|
||||||
|
g_print("You selected row %d. More specifically you clicked in "
|
||||||
|
"column %d, and the text in this cell is %s\n\n",
|
||||||
|
row, column, text);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main( int argc,
|
||||||
|
gchar *argv[] )
|
||||||
{
|
{
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
GtkWidget *vbox, *hbox;
|
GtkWidget *vbox, *hbox;
|
||||||
GtkWidget *clist;
|
GtkWidget *clist;
|
||||||
GtkWidget *button_add, *button_clear, *button_hide_show;
|
GtkWidget *button_add, *button_clear, *button_hide_show;
|
||||||
gchar *titles[2] = {"Ingredients","Amount"};
|
gchar *titles[2] = { "Ingredients", "Amount" };
|
||||||
|
|
||||||
gtk_init(&argc, &argv);
|
gtk_init(&argc, &argv);
|
||||||
|
|
||||||
|
|
||||||
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_widget_set_usize(GTK_WIDGET(window), 300, 150);
|
gtk_widget_set_usize(GTK_WIDGET(window), 300, 150);
|
||||||
|
|
||||||
@ -8269,77 +8416,6 @@ gint main (int argc, gchar *argv[])
|
|||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* User clicked the "Add List" button. */
|
|
||||||
void button_add_clicked( GtkWidget *button, gpointer data)
|
|
||||||
{
|
|
||||||
int indx;
|
|
||||||
|
|
||||||
/* Something silly to add to the list. 4 rows of 2 columns each */
|
|
||||||
gchar *drink[4][2] = {{"Milk", "3 Oz"},
|
|
||||||
{"Water", "6 l"},
|
|
||||||
{"Carrots", "2"},
|
|
||||||
{"Snakes", "55"}};
|
|
||||||
|
|
||||||
/* Here we do the actual adding of the text. It's done once for
|
|
||||||
* each row.
|
|
||||||
*/
|
|
||||||
for( indx=0; indx < 4; indx++)
|
|
||||||
gtk_clist_append( (GtkCList*) data, drink[indx]);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* User clicked the "Clear List" button. */
|
|
||||||
void button_clear_clicked( GtkWidget *button, gpointer data)
|
|
||||||
{
|
|
||||||
/* Clear the list using gtk_clist_clear. This is much faster than
|
|
||||||
* calling gtk_clist_remove once for each row.
|
|
||||||
*/
|
|
||||||
gtk_clist_clear((GtkCList*) data);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The user clicked the "Hide/Show titles" button. */
|
|
||||||
void button_hide_show_clicked( GtkWidget *button, gpointer data)
|
|
||||||
{
|
|
||||||
/* Just a flag to remember the status. 0 = currently visible */
|
|
||||||
static short int flag = 0;
|
|
||||||
|
|
||||||
if (flag == 0)
|
|
||||||
{
|
|
||||||
/* Hide the titles and set the flag to 1 */
|
|
||||||
gtk_clist_column_titles_hide((GtkCList*) data);
|
|
||||||
flag++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Show the titles and reset flag to 0 */
|
|
||||||
gtk_clist_column_titles_show((GtkCList*) data);
|
|
||||||
flag--;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If we come here, then the user has selected a row in the list. */
|
|
||||||
void selection_made( GtkWidget *clist, gint row, gint column,
|
|
||||||
GdkEventButton *event, gpointer data)
|
|
||||||
{
|
|
||||||
gchar *text;
|
|
||||||
|
|
||||||
/* Get the text that is stored in the selected row and column
|
|
||||||
* which was clicked in. We will receive it as a pointer in the
|
|
||||||
* argument text.
|
|
||||||
*/
|
|
||||||
gtk_clist_get_text(GTK_CLIST(clist), row, column, &text);
|
|
||||||
|
|
||||||
/* Just prints some information about the selected row */
|
|
||||||
g_print("You selected row %d. More specifically you clicked in column %d, and the text in this cell is %s\n\n", row, column, text);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* example-end */
|
/* example-end */
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
@ -8365,7 +8441,7 @@ not derived from GtkList, so you cannot use them interchangeably.
|
|||||||
A GtkTree is created in the usual way, using:
|
A GtkTree is created in the usual way, using:
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
GtkWidget* gtk_tree_new( void );
|
GtkWidget *gtk_tree_new( void );
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
Like the GtkList widget, a GtkTree will simply keep growing as more
|
Like the GtkList widget, a GtkTree will simply keep growing as more
|
||||||
@ -8381,7 +8457,7 @@ explains the gory details of GtkTreeItem. For now, it'll suffice to
|
|||||||
create one, using:
|
create one, using:
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
GtkWidget* gtk_tree_item_new_with_label( gchar *label );
|
GtkWidget *gtk_tree_item_new_with_label( gchar *label );
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
You can then add it to the tree using one of the following (see
|
You can then add it to the tree using one of the following (see
|
||||||
@ -9181,7 +9257,7 @@ menubars. This first function is used to create a new menubar.
|
|||||||
|
|
||||||
<tscreen>
|
<tscreen>
|
||||||
<verb>
|
<verb>
|
||||||
GtkWidget* gtk_menu_bar_new (void);
|
GtkWidget *gtk_menu_bar_new( void );
|
||||||
</verb>
|
</verb>
|
||||||
</tscreen>
|
</tscreen>
|
||||||
|
|
||||||
@ -9190,7 +9266,7 @@ gtk_container_add to pack this into a window, or the box_pack
|
|||||||
functions to pack it into a box - the same as buttons.
|
functions to pack it into a box - the same as buttons.
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
GtkWidget* gtk_menu_new (void);
|
GtkWidget *gtk_menu_new( void );
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
This function returns a pointer to a new menu, it is never actually
|
This function returns a pointer to a new menu, it is never actually
|
||||||
@ -9202,13 +9278,13 @@ The next two calls are used to create menu items that are packed into
|
|||||||
the menu (and menubar).
|
the menu (and menubar).
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
GtkWidget* gtk_menu_item_new (void);
|
GtkWidget *gtk_menu_item_new( void );
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
and
|
and
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
GtkWidget* gtk_menu_item_new_with_label (const char *label);
|
GtkWidget *gtk_menu_item_new_with_label( const char *label );
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
These calls are used to create the menu items that are to be
|
These calls are used to create the menu items that are to be
|
||||||
@ -9278,8 +9354,8 @@ Now we need to associate the menu with <tt/file_item/. This is done
|
|||||||
with the function
|
with the function
|
||||||
|
|
||||||
<tscreen>
|
<tscreen>
|
||||||
void gtk_menu_item_set_submenu (GtkMenuItem *menu_item,
|
void gtk_menu_item_set_submenu( GtkMenuItem *menu_item,
|
||||||
GtkWidget *submenu);
|
GtkWidget *submenu );
|
||||||
</tscreen>
|
</tscreen>
|
||||||
|
|
||||||
So, our example would continue with
|
So, our example would continue with
|
||||||
@ -9292,7 +9368,8 @@ All that is left to do is to add the menu to the menubar, which is
|
|||||||
accomplished using the function
|
accomplished using the function
|
||||||
|
|
||||||
<tscreen>
|
<tscreen>
|
||||||
void gtk_menu_bar_append (GtkMenuBar *menu_bar, GtkWidget *menu_item);
|
void gtk_menu_bar_append( GtkMenuBar *menu_bar,
|
||||||
|
GtkWidget *menu_item );
|
||||||
</tscreen>
|
</tscreen>
|
||||||
|
|
||||||
which in our case looks like this:
|
which in our case looks like this:
|
||||||
@ -9307,7 +9384,7 @@ menus often are, we can use the following function (again on
|
|||||||
menubar.
|
menubar.
|
||||||
|
|
||||||
<tscreen><verb>
|
<tscreen><verb>
|
||||||
void gtk_menu_item_right_justify (GtkMenuItem *menu_item);
|
void gtk_menu_item_right_justify( GtkMenuItem *menu_item );
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
Here is a summary of the steps needed to create a menu bar with menus
|
Here is a summary of the steps needed to create a menu bar with menus
|
||||||
@ -9369,7 +9446,8 @@ That should about do it. Let's take a look at an example to help clarify.
|
|||||||
static gint button_press (GtkWidget *, GdkEvent *);
|
static gint button_press (GtkWidget *, GdkEvent *);
|
||||||
static void menuitem_response (gchar *);
|
static void menuitem_response (gchar *);
|
||||||
|
|
||||||
int main (int argc, char *argv[])
|
int main( int argc,
|
||||||
|
char *argv[] )
|
||||||
{
|
{
|
||||||
|
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
@ -9460,7 +9538,7 @@ int main (int argc, char *argv[])
|
|||||||
|
|
||||||
gtk_main ();
|
gtk_main ();
|
||||||
|
|
||||||
return 0;
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Respond to a button-press by posting a menu passed in as widget.
|
/* Respond to a button-press by posting a menu passed in as widget.
|
||||||
@ -9516,8 +9594,8 @@ Here is an example using the GTK item factory.
|
|||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
|
|
||||||
/* Obligatory basic callback */
|
/* Obligatory basic callback */
|
||||||
static void
|
static void print_hello( GtkWidget *w,
|
||||||
print_hello (GtkWidget *w, gpointer data)
|
gpointer data )
|
||||||
{
|
{
|
||||||
g_message ("Hello, World!\n");
|
g_message ("Hello, World!\n");
|
||||||
}
|
}
|
||||||
@ -9560,8 +9638,8 @@ static GtkItemFactoryEntry menu_items[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void
|
void get_main_menu( GtkWidget *window,
|
||||||
get_main_menu (GtkWidget *window, GtkWidget ** menubar)
|
GtkWidget **menubar )
|
||||||
{
|
{
|
||||||
GtkItemFactory *item_factory;
|
GtkItemFactory *item_factory;
|
||||||
GtkAccelGroup *accel_group;
|
GtkAccelGroup *accel_group;
|
||||||
@ -9593,8 +9671,8 @@ get_main_menu (GtkWidget *window, GtkWidget ** menubar)
|
|||||||
*menubar = gtk_item_factory_get_widget (item_factory, "<main>");
|
*menubar = gtk_item_factory_get_widget (item_factory, "<main>");
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int main( int argc,
|
||||||
main (int argc, char *argv[])
|
char *argv[] )
|
||||||
{
|
{
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
GtkWidget *main_vbox;
|
GtkWidget *main_vbox;
|
||||||
@ -9621,13 +9699,13 @@ main (int argc, char *argv[])
|
|||||||
gtk_widget_show (window);
|
gtk_widget_show (window);
|
||||||
gtk_main ();
|
gtk_main ();
|
||||||
|
|
||||||
return 0;
|
return(0);
|
||||||
}
|
}
|
||||||
/* example-end */
|
/* example-end */
|
||||||
</verb></tscreen>
|
</verb></tscreen>
|
||||||
|
|
||||||
|
|
||||||
For now, there's only this example. An explanation and lots 'o' comments
|
For now, there's only this example. An explanation and lots 'o' comments
|
||||||
will follow later.
|
will follow later.
|
||||||
|
|
||||||
<!-- ***************************************************************** -->
|
<!-- ***************************************************************** -->
|
||||||
|
@ -1,26 +1,94 @@
|
|||||||
/* example-start clist clist.c */
|
/* example-start clist clist.c */
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
/* These are just the prototypes of the various callbacks */
|
/* User clicked the "Add List" button. */
|
||||||
void button_add_clicked( GtkWidget *button, gpointer data);
|
void button_add_clicked( gpointer data )
|
||||||
void button_clear_clicked( GtkWidget *button, gpointer data);
|
{
|
||||||
void button_hide_show_clicked( GtkWidget *button, gpointer data);
|
int indx;
|
||||||
void selection_made( GtkWidget *clist, gint row, gint column,
|
|
||||||
GdkEventButton *event, gpointer data);
|
/* Something silly to add to the list. 4 rows of 2 columns each */
|
||||||
|
gchar *drink[4][2] = { { "Milk", "3 Oz" },
|
||||||
|
{ "Water", "6 l" },
|
||||||
|
{ "Carrots", "2" },
|
||||||
|
{ "Snakes", "55" } };
|
||||||
|
|
||||||
gint main (int argc, gchar *argv[])
|
/* Here we do the actual adding of the text. It's done once for
|
||||||
|
* each row.
|
||||||
|
*/
|
||||||
|
for ( indx=0 ; indx < 4 ; indx++ )
|
||||||
|
gtk_clist_append( (GtkCList *) data, drink[indx]);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* User clicked the "Clear List" button. */
|
||||||
|
void button_clear_clicked( gpointer data )
|
||||||
|
{
|
||||||
|
/* Clear the list using gtk_clist_clear. This is much faster than
|
||||||
|
* calling gtk_clist_remove once for each row.
|
||||||
|
*/
|
||||||
|
gtk_clist_clear( (GtkCList *) data);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The user clicked the "Hide/Show titles" button. */
|
||||||
|
void button_hide_show_clicked( gpointer data )
|
||||||
|
{
|
||||||
|
/* Just a flag to remember the status. 0 = currently visible */
|
||||||
|
static short int flag = 0;
|
||||||
|
|
||||||
|
if (flag == 0)
|
||||||
|
{
|
||||||
|
/* Hide the titles and set the flag to 1 */
|
||||||
|
gtk_clist_column_titles_hide((GtkCList *) data);
|
||||||
|
flag++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Show the titles and reset flag to 0 */
|
||||||
|
gtk_clist_column_titles_show((GtkCList *) data);
|
||||||
|
flag--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we come here, then the user has selected a row in the list. */
|
||||||
|
void selection_made( GtkWidget *clist,
|
||||||
|
gint row,
|
||||||
|
gint column,
|
||||||
|
GdkEventButton *event,
|
||||||
|
gpointer data )
|
||||||
|
{
|
||||||
|
gchar *text;
|
||||||
|
|
||||||
|
/* Get the text that is stored in the selected row and column
|
||||||
|
* which was clicked in. We will receive it as a pointer in the
|
||||||
|
* argument text.
|
||||||
|
*/
|
||||||
|
gtk_clist_get_text(GTK_CLIST(clist), row, column, &text);
|
||||||
|
|
||||||
|
/* Just prints some information about the selected row */
|
||||||
|
g_print("You selected row %d. More specifically you clicked in "
|
||||||
|
"column %d, and the text in this cell is %s\n\n",
|
||||||
|
row, column, text);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main( int argc,
|
||||||
|
gchar *argv[] )
|
||||||
{
|
{
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
GtkWidget *vbox, *hbox;
|
GtkWidget *vbox, *hbox;
|
||||||
GtkWidget *clist;
|
GtkWidget *clist;
|
||||||
GtkWidget *button_add, *button_clear, *button_hide_show;
|
GtkWidget *button_add, *button_clear, *button_hide_show;
|
||||||
gchar *titles[2] = {"Ingredients","Amount"};
|
gchar *titles[2] = { "Ingredients", "Amount" };
|
||||||
|
|
||||||
gtk_init(&argc, &argv);
|
gtk_init(&argc, &argv);
|
||||||
|
|
||||||
|
|
||||||
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_widget_set_usize(GTK_WIDGET(window), 300, 150);
|
gtk_widget_set_usize(GTK_WIDGET(window), 300, 150);
|
||||||
|
|
||||||
@ -95,75 +163,4 @@ gint main (int argc, gchar *argv[])
|
|||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* User clicked the "Add List" button. */
|
|
||||||
void button_add_clicked( GtkWidget *button, gpointer data)
|
|
||||||
{
|
|
||||||
int indx;
|
|
||||||
|
|
||||||
/* Something silly to add to the list. 4 rows of 2 columns each */
|
|
||||||
gchar *drink[4][2] = {{"Milk", "3 Oz"},
|
|
||||||
{"Water", "6 l"},
|
|
||||||
{"Carrots", "2"},
|
|
||||||
{"Snakes", "55"}};
|
|
||||||
|
|
||||||
/* Here we do the actual adding of the text. It's done once for
|
|
||||||
* each row.
|
|
||||||
*/
|
|
||||||
for( indx=0; indx < 4; indx++)
|
|
||||||
gtk_clist_append( (GtkCList*) data, drink[indx]);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* User clicked the "Clear List" button. */
|
|
||||||
void button_clear_clicked( GtkWidget *button, gpointer data)
|
|
||||||
{
|
|
||||||
/* Clear the list using gtk_clist_clear. This is much faster than
|
|
||||||
* calling gtk_clist_remove once for each row.
|
|
||||||
*/
|
|
||||||
gtk_clist_clear((GtkCList*) data);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The user clicked the "Hide/Show titles" button. */
|
|
||||||
void button_hide_show_clicked( GtkWidget *button, gpointer data)
|
|
||||||
{
|
|
||||||
/* Just a flag to remember the status. 0 = currently visible */
|
|
||||||
static short int flag = 0;
|
|
||||||
|
|
||||||
if (flag == 0)
|
|
||||||
{
|
|
||||||
/* Hide the titles and set the flag to 1 */
|
|
||||||
gtk_clist_column_titles_hide((GtkCList*) data);
|
|
||||||
flag++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Show the titles and reset flag to 0 */
|
|
||||||
gtk_clist_column_titles_show((GtkCList*) data);
|
|
||||||
flag--;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If we come here, then the user has selected a row in the list. */
|
|
||||||
void selection_made( GtkWidget *clist, gint row, gint column,
|
|
||||||
GdkEventButton *event, gpointer data)
|
|
||||||
{
|
|
||||||
gchar *text;
|
|
||||||
|
|
||||||
/* Get the text that is stored in the selected row and column
|
|
||||||
* which was clicked in. We will receive it as a pointer in the
|
|
||||||
* argument text.
|
|
||||||
*/
|
|
||||||
gtk_clist_get_text(GTK_CLIST(clist), row, column, &text);
|
|
||||||
|
|
||||||
/* Just prints some information about the selected row */
|
|
||||||
g_print("You selected row %d. More specifically you clicked in column %d, and the text in this cell is %s\n\n", row, column, text);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* example-end */
|
/* example-end */
|
||||||
|
@ -15,11 +15,12 @@ gint progress_timeout( gpointer data )
|
|||||||
gfloat new_val;
|
gfloat new_val;
|
||||||
GtkAdjustment *adj;
|
GtkAdjustment *adj;
|
||||||
|
|
||||||
adj = GTK_PROGRESS (data)->adjustment;
|
|
||||||
|
|
||||||
/* Calculate the value of the progress bar using the
|
/* Calculate the value of the progress bar using the
|
||||||
* value range set in the adjustment object */
|
* value range set in the adjustment object */
|
||||||
new_val = adj->value + 1;
|
|
||||||
|
new_val = gtk_progress_get_value( GTK_PROGRESS(data) ) + 1;
|
||||||
|
|
||||||
|
adj = GTK_PROGRESS (data)->adjustment;
|
||||||
if (new_val > adj->upper)
|
if (new_val > adj->upper)
|
||||||
new_val = adj->lower;
|
new_val = adj->lower;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user