<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ProgressBar</title> <link rel="stylesheet" href="style.css" type="text/css"> <meta name="generator" content="DocBook XSL Stylesheets V1.75.1"> <link rel="home" href="index.html" title="Programming with gtkmm"> <link rel="up" href="chapter-misc-widgets.html" title="Chapter 6. Miscellaneous Widgets"> <link rel="prev" href="sec-spinbutton.html" title="SpinButton"> <link rel="next" href="sec-infobar.html" title="InfoBar"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <div class="navheader"> <table width="100%" summary="Navigation header"> <tr><th colspan="3" align="center">ProgressBar</th></tr> <tr> <td width="20%" align="left"> <a accesskey="p" href="sec-spinbutton.html"><img src="icons/prev.png" alt="Prev"></a> </td> <th width="60%" align="center">Chapter 6. Miscellaneous Widgets</th> <td width="20%" align="right"> <a accesskey="n" href="sec-infobar.html"><img src="icons/next.png" alt="Next"></a> </td> </tr> </table> <hr> </div> <div class="sect1" title="ProgressBar"> <div class="titlepage"><div><div><h2 class="title" style="clear: both"> <a name="sec-progressbar"></a>ProgressBar</h2></div></div></div> <p> Progress bars are used to show the status of an ongoing operation. For instance, a <code class="classname">ProgressBar</code> can show how much of a task has been completed. </p> <p> To change the value shown, use the <code class="methodname">set_fraction()</code> method, passing a double between 0 and 1 to provide the new percentage. </p> <p> where <code class="literal">percentage</code> is a number, from 0 to 1, indicating what fraction of the bar should be filled. </p> <p> A <code class="classname">ProgressBar</code>is horizontal and left-to-right by default, but you can change it to a vertical progress bar by using the <code class="methodname">set_orientation()</code> method. </p> <p><a class="ulink" href="http://library.gnome.org/devel/gtkmm/unstable/classGtk_1_1ProgressBar.html" target="_top">Reference</a></p> <div class="sect2" title="Activity Mode"> <div class="titlepage"><div><div><h3 class="title"> <a name="progressbar-activity-mode"></a>Activity Mode</h3></div></div></div> <p> Besides indicating the amount of progress that has occured, the progress bar can also be used to indicate that there is some activity; this is done by placing the progress bar in <span class="emphasis"><em>activity mode</em></span>. In this mode, the progress bar displays a small rectangle which moves back and forth. Activity mode is useful in situations where the progress of an operation cannot be calculated as a value range (e.g., receiving a file of unknown length). </p> <p> To do this, you need to call the <code class="methodname">pulse()</code> method at regular intervals. You can also choose the step size, with the <code class="methodname">set_pulse_step()</code> method. </p> <p> When in continuous mode, the progress bar can also display a configurable text string within its trough, using the <code class="methodname">set_text()</code> method. </p> </div> <div class="sect2" title="Example"> <div class="titlepage"><div><div><h3 class="title"> <a name="progressbar-example"></a>Example</h3></div></div></div> <div class="figure"> <a name="figure-progressbar"></a><p class="title"><b>Figure 6.7. ProgressBar</b></p> <div class="figure-contents"><div class="screenshot"><div><img src="figures/progressbar.png" alt="ProgressBar"></div></div></div> </div> <br class="figure-break"><p><a class="ulink" href="http://git.gnome.org/cgit/gtkmm-documentation/tree/examples/book/progressbar" target="_top">Source Code</a></p> <p>File: <code class="filename">examplewindow.h</code> </p> <pre class="programlisting"> #ifndef GTKMM_EXAMPLEWINDOW_H #define GTKMM_EXAMPLEWINDOW_H #include <gtkmm.h> class ExampleWindow : public Gtk::Window { public: ExampleWindow(); virtual ~ExampleWindow(); protected: //Signal handlers: void on_checkbutton_text(); void on_checkbutton_activity(); void on_checkbutton_orientation(); virtual bool on_timeout(); void on_button_close(); //Child widgets: Gtk::VBox m_VBox; Gtk::Alignment m_Alignment; Gtk::Table m_Table; Gtk::ProgressBar m_ProgressBar; Gtk::HSeparator m_Separator; Gtk::CheckButton m_CheckButton_Text, m_CheckButton_Activity, m_CheckButton_Orientation; Gtk::Button m_Button_Close; int m_connection_id_timeout; bool m_bActivityMode; }; #endif //GTKMM_EXAMPLEWINDOW_H </pre> <p>File: <code class="filename">examplewindow.cc</code> </p> <pre class="programlisting"> #include "examplewindow.h" #include <iostream> ExampleWindow::ExampleWindow() : m_VBox(false, 5), m_Alignment(0.5, 0.5, 0, 0), m_Table(2, 2, true), m_CheckButton_Text("Show text"), m_CheckButton_Activity("Activity mode"), m_CheckButton_Orientation("Right to Left"), m_Button_Close("Close"), m_bActivityMode(false) { set_resizable(); set_title("Gtk::ProgressBar"); m_VBox.set_border_width(10); add(m_VBox); m_VBox.pack_start(m_Alignment, Gtk::PACK_SHRINK, 5); m_Alignment.add(m_ProgressBar); //Add a timer callback to update the value of the progress bar: m_connection_id_timeout = Glib::signal_timeout().connect(sigc::mem_fun(*this, &ExampleWindow::on_timeout), 50 ); m_VBox.pack_start(m_Separator, Gtk::PACK_SHRINK); m_VBox.pack_start(m_Table); //Add a check button to select displaying of the trough text: m_Table.attach(m_CheckButton_Text, 0, 1, 0, 1, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 5, 5); m_CheckButton_Text.signal_clicked().connect(sigc::mem_fun(*this, &ExampleWindow::on_checkbutton_text) ); //Add a check button to select displaying of the trough text: m_Table.attach(m_CheckButton_Activity, 0, 1, 1, 2, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 5, 5); m_CheckButton_Activity.signal_clicked().connect(sigc::mem_fun(*this, &ExampleWindow::on_checkbutton_activity) ); //Add a check button to toggle activity mode: m_Table.attach(m_CheckButton_Orientation, 0, 1, 2, 3, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 5, 5); m_CheckButton_Orientation.signal_clicked().connect(sigc::mem_fun(*this, &ExampleWindow::on_checkbutton_orientation) ); //Add a button to exit the program. m_VBox.pack_start(m_Button_Close, Gtk::PACK_SHRINK); m_Button_Close.signal_clicked().connect(sigc::mem_fun(*this, &ExampleWindow::on_button_close) ); m_Button_Close.set_flags(Gtk::CAN_DEFAULT); m_Button_Close.grab_default(); show_all_children(); } ExampleWindow::~ExampleWindow() { } void ExampleWindow::on_checkbutton_text() { const Glib::ustring text = m_ProgressBar.get_text(); if(!text.empty()) m_ProgressBar.set_text(""); else m_ProgressBar.set_text("some text"); } void ExampleWindow::on_checkbutton_activity() { m_bActivityMode = m_CheckButton_Activity.get_active(); if(m_bActivityMode) m_ProgressBar.pulse(); else m_ProgressBar.set_fraction(0.0); } void ExampleWindow::on_checkbutton_orientation() { switch(m_ProgressBar.get_orientation()) { case Gtk::PROGRESS_LEFT_TO_RIGHT: m_ProgressBar.set_orientation(Gtk::PROGRESS_RIGHT_TO_LEFT); break; case Gtk::PROGRESS_RIGHT_TO_LEFT: m_ProgressBar.set_orientation(Gtk::PROGRESS_LEFT_TO_RIGHT); break; default: break; // do nothing } } void ExampleWindow::on_button_close() { hide(); } /* Update the value of the progress bar so that we get * some movement */ bool ExampleWindow::on_timeout() { if(m_bActivityMode) m_ProgressBar.pulse(); else { double new_val = m_ProgressBar.get_fraction() + 0.01; if(new_val > 1.0) new_val = 0.0; //Set the new value: m_ProgressBar.set_fraction(new_val); } //As this is a timeout function, return true so that it //continues to get called return true; } </pre> <p>File: <code class="filename">main.cc</code> </p> <pre class="programlisting"> #include <gtkmm/main.h> #include "examplewindow.h" int main(int argc, char *argv[]) { Gtk::Main kit(argc, argv); ExampleWindow window; //Shows the window and returns when it is closed. Gtk::Main::run(window); return 0; } </pre> </div> </div> <div class="navfooter"> <hr> <table width="100%" summary="Navigation footer"> <tr> <td width="40%" align="left"> <a accesskey="p" href="sec-spinbutton.html"><img src="icons/prev.png" alt="Prev"></a> </td> <td width="20%" align="center"><a accesskey="u" href="chapter-misc-widgets.html"><img src="icons/up.png" alt="Up"></a></td> <td width="40%" align="right"> <a accesskey="n" href="sec-infobar.html"><img src="icons/next.png" alt="Next"></a> </td> </tr> <tr> <td width="40%" align="left" valign="top">SpinButton </td> <td width="20%" align="center"><a accesskey="h" href="index.html"><img src="icons/home.png" alt="Home"></a></td> <td width="40%" align="right" valign="top"> InfoBar</td> </tr> </table> </div> </body> </html>